Search code examples
autodesk-forgeautodesk-viewer

Autodesk Forge: programmatically zoom out after focus on object by fitToView()


After select and focusing on an object with fitToView(objectIds, model), I want to zoom out the camera programatically instead of via mouse events.

I tried the following code and it was able to zoom out, but the 3D space was distorted. If you know how to correctly zoom out, please let me know.

// select and isolate target object
let dbid = [1137]
viewer.impl.visibilityManager.isolate(dbid, viewer.model)
viewer.select(dbid)

//focus on target object
viewer.getAggregateSelection((data) => {
    let rootId = data.selector.getInstanceTree().nodeAccess.rootId
    viewer.fitToView(rootId, viewer.model)
})

//zoom out camera
let cam = viewer.getCamera().perspectiveCamera
cam.zoom *= 0.05
viewer.impl.syncCamera();

Solution

  • It's not the zoom property that you need to change but the camera position:

    var nav = viewer.navigation
    
    var pos = nav.getPosition()
    
    var target = nav.getTarget()
    
    var viewdir = new THREE.Vector3()
    
    viewdir.subVectors (pos, target).normalize()
    
    // zooms out by 100 along the view direction
    viewdir.multiplyScalar (100)
    
    pos.add(viewdir)
    
    nav.setPosition(pos)