先日のfaceBBox.msをコールバックに登録し、フレームをレンダリングする度にオブジェクトを生成していくようにしたいのですが、コールバックの対象になるイベントはいったいどれなんでしょう?
下のように#preRenderイベントに登録するとレンダリング開始時の一度っきりの実行になります。フレーム毎には実行されません。
callbacks.addscript #preRender fileName:"D:\\faceBBoxForAnim-Pre.ms" id:#BBox
#preRenderFrameはメッシュ評価後に呼び出されるのでそこに新たにオブジェクトを配置しても無視されてレンダリングされないようです。
#preRenderEvalも同じくビューポートには新規のオブジェクト配置をしてくれますがレンダラーには伝わらず、、、
registerTimeCallbackでタイムスライダを動かすたびにコールバックって手もありますが、重くなりますしそもそもスクリプトファイルを登録できないんですね。
分からん、、、
-- Delete last frame BBoxes delete $BBox* -- Freeze Node ,name "Sphere01" to TriMesh freezeMesh = snapshotasmesh $Sphere01 -- Main numOfFaces = getNumFaces freezeMesh for faceIndex = 1 to numOfFaces do ( vertexIndexPt3 = getFace freezeMesh faceIndex vtx1 = getVert freezeMesh vertexIndexPt3.x vtx2 = getVert freezeMesh vertexIndexPt3.y vtx3 = getVert freezeMesh vertexIndexPt3.z xArray = #(vtx1.x , vtx2.x , vtx3.x) yArray = #(vtx1.y , vtx2.y , vtx3.y) zArray = #(vtx1.z , vtx2.z , vtx3.z) BBoxMax = point3 (amax xArray) (amax yArray) (amax zArray) BBoxMin = point3 (amin xArray) (amin yArray) (amin zArray) myBox = box name:("BBox"+(faceIndex as String)) \ width:(BBoxMax.x - BBoxMin.x) \ length:(BBoxMax.y - BBoxMin.y) \ height:(BBoxMax.z - BBoxMin.z) faceCenter = meshop.getFaceCenter freezeMesh faceIndex myBox.center = faceCenter format "face:\t%/%\n" faceIndex numOfFaces ) delete freezeMesh
ちなにみコールバックからはずすときはID指定で、
callbacks.removescripts id:#BBox
です。