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

时间:2017-06-09 22:53:14

标签: python c++ computational-geometry opencascade

所有

以STEP格式从CAD(SW)获取文件,并且能够通过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())

enter image description here

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

问题:如何从我拥有的内容中提取几何特征?我真的需要管参数和路径。 Python和/或C ++中的任何好例子都很棒

1 个答案:

答案 0 :(得分:5)

在OpenCASCADE中,拓扑和几何之间存在分离。因此,通常您的第一次联系将是拓扑实体(即: TopoDS_Wire TopoDS_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();
}