now.
This V4 can sense if you feed it with your points and uses these instead of the p1,p2,p3 (it's a prelude for V5 that uses DataTrees of points making any surface subdivision a reality). Do the following: sample a triad of your points (NOT internalized) and feed the C# . Then ... start dragging these Rhino points around (the C# responds accordingly). See any difference?
The topology:
Well, the whole fractal logic (in this case) is to have 3 pts on hand (call them p1,p2,p3 : red, green, blue) and then project the "right" one, say, p3 to the Line (p1,p2) > do this > do that ... blah blah.
But ... what p3? that's the 1M question: Here for instance the right p3 (blue) is (by accident) the 3rd point entered (it's obvious the "projection" recursive logic):
but if you drag around a bit the points : p3 is now different (C# does this by sorting synchronously the triangle angles per point VS points) Numbers are used to indicate that "swift" : (0 for the new p1, 1 for the new p2, 2 for the new p3... etc). Compare with the initial points (red = ex p1, green = ex p2 , blue = ex p3).
and again different:
The 1M question:
In fractal thinking the big thing is when to stop: I could obviously control that by a counter ... but here the requirement is the tile min size (within unpredictable amount of recursions) : this is what the stop logic used does.
The 1B question:
So ... implementing fractal logic (against DataTrees of points) to a parametric environment ... requires a lot of questions: because each time the size of the start triad varies ... whilst the stop condition is constant: meaning that with a little bit of "good" luck you can reach incredible high amount of tiles (computer out of memory > Adios Amigos).
Obviously I'm taking having all possibilities in mind and especially big projects > big facades > millions (or zillions) of tiles > Armageddon > ....
more soon
…
ng in Grasshopper?
As a general recommendation for developers in Grasshopper who are writing a part of their library which is performance-sensitive (please note: often the performance sensitive part is very limited) is to write it in C#, or maybe even C, or maybe even assembly :). Of course, the closer to the machine you will be, the easier it will be to harness all minimal optimizations. However, there is always a compromise between "getting things done" and "making them best" and this boundary is not very easy to catch, right?
If you want to have significant speed improvements for numerical calculations, I would at least recommend developing with C# in a compiled component using Visual Studio or SharpDevelop. The reason is: in order to provide the line number of possible errors, Grasshopper compiles C# scripts in debug mode! They will be much less optimized than what is possible even with today's technology. This does not preclude keeping the project open-source, if that is one of your goals.
Regarding the actual list:
1) Yes, the implied loop will probably be slower than just a simple for loop. This is because Grasshopper code has to keep track of more things than the ones you could be considering with your knowledge of of your very-special case. However, a factor of 10 is simply not acceptable and is likely a symptom of something else. In fact, I think I remember fixing a bug around that in Rhino WIP. However, it appears to be still slower also there. I've added a bugtracking item here.
2) If you are able to do all casts that are involved, and do them as Grasshopper does, please write that code that way. For example, if you supply a curve to an input with number hint, Grasshopper computes the length of the curve. There will have to be an "if" that checks if the input is a curve somewhere (or some similar construct). This aid for designers is what slows down the hint input.
3) Grasshopper has to keep side effects at bay. For example, components B and C are both connected to outputs of A. If you edit data in component B, and that data came from A you of course expect that data to be unchanged in C. This means that, for even lists of numbers, Grasshopper has to perform a deep copy of the output for each input. Otherwise, what happens if B sorts the list and C finds the index of the smallest number? This could be improved if GH components had some way of flagging themselves as non-data-mutating (constant). The fact that, by supplying special types, Grasshopper has no way of performing copies will likely speed things up. But be aware of possibly very annoying side effects creeping in if data is not immutable. Another option is performing the copy "optimally", just where you need it, because you know where your data is used. This is not information that is available to GH at present.
Does this help?
Thanks again for your input,
Giulio--Giulio Piacentinofor Robert McNeel & Associatesgiulio@mcneel.com…
onents to the latest version and, as you can see, everything works fine:
Over the next week, I am going to be adding in several new capabilities to the Adaptive model in LB+HB that are not an official part of ASHRAE or ISO standards but they are endorsed by the experts and researchers who have helped build the standards. Mostapha, I will be sure to have the component give a comment any time that these un-standardized methods are used and I will be clear that I have made them a part of LB because I have found these insights from new research to be particularly helpful to design processes for passive architecture. Also, I think many of us recognize that both ASHRAE and ISO were initially founded to produce standards for conditioned or refrigerated spaces and that, understandably, they . Among the features that I will be adding in:
1) You will have the option of using either the American ASHRAE adaptive model or the ISO EN-15251 model (see the CBE's comfort tool for a visual of the differences - http://comfort.cbe.berkeley.edu/).
2) In addition to a different comfort polygon, the European standard also uses a "running mean" outdoor temperature instead of the average monthly outdoor temperature. This "running mean" is computed by looking at the average temperatures over the last week and weights each of the daily average temperatures by how recent it is. This makes more sense to me than the ASHRAE method and addresses the issue that you bring up, Alejandro. Needless to say, the updated adaptive model will allow you to use either a running mean or average monthly temperature with either the American or European polygon.
3) The WIP adaptive chart currently has an option for a "levelOfConditioning". This input allows you to make use of research the was conducted along-side the initial development of the adaptive model, which showed that the findings did not contradict the PMV model when people were surveyed in fully conditioned buildings. This parallel research ended up producing a different correlation between the outdoor and desired indoor temperatures and this correlation had a much shallower slope than the official adaptive model for fully naturally-ventilated buildings. The levelOfConditioning allows you to make a custom correlation for full natural ventilation, full conditioning or (presumably) somewhere in between for a mixed-mode building. This levelOfConditioning will become an official input for all LB components using the adaptive model (not just the chart at the moment).
At the end of all of this, I will put together a new video series on Adaptive comfort so that we are all on the same page about how to use the model.
-Chris…
2_Radiation.gh template, reorganized it a bit for a June 21 7am-7pm study (everything in orange bubbles below)… However I realized that the template was only the Sky Dome Visualization tool.
So I took a wild guess and I grabbed the Ladybug_Radiation_Analysis component using it to produce a mesh on the floor of an office building. (everything in white bubble below)
1) Is this the correct component to give me relative values of sunshade behavior? (Later I’ll connect my sunshade geometry into the Context input to block incoming daylight)
2) Is it incorrect to let the grid size be anything except 1m square? (I ask because the individual, total and average Radiation result output values swing wildly when I change the grid size.)
My Best,
Rob…
vate Sub RunScript(ByVal x As Object, ByVal y As Object, ByVal z As Object, ByRef A As Object, ByRef B As Object)
Dim c_list As New list(Of nurbscurve)
Dim P_list As New list(Of Point3d)
For i As int32 = 0 To z
Dim c As New Ellipse(plane.WorldXY, i / 2, i)
Dim g As New NurbsCurve(c.ToNurbsCurve)
g.rotate(y * i, New vector3d(0, 1, 0), New point3d(x, 0, 0))
c_list.add(g)
Dim e As New BoundingBox
e = g.getboundingbox(False)
p_list.add(e.Center)
Next
Dim polyline As New polyline(p_list)
a = c_list
b = polyline
End Sub
To do the same thing is more easy in the old version
because i can't get the center of an ellipse directly
how can i do ???
thanks
ceason
…
ry grateful.
Well, i get some explanation of my problems:
First of all, i was working on making an double helix building, thing that i've solved making a sketch of lofting an transformating helix., but now i want to make some transformations to the helix, to make it less boring.
I want to transform the helix making somethin like that, making displacements on the helix to let the sun get in the building.
Well i've tried the ways that i know, but i'don't know if it's a better way or simply way of doing it.
i've attached my working files where i explain where i've get stuck
I've tried by this ways:
1) selecting the part of the helix wich i've want to transform.
This selection that i've made i think that was rought, i think that the best way to select the part that i've want to move is by the turns, but i've get lost in this way.
When i've get this points and i move it, if i divide the original helix in a few points it seems to work, but the result appears to be an helix but it isn't because i've made interpolation with few points.
If i divide in lots of points, when i make the "transformation" it isn't what i've expected, i think that i have to move this points in a gradiend move, to get a nice deformed helix.
This way is on the 1.ghx
2) The second way that i've tried is with map to surface, and morph box, but here i don't get the transformation thay i've want, or i don't know if i'm doing something wrong.
This way is on the test1.ghx
In the rhino file attached there is a "transformed helix" that i've want to obtain in GH, made by rhino, it's the blue one. It is the result that i've want to get,the displacement in xy plane, and after that transformation continue the helix.
1.ghx
test1.ghx
test1.3dm
Thanks for your attention.
…
hole. Currently I control it through PREVIEW, in component Solid Geometry or Solid DiferencedIn practice, the procedure of generating this whole is not needed, if the number of wholes = 0, or Yes/No (appeared or no) Question: How to use Boolean Toggle (optionaly):
1 to control the component PREVIEW state (On/Off)2 better for me- to start or stop the procedure to create whole (whole = 0,false - no whole needed)Hope you will hlep.
regardsSlawek…
as part of the firm's mantra. As a result of these ideals, my role involved Grasshopper 3D development (alongside other software development roles when needed).
As someone with a programming background, I was at first indifferent on work with a graphical programming language, as I said to myself "I surely can accomplish things done here with much less fluff." Through the six months of use and development, things became more clear both as a workflow of using GH on a canvas or diving deep via Visual Studio. On a lower level, the C# datatypes that are used profusely within the components and the lack of custom datatypes (which IMO is a great thing) makes development and compatibility with existing/future components a breeze.
I personally cannot wait to see what Grasshopper 3D 2 will entail (even though I am not an architect and won't be able to afford a Rhino license after today). David's blog is something I fanboy'd to for a good couple weeks; his thoughts on software development are things that resonate with me. I cannot wait to see this sapling of Grasshopper 3D blossom into an even better product both on the top level and lower level (SDK, documentation, software architecture, speed, rendering, and more) with the second edition. Hopefully, development means David will still be able to find the time and love to allocate towards GH 1, while he's busy changing the world, answering developer's questions religiously, writing documentation, and just being a super human developer in general. David you're an absolute monster. In a good way.
The GH developer's community is small, but the closeness and helpfulness of the community is not meager in any sense. Keep up the paradigm-shifting, making programming accessible to programmers/architects alike, and the incredible user experience thoughts that go into Grasshopper.
Thank you Mostapha, Giulio, Andrew Heumann, David Rutten, and all the acquaintances I got to interact with, for taking the time to read and answer my [often inane] software development questions.
For the next six months I will be going back to classes as part of my Computer Engineering curriculum. Today is my last day at this co-op. For my third co-op, I will be working outside the US (as my CPT/OPT will exceed the allowed 365 days), though the details of which company or country I will be working in unknown yet; will be starting that process in the coming months. My anticipated graduation date is 2016.
Again, thank you all for the sweat, the lessons, the insight, and of course, the fun. It's been a pleasure working alongside you all.
With much appreciation,
theGreenCabbage.
EDIT: A link to some of my work that we released:
http://www.food4rhino.com/project/kt-tools
…
uld help me to optimize the script, so it works reliable.
At the end the script should work only by the input of the following informations:
- Top-Curve
- Bottom-Curve
- accuracy ( like poly-count)
- is the bowl an open or closed structure?
This is an example of a good result:
From here its probably the best if you open both attached files, so you understand the problems.
1. Bug:
Offset direction of the bottomcurve needs to be set up by hand sometimes.
The script uses "loft" on a bunch of 3pt Arcs to create transitions. Arc 3pts" needs a "Point B" on the offset of the bottom line. Sometimes the offset is inverted, so i need to change it by hand.
The rule to make it work correct is: "The offset of the bottom line goes into the same direction as the top line, but on the same hight as the bottom line."
How can i implement this in GH?
2. Bug:
The floor generation needs a lot of guessing the right index numbers of lists.
The script uses 2x "Deconstruct Brep" to find the actual bottom curve of the created transition Brep. "Patch" is used to create a floor from this curve.
If the bowl is an open structure, the script creates a line between the endpoints of the bottom curve to close it, in order to create a trimmed "Patch". But again, you have to set up the right Index Numbers by hand...
3. Bug:
If the bowl is an open structure and the endpoints of the top-line and the bottom-line are the same the lofting is not working. At the moment I use a script that finds double points in the list and deletes it.
But the the result is, that the loft is not starting at the beginning or the end. Here is an Image.
I have only a little experience in gh, but i really want to learn more.
Thank you all for your help!…
s been great ! I found alot on info on this topic which got to experiment many different possible solutions. Unfortunately none of which resulted with me.
This a two part related question.
I want to do is resolve the paneling of two surfaces to be later populated with a component through the blend morphed box command. The surface shown on the image is the ' problematic surface '. An image of the isotrimmed surface and the loft curves used to generate that same surface.
1) İs it possible to ' remap / reset / regularize ' ' the UV grid of a surface independently of how it got constructed ? ( In this particular situation the lofting of the curves is creating an uneven UV grid. You can see their are kind of skewing to meet those smaller edges on the corner.
2) Finally, a step after that, visable in the last image shows a the blend box applied to these surfaces in which I used ' U-V SMART SBDIVIDER ' ( Closest result I could get to regularizing the UV grid ) . As you can see, the quads do not seem to be aligned. I have used some scripts I found on this forum to alternate between different directions and change the UV direction, but no direction seemed to align the faces to give clean twisted boxes.
FYI ( second surface not visable above is a simple patch of the edges of the first surface. )
Thanks alot for any help on this and for all the help I've gotten so far from existing discussions... Cheers!
FR…