我如何在 OpenCascade 中获取实际的地形数据?

How I could get the actual toposhape data in OpenCascade?

全部

有来自 CAD (SW) 的 STEP 格式文件,并且能够通过 Python OCC 绑定读取它:

    importer = aocxchange.step.StepImporter(fname)
    shapes = importer.shapes

    shape = shapes[0]

    # promote up
    if (shape.ShapeType() == OCC.TopAbs.TopAbs_SOLID):
        sol =  OCC.TopoDS.topods.Solid(shape)

我可以展示它、戳它、检查标志等

t = OCC.BRepCheck.BRepCheck_Analyzer(sol)
print(t.IsValid())
print(sol.Checked())
print(sol.Closed())
print(sol.Convex())
print(sol.Free())
print(sol.Infinite())

到目前为止一切顺利。它真的看起来像沿着一些复杂路径弯曲的小管子。

问题:如何从现有的中提取几何特征?我真的需要管参数和它遵循的路径。 Python and/or C++ 中的任何好例子都很棒

在 OpenCASCADE 中,拓扑和几何是分开的。因此,通常您的第一个联系人将是拓扑实体(即:TopoDS_WireTopoDS_Edge),它们可以允许您访问几何图形(take a look here 了解更多详细信息)。

在你的例子中,在阅读 STEP 文件后你得到了 TopoDS_Shape。这是最高级别的拓扑实体,很可能由一个或多个子形状组成。

假设您的形状是由 bspline 曲线形成的(看起来是!),您可以探索该形状,寻找 TopoDS_Edge 个对象(它们是映射到几何曲线的拓扑实体):

TopExp_Explorer myEdgeExplorer(shape, TopAbs_EDGE);
while (myEdgeExplorer.More())
{
    double u0, u1;
    auto edge = TopoDS::Edge(myEdgeExplorer.Current());
    auto curve = BRep_Tool::Curve(edge, u0, u1);

    // now you have access to the curve ...
    // to get a point lying on it, check
    // the method curve->Value(u);

    myEdgeExplorer.Next();
}