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…
presentar Digital Process: Generative Design Technologies Workshop; Taller especializado que se llevara a cabo en 4 de las ciudades mas importantes de la republica mexicana [Puebla] [Mexico DF] [Guadalajara] [Leon] en Enero y Febrero de 2012.http://gendesigntech.wordpress.com/
Enfocado principalmente a arquitectos, diseñadores industriales, diseñadores de interiores, Urbanistas, Artistas digitales, estudiantes y profesionistas afines al diseño; este Workshop tiene como objetivo proporcionar a los participantes los conocimientos y recursos tecnológicos que les permitan desarrollar los elementos de un proyecto desde la concepción hasta su aplicación de manera completa.Apoyándose en un conjunto potente y flexible de plataformas, los participantes aprenderán a generar, analizar y racionalizar morfologías complejas, formas orgánicas libres y algoritmos computacionales avanzados así como a producir visualizaciones fotorealístas aplicables en diversos proyectos de Diseño.A lo largo de 5 dias de intenso trabajo, exploración y retroalimentación los participantes seran guiados en el desarrollo de un flujo de trabajo mas dinamico, que les permitira explotar al maximo el potencial de las herramientas y potencializar sus habilidades, aptitudes y capacidades.Instructores:Leonardo Nuevo Arenas [Complex Geometry]José Eduardo Sánchez [DesignNest]Daniel Camiro/Luis de la Parra [Chido Studio]http://issuu.com/chidostudiodiseno/docs/digproworkConoce el programa aquí.http://gendesigntech.wordpress.com/program/Para registrarte por favor visita.http://gendesigntech.wordpress.com/registro…
frontare il tema della modellazione parametrica con Grasshopper. Questa plug-in di Rhino consente di progettare, confrontandosi con un contesto evolutivo, attraverso la comprensione e l'utilizzo di parametri e componenti che influenzano la rappresentazione e la rendono dinamica componendo algoritmi. Nel corso verranno introdotte le nozioni base di Grasshopper approfondendo le metodologie della progettazione parametrica e le tecniche di modellazione algoritmica per la generazione di forme complesse.Le informazioni teoriche saranno fornite in maniera accelerata ma organica e contestuale agli argomenti elencati. Per massimizzare i risultati, le lezioni saranno accompagnate da piccole esercitazioni pratiche.Argomenti trattati:- Introduzione alla progettazione parametrica: teoria, esempi, casi studio- Grasshopper: concetti base, logica algoritmica, interfaccia grafica- Nozioni fondamentali: componenti, connessioni, data flow- Funzioni matematiche e logiche, serie, gestione dei dati- Analisi e definizione di curve e superfici- Definizione di griglie e pattern complessi- Trasformazioni geometriche, paneling- Attrattori, image sampler- Data tree: gestione di dati complessiStrutturaIl corso ha una durata di 16 ore programmate nell'arco di 2 giornate con i seguenti orari: i giorni 28/07 e 29/07 dalle 10,00 alle 19,00 con pausa pranzo di un'ora.DestinatariIl corso è rivolto a tutti coloro che hanno buone conoscenze di Rhinoceros e vogliono affrontare i nuovi metodi di progettazione in maniera consapevole attraverso il linguaggio visual scripting proposto dal software Grasshopper.PrerequisitiPer affrontare il corso è richiesta una conoscenza di base del software Rhino attraverso esperienze teoriche e pratiche. I partecipanti dovranno venire muniti di proprio laptop e con software Rhinoceros 5 o Rhinocero 4 perfettamente funzionanti.AttestatoAlla fine del corso verrà rilasciata l’attestato di partecipazione ad un corso qualificato McNeel valido per l’ottenimento di crediti formativi universitari.LuogoLe lezioni si terranno presso lo studio il Pedone in Via Muggia 33, 00195 ROMA…
l operations. Aside from its geopolitical position and commercial significance, Thessaloniki has been for many centuries the military and administrative hub of the region, and beyond this the transportation link between Europe and the Levant. A series of design studies will be put forward to rethink the way by which city environment in Thessaloniki have been affecting its’ population according to changing needs and to visualize such urban shifts on a more hyper specific contextualized construction model. Throughout the investigations on the research agenda, current trends on the habits of architectural practice will be re-visited.
Innovative urban interventions informed by bottom-up rules extracted from existing city conditions will formulate the major focus of design proposals. Design teams will be working with simulation tools and digital fabrication methods throughout the design research phase. The design brief will be initially explored through the combinatorial use of different computational design tools. Methods of connecting form‐finding methods with form‐making techniques will be investigated. Various manufacturing techniques enabling a hands‐on experience on the diverse range of digital fabrication systems will formulate the starting point for the physical tests. Finally, the design and fabrication of a one-to-one scale pavilion will unify the goals of the programme.
Prominent features of the programme / skills developed:
- Participants will be part of an active learning environment where the large tutor to student ratio (5:1) allows for personalized tutorials and debates.
- The toolset of AA Thessaloniki includes Autodesk Maya, Rhinoceros, Grasshopper and Arduino.
- Participants will have access to digital fabrication tools such as 3-axis CNC router, laser-cutter, and 3d-printer.
- Design seminars and lecture series will support the key objectives of the programme, disseminating knowledge on new design anatomies including machinic control, computational space, and complexity in systems, and innovative urban design approaches.
Eligibility: The workshop is open to architecture and design students and professionals worldwide.
Accreditation: Participants receive the AA Visiting School Certificate with the completion of the Programme.
Fees: The AA Visiting School requires a fee of £600 per participant, which includes a £60 Visiting membership fee. The deadline for applications is 15 October 2015. No portfolio or CV is required.
Discount options are available. Please contact the AA Visiting School Coordinator for more details.
Online application link:
https://www.aaschool.ac.uk/STUDY/ONLINEAPPLICATION/visitingApplication.php?schoolID=316
Programme Director:
Alexandros Kallegias (AA Greece VS Director): alexandros.Kallegias@aaschool.ac.uk…
ino:
Go to "Windows Control Panel", then "Programs and Features", then find "Rhinoceros 5 (64-bit)" and "Rhinoceros", select and "Repaire".
Permalink Reply by Heath on August 14, 2013 at 1:13pm
I got it to work, thanks.
Permalink Reply by Akche MacEshwa on August 22, 2013 at 8:20pm
Right click the .rhi file and open it with rhino execution wizard which is located in Rhino directory. Good luck.
…
Added by Adam Donner at 5:38pm on September 19, 2013
ences, so not terribly important in the end. After all, it's not really worth going through a lot of trouble to get a 15% speed increase; 15% faster than slow is still pretty slow.
Also processor speed has pretty much peaked these past few years, there have been no more significant increases lately. Instead, manufacturers have started putting more cores on motherboards, which is something GH unfortunately cannot take advantage of.
Multi-threading (very high on the list for GH2) brings with it a promise of full core utilisation (minus the inevitable overhead for aggregating computed results), but there are some problems that may end up being significant. Here's a non-exhaustive list:
It's not possible to modify the UI from a non-UI thread. This is probably not that big a deal for Grasshopper components, especially since we can make methods such a Rhino.RhinoApp.WriteLine() thread safe.
Not all methods used by component code are necessarily thread safe. There used to be a lot of stuff in the Rhino SDK that simply wouldn't work correct or would crash if the same method was run more than once simultaneously. Rhino core team has been working hard to remedy this problem, and I'm confident we can fix any problems that still come up, though it may take some time. If components rely on other code libraries then the problem may not be solvable at all. So we need to make sure multi-threading is an optional property of components.
There's overhead involved in multi-threading, it's especially difficult to get a good performance gain when dealing with lots of very fast operations. The overhead in these cases can actually make stuff perform slower.
There's the question on what level should multi-threading be implemented. Obviously the lower the better, but that means a lot of extra work, complicated patterns of responsibilities and a lot of communications between different developers.
There's the question on how the interface should behave during solutions now. If all the computation is happening in a thread, the interface can stay 'live'. So what should it look like if a solution takes -say- 5 seconds to complete? Should you be able to see the waves of data streaming through the network, turning components and wires grey and orange like strobe lights? What happens if you modify a slider during a solution? Simple answer is to abort the current solution and start a new one with the new slider value. But as you slowly drag the slider from left to right, you end up computing 400 partial solution and never getting to a final answer, even though you could have computed 2 full solutions in the same time and given better feedback. Does the preview geometry in the Rhino viewports flicker in and out of existence as solutions cascade through the network?
…
n lofting, though, it makes perfect sense to scale sections independently from the distance between them.
For practical use, I found the graph mapper clumsy; too course and approximate. So I adapted the code I wrote here (Maths + Divide Curve) so that a list of numbers drives the spacing and, optionally(!), the scaling.
When 'Scale by Distance' is false, the numbers in the list determine scaling; '1' is actual size, '0.5' is half size, '2' is twice the size, etc.
When 'Scale by Distance' is true, the distance between the points is used for scaling. This is an indirect effect of the list of numbers (which determines point spacing) and the size of the original shape relative to the curve length.
'Tangent 0' is the curve tangent at each point. It works well for lofting.
'Tangent 1' is the vector between each point and its successor. It works well for orienting solids.
There are still some mysteries... ("Where there is mystery, there is no mastery.")
Lofting doesn't always work well, 'Cap Planar Holes' doesn't work anymore...
I had hoped that this sequence, ".5,1,2,1,.5", would result in:
two half size shapes, one at each end of the curve.
two full size ("1") and one double size ("2") shapes, spaced appropriately.
But I have a mental block about how to achieve that...? :( Instead, I settled for the last of the five shapes being one point short from the end of the curve, and the spacing is off.
Even so, I find this approach easier to use on a practical basis than the graph mapper.
…
y stages of design, mainly due to the large uncertainties that exist in these phases. Optimisation in the early phases may be helpful, but it does not provide the designers with more information on "where to go from here". Once the designer changes a parameter to suit a client requirement, legal requirement or other, the optimised result may very well be thrown out due to the parameter being changed having such a large effect.
I am hosting several workshops and focus groups in the next month (one for students at Victoria University of Wellington, one for architect practitioners and one for engineering practitioners) to teach the basics of Honeybee and Ladybug within Rhino as NZ is very new to any form of distributed modelling methods (using visual language programmes such as grasshopper and dynamo to communicate between design tools and building simulation program tools). In the focus groups, I am not focusing on the tool of Honeybee so much as I am asking the industry its opinions on the feasibility and wishes of developments such as Honeybee.
I find that many informal interviews I have been having have pointed to the question: Would you rather want to know the optimised concept or the most significant design parameters which you should be wary of at the early stages of design?
I am amazed at the capabilities of Honeybee because it has been such a pain to remodel anything for E+ and Radiance in the past. I particularly love the ability to generate hundreds of idfs with varying parameters within 10min, without having to set up some form of macro to do it. The visualisations of Honeybee are awesome! To say the very least. But as someone who is interested in doing a sensitivity analysis, say with Thermal Autonomy, I feel like there is a lacking element to analysis from an engineer and research/academic stand point.
The way I have set up my files actually create 300+ idfs with all the various different parameters. The parameter ranges only vary from a low, typical and high setting for power densities, WWR, schedules and insulation. These have all been drawn from a large 5 year project where we monitored commercial buildings here in NZ to gain a better understanding of data for purposes like this. I then run them in parallel as batch files and re-insert the data back into Honeybee.
What I am playing around with at the moment though is that, due to the fact that the TA component require so many additional components to then analyse the data in that form, and also that it does not simply give a numerical value in % for the space's performance, I need to re-evaluate the csv that it produces for further analysis.
I have only just begun to try doing some form of sensitivity analysis within Honeybee itself, but I was curious if there were already plugins within grasshopper which may already allow some form of sensitivity analysis.…
ace Syntax." eCAADe 2013 18 (2013): 357.
http://www.sss9.or.kr/paperpdf/mmd/sss9_2013_ref048_p.pdf
The measure Entropy is newer. I hereby explain it (from my PhD dissertation):
Entropy values, as described in (Hillier & Hanson, The Social Logic of Space, 1984) and specified in (Turner A. , “Depthmap: A Program to Perform Visibility Graph Analysis, 2007), intuitively describe the difficulty of getting to other spaces from a certain space. In other words, the higher the entropy value, the more difficult it is to reach other spaces from that space and vice-versa. We compute the spatial entropy of the node as using the point depth set:
(11)
“The term is the maximum depth from vertex and is the frequency of point depth *d* from the vertex” (ibid). Technically, we compute it using the function below, which itself uses some outputs and by-products from previous calculations:
Algorithm 4: Entropy Computation
Given the graph (adjacency lists), Depths as List of List of integer, DepthMap as Dictionary of integer
Initialize Entropies as List(double)
For node as integer in range [0, |V|)
integer How_Many_of_D=0
double S_node=0
For depth as integer in range [1, Depths[node].Max()]
How_Many_of_D=DepthMap.Branch[(node,depth)].Count
double frequency= How_Many_of_D/|V|
S_node = S_node - frequency * Math.Log(frequency, 2)
Next
Entropies [node] = S_node
Next
…
iles and rad files in this folder :
C:\Users\Sarith\AppData\Local\Temp\radSources (replace my name with yours).
However, the pic file which is created in that folder crashes. So, I tried to hack the process and get an image through a screenshot and ra_bmp.
This is the rendering that I got through Relux:
This is what I got from my own renderings with image that I got:
This is surprising because the material is called Glass. However the radiance definition of the material is :
void colorpict mat_104~19 red green blue surfpic2.pic alignpic.cal tile_u tile_v -s 0.5850001 0.975mat_104~1 plastic mat_104005 1 1 1 0 0
The colorpict on the the first line only modifies color patterns and does not make the material transparent/translucent. Similarly, the plastic type implies that the material won't be transparent anyway.
I don't think this material as defined in Relux is a physically based material. You are probably better off importing the Raytracer materials to Honeybee. Andy Mcneil had an excellent presentation about GlassBlocks in the last Radiance workshop: http://www.radiance-online.org/community/workshops/2015-philadelphi...
The pic file that I generated is here : https://www.dropbox.com/s/5c32layqehdns72/surfpic2.pic?dl=0…