Autodesk forge 如何从查看器中的选定组件获取xyz坐标

Autodesk forge 如何从查看器中的选定组件获取xyz坐标,autodesk-forge,autodesk-viewer,Autodesk Forge,Autodesk Viewer,var查看器; 变量选项={ 环境:“AutodeskProduction”, api:'derivativeV2',//对于上传到EMEA的模型,将此选项更改为'derivativeV2_-EU' getAccessToken:函数(onTokenReady){ var token='Eyjhbgcioijiuzi1niisimpzci6imp3df9zew1tzryawnfa2v5in0.eyjjjbgllbnrfawqioijun0dbbwvingzvu04be1wum10mtjht2dx

var查看器;
变量选项={
环境:“AutodeskProduction”,
api:'derivativeV2',//对于上传到EMEA的模型,将此选项更改为'derivativeV2_-EU'
getAccessToken:函数(onTokenReady){
var token='Eyjhbgcioijiuzi1niisimpzci6imp3df9zew1tzryawnfa2v5in0.eyjjjbgllbnrfawqioijun0dbbwvingzvu04be1wum10mtjht2dxyzrki4acisimv4cci6mtc3odqmzc4nyc2nvguiolsidld2bigv2fgvzzonyyyyxxvzjjjjjjjzjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjT1cThwAs9p8LNasuR7S8WXlGqR1lU6kX-RY8XW5QU';
var timeInSeconds=36000;//使用Forge身份验证(OAuth)API提供的值
onTokenReady(令牌,timeUnseconds);
}
};
Autodesk.Viewing.Initializer(选项,函数(){
var htmlDiv=document.getElementById('forgeViewer');
查看器=新的Autodesk.Viewing.Private.GuiViewer3D(htmlDiv);
//查看器=新的Autodesk.Viewing.Private.GuiViewer3D(htmlDiv);
var startedCode=viewer.start();
如果(起始代码>0){
console.error('未能创建查看器:不支持WebGL');
返回;
}
log('初始化完成,下一步加载模型…');
});
var documentId='urn:dxjuomfkc2sub2jqzwn0czpvcy5vymply3q6dddnyw1jyjrom3vtogxtchjtdeyz29jnxv2 zioghfdhv0b3jpywxfynvja2v0l1qwmdzfmtqvjdlvlzws1nmy1xrc0wmduxlnj2da';
Autodesk.Viewing.Document.load(documentId、onDocumentLoadSuccess、onDocumentLoadFailure);
函数onDocumentLoadSuccess(viewerDocument){
var defaultModel=viewerDocument.getRoot().getDefaultGeometry();
loadDocumentNode(viewerDocument,defaultModel);
}
函数onDocumentLoadFailure(){
console.error('获取伪造清单失败');
}
$(文档).ready(函数(){
$viewer=jQuery(“#forgeViewer”);
//在三维视口上单击鼠标后,填充交点的X/Y/Z
$viewer.on('click',函数(ev){
if(viewer.getSelection()){
mainviewer=新的Autodesk.Viewing.GuiViewer3D(document.getElementById('forgeViewer');
//其他代码。。。
const selSet=mainviewer.getSelection();
const targetElem=selSet[0];
const model=mainviewer.model;
const instanceTree=model.getData().instanceTree;
const fragList=model.getFragmentList();
设bounds=new THREE.Box3();
instanceTree.enumNodeFragments(dbId,(fragId)=>{
设box=new-THREE.Box3();
fragList.getWorldBounds(fragId,box);
界限.联合(框);
},对);
const position=bounds.center();
}
})
});

身体{
保证金:0;
}
#伪造者{
宽度:100%;
身高:100%;
保证金:0;
背景色:#F0F8FF;
}

您提到的代码片段仅适用于HTML DOM。它将为您提供id为forgeViewer的DOM元素的DOM rect元素,并且不能用于检索查看器的3d/2d世界中的信息。请改用查看器API

const viewer = new Autodesk.Viewing.GuiViewer3D(  document.getElementById('forgeViewer') );

// Other codes ...

const selSet = viewer.getSelection();
const targetElem = selSet[0];

const model = viewer.model;
const instanceTree = model.getData().instanceTree;
const fragList = model.getFragmentList();

let bounds = new THREE.Box3();

instanceTree.enumNodeFragments( dbId, ( fragId ) => {
    let box = new THREE.Box3();
    fragList.getWorldBounds( fragId, box );
    bounds.union( box );
}, true );

const position = bounds.center(); //!<<< This is the selected object's position in the viewer world
const-viewer=new Autodesk.Viewing.GuiViewer3D(document.getElementById('forgeViewer');
//其他代码。。。
const selSet=viewer.getSelection();
const targetElem=selSet[0];
const model=viewer.model;
const instanceTree=model.getData().instanceTree;
const fragList=model.getFragmentList();
设bounds=new THREE.Box3();
instanceTree.enumNodeFragments(dbId,(fragId)=>{
设box=new-THREE.Box3();
fragList.getWorldBounds(fragId,box);
界限.联合(框);
},对);
const position=bounds.center();/!
这用于在查看器中查找选定对象的模型。您也可以在事件侦听器中执行此操作。例如,您可以使用聚合\选择\更改\事件。然后您可以调用_selectedModel并访问坐标、全局偏移、四维矩阵和更多功能

_selectedModel.getGlobalOffset()

例如,这将为您提供x、y、z坐标。

am GENT error“无法从viewer3d文件中读取未定义的属性getSelection…”对于代码viewer3d.prototype.getSelection=function(){返回this.impl.selector.getSelection();};您必须首先加载模型,上面的代码不包含该部分。请检查此处的教程以开始:我已经添加了上面的代码。我遵循了文档,在单击已加载到DOM中的模型时出现此错误…仍然不确定哪里出了错
_selectedModel.getGlobalOffset()