2016-12-22 6 views
0

2本の線の間に一定の角度でスケッチがあります。私はスケッチパーティションにリンクされている寸法(ドラフトから)も持っています。私はスケッチの角度を変更し、寸法の実際の値を取得する必要があります。私はまた、外部の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

+0

私はそれを動作させましたが、私はなぜそれがわかりません。だから私はまだ答えが必要です。 手掛かりドラフト寸法を排除し、直接形の長さを選択することであった。 古い行: : 'のRES =のdoc.getObjectsByLabel(「heightHex」)[0] .Distance' を置き換える必要があります 'res = App.getDocument(" __ ArtemZ_test ")。getObject(" Extrude ")。Shape.Edge30.Length' これは機能しますが、なぜですか? –

答えて

1

はパラメトリックではありません、これは時に寸法の形状変化、彼らが更新されないことを意味します。パラメトリックディメンションを作成するには、FreeCADドキュメントの「alt」キーを使用します。http://www.freecadweb.org/wiki/index.php?title=Draft_Dimension

スクリプトを動作させるには、ディメンションがパラメトリックであることを確認する必要があります。これをチェックする最も簡単な方法は、GUIでスケッチを更新し、ディメンションが更新されているかどうかを確認することです。そうであれば、スクリプトはうまくいかず、バグです。

+0

ありがとう、これは本当に答えです –

関連する問題