Я создал библиотеку для создания и использования поверхностей b-сплайна в Python, используя параллельные экземпляры scipy.interpolate.RectBivariateSpline()
для хранения узловых векторов, сетки контрольных точек (X, Y, Z) и градусов в u и v ((t, c , k) кортеж, по которому выполняется оценка поверхности). Я также написал анализатор STEP для чтения данных поверхности, экспортированных из пакетов САПР; Я беру значения (t, c, k) из b_spline_surface_with_knots
сущностей в файле и вставляю их в свои собственные объекты. Поверхностная библиотека у меня работает довольно хорошо, но анализатор STEP - это боль, и он дает сбой по разным причинам почти каждый раз, когда я его использую. Итак, я пробовал использовать «настоящий» STEP-парсер, например:
from OCC.STEPControl import STEPControl_Reader
from OCC.IFSelect import IFSelect_RetDone, IFSelect_ItemsByEntity
step_reader = STEPControl_Reader()
status = step_reader.ReadFile('c:/LPT/nomdata/lpt3.stp')
if status == IFSelect_RetDone: # check status
failsonly = False
step_reader.PrintCheckLoad(failsonly, IFSelect_ItemsByEntity)
step_reader.PrintCheckTransfer(failsonly, IFSelect_ItemsByEntity)
ok = step_reader.TransferRoot(1)
_nbs = step_reader.NbShapes()
aResShape = step_reader.Shape(1)
else:
print("Error: can't read file.")
sys.exit(0)
Теперь у меня есть этот объект aResShape
, но никакие попытки выловить его в IPython (или поиск в Google) не покажут, как получить значения (t, c, k), которые определяют поверхность.
Может кто-нибудь указать мне метод, который выявит эти значения? Или, возможно, есть другой STEP-синтаксический анализатор на основе Python, который немного менее непрозрачен?