首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Autodesk : fitToView()在聚焦对象后以编程方式缩小

Autodesk : fitToView()在聚焦对象后以编程方式缩小
EN

Stack Overflow用户
提问于 2017-11-17 03:10:11
回答 2查看 1.2K关注 0票数 0

在使用fitToView(objectIds,model)选择并聚焦对象之后,我想通过编程将相机放大,而不是通过鼠标事件。

我尝试了下面的代码,它能够放大,但是3D空间被扭曲了。如果你知道如何正确放大,请告诉我。

代码语言:javascript
复制
// 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();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-17 16:14:40

您需要更改的不是缩放属性,而是摄像机的位置:

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2021-08-16 13:22:34

您需要更改的不是缩放属性,而是设置摄像机位置:

代码语言:javascript
复制
let camera = this.viewer3D.getCamera();

viewer.fitToView(dbIds, null, true); //provide your device id to locate

var direction = new THREE.Vector3();

camera.getWorldDirection( direction );

//set distance move the camera forward to your needs (gives value in minus for zoomout)

camera.position.add( direction.multiplyScalar(-15)); 

let fov = viewer.navigation.getVerticalFov();  //or horizontalFov

viewer.navigation.setRequestTransition(true, camera.position,viewer.navigation.getTarget(), fov);

//if not work then try fov + 20,30,40 etc..
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47342668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档