oups based on a wedge shape that passes through all seven levels. As such, my data tree shows a correlation between points on one level and the wedge they exist within and points on another level. (Points on levels 3,5,8,9 pass through wedge 135 for instance...the data tree has the points grouped respectively under {3;135}, {5,135},{8;135} and {9;135}, all sorted within their respective branches based upon their distance to the center of the hemispherical cloud.
On a small scale, I can pull the branches {3;135} and {5;135}, for instance, and use the line tool to draw lines from the closer points to the further points, in such a way that represents branching (the 3rd level points may have multiple lines associated with each point, but the 5th level points may only have one). I can pull the 8th level and grow the branches out further...then the ninth and the branch gets even bigger.
However, doing this for three hundred point groups defeats the purpose of parametric design...is there a way I can speed this process up? I'll include my grasshopper file (It's a bit dirty) for reference, as well as my rhino file with the source points.
I'd appreciate some advice! Thanks!…
ist.
In other words, I'm looking for the GH equivalent of
Dim x As New List(Of List(Of List(Of Double)))
For example, I might have an outer list of 10 items each containing 20 lists with 30 items inside each 2nd tier list.
Say the outgoing gh_Structure is:
Dim outgoing_Struc as new gh_structure(of gh_number)
I can't seem to figure out how I might use the "append" method to GH_Structure to insert items to specific paths to create a list of a list.
The additional complexity is that I want to customize the indices of the outgoing list. Instead of the outer most list running straight from 0 to 9, I might want to have its indices non-sequential as {0}, {2}, {5}, {11} for example. This helps in using the "Tree Item" component downstream as these specific non-sequential indices refer to something specific upstream.
For example, with custom indices, I can pull a specific sublist by using index {11;3} which may not exists if the indices ran sequentially.
I guess the more general questions is whether anybody has pointers on creating nested trees in a custom component with specific indices? It appears that GH_Path has a "DebuggerDisplay" property which masks the internal continuously running index but this is a read only property.
Any pointers would be helpful
Thanks.…
Added by kermin chok at 1:37am on December 10, 2013
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…
solutions.
If what you're after is more like this then you could use the boxmorph approach. I haven't got the definition right now, I used to create the xample above, I can post it later if you want to have a look at it.
There is another way that uses the boxmorph approach and the 1:sqr(3) rectangle, as shown on fig. 9 of this paper. I've been looking at it in the last few days, but haven't had a chance to write a blog post, sorry!
Cheers
Evert…
Added by Evert Amador at 6:34am on February 7, 2012
s connected with what (vertices, edges, faces [BrepFaces, that is], cats, dogs etc etc). Since we have 3 "classes" the possible combinations are 9 (if v = vertex, e = edge, f = face >> trees of "type": vv, ve, vf, ev, ee, ef, fv,fe,ff).
If you have "graphs" in 3d space Sandbox does that type of stuff as well. Same story for meshes, mind.
If this is the case ... I have code that does this ... and the good news are that there's (case breps) a GH component that also does this (Brep Topology) but in order to use it you must know what connectivity trees are (not to mention data trees, he he).…
ts bit by bit.
The total number of data points for the tower are around 150,000. I guess its too much for gh/lb to handle at once.
Hi Abraham,
There were memory issues a couple of times but in those cases rhino pops up a dialogue box saying out of memory and it will close after that. The machine is pretty tough (intel Xenon, 500SSD, 32GB RAM, 4GB nvidia quadro).
Right now the cpu usage during the heavy overall analysis goes up to 95% sometimes but memory usage stays between 8-9 GB. CPU usage does crank up to max I guess. How to solve it? Any ideas?…
he start point.
Generation (2) i have 4 points + (3*3points) = 13 points.
Generation (3) i have 13 points + (9*3points) = 50 points.
But when i bake the python component i have 157 points ? Why ?
What's the logic behind this ?
Also how can i have in a, lists of points according to generations and for exemple in b lines according to generations too ??
Here's the code:
import rhinoscriptsyntax as rsimport random as rr.seed(seed)
def Main():....allGenerations = []....allGenerations.append(startPt)....curGeneration = []....curGeneration.append(startPt)....for i in range(gens):........newGeneration = []........for pt in curGeneration:............ang1 = r.randint(-30,30) ............ang2 = r.randint(90,150) ............ang3 = r.randint(210,270) ............dist1 = r.randint(10,40) ............dist2 = r.randint(10,40) ............dist3 = r.randint(10,40) ............zV = -1 ............newPoints = branch(pt, ang1, ang2, ang3, dist1/(i+1), dist2/(i+1), dist3/(i+1), zV) ............newGeneration.extend(newPoints) ............curGeneration = newGeneration ............allGenerations.extend(newGeneration)....return allGenerations
def branch(pt, ang1, ang2, ang3, dist1, dist2, dist3, zV):....ptP1 = rs.Polar(pt, ang1, dist1)....ptP2 = rs.Polar(pt, ang2, dist2) ....ptP3 = rs.Polar(pt, ang3, dist3) ....ptA1 = rs.AddPoint(ptP1)....ptA2 = rs.AddPoint(ptP2)....ptA3 = rs.AddPoint(ptP3) ....pt1 = rs.MoveObject(ptA1, [0,0,zV])....pt2 = rs.MoveObject(ptA2, [0,0,zV])....pt3 = rs.MoveObject(ptA3, [0,0,zV]) ....ln1 = rs.AddLine(pt, pt1)....ln2 = rs.AddLine(pt, pt2)....ln3 = rs.AddLine(pt, pt3) ....return [pt1, pt2, pt3]
a = Main()
Thanks for you replies and sorry for my noob questions...
…
int on your curves, filling in all black regions with a new color one by one
2. expand live paint, and delete all white-filled regions
3. export the file as a DWG with "maximum editability"
4. export the same file as a JPG or other image format
5. import the DWG into rhino
6. import the image into rhino as a pictureframe to use as an underlay
7. select all the curves
8. use the Hatch Command with "Boundary" enabled
9. Pick points in the drawing where there should be a hatch but isn't, using the image as reference
10. Complete the command, and explode all hatches.
If you needed the white regions as surfaces two, I'd recommend exporting them separately and using a similar process. Having duplicate outlines (one bounding the white, one bounding the black) throws off Rhino's curve boolean processing, which is used for the hatch command as well as the Planar Surface command in some instances.…
and perpframes
3) Ellipse on perframes
4) Series + Move + Series + Scale + Series + rotate (to create generations)
5) Divide curve (ellipse) + Dispatch only seleced points + join those points on ellipse using Intercurve + Divide the resulting intercurve
6) List items (I used list items 4 times, you could do as many). For 'i' parameter in list item i used slider to create generations. depending upon your definition, at this stage you might have to flatten your list output
7) joint the points you get from list output to form another intercurve + repeat that for all items.
8) Loft the curve
9) to form fenestrations, i again used rhino closed curves.
8) Project curve onto surface + copy trim + surface to mesh + mesh thickening from WB.
Hope this helps
Cheers
aB
…
ff and talk about another "more obvious" case: here's a visual example that may shed some light on that "interactive" BIG thingy.
1. We have a flat mesh. "Size" of mesh faces is due to a freaky thing known as MeshMachine.
2. A Physics Engine (Kangaroo 1/2) is used in order to "inflate" upwards the mesh yielding a "vault" type of topology. Either via components (K1) or straight via C# code (K2). Not a big deal at all: even a kid can do it.
3. "Inflation" without anchors ("fixed" mesh vertices == steady stuff) is kinda a 3rd marriage (avoid: better safe than sorry).
4. 1M Question: by what means can you explicitly define what vertices (on a per vertex basis) to use as anchors?
Answers to: The Lord, District 9, North Pole…