OpenCasCade(六) 曲线曲面
1.1 B样条曲线
(1) GeomAPI_Interpolate:插值法生成BSpline曲线
例1:用插值法生成B样条曲线
OCGeomAPI_Interpolate PtB =
new OCGeomAPI_Interpolate(HArray, false, OCPrecision.Approximation());
PtB.Perform();
OCGeom_BSplineCurve curve = PtB.Curve();
对于插值生成曲线来说,不仅能够指定通过的点,还能够指定首尾切矢,或每个点处的导矢限制。具体用法可以参考OCGeomAPI_Interpolate类中的load方法。
(2) public class OCGeomAPI_Interpolate : IDisposable
public void Load(OCTColgp_Array1OfVec Tangents,
OCTColStd_HArray1OfBoolean TangentFlags, bool Scale);
当曲线受切矢控制时,要用此函数。
Tangents:曲线上点的切矢矢量
TangentFlags:曲线上点的是否受切矢控制
Scale:false曲线受切矢的大小影响,true切矢为单位切矢,在本系统中采用单位切矢
当点上没有设置切矢值时,调用此函数会报错。
(3) public class OCTColgp_Array1OfVec : IDisposable
public void SetValue(int Index, OCgp_Vec Value);
设置曲线上点的切矢值
Index:点在曲线数组的索引,从1开始。
Value:切矢值,可以定义三维空间的切矢,如果曲线在YZ平面时,X为0即可,如果曲线在自定义的平面上,切矢值需要计算。
此函数要与类OCTColStd_HArray1OfBoolean中的public void SetValue(int Index, bool Value)一起使用。
public void SetValue(int Index, bool Value)
曲线上的点是否受切矢控制
Index:点在曲线数组的索引,从1开始
Value:是否受切矢控制
(4) 用法:
OCTColgp_Array1OfVec tv = new OCTColgp_Array1OfVec(1, 3);
OCTColStd_HArray1OfBoolean b = new OCTColStd_HArray1OfBoolean(1, 3);
b.SetValue(2, true);
tv.SetValue(2, new OCgp_Vec(Math.Sin(Math.PI / 2 - Math.PI /4), Math.Cos(Math.PI / 2 - Math.PI /4), 0));
PtB.Load(tv, b, true);
1.2 B样条曲面
(1) OCGeomFill_ConstrainedFilling:边界法生成B样条曲面
例1:用边界法生成B样条曲面
OCGeomAdaptor_HCurve SPL1Adaptor = new OCGeomAdaptor_HCurve(cur1.curve);
OCGeomFill_SimpleBound B1 = new OCGeomFill_SimpleBound(
SPL1Adaptor, OCPrecision.Approximation(), OCPrecision.Angular());
OCGeomAdaptor_HCurve SPL2Adaptor = new OCGeomAdaptor_HCurve(cur2.curve);
OCGeomFill_SimpleBound B2 = new OCGeomFill_SimpleBound(
SPL2Adaptor, OCPrecision.Approximation(), OCPrecision.Angular());
OCGeomAdaptor_HCurve SPL3Adaptor = new OCGeomAdaptor_HCurve(cur3.curve);
OCGeomFill_SimpleBound B3 = new OCGeomFill_SimpleBound(
SPL3Adaptor, OCPrecision.Approximation(), OCPrecision.Angular());
OCGeomAdaptor_HCurve SPL4Adaptor = new OCGeomAdaptor_HCurve(cur4.curve);
OCGeomFill_SimpleBound B4 = new OCGeomFill_SimpleBound(
SPL4Adaptor, OCPrecision.Approximation(), OCPrecision.Angular());
int MaxDeg = 5;
int MaxSeg = 2;
OCGeomFill_ConstrainedFilling aConstrainedFilling =
new OCGeomFill_ConstrainedFilling(MaxDeg, MaxSeg);
aConstrainedFilling.Init(B1, B2, B3, B4, false);
OCGeom_BSplineSurface aBSplineSurface = aConstrainedFilling.Surface();
对于用边界法生成的B样条曲面,必须保证边界曲线的条数只能为3条或4条,且曲线围成的区域封闭。