Fusion 360 を Pythonで動かそう その６　スケッチポイントを描く

#はじめに
Fusion360 のAPIの理解を深めるために公式ドキュメント内のサンプルコード [**Sketch Point API Sample (スケッチポイント APIサンプル)**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-79d9183a-a9e7-11e5-83a9-f8b156d7cd97) の内容からドキュメントを読み込んでみたメモ書きです
スケッチポイントを作成します

#スクリプトの内容を確認する

##最初と最後のおまじないとスケッチの作成まで
最初と最後のこの辺りはFusion360 APIのお決まりのパターンです。[**その５**](https://qiita.com/reisyu/items/c5544f877238b70730ce)で触れたので説明を省略します。

```Python
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)
        
        #
        # ここにコードを追加していく
        #

    except:
        if ui:
            ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
```
##スケッチの healthState （健康状態？）を取得

```python
        # Get sketch health state
        health = sketch.healthState
        if health == adsk.fusion.FeatureHealthStates.ErrorFeatureHealthState or health == adsk.fusion.FeatureHealthStates.WarningFeatureHealthState:        
            msg = sketch.errorOrWarningMessage
```
[**Sketch.healthState プロパティ**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-F47F1C6E-3008-4E54-B5B9-DB0211977B2C)を取得して`health`に代入しています。
[**healthState**](https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-FBCBA2D5-BFBF-4CCB-BC77-9E80A450777E) ：フィーチャーが持つ様々な状態のこと。フィーチャーのモデリング、コンストラクションジオメトリ、スケッチの状態に使用されます。
スケッチのhealthState が「ErrorFeatureHealthState：エラーがある」または「WarningFeatureHealthState：警告がある」だったら `msg` に [**errorOrWarningMessage プロパティ**](https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-77578539-140D-4A6E-A4A6-052A1F89AEAD)を代入します


##sketchPoints プロパティを取得する
```python
        # Get sketch points
        sketchPoints = sketch.sketchPoints
```
`sketchPoints `という名前で sketch オブジェクトの [**Sketch.sketchPoints プロパティ**](https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-75f1c802-4a78-4e8e-a2f9-3855e5c1e707)を取得する
Sketch.sketchPoints プロパティ：このスケッチに関連付けられたスケッチ・ポイント・コレクションを返します。これは、既存のスケッチ ポイントへのアクセスを提供し、新しいスケッチ ポイントの作成をサポートします。


##スケッチポイントを作成
```Python
        # Create sketch point
        point = adsk.core.Point3D.create(1.0, 1.0, 0)
        sketchPoint = sketchPoints.add(point)
```
[**SketchPoints.add メソッド**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-37f1c588-48b4-4cd3-8df2-37c94d4ad3d1)で`sketchPoints`にスケッチポイントを追加し `sketchPoint` に代入します
`SketchPoints`と`SketchPoint`と **"s"** の有無での使い分けがややこしい・・・
Point3D.create メソッドではFusion360の画面にはなにも作成されませんが sketchPoints.add メソッドではユーザーインターフェイスの Point コマンドを使用してスケッチポイントを作成するのと同じスケッチポイントが作成されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/21a5fbfb-e155-e06e-40dd-4c38e53f72eb.png)


##スケッチポイントを移動
```Python
        # Move sketch point
        translation = adsk.core.Vector3D.create(1.0, 0, 0)
        sketchPoint.move(translation)
```
[**Vector3D.create メソッド**](https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-91026d99-3a74-4726-b03d-54dfb1fb096b)で移動用のベクトルを作成し `translation` に代入。
[**SketchPoint.move メソッド**](https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-44b74ca0-50d4-4874-8e86-ad4c4e9f8109)で`sketchPoint`を移動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/b7bbd444-3284-3ca3-c56f-7fce8366b863.png)

#まとめ
このシリーズはものすごく地味な作業の繰り返しだけど、だんだんとAPIの構造が理解できてきてる気がしてやってる本人は少しだけ楽しくなってきた:sweat_smile:

前の記事　[Fusion 360 を Pythonで動かそう その５　最初と最後のおまじないを読んでみる](https://qiita.com/reisyu/items/c5544f877238b70730ce)
次の記事　[Fusion 360 を Pythonで動かそう その７ 点を通過するスプライン作成](https://qiita.com/reisyu/items/0fe79a2ad224606a562d)

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