Fusion 360 を Pythonで動かそう その10　理解しづらかったことのおさらい

#はじめに
Fusion 360 を Pythonで動かそう その１～９で公式ドキュメントのサンプルをいくつか触ってみました。そのなかから自分が理解しづらかったことのメモ書きとしてまとめた記事です
###過去の記事はこちら
　[その１　スクリプトの新規作成](https://qiita.com/reisyu/items/84aa97117439e4962bbf)
　[その２　スケッチに円を描いてみる](https://qiita.com/reisyu/items/7198eed3aaaaacbd0899)
　[その３　スケッチに3つの接線で円を描く](https://qiita.com/reisyu/items/a226454ada23f5d3f49b)
　[その４　スケッチにいろんな方法で線を描く](https://qiita.com/reisyu/items/b9b8ef714495ba1c5eda)
　[その５　最初と最後のおまじないを読んでみる](https://qiita.com/reisyu/items/c5544f877238b70730ce)
　[その６　スケッチポイントを描く](https://qiita.com/reisyu/items/a1df42510f0498ca6252)
　[その７　点を通過するスプライン作成](https://qiita.com/reisyu/items/0fe79a2ad224606a562d)
　[その８　スケッチのフィレットとオフセット](https://qiita.com/reisyu/items/5e7f21d55193b9dc9894)
　[その９　スケッチの交差](https://qiita.com/reisyu/items/4c30f2168ab9eadef590)　

#理解しづらかったこと・・・
##Point3D オブジェクト
[**Fusion 360 API Reference Manual ： Point3D Object**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-c49e1ed5-7221-49a4-abc9-81e7beb2e51d) によると・・・
> トランジェント（一時的な） 3D ポイント。トランジェントポイントは、ドキュメントに表示されたり保存されたりしません。トランジェント 3D ポイントは、生の 3D ポイント情報を扱うためのラッパーとして使用されます。Point3D クラスの create メソッドを使用して静的に作成されます。

Point3Dはスケッチで円や線を描くための座標指定に多用されていました。一時的なポイントなのでそのままではFusion360に作図されません。点を作図するにはスケッチポイントやコンストラクションポイントとして配置する必要があります。

例えば [**SketchPoints.add メソッド**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-37f1c588-48b4-4cd3-8df2-37c94d4ad3d1)：指定した場所に点を作成します。これは、ユーザーインターフェイスの Point コマンドを使用してスケッチポイントを作成するのと同等であり、グラフィックスウィンドウ内に可視ポイントを作成します。

##「s 有りオブジェクト」と「s 無しオブジェクト」
同じような名前で「 **s** 」が有ったり無かったりで結構混乱してしまいました。
スケッチの円を例にして整理すると・・・

- [**SketchCircles オブジェクト（s 有り）**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-15d12c6c-e604-488a-8f62-8fa1547c653c) ： スケッチ内の円のコレクションです。これは既存の円へのアクセスを提供し、新しい円を作成するためのメソッドをサポートします。 [**addByCenterRadius メソッド**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-f52e70b8-4566-4944-9e57-be4f13f59e0e)で新しい円を描いたり、[**item メソッド**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-696e9280-0564-4b1b-b869-12be8cd4a0a1)で既存の円を指定したりできる（指定した結果は 「s 無しオブジェクト」が取得できる）
- [**SketchCircle オブジェクト（s 無し）**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-f19ed86c-4c9f-45a2-a5bb-03403c2962fa) ： スケッチ内の円。[**deleteMe メソッド**](https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-7c31051e-9c11-4f41-9d8d-c9f9257173e7)で削除したり、[**area プロパティ**](https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-81452928-b88a-4232-a53a-53710a67ded2)で円の面積を取得したりできる

「s 無しオブジェクト」は円そのもの。「s 有りオブジェクト」は「s 無しオブジェクト」のコレクション。「s 無しオブジェクト」を作るときはコレクションに追加する形で作成するということ

##「s 有りオブジェクト」と同じ名前の「s 有りプロパティ」
こちらもスケッチの円を例にすると・・・

- [**SketchCurves.sketchCircles プロパティ**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-3dc09d83-2a80-4c41-a1a4-8763bc423640) ：[**SketchCurves オブジェクト**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-d921bf2d-6de1-4973-a58d-c437ed3cd080)のプロパティのひとつ。このスケッチに関連付けられた「スケッチの円のコレクション = SketchCircles オブジェクト（s 有りオブジェクト）」を返す。

オブジェクトと全く同じ「sketchCircles」という名前なので混乱した😅

## Input オブジェクトに慣れていこう
例えば押し出しを作成するのであれば・・・

- **想像していた方法** ： [**ExtrudeFeatures.add メソッド**](https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-2b3f9fbf-4b60-479c-b4f3-bce9fa679ec2)にプロファイルや距離などの引数を指定すると押し出しができる
- **実際の方法** ： [**ExtrudeFeatures.add メソッド**](https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-2b3f9fbf-4b60-479c-b4f3-bce9fa679ec2)の引数は [**ExtrudeFeatureInput オブジェクト**](https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-b2548e39-b93a-4b44-8749-4a5115f85ae8)ひとつだけ。このInput オブジェクトのメソッドやプロパティで押し出しの方法を指定する

分かってしまえばそういうことなんだろうけど想像と違っていたので戸惑った
[**Fusion 360 API Reference Manual ： Getting Started with Fusion 360's API > Input Objects**](https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-D93DF10F-4209-4073-A2A0-4FA8788C8709) によると
>入力オブジェクトは、より複雑なオブジェクトを作成するために必要なすべての入力を定義するために使用されます。入力オブジェクトは、APIのコマンドダイアログと同等のものと考えることができます。

とのこと。構築の平面、軸、点の作成も同様にInput オブジェクトが出てくる。UI操作のダイアログでの操作を想像しながら考えればしっくりくるようになりそう？


#今後の課題
##ObjectCollection を活用できるようになりたい
[**ObjectCollection オブジェクト**](https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-ded8aff3-e42d-4354-9778-aa60172f788e) ：任意のオブジェクト型のリストを扱うために使用される汎用コレクション
Grasshopper のリストやツリーのように活用して複数のオブジェクトを効率よく扱うことができるか？今後の課題です。

##グローバル座標系とスケッチの座標系とPoint3Dの座標値
グローバル座標系とスケッチの中での座標系とPoint3Dで入力している座標値との関係が理解しきれていないので要調査。

#まとめ
Grasshopperのようなビジュアルプログラミングと比べてしまうと Fusion 360 API にはどうしてもとっつきにくさはあるけどもとても大きな可能性を感じるので引き続き学習を進めていきたい！