Fusion360 Pythonスクリプトでスケッチに点を描く

プログラミング

今回はスケッチに点を描く方法について紹介します。

点を描く

Fusion360のドキュメントにサンプルコードに点を描く方法が記載されています。

Fusion 360 Help
SketchPoint
import adsk.core, adsk.fusion, traceback

def run(context):
    ui = None
    try: 
        app = adsk.core.Application.get()
        ui = app.userInterface

        doc = app.documents.add(adsk.core.DocumentTypes.FusionDesignDocumentType)
        design = app.activeProduct

        # Get the root component of the active design.
        rootComp = design.rootComponent

        # Create a new sketch on the xy plane.
        sketches = rootComp.sketches;
        xyPlane = rootComp.xYConstructionPlane
        sketch = sketches.add(xyPlane)
        
        # Get sketch health state
        health = sketch.healthState
        if health == adsk.fusion.FeatureHealthStates.ErrorFeatureHealthState or health == adsk.fusion.FeatureHealthStates.WarningFeatureHealthState:        
            msg = sketch.errorOrWarningMessage

        # Get sketch points
        sketchPoints = sketch.sketchPoints
        
        # Create sketch point
        point = adsk.core.Point3D.create(1.0, 1.0, 0)
        sketchPoint = sketchPoints.add(point)
        
        # Move sketch point
        translation = adsk.core.Vector3D.create(1.0, 0, 0)
        sketchPoint.move(translation)

    except:
        if ui:
            ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))

実行結果の確認

書かれているコードのままPythonスクリプトを作り、実行してみましょう。

SketchPoint実行結果

プログラムの詳細

プログラムの中身を見ながらどんな事をしているのか確認していきます。

おまじない

1行目~10行目と36行目以降はスケッチのデザイン定番のおまじないです。

import adsk.core, adsk.fusion, traceback

def run(context):
    ui = None
    try:
        app = adsk.core.Application.get()
        ui = app.userInterface
        
        doc = app.documents.add(adsk.core.DocumentTypes.FusionDesignDocumentType)
        design = app.activeProduct
…
    except:
        if ui:
            ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))

スケッチを作る

12行目~18行目ではXY平面上に新しいスケッチを作ります。(詳細は省略します)

        # Get the root component of the active design.
        rootComp = design.rootComponent

        # Create a new sketch on the xy plane.
        sketches = rootComp.sketches;
        xyPlane = rootComp.xYConstructionPlane
        sketch = sketches.add(xyPlane)

スケッチの状態を確認

20行目~23行目ではスケッチの状態を確認します。

        # Get sketch health state
        health = sketch.healthState
        if health == adsk.fusion.FeatureHealthStates.ErrorFeatureHealthState or health == adsk.fusion.FeatureHealthStates.WarningFeatureHealthState:        
            msg = sketch.errorOrWarningMessage

21行目の「healthState」はスケッチの状態を取得します。

状態の種類については公式ドキュメント「FeatureHealthStates Enumerator」に一覧で載っています。

22行目の条件分岐でスケッチにエラーまたは警告があるか確認します。

23行目の「errorOrWarningMessage」でエラーまたは警告の内容を取得します。(「errorOrWarningMessage」はエラーまたは警告の場合のみ内容を取得でき、それ以外の場合では空白(0バイトの文字)を取得します)

ただ、このサンプルでは受け取ったメッセージについて何もしていないように見えるのでこの処理部分については意味不明です。(新規作成したスケッチでエラーや警告が発生する事も考え難い)

点を描く

25行目~30行目では点を作成します。

        # Get sketch points
        sketchPoints = sketch.sketchPoints
        
        # Create sketch point
        point = adsk.core.Point3D.create(1.0, 1.0, 0)
        sketchPoint = sketchPoints.add(point)

26行目の「sketchPoints」点群を取得します。

29行目の「adsk.core.Point3D.create()」で点を作成します。(第一引数、第二引数、第三引数に作成する点のそれぞれ座標値(X, Y, Z)を指定します)

30行目の「add()」で作成した点をスケッチの点群に追加します。

点を移動する

32行目~34行目では作成した点を移動します。

        # Move sketch point
        translation = adsk.core.Vector3D.create(1.0, 0, 0)
        sketchPoint.move(translation)

33行目の「adsk.core.Vector3D.create()」でベクトルを作成します。(第一引数、第二引数、第三引数に作成する点のそれぞれベクトル値(X, Y, Z)を指定します)

34行目の「move()」で点を移動します。(引数にベクトルを指定します)

まとめ

点の作成と点の移動について紹介しました。

点の作成は線などの作成時にも必要になるので使うタイミングはかなり多いと思います。

点の移動として紹介した「move()」はおそらく点以外の要素でも使えると思います。(公式ドキュメントから見つける事はできませんでした)

公式ドキュメントの構成についてもまだ理解不足なのでここら辺の情報をまとめられたら紹介しようと思います。

コメント

タイトルとURLをコピーしました