OpenCascade绘制贝塞尔曲线

贝塞尔曲线有着很多特殊的性质, 在图形设计和路径规划中应用都非常广泛。

贝塞尔曲线完全由其控制点决定其形状, n个控制点对应着n-1阶的贝塞尔曲线,并且可以通过递归的方式来绘制。

一阶:

二阶:

高阶:

OpenCascade提供绘制贝塞尔曲线方法,参考代码如下:

void makeCurve(OccView* view)
{

    // Define points.
    gp_Pnt aPnt1(0.0, 0.0, 0.0);
    gp_Pnt aPnt2(5.0, 5.0, 0.0);
    gp_Pnt aPnt3(10.0, 5.0, 0.0);
    gp_Pnt aPnt4(15.0, 0.0, 0.0);

    // Add points to the curve poles array.
    TColgp_Array1OfPnt aPoles(1, 4);
    aPoles.SetValue(1, aPnt1);
    aPoles.SetValue(2, aPnt2);
    aPoles.SetValue(3, aPnt3);
    aPoles.SetValue(4, aPnt4);

   
    // Define Bezier weights.
    TColStd_Array1OfReal aBezierWeights(1, 4);
    aBezierWeights.SetValue(1, 0.5);
    aBezierWeights.SetValue(2, 1.5);
    aBezierWeights.SetValue(3, 1.5);
    aBezierWeights.SetValue(4, 0.5);

    // Create Bezier curve.
    Handle(Geom_BezierCurve) aBezierCurve = new Geom_BezierCurve(aPoles, aBezierWeights);
    Handle(AIS_ColoredShape) anAisBezierCurve = new AIS_ColoredShape(
        BRepBuilderAPI_MakeEdge(aBezierCurve).Shape());
    anAisBezierCurve->SetColor(Quantity_Color(Quantity_NOC_BLUE));



    Handle(AIS_TextLabel) aisLabel = new AIS_TextLabel();
    aisLabel->SetHeight(fontHeight);
    aisLabel->SetText("Bezier edge");
    aisLabel->SetPosition(aPnt3);
    aisLabel->SetColor(Quantity_Color(Quantity_NOC_BLUE));
    myObject3d.Append(aisLabel);
}

在《OpenCascade插件化三维算法研究平台》上效果展示如下:

OpenCascade绘制贝塞尔曲线_第1张图片

你可能感兴趣的:(qt,c++,3d,塞尔曲线)