Forge Viewer上でモデルの色や位置を変更したい場合

Extensionなどのコードを読んでやりたいことの実現方法を調べた結果をまとめています。 どこまでが公式に保証されている動作かは把握できていないので、今後のバージョンで動く保証はできないです。

モデルの色を変更したい場合

以下でできるが、コードをみてわかる通り、dbId毎に設定する必要があるので、色を変更したい部分のすべてのdbIdをピックアップする手段が別途必要になります。

function setColor(model: Autodesk.Viewing.Model) {
    const r = 1;
    const g = 0;
    const b = 0;
    model.setThemingColor(dbId, new THREE.Vector4(r, g, b, 1));
}

alphaは設定するとどうなるんだろう?(要確認)

ちなみに設定した色をリセットするのは以下でできます。

function clearColor(viewer: Autodesk.Viewing.GuiViewer3D) {
    viewer.clearThemingColors(viewer.model);
}

型を明確にして説明するために関数にしていますが、直接呼び出せばよいです。

モデルの位置を変更したい場合

以下でできます。

function setOffset(model: Autodesk.Viewing.Model, offset: THREE.Vector3) {
    (model as any).setGlobalOffset(offset);
}

動的に変更した場合の画面表示への反映方法

位置(色も?)をデータ上で変更しても、そのままでは画面は再描画されるまで更新されません。 そのため、アニメーション表示するためには、強制的に画面の再描画が必要になります。 具体的には以下で再描画できます。

function repaint(viewer: Autodesk.Viewing.GuiViewer3D) {
    viewer.impl.invalidate(true, true, true);
}

以下でもできる?以下のほうが適切そう?(要確認)

viewer.impl.sceneUpdated(true)