diff --git a/Frontend/forgeTest.html b/Frontend/forgeTest.html index 5f78e4d..fd91475 100644 --- a/Frontend/forgeTest.html +++ b/Frontend/forgeTest.html @@ -13,6 +13,16 @@ +
+

Robot Controls

+

Selected_ID:

+

All_ID:

+ + + + +
+
@@ -44,8 +54,26 @@ diff --git a/Frontend/js/forge/forgemodel.js b/Frontend/js/forge/forgemodel.js index 5f538e8..b104a06 100644 --- a/Frontend/js/forge/forgemodel.js +++ b/Frontend/js/forge/forgemodel.js @@ -42,6 +42,9 @@ var sensorStyleDefinitions = { // Initialize sensor values let sensorVals = []; +let fragProxy; +var targetFloorZ; +var elevatorSpeed; for (let i = 0; i < devices.length; i++) { sensorVals[i] = Math.random(); } @@ -87,12 +90,168 @@ function launchViewer(urn) { }); } +function getAllLeafComponents(viewer, callback) { + var cbCount = 0; + var tree; + var jsData = [] + + function getLeafComponentsRec(current, parent) { + cbCount++; + if (tree.getChildCount(current) != 0) { + tree.enumNodeChildren(current, function (children) { + getLeafComponentsRec(children, current); + }, false); + } + var nodeName = viewer.model.getInstanceTree().getNodeName(current) + jsData.push({ id: current, parent: parent, text: nodeName }) + + if (--cbCount == 0) callback(jsData); + } + viewer.getObjectTree(function (objectTree) { + tree = objectTree; + var rootId = tree.getRootId() + var nodeName = viewer.model.getInstanceTree().getNodeName(rootId) + jsData.push({ id: rootId, parent: '#', text: nodeName }) + var allLeafComponents = getLeafComponentsRec(rootId, '#'); + + }); +} + function onDocumentLoadSuccess(doc) { var viewables = doc.getRoot().getDefaultGeometry(); viewer.loadDocumentNode(doc, viewables).then(i => { // documented loaded, any action? }); + viewer.addEventListener(Autodesk.Viewing.AGGREGATE_SELECTION_CHANGED_EVENT, (args) => { + var currSelection = viewer.getSelection(); + var domElem = document.getElementById('id_printer'); + domElem.innerText = currSelection[0]; + }); + viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, function () { + var instanceTree = viewer.model.getData().instanceTree; + var allDbIdsStr = Object.keys(instanceTree.nodeAccess.dbIdToIndex); + var domElem = document.getElementById('all_id'); + domElem.innerText = allDbIdsStr; + //allDbIdsStr.map(function (id) { return parseInt(id) }); + //getAllLeafComponents(viewer, function (jsonData) { + // console.log("data: " + jsonData); + //}); + //var a = getAllDbIds(viewer); + //console.log("a: " + a);//10952 + + let tree = viewer.model.getData().instanceTree; + let nodeId = 10952; + + tree.enumNodeFragments(nodeId, function (frag) { + fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag); + fragProxy.getAnimTransform(); + //fragProxy.quaternion = new THREE.Quaternion().setFromAxisAngle( + // new THREE.Vector3(0, 0.3, 0), + // -Math.PI / 2); + //fragProxy.quaternion = new THREE.Quaternion().setFromAxisAngle(new THREE.Vector3(0, 1, 0)); + //fragProxy.quaternion = new THREE.Quaternion().setPosition(new THREE.Vector3(10, 5, 0), 5); + //fragProxy.updateAnimTransform(); + //do some work with fragment proxy + + + //var fragPosition = new THREE.Vector3( + // 10 - fragProxy.offset.x, + // 10 - fragProxy.offset.y, + // 10 - fragProxy.offset.z) + + + let fragPosition = new THREE.Vector3(0, 0, 0);// 一樓0 二樓15 三樓 26 + + fragProxy.position = fragPosition + + fragProxy.updateAnimTransform() + + }); + viewer.impl.sceneUpdated(true); + + }); + + +} + +function setElevatorFloor(floor) { + if (floor == 0) + targetFloorZ = 0; + else if (floor == 1) + targetFloorZ = 15; + else if (floor == 2) + targetFloorZ = 26; +} + +function setElevatorSpeed(speed) { //0.01 ~ 1 + elevatorSpeed = speed; +} + +function movElevator() { + + + let tree = viewer.model.getData().instanceTree; + let nodeId = 10952; + let fragProxyZ = 0; + var movStatus = 0; // 0=no 1=up 2=down + + + if (fragProxy.position.z > targetFloorZ) { + movStatus = 2 + } + else if (fragProxy.position.z < targetFloorZ) { + movStatus = 1 + } + + if (movStatus == 0) { + return; + } + + tree.enumNodeFragments(nodeId, function (frag) { + fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag); + fragProxy.getAnimTransform(); + //let fragPosition = new THREE.Vector3(0, 0, 15);// 一樓0 二樓15 三樓 26 + if (movStatus == 2) { + fragProxy.position.z -= elevatorSpeed; + } + else if (movStatus == 1) { + fragProxy.position.z += elevatorSpeed; + } + + fragProxyZ = fragProxy.position.z; + fragProxy.updateAnimTransform() + + }); + viewer.impl.sceneUpdated(true); + + if (movStatus == 2) { + if (fragProxyZ >= targetFloorZ) { + requestAnimationFrame(movElevator); + } + } + else if (movStatus == 1) { + if (fragProxyZ <= targetFloorZ) { + requestAnimationFrame(movElevator); + } + } + + + //let fragPosition = new THREE.Vector3(position);// 一樓0 二樓15 三樓 26 + + //fragProxy.position = fragPosition; + + //fragProxy.updateAnimTransform(); + + //viewer.impl.sceneUpdated(true); +} + +function getAllDbIds(viewer) { + var instanceTree = viewer.model.getData().instanceTree; + + var allDbIdsStr = Object.keys(instanceTree.nodeAccess.dbIdToIndex); + + return allDbIdsStr.map(function (id) { return parseInt(id) }); } /**