Все
иметь файл из 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 ++ был бы отличным
В OpenCASCADE есть разделение между топологией и геометрией. Таким образом, обычно вашим первым контактом будут топологические объекты (т.е. TopoDS_Wire или TopoDS_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();
}
Других решений пока нет …