OCC 细分TopoDS_Edge

// 任意Edge

TopoDS_Edge edge;
BRepAdaptor_Curve curveAdaptor(edge);

// 方法1
double start = curveAdaptor.FirstParameter();
double end = curveAdaptor.LastParameter();

for (double v = start; v < end; v += 0.01)
{
    // 得到Edge上一个点 point
    gp_Pnt point = BRepGProp_EdgeTool::Value(curveAdaptor, v);
}

// 方法2
// 上述代码在处理直线时不合适,改用以下方法
// 1、最好先调用 IsDone()确保有效,否则,有些步骤会抛出异常
// 2、Value()函数参数起始下标为1
GCPnts_UniformDeflection gcUD(curveAdaptor, 0.01);
if (gcUD.IsDone())
{
    for (int p = 1; p <= gcUD.NbPoints(); ++p)
    {
        gp_Pnt point = gcUD.Value(p);
    }
}

posted @ 2022-11-25 17:17  xl-better  阅读(349)  评论(0)    收藏  举报