本文整理汇总了C++中ON_Interval类的典型用法代码示例。如果您正苦于以下问题:C++ ON_Interval类的具体用法?C++ ON_Interval怎么用?C++ ON_Interval使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ON_Interval类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Domain
ON_BOOL32 ON_PlaneSurface::GetSpanVector( int dir, double* s ) const
{
ON_Interval d = Domain(dir);
s[0] = d.Min();
s[1] = d.Max();
return d.IsIncreasing();
}
示例2: Domain
double ON_PolyEdgeSegment::EdgeParameter(double t) const
{
double edge_t = ON_UNSET_VALUE;
if ( m_edge )
{
if ( m_t == t && m_edge_t != ON_UNSET_VALUE )
edge_t = m_edge_t;
else
{
ON_PolyEdgeSegment* p = const_cast<ON_PolyEdgeSegment*>(this);
if ( t != m_t )
{
p->m_t = t;
p->m_trim_t = ON_UNSET_VALUE;
p->m_srf_uv[0] = ON_UNSET_VALUE;
p->m_srf_uv[1] = ON_UNSET_VALUE;
}
ON_Interval d = Domain();
bool bReversedEdgeDir = ReversedEdgeDir();
if ( bReversedEdgeDir || m_edge_domain != d )
{
double s = d.NormalizedParameterAt(t);
if ( bReversedEdgeDir )
s = 1.0 - s;
edge_t = m_edge_domain.ParameterAt(s);
}
else
edge_t = t;
p->m_edge_t = edge_t;
}
}
return edge_t;
}
示例3: Domain
ON_BOOL32 ON_Surface::GetDomain( int dir, double* t0, double* t1 ) const
{
ON_Interval d = Domain(dir);
if ( t0 ) *t0 = d[0];
if ( t1 ) *t1 = d[1];
return d.IsIncreasing();
}
示例4: SetAngleIntervalRadians
bool ON_Arc::SetAngleIntervalRadians( ON_Interval angle_in_radians )
{
bool rc = angle_in_radians.IsIncreasing()
&& angle_in_radians.Length() < (1.0+ON_SQRT_EPSILON)*2.0*ON_PI;
if (rc)
{
m_angle = angle_in_radians;
}
return rc;
}
示例5: RealCurveParameter
ON_Interval ON_CurveProxy::RealCurveInterval( const ON_Interval* sub_domain ) const
{
if ( !sub_domain )
return m_real_curve_domain;
ON_Interval d = m_this_domain;
d.Intersection(*sub_domain);
double t0 = RealCurveParameter( d[m_bReversed?1:0] );
double t1 = RealCurveParameter( d[m_bReversed?0:1] );
return ON_Interval(t0,t1);
}
示例6: Domain
ON_BOOL32
ON_Surface::IsClosed(int dir) const
{
ON_Interval d = Domain(dir);
if ( d.IsIncreasing() && Dimension() <= 3 ) {
const int span_count = SpanCount(dir?0:1);
const int span_degree = Degree(dir?0:1);
if ( span_count > 0 && span_degree > 0 )
{
ON_SimpleArray<double> s(span_count+1);
s.SetCount(span_count+1);
int n = 2*span_degree+1;
double delta = 1.0/n;
ON_3dPoint P, Q;
P.Zero();
Q.Zero();
int hintP[2] = {0,0};
int hintQ[2] = {0,0};
double *u0, *u1, *v0, *v1;
double t;
ON_Interval sp;
if ( dir ) {
v0 = &d.m_t[0];
v1 = &d.m_t[1];
u0 = &t;
u1 = &t;
}
else {
u0 = &d.m_t[0];
u1 = &d.m_t[1];
v0 = &t;
v1 = &t;
}
if ( GetSpanVector( dir?0:1, s.Array() ) )
{
int span_index, i;
for ( span_index = 0; span_index < span_count; span_index++ ) {
sp.Set(s[span_index],s[span_index+1]);
for ( i = 0; i < n; i++ ) {
t = sp.ParameterAt(i*delta);
if ( !Evaluate( *u0, *v0, 1, 3, P, 0, hintP ) )
return false;
if ( !Evaluate( *u1, *v1, 2, 3, Q, 0, hintQ ) )
return false;
if ( false == ON_PointsAreCoincident( 3, 0, &P.x, &Q.x ) )
return false;
}
}
return true;
}
}
}
return false;
}
示例7: Domain
ON_BOOL32 ON_LineCurve::GetNormalizedArcLengthPoint(
double s,
double* t,
double fractional_tolerance,
const ON_Interval* sub_domain
) const
{
ON_Interval domain = (sub_domain) ? *sub_domain : Domain();
if ( t )
*t = domain.ParameterAt(s);
return true;
}
示例8: RunCommand
CRhinoCommand::result CCommandSampleSubCrvLength::RunCommand( const CRhinoCommandContext& context )
{
CRhinoGetObject go;
go.SetCommandPrompt( L"Select curve to measure" );
go.SetGeometryFilter( CRhinoGetObject::curve_object );
go.GetObjects( 1, 1 );
if( go.CommandResult() != CRhinoCommand::success )
return go.CommandResult();
const CRhinoObjRef& ref = go.Object(0);
const ON_Curve* crv = ref.Curve();
if( !crv )
return CRhinoCommand::failure;
CRhinoGetPoint gp;
gp.SetCommandPrompt( L"First point on curve" );
gp.Constrain( *crv );
gp.GetPoint();
if( gp.CommandResult() != CRhinoCommand::success )
return gp.CommandResult();
double t0;
if( !crv->GetClosestPoint(gp.Point(), &t0) )
return CRhinoCommand::nothing;
gp.SetCommandPrompt( L"Second point on curve" );
gp.GetPoint();
if( gp.CommandResult() != CRhinoCommand::success )
return gp.CommandResult();
double t1;
if( !crv->GetClosestPoint(gp.Point(), &t1) )
return CRhinoCommand::nothing;
ON_Interval dom;
if( t0 < t1 )
dom.Set( t0, t1 );
else
dom.Set( t1, t0 );
double len;
if( crv->GetLength(&len, 0.0, &dom) )
RhinoApp().Print( L"Subcurve length = %f.\n", len );
else
RhinoApp().Print( L"Unable to calculate length of subcurve.\n" );
return CRhinoCommand::success;
}
示例9: SetDomain
bool ON_Surface::SetDomain( int dir, ON_Interval domain )
{
return ( dir >= 0
&& dir <= 1
&& domain.IsIncreasing()
&& SetDomain( dir, domain[0], domain[1] )) ? true : false;
}
示例10: SegmentIndex
double ON_PolyEdgeCurve::TrimParameter(double t) const
{
double trim_t = ON_UNSET_VALUE;
int segment_index = SegmentIndex(t);
ON_PolyEdgeSegment* seg = SegmentCurve( segment_index );
if ( seg )
{
ON_Interval pdom = SegmentDomain(segment_index);
ON_Interval sdom = seg->Domain();
if ( sdom != pdom )
{
double s = pdom.NormalizedParameterAt(t);
t = sdom.ParameterAt(s);
}
trim_t = seg->TrimParameter(t);
}
return trim_t;
}
示例11: srf_uv
ON_2dPoint ON_PolyEdgeCurve::SurfaceParameter(double t) const
{
ON_2dPoint srf_uv(ON_UNSET_VALUE,ON_UNSET_VALUE);
int segment_index = SegmentIndex(t);
ON_PolyEdgeSegment* seg = SegmentCurve( segment_index );
if ( seg )
{
ON_Interval pdom = SegmentDomain(segment_index);
ON_Interval sdom = seg->Domain();
if ( sdom != pdom )
{
double s = pdom.NormalizedParameterAt(t);
t = sdom.ParameterAt(s);
}
srf_uv = seg->SurfaceParameter(t);
}
return srf_uv;
}
示例12: SetProxyCurveDomain
bool ON_CurveProxy::SetProxyCurveDomain( ON_Interval proxy_curve_subdomain )
{
bool rc = proxy_curve_subdomain.IsIncreasing();
if ( rc )
{
if ( m_real_curve )
{
ON_Interval cdom = m_real_curve->Domain();
cdom.Intersection( proxy_curve_subdomain );
rc = cdom.IsIncreasing();
if (rc )
m_real_curve_domain = cdom;
}
else
{
m_real_curve_domain = proxy_curve_subdomain;
}
}
return rc;
}
示例13: ON_BrepExtrudeHelper_MakeConeSrf
static
ON_NurbsSurface* ON_BrepExtrudeHelper_MakeConeSrf( const ON_3dPoint& apex_point,
const ON_BrepEdge& edge, ON_BOOL32 bRev )
{
// The "s" parameter runs along the edge.
// The "t" parameter is the ruling parameter;
// t=0 is at the base_edge and t=max is at the apex.
// surface side location
// south base_edge
// east line from bRev?START:END of edge to apex
// north singular side at apex
// west line from bRev?END:START of edge to apex.
ON_NurbsSurface* cone_srf = new ON_NurbsSurface();
if ( cone_srf->CreateConeSurface( apex_point, edge ) )
{
if ( bRev )
cone_srf->Reverse(0);
// get a decent interval for the ruling parameter
double d = 0.0;
ON_Interval edom = edge.Domain();
ON_3dPoint pt;
int i, hint=0;
for ( i = 0; i <= 16; i++ )
{
if ( !edge.EvPoint( edom.ParameterAt(i/16.0), pt, 0, &hint ) )
continue;
if ( pt.DistanceTo(apex_point) > d )
d = pt.DistanceTo(apex_point);
}
if ( d > ON_SQRT_EPSILON )
cone_srf->SetDomain(1,0.0,d);
}
else
{
delete cone_srf;
cone_srf = 0;
}
return cone_srf;
}
示例14: SetExtents
bool ON_PlaneSurface::SetExtents(
int dir,
ON_Interval extents,
bool bSyncDomain
)
{
if ( dir < 0 || dir > 1 || !extents.IsIncreasing() )
return false;
m_extents[dir] = extents;
if ( bSyncDomain )
m_domain[dir] = m_extents[dir];
return true;
}
示例15: Trim
ON_BOOL32 ON_ArcCurve::Trim( const ON_Interval& in )
{
ON_BOOL32 rc = in.IsIncreasing();
if (rc)
{
double t0 = m_t.NormalizedParameterAt(in.m_t[0]);
double t1 = m_t.NormalizedParameterAt(in.m_t[1]);
const ON_Interval arc_angle0 = m_arc.DomainRadians();
double a0 = arc_angle0.ParameterAt(t0);
double a1 = arc_angle0.ParameterAt(t1);
// Resulting ON_Arc must pass IsValid()
if ( a1 - a0 > ON_ZERO_TOLERANCE && m_arc.SetAngleIntervalRadians(ON_Interval(a0,a1)) )
{
m_t = in;
}
else
{
rc = false;
}
}
return rc;
}