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);
}
}