Distance between surfaces in 2019

When you search for this on the forum, you get a lot of very old answers.


How do you get this in Rhino in 2019?

PointDeviation in V6 is one method. Pick one surface as the object to extact points to test, and then the other surface. Note that the extracted points appear to be based on the render mesh of the object. For more points to test either increase the density of the render mesh, or use Mesh to create a mesh from the surface with the parameters in Mesh adjusted for the desired density.

Pascal Golay once did a rvb script called “Clearance” that does exactly what you are looking for. I used it quite often many years ago with Rhino 4. Not sure if it will work with Rhino 6, though. You can download it from here: https://wiki.mcneel.com/people/pascalgolay

Edit: Just tried it. It works with Rhino 6. :slight_smile:



Well, first off, that script seems to be 10 years old now, and I said 2019… I hope that’s still not the best we have. :laughing:

Second, I can click on several different locations on my surfaces and get as many results.

Is there really no way to get the maximum and minimum distance points?

Does this one work any better?

It uses the same original function as Pascal tho - I stole it from him - it’s dated 2016…

ClosestPt2Objects.py (3.7 KB)


Thanks, yes that one worked better!

Difference between that and Alias was 0.02mm which is fine (and I see in the code that it might rely on document tolerance as well).

Now, what would it take to make it print the maximum distance as well? (No need for a point.) :slight_smile:

EDIT: Also, since I’m in an icon creation spree lately since I’m building my toolbar, here’s what I put on this one…


1 Like

Awesome! It works just fine. :slight_smile: Thanks!

Is there a way to get this script to either:

  • Accept sub-object selection (ie two faces from two different polysurfaces) or
  • Accept two already existing selections (again created as above)?

Having to extract copy all the time adds quite a few steps…

1 Like

It could probably be modified to do so - basically internally extracting the faces - but the logic might be a bit complicated to accept either top-level objects or sub-level objects or a mix of the two. I don’t really have time to look into it right now unfortunately.

No worries, you’re not a McNeel employee so your script contribution is already appreciated!

However, @Pascal is, so I wonder if he could perhaps help me understand why preselect=True doesn’t seem to work in that script? I’ve compared it to a different script that does take existing input, and I can’t see why it wouldn’t work… unless subobject selection (specifically of a surface within a polysurface) doesn’t work with scripts in Rhino?

GetObjects() does not support sub-objects. GetObject() does (it has an optional argument), but of course that would mean two picks, so you could not preselect sub-object select two surfaces beforehand.

So to do what you want in a script, a custom object getter function is required, which means it has to be written in RhinoCommon.