本文整理汇总了C++中ON_NurbsCurve::SetDomain方法的典型用法代码示例。如果您正苦于以下问题:C++ ON_NurbsCurve::SetDomain方法的具体用法?C++ ON_NurbsCurve::SetDomain怎么用?C++ ON_NurbsCurve::SetDomain使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ON_NurbsCurve
的用法示例。
在下文中一共展示了ON_NurbsCurve::SetDomain方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetNurbForm
int ON_ArcCurve::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& c,
double tolerance,
const ON_Interval* subdomain // OPTIONAL subdomain of arc
) const
{
int rc = 0;
if ( subdomain )
{
ON_ArcCurve trimmed_arc(*this);
if ( trimmed_arc.Trim(*subdomain) )
{
rc = trimmed_arc.GetNurbForm( c, tolerance, NULL );
}
}
else if ( m_t.IsIncreasing() && m_arc.IsValid() )
{
if ( NurbsCurveArc( m_arc, m_dim, c ) )
{
rc = 2;
c.SetDomain( m_t[0], m_t[1] );
}
}
return rc;
}
示例2: 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;
}
示例3: hyp_bottom_plane
extern "C" void
rt_hyp_brep(ON_Brep **b, const struct rt_db_internal *ip, const struct bn_tol *)
{
struct rt_hyp_internal *eip;
RT_CK_DB_INTERNAL(ip);
eip = (struct rt_hyp_internal *)ip->idb_ptr;
RT_HYP_CK_MAGIC(eip);
point_t p1_origin, p2_origin;
ON_3dPoint plane1_origin, plane2_origin;
ON_3dVector plane_x_dir, plane_y_dir;
// First, find planes corresponding to the top and bottom faces - initially
vect_t x_dir, y_dir;
VMOVE(x_dir, eip->hyp_A);
VCROSS(y_dir, eip->hyp_A, eip->hyp_Hi);
VREVERSE(y_dir, y_dir);
VMOVE(p1_origin, eip->hyp_Vi);
plane1_origin = ON_3dPoint(p1_origin);
plane_x_dir = ON_3dVector(x_dir);
plane_y_dir = ON_3dVector(y_dir);
const ON_Plane hyp_bottom_plane(plane1_origin, plane_x_dir, plane_y_dir);
VADD2(p2_origin, eip->hyp_Vi, eip->hyp_Hi);
plane2_origin = ON_3dPoint(p2_origin);
const ON_Plane hyp_top_plane(plane2_origin, plane_x_dir, plane_y_dir);
// Next, create ellipses in the planes corresponding to the edges of the hyp
ON_Ellipse b_ell(hyp_bottom_plane, MAGNITUDE(eip->hyp_A), eip->hyp_b);
ON_NurbsCurve* bcurve = ON_NurbsCurve::New();
b_ell.GetNurbForm((*bcurve));
bcurve->SetDomain(0.0, 1.0);
ON_Ellipse t_ell(hyp_top_plane, MAGNITUDE(eip->hyp_A), eip->hyp_b);
ON_NurbsCurve* tcurve = ON_NurbsCurve::New();
t_ell.GetNurbForm((*tcurve));
tcurve->SetDomain(0.0, 1.0);
// Generate the bottom cap
ON_SimpleArray<ON_Curve*> boundary;
boundary.Append(ON_Curve::Cast(bcurve));
ON_PlaneSurface* bp = new ON_PlaneSurface();
bp->m_plane = hyp_bottom_plane;
bp->SetDomain(0, -100.0, 100.0);
bp->SetDomain(1, -100.0, 100.0);
bp->SetExtents(0, bp->Domain(0));
bp->SetExtents(1, bp->Domain(1));
(*b)->m_S.Append(bp);
const int bsi = (*b)->m_S.Count() - 1;
ON_BrepFace& bface = (*b)->NewFace(bsi);
(*b)->NewPlanarFaceLoop(bface.m_face_index, ON_BrepLoop::outer, boundary, true);
const ON_BrepLoop* bloop = (*b)->m_L.Last();
bp->SetDomain(0, bloop->m_pbox.m_min.x, bloop->m_pbox.m_max.x);
bp->SetDomain(1, bloop->m_pbox.m_min.y, bloop->m_pbox.m_max.y);
bp->SetExtents(0, bp->Domain(0));
bp->SetExtents(1, bp->Domain(1));
(*b)->FlipFace(bface);
(*b)->SetTrimIsoFlags(bface);
boundary.Empty();
delete bcurve;
// Generate the top cap
boundary.Append(ON_Curve::Cast(tcurve));
ON_PlaneSurface* tp = new ON_PlaneSurface();
tp->m_plane = hyp_top_plane;
tp->SetDomain(0, -100.0, 100.0);
tp->SetDomain(1, -100.0, 100.0);
tp->SetExtents(0, bp->Domain(0));
tp->SetExtents(1, bp->Domain(1));
(*b)->m_S.Append(tp);
int tsi = (*b)->m_S.Count() - 1;
ON_BrepFace& tface = (*b)->NewFace(tsi);
(*b)->NewPlanarFaceLoop(tface.m_face_index, ON_BrepLoop::outer, boundary, true);
ON_BrepLoop* tloop = (*b)->m_L.Last();
tp->SetDomain(0, tloop->m_pbox.m_min.x, tloop->m_pbox.m_max.x);
tp->SetDomain(1, tloop->m_pbox.m_min.y, tloop->m_pbox.m_max.y);
tp->SetExtents(0, bp->Domain(0));
tp->SetExtents(1, bp->Domain(1));
(*b)->SetTrimIsoFlags(tface);
delete tcurve;
// Now, the hard part. Need an elliptical hyperbolic NURBS surface.
// First step is to create a nurbs curve.
double MX = eip->hyp_b * eip->hyp_bnr;
point_t ep1, ep2, ep3;
VSET(ep1, -eip->hyp_b, 0, 0.5*MAGNITUDE(eip->hyp_Hi));
VSET(ep2, -MX*eip->hyp_bnr, 0, 0);
VSET(ep3, -eip->hyp_b, 0, -0.5*MAGNITUDE(eip->hyp_Hi));
ON_3dPoint onp1 = ON_3dPoint(ep1);
ON_3dPoint onp2 = ON_3dPoint(ep2);
ON_3dPoint onp3 = ON_3dPoint(ep3);
ON_3dPointArray cpts(3);
cpts.Append(onp1);
//.........这里部分代码省略.........