C#ATIA

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

メッシュの六角形分割に挑む8

こちらの続きです。
メッシュの六角形分割に挑む7 - C#ATIA

MeshBodyの移動(Translate)が無いので、そちらを作成しました。

# Fusion360API Python script

import traceback
import adsk.fusion
import adsk.core


def meshTranslateBy(
        mesh: adsk.fusion.MeshBody,
        vec: adsk.core.Vector3D,
        copyIs: bool = False):

    app: adsk.core.Application = adsk.core.Application.get()
    ui: adsk.core.UserInterface = app.userInterface
    sels: adsk.core.Selections = ui.activeSelections

    sels.clear()
    sels.add(mesh)

    cmds = [
        u'Commands.Start FusionMoveCommand',
        u'Commands.SetString infoMoveMethodType infoMoveMethodTranslate',
        u'Commands.SetString infoMoveDirectionType infoMoveDirectionComponentXYZ',
        u'Commands.SetDouble infoMoveTranslateX {}'.format(vec.x),
        u'Commands.SetDouble infoMoveTranslateY {}'.format(vec.y),
        u'Commands.SetDouble infoMoveTranslateZ {}'.format(vec.z),
        u'Commands.SetBool infoCreateCopy {}'.format(1 if copyIs else 0),
        u'NuCommands.CommitCmd',
    ]

    [app.executeTextCommand(cmd) for cmd in cmds]

    res = adsk.fusion.MeshBody.cast(None)
    if copyIs:
        res = mesh.parentComponent.meshBodies[-1]

    return res

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

        clone = meshTranslateBy(
            root.meshBodies[0],
            adsk.core.Vector3D.create(1, 2, 3),
            True
        )

        meshTranslateBy(
            clone,
            adsk.core.Vector3D.create(1, 2, 3),
        )

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

MeshBodyの六角形は1個のみ作成し、移動コピーで済ませたいので。
Meshに関しては、APIで調べる為の機能は備わっていますが、
形状を変更したりするメソッド類が提供されていないので、
地味なものばかり作成しなきゃならないですね・・・。