.
2. If "full" AND "thin" organic is what you are after the only way (doable with components) is to handle this via meshes ("rounded" lips in breps as in V2 requires code that is out of question for you at present time). BTW: I can easily do it using C# that yields individual "organic" struts and joints (as Breps not meshes) ... but ... go to previous sentence.
3. Theoretically you can do it (and avoid meshes) using TSplines 4.x ... but they work when they work ... meaning ... avoid (but test some connected lines in Rhino just for the fun of it). TSplines could revolutionize the organic business ... but only if AutoDesk could seriously invest on that approach.
4. ExoW is a way to "thicken" a bunch of lines (i.e. the mesh edges in this occasion) but is very tricky and IMHO has some bugs: yields odd results frequently by reporting "engulfing" type of issues. Anyway make a search on this Forum about ExoW (ex Exoskeleton) and have some fun (or "fun" depending on your luck with that temperamental thingy).
Note: the picture above is not due to triangulation ... but triangulation yields far more meaningful topology (if structural "beauty" rings any bell to you).
5. The big challenge here is: (a) either address this kinda like a MERO modular geodetic envelope (meaning: organic joints and struts) or (b) either use self supporting panels ... but if this type of "thin" structure pictured above is your goal this is NOT the way.
6. The other big challenge is to design a real-life approach for filling the gaps (obviously via poly carbonate/lexan) but this is waaaaaay out of what you can do at present time (1 week experience, he he). Don't confuse theoretical examples/cases with real-life ones. For instance you can design joints and struts in 2 "clicking" parts in such a way that "engulf" the panel content (the transparent thingy).
Ill be back with some ExoW demos ... but the bad news are that this type of stuff (especially doing it in real-life) ... is waaay out of what a 1 week novice can do.
Moral: another pile of worms case, what else?
he he…
e "amusing") - but all the intelligence is lost + the assembly hierarchy is lost + my dog is MIA as well.
2. This relates ONLY with some members of a given XFrame (meaning that you need a zillion things [or some "abstract" ones] for a relatively "large" scale tensegrity truss).
Meaning: instance definitions ... or Armageddon.
Meaning: some "adjustments" in a given definition having in mind similar systems (Plan B: abandon ship).
3. The fact that the 4 (ex single "tube") members are NOT planar (while ones in the previous example) AND their angles are variable as well (blue in the previous example) makes things hideously complex: we need ways to achieve levels of freedom AND some rigidity: the other way is to machine custom MERO type of stuff (balls, that is) that could host the adapters (but this means 1 zillion DIFFERENT balls). So in this variant shown the angles are managed by a "fixing" ring and rigidity by double tube [MERO type] members. Cables shown are classic Norseman stuff (Plan B: abandon ship).
4. So it's not a mystery why nobody uses that type of nonsense stuff for real-life AEC projects (other than smallish decorative things with a very limited load bearing capacity).
5. All that ... BEFORE the ultra complex system that supports the roof.
STEP mailed but ... well ... what about doing some nice tensile membrane? I have a zillion "simple" defs that do that sort of stuff.
best, Lord of Darkness (ex SardineLand Lord)…
posted rather testifies that. Randomness is the virtue here NOT equality. BTW: forget completely "optimization" of the mount points et all.
2. The thing in pic is airy (quality Numero Uno on that type of stuff, especially for things with no real load bearing capability) meaning minimum profiles ... meaning FORGET wood. Use aluminum tubes (rather cheaper than wood) as follows: screw the Captain Hook "node" in some kind of machined tube end (a humble massif cylinder that is screwed or clued [Araldide 2 part Epoxy] to the tube AND machined with threads for the hook).
NOTE: I could make a simple tube "adjustment" system that could allow you to build that on-the-fly WITHOUT any GH/K or anything: just start connecting variable length tubes ... er ... hmm ... randomly. This is the recommended way to do it anyway: we can't emulate art with software and even if we could: it's the art of pointless.
3. Additionally the whole conceptual aesthetics BEG for some kind of metal instead of wood. The fact that wood is aplenty in Russia doesn't justify killing trees (for any scope), anyway.
4. Using rings to "attach" the hooks ... well that could yield a highly unstable structure for more than obvious reasons. I could provide to you dozens of highly sophisticated bespoke solutions on that matter ... but they are unsuitable for this DIY occasion: I must think on a zero basis on that puzzle - allow me some time to propose the best "adapter" (easy, cheap, stable and allowing some liberties).
5. A Connectivity tree (see for instance Sandbox) can resolve with easy the equal axis worry of yours (thus: FORGET equality, just buy a hack-saw [ aluminum is very easy to "cut", he he]).
All in all: I like that a lot. I'll post soon some examples related with the all overall approach (including the node, he he). You don't need Kangaroo for that (and dare I say no structural analysis IF the structure to be is "similar" in size with the one pictured).
more soon, best, Lord of Darkness…
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.
…