3

全部

从 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和/或C++中的任何好的例子都会很棒

4

1 回答 1

6

在 OpenCASCADE 中,拓扑和几何是分开的。因此,通常您的第一个联系人将是拓扑实体(即:TopoDS_WireTopoDS_Edge),它可以让您访问几何体(查看此处了解更多详细信息)。

在您的情况下,在阅读 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();
}
于 2017-07-19T22:04:37.270 回答