# How Does Rhino Determine a Planar Surface

I am working off plans that are using 1/32" of an inch generally and 1/64" sometimes. I have the tolerance set to 1/128. I have a quadrilateral about 28 ft x 8 ft that the plans think is planar but Rhino does not (planarsrf).

If I dive down to computer precision, the angular twist is 14.4209 second with. one corner being 0.0070377" off of being an ideal plane. So I’ve got less than 1/128" deviation over 29 feet. It’s pretty flat.

How close do things need to be before Rhino thinks a quadrilateral is planar?

Hi John -

Could you please post that curve?
-wim

Closer… Rhino’s SelPlanarCrv ansd SelPlanarSrf are very strict. The paradox is that you can take your out of planar rectangle and PlanarSrf will make a surface from it…

The underlying method for checking planarity has a tolerance factor input. The problem is that different Rhino functions that rely in planarity checking use different tolerance values. This is a problem which exists for years, and which has often been raised here.

The different planar tolerance values are the following:

The above is probably used by SelPlanarCrv/Srf. “Zero tolerance” looks like this:

This one with a tolerance argument of the current file tolerance is probably used by PlanarSrf.

I don’t know if this will ever be coordinated…

Hi Mitch -

I did some checking before I answered earlier and did find at least one open YT that you created on this topic. The thing that was different in this thread:

Hence my request for the curve. I’m probably confused.
-wim

Well, I just recreated his thing from the description. File in inches with 0.01" tolerance, made a rectangle 28 feet by 8 feet, turned on control points and lifted one corner by 0.007". SelPlanarCrv would not select the curve, but PlanarSrf does make a surface from it.

PlanarSrf looks at the actual file tolerance, so if I tighten that to 0.005" instead of 0.01", as the +0.007" corner is then out of tolerance, it no longer makes a surface.

Here’s one I was working with. The highlighted shape is very close to planar but not mathematically exact. I need to more the upper left corner a tiny amount to make it planar.

Plane Problem.3dm.zip (22.2 KB)

Yep, that confirms my analysis. It’s around 0.004" out of planar from corner to corner and your file tolerance is 0.001", so the PlanarSrf cannot be made. I would have said if you loosen the file tolerance to 0.005", the surface would have been made, but in a practical test one needs to go up to 0.007 to get PlanarSrf to succeed.

OTOH, SelPlanarCrv still does not work at that file tolerance. You need to completely flatten it to nano tolerances for that to work. If I do that and then move one control point one millionth of an inch out of planarity, SelPlanarCrv fails again.

I get 0.0078125 (1/128) for the tolerance.

Well, if you run the script below, it will planarize your curve “best fit”. It says about 0.002" out max deviation from the completely planar form - but as the original is warped corner to corner, you need to double that to get the maximum it’s out. I think Rhino examines it a bit differently though.

PlanarizeCurves.py (3.4 KB)
Plane Problem-msh.3dm (1.8 MB)