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]に変換された値
単位変換
# @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のやつとかは使えるかもしれない