Exoskeleton

Exoskeleton is a free plug-in for creating meshes. It is currently comprised of two components: Exo Wireframe and Cytoskeleton.

  • Exo Wireframe thickens line/node into watertight meshes. It solves the nodes using a convex hull and stitches the hulls together with polygonal struts.
  • Cytoskeleton thickens the edge network of any existing mesh into a thickened mesh. The topology of the base mesh enables the production of a clean quad meshes whose vertices are all of even valence. Because It uses the half-edge mesh library developed by Daniel Piker and Will Pearson, it also requires the installation of the Plankton dll's and gha.

Exoskeleton remains a work in progress, and as bugs are fixed and new components and features introduced, updates will be placed here. Furthermore, Exoskeleton is an open-source library.

Download the most recent version here: Exoskeleton2_150904.zip

This has been updated to also include Plankton version 0.3.4

This library is distributed under the terms of the GNU Lesser General Public License (LGPL).

(The source is available on GitHub here)

Please use this discussion forum to post questions, describe issues, and provide feedback (and examples!).

Copyright 2014 Daniel Piker and David Stasiuk

Thanks to Will Pearson, for his work on Plankton and who also has given some invaluable contributions to Exoskeleton in terms of project organisation. Thanks also to Giulio Piacentino for Weaverbird, and for general knowledge and support, and Mateusz Zwierzycki for the same, as well as for sharing his code for convex hulls, which although not used explicitly here, was very helpful in many regards for the development of Exoskeleton.

Load Previous Comments
  • David Stasiuk

    Hi Brian- yes, that's right. The Plankton libraries are used for Kangaroo's Mesh Machine as well as Cytoskeleton, so it's redundant, and Turtle is its own thing.

    Hi Aidan- thanks...yes I'm trying to find the time to do the supernode thing, but I am really trying to build an integrated wireframe and curve-driven exoskeleton component, which is proving tricky to do...basically, I'd like to make all of the features available in the one component if I can, so it may take a bit. Supernodes are tough, because they can cascade (one supernode can then have to engulf another strut, etc) and there's a real risk for it slowing everything down quite a bit, so I'm trying to develop  a strategy to limit that.

  • Ewa Kus

    Hi, I wonder if anyone happens to get an error '1. Solution exception:Object reference not set to an instance of an object.'?

    I get it quite often and don't know what I'm doing wrong.

    Thanks in advance.

  • Aidan K

    Hi Ewa,

    I am also getting this error occasionally, in my case, the older Exoskeleton version (without variable radius) can generate the mesh correctly, is it the same for you? I believe David has isolated the problem, but hasn't had time to fix it yet.

  • David Stasiuk

    Hi Aidan and Ewa-

    Yes...I haven't had the chance to get this working correctly, as I've had a number of other obligations. It's hard to find the time! Ewa, would it be possible for you to post the file that's giving you trouble?

    thanks,

    Dave

  • Ewa Kus

    Hi Dave, thank you very much for your interest. Ironically, I somehow cannot encourage him to crash right this way right now :) But as soon as I do, I will be grateful for your help.

    Thanks,

    Ewa

  • Jason Wheeler

    Hi all, I downloaded the plugin the other day and am having fun with it!!  Great job!! .... I was wondering if someone could explain why I am getting a certain "kink" in this simple file.  The opposing corners don't seem to be getting them.Exoskeleton%20Practice.gh

  • Simone Cimino

    Hi all,

    I tried this plugin giving simple inputs but it seems it doesn't work.. What do I have to do?

    Thank you

  • David Stasiuk

    Hi Simone...Exoskeleton uses a list of lines as input, and it works better with a flat list rather than data structure. So you should explode your curves and use a flattened list of lines. However, it also looks like your polylines don't intersect at start and end points...exoskeleton at this time relies on a network of lines where the start and end points match up.

  • Bradley Bowers

    David, 

    I recently started tinkering with Exoskeleton, and it works . . . somewhat. I am getting what seems to be a selective cooperation from it. I have attached the file to this message . . . I even cited some of your "code" from your complex example and I get nada . . . do you know what the issue might be as to why I am getting only some cooperation from Exoskeleton??

    vasi.gh

    P.S.
    I have Weaverbird and Kangaroo

  • David Stasiuk

    Hi Bradley-

    I think the main problem you're having with your def (the one you've attached) is that you some combination of several very small lines and very tight angles. That's why you're getting the error "1. One or more struts is engulfed by its nodes". What's happening is the convex hull being solved on either side of your curves is bigger than the curve itself, so the mesh breaks. Probably the fastest way of working through this is to use Daniel Pikers "Topologizer" (http://www.grasshopper3d.com/profiles/blogs/topologizer-network-cle...) which allows for you to combine and clean line networks according to a preset tolerance. A lot of these conditions are resulting from the voronoi solution you're using, which can make for very small intersection faces between cells.

  • Bradley Bowers

    David, 

    THANK YOU for that insight . . . but like all things one step forward is new territory. So! Now that I have it sorted and the lines are "webbing" nicely, my mesh output is creating individual "mesh-modules" when I bake the final mesh output. I attempted to run a MeshUnion, and then attempted to run Cytoskeleton's thicken (bad idea). 

    I also baked the final meshes and attempted a MeshBoolean within Rhino . . . that operation failed. Is there a reason that these mesh aren't uniting? They all share the same origin lines . . . is this confusing or is it just me?

    vasi.gh

    Cheers, 

  • Aidan K

    Hi Bradley,

    Try flattening the input line network (right-click, 'Flatten'). That should fix it.

  • Bradley Bowers

    Aidan, 

    When I Flatten the lines going into Exoskeleton, it returns an error of "Index was outside the bounds of the array" . . . The odd part is the preview for the mesh is all unified, grouping seems to occur when I bake it . . . Any insights as to what I am overlooking??

  • Bradley Bowers

    So . . . update . . . vasi_2.gh

    I made some adjustments to the way I was obtaining my lines; Voronoi was giving me, as David mentioned, some tight angle to strut ratios. With this simpler and similar scenario I get a solid mesh at the end of it all . . . I will attempt to resolve the Voronoi version also . . . Never Give Up. Never Surrender!!!

  • martyn hogg

    I had the error "index outside bounds of array" before and I think it was due to having duplicate lines... Use Kangaroos "Remove Duplicate Lines"

  • KANAKA RAGHAVAN

  • KANAKA RAGHAVAN

    I dont seem to be able to get a hull in the joints! Does anyone have any idea why?I have tried playing with the tolerances but I am not able to get any sort of joint fillet!

  • David Stasiuk

    It looks like a number of things are going on here.

    1) your "trunk" comes into the midpoint of a curve...for it to work, each curve end points needs to match another curve's end points...it has to be a network

    2) you're using curves instead of lines, at best, Exoskeleton will simplify your curves to lines, but at worst this will break it

    3) you're not passing a flat list of values to exoskeleton. it should work with data structure okay, but in this example, you want all of your curves to be in the same data path

    4) you have duplicate curves in your network...these won't get solved properly

    5) that "t" curve at the top of your trunk is really short, and it is going to have a hard time hulling around it

    The good news is, much of this can be quickly fixed using Daniel Piker's Topologizer (http://www.grasshopper3d.com/profiles/blogs/topologizer-network-cle...) You're going to want to have it eliminate short curves for sure, or else you're going to want to figure out some way to change the geometry around that "t".

    Hope this helps!

  • KANAKA RAGHAVAN

    Hey David! That worked beautifully! Thanks a tonne!

  • Gavin

    Hi just wondering where the plankton dll and planktongh dll should be installed.

    Regards,

    Gavin

  • ng5 Alex

    Hello Gavin

    select grasshopper menu file/special folders/components folder

    like any other plugin. make sure you right click/properties the files and unblock them to load successfully

  • Gavin

    Hi Alex. That's great, thanks.

    Gavin

  • h

    hi, i am very new in gh also exo. although i installed all the compenents of exoskeleton and unblocked, when i open the file, i get the error, exoskeleton is missing. 

  • Mohammad gholipour

    hi
    I dont know how to install this plugin help me please..

  • martyn hogg

    Hi David, I'm revisiting my exoskeleton definition in order to create one that has square section struts and I need to work out a way of keeping the node depth to a minimum without the struts overlapping. i.e. calculate a node depth for each strut.

    I notice your exoskeleton component does this - if you set the node depth too small it holds some node arms away from the node centre point to avoid overlapping.

    Can you give me a clue on the strategy for doing this please?

    I was going to try and sort the struts of each node in order of angle, then calculate a distance for each strut that would avoid strut overlap but wondered if there is a simpler, smarter way of doing this!

    Thanks!

  • David Stasiuk

    Hi Martyn- the way it works is that for each node, the convex hull is calculated for either the minimum offset to ensure that it will correctly capture all of the vertices or the offset defined by the user...whichever is bigger. Then, after it solves the convex hull topology, it goes through each strut and "shrinks" it to the minimum depth, based again on the user input, and the strut's radius and its angular proximity to its neighbors. There's a fair amount of trig involved, but nothing really fancy. Are you writing a script, or are you doing it with components?
  • martyn hogg

    I'm trying to do it with components.

    It's the "angular proximity to it's neighbours" that I'm struggling with.

    I guess I need to work out the angle between the struts and then just look at any angles that are acute and then work out the required offset?

  • David Stasiuk

    Exactly. For each strut, check it against each of its neighbors, and test the angle. From this - and the radius of both struts - you can calculate a minimum offset required. Then you set them at the "worst" case value.

  • David Stasiuk

    I don't know how much of a purist you're being in regards to components, but the Tree Sloth plug-in I wrote has a list comparison component that's really useful when you want to compare items against each other in a given list. You can choose for it to give all unique combinations, or you can set it to create for each object a data branch that matches it against every other one. So:

    {0}

    A

    B

    C

    will return:

    {0;0}

    A - B

    A - C

    {0;1}

    B - A

    B - C

    {0;2}

    C - A

    C - B

    So if you had a branch with all the struts from each node, you could easily test and sort all of the angles for each one against its neighbors. Just an idea!

  • martyn hogg

    Thanks! I'll try that... I'm sure I got the Tree Sloth plugin but can't see the list comparisson component in the Tree Menu. The components should all be in Sets >> Tree right?

  • martyn hogg

    I'll have to spend a bit fo time on this I think!

    Blog Post With File

    I'm getting lost in data structures again!

  • David Stasiuk

    Here you go. I've also added at the end my Catmull-Clark implementation with creases...you'll need Plankton for that to work. If you don't have it, though, so long as you have [UTO]'s MeshEdit tools and Tree Sloth, the rest should be fine...it more or less follows the logic of the Exo plug in, just using components. ComponentExo.gh

  • martyn hogg

    Blimey, thank you! That would have taken me ages and will indeed take me ages just to understand it all and be able to re-create it but it is just what I was aiming for.

    I always get stuck on managing data and notice you do some clever tricks with components like Propagate Ancester, PShift, Flip Last etc. which i really need to think about hard to understand and visualise what they are doing.

    I like the smoothing end result. I'd not considered doing this but I will see if I can get some smoothing. The idea is to CNC the nodes from wood with a type of mortice and tenon joint and use approx 50mm x 50mm timber for the struts. I'd probably need to minimise the smoothing of the nodes where the struts will join but try and keep some smoothing in the centre of the nodes.

    Thanks again!

  • martyn hogg

    I got there eventually... the sl3dHull seems a bit buggy sometimes; I have to switch off parts of the model to get it to work.

    Anyway, in theory I could make this, in practice I need to build a new CNC router first!

    The overlapping mesh faces at the corners are just because the struts and nodes will interlock and the interlocking feature is not modeled

  • DAFIK SMAK

    https://github.com/meshmash/Plankton/releases

    Please releases component PlanktonGh.dll from 0.3.0 to 0.3.4 Thanks you

    Please to update the current release because it's actually the  not correct DLL.

    thanks very much

  • David Stasiuk

    Thanks for the head's up, Dafik! The file has been updated to reflect the current release of Plankton.

  • Carlos García

    Hello all!

    Im experimenting with weaverbird+cytoskeleton and I was wonder how I can control the angle that cytoskeleton made  

  • Daniel Piker

    Hi Carlos,

    It's better if you make a separate post in the discussion forum above, as it makes the conversation easier to follow. The angle in cytoskeleton comes from the normals and face angles of the mesh. What effect do you want to achieve?

  • David Stasiuk

    Have you tried cleaning up the network first with Daniel's Topologizer?

  • Doguscan Aladag

    Hey, first of all thank you so much for this very useful tool. I have a problem about the resulting mesh. Although I use topologizer and the curve network is totally clean, I still get this bad mesh as a result, no matter how simple the curve network is. Playing with the parameters didn't work so far (tolerence of the topologizer, pipe radius etc,.) Any ideas what might be causing this?

    Thank you very much in advance.

    Regards.

  • David Stasiuk

    It's hard to know what's going on without seeing your file. I do know that the convex hull script isn't 100% bulletproof, and so will very occasionally bug out...

  • Kelvin Karel

    Hey guys,

    Is there a way to vary the sizes of the nodes?

    What i meant is the bottom stick is bigger while the 2 sticks that splits are smaller. 

    Regards,

    Kelvin Karel

  • Mauro Sogni

    hey guys do you have problems in GH 1.0 in Rhino WIP?

    in GH1.0 Exowireframe fails but in GH0.9 RH5 it is ok.

    do you have the same issue?

  • David Stasiuk

    I haven't tested it in GH 1.0 or Rhino WIP...

  • Andrei Raducanu

    exoskeleton seems to work great in some cases in Rhino 6, but in others, it makes these extra limbs towards the world origin.any idea why or how it an be fixed? i also attached the file, please help if you can, thank you! 

    problema%20exo.gh

  • bea franko

    hey guys!

    i want to exoskeleton a simple bunch of lines, but just get errors.

    i played around with the settings, but there is no logic for me.

    please help me!

    thank you!!!node.gh

  • Carlo Beltracchi

    Seems that ExoW component does not work as expected in Rhino 6 environment, while it works well in Rhino 5.

    Is there a way to fix it?

    Are there alternatives to this plugin?

    Thank you in advance.

  • Alessio Erioli

    Guys, this plugin is from 4 years ago (and it is stated that it's a work in progress); unless David and/or Daniel decide it's time for an update it might have all sort of issues in untested environments (Rhino 6 and everything that came after the plugin itself was written).
    When I tested it, it had some issues with a large number of lines and if parameters weren't carefully tuned it failed to produce consistent meshes.
    If some of you has time and skills on their hands, there is the source code available on GitHub (link is in the description). For personal use, time ago I updated a definition by David Stasiuk to make nodes and beams, based on 3D Convex Hull component. You can still find it here:

    https://www.grasshopper3d.com/xn/detail/2985220:Comment:1745216

    Warning: in Rhino 6 the Starling Convex Hull component doesn't seem to work well, you can use the 3D Convex Hull from the MeshEdit plugin instead (https://www.food4rhino.com/app/meshedit - just substitute the 3D Convex Hull component in the definition and it should work fine).

  • Joseph Ogah

    hi

    Please could someone help me with the downloading of Ekoskeleton, is not responding when I clicked the link shared on this platform.

    Thanks

  • Amir Soltani