所有
以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())
到目前为止一切顺利。它看起来像是沿着一条复杂路径弯曲的小管。
问题:如何从我拥有的内容中提取几何特征?我真的需要管参数和路径。 Python和/或C ++中的任何好例子都很棒
答案 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();
}