Обновите квоты эскиза и прочитайте размеры модели

У меня есть эскиз с фиксированным углом между двумя линиями. У меня также есть размеры (из черновика), которые связаны с разделами эскиза. Мне нужно изменить угол на эскизе и получить фактические значения размеров. Мне также нужно сделать это из внешнего модуля 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

Вы должны убедиться, что измерение является параметрическим, чтобы ваш скрипт работал. Самый простой способ проверить это - обновить эскиз в графическом интерфейсе и проверить, обновляется ли размер тоже. Если так и скрипт не работает, то это ошибка.

Другие вопросы по тегам