eas and references:
1. The Geometry of the Envoirnment, Lionel March and Philip Steadman, Chapeter 10 - 11
2. There is a good overview on Floorplan generation methodes under this link:
http://entwurfsforschung.de/layout/
3. Have a look @Space Syntax grasshopper plugin
4. The random approch / Infinit monkey theorem
https://vimeo.com/37186522
This has its limits 100+ rooms will not realy work...
5. A more obscure math approch -> spectral Graph matching
https://vimeo.com/136231619
And the paper to read:
http://www.sss10.bartlett.ucl.ac.uk/wp-content/uploads/2015/07/SSS1...
6. Shape grammers
https://en.wikipedia.org/wiki/Shape_grammar
enjoy....
…
ectural context.
We will work with 5 projects that meet the conditions to be re-thinked nowadays in parametrical terms. { FOA : World Trade Center / MAD OFFICE : 800M Tower / TOYO ITO : Relaxation Park / FOSTER & PARTNERS : Gherkin Tower / FREE : Soumaya Museum }
We will produce dynamic objects defined by parameters and modified in realtime.
We will learn to discretize, facet and panel in a non homogeneous way.
We will work with restrictions to determine our shapes, obtaining unpredictable results.
And we will take the control of what we produce : by measuring , visualizing and optimizing our parametric forms.
2 Groups / 30 students max :
Thursdays : 25 Apr ,02 ,09 ,16 & 23 May
Saturdays : 27 Apr ,04 ,11, 18 & 25 May
Fee : 73 € / student…
Added by Carlos Bañón at 10:26am on April 18, 2013
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
production and presentation; to feel the workflow of some of the top ranked architectural universities. It is an opportunity for professionals to join and exchange ideas with a team of world reputable tutors. GENERATIVE MORPHOLOGIES v2 will focus on exploring the potential of parametrically driven generative processes and their combinations. By those processes we mean growth algorithms, production systems, physics and chemistry based reactions. While some of those notions may be known for decades, the usage of parametric software can ease merging and crossing between them, therefore enriching them with new possibilities. One of the main ideas behind the workshop is to collide emergent processes with deterministic systems and gain control over the final complex outcome of the algorithm, while maintaining its' valuable qualities. DETAILS/// GENERATIVE MORPHOLOGIES v2 will use the Anemone plug-in as the main workflow driver. From the practical point of view, we will make sure to briefly cover the Grasshopper basics, dive deep into data tree concept, learn about simple scripting in GH, compare the usual GH workflow with looping paradigms (Anemone, Hoopsnake and Octopus) and much more. 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 Rhino 3D, Grasshopper - Introduction in Anemone, Hoopsnake, Octopus - Strategies for 3D printing - Rendering with Vray - Discussions on project presentation APPLICATION/// http://designmorphine.com/…
oblete (Tools ID), Sebastián Pulgar (Rhinoceros Chile) y este servidor, para el seminario: ” Diseño y Fabricación de Productos con Rhinoceros“
El programa es el siguiente:
10:00 Bienvenida: David Torreblanca Coordinador Centro Tecnológico de Diseño DuocUC
10:15 Conferencia Rhinoceros: Diseño, Academia e Industria (René Medel)
11:15 Charlas Diseño y fabricación de Productos con Rhino en Chile (Guillermo Parada + Alvaro Poblete)
12:15 Workshop Modelamiento Generativo Paramétrico con Grasshopper (Sebastián Pulgar + René Medel)
13:00 Lanzamiento Concurso de Modelamiento 3D DuocUC con Rhinoceros
13:15 Cierre:preguntas, opiniones y comentarios del público
Los esperamos cordialmente a todos los que quieran asistir. La entrada es liberada. (Av. Vespucio 1501, Cerrillos. Duoc Plaza Oeste)…
nitions prior to Karamba are to allow the genes to manipulate the form of the shell and then kangaroo to relax the form to its "equilibrium" state.
The definition, as attached, runs fine over one iteration. However, when I run the Galapagos solver, rhino slowly uses up my computers memory and then ultimately crashes (around 80 Galapagos iterations). I don't think that the surface patch, or kangaroo are the issue, as I have run other iterative definitions through them without issue.
I believe Karamba may be occupying memory each iteration that is not released when a new iteration begins. This problem is exasperated by the fact that I am running 11 load cases, 9 of which are point loads defined over each vertex of the mesh. I ran a definition with only one load case, and it reached 170 generations (with a population of 50 for each generation). However, at this point it had occupied 90% of my computer's available memory.
Do you know of a way to ensure that Karamba purges its memory after an iteration, or is this a possible memory leak bug?
Thanks again, any help you can provide is much appreciated.
Sean
…
hem. Now I need to search through the original points that comprise the voronoi diagram and replace them with the new averaged points. I need to do this while still preserving the logic of the old data tree which is comprised of {i}j values. In other words each point is grouped into a vornoi cell so that the cells can be created with the polyline component
I believe I have a relatively simple solution, but need help create a python script that searches and replaces values within a data tree.See the psuedo code below:
Psuedo-Code:
For each item(i) in Data tree B (list of index values points to be replaced grouped into a data tree corresponding to the new point) find the corresponding integer in Data tree C (list of points grouped around {i;j} values)Then replace the integer in Data Tree C with the key value (the data tree path) that corresponds to the item from Data tree B that is replacing the item from Data tree CFor example:Data Tree B{14}(0)2(1)3(2)6(3)11(4)13(5)14Data Tree C{0;1}(0)2(1)3(2)6Output:Data Tree {0;1}(0){14}(1){14}(2){14}
List A - Single point (New Point) with Data Tree/Key value corresponding to group of points it will replace ( List B)
List B-list of index values of flattened voronoi point list with Data Tree/Key Value corresponding to List A - in other words these are all the points I need to replace with the point in List A
List C-list of index values of flattened voronoi point list with Data Tree/Key Value corresponding to {i}j values necessary to re-create voronoi cells with the polyline component
Once this is done I can use the Output and the new Points in List A to replace the set of old points in the original voronoi diagram with the new set up reduced points.
If there is another way to achieve the goal of eliminating small edges of a vorononi diagram, I'm open to suggestions.
…
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)…
nother nurbs surface that is built from control points extracted from the other two (3 three rows of control points shown in the picture are the ones I would like to use).
When I try to use the "Surface from Points" component, however, I cannot get the surface to generate properly. From my understanding of previous discussions on this forum, the U parameter should be U+1 which in my case would be 11. No parameter from 0-11 is producing the results I'm looking for, however.
My attempted solution is attached. I get the feeling the solution will be quite straightforward...
Thanks,
Austin
…
tors: R.G.D.E tutors Mostafa R. A. Khalifa, Architect (PhD - UNICAM - Italy)
Assistants: Nagham Baitawy - Architect - Jordan
Ahmed Hassan - Architect & TA - Egypt
deadline registration August, 25th , 2013
http://grasshopperworkshopamman.blogspot.com/ introduction: This workshop will introduce basic and advanced notions of Grasshopper and the methodology of parametric design and algorithmic modeling and its usage in Architecture, design, landscape, and urban scale. It is intended for professionals and students with a minimum experience in 3D Modeling.
…