surfaces resulting from 'SrfSplit' so they could be sorted to discard the largest one (in cases where a Voronoi curve crossed a surface seam, there are three resulting surfaces, not just two) and
The centroid for each Voronoi curve/surface required for scaling the holes.
So I created a cluster called 'pLen' which returns the perimeter length of a surface (the sum of the lengths of its edges) to be used instead of surface area for sorting (#1). And used another cluster I have called 'PtCloudCntr' that returns the mathematical center of a point cloud (#2). Both of these clusters are extremely fast and worked fine together as a replacement for 'Area'.
But in the process, I discovered and fixed a couple things:
In those cases where Voronoi intersection curves cross a seam in the "Primary Surface", I joined the two pieces together before creating the hole - eliminating the seam from the results!
Somehow the optional 'Bounding Box' used by 'Voronoi³' component got lost (oops) so it was cutting off the results bounded by the random points instead of the "Primary Surface". Fixed that and found later that in some cases (the 'Revolve Srf' in this code), it works much better to double the size of the 'Bounding Box'. Since there is no penalty for this, speed or otherwise, the larger box is used for all surfaces.
The results are MUCH BETTER than before. Surfaces don't lose their edges, holes aren't corrupted by seams and the code runs in roughly 2/3rds the previous times (30 seconds instead of 45 seconds for 438 holes as in prior code). For 100 holes, it takes only six to eight seconds to change the "Primary Surface" and get a new holed surface.
This 'Revolve Srf' is substantially smaller in scale than the other surfaces and due to its apparent complexity(?), it starts to degrade in quality with "large holes", i.e., less than 100 holes:
…
Added by Joseph Oster at 2:14pm on December 22, 2015
tion and how it can be applied for construction aware design of panelisations. Throughout the whole workshop EvoluteTools PRO 2.0 for Rhino will be used by the attendees for hands-on examples and exercises. Participants can bring their own designs (freeform surfaces) to be panelised.
EvoluteTools PRO is an advanced Rhino Plugin providing access to powerful paneling and geometry optimization tools for freeform surfaces with a user friendly interface. Participants will receive a 15 day evaluation license of EvoluteTools PRO to further explore its capabilities.
Detailed timeline
Introduction to subdivision modeling for designing panelisations (45 minutes)
Introduction to mesh optimization (75 minutes)
Showcasing analysis modes (30 minutes)
Advanced constraint fitting (45minutes)
In-depth mesh and polymesh editing, curve networks for double curved panels (45 minutes)
Lunch break (60 minutes)
Hands-on examples, panelising designs of participants or creating panelised designs from scratch (2 hours)
Specific topics in mesh optimization (planar quad meshes, circle packing meshes) (60 minutes)
Introduction to the EvoluteTools PRO RhinoScript interface (60 minutes)
For fees and registration please contact SimplyRhino UK.
…
onents (radiation, sunlight-hours and view analysis) which let you study the effect of the orientation of your building and the analysis result. When you come to a question similar to "what is the orientation that the building receives the most/least amount of radiation?" is probably the right time to use this component.
HOW?
I'll try to explain the steps using a simple example. Here is my design geometries. The building in the center is the building to be designed and the rest of the buildings are context. I want to see the effect of orientation on the amount of the radiation on the test building surfaces from the start of Oct. to the end of Feb. for Chicago.
First I need to set up the normal radiation analysis and run it for the building as it is right now. [I'm not going to explain how you can set up this since you can find it in the sample file (Download the sample file from here)]
Now I need to set up the parameters for orientation study using orientationStudyPar component. You can find it under the Extra tab:
At minimum I need to input the divisionAngle, and the totalAngle and set runTheStudy to True. In this case I put 45 for divisionAngle and 180 for the totalAngle which means I want the study to be run for angles 0, 45, 90, 135 and 180.
[Note1: The divisionAngle should be divisible by totalAngle.]
[Note 2: If you don't provide any point for the basePoint, the component will use the center of the geometry as the center of the rotation.]
[Note 3: You can also rotate the context with the geometry! Normally you don't have the chance to change the context to make your design work but if you got lucky the rotateContext input is for you! Set it to True. The default is set to False.]
You're all set for the orientation study, just connect the orientationStudyPar output to OrientationStudyP input in the component and wait for the result!
The component will run the study for all the orientations and preview the latest geometry. To see the result just grab a quick graph and connect it to totalRadiation. As you can see in the graph 135 is the orientation that I receive the maximum radiation. Dang!
If you want to see all the result geometries set bakeIt to True, and the result will be baked under LadyBug> RadaitionStudy>[projectname]> . The layer name starts with a number which is the totalRadiation.
Mostapha…
cks consisted of same geometrical characteristics and intersect it with boundary geometry (in this case the beggining of the existing street profile) By rotating the matrix from -90 to 90 Degrees I try to test which of geometry intersections will generate the biggest surface area and to pick the best one. At this point I recieve problems like in a case attached. For some angles for e.g. 0, 25, 45 (example riht) I get clean urban solutions with nice cutout courtyards but in some cases like in this rectangular outline version, i get mistakes where for relatively simple geometry the offset function fails. I have tried so far with reconecting curve exploding and joining all over again, even fliping curves and offseting in positive direction but some systematical solution which functions for every angle I didn't manage to find. in all cases i manage to find an angle which produce such mistake....and since it is a part of bigger gh script where it is not purpose to interfere within the search process and should function without problems automatically it blocks me in further development.
In case some of you have idea how to resolve this "simple" problem I would be thankfull for your help. gh file is also uploaded...
Many thanks in advance!
Best,
Aleksandar
…
size component supported only ground PV panels and angled roof PV panels.
Download the newest PV SWH system size component from here (Click on "View Raw" to download it. Then move the downloaded .ghuser file to File->Special Folders->User Objects Folder, an confirm to overwrite it with previously located one).
Just a few opinions on the project you are currently working on:This kind of fixed, non-transparent (overhang) PV panels attached to a building facade are vert convenient for locations with higher latitudes.The reason for this is because they (fixed overhang PV panels) are dimensioned according to the sun position at summer solstice. Elevation angles on summer solstice at higher latitude locations are lower, than those of lower latitude locations.Due to Incheon's low latitude (37), you will get rather short length of the PV panels* : less than 10 centimeters (0.097 meters in the attached .gh file below). As you have mentioned, Galapagos needs to be used too.I will just mention some of the good and bad ways in which the upper issue could be somewhat avoided:1) Increasing the vertical distance between PV panels (PV panels appear above every second window).2) Increase the tilt angle. This will increase the length of PV panels also, but will decrease the final annual AC energy output.An example of this solution has been applied at FKI building in Seoul (latitude: 37N):I already did some tests (with tilt angles: 40, 45, 55) and this does not seem like a good solution, though.3) Shrinking the "sun window" by using the minimalSpacingPeriod_ input. In Photovoltaics, a planner is suppose to make the 9h to 15h part of the sun window free of any obstructions. If you try to decrease the "sun window" to 10 to 14h, the length of your PV panels will increase. You can try to experiment a little bit with this (set your minimalSpacingPeriod_ to 21th of June 10 to 14hours). In general, shrinking the sun window on summer solstice is not a good principle during planning.4) Using tracking PV panels, not fixed ones. But Ladybug Photovoltaics components do not support this kind of PV systems. They only support fixed ones.I would personally go with the first option. You can also experiment with the second and third one.Comment back if you have any other questions.-----------------------* By "length of the PV panels" I mean the: tiltedArrayHeight_ input of the PV SWH system size component.…
h 'Cap Holes (Cap)' to close the ends. The cube is arbitrary too; I used 'BBox (Bounding Box)' for the capped, revSrf (might be a good idea to scale that a bit larger?). Then I rotated the revSrf 45 degrees just to make it more interesting, before 'SDiff'.
There is still no "grid" at that point. To create the grid, I used three edges of the 'BBox' corresponding to X, Y and Z directions and divided them using 'PFrames (Perpendicular Frames)'. The frames are planes used by 'Brep | Plane (Sec)' to intersect the 'SDiff' result.
You can hide the 'Preview' of 'SDiff' to leave only the intersection curves.
You can feed those intersection curves to 'Boundary' to get surfaces from many of them (the ones that are "Closed Planar"). Add 'Shift Paths', then 'Shift List' twice (1 and -1) with 'Wrap=False' to ignore the six outer surfaces.
A few simple tips for understanding GH code:
Enable/disable preview one component at a time to see what each one does.
Use a 'Panel' to see a text version of what is coming out of each component. This also helps to understand data/tree structures (essential to grasp 'Shift Paths').
Try the attached 'vuTreeList' tool I wrote to examine the geometry being generated along the way, by path and item.
Have fun!
P.S. I just realized I haven't really matched your desired result, which is a 3D grid of pipes... Will have to give that a little more thought.…
Added by Joseph Oster at 10:04am on March 13, 2017
consider this proof-of-concept to be done. Anyway, you have been warned... ;)
Requirements:
Hoopsnake - game logic and rendering
Firefly - keyboard controls
FabTools (optional) - highscore rendering
Boolean Data Recorder - enclosed to this post
Instructions:
Always disable timer when you're not playing (see Bug 1). Reactivate before playing.
Double-click on hoopsnake and then click on "loop". If nothing happens, click on "stop" and "loop" again.
Use the arrow-keys on to navigate to the food (red points).
Known bugs and performance issues:
I'm using Data Recorders to check keyboard inputs and to initiate the characteristic automatic movement. Those recorders are periodically reset when Hoopsnake starts and while it loops but while it's off, all of those four Data Recorders will gradually fill-up (1 False-value every 25ms). I assume this will eventually slow down or crash GH at some point. It never happened to me, though, just make sure to not let run like this overnight ;)
Keyboard-taps are not recognized due to the Data Dam-hack you proposed in the other thread. You have to hold down the desired button for >25ms in order to have it recognized as a button-press.
You can move diagonally (easily fixable).
You can move backwards without hitting yourself as this movement isn't detected as a self-intersection. (can be fixed through temporarily disabling certain key-inputs. eg: when your moving upwards, keyboard "up" and "down" should be disabled.)
Every point of movement is stored which reduce the game's performance the longer you play. (also easily fixable by culling the unneeded points).
Best look/performance: Maximize top-view, activate grid, disable grid axis, zoom-out a bit
Have fun nevertheless and be sure to post your highscore! Mine is 24!
Update: 45! ;)
Marc…
The PC actually stops working because after a few seconds the simulation starts the fan inside the PC all of a sudden stops and for the next 5-10 mins I cannot do anything, even alt+ctrl+canc. After I wait for that time i get the followig error:
the ReadMe says:
{0;0;0}0. Grid-based Radiance simulation1. The component is checking ad, as, ar and aa values. This is just to make sure that the results are accurate enough.2. -ar is set to 300.3. Good to go!4. Current working directory is set to: C:\Users\Luigi\Desktop\Prova__\Prova_1\gridBasedSimulation\5. Found a trans material... Resetting st parameter from 0.85 to 0.011276004966. WMIC PROCESS get Commandline7. WMIC PROCESS get Commandline8. WMIC PROCESS get Commandline9. WMIC PROCESS get Commandline10. WMIC PROCESS get Commandline11. WMIC PROCESS get Commandline12. WMIC PROCESS get Commandline13. WMIC PROCESS get Commandline14. WMIC PROCESS get Commandline15. WMIC PROCESS get Commandline16. WMIC PROCESS get Commandline17. WMIC PROCESS get Commandline18. WMIC PROCESS get Commandline19. WMIC PROCESS get Commandline20. WMIC PROCESS get Commandline21. WMIC PROCESS get Commandline22. WMIC PROCESS get Commandline23. WMIC PROCESS get Commandline24. WMIC PROCESS get Commandline25. WMIC PROCESS get Commandline26. WMIC PROCESS get Commandline27. WMIC PROCESS get Commandline28. WMIC PROCESS get Commandline29. WMIC PROCESS get Commandline30. WMIC PROCESS get Commandline31. WMIC PROCESS get Commandline32. WMIC PROCESS get Commandline33. WMIC PROCESS get Commandline34. WMIC PROCESS get Commandline35. WMIC PROCESS get Commandline36. WMIC PROCESS get Commandline37. WMIC PROCESS get Commandline38. WMIC PROCESS get Commandline39. WMIC PROCESS get Commandline40. WMIC PROCESS get Commandline41. WMIC PROCESS get Commandline42. WMIC PROCESS get Commandline43. WMIC PROCESS get Commandline44. WMIC PROCESS get Commandline45. WMIC PROCESS get Commandline46. WMIC PROCESS get Commandline47. WMIC PROCESS get Commandline48. WMIC PROCESS get Commandline49. WMIC PROCESS get Commandline50. WMIC PROCESS get Commandline51. WMIC PROCESS get Commandline52. WMIC PROCESS get Commandline53. WMIC PROCESS get Commandline54. WMIC PROCESS get Commandline55. WMIC PROCESS get Commandline56. WMIC PROCESS get Commandline57. WMIC PROCESS get Commandline58. WMIC PROCESS get Commandline59. WMIC PROCESS get Commandline60. WMIC PROCESS get Commandline61. WMIC PROCESS get Commandline62. WMIC PROCESS get Commandline63. WMIC PROCESS get Commandline64. WMIC PROCESS get Commandline65. WMIC PROCESS get Commandline66. WMIC PROCESS get Commandline67. WMIC PROCESS get Commandline68. WMIC PROCESS get Commandline69. WMIC PROCESS get Commandline70. WMIC PROCESS get Commandline71. WMIC PROCESS get Commandline72. WMIC PROCESS get Commandline73. WMIC PROCESS get Commandline74. WMIC PROCESS get Commandline75. WMIC PROCESS get Commandline76. WMIC PROCESS get Commandline77. WMIC PROCESS get Commandline78. WMIC PROCESS get Commandline79. WMIC PROCESS get Commandline80. WMIC PROCESS get Commandline81. WMIC PROCESS get Commandline82. WMIC PROCESS get Commandline83. WMIC PROCESS get Commandline84. WMIC PROCESS get Commandline85. WMIC PROCESS get Commandline86. WMIC PROCESS get Commandline87. WMIC PROCESS get Commandline88. WMIC PROCESS get Commandline89. WMIC PROCESS get Commandline90. WMIC PROCESS get Commandline91. WMIC PROCESS get Commandline92. WMIC PROCESS get Commandline93. WMIC PROCESS get Commandline94. WMIC PROCESS get Commandline95. WMIC PROCESS get Commandline96. WMIC PROCESS get Commandline97. WMIC PROCESS get Commandline98. WMIC PROCESS get Commandline99. WMIC PROCESS get Commandline100. WMIC PROCESS get Commandline101. WMIC PROCESS get Commandline102. WMIC PROCESS get Commandline103. WMIC PROCESS get Commandline104. WMIC PROCESS get Commandline105. WMIC PROCESS get Commandline106. WMIC PROCESS get Commandline107. WMIC PROCESS get Commandline108. WMIC PROCESS get Commandline109. WMIC PROCESS get Commandline110. WMIC PROCESS get Commandline111. WMIC PROCESS get Commandline112. WMIC PROCESS get Commandline113. WMIC PROCESS get Commandline114. WMIC PROCESS get Commandline115. WMIC PROCESS get Commandline116. WMIC PROCESS get Commandline117. WMIC PROCESS get Commandline118. WMIC PROCESS get Commandline119. WMIC PROCESS get Commandline120. WMIC PROCESS get Commandline121. WMIC PROCESS get Commandline122. WMIC PROCESS get Commandline123. WMIC PROCESS get Commandline124. WMIC PROCESS get Commandline125. WMIC PROCESS get Commandline126. WMIC PROCESS get Commandline127. WMIC PROCESS get Commandline128. WMIC PROCESS get Commandline129. WMIC PROCESS get Commandline130. WMIC PROCESS get Commandline131. WMIC PROCESS get Commandline132. WMIC PROCESS get Commandline133. WMIC PROCESS get Commandline134. WMIC PROCESS get Commandline135. WMIC PROCESS get Commandline136. WMIC PROCESS get Commandline137. WMIC PROCESS get Commandline138. WMIC PROCESS get Commandline139. WMIC PROCESS get Commandline140. WMIC PROCESS get Commandline141. WMIC PROCESS get Commandline142. WMIC PROCESS get Commandline143. WMIC PROCESS get Commandline144. WMIC PROCESS get Commandline145. WMIC PROCESS get Commandline146. WMIC PROCESS get Commandline147. WMIC PROCESS get Commandline148. WMIC PROCESS get Commandline149. WMIC PROCESS get Commandline150. WMIC PROCESS get Commandline151. WMIC PROCESS get Commandline152. WMIC PROCESS get Commandline153. WMIC PROCESS get Commandline154. WMIC PROCESS get Commandline155. WMIC PROCESS get Commandline156. WMIC PROCESS get Commandline157. WMIC PROCESS get Commandline158. WMIC PROCESS get Commandline159. WMIC PROCESS get Commandline160. WMIC PROCESS get Commandline161. WMIC PROCESS get Commandline162. WMIC PROCESS get Commandline163. WMIC PROCESS get Commandline164. WMIC PROCESS get Commandline165. WMIC PROCESS get Commandline166. WMIC PROCESS get Commandline167. WMIC PROCESS get Commandline168. WMIC PROCESS get Commandline169. WMIC PROCESS get Commandline170. WMIC PROCESS get Commandline171. WMIC PROCESS get Commandline172. WMIC PROCESS get Commandline173. WMIC PROCESS get Commandline174. WMIC PROCESS get Commandline175. WMIC PROCESS get Commandline176. WMIC PROCESS get Commandline177. WMIC PROCESS get Commandline178. WMIC PROCESS get Commandline179. WMIC PROCESS get Commandline180. WMIC PROCESS get Commandline181. WMIC PROCESS get Commandline182. WMIC PROCESS get Commandline183. WMIC PROCESS get Commandline184. WMIC PROCESS get Commandline185. WMIC PROCESS get Commandline186. WMIC PROCESS get Commandline187. WMIC PROCESS get Commandline188. WMIC PROCESS get Commandline189. WMIC PROCESS get Commandline190. WMIC PROCESS get Commandline191. WMIC PROCESS get Commandline192. WMIC PROCESS get Commandline193. WMIC PROCESS get Commandline194. WMIC PROCESS get Commandline195. WMIC PROCESS get Commandline196. WMIC PROCESS get Commandline197. WMIC PROCESS get Commandline198. Runtime error (IndexOutOfRangeException): index out of range: 0199. Traceback: line 320, in script
The thing is that if I raise the -aa parameter from 0.05 to 0.1 all works fine..
Is this only related to my PC then?? What should I do to solve this issue?
Thanks again for your help
Luigi…
on that does it the other way around and culls pts of a point cloud instead.
Problem is... I can't create more than 1 million pts (takes 45 min.) and culling out points produces pattern, as I can't create enough load value point density with Millipede. The gradient between different density areas should be more smoothly, unlike in the last snapshot, but like in Daniel Piker's Dynamic Remeshing with Plankton http://www.grasshopper3d.com/forum/topics/dynamic-remeshing-script-with-plankton-and-kangaroo?groupUrl=plankton&xg_source=activity&groupId=2985220%3AGroup%3A875392&id=2985220%3ATopic%3A985823&page=6#comments
Following snapshots illustrate the process until I generate lines via Proximity and then use Marching Cubes. I would need 10-30 times more pts for my goal, but I dont see any possibility how to do this. Theoretically I would know how to do it... combine the code behind "Populate 3D" with areal density value regarding load values. Any help how to do this would be highly appreciated, no matter which software, but preferably grasshopper of course.
Please find the rhino and gh file here: https://www.dropbox.com/sh/2tdrams80wlbru0/AACmxAV4VdrNEVxrtISQ5UQm...
Many thanks,
Oliver
p.s. open gh file with cautions. Calculation takes a few minutes
…
h, and using the BScale and BDistance are creating havoc somehow too. I've simplified first, and used the Kangaroo Frames component along with setting internal iterations, to make MeshMachine act like a normal component, along with releasing the FixC and FixV. The FixV didn't make any sense anyway. I've also set Pull to 0 to speed it up during testing, since much less calculation is involved to just let the meshes collapse, prevented from disappearing altogether by using a mere 15 iterations.
Also, your breps are open so that allows much more chaos and then collapse, though they did manage to close themselves too at times. Here is closed breps with a full 45 iterations:
So now that it's working, lets re-Fix the curves, and the problem arises that there is an extra seam line that is getting fixed too, running along the cylinder, stopping the mesh from pulling tight under tension wherever a vertex happens to be near that line:
So lets grab only the naked edge curves instead:
And what happens if we lose the end caps, now that we don't have an extra line skewing the result?:
There is no real curvature differences since it's not a curvy brep so the Adapt at full 1 setting has little to do. Now what does the BScale and BDist do? Nothing! Why? Your scale is out of whack, 99 mm high cylinders but only a falloff maximum of about 5, so let's make the falloff be 25 instead, but I must restore the end caps or the meshes collapse away for some reason and freezes Rhino for a minute or so the first time I try it:
It's a start.
If I intersect the cylinders, nothing changes, since they are being treated as separate runs. MeshMachine outputs a sequence of two outputs though, due to Frames being set to a bare minimum of 2 needed to get it to work, so I filter out the original run, which is just the unmodified initial mesh it creates.
The lesson so far is that closed meshes are much less prone to collapse and glitches leading to screw ups.
A Boolean union of the cylinders is when it gets funner, here show with and without the fixed curves that seem to define boundaries too where really there are just polysurface edges:
…