2016-12-22 19 views
0

的尺寸我有两条线之间的固定角度的草图。我还有一个与草图分区相关的尺寸(来自草稿)。我需要更改草图上的角度并获取尺寸的实际值。我还需要从外部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 

为何变 “水库” 不改变其值?如何正确解决这个任务?

感谢帮助。

的freecad模型是在这里:MyModel

+0

我做了工作,但我不知道为什么。所以我仍然需要一个答案。 线索是消除尺寸草案和直接挑从形状的长度: 旧线: '解析度= doc.getObjectsByLabel(“heightHex”)[0] .Distance' 应改为: 'res = App.getDocument(“__ ArtemZ_test”)。getObject(“Extrude”)。Shape.Edge30.Length' Now it works !, but why?:) –

回答

1

默认尺寸草案都没有参数,这意味着他们不更新尺寸的形状改变时。要创建参数化尺寸,您可以使用“alt”键,根据FreeCAD文档http://www.freecadweb.org/wiki/index.php?title=Draft_Dimension

您需要确保尺寸参数化才能使脚本正常工作。检查这个最简单的方法是,以更新GUI草图,并检查尺寸更新过。如果是这样,并且该脚本不起作用,那就是一个错误。

+0

谢谢,这真的是答案 –