C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

フラットパターンを削除する

Fusion360のシートメタルなのですが、APIでフラットパターンを
作成し、DXFで出力する事は可能なのですが、削除の方法が分からなくて
困っていました。

削除する必要性は、
・一つのコンポーネント内に複数のシートメタルボディが作成可能。
・一つのコンポーネント内で作成出来るフラットパターンは一つ。
と、若干矛盾した仕様になっている為です。

最初はこちらで削除可能だと思っていました。

# Fusion360API Python script

import traceback
import adsk.core as core
import adsk.fusion as fusion

def run(context):
    ui = core.UserInterface.cast(None)
    try:
        app: core.Application = core.Application.get()
        ui = app.userInterface
        des: fusion.Design = app.activeProduct
        root: fusion.Component = des.rootComponent

        flat: fusion.FlatPattern = root.flatPattern
        if not flat:
            return

        flat.deleteMe()

    except:
        if ui:
            ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))

これ実際に実行してみても、Tree上に残ってしまいます。

中身を見ると、確かにフラットパターンの面影はありません。

中身無いのだから、新規に作成しても良いのかな?と思い実際に
作成してみると、エラーになります。

結論から書くと、フラットパターンはTree上から削除しなければなりません。


フラットパターンはAPIとして比較的新しいので見つけにくかった
のですが、もっと上位のオブジェクトを削除する必要がありました。

# Fusion360API Python script

import traceback
import adsk.core as core
import adsk.fusion as fusion

def run(context):
    ui = core.UserInterface.cast(None)
    try:
        app: core.Application = core.Application.get()
        ui = app.userInterface
        des: fusion.Design = app.activeProduct
        root: fusion.Component = des.rootComponent

        flat: fusion.FlatPattern = root.flatPattern
        if not flat:
            return

        # flat.deleteMe()

        flatComp: fusion.FlatPatternComponent = flat.parentComponent
        flatProd: fusion.FlatPatternProduct = flatComp.parentDesign
        flatProd.deleteMe()

    except:
        if ui:
            ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))

これが分かれば、事前にフラットパターンを作成しなくても全ての
シートメタルボディのフラットパターンをDXFでエクスポート出来そう。