curve or locus] of a segment AB, in English. The set of all the points from which a segment, AB, is seen under a fixed given angle.
When you construct l'arc capable —by using compass— you obviously need to find the centre of this arc. This can be easily done in GH in many ways by using some trigonometry (e.g. see previous —great— solutions). Whole circles instead of arcs provide supplementary isoptics —β-isoptic and (180º-β)-isoptic—. Coherent normals let you work in any plane.
Or you could just construct β-isoptics of AB by using tangent at A (or B). I mean [Arc SED] component.
If you want the true β-isoptic —the set of all the points— you should use {+β, -β} degrees (2 sides; 2 solutions; 2 arcs), but slider in [-180, +180] degrees provides full range of signed solutions. Orthoptic is provided by ±90º. Notice that ±180º isoptic is just AB segment itself, and 0º isoptic should be the segment outside AB —(-∞, A] U [B, +∞)—. [Radians] component is avoidable.
More compact versions can be achieved by using [F3] component. You can choose among different expressions the one you like the most as long as performs counter clockwise rotation of vector AB, by 180-β degrees, around A; or equivalent. [Panel] is totally avoidable.
Solutions in XY plane —projection; z = 0—, no matter A or B, are easy too. Just be sure about the curve you want to find the intersection with —Curve; your wall— being contained in XY plane.
A few self-explanatory examples showing features.
1 & 5 1st ver. (Supplementary isoptics) (ArcCapableTrigNormals_def_Bel.png)
2 & 6 2nd ver. (SED) (ArcCapableSED_def_Bel.png)
3 & 7 3rd ver. (SED + F3) (ArcCapableSEDF3_def_Bel.png)
4 & 8 4th ver. (SED + F3, Projection) (ArcCapableSEDProjInt_def_Bel.png)
If you want to be compact, 7 could be your best choice. If you prefer orientation robustness, 5. Etcetera.
I hope these versions will help you to compact/visualize; let me know any feedback.
Calculate where 2 points [A & B] meet at a specific angle is just find the geometrical locus called arco capaz in Spanish, arc capable in French (l'isoptique d'un segment de droite) or isoptic [curve or locus]
of a segment AB, in English. The set of all the points from which a segment,
AB, is seen under a fixed given angle.…
e:
Modulo 1Il workshop è finalizzato a fornire ai partecipanti i fondamenti della modellazione parametrica e generativa attraverso Grasshopper, plug-in di programmazione visuale per Rhinoceros 3D (uno dei più diffusi modellatori NURBS per l‘architettura e il design). Il workshop mira a gestire e sviluppare il rapporto tra informazione e geometria lavorando sui sistemi di involucro in condizioni specifiche. La discretizzazione di superfici (pannellizazione sia Nurbs che Mesh), la modellazione delle geometrie attraverso informazioni (siano esse provenienti da dati di analisi ambientali, da mappe di colore o da database), l’estrazione e la gestione di informazioni richiedono la comprensione delle strutture dei dati al fine di definire un processo che va dalla progettazione alla costruzione.I partecipanti impareranno come costruire e sviluppare strutture di dati parametrici per informare geometrie ‘data-driven’ e come estrarre le informazioni rilevanti da tali modelli per il processo di costruzione.Modulo 2Il workshop, volto a promuovere le nuove tecnologie digitali di supporto alla progettazione e alla fabbricazione, fornirà ai partecipanti gli strumenti per la preparazione, attraverso Grasshopper, dei modelli per il processo di stampa 3d. Il workshop inoltre, darà ai partecipanti i fondamenti dell’uso della stampante 3d e si concluderà con la fabbricazione del proprio modello realizzato durante il corso.
[.] Date:Modulo 1 – 25/26/27 Luglio 2014 – SiracusaModulo 2 – 28/29 Luglio 2014 – Catania
[.] Tutors:Arch. Andrea Graziano (Co-de-iT)Arch. Salvo Pappalardo (Studio Aion)Arch. David Montenegro (Hackspace_Catania)
[.] Luogo:Modulo 1Officina Ermocrate – Viale Ermocrate 7, 96100 – SiracusaModulo 2Hackspace_Catania – Via Grotte Bianche, 112 – Catania
[more info]
…
re my serial port was disappearing all the time when using the Leonardo on my laptop. I could only upload a sketch if I held down the reset button and then released it during the upload process... when the code was uploaded the serial port would immediately disappear again... which means I couldn't load any code which actually sent any Serial communication (which is pretty critical for Firefly). So I showed the problem to David Mellis (one of the founders of the Arduino platform who is getting his PhD at MIT, and he was confounded too). So he put me in touch with one of the main developers of the Leonardo board/platform (Zach Eveland) and I've been working with him to see if we can figure out the problem. As far as I can tell, the issue is that the Arduino driver seems to be failing on Windows 7 64-bit machines (like my laptop). He said one or two people reported similar issues during the development, but that he stopped hearing from them, so he thought it was fixed. We've tried several different things, but it seems the driver is failing at a really low-level. He's ordered a hardware USB analyzer so he can track the hardware communication between the computer and the board... but he hasn't shipped it to me yet. I'm hoping to get it resolved soon. As far as I can tell, the Leonardo is supposed to work almost identically to the Uno (it's just cheaper because it only uses 1 microcontroller... which handles both USB communication and running the code... where as the Uno has two microcontrollers on board which makes it more expensive). So, any code that runs on the Uno should (theoretically) also run on the Leonardo. Other than the code which I added to pick up the board type and load different parts of the sketch (which was a pretty significant overhaul of the firmata)... I only added a few lines to check if the serial port was available before sending the data over to Grasshopper (which seems to be required (or recommended) when using the Leonardo board. I've tested the code using the Uno and Mega and it works great... but I haven't fully tested the Leonardo support because of my machine. Apparently, this issue has only affected laptops like mine (others seem to work fine). If you're interested in testing the new version let me know and I could send it to you. You'd probably have to revert back to 0.8.0066 until I release the next version because David changed a few menu UI functions so I don't think the old version will run correctly (at least I don't think so). Anyway, let me know if your interested.
-Andy…
I am not "expert" enough, I will try to share my opinion.
Judging by the look of the building the simplest way to do it would be using T-spline to create the basic massing (like you try to sculpt a piece of rock to get the silhouette of that building). playing and tweaking mesh is easier in TSPLINE rather than NURBS (in this particular shape). after you've got the basic model done, convert it to NURBS then you can start to use GH to get some complex detail done.
one more advantage is that TSPLINE has special addon for GrassHopper. you can combo them together to get a more unimaginable result.
that is how I would approach the design.
and if you have got extra time,you could rebuild the model from scratch in GH, to get a much "tidier" model. and if next time you do a real project, it is also important to have someone to work on "smart" model like BIM. otherwise the engineer would get a massive headache when he receive your 3D model.
May be this is not a popular opinion, but I think sometimes you don't have to force yourself to build everything entirely in GH. if you can build the basic geometry in rhino, then it is better. afterall GH main function is a modelling aid for rhino. sketching it first on a piece of paper would help to get a better understanding about the geometry you are after. and then you'd know what to do.
one more thing, regarding about one reply, I wanna say, there is a big difference between designers and 3d modeller. as an architect and a designer myself, when I am given a task to design a building, sometimes I dont know what the building is going to look like at the early stage of the design., I prefer a less technical method and keep it as "concept" as possible (as there are many other things we need to think at once, name it, functionality, spacial use, structure, cost, environmental impact,etc etc etc, even politics and government stuff :P)
learning C#/VB/ or other language sure will be a point plus for you. but as dominik nuessen have mentioned, a good understanding of geometry and how it relates to the parametric design is the key point here.
because a good building is born from countless of planning and discussion, do not be afraid to be "wild" during the early stage. remember, some of the greatest architect in the world came from people who are dare enough to connect their dream into the real world.
thats all :) sorry for my bad english :)
…
ython patching via Rhinocommon CreatePatch being 7 of those seconds.
Currently, to avoid failed splits to remove the backgrounds, due to super shallow areas in skinny features that kiss the construction plane, I'm plane cutting a small amount below that construction plane, then moving the result back up.
I'm not using a Patch starting surface, as you can play with in the normal Rhino command, since it just sort of squashes broad curved mounds in ugly fashion, or else pulls them down to make ugly doughnuts everywhere around the input curves.
Details on how to use the CreateSurface command of Rhinocommon, hassles solved, is discussed here, with great all hours help from Peter Fotiadis, and I also discovered some clues from Djordje via Google, where he was massaging points into proper format:
http://www.grasshopper3d.com/forum/topics/python-longer-version-of-rhino-geometry-createpatch-expected
The highest level CreatePatch command doesn't accept a normal Python list of objects in a variable like the two more simple versions of the same command does. You have to regather them into a Rhino container, which is really a .NET container. I still don't know yet how to upgrade the Python parallel patch component to input the whole panoply of objects you can patch over in Rhino because I don't know what container exists to hold them all that won't break the command.
The point of this overall script is to now be able to arrange lots of mere flat surfaces, surfaces because those can define holes versus borders easily, and create real 3D single surface NURBS geometry that can then be surface morphed (equivalent of Rhino Flow Along Surface) onto other 3D models.
…
Added by Nik Willmore at 1:04am on February 27, 2016
d doens't populate the full surface area.
Here the code of the SolveInstance part:
protected override void SolveInstance(IGH_DataAccess DA) { Surface baseSurface = null; int nrBaysUDirection = new int(); int nrBaysVDirection = new int(); DA.GetData(0, ref baseSurface); DA.GetData(1, ref nrBaysUDirection); DA.GetData(2, ref nrBaysVDirection); List<Line> lines = new List<Line>(); List<Point3d> points = new List<Point3d>();
double uPos=(double)1/(double)nrBaysUDirection; double vPos=(double)1/(double)nrBaysVDirection;
for (int i = 0; i <= nrBaysUDirection-1; i++) {
for (int j = 0; j <=nrBaysVDirection-1; j++) { Point3d pt0 = baseSurface.PointAt(i * uPos, j * vPos); Point3d pt1 = baseSurface.PointAt((i + 1) * uPos, j * vPos); Point3d pt2 = baseSurface.PointAt((i + 1) * uPos, (j + 1) * vPos); Point3d pt3 = baseSurface.PointAt(i * uPos, (j + 1) * vPos); Point3d ptM = baseSurface.PointAt((i * uPos) + (0.5 * uPos), (j * vPos) + (0.5 * vPos));
Line lnA = new Line(pt0, ptM); Line lnB = new Line(pt1, ptM); Line lnC = new Line(pt2, ptM); Line lnD = new Line(pt3, ptM);
lines.Add(lnA); lines.Add(lnB); lines.Add(lnC); lines.Add(lnD);
points.Add(pt0); points.Add(pt1); points.Add(pt2); points.Add(pt3); } }
DA.SetDataList(0, lines); DA.SetDataList(1, points); }
and further a screenshot.
Where is my mistake?
Last question:
to script the component I am using the default assmbly from Giulio Piacentino, but when I debug I got this error:
Warning 1 Member 'SimpleGrid.SimpleGridInfo.AssemblyName' overrides obsolete member 'Grasshopper.Kernel.GH_AssemblyInfo.AssemblyName'. Add the Obsolete attribute to 'SimpleGrid.SimpleGridInfo.AssemblyName'. C:\Users\matteo\Documents\Visual Studio 2010\Projects\SimpleGrid\SimpleGrid\SimpleGridInfo.cs 7 32 SimpleGrid
when I do not use this assemblt I do not get this error.
How can I fix it?
Thanks for your help and tips
Matteo…
do is to make a structural analysis of the model with Geomgym in GSA and use that gathered data to optimize the variables.
I already created the beams (with their profiles and material) and I started with creating the nodes. However, I constantly get an error when I try to open the model in GSA. GSA doesn't recognize all of the nodes I created in Grasshopper and connected to the 'create node' box from Geometry Gym.
What I need to do is find all of the intersection points of the horizontal beams, the vertical ring sections, the diagonals and the supporting beams. These supporting beams carry the weight of the actual (concrete) floor of the footbridge and the load from the floor of the footbridge needs to be loaded to the intersection of the 'supporting beams' with the 'vertical rings' (as point loads), so not with the diagonals. And I also need all points on the first and last ring section to make that nodes restraint as pins.
The division of the polygons in the vertical ring sections is recognized in GSA, but I can't figure out what is going wrong in the model. Below I added the file as I made it with the creation of the nodes included. I also added a file where the creating of the nodes isn't added.
The first added picture shows the error in GSA and the nodes GSA can't find have a red circle around it. It also says that GSA recognizes '7 structures'...
The second picture shows that the loading of forces is correctly recognized and also the pins in the first and last ring section are applied correctly. But GSA doesn't recognize the intersection points of the diagonals with the ring sections and the supporting beams...
All of the intersections between the beams need to be hinged connections, without restraints. The hinges where the forces are loaded into (z-direction) are the intersection points of the 'supporting beams' and the 'vertical ring sections'.
All of the hinges in the first and the last ring section are pinned (x,y,z restraint - xx,yy,zz not restraint).
Could anyone please help?
Thank you in advance!
…
ion, extract structural data, produce 2d drawings, and exchange data with other external software. Nemo also includes free tools to create parametric shapes, such as Naca profiles, hydrofoils, keels, rudders, blade propellers, and sail plans.
Born in 2018 as an academic research project at ENSTA Bretagne, Nemo grew up since, immersed in professional naval architecture practice with L2Onaval.
From 2021, Nemo is now available for purchase with commercial or educational licenses. Following license levels are provided to fit every needs depending of user activity :
Free (Designer)
Level 1 (Section + Hydrostatics + Visualization)
Level 1 + 2 (Section + Hydrostatics + Visualization + Resistance + Structure)
We can also help you make best use of our software, provide project guidance, establish specific workflow and create custom tools.
Requirements
Microsoft Windows 10 or Apple Mac OS 12 Monterey :
McNeel Rhinoceros 7 SR26
(Other Rhinoceros, Windows and Mac OS versions have not been tested but may work)
Additional info
Food4Rhino Download
Discourse Forum
Facebook Page
Linkedin Page
Nemo Website
Credits
Authors : Mathieu VENOT
Contributors : Paul POINET, Laurent DELRIEU
…
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…
nteraction in the design of an enclosed volume.
Revolutions have occurred through architectural history and vary widely in terms of design methods and fabrication techniques. Focusing on inspiring natural form‐finding techniques, AA Athens VS works towards producing a large‐scale interactive prototype that alters in real‐time the perception of interior space.
Technology and architecture are coupled for the third year in Athens with a novel agenda of transforming an enclosed area and creating internal contrasting city‐life characteristics that transcend the local conditions. In collaboration with the National Technical University of Athens, Cipher City: Revolutions explores participatory design and active engagement modeling and continues building novel prototypes upon horizontal planes.
The toolset includes mainly ‐among others‐ Rhino Grasshopper, Processing and Arduino platforms. With the completion of the Programme participants receive the AA Visiting School Certificate. In 2013, the design agenda of AA Athens will connect with the agenda of AA Greece VS in the city of Patras. Participation in both Programmes will allow for a more extensive learning experience through additional tools like Autodesk Maya, Autodesk 3D Studio Max and more.
Discounts
The AA offers several discount options for participants wishing to apply as a group or participants wishing to apply for both AA Athens and AA Greece Visiting Schools:
1. Standard application
The AA Visiting School requires a fee of £600 per participant, which includes a £60 Visiting Membership. If you are already a member, the total fee will be reduced automatically by £60 by the online payment system. Fees are non-refundable.
2. Group registration
For group applications, there will be a range of discounts depending on the number of people in the group. The discounted fee will be applied to each individual in the group.
1. 3-6 people group: £60 (AA Membership fee) + 540*0.75 = £465 (25 %)
2. 6-15 people group: £60 + 540*0.70 = £438 (30%)
3. more than 15 people group: £60 + 540*0.65 = £411 (35%)
3. Participants attending AA Greece VS and AA Athens VS | 40% discount
For people wishing to attend both AA Greece VS and AA Athens VS, a discount of 40% will be made for each participant. (The participant will pay the £60 membership fee only once.)
£60 (AA Membership fee) + (540*0.60)*2 = £708
Eligibility The workshop is open to architecture and design students and professionals worldwide.
Applications
The deadline for applications is 24 March 2014. A portfolio or CV is not required, only the online application form and payment. The online application can be reached from:
http://www.aaschool.ac.uk/STUDY/VISITING/athens
Contact:
Alexandros.Kallegias@aaschool.ac.uk…