Обновите квоты эскиза и прочитайте размеры модели
У меня есть эскиз с фиксированным углом между двумя линиями. У меня также есть размеры (из черновика), которые связаны с разделами эскиза. Мне нужно изменить угол на эскизе и получить фактические значения размеров. Мне также нужно сделать это из внешнего модуля Python (встраивание)
Код является:
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
import sys
import numpy as np
FREECADPATH = r'/usr/lib/freecad/lib'
sys.path.append(FREECADPATH)
import FreeCAD as App
import FreeCADGui as Gui
filePath = r"thePath..."
if App.ActiveDocument:
doc = App.ActiveDocument
else:
doc = App.open(filePath)
angSmpl = np.linspace(10, 40, num=10)
sk = doc.Sketch
for angle in angSmpl:
a = sk.getDatum('rotHex').Value
sk = doc.Sketch
sk.setDatum('rotHex', App.Units.Quantity(str(int(angle))+' deg'))
doc.recompute()
b = sk.getDatum('rotHex').Value
res = doc.getObjectsByLabel('heightHex')[0].Distance
print a, b, res
Выход:
FreeCAD 0.16, Libs: 0.16R6707 (Git)
Fasteners workbench Loaded
Sheet Metal workbench loaded
Importing project files......
(100.0 %)
32.0 10.0 330.599 mm
10.0 13.0 330.599 mm
13.0 16.0 330.599 mm
16.0 20.0 330.599 mm
20.0 23.0 330.599 mm
23.0 26.0 330.599 mm
26.0 30.0 330.599 mm
30.0 33.0 330.599 mm
33.0 36.0 330.599 mm
36.0 40.0 330.599 mm
Почему переменная "res" не меняет своего значения? Как правильно решить эту задачу?
Спасибо за помощь.
FreeCAD модель здесь: MyModel
1 ответ
По умолчанию размеры чертежа не являются параметрическими, это означает, что они не обновляются при изменении размерной формы. Для создания параметрического измерения вы можете использовать клавишу "alt" в соответствии с документацией FreeCAD по адресу http://www.freecadweb.org/wiki/index.php?title=Draft_Dimension
Вы должны убедиться, что измерение является параметрическим, чтобы ваш скрипт работал. Самый простой способ проверить это - обновить эскиз в графическом интерфейсе и проверить, обновляется ли размер тоже. Если так и скрипт не работает, то это ошибка.