How to shell a self-intersecting shape

I wish to create an external shelled surface of a complex, self-intersecting shape. I’ve found this very challenging, and can’t find a way to do this in Rhino or Grasshopper. In my model, attached, the shape is constantly intersecting itself - what I’ve been trying to get is just the external surface, with nothing inside, so a shelled surface can be printed.

Any help or ideas would be greatly appreciated. Even if its a piece of software that could potentially achieve what I’m after.

Self-intersecting shape.3dm (186.7 KB)

If this is for a 3D print and a mesh is OK you might try MeshMixer

Edit > MakeSolid > SolidType = SharpEdgePreserve

then play with the Solid Accuracy and Mesh Density inputs. (7.4 MB)


I’m having exactly the same problem but for exporting to simulation software (abaqus)
Is there any surface tools to get rid of the self intersections?

Hi @jhernandezv, is your object a nurbs surface / polysurface or a mesh? Can you post it ?


Hi @clement, it is a nurbs surface generated as a pipe from a self intersecting curve. The problem is not only the self intersections from the curve but also the smaller radius in some sections.

selfintersectingsrf.3dm (3.3 MB)

Hi @jhernandezv, what geometry type is required for the output, nurbs or mesh ?


You will have to split the pipe and rebuild some of it. Below is a part of it. The crossing can be solved by splitting the surface with intersection curves. The loop is more complicated. I deleted the part which had the self intersection and rebuilt it with a network surface and 4 blended “rails”. The part shown below is a closed polysurface.

selfintersectingsrf.3dm (2.6 MB)

I’m exporting nurbs in STEP.
I tried with cocoon in GH that generate meshes, but then I have to convert it back to nurbs in a painfuly slow process. The real problem is that the meshes generated by cocoon had the same self-intersection at tight curvatures that make them useless for running simulations.

Looks interesting! Did you generated cutting planes to split the surfaces at the intersection? I’m not sure how to get those intersection curves from a single surface.
I guess cut planes can be generated at the self intersections in the base curve and the same with the sections exceeding a certain curvature. I’ll try again and come back.

Then you must go through the painful process of splitting the surface by isocurve into parts which you can intersect to find the curves required to trim. The X like intersections are the easy part, the small curvatures, i would call them sharp intersections are harder to preserve.

Below is an example for one case. Since the curve looks cyclic in some areas, maybe you can limit the surface creation to certain parts and then copy them.

selfintersectingsrf_CG.3dm (891.4 KB)

unfortunately not, these are curves not planes.

No, I didn’t split the X with cutting planes. I just split the pipe before and after the loop self intersection. The result of that are two pieces intersecting at the X. You can select these two and create their intersection curves.

a voxel program like freeform or 3d coat can do this.

Hi all

I didn’t really solve this at the time. But as Kyle said, a vox programme should be able to remove the self intersections

If you then need the model for analysis/simulation (as I did), I would then recommend trying Quad or TriRemesh in grasshopper to give a smoother mesh.