mple:
I wish to populate a rectangle with some random points, but I need them to be more dense at the base of the rectangle and then linearly getting more and more sparse towards the top.
This is how I worked it around:
1) first I have created a triangular prism,
2) then I've populated its volume with some random points
3) and finally I've projected them on the plane I'm wishing to populate.
But I don't really like the final result since the points are not as nicely spaced as if they were produced by the "Populate 2d" command. They look kind of "clumpy":
Do you have any better idea?
The best thing would be to be able to put a grayscale bitmap underneath and use it as a "density map"...
Here you have the .gh file I made:
prism.gh
Thank you very very much for the help! :)
By the way:
While I was preparing my 3d random distribution of points I've spotted a weird behaviour of the random command:
Even if the seeds are all different, for some values of them the points still belong to some common planes...
To solve that I had to jitter the output of one of the Random components.
I suppose this is a weakness of the pseudorandom generator implemented in the random component, isn't it?…
ilion.
Then i sketched the outline curves in rhino with a few control points. The building is symetric so i only draw one side. But i'm not sure what is better for a voroni. a sharp or a soft surface? Or dose i need points?
So i have some questions:
1. how can i loft the curves correctly? My problem is that if i divide my curves for more control points, grasshopper automatically change my curve. thats ok but than i've the problem with a short curve, which fit bevor with the large one, but after the devision it can't connect.
So i tryed to duplicate the long curve and split it but with the shatter battery it dosen't work. It always cut the curve somewhere.
2. my next problem is, the curves in rhino should be my main construction, which is always visible. so i decided to offset the curves that i got a colum. but i don't know how to orient the offset curves in the xyz axis.
3. hopefully if i have the surfaces, how can i build a voroni which is offsetet, and has maybe some different thicknesses? :D
Would be really great if s.o. can help me. I tried a lot but not every thing is simple.
Sorry for my bad english.
Thx max
Here are my files:
FCP_MAX_GH_konstruktion_1.3dm
FCP_MAX_GH_konstruktion_1.gh
…
that are available, I found myself in a quite difficult problematic.
I did a lot of google search/work and found some information, but still kind of haven't got the information that I need or want to use. Note: Our school has provided us 3 hours of basic Grasshopper tutorial and one hour of Honeybee/Ladybug temperature tutorial (with weather data etc).
For now I have used Grasshopper and Kangaroo, haven't quite implemented other plugins.
What I want to achieve?I want to create a basic wind simulation in a room (cube at first, but then add more space and use different models) that I can change inside grasshopper. For example I have two openings. I blow wind inside the object from one opening and it goes out the other opening. When I change the wind parameters I can analyse the wind and data that is flowing through the cube.
Is there a way I can visualize the wind?
I have seen different solutions, but mainly vectors with colors that are visualized as wind direction and temperature. Is it possible to make it 3D that I can actually make a real-life model out of it?
Why cube?At first I want to test it and see how it works, if it is viable or not. In the end I would create a facade that is designed for natural ventilation. I am kind of trying to put two projects together. One for the wind analysis, the other for the 3D-Result that is created with the wind. It might be a quite awful that I am asking, but I don't know where to go after doing the google research. Also, some Grasshopper links I found that might help describe the situation. http://www.grasshopper3d.com/forum/topics/wind-analysis-by-grasshopperhttp://www.grasshopper3d.com/forum/topics/wind-cfd-change-form(Should I approach it with Ladybug and Ecotect?)
Thanks, A
…
sinergetici associati alla compresenza simultanea di differenti strumenti di analisi e digital design all'interno di un processo di progettazione in svolgimento. I partecipanti utilizzeranno Grasshopper (modellatore parametrico per Rhino): l'uso di questo editor grafico di algoritmi si integra alla perfezione con gli strumenti di modellazione di Rhinoceros 3D espandendo le possibilità di corstruire modelli parametrici altamente complessi. Per generare una complessità simile saranno utilizzati collegamenti live ai diversi programmi elencati di seguito: . Autodesk Ecotect Analysis via GECO . FEA software GSA via SSI Durante questi intensi 3 giorni, i partecipanti impareranno il workflow dei plug-ins con l'aiuto di esempi esplorando una panoramica dei differenti software, le possibilità di testare le performances di un progetto o l'uso di strumenti addizionali non legati ad un singolo sistema (es. accentuazione, formazione, reazione parametrica) [english text] The focus of the workshop is to integrate and correlate the synergistic effect associated with simultaneous presence of different digital design- and analysis tools in an ongoing design process. The main attention is set on easy to handle interface , which should be used at a early stage of conceptual design to respond to external and internal influences in a intelligent and sustainable way. Participants will use the software Grasshopper as a parametric modeling plug-in for Rhino. The usage of this graphical algorithm editor tightly integrated with Rhino's 3-D modeling tools open up the possibility to construct highly parametrical complex models. To generate this complexity we will use live linkages to several programs listed below: . Autodesk Ecotect Analysis via GECO . FEA software GSA via SSI In this 3 intense days, the participants should learn the workflow of the plug-ins with the help of examples and get an overview of the different software's, there possibilities for evaluating the performance of a design or the usage of additional tools to be not chained to a single system . (e.g. parametrical accentuation, parametrical formation, parametrical reaction) [.] Dettagli : Istruttori: Thomas Grabner & Ursula Frick from [uto]. lingua del corso: inglese (saranno disponibili tutor di supporto ma è richiesta una conoscenza di base della lingua unglese).
Quote d'iscrizione (min 12 max 20 posti): educational* : € 280.00 + iva professional: € 450.00 + iva * studenti, docenti, ricercatori, dottorandi e laureati fino a un anno dalla data di laurea OFFERTA EARLY BIRD SPECIAL: le prime 5 domande di iscrizione pervenute entro il 31 Dicembre 2011 avranno diritto ad una quota di iscrizione scontata del 20% Quote d'iscrizione E.B. SPECIAL: E.B. SPECIAL educational* : € 224.00+ iva E.B. SPECIAL professional: € 360.00+ iva. ulteriori info, dettagli e iscrizioni: http://www.co-de-it.com/wordpress/nexus-advanced-grasshopper-workshop-with-uto.html…
d the workshop PDF from this link: http://goo.gl/bcvRNH Download event poster from this link: http://goo.gl/Q0KWCM Brief: Cairo is filled with barriers controlling people movements, suppressing them as well as detaining green and public spaces to the extent that most people have been taking these spaces for granted. Public spaces have been for a while the periphery of our daily life. We will explore in this workshop how we can manipulate and alter people’s perception and direct their attention to how these spaces are integral for city life. This exploration will be backed up by intensive technical tutorials introducing computational design and fabrication techniques and tools mainly Rhino, Grasshopper, Geco and Ecotect. Not only will this be the typical technical workshop, but rather you will also have the chance to be guided step by step on how these tools are used through out different design stages in a real world scenario. Design prototypes will be produced through 3D printing, the main workshop output will be a fabricated one to one functional model for one of the designs using our new in-house CNC machine. Tutors (check the PDF for bio): Olga Kovrikova, MArch DIA Alexandr Kalachev, MArch DIA Karim Soliman, MArch DIA Islam Ibrahim, MArch DIA Sherif Tarabishy, B.Sc. AAST Application: Application deadline 1 September 2013 ** For students (undergrad / Master), teachers and PhD proof of status is required (university ID with a date or a certificate of enrollment) to apply for the students package. Packages (choose one of the following in the application form): 1. Standard registration Course fee is 4250 EGP For Students 3500 EGP 2. Early bird registration discounted fee For Professionals 3750 EGP For Students 3000 EGP ** Early bird offer ends on 14 August 2013 3. Group registrations discounted fee (5 or more) For Students 20% off - You will have to fill out an application form here: http://goo.gl/0QxAga - You will need to submit your CV and Short Portfolio (max. 10 MB) to info@morph-d.com, email subject: “Morphing Norms Application” (we will decide if you are eligible for an early bird discount or not based on the date of your email submission) - We will confirm receiving emails from all applicants. Successful applicants will be contacted 5 days after each deadline (early bird/final) and will have to confirm participation within 3 days, if they fail to do so, places will be given to others on the waiting list. - A maximum of 30 applicants will be selected.
…
ow..
It's basically using a 3d framework to define points on the framework and then interpolate curves through them.
Right now Im assuming that I merely translated something incorrectly early in the script that lead to most of the definition issues later on...?? It also seems I am not using the append function correctly... :(
If anybody well versed could take a look it would be awesome... :)
The code I've used is below and the erros I get are attached here:
Private Sub RunScript(ByVal ptSetA As List(Of Point3d), ByVal ptSetB As List(Of Point3d), ByVal divU As Integer, ByVal divV As Integer, ByRef A As Object, ByRef B As Object) Dim n As Integer = 0 Dim ptListA As New List(Of list(Of Point3d)) Dim ptListB As New List(Of list(Of Point3d)) For i As Integer = 0 To divU Dim ptRowA As New List(Of Point3d) Dim ptRowB As New list(Of point3d) For j As Integer = 0 To divV Dim ptA As New Point3d(ptSetA(n)) Dim ptB As New point3d(ptSetB(n)) ptRowA.Add(ptA) ptRowB.Add(ptB) n = n + 1 Next ptListA.Add(ptRowA) ptListB.Add(ptRowB) Next Dim intcvListA As New List(Of NurbsCurve) For i As Integer = 0 To divU - 1 Step 2 For j As Integer = 0 To divV - 1 Step 1 Dim pt01A As New point3d((ptListA(i)(j) + ptListA(i)(j + 1)) / 2) Dim pt01A As New point3d((ptListA(i + 1)(j) + ptListB(i + 1)(j)) / 2) Dim pt01A As New point3d((ptListA(i + 2)(j) + ptListA(i + 2)(j + 1)) / 2) Dim pt01A As New point3d((ptListA(i + 1)(j) + ptListA(i + 1)(j + 1)) / 2) Dim dis01A As Double = pt01A.DistanceTo(pt04A) Dim dis02A As Double = pt03A.DistanceTo(pt04A) Dim vt01A As New Vector3d((pt04A - pt01A) / dis01A) Dim vt02A As New Vector3d((pt03A - pt04A) / dis02A) Dim pt01B As New point3d((ptListB(i)(j) + ptListB(i)(j + 1)) / 2) Dim pt01B As New point3d((ptListA(i + 1)(j) + ptListB(i + 1)(j)) / 2) Dim pt01B As New point3d((ptListB(i + 2)(j) + ptListB(i + 2)(j + 1)) / 2) Dim pt01B As New point3d((ptListB(i + 1)(j) + ptListB(i + 1)(j + 1)) / 2) Dim dis01B As Double = pt01B.DistanceTo(pt04B) Dim dis02B As Double = pt03B.DistanceTo(pt04B) Dim vt01B As New Vector3d((pt04B - pt01B) / dis01B) Dim vt02B As New Vector3d((pt03B - pt04B) / dis02B) Dim ptArrA As New List(Of Point3d) ptArrA.Append(pt01A) ptArrA.Append(pt02A) ptArrA.Append(pt03A) Dim intcvA As New NurbsCurve() intcvA = CreateInterpolatedCurve(ptArrA, 3) intcvListA.Add(intcvA) Dim ptArrB As New List(Of Point3d) ptArrB.Append(pt01B) ptArrB.Append(pt02B) ptArrB.Append(pt03B) Dim intcvB As New NurbsCurve() intcvB = CreateInterpolatedCurve(ptArrB, 3) intcvListB.Add(intcvB) Next Next A = intcvListA…
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…
bject of this edition focuses on the investigation of interactions between the environment and the human being, made through objects, mechanisms and architectures able to interact with who makes use of them. The aim of digitalMed IV is drawing a catalogue of projects/prototypes to insert them in an urban context, and to outline new future-cities profile.
PURPOSES AND TERMS:
The digitalMed Summer School IV edition aims to organize the flows of information, in which the city is absorbed, to adapt projects and to make them useful, no invasives, and suitable to establish an information exchange.
The concepts of slow cities and smart cities are directed by all types procedures, from immaterial to materia, from information to the built. This is the iter that we will follow to reinvent the relationship between man, environment and cities.
Through learning by-doing educational procedure, participants will acquire not only new metodologies and means, but also concrete cases where testing these ones. In this way, new acquired information won’t remain simple educational exercises, but will be notable elements in the portfolio participants.
TOPICS:
The planning approach of digitalMed Summer School IV edition will supply to participants all the technic knowledges and theoretical bases in order to work.
The first days of workshop will focus on the outline of a shared vocabulary that allows to work from shared meanings. This phase is characterized by subjects occurring in the contemporary architecture such as computational design, digital fabrication and data driven, then systems, like Arduino, which allow the interaction with objects, and fields like permaculture and social innovation that nowadays contribute to the realignment of environment and city’ ideas.
The participants will have the opportunity to learn the use of software for the parametric planning, like Grasshopper, and to test interactions between real information and virtual data (and viceversa) through the use of Arduino.
PREREQUISITES:
The workshop is open both to the students and to the professionals. It needs a basic knowledge of Rhinoceros 3D program. All the participants have to bring their own laptop. The programs for installing will be communicated during the registration act.
HOW TO REGISTER:
To register to the Summer School DigitalMed 2013 you must send an e-mail to info@medaarch.com, with the object: “Iscrizione DIGITALMED2013”.
The mail has to contain:
Name; surname; profession; telephone; e-mail.
After the reception of the above-mentioned e-mail, the participants will be contacted by phone, as well as by e-mail, to be informed about payment methods
Registrations are to be construed when the payment will be effective.
DEADLINE: Registrations to the workshop close on July 19 h18:00.
INFO:
Organizational Segretary digitalMed IV
Dott.ssa Francesca Luciano
Web site: www.medaarch.com
e-mail: info@medaarch.com
tel : +39 392 5149075
fb: mediterranean Fab Lab
tw: @medfablab
…
ake a network of lines (i.e. a graph) and make a Plankton Mesh, from which you can use Cytoskeleton to make a solid mesh (and then smooth it with Weaverbird).
Works with ngons (polygons with 3 or more sides). Other examples I found only worked with tris and quads.
Works on open or closed surfaces
While these examples start with a surface, you could start with a network of lines and make a patch surface
This is meant for 2D networks/surfaces. I haven't attempted filling a 3D volume. My guess is this wouldn't work as it would require a non-manifold mesh that Plankton wouldn't handle.
Note similar results could be achieved with the following:
TSplines
MeshDual (dual of a tri mesh, not as much freedom/control)
Working backwards, here is the GhPython script from Will Pearson that builds a Plankton Mesh from vertices and faces. The vertices are a list of 3D coordinates, the faces are a tree a lists, with each list containing the indices of vertices that form a closed loop. From Will, "Plankton only handles manifold meshes, i.e. meshes which have a front and a back. This orientation is determined by the "right-hand rule" i.e. if the vertices of a face are ordered counter-clockwise then the face normal will be out of the page/screen."
# V: list of Point3d # F: tree of int
import Grasshopper appdata = Grasshopper.Folders.DefaultAssemblyFolder
import clr clr.AddReferenceToFileAndPath(appdata + "Plankton.dll")
import Plankton
pmesh = Plankton.PlanktonMesh()
for pt in V: pmesh.Vertices.Add(pt.X, pt.Y, pt.Z)
for face in F.Branches: face = list(face)[:-1] pmesh.Faces.AddFace(face)
These vertices and faces are precisely the output from Starling. Starling takes in a list of Polylines which form the (properly oriented) face loops.
The polyline face loops can be generated...
Directly from Panels on a surface using LunchBox
Using any network of lines/curves on a surface (curves will need to be converted to polylines before Starling)
The latter was achieved using the Surface Split command, then converting the face edges (converted to curves) into polyline loops to represent faces.
…
hope this number will grow in future. Currently available features are:
1) Creation of 2d or 3d context for any kind of building related analysis: automatically generate the 2d/3d surrounding buildings for the location where you would like to perform visibility, solar radiation, cfd or any other type of analysis. You need some other plugin for the last three, like Ladybug. It only creates the context=surroundings! The "automatic generation" process also includes creation of the local topography (terrain) along with buildings.
2) Identification of certain 2d or 3d elements in the created context. For example: selection of all hotels, parks, hospitals, restaurants, residential buildings etc.
3) Performing direct terrain analysis (hillshading, slope, ruggedness, roughness, water flow...)
4) Creation of terrain shading masks and horizon files for further solar and photovoltaics analysis.
Gismo will be very grateful if he could get any suggestions, improvements, bug reports and testing in the following period. In case you are willing to provide any of these, the requirements, installation steps and .gh example files can be found here, here and here.
Thank you in advance !!…
Added by djordje to Gismo at 9:10am on January 29, 2017