I am trying to move the dynamically loaded model inside forge viewer, but I'm getting the following error:
Uncaught TypeError: secondModel.getPlacementTransform is not a function
I am trying to achieve:
- dynamically loading model by clicking the thumbnail in the left pane.
- move the individual model by selecting it and moving it around in the viewer.
When the user clicks any tumbnail from the right, it is added to the viewer using the code below (calling this function on image click launchViewer(urn)
).
var viewer;
var ModelArray = [];
function launchViewer(urn) {
var options = {
env: 'AutodeskProduction',
getAccessToken: getForgeToken
};
Autodesk.Viewing.Initializer(options, () => {
if (viewer == undefined) {
viewer = new Autodesk.Viewing.GuiViewer3D(document.getElementById('forgeViewer'));
viewer.start();
}
var documentId = 'urn:' + urn;
Autodesk.Viewing.Document.load(documentId, (doc) => {
var viewables = doc.getRoot().getDefaultGeometry();
let tr = new THREE.Matrix4();
tr.set(0, 0, .005, 0, .005, 0, 0, 0, 0, .005, 0, 0, 0, 0, 0, 1);
viewer.loadDocumentNode(doc, viewables, {
placementTransform: (new THREE.Matrix4()).setPosition({ x: 60, y: 0, z: 0 }),
keepCurrentModels: true,
globalOffset: { x: 0, y: 0, z: 0 }
}).then(function (model1) {
ModelArray.push(model1);
});
document.onmousemove = event => {
if (!event.ctrlKey)
return;
var secondModel = ModelArray[1].getModelId();
let res = viewer.impl.hitTest(event.clientX, event.clientY, true, null, [ModelArray[0].getModelId()]);
let pt = null;
if (res) {
pt = res.intersectPoint;
} else {
pt = viewer.impl.intersectGround(event.clientX, event.clientY);
}
let tr = secondModel.getPlacementTransform();
tr.elements[12] = pt.x;
tr.elements[13] = pt.y;
tr.elements[14] = pt.z + extraZ;
secondModel.setPlacementTransform(tr);
viewer.impl.invalidate(true, true, true);
}
});
});
}
function onDocumentLoadFailure(viewerErrorCode) {
console.error('onDocumentLoadFailure() - errorCode:' + viewerErrorCode);
}
function getForgeToken(callback) {
fetch('http://localhost:59045/api/forge/oauth/token').then(res => {
res.json().then(data => {
callback(data.access_token, data.expires_in);
});
});
}
I am getting an error on the following line.
let tr = secondModel.getPlacementTransform();
Referring this article https://forge.autodesk.com/blog/dynamic-model-placement