SurfaceTryGetPlane Method (Plane, Double) |
Namespace: Rhino.Geometry
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"