mber of ways, and how they are represented will dictate the final outcome.
2)If you use rectangles a question for area would be how do you dictate the ratio between the width and length? It may be easier to use circles or rather simple points with a specific charge attached relating to required area, think of the metaball component in 2d or using an isosurface in 3d (I recommend Daniel Piker's Aether plugin). So do you want something orthogonal or more amorphous?
3)Means of creating adjacency: I think for the best results you will want something that operates recursively. Hoopsnake, Octopus, Loop all allow you to create your own recursive loops, however, you might find that using something like circle/sphere packing within kangaroo will give you the desired results. In the case of Kangaroo, the spheres can be given different volumes and the connective network treated as springs to push and pull things together.
4)At this point you will have your basic geometric relationships, start simple and build up. You will want to go back and embed more intelligence into the script pulling in new parameters and inputs to relate to the given context (orientation, sun angles, topo of site, vertical arrangement, circulation). Here you may add new forces to the kangaroo to create a repelling force or attraction to certain areas.
5)Once you have this all in place it is time to flesh out the model, floor plates, partition, aperture, etc. This can be done strictly in GH native. Your primary challenge is establish believable connection between the recursive solver and the forces and output, not an easy task, but very doable.
Good luck, …
ual not tactile. i havnt touched the roof of my house i have been living in since 25 years yet its a part of my space. its still a visual plane between me and sky ( except that it protects me from rain). anyway, the point was to reconstruct huge cathedrals without moving big amount of earth.I came up with Nuun lense ( i had in sketches, it will be shorter form of this ugly cube, probably in mms) which will line the necessary floors and stairs-wells and towers.
During my experiment I realized this can be used for visualizing architectural spaces in real time, specially for arch student, it could be used as a console, that can replace cad and other 3d softwares. you can draw basic grids, orthogonal shapes ( not Zaha hadid stuff ). I still am very enthusiastic about this idea. I want to see it function some day.
Grasshopper was used to drive poor reflectors through firefly, to bend laser.( it failed badly) Its just for idea if anybody likes to follow, i dont have enough resources but it would make me happy if some day i see students working on realtime laser models and building having virtual ornamentation.
Any architecture/ electronics student who wants to further his research in lasers and its application in virtual modeling can contact me.
Pic taken at 30 sec exposure
1 ft acrylic cube , 3 slidable laser panels 1 by 1 ft for each axis. all in separate pieces. (glass table, reflectors not included)…
ive input but I have no clue how to begin doing this. I've read about using Processing and have even tried something with Processing but it didn't work for me.
I haven't had any luck finding step by step tutorials on inputing data with the 'read file' tool either. I have a feeling that just knowing how to import data would help a lot but the only examples I've found didn't work for me.
I'll be honest though, when it comes to programming and code, I'm an idiot and at a very beginner level. However, once I have working code to study and play around with, I pick up pretty quickly. I've done this with some of the GH definitions I've found and had some good results.
Basically, it's been very difficult and frustrating since I've spend literally 4 weeks trying to figure this out. Like I said, I'm not good with code! Fortunately I've had a little bit of help from the GH community and am very thankful. With any luck, maybe some other people on here would be willing to help out a couple students working on a thesis project? We don't have money but could exchange fabrication services for your help with code or definitions. We have access to a 3 axis CNC mill, Laser Cutter and FDM printer.
Thanks for your time (and hopefully your help),
Matt.
…
to problems. If anyone wants to take a look at the attached file "605b-3" and try to help me, that would be awesome.
The way I'm thinking about creating the louvers:
1. Contour the shape (could be any shape, but I attached the one I'm trying to do it to)
2. Divide those contour curves
3. Find the 4 points on those curves that are furthest away from the center of each curve
4. Move those points slightly away from the center of each curve
5. Replace the unmoved points with the moved points
6. Interpolate/NURBS curve through the new list of points
7. Loft the new curves with the original contour curves
I think I'm close, but I'm getting stuck at the end- I thought shifting lists would be the best way to solve my problem, but I'm a little confused as to how grasshopper is organizing the list of new curves and how to match that organization to the original curves.
Attached is an image of where I am stuck. I can only create a surface in the gap that I'm trying to create by the louvers. Either that, or one or two of the curves tends to create a "tornado" looking thing and i can't figure out how to fix it without individually breaking up the list. Is there a way to set all the curve seams to be at the same location in a list?…
ry branches would be an added bonus.)
I had an idea of using contours to find the center point, then connecting these found center points to create my centerline. However, I am facing a few challenges... specifically, I do not know how deal with splits in the tree branch.
I think I have an idea for how to deal with this, but I am not skilled enough (yet) to execute. The whole idea would look like this:
1) create a list of contours through the tree branch
2) connect the center points of the contour lines
3) when a single contour produces two separate polylines (when the tree splits), AND the previous contour produces only a single polyline, divide the list into two new lists starting at that contour.
4)when a single contour produces two separate polylines, AND the previous contour also produces two separate polylines, draw a polyline between the closest pair of centroids.
Has anyone run into this (or something similar) before? And, is this a good way of going about it?
The attached script is incomplete, but has the oak tree branch internalized.
I have been struggling hard with this....Any help would be greatly appreciated!!
Thanks,
Ethan
…
Added by Ethan Davis at 8:55pm on September 4, 2017
ive collaborative environment.
TYPE : Course module and Workshop
The event is open for anybody interested from all the fields of design, including: architecture, interior design, furniture design, product design, fashion design, scenography, and engineering.
1. COURSE MODULE (20-23 April 2014) - optional
+ type: 3 days intensive course regarding basic knowledge in parametric design (LEVEL 1)
+ software: Rhinoceros & Grasshopper
+ plugins: Kangaroo, Weaver Bird, Lunch box, Ghowl, Geco
+ achievements:
- acquainting to the components & the concept of Generative Design
- understanding the strategies in Algorithmic Design
- how to easily insert simple mathematical equation into the project to gain more control
- how to utilize proper plugins with respect to their nature of the project
- interacting with different analysis platforms such as Ecotect & remote controller
- solving several exercises with different scales( 2D- 3D ) during each phase of the workshop
2. WORKSHOP (23-27 April 2014)
A 5 day Design-Based Research Workshop exploring new techniques in Digital Architecture/Fabrication, with a specific focus on the use of generative systems and parametric modeling as tools for creative expression.
Our ultimate goal is to increasing the efficiency of utilizing digital tools in parallel with geometric performance of the primitive design agent.
+ + CONCEPT
Fashion and Architecture are both based on basic life necessities – clothing and shelter.
However, they are also forms of self-expression – for both creators and consumers.
Both fashion and architecture affect our emotional being in many ways.
The agenda of this workshop is to investigate on the overlap between these two areas of design, art & fashion.
Fashion and architecture express ideas of personal, social and cultural identity, reflecting the concerns of the user and the ambition of the age. Their relationship is a symbiotic one and throughout history, clothing and buildings have echoed each other in form and appearance. This only seems natural as they not only share the primary function of providing shelter and protection for the body, but also because they both create space and volume out of flat, two-dimensional materials.
While they have much in common, they are also intrinsically different – address the human scale, but the proportions, sizes and shapes differ enormously.
+ + + OBJECTIVES
So far, Architects have been using techniques such as folding, bending etc. to create space, structural roofs or different other structural shapes.
The agenda of this workshop goes further with the investigation of algorithmic thinking through generative tools Integrated in design.
The challenge is creating a bridge that connects these two areas of design, architecture and fashion that perform at two opposite scales.
+ + + + TECHNICAL BRIEF
In the early stages physical models and low-tech strategies will be used, allowing the participants to gain a greater understanding of materials, fabrication and assembly methods as well as simple, yet pragmatic structural solutions.
Later in the workshop these strategies will be digitalized and elaborated using software visualizing tools such as Rhinoceros and the algorithmic plug-in Grasshopper.…
t file** - ply file with just x,y,z locations. I got it from a 3d scanner. Here is how first few lines of file looks like - ply format ascii 1.0 comment VCGLIB generated element vertex 6183 property float x property float y property float z end_header -32.3271 -43.9859 11.5124 -32.0631 -43.983 11.4945 12.9266 -44.4913 28.2031 13.1701 -44.4918 28.2568 13.4138 -44.4892 28.2531 13.6581 -44.4834 28.1941 13.9012 -44.4851 28.2684 ... ... ... In case you need the data - please email me on **nisha.m234@gmail.com**. **Algorithm:** I am trying to find principal curvatures for extracting the ridges and valleys. The steps I am following is: 1. Take a point x 2. Find its k nearest neighbors. I used k from 3 to 20. 3. average the k nearest neighbors => gives (_x, _y, _z) 4. compute covariance matrix 5. Now I take eigen values and eigen vectors of this covariance matrix 6. I get u, v and n here from eigen vectors. u is a vector corresponding to largest eigen value v corresponding to 2nd largest n is 3rd smallest vector corresponding to smallest eigen value 7. Then for transforming the point(x,y,z) I compute matrix T T = [ui ] [u ] [x - _x] [vi ] = [v ] x [y - _y] [ni ] [n ] [z - _z] 8. for each i of the k nearest neighbors:<br> [ n1 ] [u1*u1 u1*v1 v1*v1] [ a ]<br> [ n2 ] = [u2*u2 u2*v2 v2*v2] [ b ] <br> [... ] [ ... ... ... ] [ c ] <br> [ nk ] [uk*uk uk*vk vk*vk]<br> Solve this for a, b and c with least squares 9. this equations will give me a,b,c 10. now I compute eigen values of matrix [a b b a ] 11. This will give me 2 eigen values. one is Kmin and another Kmax. **My Problem:** The output is no where close to finding the correct Ridges and Valleys. I am totally Stuck and frustrated. I am not sure where exactly I am getting it wrong. I think the normal's are not computed correctly. But I am not sure. I am very new to graphics programming and so this maths, normals, shaders go way above my head. Any help will be appreciated. **PLEASE PLEASE HELP!!** **Resources:** I am using Visual Studio 2010 + Eigen Library + ANN Library. **Other Options used** I tried using MeshLab. I used ball pivoting triangles remeshing in MeshLab and then applied the polkadot3d shader. If correctly identifies the ridges and valleys. But I am not able to code it. **My Function:** //the function outputs to ply file void getEigen() { int nPts; // actual number of data points ANNpointArray dataPts; // data points ANNpoint queryPt; // query point ANNidxArray nnIdx;// near neighbor indices ANNdistArray dists; // near neighbor distances ANNkd_tree* kdTree; // search structure //for k = 25 and esp = 2, seems to got few ridges queryPt = annAllocPt(dim); // allocate query point dataPts = annAllocPts(maxPts, dim); // allocate data points nnIdx = new ANNidx[k]; // allocate near neigh indices dists = new ANNdist[k]; // allocate near neighbor dists nPts = 0; // read data points ifstream dataStream; dataStream.open(inputFile, ios::in);// open data file dataIn = &dataStream; ifstream queryStream; queryStream.open("input/query.
pts", ios::in);// open data file queryIn = &queryStream; while (nPts < maxPts && readPt(*dataIn, dataPts[nPts])) nPts++; kdTree = new ANNkd_tree( // build search structure dataPts, // the data points nPts, // number of points dim); // dimension of space while (readPt(*queryIn, queryPt)) // read query points { kdTree->annkSearch( // search queryPt, // query point k, // number of near neighbors nnIdx, // nearest neighbors (returned) dists, // distance (returned) eps); // error bound double x = queryPt[0]; double y = queryPt[1]; double z = queryPt[2]; double _x = 0.0; double _y = 0.0; double _z = 0.0; #pragma region Compute covariance matrix for (int i = 0; i < k; i++) { _x += dataPts[nnIdx[i]][0]; _y += dataPts[nnIdx[i]][1]; _z += dataPts[nnIdx[i]][2]; } _x = _x/k; _y = _y/k; _z = _z/k; double A[3][3] = {0,0,0,0,0,0,0,0,0}; for (int i = 0; i < k; i++) { double X = dataPts[nnIdx[i]][0]; double Y = dataPts[nnIdx[i]][1]; double Z = dataPts[nnIdx[i]][2]; A[0][0] += (X-_x) * (X-_x); A[0][1] += (X-_x) * (Y-_y); A[0][2] += (X-_x) * (Z-_z); A[1][0] += (Y-_y) * (X-_x); A[1][1] += (Y-_y) * (Y-_y); A[1][2] += (Y-_y) * (Z-_z); A[2][0] += (Z-_z) * (X-_x); A[2][1] += (Z-_z) * (Y-_y); A[2][2] += (Z-_z) * (Z-_z); } MatrixXd C(3,3); C <<A[0][0]/k, A[0][1]/k, A[0][2]/k, A[1][0]/k, A[1][1]/k, A[1][2]/k, A[2][0]/k, A[2][1]/k, A[2][2]/k; #pragma endregion EigenSolver<MatrixXd> es(C); MatrixXd Eval = es.eigenvalues().real().asDiagonal(); MatrixXd Evec = es.eigenvectors().real(); MatrixXd u,v,n; double a = Eval.row(0).col(0).value(); double b = Eval.row(1).col(1).value(); double c = Eval.row(2).col(2).value(); #pragma region SET U V N if(a>b && a>c) { u = Evec.row(0); if(b>c) { v = Eval.row(1); n = Eval.row(2);} else { v = Eval.row(2); n = Eval.row(1);} } else if(b>a && b>c) { u = Evec.row(1); if(a>c) { v = Eval.row(0); n = Eval.row(2);} else { v = Eval.row(2); n = Eval.row(0);} } else { u = Eval.row(2); if(a>b) { v = Eval.row(0); n = Eval.row(1);} else { v = Eval.row(1); n = Eval.row(0);} } #pragma endregion MatrixXd O(3,3); O <<u, v, n; MatrixXd UV(k,3); VectorXd N(k,1); for( int i=0; i<k; i++) { double x = dataPts[nnIdx[i]][0];; double y = dataPts[nnIdx[i]][1];; double z = dataPts[nnIdx[i]][2];; MatrixXd X(3,1); X << x-_x, y-_y, z-_z; MatrixXd T = O * X; double ui = T.row(0).col(0).value(); double vi = T.row(1).col(0).value(); double ni = T.row(2).col(0).value(); UV.row(i) << ui * ui, ui * vi, vi * vi; N.row(i) << ni; } Vector3d S = UV.colPivHouseholderQr().solve(N); MatrixXd II(2,2); II << S.row(0).value(), S.row(1).value(), S.row(1).value(), S.row(2).value(); EigenSolver<MatrixXd> es2(II); MatrixXd Eval2 = es2.eigenvalues().real().asDiagonal(); MatrixXd Evec2 = es2.eigenvectors().real(); double kmin, kmax; if(Eval2.row(0).col(0).value() < Eval2.row(1).col(1).value()) { kmin = Eval2.row(0).col(0).value(); kmax = Eval2.row(1).col(1).value(); } else { kmax = Eval2.row(0).col(0).value(); kmin = Eval2.row(1).col(1).value(); } double thresh = 0.0020078; if (kmin < thresh && kmax > thresh ) cout << x << " " << y << " " << z << " " << 255 << " " << 0 << " " << 0 << endl; else cout << x << " " << y << " " << z << " " << 255 << " " << 255 << " " << 255 << endl; } delete [] nnIdx; delete [] dists; delete kdTree; annClose(); } Thanks, NISHA…
step-sizes. It starts out with large jumps, then as it cools the jumps get smaller and smaller as does the likelihood of a retrograde jump being accepted as a valid new state.
Most fitness landscapes have more than one dimension and therefore a 'jump' could include any number between 1 and N, where N is the dimensionality of the landscape. The Drift Rate setting —which may well be poorly named— controls the odds that a jump includes an additional dimension. All jumps must be at least one-dimensional, but 25 percent of them (on average) will include another dimension. 25% of those will include a third dimension and 25 percent of those a fourth and so on and so forth until the dimensionality of the landscape has been reached. Here's a list for 1000 jumps:
Drift Rate: 25%
1D jumps: 750
2D jumps: 187
3D jumps: 47
4D jumps: 12
5D jumps: 3
6D jumps: 1
A good question to ask would be; "Why would you want a jump to include more than one dimension?" and the answer is that the more genes are related, the higher the changes that a multi-dimensional jump will yield an improvement. It's not difficult to imagine that you cannot improve your current state by only modifying a single gene. Sometimes you need to change two in unison in order to reach a better solution. If your genes are highly related (which is bad practice to begin with) then you may need to adjust the Drift Rate to a higher value.
--
David Rutten
david@mcneel.com
Poprad, Slovakia…
Added by David Rutten at 11:09am on April 17, 2012
make sure I add this information to groundTerrain_ inputs in the next few days.
So if you are using "Gismo Terrain Generator" component (former "Ladybug Terrain Generator 2" component), only the following types are allowed for groundTerrain_ input: type_ = 2 (surface with rectangular edges)
type_ = 3 (surface with circular edges)If you are using "Ladybug Terrain Generator" component, then only the:
type_ = 1 (surface with rectangular edges)
is allowed.
As for terrain not being colored when it is created as a surface, you can analyse it additionally with "Terrain Analysis" component for Elevation analysis type. It can even be colored for rendering afterwards by using the "OSM Render Mesh" component. Check the attached file below.Have in mind that in urban areas "Ladybug Terrain Generator" component produces much more precise terrain than "Gismo Terrain Generator" component. On the other hand, the latter component can generate much larger terrain areas (up to 10 000 sq km2, at least in theory).
The reason why component might still work even though a terrain mesh has been added to the groundTerrain_ input is probably because once groundTerrain_ input fails to convert a mesh to a brep, this results in it being equal to None. Component then considers as if groundTerrain_ input is empty and runs as if nothing has been added to it (the buildings are laid down on a flat plane with 0,0,0 as the plane origin).
Thank you once again for all the testing you are doing!!! It really makes Gismo a better plugin!!…
Added by djordje to Gismo at 12:45pm on February 8, 2017
ng the "kaleidocycle" as a facade component, and i need to be able to move it through its entire "rotation" in 3d space to understand where and how it is moving.
http://www.youtube.com/watch?v=4owFczeqqMQ
this is what it is doing, in general. there are 2 sets of 3 hinges, rotated 180 degrees, making up a hexagonal form.
here is a rhino model of the form. i used the trigonometric properties of the isoceles triangle to make this model very accurate (63.333, 53.333, 63.333 angles), and now i need to describe the movement.
It is TOUGH. i think i have it and it just throws me for a loop (no pun intended).
I have a ghx model set up to where it can go through part of the cycle, but the inbetween states are incorrect, and therefore it's not valid, but it shows how something like this could work. The trick is it rotates on multiple axes at different times, and its just very very tricky to figure out what it is rotating around and when.
If anyone has any ideas, or insight, please please let me know. I am working on this in my masters' studies, and I'm pretty screwed if i can't figure this out in grasshopper!
Also, please find attached a research article concerning this form. I haven't been able to apply the geometric findings of theirs, yet. But it shows it can be described mathematically.
THANK YOU!!!!
benjamin
…