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;
}