d the Pts from 1 to the List 2 of reduced Points.
4. Sort the List VS the curve (or use some smart way to properly "insert" Pts from 1 to Pts from 2).
public List<Point3d> SortPointsAlongCurve(List<Point3d> points_list, Curve sorting_curve) { points_list.Sort((point1, point2) => { double point1_t = 0; double point2_t = 0; sorting_curve.ClosestPoint(point1, out point1_t); sorting_curve.ClosestPoint(point2, out point2_t); return point2_t.CompareTo(point1_t); }); return points_list; }
or
public List<Point3d> SortPointsAlongCurve2(List<Point3d> pList, Curve curve) { List<Point3d> pSorted = new List<Point3d>(); List<Point3d> pClosest = new List<Point3d>(); for(int i = 0; i < pList.Count;i++){ double t; curve.ClosestPoint(pList[i], out t); pClosest.Add(curve.PointAt(t)); } Point3d pPrev = pClosest[0]; Rhino.Collections.Point3dList points = new Rhino.Collections.Point3dList(pClosest.Skip(1).ToList()); for(int i = 1; i < pClosest.Count;i++){ pSorted.Add(pPrev); int ind = points.ClosestIndex(pPrev); Point3d pNext = points[ind]; points.RemoveAt(ind); pPrev = pNext; if(i == pClosest.Count - 1) pSorted.Add(pPrev); } return pSorted; }
5. Do some Polyline or Nurbs .…
n requires ASCII format STL files, a Rhino export option.
(4) Compared to the bunny, your mesh was huge so I scaled it down 1/100th, so the same maximum tetrahedron size setting would blow up the output.
(5) I updated the Python to make Voronoi and Tetrahedron meshes output optional and added a file path input.
So I reduced your mesh after saving as an STL, using Autodesk Meshmixer, to half the number of triangles.
Before reducing the triangles I got a very fine tree that took a long time, with some segments so short it was hard to make a mesh pipe without artifacts:
After reducing:
Shortest walk won't yet work with the more open and direct path Voronoi diagram lines, since the target points are not the same surface mesh points and thus I can't specify each path endpoint yet.
The Tetgen internal Python -q quality setting dominates internal tetrahedron size unless you specify a very small maximum tetrahedron size input such as 0.01. With such an overly fine mesh, there were quite a few internal tetrahedra, since the angle quality settings won't let it expand to bigger ones very fast away from the surface.
…
Added by Nik Willmore at 3:16am on February 6, 2016
ill be curves not lines. But it could be fixed if necessary
1 Generation of a torus
2 Generation of Voronoi in 3d and calculation of intersection between cells and torus
3 Cut of the curves with 2 planes
4 Projection of the curves in XY planes between 0 and 2*PI
5 Scale in X of this pattern and array
Main variables are
Little radius of torus
Number of points for Populate 3d component
And the scale in X
It seems quite a simple way to generate a Seamless Voronoi.
Happy ?
For the question about symetry, cut, rotate ... you will have to draw things , seek on internet ... figure it by yourself. …
ges can have much stronger impact on the final design.
The problem is that usually the more "nonlinear" the mapping is the more interesting the result usually are because a definition with a very "linear" mapping doesn't have so much potential for surprise and unforeseen solutions.
It can be a random number as you stated, but also some like for example a slightly different point coordinate leads to different typology in a delaunay triangulation, now the strength of the impact also depends on the total sum of the delaunay points as well on how early the triangulation happens in the definition.
I seen that a shape analysis is a not easy at all not only technical but especially by defining the criteria. Looking forward to see your approach compare genotype and phenotype 'solution' spaces. Maybe an additional approach could be to have something like a gene manager where you can narrow down ranges of certain genes, weight them or freeze them.
to 4) and 5) looking forward to see the history once its ready. I think it could be beneficial to also be able to insert solution "by hand" for further crossbreeding and saving.
What i found myself doing quite often was taking solutions from the biomorpher and then tweaking one or more parameters "by hand" because then you can really see the impact and then you would like to have the possibly to bring that solution back into the biomorpher process.
I will go on testing and get back to you guys in some weeks! I attached you the my definition in case you want to have a look. Its needs kangaroo1, lunchbox, heteroptera and wb. Its more a graphical formal exercise:
best, chris…
of similar/WOW buildings that failed (or leaked) including a very famous one.
2. You must use instance definitions for the truss parts (sleeves, cones, rods and the likes) otherwise the whole thing could become an unworkable nightmare.
3. You must address clash issues otherwise doing it is out of question. These affect the skin parts as well (but as I said: this is 100% pro territory).
4. Your structural analysis (in order to make any sense) must deal with real life components either commercially available or bespoke things designed for the specific project.
5. Wind/Seismic effects can cause skin component issues/failures/leaks as it happened ... well ... in a variety of contemporary famous buildings.
6. Vapor condensation yields (in most of similar cases) buildings that "rain from the inside" - nothing serious, mind: just have an umbrella ready.
…
branch. The weird part is that when I add stuff to the "trail" branch, the path "p" gets rewritten, and if I comment(trail) out it maintains its proper structure.
The structure normaly goes{0;0}-{1;0}-{2;0} and so on, when I enter the if statement it should be {0;0}-{0;1}-{1;0}-{1;1}-{2;0}-{2;1}, but what I get is {0;0}-{0;1}-{0;2}-{0;3}-{0;4}-{0;5}
The code in question is bellow(it is a part of a bigger whole).
For i As int32 = 0 To trail.BranchCount - 1 For j As int32 =0 To trail.Branch(i).Count - 1 Dim ghi As GH_Path = trail.path(i) Dim v As Vector3d = vL.Branch(i).item(j) Dim pw As New Polyline(trail.Branch(i).item(j)) Dim agent As New point3d(pw.Last) Dim p As New GH_Path(ghi(0), ghi(1) + 1) v.Unitize v *= seg agent += v If (count Mod math.Ceiling(conrate * div) = 0) AndAlso _
(stopper.Branch(i).item(j) = 0 AndAlso count > 0) Then print(p.ToString) Dim dupPw As New polyline duppw.Add(pw.Last) duppw.Add(pw.Last + v * seg) vl.Add(v, p) gen.add(gen.Branch(i).item(j) + 1, p) stopper.add(0, p) stopper.Branch(i).item(j) = 1 trail.Add(duppw, p) Continue For End If pw.Add(agent) vl.Branch(i).item(j) = v trail.branch(i).item(j) = pw NextNext
I am looking foreward to hear any suggestions.
Sincerely…
n #, row #, seat #, various value metrics, etc.).
I can also use Elefront to bring this data back in along with the geometry, but the geometry comes in flat. Normally I would grab a corresponding tree structure from somewhere upstream in the definition or internalize the structure if I'm starting a new definition and then apply this to an unflatten component to restructure the geometry.
However, I got to wondering if I could use the flattened row and seating data from my object's user dictionary to reconstruct a tree. To keep things simple, I start the numbering at 0 instead of 1 to match the way Grasshopper indices work.
If I have 2 sections, each with 3 rows, and the rows have 4, 5, and 6 seats respectively, my seat data per seat would look like this (spaces are for pattern clarity):
0123 01234 012345 0123 01234 012345
And my row data per seat would look like this:
0000 11111 222222 0000 11111 222222
I was able to use these two numerical patterns alone to reconstruct the tree but I suspect my solution is inefficient. I'm including images and the definition itself in case anyone wants to take a stab at it.
…
ight. Note that i added the Ladybug component to simplify the inputs...
Here are some functions i'd love to see:
1. Ability to cull down to a partial year / date range AND hours range. Currently the DSchedule component can only truncate time of day. But if for example i want to look at averages just during the summer months between 9am - 6pm, i have to do that in the excel .ill file. It seems that the components may allow this already, just not sure which settings need to be set (seems that the reporting frequency has something to do with this...)
2. I'd also like to be able to look at a subset of the points to look at averages in a part of the grid. The easiest i presume would be just to pull item #s; maybe there's a way to add visual identifiers to the selection option? Again, have been doing this in the .ill file.
3. Provide, as an alternative to the .pts file, the option to input the point geometry directly from the rhino file - maybe this would help with #2?
4. I read up on your explanation on showing point-in-time values but can't seem to get that working. Would love to be able to do slider animations of the point-in-time calcs over a day like the bottom right of this (here i used Ladybug but the DA output would be more accurate).
5. Visualization Bounds doesn't seem to work on the daylighting side - would like to be able to manually change.
6. Showing the peaks is a fantastic addition! But all that information is bundled in the python script - would love a way to parse it out to just show the peak numbers for example.
7. Similarly to how DIVA shows data, it'd be great to add a component that visualizes the simulation parameters and color scale in the Rhino viewport...:)
i'm sure there's more as i continue to use it...
great script.
dan
…
o far (abstracted for brevity) have been: 1) decompose the brep to extract the faces for each cardinal orientation 2) Extract the corner points of these faces (my script here is a little rough - would appreciate feedback) 3) Draw lines from these corner points to a curve that represents the sidewalk on the other side of the street 4) intersect these lines with a plane 5) draw a Polyline through these intersection points (using a clever bit of VB written by David Rutten) 6) Make a surface from this polyline that represents the perceived building mass as seen from the sidewalk on the other side of the street. This seems like it should be simple, but I'm struggling to make it work for every facade of the building, and for any geometry I throw at it.
So far I've been successful for one facade of the building, but my script breaks down for the other facades. I think the breakdown lies in drawing the polyline between the intersection points - though I may have created this problem earlier in the script in my corner point extraction strategy.
Working Script:
Broken Script:
I'm writing this script to allow me to analyze many building massing options in a short amount of time. I'm trying to make it work universally for a large range of geometries. Any help you can provide would be awesome!
I've attached the script and the rhino model. I've done my best to annotate the script and highlight the area that I believe to be broken.
Thanks,
Matt
…
actually can perform using a dedicated software:
in 3D:
https://www.facebook.com/francescopiasentini/videos/523532707845171/
in 2D:
https://vimeo.com/189618609
The output of Modal Analysis (at a given frequency) is a list of point (x,y,z), each of them has the three coordinates and the maximum displacement in the direction normal to the surface (that's not flat)
Point number x y zmax1 24,007565 337,876028 -0,6545572 -28,0404705 337,947773 0,7760153 57,141457 316,757768 -0,8413914 18,667466 314,814543 -0,235288
My idea is:
-import stl surfaces of the object (violin)
-import Modal Analysis data
-deform stl (or Nurbs) surfaces using something like a customized CageEdit
-animate this deformation from zero to maximum displacement
-give a color to deformation (or first-second derivative of the interpoled deformation curves)
My wish is to have closed surfaces at any steps, and to create "natural" deformation shapes.
I just tried to import MA data. I was trying to create an array of circles with given x,y,z and radius, I could not figure how to separate information of position and radius when importing the file:
file content:
0,1,0; 5;2,1,3; 2;5,2,6; 4;
thanks for yout attention.
Looking forward to hear you soon!
Francesco
…