本文整理汇总了C++中ON_NurbsCurve::ReserveCVCapacity方法的典型用法代码示例。如果您正苦于以下问题:C++ ON_NurbsCurve::ReserveCVCapacity方法的具体用法?C++ ON_NurbsCurve::ReserveCVCapacity怎么用?C++ ON_NurbsCurve::ReserveCVCapacity使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ON_NurbsCurve
的用法示例。
在下文中一共展示了ON_NurbsCurve::ReserveCVCapacity方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
//.........这里部分代码省略.........
a = (0.5 + ON_SQRT_EPSILON)*ON_PI;
if (angle <= a)
span_count = 1;
else if (angle <= 2.0*a)
span_count = 2;
else if (angle <= 3.0*a)
span_count = 4; // TODO - make a 3 span case
else
span_count = 4;
cv_count = 2*span_count + 1;
switch(span_count) {
case 1:
CV[0] = start_point;
CV[1] = arc.PointAt(angle0 + 0.50*angle);
CV[2] = end_point;
break;
case 2:
CV[0] = start_point;
CV[1] = arc.PointAt(angle0 + 0.25*angle);
CV[2] = arc.PointAt(angle0 + 0.50*angle);
CV[3] = arc.PointAt(angle0 + 0.75*angle);
CV[4] = end_point;
angle *= 0.5;
break;
default: // 4 spans
CV[0] = start_point;
CV[1] = arc.PointAt(angle0 + 0.125*angle);
CV[2] = arc.PointAt(angle0 + 0.250*angle);
CV[3] = arc.PointAt(angle0 + 0.375*angle);
CV[4] = arc.PointAt(angle0 + 0.500*angle);
CV[5] = arc.PointAt(angle0 + 0.625*angle);
CV[6] = arc.PointAt(angle0 + 0.750*angle);
CV[7] = arc.PointAt(angle0 + 0.875*angle);
CV[8] = end_point;
angle *= 0.25;
break;
}
a = cos(0.5*angle);
b = a - 1.0;
//c = (radius > 0.0) ? radius*angle : angle;
c = angle;
span_count *= 2;
knot[0] = knot[1] = angle0; //0.0;
for (j = 1; j < span_count; j += 2) {
CV[j].x += b * center.x;
CV[j].y += b * center.y;
CV[j].z += b * center.z;
CV[j].w = a;
CV[j+1].w = 1.0;
knot[j+1] = knot[j+2] = knot[j-1] + c;
}
knot[cv_count-1] = knot[cv_count] = angle1;
for ( j = 1; j < span_count; j += 2 ) {
w = CV[j].w;
winv = 1.0/w;
a = CV[j].x*winv;
b = ArcDeFuzz(a);
if ( a != b ) {
CV[j].x = b*w;
}
a = CV[j].y*winv;
b = ArcDeFuzz(a);
if ( a != b ) {
CV[j].y = b*w;
}
a = CV[j].z*winv;
b = ArcDeFuzz(a);
if ( a != b ) {
CV[j].z = b*w;
}
}
nurb.m_dim = (dim==2) ? 2 : 3;
nurb.m_is_rat = 1;
nurb.m_order = 3;
nurb.m_cv_count = cv_count;
nurb.m_cv_stride = (dim==2 ? 3 : 4);
nurb.ReserveCVCapacity( nurb.m_cv_stride*cv_count );
nurb.ReserveKnotCapacity( cv_count+1 );
for ( j = 0; j < cv_count; j++ ) {
cv = nurb.CV(j);
cv[0] = CV[j].x;
cv[1] = CV[j].y;
if ( dim == 2 ) {
cv[2] = CV[j].w;
}
else {
cv[2] = CV[j].z;
cv[3] = CV[j].w;
}
nurb.m_knot[j] = knot[j];
}
nurb.m_knot[cv_count] = knot[cv_count];
return true;
}