Fusion 360 を Pythonで動かそう その５　最初と最後のおまじないを読んでみる

#はじめに
Fusion360 のAPIの理解を深めるために公式ドキュメント内のサンプルコードの内容からドキュメントを読み込んでみたメモ書きです。Fusion 360 を Pythonで動かそう [**その２**](https://qiita.com/reisyu/items/7198eed3aaaaacbd0899)、[**その３**](https://qiita.com/reisyu/items/a226454ada23f5d3f49b)、[**その４**](https://qiita.com/reisyu/items/b9b8ef714495ba1c5eda)で見て見ぬふりをしてきた「最初と最後のおまじない」の内容を見ていきます。

##「最初と最後のおまじない」はこちら
```Python
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

        #
        # ここにコードを追加していく
        #

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

## run関数
```Python
def run(context):
```
Fusion 360は、スクリプトが最初に実行されるときにrun関数を自動的に呼び出します。

##Application
最上位のApplicationオブジェクトは、Fusion 360のすべてを表します。Applicationオブジェクトは、アプリケーション全体のプロパティとその直接の子（Documents が最も重要です）へのアクセスを提供します。
参考：[Getting Started with Fusion 360's API](https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-D93DF10F-4209-4073-A2A0-4FA8788C8709)

```Python
        app = adsk.core.Application.get()
        ui = app.userInterface
```
[**Application.get メソッド**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-481bdac5-e807-4528-8d0b-ea7743205040)でルートの Application オブジェクトにアクセスしてappに代入しています。
[**Application.userInterface プロパティ**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-51269823-8db7-415b-be65-2631e7e0d333)　ユーザーインターフェースに固有の機能へのアクセスを提供します。


##Documents
Document オブジェクトは、Fusion 360データパネルのアイテムを表します。新しいデザインが作成されるか、既存のデザインが開かれると、そのファイルはAPIで Document オブジェクトとして表されます。
Product オブジェクトは、さまざまなプロダクトタイプを表す基本クラスです。デザインデータには、Product から派生する Design オブジェクトがあります。Document には、1つの Design オブジェクトのみを含めることができます。
参考：[Documents, Products, Components, Occurrences, and Proxies](https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-88A4DB43-CFDD-4CFF-B124-7EE67915A07A)

```Python
        doc = app.documents.add(adsk.core.DocumentTypes.FusionDesignDocumentType)
        design = app.activeProduct
```
[**Documents.add Method メソッド**]() で新しいドキュメントを作成して開き`doc`に代入しています
[**Application.activeProduct プロパティ**](https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-f67c1037-6530-4ada-9b84-9e7320aaa5a3)　現在のアクティブなプロダクトを返します。これを `design` に代入しています

##Components
すべてのFusion 360ドキュメントには、ルートコンポーネントと呼ばれる単一のデフォルトコンポーネントが含まれています。ユーザーインターフェイスでは、ルートコンポーネントはブラウザーの最上位ノードで表されます。
参考：[Documents, Products, Components, Occurrences, and Proxies](https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-88A4DB43-CFDD-4CFF-B124-7EE67915A07A)

```Python
        # Get the root component of the active design.
        rootComp = design.rootComponent
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/1d6385f9-5dec-8aad-293b-0d5462140603.png)

#まとめ
Applicationオブジェクトを取得して、その中のアクティブプロダクトを取得して、その中のルートコンポーネントを取得して、その中にあるXY平面をつかってスケッチを作って・・・といった感じでつながっているということですね

前の記事　[Fusion 360 を Pythonで動かそう その４　スケッチにいろんな方法で線を描く](https://qiita.com/reisyu/items/b9b8ef714495ba1c5eda)
次の記事　[Fusion 360 を Pythonで動かそう その６　スケッチポイントを描く](https://qiita.com/reisyu/items/a1df42510f0498ca6252)

# 参考
[Fusion 360 API Reference Manual](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-7B5A90C8-E94C-48DA-B16B-430729B734DC)