Fusion 360 を Pythonで動かそう その３　スケッチに3つの接線で円を描く

#はじめに
Fusion360 のAPIの理解を深めるために公式ドキュメント内のサンプルコード [**Create circle by 3 tangents API Sample (3つの接線で円を作る APIサンプル)**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-982b8eb4-fad6-11e4-bbf8-3417ebd3d5be) の内容からドキュメントを読み込んでみたメモ書きです
3本の線を作成し、その線に接する円を描きます。さらにその関係を維持するための接線拘束を作成します。

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

##最初と最後のおまじないとスケッチの作成まで
最初と最後のこの辺りはFusion360 APIのお決まりのパターンのようです。スケッチの作成については[**前回**](https://qiita.com/reisyu/items/7198eed3aaaaacbd0899)も触れたので今回は説明を省略します。

```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

        # 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()))
```
##線を3本描く

```python
        # Draw three lines.
        lines = sketch.sketchCurves.sketchLines;
        line1 = lines.addByTwoPoints(adsk.core.Point3D.create(0, 0, 0), adsk.core.Point3D.create(3, 1, 0))
        line2 = lines.addByTwoPoints(adsk.core.Point3D.create(4, 3, 0), adsk.core.Point3D.create(2, 4, 0))
        line3 = lines.addByTwoPoints(adsk.core.Point3D.create(-1, 0, 0), adsk.core.Point3D.create(0, 4, 0))
```
`lines`という名前で sketchLines オブジェクトを作成する
[**Point3D.create メソッド**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-e6a5729c-9233-4448-9d3f-e0dd8b0b4559)でXYZ座標を指定してポイントを作成し、[**SketchLines.addByTwoPoints メソッド**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-d951811b-886d-4712-b9e9-3edd0069b44e)で始点・終点を指定して線を3本描いている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/b7606f27-d217-91a7-24dd-179f0d4288ec.png)

##3本の線に接する円を描く

```python
        # Draw circle tangent to the lines.
        circles = sketch.sketchCurves.sketchCircles
        circle1 = circles.addByThreeTangents(line1, line2, line3, adsk.core.Point3D.create(0,0,0))
```
`circles`という名前で [**sketchCircles オブジェクト**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-15d12c6c-e604-488a-8f62-8fa1547c653c)を作成する
[**SketchCircles.addByThreeTangents メソッド**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-9029bcf4-edbc-4b97-ad4d-d1893c86e092)で3本の線とhintPointの座標値を指定して円を描いている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/173d6557-a1cc-ecb1-71a3-8c9da9c1f3fd.png)

##スケッチ拘束を作成
```Python
        # Apply tangent contstraints to maintain the relationship.
        constraints = sketch.geometricConstraints
        constraints.addTangent(circle1, line1)
        constraints.addTangent(circle1, line2)
        constraints.addTangent(circle1, line3)
```
[**sketch.geometricConstraints プロパティ**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-ad9dea68-b775-444a-b253-f14aa9bafb68)から [**sketch.geometricConstraints オブジェクト**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-52c4f765-43c8-4d81-a1a8-5151dc02c03c)を取得し`constraints` に代入
[**GeometricConstraints.addTangent メソッド**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-813057f8-a6d8-4c37-a53e-6251a857b6c3)で circle1 と line1, line2, line3 に接線拘束を作成 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/963aacf7-7a23-a188-6083-2b9727bd2a92.png)


#まとめ
これぐらいの内容なら読んで理解するのは問題ないけど、サンプルにはないものを作りたいときにドキュメントから必要な情報を探すのに苦労しそうな気がするなー:sob:

前の記事　[Fusion 360 を Pythonで動かそう その２　スケッチに円を描いてみる](https://qiita.com/reisyu/items/7198eed3aaaaacbd0899)
次の記事　[Fusion 360 を Pythonで動かそう その４　スケッチにいろんな方法で線を描く](https://qiita.com/reisyu/items/b9b8ef714495ba1c5eda)

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