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.

  • Tudor Cosmatu

    Just thinking out loud here,

    could it for example treat an engulfed line as if it would be an endpoint, so for example take its midpoint instead of the line? Not quie sure if it makes sense. Other then that seems to work just fine!

    Thanks again!

  • h

    Does this new version fix the bug which results in (seemingly) random mesh vertices to be placed at the origin (i.e., [0,0,0])?

  • David Stasiuk

    Hi Harrison-

    Yes it does...you can find a more detailed explanation of the features here: http://www.grasshopper3d.com/profiles/blogs/exoskeleton-cytoskeleto...

    One other issue that has come to my attention is if two struts are at too close an angle to each other, the component may return an "object reference not set to an instance of an object" error. I will try to include a test for this in an upcoming release.

    Tudor-

    I'm not sure if I know what you mean exactly, but I am open to treating engulfed struts differently. One approach I had thought of would be to simply extract offending struts from the solution and give the component a warning message that would show the indices of the failing elements. Another, more complex approach, would be to collapse the ends of offending struts into a "super node"...but this would make the component run quite a bit heavier, particularly if there were several failures in a try, and one fix could cause another failure, etc.

  • Josh Draper

    I'm getting "object reference not set to an instance of an object" when using Exoskeleton 2 on a molecular bond model. None of the curves seem to be at too close an angle. I did a quick test on a triangle to see what kind of close angle might cause a problem.

    I was able to make it work with angles smaller than 4 degrees. I'm also finding that if you have very close angles, you need very small radii values to make it work. When I started small like this I stopped getting the "object reference" error.

    However, if you increase the radii values you tend to get the error "One or more struts is engulfed by its nodes"

  • Aidan K

    Hi David,

    I'm super impressed with the new release, huge thanks to you and daniel for making this work public (and open-source!). This is awesome.

  • Tudor Cosmatu

    Hi Dave,

    The super node was where i was hinting at indeed. I was actually suggesting to get the midpoint of those struts which length deviates from the average length of the struts with a certain degree or maybe a more relyable logic for designating the struts which could result in an error, and treat those as 'simple' or 'super' nodes.

  • Nick Tyrer

    To be honest, i like the current method of showing which lines cause a problem, maybe including indices of offenders would also help.

    But if there is some kind of method that deviates from original line geometry then it should be an opt-in action. Like using 'topologizer', maybe a toggle

    1. standard

    2. remove offending strut

    3. collapse points for supernode

  • David Stasiuk

    I think I like that idea, Nick. Maybe make the strut failure treatments an in-component menu (like the "average, cull all, leave one" options in the Cull Duplicates component). Then the results:

    1. Return an error (red component) with offending struts highlighted (and also I'd like to add an index enumeration of the failing struts for an easier search in the error message)

    2. Return a warning (yellow component) with an index enumeration of the failing struts in the warning message.

    3. Return a runtime message with an index enumeration of the collapsed struts in the warning message

  • Nick Tyrer

    Exactly! As long as the user is aware of assumptions the component is taking everyone is happy.

  • Aidan K

    I'm having a recurring problem of missing nodes when dealing with small, complex geometries. In one application, we generate internal lattice structures within a bone implant, and the resulting mesh has broken nodes at seemingly random locations, with no error reported. I've used Exoskeleton quite a bit, and this only seems to happen in this particular case. The line network is generated by creating point grids on the mesh and populating the region between them with PanelingTools. As I increase the resolution of the point grid, the structure gets more concentrated, and these broken nodes start to appear. I've played with the number of sides, radius and node depth quite a bit, and although it does improve in some configurations, the naked edge problem is never entirely gone at higher pt grid resolutions. What might be the issue here?



  • David Stasiuk

    First of all...wow, super cool! Second of all, my guess is that if you're working with really small geometries at 1:1, the tolerances still aren't low enough for the hull to Solve properly. Quick question: have you installed the gha from the link in this group? The first gha I put out there had much too high tolerances. However, if it's still breaking with the new gha, could you do me a favor and try scaling up your geometry considerably? I am thinking more and more that I should add a tolerance input...
  • Aidan K

    Indeed, I hadn't installed the newest gha, you've solved the problem! In the example, the scale of the geometry is on the limit of "manufacturability", so in that sense, a tolerance input shouldn't be necessary. Thanks for the fix!

  • MARIO VERGARA

    hi guys

    i´m getting this error

    any ideas?

  • David Stasiuk

    Hi Mario-you should be able to get around this by just running your Rhino meshes directly into cytoskeleton rather than passing them through the PlanktonMesh parameter component first. This error has to do with some issues related to the fact that the Plankton.gha and PlanktonGH.dll are both producing the same object type, but somehow they don't work correctly with each other. Daniel knows more about it than I do...but like I said, so long as you feed cytoskeleton a regular mesh, it will convert it to a PlanktonMesh internally, no problem.

  • MARIO VERGARA

    Hi David:

    Great now it´s working

  • MARIO VERGARA

    By the way

    why ca´t you join meshes before using Cyto component???

  • David Stasiuk

    It needs clean meshes to run...so if you join multiple meshes, you have to make sure that you weld all of the vertices together. Weaverbirds "join and weld" component does a good job with this, although sometimes it has a hard time welding everything that should be. [UTO]'s MeshEdit tools have an amazing weld vertices component that runs super fast and clean. I'd recommend that you join and weld your meshes, and then split disjoint meshes after (so this way, if you have discrete geometries, then they will be captured as multiple elements). If you do this, then when you feed them into cytoskeleton they should run well.

  • Aidan K

    I have a line network that Exoskeleton001.gh can generate succesfully, however the new version returns the following error, what might be the problem? Thanks.

  • David Stasiuk

    Hi Aidan...do you think you could send me the file in question so I can take a look at it?

  • martyn hogg

    Yes! Got Rhino5 at last (sold some kites :) ) and Exoskeleton is great!

  • martyn hogg

    David, would it be a difficult mod to make exoskeleton work without the struts? i.e. all nodes join to each other instead of having a strut between them? I'm looking to be able to add holes through a solid structure, if this makes sense. This would be great for making structures where you want fat nodes that often cause the lines to become engulfed.

    I'd like to look at the code, but I'm a complete beginner... after getting the files off github, what do I do to actually look at the code? :)

  • David Stasiuk

    Hi Martyn...so you mean just have adjacent nodes attach to each other directly? This should be possible to do. I guess I'd approach it by making an override when the Distance parameter was set to zero. I don't think it would be too tricky to implement, but I don't know when I'll have the time to do it...

    I use Microsoft Visual Studio Express (here it's with C#)...it's probably easiest to also install github, and then to clone the repository on your machine. Both are free!

  • martyn hogg

    Yes that's exactly what I mean!
    Probably easier to create a mesh with or without struts, but also useful to be able to have zero length struts only where the nodes are too close together.
    I will follow your advice for visual basic and github and see how I get on!
  • Aidan K

    Hi David,

    I'd be really interested in trying a version which implements the 'super nodes' you've been talking about. How close are you to a release? Is there a branch of the repository that includes it?

    Thanks, great work!

  • Brian Ringley

    Could someone please confirm:

    1. Plankton and Cytoskeleton are now packaged with Exoskeleton.
    2. The same plankton.dll and planktonGh.dll are used by Kangaroo.
    3. Turtle is still a separate download.

    Thanks!