C#ATIA

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

アニメーション画面に文字を追記する

Fusion360にはちょっとしたアニメーションを作る機能があります。
・・・ほぼ使ったことがないです。

こちらに文字を追加して表示するテストを行いました。

hoge”の文字が右から左にニコ動風に流れていきます。

# Fusion360API Python script

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

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

        a=1


        # root: fusion.Component = des.rootComponent

        text_test("hoge")

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


def text_test(txt: str):
    app: core.Application = core.Application.get()
    des: fusion.Design = app.activeDocument.design
    root: fusion.Component = des.rootComponent

    cgGrps = root.customGraphicsGroups.add()

    mat: core.Matrix3D = core.Matrix3D.create()
    cgText: fusion.CustomGraphicsText = cgGrps.addText(
        txt,
        'Arial',
        3, 
        mat,
    )
    cgText.depthPriority = 0

    billBoard: fusion.CustomGraphicsBillBoard = fusion.CustomGraphicsBillBoard.create(
        core.Point3D.create(0,0,0)
    )
    billBoard.billBoardStyle = fusion.CustomGraphicsBillBoardStyles.ScreenBillBoardStyle
    cgText.billBoarding = billBoard
    cgText.isSelectable = False

    viewScale = fusion.CustomGraphicsViewScale.create(
        20,
        core.Point3D.create(0,0,0),
    )
    cgText.viewScale = viewScale

    start: float = 100
    end: float = 1500
    step: int = 100

    viewPlaces = create_view_places(
        start,
        end,
        step,
    )

    for place in viewPlaces:
        cgText.viewPlacement = place
        app.activeViewport.refresh()
        adsk.doEvents()
        time.sleep(0.02)


def create_view_places(
    start: float,
    end: float,
    step: int,
) -> list[fusion.CustomGraphicsViewPlacement]:
    
    pich = int(end - start) / step
    lst = []
    for idx in range(step):
        lst.append(
            fusion.CustomGraphicsViewPlacement.create(
                core.Point3D.create(0,0,100),
                fusion.ViewCorners.lowerRightViewCorner, 
                core.Point2D.create(start + pich * idx, 250)
            )
        )

    lst.append(
        fusion.CustomGraphicsViewPlacement.create(
            core.Point3D.create(0,0,100),
            fusion.ViewCorners.lowerRightViewCorner, 
            core.Point2D.create(end, 250)
        )
    )

    return lst

事前に"アニメーション"作業スペースにしてから実行します。
"デザイン”や"製造"でも表示されるのですが、"レンダリング"だけは
左から右に流れていきます。座標的な表示位置もちょっと違う。何故?