﻿Surface.TryGetPlane Method (Plane, Double)

# SurfaceAddLanguageSpecificTextSet("LSTD5A4FF8_0?cpp=::|nu=.");TryGetPlane Method (PlaneAddLanguageSpecificTextSet("LSTD5A4FF8_1?cpp=%");, Double)

Tests a surface for planarity and return the plane.

Namespace:  Rhino.Geometry
Assembly:  RhinoCommon (in RhinoCommon.dll)
Syntax
```public bool TryGetPlane(
out Plane plane,
double tolerance
)```

#### Parameters

plane
Type: Rhino.GeometryPlane
On success, the plane parameters are filled in.
tolerance
Type: SystemDouble
tolerance to use when checking.

#### Return Value

Type: Boolean
true if there is a plane such that the maximum distance from the surface to the plane is <= tolerance.
Examples
```using System;

partial class Examples
{
public static bool IsBrepBox(Rhino.Geometry.Brep brep)
{
const double zero_tolerance = 1.0e-6; // or whatever
bool rc = brep.IsSolid;
if( rc )
rc = brep.Faces.Count == 6;

var N = new Rhino.Geometry.Vector3d[6];
for (int i = 0; rc && i < 6; i++)
{
Rhino.Geometry.Plane plane;
rc = brep.Faces[i].TryGetPlane(out plane, zero_tolerance);
if( rc )
{
N[i] = plane.ZAxis;
N[i].Unitize();
}
}

for (int i = 0; rc && i < 6; i++)
{
int count = 0;
for (int j = 0; rc && j < 6; j++)
{
double dot = Math.Abs(N[i] * N[j]);
if (dot <= zero_tolerance)
continue;
if (Math.Abs(dot - 1.0) <= zero_tolerance)
count++;
else
rc = false;
}

if (rc)
{
if (2 != count)
rc = false;
}
}
return rc;
}

public static Rhino.Commands.Result TestBrepBox(Rhino.RhinoDoc doc)
{
Rhino.DocObjects.ObjRef obj_ref;
var rc = Rhino.Input.RhinoGet.GetOneObject("Select Brep", true, Rhino.DocObjects.ObjectType.Brep, out obj_ref);
if (rc == Rhino.Commands.Result.Success)
{
var brep = obj_ref.Brep();
if (brep != null)
{
Rhino.RhinoApp.WriteLine(IsBrepBox(brep) ? "Yes it is a box" : "No it is not a box");
}
}
return rc;
}
}```
```import Rhino

def IsBrepBox(brep):
zero_tolerance = 1.0e-6 #or whatever
rc = brep.IsSolid
if rc: rc = brep.Faces.Count == 6

N = []
for i in range(6):
if not rc: break
rc, plane = brep.Faces[i].TryGetPlane(zero_tolerance)
if rc:
v = plane.ZAxis
v.Unitize()
N.append(v)

for i in range(6):
count = 0
for j in range(6):
if not rc: break
dot = abs(N[i] * N[j])
if dot<=zero_tolerance: continue
if abs(dot-1.0)<=zero_tolerance:
count += 1
else:
rc = False

if rc:
if 2!=count: rc = False
return rc

if __name__=="__main__":
rc, objref = Rhino.Input.RhinoGet.GetOneObject("Select Brep", True, Rhino.DocObjects.ObjectType.Brep)
if rc==Rhino.Commands.Result.Success:
brep = objref.Brep()
if brep:
if IsBrepBox(brep): print "Yes it is a box"
else: print "No it is not a box"```
Version Information

#### Rhino for Mac

Supported in: 5.4

#### Rhino for Windows

Supported in: 6.2
See Also