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.
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/
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.
I had no idea that this existed! Iâll have to dig in.
Unfortunately for the O.P., there is not a direct substitution, but there are many options.
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.
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.
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.
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.
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âŚ
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.
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.