선택한 노드의 dbid를 기반으로 카메라 및 대상을 업데이트합니다. 코드는 MobileVR 함수로 시작합니다. dbid로 검색된 frag mesh에 따라 카메라와 타겟을 업데이트하고 VR 모드로 이동합니다. 현재 GEOMETRY_LOADED_EVENT, OBJECT_TREE_CREATED_EVENT 및 EXTENSION_LOADED_EVENT에 대한 이벤트 리스너가 있습니다. 현재 시간 제한을 사용하여 작동합니다. setTimeout (() => {onSpaceObjectTreeCreated();}, 3000); 이미지 1을 볼 수는 있지만 타임 아웃 이미지가없는 것은 아닙니다. 2. 코드를 실행하거나 카메라를 업데이트하기 전에 기다려야 할 다른 이벤트가 있습니까? 뷰어를 초기화 후 문서를로드하기 전에 이벤트를 연결 시설하는카메라를 업데이트하기 전에들을 청취 할 이벤트
function onSpaceObjectTreeCreated() {
const nav = viewer.navigation;
const cam = nav.getCamera();
const it = viewer.model.getData().instanceTree;
let xPos, yPos, zPos;
it.enumNodeFragments(nodeId, (frag) => {
const mesh = viewer.impl.getRenderProxy(viewer.model, frag);
xPos = mesh.matrixWorld.elements[12];
yPos = mesh.matrixWorld.elements[13];
zPos = mesh.matrixWorld.elements[14];
console.log('x: ' + xPos + ' y: ' + yPos + ' z: ' + zPos);
}, false);
zPos = -41000;
cam.position.set(xPos, yPos, zPos);
cam.target.set(xPos, yPos + 10000, zPos);
}
function onViewerGeometryLoaded() {
const nav = viewer.navigation;
const cam = nav.getCamera();
if (nodeId == -1) {
viewer.setGroundShadow(false);
let xValue = viewer.getCamera().position.x;
let yValue = viewer.getCamera().position.y;
let zValue = viewer.getCamera().position.z;
let bbz = viewer.model.getData().bbox.min.z;
let zValue2 = zValue - bbz;
zValue = zValue * 0.3;
yValue = (zValue2 * 0.7071) * -1;
let nav = viewer.navigation;
let cam = viewer.getCamera();
cam.position.set(xValue, yValue, zValue);
} else {
setTimeout(() => {
onSpaceObjectTreeCreated();
}, 3000);
}
viewer.impl.sceneUpdated();
viewer.navigation.updateCamera();
document.getElementById("toolbar-vrTool").click();
};
function afterViewerEvents() {
var events = [
Autodesk.Viewing.GEOMETRY_LOADED_EVENT,
Autodesk.Viewing.OBJECT_TREE_CREATED_EVENT,
Autodesk.Viewing.EXTENSION_LOADED_EVENT
];
async.each(events,
function (event, callback) {
var handler = function (ev) {
viewer.removeEventListener(
event, handler);
console.log('Event: ' + event);
console.log('Ev: ' + ev.extensionId);
callback();
};
viewer.addEventListener(
event, handler);
},
function (err) {
onViewerGeometryLoaded();
});
}
function mobileVR(arkUrn: string, lviUrn: string, zOffset: number, spaceId: number) {
let element = document.getElementById("mobileViewer");
viewer = new Autodesk.Viewing.Private.GuiViewer3D(element);
let options = {
'env': 'AutodeskProduction',
'getAccessToken': getToken,
'refreshToken': getToken
};
av.Initializer(
options,
() => {
viewer.initialize();
loadDocument(arkUrn, zOffset);
if (lviUrn != "") {
loadDocument(lviUrn, zOffset);
}
viewer.loadExtension('Autodesk.Viewing.WebVR');
}
);
nodeId = spaceId;
afterViewerEvents();
}
을하는 데 도움이
희망 ... 당신이 extensionId을 확인하고이 당신을 기다리고 있습니다 연장 인 경우에만 처리기를 제거 할 필요가로드되는 , 콜백을 트리거하는 확장 기능이 올바른 것으로 보입니다. 이것이 콘솔에있는 것입니다. 이벤트 : extensionLoaded Ev : Autodesk.Viewing.WebVR. 또한 이벤트가 viewer.initialize()와 loadDocument 전에 연결되도록 코드를 변경했지만 문제가 해결되지 않습니다. 이유가 될만한 것이 있습니까? 아니면 내 코드에서 잘못된 점이 있습니까? –