in with the names translated back into paths. It seems to be fairly similar to the way David's upcoming Geometry Cache that Danny mentioned will function.
Now I just have to figure out what to do with your right pinky!
Secondly, in working with trees in general, I have come up with a number of clusters of my own that simplify frequent tasks. In particular many of them are designed to eliminate the use of the Path Mapper, which I find to be a clumsy tool because it has to be updated every time there is a change in the tree structure fed into it.
Maybe you will find some of them useful. I have attached them all in the definition called "Andrew's Tree Utilities"...
1. Match Path - Given two sets of data with N total items, assign the path structure from one list to the other.
2. Assign Paths - Given a flat set of data and a flat list of paths, format the data items into the specified tree structure.
3. Partial Flatten - Equivalent to a Path Mapper from {A;B;C;D} to {A;B;C}, except it takes an integer value for the number of "levels" to eliminate, and works regardless of the input structure. (i.e. could be {A;B;C} or {0;0;0;A;0;0;B;0;C}
4. Flatten one level - same as above, but defaults to a single level of flattening. I use this one in almost every definition I make.
5. Clip Tree - this reduces a "jagged" set of paths ({0;0} and {0;0;0} and {0;1} etc.), such as are produced by many of the intersection components (the intersections that exist get another level of hierarchy where the nulls remain in the original tree structure) to the overlap among the paths. Equivalent to Path Mapping {A;B}->{A;B} and {A;B;C}->{A;B} but works regardless of the input structure.
…
I'm facing a quite strange issue with an "intermediate" script (that counts branches on a per "node" basis).
Let's describe first why this "intermediate" script is required:
As you can see the "main" script provides points/lines et all in non identical data trees (obvious: since the path structure depends upon if a surface is open or closed). Thus if we need to "post process" (iterate correctly through branches, that is) these trees (in a variety of scripts) we need a way to count branches on a per "node" basis.
This is what this (WIP) script does :
And now the strange issue:
The first function finds the max path dimension ( i.e. for path {a;b;c;d} dimension is 4). Then this value is passed to other functions as argument and life goes on:
The function is really simple:
Now choose this as test tree (works OK: max path dimension=3):
Then switch to the crazy tree (works OK, max path dimension=4):
Then switch back to the initial tree (Oops : max path dimension=4 instead of 3)
Maybe has to do with the exception handling here:
best, the jelly fish
…
gh, when I bake, the geometry suddenly exists in rhino.
Second, I can seem to figure out how to set default numeric values in the component.
Protected Overrides Sub RegisterInputParams(pManager As Grasshopper.Kernel.GH_Component.GH_InputParamManager)
pManager.AddPointParameter("Focal Point", "FP", "The focal point", GH_ParamAccess.item)
pManager.AddNumberParameter("Focal Point Horiz Dist", "D", "Focal point distance from performance boundary", GH_ParamAccess.item)
pManager.AddNumberParameter("Focal Point Height", "H", "Focal point height above performance boundary", GH_ParamAccess.item)
pManager.AddPointParameter("First Row Start Point", "FR", "Location of first row in tiered seating", GH_ParamAccess.item)
pManager.AddNumberParameter("First Row Horiz Dist", "FRD", "First row distance from performance boundary", GH_ParamAccess.item)
pManager.AddNumberParameter("First Row Height", "FRH", "First row height above performance boundary", GH_ParamAccess.item)
pManager.AddNumberParameter("C Value", "C", "C value", GH_ParamAccess.item)
pManager.AddNumberParameter("Row Width", "RW", "Row width", GH_ParamAccess.item)
pManager.AddIntegerParameter("Number of Rows", "RN", "Number of Rows", GH_ParamAccess.item)
pManager.AddIntegerParameter("Construction Tolerance", "CT", "Construction Tolerance: 1=1in, 2=1/2in, 4=1/4in, 8=1/8in", GH_ParamAccess.item)
pManager.AddNumberParameter("Max Riser Height", "MR", "Maximum riser height allowed", GH_ParamAccess.item)
pManager.AddGeometryParameter("Spectator", "S", "Seated/Standing spectator", GH_ParamAccess.item)
End Sub
Protected Overrides Sub RegisterOutputParams(pManager As Grasshopper.Kernel.GH_Component.GH_OutputParamManager)
pManager.AddLineParameter("Sightlines", "SL", "Sightlines", GH_ParamAccess.list)
pManager.AddLineParameter("C Value", "CL", "Line represents C value height", GH_ParamAccess.list)
pManager.AddLineParameter("Ground Line", "GL", "Ground Line", GH_ParamAccess.list)
pManager.AddLineParameter("Tier tread", "TR", "Line represents tier treads", GH_ParamAccess.list)
pManager.AddLineParameter("Risers", "RI", "Line represents risers", GH_ParamAccess.list)
pManager.AddGeometryParameter("Spectators", "SP", "Seated Standing Spectators", GH_ParamAccess.list)
End Sub
Protected Overrides Sub SolveInstance(DA As IGH_DataAccess)
Dim newLine As New List(Of Line)
Dim newCValue As New List(Of Line)
Dim rowWidthLineList As New List(Of Line)
Dim floorLineList As New List(Of Line)
Dim riserLineList As New List(Of Line)
Dim leghtList As New List(Of String)
Dim newSeated As New List(Of GeometryBase)
Dim inputPoint As Point3d
If (Not DA.GetData(0, inputPoint)) Then Return
Dim viewPointY As Double
If (Not DA.GetData(1, viewPointY)) Then Return
Dim viewPointZ As Double
If (Not DA.GetData(2, viewPointZ)) Then Return
Dim firstRowPoint As Point3d
If (Not DA.GetData(3, firstRowPoint)) Then Return
Dim firstRowY As Double
If (Not DA.GetData(4, firstRowY)) Then Return
Dim firstRowZ As Double
If (Not DA.GetData(5, firstRowZ)) Then Return
Dim cValue As Double
If (Not DA.GetData(6, cValue)) Then Return
Dim rowWidth As Double
If (Not DA.GetData(7, rowWidth)) Then Return
Dim numberOfRows As Integer
If (Not DA.GetData(8, numberOfRows)) Then Return
Dim M As Integer
If (Not DA.GetData(9, M)) Then Return
Dim maxHeight As Double
If (Not DA.GetData(10, maxHeight)) Then Return
Dim seated As GeometryBase
If (Not DA.GetData(11, seated)) Then Return
Call addNewRow(newLine, newCValue, inputPoint, viewPointY, viewPointZ, firstRowPoint, firstRowY, firstRowZ, cValue, numberOfRows, rowWidth, rowWidthLineList, floorLineList, riserLineList, M, maxHeight, seated, newSeated)
DA.SetDataList(0, newLine)
DA.SetDataList(1, newCValue)
DA.SetDataList(2, rowWidthLineList)
DA.SetDataList(3, floorLineList)
DA.SetDataList(4, riserLineList)
DA.SetDataList(5, newSeated)
End Sub
Public Sub addNewRow(---constructor----)
---additional code----
end Sub…
o it would cause troubles with unfolding and fabricating... that's why I used Extrude point component- it will give you similar result, but all surfaces are planar.. you can control extrusion direction with a tip point in rhino...
2)I changed tagging so every tube has 8 points form list A and 8 points from list B... first number of tag is a number of point within one tube... last number of the tag is order of tubes (I draw a little picture in GH, hope you'll understand)...I think original way of tagging wasn't really usefull.. but you can change tagging by yourself...
3) the definition is really messy, sorry about that, but it's just quite complicated task...
4)if you find some incorrect order of tagging, use the slider that controls Shift List component ... it will shift tagging..
5) if you won't be using this definition or find some better way, pleeeease don't tell me - I'll jump out the window :D ... it took me whole day to make it work :D
6)I can't guarantee you anything- I hope it works, but if not - at least I tried... so check everything (especially order of tags and points) twice before you fabricate it.. or print few tubes and make them paper first..
7)there is a part of original definition, that is not useful anymore.. I left it there, but you can delete it (I called it "UNUSED PARTS OF ORIGINAL FILE")
..good luck
Dimitri…
e. We know you want to concentrate on your design, rethink the spaces, the material and more other beautiful and important topics. You will learn the power of parametric design in examples, challenges and develop your own systems to optimize your work, make changes, variations and convert your design into a full BIM model in real time : )
Who should take the course?
Everybody who is new, beginner or excited about Algorithmic design and the Rhino Inside Revit game changer development. The skill level of the workshop is BEGINNER.
The Workshop finish with a Discussion + Virtual Beers with PAZ Academy ;D !
https://pazacademy.com/workshops/rhino-inside-revit-3h-online/…
Rhino (groups of curves) and I want to distribute them with the pattern in the ABBCABC format (I want to change the pattern later so I need it in string format).
I have managed to write the code to read the string (using case command) but I dont know how to copy and move the objects. How do I reference the curves? As BRep, curves, polylines or objects? This is what I have done so far:
Dim move As New Vector3d Dim textLen As Integer Dim i As Integer Dim ch As Char
Dim proba As String
Proba = " "
move.X = 0 move.Y = 0 move.Z = 0
textLen = Len(text)
For i = 1 To textLen Dim t(i) As curve ch = Mid (text, i, 1) move.Y = i * d Select Case ch Case "A" t(i) = A.duplicate A.Transform(transform.Translation(move)) proba = proba + "*A" Case "B" proba = proba + "*B" Case "C" proba = proba + "*C" End Select
print(proba)
Next
I have to add that this function (transform.translation(move)) didn't give any results.
Thanks in advance …
h a loft operation later on.
I've read some topics in the forum regarding offsetting, but it seems that no one have had this problem (very surprisingly I'd say).
This is what I'm doing:
a) I have a non-convex, closed polyline in the XY plane (the native curve being referenced from rhino). Let's call it CURVE A
b) I rotate and move CURVE A to a different plane (obtaining CURVE B).
c) I offset CURVE B, and now it has more segments and points than CURVE A (basically, it creates the segments that would be required to close the shape if it had been offset segment by segment instead than as a whole)
d) when I loft these curves - CURVE A and CURVE B, it gets messy (since the different curves have different segment count)
I've tried a lot of workarounds:
1 - Offset CURVE A on XY a certain amount, and then offset it back, obtaining CURVE A 2.0. It doesn't work, since CURVE A and CURVE A 2.0 have the same topology, so the final loft is still messy
2 - Offset CURVE A on XY without offsetting it back: It works, but I need to maintain the original shape at the base of the resulting surface (after the loft operation described earlier). I thought that just scaling the resulting brep would do the trick, but then I realized it doesn't.
3 - Using CURVE B (the curve that later will be lofted with CURVE A) to finds its closest point on CURVE A, and then re-creating the original curve with this new points (CURVE A 3.0): Doesn't work on all cases...
So that's it I think. I'm really lost with this, so any help will be very much appreciated. …
surface between 2 cross-listed series of points which happen to be "Divides" of the edges of the 3D surface (some kind of planar geodesics if you want).
To do so, I am extracting the intersections between the 3D surface and a series of planes that are rotated (with an angular increment defined as precision) around an axis defined by the straight line between the points.
Hence I end up with a bunch of planar curves. I need to extract them and order them into lists (1 list per pair of points) to extract the shortest curve between each pair of points.
If the first list of point is numbered: 1, 2, 3, 4..... & the second list is lablelled a, b, c, d.....
I can't find a way to extract the shortest point curve of the list between
1 and a, and between 1 and b, and between 1 and c, ... and between 2 and a, and between 2 and b, ...
I think the problem would be fairly easy to solve if I could use VB or Python or any code but I dont know how to code and I am in quite a rush to hand the project in..
Also, I have been using a Python component downloaded from this forum which evaluates if a point is on a curve and returns the point. I modified the code so that it returns the Curve instead of the pt.
If you guys have an idea how to solve this, you would clearly be my saviour :)
Here are a 3dm, the gh and the python component. I have also been using the Kangaroo component that kills duplicate curves..
…
r planet Utopia?
2. In what sort of animal these "shaders" are to be used? Meaning that designing a "Viz" control for 2345,67 mini-membranes is one thing and doing it for your house is a totally different challenge. In plain English: it's more than possible to hit the Wall if lot's and lot's of items are invited to the party (you bring the girls and I'll provide the Vodka).
3. Do you like the idea of completely separating (on a spatial basis) input/viz control (what is on display and on what level of "detail") from the core logic (i.e. components). Pros: obvious, Cons: obvious.
4. Is this def planned as a "constant" evolution thing? Meaning that using, say, the mapper isn't the best idea if your input goes from {a;b;c} to {a;b;c;d;g;...;z}.
5. Have you any - even academic - plans (see 1) to walk the walk up to the end?. Meaning talking to Birdair/Taiyo Kogyo etc etc ( http://www.birdair.br.com/ ). If yes be prepared because these fellas work a bit differently as regards potential collaboration and feedback at design phase.
BTW: the thing that would change the world as you know it:
http://www.birdair.br.com/tensileArchitecture/tensotherm.aspx
best, Peter
…
ilion.
Then i sketched the outline curves in rhino with a few control points. The building is symetric so i only draw one side. But i'm not sure what is better for a voroni. a sharp or a soft surface? Or dose i need points?
So i have some questions:
1. how can i loft the curves correctly? My problem is that if i divide my curves for more control points, grasshopper automatically change my curve. thats ok but than i've the problem with a short curve, which fit bevor with the large one, but after the devision it can't connect.
So i tryed to duplicate the long curve and split it but with the shatter battery it dosen't work. It always cut the curve somewhere.
2. my next problem is, the curves in rhino should be my main construction, which is always visible. so i decided to offset the curves that i got a colum. but i don't know how to orient the offset curves in the xyz axis.
3. hopefully if i have the surfaces, how can i build a voroni which is offsetet, and has maybe some different thicknesses? :D
Would be really great if s.o. can help me. I tried a lot but not every thing is simple.
Sorry for my bad english.
Thx max
Here are my files:
FCP_MAX_GH_konstruktion_1.3dm
FCP_MAX_GH_konstruktion_1.gh
…