Why does old nodes do not work in new build

A parameterized doubly curve surface was rationalized into triangulated surfaces in previous dynamo builds ( the blue geometry ) . But the lunchbox triangle grid by face node no longer works in the 2023 build. How can we make the node work again ? Thank you

Luchbox has not been maintained for Dynamo for a while. APIs have moved on since Revit 2017.

You will probably need to recreate this functionality using out of the box nodes or an alternate package.

image

So this was created using Revit 2019. worked well then. and now when trying to use in R 2023 , it fails. Is there other node package similar to this one by LunchBox ?

I will say this to the community and Autodesk here : what’s the point of developing a design flow / method if 2 years down the line the functionality is taken away ? its like helping someone up a tree and then pulling the ladder away. Poor show. Gives zero confidence to such tooling.

In order:

APIs for all software packages are updated from release to release and sometimes that will break things developed on top of it. Revit 2019 to Revit 2023 is 4 releases.

Thy Synthesize package seems to have incorporated not just Lunchbox, but many others- you could try that, but be aware that THAT developer hasn’t updated for a while because he states the code base needs a major update.

The package developers and most of the people who answer questions here are volunteers that contribute their time and effort to the community for free.

If you are making dynamo scripts, YOU are now a developer who needs to keep their tools up to date!

The Lunchbox code has been open sourced for anyone to take on updating:
https://bitbucket.org/provingground-io/lunchbox-for-dynamo/src/master/

4 Likes

Your anger is misdirected. Autodesk not Dynamo caused lunchbox to retire. This was done entirely by ProvingGround unilaterally. Most other package authors keep things moving along much longer than that (see Rhythm, Clockwork, Archilab, etc.).

Also, if you built the graph two years ago, then why did you decide to build off a package that was deprecated four years before that? Things for that package are very clearly marked as not maintained. It is as if you built something off Office ‘98 and now you are expecting it to work in Office ‘28… they are two different things and as such the bandaids which held them together years after the previous update eventually break. Every software development platform has such considerations to make - it is called technical debt, and as a developer you need to learn how to balance such benefits relative to the upkeep cost (which you are discounting entirely).

I’ll have a look at it tomorrow, but likely the nodes you want are in pattern toolkit, by updating Python, or in finding a similar function in another package.

3 Likes

I had no idea that this existed! I’ll have to dig in.
image

Unfortunately for the O.P., there is not a direct substitution, but there are many options.

1 Like

From any pattern point you can apply whatever geometry you might like. There is some great documentation for it in the Alias help documents, and some great YouTube videos as well.

2 Likes

Thanks for the note. There should be Rules and Regulations in place to avoid such things & address our concerns as consumers. For us senior PMs , we would simply put a Hold on our teams not to use dynamo work flows in the design process if it is a hindrance, and fast & loose . We’ll check out the link. Thanks.

We are an architectural practice, not developers. Thanks

Thank you, we’ll look for the above nodes.

But you’re using a programming tool, which means you are developing software.

Best to not tell the staff as they’ll ask for a raise.

2 Likes

It’s open source… Meaning, stuff done for free, given for free…

I’m a little shocked you’re complaining about free stuff.

Saying, “don’t use Dynamo” is not the route to go. You’re misunderstanding the basic concept of what Dynamo is and how it works. I’d suggest a little more investment in the process (and the people who’ve built your graphs).

Dynamo, if used correctly can save days, even weeks from your workflows. Saying it’s a hindrance is akin to complaining about hammers hurting your thumb if your aim is bad.

5 Likes

This might help some who are looking for triangular paneling nodes. Revit also has some VERY strong tools for this out of the box if you make forms in the adaptive component or massing environment.

Offset Triangle Paneling
########################################
############## Properties ##############
########################################
__author__ = 'Jacob Small'
__version__ = '0.1.0'
__description__ = "Produce set of quad panels with a triangular division line on the surface."
__DynamoBuilds__ = "2.18"
__ReleaseNotes__ = "Requires the Proof of concept only. Not thuroughly tested - test carefully before implementing in production."
__Dependancies__ = "None"
__Copyright__ = "2024, Autodesk Inc."
__license__ = "Apache 3.0"

########################################
### Configure the Python environment ###
########################################
### standard imports ###
import sys #add the sys class to the Python environment so we can work with the sys objects
import clr #add the CLR (common language runtime) class to the Python environment so we can work with .net libraries
import math #add the Math class to the Python environment so we can do math stuff
### basic Dynamo imports ###
clr.AddReference('ProtoGeometry') #add the Dynamo geometry library to the CLR
from Autodesk.DesignScript import Geometry as DG #add the Dynamo geometry class using the alias DG, to ensure no overlap between class calls in Revit or Dynamo

#########################################
###### Global variables and inputs ######
#########################################
#the surface to panelize
dist = IN[1] #the distance to calculate panels on
tris = [] #the final triangles for use

uCnt = math.ceil(DG.Curve.ByIsoCurveOnSurface(surf,0,0).Length/dist*2+1) #calculate the number of U verticies
vCnt = math.ceil(DG.Curve.ByIsoCurveOnSurface(surf,1,0).Length/dist*2+1) #calculate the number of V verticies


for i in range(uCnt): #for each index in the number of U vertexes
    u = i/uCnt #build the U parameter
    uUp = (i+1)/uCnt #get the subsequent U value
    uSet = [u,uUp,u,u,uUp,uUp] #build the set of U values
    for j in range(vCnt): #for each index in the number of V vertexes
        v = j/vCnt #build the V parameter
        vUp = (j+1)/vCnt #get the subsequent V parameter
        vSet = [v,vUp,vUp,v,v,vUp] #buil the set of V values
        pnts = [surf.PointAtParameter(params[0],params[1]) for params in zip(uSet, vSet)] #build the points list from the U and V parameter sets
        tri1 = Polygon.ByPoints(pnts[0:3]) #build a polygon from the first 3 points
        tri2 = Polygon.ByPoints(pnts[3:6]) #build a polygon from the second 3 points
        tris.append(tri1.Patch()) #patch the first polygon into a surface and append it to the triangles list
        tris.append(tri2.Patch()) #patch the second polygon into a surface and append it to the triangles list

#########################################
##### Return the results to Dynamo ######
#########################################
OUT = tris #sends triangles list back to the Dynamo environment
Triangulated Quad Paneling
########################################
############## Properties ##############
########################################
__author__ = 'Jacob Small'
__version__ = '0.1.0'
__description__ = "Produce triangular panels on the surface."
__DynamoBuilds__ = "2.18"
__ReleaseNotes__ = "Requires the Proof of concept only. Not thuroughly tested - test carefully before implementing in production."
__Dependancies__ = "None"
__Copyright__ = "2024, Autodesk Inc."
__license__ = "Apache 3.0"

########################################
### Configure the Python environment ###
########################################
### standard imports ###
import sys #add the sys class to the Python environment so we can work with the sys objects
import clr #add the CLR (common language runtime) class to the Python environment so we can work with .net libraries
import math #add the Math class to the Python environment so we can do math stuff
### basic Dynamo imports ###
clr.AddReference('ProtoGeometry') #add the Dynamo geometry library to the CLR
from Autodesk.DesignScript import Geometry as DG #add the Dynamo geometry class using the alias DG, to ensure no overlap between class calls in Revit or Dynamo

#########################################
###### Global variables and inputs ######
#########################################
surf = IN[0] #the surface to panelize
dist = IN[1] #the distance to calculate panels on
tris = [] #the final triangles for use

uCnt = math.ceil(DG.Curve.ByIsoCurveOnSurface(surf,0,0).Length/dist*2+1) #calculate the number of U verticies
vCnt = math.ceil(DG.Curve.ByIsoCurveOnSurface(surf,1,0).Length/dist*2+1) #calculate the number of V verticies

step = 0 #set the step to 0
for i in range(vCnt): #for each index in the range of V counts
    off = step%2 #check if this is an even or odd step
    v0 = i/vCnt #get the current V parameter
    v1 = (i+1)/vCnt #get the next V parameter
    if off == 1: #if off is odd
        vSet = [v0,v1,v1,v0,v1,v0] #build the list of V parameters
        for j in range(len(vSet)): #for every V parameter
            if vSet[j]>1:vSet[j] = 1 #if the V is over 1 reduce to 1
            if vSet[j]<0: vSet[j] = 0 #if V is less than 0, increase to 0
        for j in range(uCnt+3): #for each item in the U count
            if j%2 == off: pass #if the J value is the same as the offset value, skip it
            else: #otherwise
                offParam = off/uCnt #set the offset parameter by taking the offset and dividing it by the number of U parameters
                u0 = (j)/uCnt+offParam #get the current U value as a parameter and add the offset parameter
                u1 = (j+1)/uCnt+offParam #get the next U value as a parameter and add the offset parameter
                u2 = (j-1)/uCnt+offParam #get the previous U value as a parameter and add the offset parameter
                u3 = (j-2)/uCnt+offParam #get the U value two before the current as a parameter and add the offset parameter
                uSet = [u0,u1,u2,u0,u2,u3] #build the list of U parameters
                for k in range(len(uSet)): #for each index in the U set
                    if uSet[k]>1: uSet[k] = 1 #if the parameter is more than 1 reduce to 1
                    if uSet[k]<0: uSet[k] = 0 #if the parameter is less than 0 increase to 0
                pnts = [surf.PointAtParameter(params[0],params[1]) for params in zip(uSet,vSet)] #build the list of points from the U and V parameter sets
                try: tris.append(DG.Polygon.ByPoints(pnts[0:3]).Patch()) #try to build a polygon from the first three points, patch it and add it to the triangles list
                except: pass #if that fails pass
                try: tris.append(DG.Polygon.ByPoints(pnts[3:6]).Patch()) #try to build a polygon from the second 3 points, patch it and add it to the triangles list
                except: pass #if that fails pass
    else: #if the offset is even
        vSet = [v0,v0,v1,v0,v1,v1] #build the list of V parameters
        for j in range(len(vSet)): #for every V parameter
            if vSet[j]>1:vSet[j] = 1 #if the V is over 1 reduce to 1
            if vSet[j]<0: vSet[j] = 0 #if V is less than 0, increase to 0
        for j in range(uCnt+3): #for each item in the U count
            if j%2 == off: pass #if the J value is the same as the offset value, skip it
            else:  #otherwise
                u0 = (j-1)/uCnt #get the previous U value as a parameter
                u1 = (j+1)/uCnt #get the next U value as a parameter
                u2 = (j)/uCnt #get the current U value as a parameter
                u3 = (j-2)/uCnt #get the U value two before the current as a parameter and add the offset parameter
                uSet = [u0,u1,u2,u0,u2,u3] #build the list of U parameters
                for k in range(len(uSet)): #for each index in the U set
                    if uSet[k]>1: uSet[k] = 1 #if the parameter is more than 1 reduce to 1
                    if uSet[k]<0: uSet[k] = 0 #if the parameter is less than 0 increase to 0
                pnts = [surf.PointAtParameter(params[0],params[1]) for params in zip(uSet,vSet)] #build the list of points from the U and V parameter sets
                try: tris.append(DG.Polygon.ByPoints(pnts[0:3]).Patch()) #try to build a polygon from the first three points, patch it and add it to the triangles list
                except: pass #if that fails pass
                try: tris.append(DG.Polygon.ByPoints(pnts[3:6]).Patch()) #try to build a polygon from the second 3 points, patch it and add it to the triangles list
                except: pass #if that fails pass
    step+=1 #increment the step by 1

#########################################
##### Return the results to Dynamo ######
#########################################
OUT = tris #sends triangles list back to the Dynamo environment

No guarantee it will work for anyone, but it’s well documented so hopefully anyone who wants to learn the tool they’re using for production work can likely make it fit their specific needs.

4 Likes

I am the one who built the graph and CAD CAM ed it. We know Exactly what we are talking about Companies shouldn’t be allowed to publish nodes if the functionality is pulled in the next season. There should be proper rules and regulations established.

Again…
Companies did NOT publish the nodes…

Open source…

Nice work on that installation!

I’ll state this again as clearly as I can. Neither Autodesk nor Dynamo blocked this package from being maintained. Complaining here is like complaining to Walmart about a bad experience you had at target.

I recommend you reach out to Proving Ground - the company’ who’s technology you decided to utilize without confirming it’s long term suitability.

This line of argument is not helping your customer/ consumer. This should be escalated to managerial levels who actually make the policies. A company should be flagged if they do not maintain the nodes they have published into a package. We will refrain from using Walmart metaphors as we are not into silly season of arguments. Be professional in your response. Thank you

By this logic if a company doesn’t commit to building software for windows 2030 they shouldn’t be allowed to develop for windows at all…

Or telling an architect the doesn’t needs to meet todays code and the code which will be released in 2030…

But you’re missing the point. There is no customer. People make these nodes for free and share them. They have no obligation to maintain them. You’re lucky that theres some people that do maintain their nodes. You aren’t giving them any money to. They’re sharing things they’ve made to make our lives easier and they learn from the process. Be grateful they share the tools for free.

You can use the basic nodes within dynamo if you want more stability as they’re more likely to work across other versions. but you have less functionality with that as the out of the box tools don’t cover everything you may need. Or learn python.

At the moment you’re complaining to a community that does all this in their own time, for free, and have no affiliation with dynamo and Autodesk but they do figure out the methods to make it work and share that knowledge.

5 Likes

That would be you. You are engaging in practices utilizing open source content that is under no obligation or contract to maintain or be held responsible for anything they release to the general public. You are responsible for deciding whether your reliance on free content is worth the risk of something like this happening.

You seem to be under the assumption that there is either a EULA that is not being upheld or that one just doesn’t exist. The fact of the matter is most of these packages do have licensing agreements and they are between you and the developer. The agreement being that you can generally use their contents freely but at your own risk. By downloading their packages and using their content you agreed to be responsible for its continued maintenance within your environment.

3 Likes