Fusion 360 を Pythonで動かそう その８　スケッチのフィレットとオフセット

#はじめに
Fusion360 のAPIの理解を深めるために公式ドキュメント内のサンプルコード [**Sketch fillet and offset API Sample (スケッチのフィレットとオフセット APIサンプル)**](http://help.autodesk.com/view/fusion360/ENU/?guid=GUID-e20ca15a-fd06-11e4-aaf7-3417ebd3d5be) の内容からドキュメントを読み込んでみたメモ書きです
スケッチでのフィレットを作成し、その結果を元にオフセットします。

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

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

```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()))
```
## 二つのつながった線を描く
```Python
        # Draw two connected 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(line1.endSketchPoint, adsk.core.Point3D.create(1, 4, 0))        
```
ここは[**その４**](https://qiita.com/reisyu/items/b9b8ef714495ba1c5eda)にも出てきた内容なので説明は省略
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/5e2c4c8d-7a1e-b121-7bda-947effc0d1ce.png)

##SketchArcs.addFillet メソッドでフィレットを作成
```python
        # Add a fillet.
        arc = sketch.sketchCurves.sketchArcs.addFillet(
                        line1, line1.endSketchPoint.geometry, 
                        line2, line2.startSketchPoint.geometry, 1)
```
[**SketchArcs.addFillet メソッド**](https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-8506f6ad-eea9-45ec-bd33-03d2f4465cf6)で`arc`という名前の SketchArc オブジェクトを作成。
パラメーターにはline1とline1の終点、line2とLine2の終点、フィレットの半径を指定している
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/dcce49c3-7896-f5bc-2fdc-ba0d0e853162.png)

##line1につながっている曲線を見つける
```Python
        # Add the geometry to a collection. This uses a utility function that
        # automatically finds the connected curves and returns a collection.
        curves = sketch.findConnectedCurves(line1)
```
[**Sketch.findConnectedCurves メソッド**](https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-44ebbb00-53c5-4a6f-a352-ccc068b91d86)で line1 につながっている曲線を見つける。結果は ObjectCollection オブジェクトが得られるのでそれを `curves` に代入する

##オフセットカーブを描く
```Python
        # Create the offset.
        dirPoint = adsk.core.Point3D.create(0, .5, 0)
        offsetCurves = sketch.offset(curves, dirPoint, 0.25)
```
[**Sketch.offset メソッド**](https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-fe28f2e1-bfbf-4521-ac35-14d677d38441)でオフセットカーブを作成。
パラメータは３つ
curves：端部がつながった曲線のセットをObjectCollectionで指定する
directionPoint：入力曲線のどちら側でオフセットを作成するかPoint3Dで指定する
offset：曲線をオフセットする距離を cm 単位で指定する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/3f9d8eab-cb61-4f53-5200-ce12b7afa5bd.png)

#まとめ
直線一本だけをオフセットしようと思い line1 を Sketch.offset メソッドに入れてみたがエラーが出た。ちゃんと ObjectCollection にしないといけないってことかな？

前の記事　[Fusion 360 を Pythonで動かそう その７　点を通過するスプライン作成](https://qiita.com/reisyu/items/0fe79a2ad224606a562d)
次の記事　[Fusion 360 を Pythonで動かそう その９　スケッチの交差](https://qiita.com/reisyu/items/4c30f2168ab9eadef590)

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