見出し画像

vol.2「押し出してこそ3D」Fusion360 API の学習帳

はじめに

さて今回 vol.2 は,vol.1で作成したスケッチを押し出してみよーの回.
前回スケッチを作成した時のように,メソッドとプロパティをいい感じに使ってけばいけるんじゃないかと勝手に思ってます.

▼前回はこちら
【Fusion360 API の学習帳 vol.1】Fusion360 API はじめました.


押し出しメソッド

スケッチを押し出すには,「押し出し」という機能を利用する必要がある.
ソフトウェアの画面だとこのアイコンに相当する機能.↓↓↓

スクリーンショット 2021-04-26 20.49.15


Fusion 360 API オブジェクトモデルのマップを探っていくと...
どうやら「Features Object」というオブジェクトがあるらしい.

それがこいつ↓ :Features Object
これを使って,いろんな機能を操作できるようだ...

スクリーンショット 2021-04-26 20.23.54

スクロールしていくと....いろんな機能があるな〜

スクリーンショット 2021-04-26 21.20.16

あったー.多分これだ.
Features Objectのプロパティに「extrudeFeatures」というものがあり,押し出しフューチャーにアクセスできる.

図1

extrude Features をクリックすると...
add メソッドがあるではないか!

スクリーンショット 2021-04-26 22.20.31


といった感じに,オブジェクトを散策していくと,やりたいことにたどり着けることもあるし,着かないこともある...

実際のコードの書き方が,サンプルも結構参考になるよ.
▶ 単純な押し出しのサンプル


コードを書いてみた

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 = adsk.fusion.Design.cast(app.activeProduct)
      # 

      # ルートコンポーネントを取得する.
      rootComp = design.rootComponent

      # ▼スケッチの作成▼
      # ルートコンポーネントのスケッチを定義する.
      sk = rootComp.sketches
      
      # ルートコンポーネントのXY平面を定義する.
      xyPlane = rootComp.xYConstructionPlane
      
      # 「sk」というスケッチを「xyPlane」に追加する.
      sketch = sk.add(rootComp.xYConstructionPlane)


      # ▼スケッチに円を書く▼
      # スケッチに書く曲線(円)を定義する.
      circles = sketch.sketchCurves.sketchCircles
      
      # 定義した曲線(円)を追加する.追加するとき中心点(0,0,0)と半径(2cm)を指定している.
      circle1 = circles.addByCenterRadius(adsk.core.Point3D.create(0, 0, 0), 2)
      
      # ========= vol.1ではここまで =========
      
      
      # スケッチ(sketch)からプロファイルを定義する.(0番目のアイテムは「circle1」のこと)
      prof = sketch.profiles.item(0)

      # 寸法を設定しておく.(押し出しフューチャーで押し出し量を代入するときに使う)
      distance = adsk.core.ValueInput.createByReal(5)

      # 押し出す!!
      extrudes = rootComp.features.extrudeFeatures
      ext = extrudes.addSimple(prof, distance, adsk.fusion.FeatureOperations.NewBodyFeatureOperation)      
     
     
     
  # これもお決まりのやつかな...
  except:
      if ui:
          ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))

スケッチに円を書くまでのコードは,vol.1と同じ.
vol.2 で書いた部分をさらっと説明しておきますと...


prof = sk.profiles.item(0)

まずは,スケッチの円を定義している.
スケッチの中に書いたものは,プロファイルとして存在していて,上の行で定義した「circle1」もプロファイルの中の一つということだ.
プロファイルには作成した順番にインデックスが割り当てられていると思われる.(あんまりちゃんと確認していないけど,多分そう)

distance = adsk.core.ValueInput.createByReal(5)

これは,押し出しフューチャーの引数として,押し出し量を設定する必要があるから,予めここで定義しているだけ.
単位は cm らしい.だからここで定義しているのは 5cm

extrudes = rootComp.features.extrudeFeatures
ext = extrudes.addSimple(prof, distance, rootComp)

ここでは,いったん押し出しフューチャーを定義して,

ext = extrudes.addSimple(prof, distance, adsk.fusion.FeatureOperations.NewBodyFeatureOperation)

これで,実際に押し出している.
prof(=円)をdistance(=5cm)押し出す.新しいボディとして
という意味合いかな.


プログラムを途中でとめて遊んでみる

俺の中では,これが一番手っ取り早くプログラムを理解できると思う.
Fusion360 でスクリプトを編集するときは,Visual Studio Code というソフトウェアを勝手にインストールしてくれて,それで開くようになっている.

プログラムを実行するとき,ブレークポイントを入れて,プログラムを途中でとめて,変数をのぞいてみたりするといい.

スクリーンショット 2021-04-26 23.58.09

コードの行番号の左側をクリックすると,ブレークポイントが作成できる.
コードを実行(F5)すると,ブレークポイントでプログラムがとまって,その時点での変数を確認できたりする.

プログラムが動かなかったり,コードの理解するのにとても便利.


スクリーンショット 2021-04-27 0.07.18

あとは,こんな感じで,対話モード(?)みたいにプログラムを動かすこともできる.
これはPythonだからできることなのかな.VBAとかだとできないような...そこらへんは,あんまり良くわかっていませんが,これは色々試すのにとっても便利!!


おわりに

ということで今回は,押し出しをやってみました.
ほんとにちょっとずつですが,地道に進めております...

あと,更新するのも意外と時間かかるんだよねー笑

また次回

この記事が気に入ったらサポートをしてみませんか?