Determining if a Brep is a Box
Windows only
Problem
You would like to determine whether or not a polysurface is a (brep) box.
Solution
For a polysurface to be a box, the following conditions must be true:
- The brep must be solid.
- The brep must have six faces.
- Each of the six faces must be planar.
- Each of the planar face must be either perpendicular or antiparallel to the other planar faces.
Sample
The following sample functions demonstrate how to determine whether or not a polysurface is a box.
bool IsBrepBox( const ON_Brep& brep ) { double zero_tolerance = 1.0e-6; // or whatever ON_3dVector N[6]; bool rc = brep.IsSolid(); if (rc) rc = (brep.m_F.Count() == 6); if (rc) { for (int i = 0; rc && i < 6; i++) { ON_Plane plane; if (brep.m_F[i].IsPlanar(&plane, zero_tolerance)) { N[i] = plane.zaxis; N[i].Unitize(); } else rc = false; } } if (rc) { for (int i = 0; rc && i < 6; i++) { int count = 0; for (int j = 0; rc && j < 6; j++) { double dot = fabs(N[i] * N[j]); if (fabs(dot) <= zero_tolerance) continue; if (fabs(dot - 1.0) <= zero_tolerance) count++; else rc = false; } if (rc) { if (2 != count) rc = false; } } } return rc; }