Tighten closed curve around an object like a rubber band

Hi there,

I’m looking for a drape-like ability to create curves around an assembly of 3D blocks, that look like rubber bands around them. A 2D-sketch:

In the end, I would like to be able to wrap a distorted cylinder constructed of an assembly of smaller blocks with a cloth-like boundary surface. If the aforementioned rubber bands would work, I could then loft those curves to get my boundary cloth.
As far as I know, Drape only works from one direction, not when encompassing the whole target.

Is there an in-built capability for that? Or a clever RhinoScript idea?
Thx a lot!

How about this: in the view in which you want to see the curves (say, Top), select the objects and run the command MeshOutline…? That will produce polylines.

If you need real NURBS curves, you can also try the same thing with Silhouette - this will produce 3D curves. Then run ProjectToCPlane and CurveBoolean on the result, set the options CombineRegions=Yes and DeleteInput=All, then click somewhere outside the figure and Enter. Lastly use Simplify to simplify the result to the extent possible.


If you don’t mind using Grasshopper there are quite a few threads on “shrink wrapping” geometries. Another strategy would be to implement convex hulls. Hope that helps…

Thank you for your input.

I used the MeshOutline-strategy and have found that the results are somewhat useful, when I apply it step-by-step to parts of the cylinder to get some “average circumference curve”, so that’s a first success. :slight_smile:
Just as additional info, here is a pic of the cylinder made of smaller blocks:

Thanks for giving me these keywords. While I was sure, that I’m not the first one with this problem, I didn’t know how to search for it effectively. I still haven’t used Grasshopper, but it might be a good excuse to start. :wink:

Thx again!

OK, I guess I misunderstood your question, I thought you just wanted a 2D projection outline.

I would just section all the objects by using the Contour command or by intersecting with a series of horizontal planes (you could have unequal spacing if you want in that case), then Loft the sections. This could certainly be automated in Grasshopper or via a script. Or am I still not getting it?


The Contour command works great and produces nice cross sections like these:

However, for Lofting I still need to extract the outer enveloping curve of this curve network. Is there an analogue to the MeshOutline-command for this case?

Thx again!

If everything overlaps, than CurveBoolean should do the job as I outlined in my first post - you will need to do this one cross section level at a time though. Select a level, Call CurveBoolean, set DeleteInput=All and CombineRegions=Yes, then click once on the screen somewhere outside all the selected objects - that tells Rhino you want the outer profile only - then Enter to complete.

If the outer outline doesn’t show up, then Rhino can’t find a complete path. Then you might be stuck needing something like a convex hull function as Anders mentioned, which means scripting or Grasshopper…

Once all the sections are done you might want to select them all and use RebuildNonUniform to rebuild all the curves to the same number of points and a similar seam point. Then Loft.