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) });
}
/**