Fusion360のAPIメモ

超絶個人的メモなので間違ってても悪しからず

参照寸法の固有名の取得

参照寸法などで使われる寸法の固有名は、Fusion360ではデフォルトはd123など、頭にdをつけて後は連番で付けられる
取得方法は、

SketchDimensions (SketchDimensions Object)  
↓  
SketchDimensions.addAngularDimension (SketchAngularDimension Object)  
↓  
SketchAngularDimension (SketchAngularDimension Object)  
↓  
SketchAngularDimension.parameter (ModelParameter Object)  
↓  
SketchAngularDimension.parameter.name (string)  

からアクセスできる
ここではaddAngularDimensionを使ってるけど、別にそれに類するものならなんでもよい
結構深いので、見つかりにくかった

寸法の詳細な設定

GUIでやるみたいに寸法を文字列で入力する方法

SketchDimensions (SketchDimensions Object)  
↓  
SketchDimensions.addAngularDimension (SketchAngularDimension Object)  
↓  
SketchAngularDimension (SketchAngularDimension Object)  
↓  
SketchAngularDimension.parameter (ModelParameter Object)  
↓  
SketchAngularDimension.parameter.expression (string)  

で設定する。
ここではaddAngularDimensionを使ってるけど、別にそれに類するものならなんでもよい
参照寸法を使って決定したい場合などは、ここで設定する

アクティブなコンポーネントの取得

app = adsk.core.Application.get()
design = app.activeProduct

if design.activeOccurrence is None: #rootコンポーネント以外に存在しない
    activeComponent = design.rootComponent
else:
    activeComponent = design.activeOccurrence.component

入力ダイアログの式の計算

UnitsManager.evaluateExpression Method

# @param expression ~string~  式  
# @param units ~string~ 表示する単位系(省略可能)(省略した場合はデザインの単位系)
# @return ~double~  計算された結果(内部単位のcmに直される)
~UnitsManager Object~.evaluateExpression(expression, units)

使用例

app = adsk.core.Application.get()
unitsMgr = app.activeProduct.unitsManager

num = unitsMgr.evaluateExpression("1m + 1mm")   #100.1 [cm]
num = unitsMgr.evaluateExpression("1 + 1", "mm")   #0.2 [cm]
app = adsk.core.Application.get()
unitsMgr = app.activeProduct.unitsManager

valueInput = inputs.itemById(入力ダイアログのID)
num = unitsMgr.evaluateExpression(valueInput.expression, "mm")

↓二つは同じ

num = unitsMgr.evaluateExpression(valueInput.expression)
num = unitsMgr.evaluateExpression(valueInput.expression, unitsMgr.defaultLengthUnits)

入力ダイアログのプロパティ

ValueCommandInput.classType Method

入力ダイアログの返り値の~ValueCommandInput型~のプロパティで、勘違いしていたのでメモ


expression
GUIにて入力されたor表示させる文字列


unitType
入力ダイヤログに当初表示する単位の文字列
ここで表示したものに単位変換されて、GUIに表示される

例えば

inputs.addValueInput("my_id",  'my_gui_value',  'mm', adsk.core.ValueInput.createByReal(5))

なら5[cm]をmmに単位変換された"50mm"が文字列としてGUIに表示される。
ここで設定した"mm"がunitTypeに設定される


value
内部単位[cm]に変換された値

単位変換

UnitsManager.convert Method

# @param valueInInputUnits ~double~ 変換したい数値
# @param inputUnits ~string~ 入力単位
# @param outputUnits ~string~ 出力単位
# @return ~double~ 変換後数値
~UnitsManager Object~.convert(valueInInputUnits , inputUnits, outputUnits) 
app = adsk.core.Application.get()
unitsMgr = app.activeProduct.unitsManager

num = unitsMgr.convert(1.0, "m" "mm")   #1m -> 1000mm

スケッチでオフセット

Sketch.offset Method
Sketch fillet and offset API Sample

普通にスケッチオブジェクトの中にあった
なんか検索になかなか引っかからないから見つけるのに時間がかかってしまった。

前回のコマンドインプットの値を利用する

コマンドインプットにてユーザーが値を入力し、実行する。
そのままだと、もう一度スクリプトを実行したときに初期値に戻されてしまう。
一回前に入力したデータが初期値になっていたほうが便利なので、そのやり方を記す。
値の保存には、designオブジェクトのattributesを利用する。
Attributes Object

値を保存する

app = adsk.core.Application.get()
design = app.activeProduct
attribs = design.attributes

#@param GroupName ~string~ パラメータの任意のグループ名
#@param ParameterName ~string~ パラメータの任意の名前
#@param Parameter ~string~ 保存したいパラメータ
attribs.add(GroupName, ParameterName, Parameter)

値の読み出し

app = adsk.core.Application.get()
design = app.activeProduct
attribs = design.attributes

#@param GroupName ~string~ 保存したときのグループ名
#@param ParameterName ~string~ 保存したときの名前
#@return 保存したパラメータ
parameter = attribs.itemByName(GroupName, ParameterName)

今回はdesignのattributesを利用したが(SparGearがそうなってたので)、同じデザインの範囲でしかパラメータの共有はできない。

attributesオブジェクトはいくつかあるので、共有したい範囲のものを利用すればよいと思う。試してないけど
UserParametersのやつとかは使えるかもしれない