C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)※記載されている内容は個人の意見であり、所属する団体等を代表する意見では御座いません・・・・よ!

セットアップを作成し、テンプレートを挿入する

こちらの質問は、表題の意味だと思ってます・・・違いますかね?
https://forums.autodesk.com/t5/fusion-api-and-scripts-forum/auto-generate-setup-and-nc-output/m-p/13889768/highlight/true#M22349

かなりCAM関係のAPIはやってないので正直忘れていますが、名指しで書かれたら
答えるしかないですよね? そこに山があるから登っちゃうのと同じ感覚です。

そのままなのですが、Setupを作成しテンプレート挿入し計算を実行します。
条件はルートコンポーネントにボディは1個以上存在して、予めCAMテンプレートが
エクスポートしてある事です。

# Fusion360API Python script

import traceback
import adsk.core as core
import adsk.fusion as fusion
import adsk.cam as cam
import sys
from pathlib import Path

def run(context):
    ui: core.UserInterface = None
    try:
        # Please modify the template path.
        templatePath: str = r"C:\temp\face.f3dhsm-template"

        if not Path(templatePath).exists():
            return

        app: core.Application = core.Application.get()
        ui = app.userInterface

        camObj: cam.CAM = get_cam_product()

        # bodies
        rootOcc: fusion.Occurrence = camObj.designRootOccurrence
        bodies = get_show_bodies(rootOcc.component)
        if len(bodies) < 1: return

        # setup
        setup: cam.Setup = create_setup(camObj, bodies[0])

        # template
        template: cam.CAMTemplate = cam.CAMTemplate.createFromFile(templatePath)
        setup.createFromCAMTemplate(template)

        # calculate
        camObj.generateAllToolpaths(True)

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


def get_show_bodies(
        root: fusion.Component
) -> list[fusion.BRepBody]:
    
    bodies = root.findBRepUsingPoint(
        core.Point3D.create(0,0,0),
        fusion.BRepEntityTypes.BRepBodyEntityType,
        sys.float_info.max,
        True,
    )

    return list(bodies)


def create_setup(
        camObj: cam.CAM,
        targetBody: fusion.BRepBody,
) -> cam.Setup:

    setups: cam.Setups = camObj.setups
    setupIpt: cam.SetupInput = setups.createInput(
        cam.OperationTypes.MillingOperation
    )
    setupIpt.models = [targetBody]
    setup: cam.Setup = setups.add(setupIpt)
    setup.name = targetBody.name

    set_cam_parameter(
        setup,
        'job_stockMode',
        'default',
    )

    set_cam_parameter(
        setup,
        'job_stockOffsetMode',
        'keep',
    )

    return setup


def set_cam_parameter(
        camEntity,
        name: str,
        value: str,
) -> bool:
    
    try:
        prm: cam.CAMParameter = camEntity.parameters.itemByName(
            name
        )
        if not prm: return False

        prm.value.value = value

        return True

    except:
        return False


def get_cam_product() -> cam.CAM:

    app: core.Application = core.Application.get()
    activete_cam_env()

    return app.activeProduct


def activete_cam_env() -> None:

    app: core.Application = core.Application.get()
    ui: core.UserInterface = app.userInterface

    camWS: core.Workspace = ui.workspaces.itemById('CAMEnvironment') 
    camWS.activate()

自分でブログやフォーラムに書き残したものを描き集めた結果がこうなりました。