2016-12-22 12 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

謝謝,這真的是答案 –