ject that involves the design of an app that allows people to interact with a 3d model through some sliders.)
Ok, imagine you have a symmetrical shape like the one i drew:
What I intend to do is to have different 3 sliders that allow me to adjust the 3 distances (x, y, z) independently of one another.
-1st question: my idea is to draw the curves in rhino, then use the "divide" and "list item" components to extract the points I need. Is it correct? :D
-2nd question: the "move away from" component can be used in a symmetric way?
(I try to be more specific: with only one slider, can I move both points 5 and 6 simultaneously about the axis i drew?)
-3rd question: is there a way that allows the curves to reshape themselves as I move the slider related to the distance between a couple of points?
I hope I have been clear ;) I would greatly appreciate any help you can give me!
Matteo…
ces, cats, dogs anything.
3. Pick some in 2 and write down some algorithm (rather impossible without code) that makes "random" tree - like columns that grow with some fractal logic and "end" to the grid points in 1. Take case about some "even distribution" (see step 4). Obviously columns are made by tubes welded on site (expensive + tricky) or modular via some MERO variant (cheaper but a bit ugly).
Break: in order to do WOW tree-columns you need quality code not a mesh (or a CRAY or even ... hmm ... HAL9000). Estimated CPU time for a random tree-like column with, say, 5-20 nodes: 0.001 milliseconds.
4. place I beams (or C or IPE or IPN) along a given direction (or both) using points in 1 and support them by the ends of the tree-columns. I would recommend ball-pivot joints for obvious reasons.
Now ... this ... (as I said: I'm a bit lost). I mean ... doing this in a large scale (as your initial image suggests) is rather out of question even in Dubai (prior the D-Day). Maybe out of question even in China (where billions are aplenty).…
g that there's clash issues related with the convex edges: the "inward" ones so to speak).
2. If we call the teeth that is contained inside the Face "inside" (Length as in D) and the other "outside" (shorter Length > make a sketch > trigonometry > etc) ... then there's no clash issues ("along" each teeth: i.e. "along" the initial donor edge direction) since the inside meats always the corresponding outside.
3. However there's clash issues related with the start/end portions of the polyline (due to offset).
4. There's also clash issues ("across" each teeth, i.e. perpendicular to the initial donor edge) .. meaning that the polyline must take into account all these constrains (at creation time ... or at "offset" time)).
Guru refused to dig into more details (God knows what he actually means with all the above). He only added that the trick is an ability to watch BOTH polylines (per adjacent Face) at once (rather easy for him).
Moral: a tipple espresso for me please. …
ies of reference boxes and using the Box Morph component.
So far I've had some success, as shown in the image. However a few things have cropped up (probably not helped by my limited GH skills!)
1- The morphed geometry isn't aligned. I have ensured the original points match point for point; I have a feeling the u&v directions might have swapped?
2- So far I have been splitting the complex geometry manually in Rhino and defining manually in GH, then matching reference box to target box one by one. This was more for the sake of expedience, and to see if it worked; however I feel there must be a better way of doing this. Maybe the reference boxes split the complex geometry, then test for any contained geometry (the 'Inside' component?)
3- I feel there might be a better (existing!) solution somewhere, as I can't be the first person to try this!
I've attached an image of what I'm trying to do + the definition. The .3dm file is 12MB, I can send it upon request :D
All help would be much appreciated, thanks…
tura significa confrontarsi con l’architettura ‘free-form’, in cui indagare liberamente la generazione di forme, a prescindere da ogni principio compositivo, statico o costruttivo.Il workshop di costruzione è un momento di sperimentazione didattica sulle strutture resistenti per forma, un'occasione per confrontarsi con problemi costruttivi reali, per superare la dicotomia tra progetto e realizzazione, forma e struttura.
Lecture >> 26/04 >> info qui
Dialogo tra architetture organiche nel segno della sostenibilità: il panorama italiano contemporaneo a confronto.
Laboratorio di progettazione >> 27-29 aprile >> + Laboratorio di costruzione >> 4-6 maggio >> info qui …
is the way the component was designed, but I love it and have used it multiple times.
You state:
Now for your position 3 the angle is either 0° or 180°. Since calculating the angle will always return both angle and reflex angle, you need to decide, which to use. AlignPlane uses minimal rotation. Hence your WorldXY will get no rotation at all for your position 3.
However... that's not actually true or what is happening. If you look closely at the image supplied in the original post you will see that the plane displayed at 180 is indeed rotated and the X vector is indeed pointing to -X. To double verify that I extracted the X vector from those planes and displayed them... clearly you can see in the image below that the AlignPlane component is rotating the plane at 180.
Now... to get back to the original issue. The problem I pointed out in my original post was not with the AlignPlane component, but rather with the OrientDirection component. It seems to me that component has an issue when fed a target direction of -X {-1;0;0} for a target vector.
To eliminate the confusion caused by the AlignPlane component I eliminated that component from the design and simply used rotated vectors as input to the target direction of OrientDirection. You will see that the results are the same... when given a target direction of {-1;0;0} the object is not rotated, while any other vector input does rotate the object.
I've attached the updated gh file demonstrating the issue using rotated vectors as the input for dB target direction of the OrientDirection component.…
ign to every location in the space is the result of the fall-off equation. F/D² in the Metaball componenty, where D is the distance from the point to the location you're measuring and F is the scaling factor:
3) You repeat this for all the points, giving you a collection of revolved hyperbola:
4) Add the elevations for all hyperbolas together, just a simple A+B+C process:
5) You intersect this final landscape with a horizontal plane. The elevation of this plane corresponds with the iso-surface value. If we do it for a bunch of planes, you get the following result:
6) The interior of each slice represents the metaball, or rather the boundary of each slice:
That is the theory anyway, in order to actually get a speedy result the algorithm approaches the problem from a very different angle, but the result should be the same shape.
--
David Rutten
david@mcneel.com
Poprad, Slovakia…
definition, you have 3 subsurfaces, so A = 0, 1, 2. For each subsurface you have a grid of points that is 76 x 76. Therefore, B = 0, 1, 2,...75, representing each of the 76 rows of points. Finally, each row has 76 points in it, so N=76 for each branch. Your data tree looks something like this:
{0; 0} N=76
{0; 1} N=76
{0; 2} N=76
...
{0; 75} N=76
{1; 0} N=76
{1; 1} N=76
{1; 2} N=76
...
{1; 75} N=76
{2; 0} N=76
{2; 1} N=76
{2; 2} N=76
Since you don't care that the points on each subsurface are organized in rows, you don't care about the B level of branches. You just need:
{0} N=5776 (76*76=5776)
{1} N=5776
{2} N=5776
So what I the Path Mapper does is get rid of the B level, flattening all the points into the A level. {A;B} --> {A} tells GH to just ignore the B level.
As for the Simplification, in this case (I think) it is just to more easily understand the data tree structure and make the Path Mapper syntax easier. If you un-Simplify the "P", "N", and "uv" outputs, you'll see the data tree structure is {A;B;C;D}, but A and B are always 0, so they aren't doing anything. If you left it like that, the Path Mapper would have to say {A;B;C;D} --> {C} since the second level of the tree, the C in this case, still represents the three subsurfaces. The Simplify on those outputs just gets rid of the unused extra levels that are always 0.
Whew! I hope that that was helpful and not more confusing.…
2013 | mayo 30, 31 y 1 de junio. 15 Hrs.
Horario: 18:00 – 22.00 Jueves, Viernes y Sábado de 8:00 a 16:00 Hrs. Instructor_ Arch. David Hernández Melgarejo.
http://bioarchitecturestudio.wordpress.com
Objetivos:
El curso está dirigido a cada diseñador, ingeniero o arquitecto que quiere obtener una sólida base en modelado generativo y paramétrico dentro del flujo de trabajo en Rhinoceros.
En el curso se explorarán y construirán estructuras en el espacio paramétrico, incorporando entidades geométricas (Curvas, Superficies, Puntos, etc…) y usando patrones algorítmicos.
Cada paso será soportado con ejercicios que gradualmente incrementarán su complejidad.
El alumno aprenderá cómo trabajar con asociación geométrica y parámetros. Para perfeccionar asociación geométrica – asociación entre partes, asociación dinámica – las formas geométricas son generadas al seguir la conexión lógica entre la parte geométrica y su restricción, dimensión paramétrica y él proceso dinámico del diseño: en pocas palabras estimulamos el pensamiento relacional.
Resultados:
Los participantes con éste entrenamiento obtendrán las siguientes fundamentos.
· Construir, modificar, depurar y correr aplicaciones de Grasshopper.
· Comprender el editor gráfico algorítmico y sus patrones usando grupos y cables conectores.
· Trabajar con dimensiones dinámicas, parámetros y listas.
· Generar aplicaciones orientadas a la documentación del diseño y la fabricación.
Palabras clave:
Diseño Computacional, Scripting, Rhinoceros 5.0 + Grasshopper, Parametrización, Análisis, Fabricación Digital.
Para mayor información:
MArch. Kathrin Schröter. E-mail: kschroter@itesm.mx
Dirección de Arquitectura. Oficinas de Aulas 1, segundo piso.…
ld work.
For example there's a grid shell and I've got a number of control points (for example 3) that can move up and down.
Depending on the control points I get forms that are structurally good and some that are bad.
In my office we've got a GH-Component, which leads the geometry in structural members and solves the structural forces and so on through an external Software called Sofistik and afterwards gives back to GH some Values, for example maximum bending moments. (Like Karamba)
Now I want to create this optimization component or something like that to minimize e.g. the bending moments in the given geometry.
Let's start with the work of the component.
So when I've three control points that can only move in z-direction.
P1(0,0,Z1), P2(10,0,Z2), P3(5,5,Z3)
They only depend on Z, so everything depends on Z1 to Z3 which have a range between 0 and 10 f.e.
First I want to get some (between 9 and 15) random Particles, one particle consists of this 3 different Z's.
So for example the first particle Part1 is [Z1=10, Z2=5, Z3=7]
and the second particle Part2 is [Z1=7, Z2=1, Z3=9]
and so on.
I created these Start Particles in a Cluster. See attached file.
I also tried this in C#, but thought it is easier in GH.
After I've got the Start Particles I want to give out the first particle and evaluate with its including Z's the target value in GH. Therefore I had to take the first branch and graft this branch (Discussion before)
Afterwards I want to save this Target Value that depends on the first starting Particle. Then I want to give out the second starting Particle to evaluate its target Value and store it. And so on till the last target Value of the last Starting Particle got assigned.
Then I want to assign the particles with its target values. E.g. part1: t=0.9, part2: t=1.8...
Then I want to define neighborhoods or the count of the expected local minima.
These neighborhoods can look like: Each neighborhood has to include not less than 3 particles. And the particles have to be next to each other.
E.g. if there are 12 particles and I want to have a look for 3 local minima, I need 3 or 4 neighborhoods. Then I would take 3 neighborhoods, because the more particles in one neighborhood, the better.
So the Count of the neighborhoods would be N=min{(Count of Part/3)& N_min}
How to define these neighborhoods I don't know at the moment. I think it has to be searched for the distance between the particles. E.g. part1 with (9,9,9) and part2 with (9,9,8) are next to each other but part 3 with(1,1,2) is far away.
Then each StartParticle is set to Partx_localbest.
And in each Neighbourhood the best of these localbeststs is Part_NyBest. (The best ist the one with the smallest target Value)
Loop:
Now I want to create new Particles. These Particles don't change their Z-values randomly. They change their Z-Values depending on Part_NxBest and Part_localBest. Therefore it has to be evaluated a new velocityfactor with v_Partx_new=0,792*v_PartxOld+1,5*random(0,1)*(partx_localbest-partx)+1,5*random(0,1)*(part_NyBest-partx)
The new particles will then be partx_new=partx+v_Partx_new.
The new Particle partx_new will be set to partx and then set in the output.
then there has to be caught the targetValue of part1 afterwards part2 can be put out and its target value caught and so on.
Then it has to be looked for the Partx_localbest through comparing the partx_localbest and its target value with the new part_x and its target value. If the target value of the new partx is smaller than partx_localbest,
then partx_localbest is the new partx.
This has to be done for each partx. Afterwards the same for neighborhoods best (best of all partx_localbest in one neighborhood)
Endloop if velocity gets small.
Output all part_NxBest
Output all targetvalues of the part_NxBests.
So in the Input there have to be:
StartParticles if they are given through the cluster attached.
Device on the target Value like in the attached gh.file from David Rutten I found in the discussions
Count of neighborhoods
And in the output
Output particle for evaluation
Output all part_NxBest
Output all targetvalues of the part_NxBests
Hope didn’t forget anything. And hope it isn’t crushed to badly. Sorry for my bad English by the way ;-)
For more explanation, how the PSO works in other programs. There’s attached a workflow script (is it called like that?) I think for GH it should be a little bit changed like I tried in my explanations.
So if you can help me a in some parts or you have any advices would be great, otherwise thank you nevertheless!!!!
Thankfully there’s no limit for the words in the discussions :-D
Best, Heiko
…