ON_BOOL32 ON_AnnotationArrow::GetBBox( double* boxmin, double* boxmax, ON_BOOL32 bGrowBox ) const { ON_BOOL32 rc = ON_GetPointListBoundingBox( 3, false, 1, 3, m_tail, boxmin, boxmax, bGrowBox?true:false ); if (rc) rc = ON_GetPointListBoundingBox( 3, false, 1, 3, m_head, boxmin, boxmax, true ); return rc; }
bool ON_3dPointArray::GetBBox( // returns true if successful double boxmin[3], double boxmax[3], int bGrowBox ) const { return ON_GetPointListBoundingBox( 3, false, Count(), 3, (m_a) ? &m_a[0].x : 0, boxmin, boxmax, bGrowBox ); }
bool ON_2fVectorArray::GetBBox( float boxmin[2], float boxmax[2], bool bGrowBox ) const { return ON_GetPointListBoundingBox( 2, false, Count(), 2, (m_a) ? &m_a[0].x : 0, boxmin, boxmax, bGrowBox ); }
bool ON_2fPointArray::GetBBox( // returns true if successful float boxmin[2], float boxmax[2], int bGrowBox ) const { return ON_GetPointListBoundingBox( 2, false, Count(), 2, (m_a) ? &m_a[0].x : 0, boxmin, boxmax, bGrowBox ); }
bool ON_3dVectorArray::GetBBox( double boxmin[3], double boxmax[3], bool bGrowBox ) const { return ON_GetPointListBoundingBox( 3, false, Count(), 3, (m_a) ? &m_a[0].x : 0, boxmin, boxmax, bGrowBox ); }
ON_BOOL32 ON_LineCurve::GetBBox( // returns true if successful double* boxmin, // minimum double* boxmax, // maximum ON_BOOL32 bGrowBox ) const { return ON_GetPointListBoundingBox( m_dim, false, 2, 3, m_line.from, boxmin, boxmax, bGrowBox?true:false ); }
ON_BOOL32 ON_PlaneSurface::GetBBox( // returns true if successful double* boxmin, // minimum double* boxmax, // maximum ON_BOOL32 bGrowBox ) const { int i,j,k=0; ON_3dPoint corner[4]; for ( i = 0; i < 2; i++ ) for ( j = 0; j < 2; j++ ) { corner[k++] = PointAt( m_domain[0].m_t[i], m_domain[1].m_t[j] ); } return ON_GetPointListBoundingBox( 3, 0, 4, 3, &corner[0].x, boxmin, boxmax, bGrowBox?true:false ); }
bool ON_BezierCage::GetBBox( // returns true if successful double* boxmin, // minimum double* boxmax, // maximum int bGrowBox // true means grow box ) const { int i, j; bool rc = (m_order[0] > 0 && m_order[1] > 0 && m_order[2] > 0) ? true : false; for ( i = 0; rc && i < m_order[0]; i++ ) for ( j = 0; rc && j < m_order[1]; j++ ) { rc = ON_GetPointListBoundingBox( m_dim, m_is_rat, m_order[2], m_cv_stride[2], CV(i,j,0), boxmin, boxmax, bGrowBox ); bGrowBox = true; } return rc; }
bool ON_PointGrid::GetTightBoundingBox( ON_BoundingBox& tight_bbox, int bGrowBox, const ON_Xform* xform ) const { if ( bGrowBox && !tight_bbox.IsValid() ) { bGrowBox = false; } if ( !bGrowBox ) { tight_bbox.Destroy(); } int i; for ( i = 0; i < m_point_count[0]; i++ ) { if ( ON_GetPointListBoundingBox( 3, 0, m_point_count[1], 3, &m_point[i].x, tight_bbox, bGrowBox, xform ) ) bGrowBox = true; } return bGrowBox?true:false; }
ON_BOOL32 ON_Point::GetBBox( double* boxmin, double* boxmax, ON_BOOL32 bGrowBox ) const { return ON_GetPointListBoundingBox( 3, 0, 1, 3, &point.x, boxmin, boxmax, bGrowBox?true:false ); }
ON_BOOL32 ON_Light::GetBBox( // returns true if successful double* boxmin, // boxmin[dim] double* boxmax, // boxmax[dim] ON_BOOL32 bGrowBox ) const { bool rc = true; ON_3dPointArray points(16); switch(m_style) { case ON::camera_directional_light: case ON::world_directional_light: points.Append(m_location); points.Append(m_location+m_direction); break; case ON::camera_point_light: case ON::world_point_light: points.Append(m_location); break; case ON::camera_spot_light: case ON::world_spot_light: if ( m_spot_angle > 0.0 && m_spot_angle < 90.0 ) { double r = m_direction.Length()*tan(ON_PI*m_spot_angle/180.0); ON_Circle c(ON_Plane(m_location+m_direction,m_direction),r); ON_BoundingBox cbox = c.BoundingBox(); cbox.GetCorners( points ); } else { points.Append(m_location+m_direction); } points.Append(m_location); break; case ON::ambient_light: points.Append(m_location); rc = false; break; case ON::world_linear_light: points.Append(m_location); points.Append(m_location+m_length); break; case ON::world_rectangular_light: points.Append(m_location); points.Append(m_location+m_length); points.Append(m_location+m_width); points.Append(m_location+m_width+m_length); { // include target and direction marker to avoid display clipping ON_3dPoint center(m_location+(m_width+m_length)*0.5); points.Append(center+m_direction); ON_3dVector marker(m_direction); marker.Unitize(); marker *= (m_width+m_length).Length()/12.0; // from GetRectangularLightSegments points.Append(center+marker); } break; default: rc = false; break; } if ( rc && points.Count() > 0 ) { rc = ON_GetPointListBoundingBox( 3, 0, points.Count(), 3, (double*)points.Array(), boxmin, boxmax, bGrowBox?true:false ) ? true : false; } return rc; }