IsBrepBox Test
Demonstrates how to determine whether a given Brep is a box.
partial class Examples
{
private 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 IsBrepBox(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;
}
}
Partial Friend Class Examples
Private Shared Function IsBrepBox(ByVal brep As Rhino.Geometry.Brep) As Boolean
Const zero_tolerance As Double = 1.0e-6 ' or whatever
Dim rc As Boolean = brep.IsSolid
If rc Then
rc = brep.Faces.Count = 6
End If
Dim N = New Rhino.Geometry.Vector3d(5){}
Dim i As Integer = 0
Do While rc AndAlso i < 6
Dim plane As Rhino.Geometry.Plane = Nothing
rc = brep.Faces(i).TryGetPlane(plane, zero_tolerance)
If rc Then
N(i) = plane.ZAxis
N(i).Unitize()
End If
i += 1
Loop
i = 0
Do While rc AndAlso i < 6
Dim count As Integer = 0
Dim j As Integer = 0
Do While rc AndAlso j < 6
Dim dot As Double = Math.Abs(N(i) * N(j))
If dot <= zero_tolerance Then
j += 1
Continue Do
End If
If Math.Abs(dot - 1.0) <= zero_tolerance Then
count += 1
Else
rc = False
End If
j += 1
Loop
If rc Then
If 2 <> count Then
rc = False
End If
End If
i += 1
Loop
Return rc
End Function
Public Shared Function IsBrepBox(ByVal doc As Rhino.RhinoDoc) As Rhino.Commands.Result
Dim obj_ref As Rhino.DocObjects.ObjRef = Nothing
Dim rc = Rhino.Input.RhinoGet.GetOneObject("Select Brep", True, Rhino.DocObjects.ObjectType.Brep, obj_ref)
If rc Is Rhino.Commands.Result.Success Then
Dim brep = obj_ref.Brep()
If brep IsNot Nothing Then
Rhino.RhinoApp.WriteLine(If(IsBrepBox(brep), "Yes it is a box", "No it is not a box"))
End If
End If
Return rc
End Function
End Class
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"