Как использовать PythonOCC для импорта параметрических ссылок? - PullRequest
0 голосов
/ 30 октября 2019

Мне нужно извлечь геометрические / параметрические ссылки из файла CAD для сравнения данных обмена. Для этого я использую библиотеку PythonOCC в среде conda.

До настоящего времени я не мог подготовить извлеченный файл (в моем случае файл STEP), но не могу найти дополнительную документацию об этой библиотеке (за исключением списка ВСЕХ функций API, который у нее есть, ноэто не помогает мне, так как есть тонна функций, и это действительно не объясняет, как это работает). Моя цель состоит в том, чтобы извлечь параметрические ссылки из описания NURBS / Splines для захвата некоторых точных точек поверхности (без преобразования данных, поэтому я не хочу проходить через среду CAD).

Кто-нибудь знает, какие функции pythonOCC мне следует изучить, или знает какую-либо документацию, которая может помочь?

Мой код до настоящего времени может отображать только твердое тело:

 #Reads STEP files, checks them and translates their contents into Open CASCADE models.

from OCC.Core.STEPControl import STEPControl_Reader
step_reader = STEPControl_Reader() 
step_reader.ReadFile(r'C:\Users\jonat\Desktop\aspherique_32spln_10-4tol.STP')
step_reader.TransferRoot()
lens = step_reader.Shape()

#Open display to plot the shape

from OCC.Display.SimpleGui import init_display
display, start_display, add_menu, add_function_to_menu = init_display()

display.DisplayShape(lens, update=True)
start_display()

1 Ответ

0 голосов
/ 31 октября 2019

Может быть сложно работать с уравнениями NURBS. Например, оболочка может состоять из нескольких граней, и каждая грань может иметь различное математическое представление. Поэтому лучше использовать функциональность Open CASCADE более высокого уровня.

Open CASCADE имеет класс BRepExtrema_DistShapeShape. Вы можете скормить это двумя TopoDS_Shape с и, вызвав PointOnShape1 и PointOnShape2, получить самые близкие точки на обеих формах.

Если вы накормите его своей геометрией поверхности и вершиной, вы можете получитьточка поверхности, которая ближе всего к этой вершине. Если, с другой стороны, вы подаете его с геометрией поверхности и (возможно, очень длинным) ребром, параллельным оси z и переходя к заданному кортежу x / y, вы можете проверить количество пересечений (метод NbSolution) и получитькоординаты пересечения.

Это то, что вам нужно? Я дал имена из кода C ++, но, скорее всего, pythonOCC имеет те же классы и методы с очень похожими именами ...?

...