How to find closest Planar Srf to Srf

I have a ‘crystal’ shape that needs to be CNC’d and built. However the faces of the crystal I was given are non-planar and so if I UnrollSrf I end up with an unbuildable shape.

Using Rhino, what would be the best method to find the closest shape using planar faces?

Many Thanks

Edit: Attached a .3dm of one of the crystals

Edit: Also note, I only have Rhino 6. My office hasn’t upgraded to 7 yet.
220418_How to Make Planar.3dm (118.2 KB)

Hi Mitch,

You will need to tell it which edges are the outer edges. Before running unrollsrf (explode = no) you can use the UnJoinEdge command and select the split

Show edges command can highlight them after if need be.

1 Like

Hi Japhy,

Thanks for your response. The problem with the UnrollSrf command on the crystal, is that the faces on the crystal are not planar. So I think before unrolling, I would be best to try and create a model that is closest to the crystal, but contains all planar faces? Otherwise the unrolled net doesn’t recreate the same crystal when built.

I’ll try what you said too! :slight_smile:

You can make all the faces triangular (which is always in plane)

Yeah that was one of my first thoughts, but the client would like for the faces to not have a seam through them. They’d like the net to be something like the attached image. I get that in order to make the faces planar it will change the crystals overall shape, but I’m not sure what the quickest and/or best way to model it would be, in order to try and stay as close to the existing shape as possible.

(If that makes sense?)

Hello - see if this is it -
220418_How to Make Planar_Planar.3dm (241.3 KB)


That works perfectly!!! What methodology did you use?


Hi Mitchell -

  1. Explode the object,
  2. Cplane > Object followed by ProjectToCPlane > DeleteInput = Yes.
  3. Untrim the bottom plane.
  4. Extend all of these faces on all sides - tedious, but I have a script that I will attach. The idea is that they should all pass through one another and the bottom plane.
  5. Make a plane across the top using the bottom edges of the pointy surfaces as reference.
  6. CreateSolid
  7. Make lines from the vertices of the new solid to the tip.
  8. Make new PlanarSrfs from these and the edges of the new solid. I suppose it would be quicker to simply extrude the top face border to a point.
  9. Remove that top surface of the lower solid and delete.
  10. Join it all up. (1.9 KB)

To use the Python script use RunPythonScript, or a macro:

_-RunPythonScript "Full path to py file inside double-quotes"



Thanks Pascal!

Your steps and script worked great.