trying to develop it for my own project.
http://www.grasshopper3d.com/forum/topics/shortest-walk-tapered-branching-script?xg_source=activity&id=2985220%3ATopic%3A1450323&page=2#comments
On this page, he shared few 3D coral difinitions and especially interested in first and second one.
First one( bunny like 3D coral) - posted on February 2, 2016 at 9:43pm
Second one( sofa like 3D coral) - posted on February 6, 2016 at 3:16am
I followed these instructions, succeeded to build Tetgen, placed the built files in C drive directory and tried to run the definition. Then some WindowsError came out as follows which I don't know how to fix.
My working environment is;
OS is Windows 7 Ultimate 64 bit.
Rhino is version 5, 64 bit.
Grashoppper is version 0.9.0076, the latest version at this moment.
It would be great if I can have some help advice / comment.
I appreciate for your attention.
…
a given with the third set of information (at the 6th minute). From that, it will then match - for the same exact boats - the speed data given at the 4th minute. Finally it will do a matched subtraction of V(4th) from V(6th) for each boat. Those numbers - whether then scaled up / down or somehow manipulated - will act as the Z dimension which will create the topology. Since V2 - V1 can have a minus value, the overall topology will be a mix of mountains and icebergs this time.
Perhaps to be more accurate, we could divide V2-V1 by 120 and let the topology show the change in speed in a second within that two minutes; the XY coordinates belonging to the latter position of the ships, not the first.
Your definition as you say helps for the linear drawing as it continues from it's stopped. I used that in the current sketch as well for again doing the same thing.However when, I tried to use it for what I am trying to do with the acceleration thing, the result was different. I will try to explain this again;
Let's say that until this point 6 sets of data has arrived - so 12 minutes has passed -. Within that 6 sets, the number of of boats for each one differ as not all of them are able to send data every time. Let's assume in total there are 25 boats and 18 of them have always managed to send data in those 12 minutes. So 18 from the beginning until the end, and finally let's say the remaining 7 of them only could manage to come into the picture at the 4th set of data (so 4,5 and 6).
Now, if I were to build a topology of acceleration for the 6th minute which would mean that I would have to subtract V(4th minute) from V(6th minute) of all 18 vessels, I would need index 2 and 1 from all the branches. If I do this only after 6 minutes has passed from the beginning it would probably work, however if I do it later like at the 12th minute, it does not.
And the very reason for that is when the remaining 7 join the crowd at the 8th minute they obtain an index number of 0, and then 1, and then 2 - at the 12th minute. Because of that when I try to match the V2-V1s with Coordinates on the Unary Force component, while there are 18 sets of coordinates, there are 25 different speed values.
Of course this is quite a simplified scenario and perhaps your vessel matching could solve this specific one but there are cases where its more complicated and random.
I do still want to show vessels' position in a specific time with such pipes you have suggested, but I am trying to construct a collective model, in its simplest form being equal to pipes + topology
For the time thing, what I meant was in this version when you click play the mountains just keep on rising and the topology is constantly deformed. I was wondering if we can set up a timer so that it runs the physics engine for couple of seconds and then freezes the topology as it is. Otherwise I would have to press pause manually everytime, which is not that big of a deal tbh, just for the accuracy sake it would be good to run the engine for the same interval for each model.
All the best,
Levent…
is set up to manipulate strings into an STL file that is quite different from how Grasshopper defines meshes, in that an STL seems to define each face by XYZ points, Grasshopper wants a single list of all vertex points and then has an allied lists of topological connectivity according to vertex number, so for now I just hacked it to spit out points minus so many duplicates it generates for STL:
Right now it has an internal 3D trigonometric function I added input sliders to control, that creates surfaces that look a lot like molecular orbitals.
So how do I make a mesh? I failed to make a single mesh face from each STL face since AddMesh seems to want a list, so I tried making a single list and matching it with a simple ((1,2,3),(4,5,6),(7,8,9)...) array of connectivity but it hasn't worked yet since the STL list of vertices has duplicates that won't work for Grasshopper and removing the duplicates scrambles the connectivity relation.
After some work on this and seeing the output, I figure I could just randomly populate the mathematical function with points instead, unless it really gives a better mesh result than other routines. I'm not sure what to do with it yet, even if I get the mesh figured out.
import rhinoscriptsyntaximport RhinoPOINTS_CONTAINER =[]POINTS = []class Vector: # struct XYZ def __init__(self,x,y,z): self.x=x self.y=y self.z=z def __str__(self): return str(self.x)+" "+str(self.y)+" "+str(self.z) class Gridcell: # struct GRIDCELL def __init__(self,p,n,val): self.p = p # p=[8] self.n = n # n=[8] self.val = val # val=[8] class Triangle: # struct TRIANGLE def __init__(self,p1,p2,p3): self.p = [p1, p2, p3] # vertices # HACK TO GRAB VERTICES FOR PYTHON OUTPUT POINTS_CONTAINER.append( (p1.x,p1.y,p1.z) ) POINTS_CONTAINER.append( (p2.x,p2.y,p2.z) ) POINTS_CONTAINER.append( (p3.x,p3.y,p3.z) )# return a 3d list of values def readdata(f=lambda x,y,z:x*x+y*y+z*z,size=5.0,steps=11): m=int(steps/2) ki = [] for i in range(steps): kj = [] for j in range(steps): kd=[] for k in range(steps): kd.append(f(size*(i-m)/m,size*(j-m)/m,size*(k-m)/m)) kj.append(kd) ki.append(kj) return ki from math import sin,cos,exp,atan2 def lobes(x,y,z): try: theta = atan2(x,y) # sin t = o except: theta = 0 try: phi = atan2(z,y) except: phi = 0 r = x*x+y*y+z*z ct=cos(PARAMETER_A * theta) cp=cos(PARAMETER_B * phi) return ct*ct*cp*cp*exp(-r/10) def main(): data = readdata(lobes,10,40) isolevel = 0.1 #print(data) triangles=[] for i in range(len(data)-1): for j in range(len(data[i])-1): for k in range(len(data[i][j])-1): p=[None]*8 val=[None]*8 #print(i,j,k) p[0]=Vector(i,j,k) val[0] = data[i][j][k] p[1]=Vector(i+1,j,k) val[1] = data[i+1][j][k] p[2]=Vector(i+1,j+1,k) val[2] = data[i+1][j+1][k] p[3]=Vector(i,j+1,k) val[3] = data[i][j+1][k] p[4]=Vector(i,j,k+1) val[4] = data[i][j][k+1] p[5]=Vector(i+1,j,k+1) val[5] = data[i+1][j][k+1] p[6]=Vector(i+1,j+1,k+1) val[6] = data[i+1][j+1][k+1] p[7]=Vector(i,j+1,k+1) val[7] = data[i][j+1][k+1] grid=Gridcell(p,[],val) triangles.extend(PolygoniseTri(grid,isolevel,0,2,3,7)) triangles.extend(PolygoniseTri(grid,isolevel,0,2,6,7)) triangles.extend(PolygoniseTri(grid,isolevel,0,4,6,7)) triangles.extend(PolygoniseTri(grid,isolevel,0,6,1,2)) triangles.extend(PolygoniseTri(grid,isolevel,0,6,1,4)) triangles.extend(PolygoniseTri(grid,isolevel,5,6,1,4)) def t000F(g, iso, v0, v1, v2, v3): return [] def t0E01(g, iso, v0, v1, v2, v3): return [Triangle( VertexInterp(iso,g.p[v0],g.p[v1],g.val[v0],g.val[v1]), VertexInterp(iso,g.p[v0],g.p[v2],g.val[v0],g.val[v2]), VertexInterp(iso,g.p[v0],g.p[v3],g.val[v0],g.val[v3])) ] def t0D02(g, iso, v0, v1, v2, v3): return [Triangle( VertexInterp(iso,g.p[v1],g.p[v0],g.val[v1],g.val[v0]), VertexInterp(iso,g.p[v1],g.p[v3],g.val[v1],g.val[v3]), VertexInterp(iso,g.p[v1],g.p[v2],g.val[v1],g.val[v2])) ] def t0C03(g, iso, v0, v1, v2, v3): tri=Triangle( VertexInterp(iso,g.p[v0],g.p[v3],g.val[v0],g.val[v3]), VertexInterp(iso,g.p[v0],g.p[v2],g.val[v0],g.val[v2]), VertexInterp(iso,g.p[v1],g.p[v3],g.val[v1],g.val[v3])) return [tri,Triangle( tri.p[2], VertexInterp(iso,g.p[v1],g.p[v2],g.val[v1],g.val[v2]), tri.p[1]) ] def t0B04(g, iso, v0, v1, v2, v3): return [Triangle( VertexInterp(iso,g.p[v2],g.p[v0],g.val[v2],g.val[v0]), VertexInterp(iso,g.p[v2],g.p[v1],g.val[v2],g.val[v1]), VertexInterp(iso,g.p[v2],g.p[v3],g.val[v2],g.val[v3])) ] def t0A05(g, iso, v0, v1, v2, v3): tri = Triangle( VertexInterp(iso,g.p[v0],g.p[v1],g.val[v0],g.val[v1]), VertexInterp(iso,g.p[v2],g.p[v3],g.val[v2],g.val[v3]), VertexInterp(iso,g.p[v0],g.p[v3],g.val[v0],g.val[v3])) return [tri,Triangle( tri.p[0], VertexInterp(iso,g.p[v1],g.p[v2],g.val[v1],g.val[v2]), tri.p[1]) ] def t0906(g, iso, v0, v1, v2, v3): tri=Triangle( VertexInterp(iso,g.p[v0],g.p[v1],g.val[v0],g.val[v1]), VertexInterp(iso,g.p[v1],g.p[v3],g.val[v1],g.val[v3]), VertexInterp(iso,g.p[v2],g.p[v3],g.val[v2],g.val[v3])) return [tri, Triangle( tri.p[0], VertexInterp(iso,g.p[v0],g.p[v2],g.val[v0],g.val[v2]), tri.p[2]) ] def t0708(g, iso, v0, v1, v2, v3): return [Triangle( VertexInterp(iso,g.p[v3],g.p[v0],g.val[v3],g.val[v0]), VertexInterp(iso,g.p[v3],g.p[v2],g.val[v3],g.val[v2]), VertexInterp(iso,g.p[v3],g.p[v1],g.val[v3],g.val[v1])) ] trianglefs = {7:t0708,8:t0708,9:t0906,6:t0906,10:t0A05,5:t0A05,11:t0B04,4:t0B04,12:t0C03,3:t0C03,13:t0D02,2:t0D02,14:t0E01,1:t0E01,0:t000F,15:t000F} def PolygoniseTri(g, iso, v0, v1, v2, v3): triangles = [] # Determine which of the 16 cases we have given which vertices # are above or below the isosurface triindex = 0; if g.val[v0] < iso: triindex |= 1 if g.val[v1] < iso: triindex |= 2 if g.val[v2] < iso: triindex |= 4 if g.val[v3] < iso: triindex |= 8 return trianglefs[triindex](g, iso, v0, v1, v2, v3) def VertexInterp(isolevel,p1,p2,valp1,valp2): if abs(isolevel-valp1) < 0.00001 : return(p1); if abs(isolevel-valp2) < 0.00001 : return(p2); if abs(valp1-valp2) < 0.00001 : return(p1); mu = (isolevel - valp1) / (valp2 - valp1) return Vector(p1.x + mu * (p2.x - p1.x), p1.y + mu * (p2.y - p1.y), p1.z + mu * (p2.z - p1.z)) if __name__ == "__main__": main() # GRASSHOPPER PYTHON OUTPUTPOINTS = rhinoscriptsyntax.AddPoints(POINTS_CONTAINER)POINTS = rhinoscriptsyntax.CullDuplicatePoints(POINTS)…
o use these extensions in order to integrate numerous tools for analysis and simulation in the architectural process.
This course aims to develop a link between the virtual and the real context model through structural or environmental simulations, using other software or plug-ins dedicated. Through this link the virtual model receives physical properties that can further modify and adapt the initial model. This creates feedback loops that can optimize the design to provide an object responsive to environmental conditions.
Curriculum
Mesh subdivision with Weaverbird, continuous surfaces without NURBS
Genetic optimization with Galapagos, optimal search
Physical environment feedback with Diva and Geco, solar and day lighting analysis
Adding physical properties with Kangaroo Physics, interactive form-finding
Linking the parametric model with structural analysis using Karamba, structural performance simulation
Extracting data with Firefly and Kinect, 3D scanning and human movement tracking
Exchange of information between Grasshopper and other applications with Ghowl links to internet feeds or Excel files.
Schedule:
Module 04 / Grasshopper intermediate & advanced (24 h)
11 Oct – 26 Oct 2013
Fri:
Sat:
16-20
10-14
Language: Romanian
Organized by:
OAR Bucureşti – Romanian Order of Architects, Bucharest Branch
Trainers:
Ionuț Anton, idz arhitectura (ART-Authorised Rhino Trainer)
Daniela Tănase, idz arhitectura (ART-Authorised Rhino Trainer)
https://www.facebook.com/cursurigrasshopperrhinoceros
http://www.oar-bucuresti.ro/anunturi/2013/02/27/d/…
Added by Dana Tanase at 2:49am on September 5, 2013
offers new design methods helping participants both in concept and practice. Active discussions on the contemporary issues of architecture and design will be held in order to provide participants with an opportunity to share their views and create their own project.The workshop is going to be used as a platform utilising multi-layered techniques and production processes which can control intelligent geometries, calibration of parts and behavioral taxonomies, normalizing an innovative field of predictability. Exploring material intelligence, formal logic efficiencies and precision assemblies.DETAILS///In the DYNAMIC MUTATIONS workshop we will emerge into Maya’s polygon modeling, pattern makingand animationtools, adaptive skin and kinetic structures, covering all the required basis and getting a taste of its more advanced features. We are going to simulate material properties and dynamic forces with Maya physics engine. Moreover, the design logic and generative processes, as well as the potential of parametric thinking as a resourceful tool for achieving diversity and complexity in generation and fabrication. Kinesis and morphosis will be the two keys of the workshop. The participants’ end result must present both characteristics of these aspects.The goal is creating a project that each participant can proudly include in his portfolio using the state of the art programs and techniques.For attending the workshop there is no previous software experience required.WHAT YOU WILL LEARN///- Introduction in Mayapolygons and NURBS modeling- Simulation of material properties and dynamic forces with Maya physics engine- Animation tools and Maya skeleton system to control complex morphologies - Visualization and rendering techniques - Maya MEL script for creating customized tools and interface- Introduction in Rhino 3D- Parametric surface articulation with Grasshopper - Strategies for 3D printing - Lecture on project presentationTUTORS///PavlinaVardoulaki / Greece & Bulgaria / AA School of Architecture, LondonJiteshJidhav / India / AA School of Architecture,LondonAPPLICATION///http://designmorphine.com/…
Red Sea . Jordan
FORMAT:
APPLY:
Limited Spaces are Available, Application form accessible here
A 60GBP deposit can be made to secure a space, remaining payment before programme start.
The AA Visiting School Jordan requires a total fee of 895GBP. This includes.
CONNECT:
You can Visit our website http://jordan.aaschool.ac.uk
or email us at jordan@aaschool.ac.uk
PAST WORKS:
…
ASS 2017 Conference in Hamburg, Germany. Join them to:
Learn how to use simulation-based optimization in Grasshopper
Learn about the differences between optimization algorithms in Grasshopper and when to use them
Learn how to assess the performance of optimization algorithms
Learn about differences between single and multi-objective optimization algorithms
Experiment with benchmark problems
Experiment with optimization problems from your own practice and research (bring your own optimization problems)
Experiment with optimization and visualization tools not yet released publicly
Thomas and Judyta are researchers in architectural design optimization. Thomas is the lead developer of the machine learning related optimization tool Opossum and Judyta a co-developer of the particle swarm optimization tool Silverye. Adrian is the founder and the owner of Architektura Parametryczna – the biggest Polish consultancy company in parametric design. (Find Thomas’ and Judyta’s work on ResearchGate here and here.) Registration closes on Tuesday, July 25, 2017.
Registration through the IASS website:
https://express2.converia.de/frontend/index.php?folder_id=943
Facebook event page:
https://tinyurl.com/ycv24m8g
…
' group that fixes it. Unfortunately, the kludge fails with my other test surfaces so I added a switch between "Method #1" and "Method #2" - hence the group label "Kludge":
This got the holes to work on the 'right eye' surface but 'both eyes' fails for a different reason...
So I decided to see what happens with a mashup of this code with MANU's code to produce facets instead of holes:
It works! The "Smooth" holes produce a twisted lofting that looks a little weird - oh well.
The "Sharp" setting looks pretty good, though there are small differences using 'PtCloudCntr' instead of 'Area' to get the centroids...
This code (attached) is ~4 times faster when the point count is increased from 100 to 200 (~16 seconds vs. ~70 seconds):
Thanks again MANU. It's really difficult to write FAST code that handles all surfaces well.
P.S. Since MANU's code is randomly scaling down the "holes" for the facet surfaces, the 'Scale' slider in the yellow 'Controls' group can be set to 0.99 - 1.0 fails for "Sharp", though it works for "Smooth".…
Added by Joseph Oster at 11:47am on December 23, 2015
interested in a certain area or floor of a scanned building.
Having access to the Scan positions, without the need to load tens of Gigabytes, allows to quickly select and import only scans in a certain height and range.
Here a small GH definition, which uses the A-House Scan June E57 file from data.duraark.eu (10.4GB in size, 16 scans covering two levels) The GH definition allows to select and subsequently import:
a) only scans from a certain range in height - lower scans
upper
b) only scans in a certain range in XYZ direction
The definition is not very sophisticated, but demonstrates how Volvox and Point Clouds can integrate into Grasshopper workflows. The GH definition can be found here
The scan can be directly downloaded from here
Here a full view on the A-house scan with 8% of points loaded:
…
holes on each so speed increases). Zero radius circles are skipped.
The image dimensions in pixels are defined in small panels (X=485, Y=759) and used to calculate height/width ratio. That is used to define height based on the 'X' slider (500), which defines width overall.
The 'cell size' slider is also in units and determines resolution indirectly. For any given X value, increasing 'cell size' reduces the number of grid cells (resolution) and vice-versa.
Independent of other parameters, 'Isotrim (SubSrf)' splits the base surface into sub-surfaces, onto which the circles are projected. The 'SrfSplit' does the heavy lifting (can be SLOW!) and finally, 'Sort' is used to select the resulting surfaces that contain the holes.
Benchmarks:
X = 500, cell size = 10, 3161 circlesnine subsurfaces: 'SrfSplit' = 6.6 minutes, 'Project' = 13 secs.16 subsurfaces: 'SrfSplit' = 2.3 minutes, 'Project' = 17 secs.
X = 500, cell size = 5, 12542 circles (shown)35 surfaces: 'SrfSplit' = 30.6 minutes, 'Project' = 57 secs.
As noted before, a very long-standing, well-known bug in Grasshopper fails to save the Image Sampler component when I save a copy of your file. Very annoying, but there is a work-around. Copy/paste and connect the Image Sampler from the code you posted above into the place I reserved for it.
"Pro Tip": Always work at low-resolution until your algorithms are proven before cranking up to 10K+ geometry counts!
Attached file has low resolution settings with 'Project' and 'SrfSplit' (red group) disabled.…