C#ATIA

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

APIでレンダリング2

こちらの続きです。
APIでレンダリング1 - C#ATIA

連続してレンダリング画像を取得すればgifアニメに出来ますね。

# Fusion360API Python script

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

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

        renderMgr: fusion.RenderManager = des.renderManager
        renderMgr.activateRenderWorkspace()

        rendering: fusion.Rendering = renderMgr.rendering

        camera: core.Camera = app.activeViewport.camera
        target: core.Point3D = camera.target
        eye: core.Point3D = camera.eye
        upVec: core.Vector3D = camera.upVector
        upVec.normalize()
        viewVec: core.Vector3D = eye.vectorTo(target)
        viewVec.normalize()
        sideVec: core.Vector3D = viewVec.crossProduct(upVec)
        sideVec.normalize()
        viewMat: core.Matrix3D = core.Matrix3D.create()
        viewMat.setWithCoordinateSystem(
            target,
            sideVec,
            viewVec,
            upVec,
        )

        count = 30
        unit = math.radians(360 / count)
        matLst = []
        for idx in range(count):
            mat: core.Matrix3D = core.Matrix3D.create()
            mat.setToRotation(
                unit * idx,
                core.Vector3D.create(0,0,1),
                core.Point3D.create(0,0,0),
            )
            mat.transformBy(viewMat)

            matLst.append(mat)

        cameraLst = []
        for mat in matLst:
            camera: core.Camera = app.activeViewport.camera
            eye: core.Point3D = camera.eye.copy()
            eye.transformBy(mat)
            camera.eye = eye
    
            cameraLst.append(camera)

        for idx, camera in enumerate(cameraLst):
            renderFeat: fusion.RenderFuture = rendering.startLocalRender(
                f'C:/temp/hoge{idx}.jpg',
                camera,
            )

        ui.messageBox('Done')

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

30枚の画像で360°取得します。(=1コマ12°)
・・・結構時間がかかります。まぁしょうがないですね。

前回同様、こちらのjpg->gifにしました。
GIFメーカー (動画や画像からアニメーションを作ろう!)


出来上がりはこちら。

角度を間違えました・・・。カメラの上方向じゃなくて、モデルの
上方向にすべきでした。メチャメチャ酔います。

無料でここまで出来るのすごい!と思うのですが、Blenderはもっと
出来るだろうな。