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
     pg_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);
    }
}
————————
// 任意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
     pg_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);
    }
}