本文整理汇总了C++中ON_BoundingBox::GetCorners方法的典型用法代码示例。如果您正苦于以下问题:C++ ON_BoundingBox::GetCorners方法的具体用法?C++ ON_BoundingBox::GetCorners怎么用?C++ ON_BoundingBox::GetCorners使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ON_BoundingBox
的用法示例。
在下文中一共展示了ON_BoundingBox::GetCorners方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CreatePseudoInfinitePlane
bool ON_PlaneSurface::CreatePseudoInfinitePlane(
const ON_Plane& plane,
const ON_BoundingBox& bbox,
double padding
)
{
ON_3dPoint bbox_corners[8];
if ( !bbox.GetCorners(bbox_corners) )
return false;
return CreatePseudoInfinitePlane(plane,8,bbox_corners,padding);
}
示例2: IsZero
bool ON_Localizer::IsZero( const ON_BoundingBox& bbox ) const
{
bool rc = false;
ON_BoundingBox loc_bbox;
bool bTestLocBox = false;
double d;
switch ( m_type )
{
case cylinder_type:
{
ON_3dPointArray corners;
bbox.GetCorners(corners);
int i;
double t0, t1;
t0 = t1 = (corners[0]-m_P)*m_V;
for ( i = 1; i < 8; i++ )
{
d = (corners[i]-m_P)*m_V;
if ( d < t0 )
t0 = d;
else if (d > t1 )
t1 = d;
}
ON_Line L(m_P+t0*m_V,m_P+t1*m_V);
if ( m_d[0] > m_d[1] )
{
// function is supported along the line
d = bbox.MinimumDistanceTo(L);
if ( d >= m_d[0] )
rc = true;
}
else
{
// function is supported outside cylinder
d = bbox.MaximumDistanceTo(L);
if ( d <= m_d[0] )
rc = true;
}
}
break;
case plane_type:
{
ON_PlaneEquation e;
e.x = m_V.x; e.y = m_V.y; e.z = m_V.z; e.d = m_P.x;
e.d -= m_d[0];
if ( m_d[0] > m_d[1] )
{
e.x = -e.x; e.y = -e.y; e.z = -e.z; e.d = -e.d;
}
if ( e.MaximumValueAt(bbox) <= 0.0 )
rc = true;
}
break;
case sphere_type:
loc_bbox.m_min = m_P;
loc_bbox.m_max = m_P;
bTestLocBox = true;
break;
case curve_type:
if ( m_nurbs_curve)
{
loc_bbox = m_nurbs_curve->BoundingBox();
bTestLocBox = true;
}
break;
case surface_type:
if ( m_nurbs_surface)
{
loc_bbox = m_nurbs_surface->BoundingBox();
bTestLocBox = true;
}
break;
case distance_type:
rc = false;
break;
default:
rc = true;
}
if ( bTestLocBox )
{
if ( m_d[1] < m_d[0] && m_d[0] > 0.0 )
{
// function is zero outside loc_bbox + m_d[0]
double d = loc_bbox.MinimumDistanceTo(bbox);
if ( d > m_d[0] )
rc = true;
}
else if ( m_d[0] > 0.0 )
{
// function is zero inside loc_bbox-m_d[0]
loc_bbox.m_min.x += m_d[0];
//.........这里部分代码省略.........
示例3: GetBBox
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;
}