本文整理汇总了C++中ON_NurbsCurve::PointAtEnd方法的典型用法代码示例。如果您正苦于以下问题:C++ ON_NurbsCurve::PointAtEnd方法的具体用法?C++ ON_NurbsCurve::PointAtEnd怎么用?C++ ON_NurbsCurve::PointAtEnd使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ON_NurbsCurve
的用法示例。
在下文中一共展示了ON_NurbsCurve::PointAtEnd方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: RealCurveInterval
int
ON_CurveProxy::GetNurbForm( // returns 0: unable to create NURBS representation
// with desired accuracy.
// 1: success - returned NURBS parameterization
// matches the curve's to wthe desired accuracy
// 2: success - returned NURBS point locus matches
// the curve's to the desired accuracy but, on
// the interior of the curve's domain, the
// curve's parameterization and the NURBS
// parameterization may not match to the
// desired accuracy.
ON_NurbsCurve& nurbs,
double tolerance, // (>=0)
const ON_Interval* sub_domain // OPTIONAL subdomain of ON::ProxyCurve::Domain()
) const
{
ON_BOOL32 rc = false;
if ( m_real_curve )
{
ON_Interval scratch_domain = RealCurveInterval( sub_domain );
rc = m_real_curve->GetNurbForm(nurbs,tolerance,&scratch_domain);
if ( rc )
{
if ( m_bReversed )
nurbs.Reverse();
ON_Interval d = m_this_domain;
if ( sub_domain )
d.Intersection( *sub_domain );
nurbs.SetDomain( d[0], d[1] );
if ( nurbs.m_dim <= 3 && nurbs.m_dim >= 1 )
{
double t0 = Domain()[0];
double t1 = Domain()[1];
if ( 0 != sub_domain )
{
if ( t0 < sub_domain->Min() )
t0 = sub_domain->Min();
if ( sub_domain->Max() < t1 )
t1 = sub_domain->Max();
}
// set ends of NURBS curve to be exactly on ends of proxy curve
ON_3dPoint P0 = PointAt(t0);
ON_3dPoint P1 = PointAt(t1);
ON_3dPoint N0 = nurbs.PointAtStart();
ON_3dPoint N1 = nurbs.PointAtEnd();
// 22 September 2003, GBA. The end tuning code below should only be applied
// to clamped nurbs curves. In particular it should not be used on
// periodic nurbs curves. Fixes TRR#11502.
ON_BOOL32 clamped = nurbs.IsClamped(2);
if ( clamped && (P0 != N0 || P1 != N1) )
{
if ( 0==nurbs.m_is_rat )
{
nurbs.SetCV(0,P0);
nurbs.SetCV(nurbs.m_cv_count-1,P1);
}
else
{
ON_4dPoint H0, H1;
H0 = P0;
H0.w = nurbs.Weight(0);
H0.x *= H0.w;
H0.y *= H0.w;
H0.z *= H0.w;
nurbs.SetCV(0,H0);
H1 = P1;
H1.w = nurbs.Weight(nurbs.m_cv_count-1);
H1.x *= H1.w;
H1.y *= H1.w;
H1.z *= H1.w;
nurbs.SetCV(nurbs.m_cv_count-1,H1);
}
}
}
}
}
return rc;
}