Как я мог получить фактические данные toposhape в 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 и / или C ++ был бы отличным

1

Решение

В 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();
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]