C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA

Fusion360APIでNURBS曲線を作成してみる2

こちらの続きです。
Fusion360APIでNURBS曲線を作成してみる - C#ATIA

前回スプリクトで作成したNURBS曲線の方法では、不要なコントロールポイントが
削除し切れなかったのですが、思い付きで遠回りな方法を行ったら
意図していた結果となりました。

#FusionAPI_python
#Author-kantoku
#Description-NurbsCurve3D_Test2
#Nurbsカーブ作成テスト

import adsk.core, adsk.fusion, traceback

_app = adsk.core.Application.get()
_ui = _app.userInterface

def run(context):
    try:
        global _app, _ui
        des = adsk.fusion.Design.cast(_app.activeProduct)
        comp = des.rootComponent
        
        #NURBSカーブ作成準備
        poles = [adsk.core.Point3D.create(10, 0, 70), 
                 adsk.core.Point3D.create(7, 50, 7), 
                 adsk.core.Point3D.create(3, -30, 8), 
                 adsk.core.Point3D.create(10, -20, 7)]
        degree = 2
        knots = [0.0, 0.0, 0.0, 1.0, 2.0, 2.0, 2.0]
        weights = [1.0, 1.2, 1.0, 1.0]
        
        #NURBSカーブ作成 - 画面上には出来ない
        nc = adsk.core.NurbsCurve3D.createRational(poles, degree, knots, weights, False)
        
        #スケッチ作成
        sk = comp.sketches.add(comp.xYConstructionPlane)
        
        #スケッチにNURBSカーブ挿入
        fs = sk.sketchCurves.sketchFittedSplines.addByNurbsCurve(nc)
        
        #NURBSカーブをスケッチから抽出
        sk.include(fs)
        
        #元のNURBSカーブ削除
        fs.deleteMe()
        
        _ui.messageBox('done')
    except:
        if _ui:
            _ui.messageBox('エラー\n{}'.format(traceback.format_exc()))

こんな感じです。

手順としては、
・各パラメータに基づいたNURBSカーブ作成
 ↓
・スケッチに取り込み(.sketchCurves.sketchFittedSplines.addByNurbsCurve)
 ↓
・NURBSカーブをスケッチから抽出
 ↓
・スケッチに取り込んだNURBSカーブを削除
です。
「NURBSカーブをスケッチから抽出」を行っているincludeメソッドは恐らく
「3Dジオメトリを含める」のコマンドではないかな?と思います。
f:id:kandennti:20170816102912p:plain
過去の経験から、一度スケッチ等画面上に表示される状態じゃないと
includeメソッドはエラーになっちゃうんですよね。