From 46f9ca1642adb734f80fcf81a898a07acb47482c Mon Sep 17 00:00:00 2001 From: wanli Date: Mon, 9 Jan 2023 16:32:28 +0800 Subject: [PATCH 1/3] =?UTF-8?q?[Frontend]=20=E5=87=BD=E5=BC=8F=E8=BC=B8?= =?UTF-8?q?=E5=85=A5=E6=9B=B4=E6=94=B9=E7=82=BAdevice=5Fguid:=20=E7=87=88?= =?UTF-8?q?=E5=85=89=E9=97=9C=E7=87=88=E3=80=81=E7=87=88=E5=85=89=E6=94=B9?= =?UTF-8?q?=E8=AE=8A=E9=A1=8F=E8=89=B2=E5=92=8C=E5=BC=B7=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Frontend/_sysMonAll.html | 39 +++++++++++++ Frontend/js/forge/forgemodel.js | 99 +++++++++++++-------------------- 2 files changed, 79 insertions(+), 59 deletions(-) diff --git a/Frontend/_sysMonAll.html b/Frontend/_sysMonAll.html index 72defa2..2dd6031 100644 --- a/Frontend/_sysMonAll.html +++ b/Frontend/_sysMonAll.html @@ -48,6 +48,7 @@ setLightColor(); } if (arr.indexOf(3) != -1) { + getLightPoint(); getHotspotPoint(() => { show3DModel(data.urn_3D); }); @@ -447,11 +448,49 @@ } + async function getLightPoint(callback = null) { + let url = baseApiUrl + "/api/GetDevNodeForCor"; + let sendData = { + "device_area_tag": pageAct.AreaTag, + "device_building_tag": pageAct.buiTag, + "device_system_tag": pageAct.sysMainTag, + "device_name_tag": pageAct.sysSubTag, + }; + objSendData.Data = sendData; + ytAjax = new YourTeam.Ajax(url, objSendData, function (res) { + if (!res || res.code != "0000" || !res.data) { + + } else { + + let myDataList = []; + $.each(res.data, (idx, data) => { + let item = {}; + item.position = {}; + if (data.device_node_coordinate_3d != null && isJSON(data.device_node_coordinate_3d)) { + item.position = JSON.parse(data.device_node_coordinate_3d); + } + $.extend(item, data); + myDataList.push(item); + }) + + console.log("2", myDataList) + setLightPoint(myDataList); + callback ? callback() : ""; + } + }, null, "POST").send(); + + } + function setHotspotPoint(myDataList = []) { console.log(myDataList) getHopspotPoint(myDataList); } + async function setLightPoint(myDataList = []) { + console.log(myDataList) + getLightData(myDataList); + } + var parentEle = ""; onEvent("autodesk:click:sprite", "[name=forgeViewer]", function (e, obj) { forgeUnFocusAll(); diff --git a/Frontend/js/forge/forgemodel.js b/Frontend/js/forge/forgemodel.js index a021bc5..cffbc8d 100644 --- a/Frontend/js/forge/forgemodel.js +++ b/Frontend/js/forge/forgemodel.js @@ -330,15 +330,6 @@ class elevator3D { } function onDocumentLoadSuccess(doc, eleOption) { - //取得燈光清單 - if (lightDataList != undefined && lightDataList != null && lightDataList.length > 0) { - lightDataList.forEach((myData, index) => { - //if (myData.priority == 5) { - const position = JSON.parse(myData.device_node_coordinate_3d); - lightList.push({ dbid: myData.forge_dbid, spotLight: newLight(position) }); - //} - }); - } var viewables = doc.getRoot().getDefaultGeometry(); viewer.loadDocumentNode(doc, viewables).then(i => { @@ -727,15 +718,26 @@ function hideColor(nodeId) {//顏色改成透明 } -//------------------ 紀錄熱點座標 --------------- -function getHopspotPoint(data) { - //var av = Autodesk.Viewing; - myDataList = data; - //viewer.addEventListener(av.GEOMETRY_LOADED_EVENT, addHotPoint, { - // once: true, - //}); +//紀錄燈具座標 +async function getLightData(data) { + lightDataList = data; +} + +async function testNewLight(dataList) { + dataList.forEach((myData, index) => { + const position = JSON.parse(myData.device_node_coordinate_3d); + lightList.push({ dbid: myData.forge_dbid, device_guid: myData.device_guid, lightObject: new THREE.SpotLight(0xff0000, 200, 20, 0.6, 0.5, 10) }); + + lightList[index].lightObject.position.set(position.x, position.y, position.z); + lightList[index].lightObject.castShadow = true; + lightList[index].lightObject.visible = true; + lightList[index].lightObject.target.position.set(position.x, position.y, position.z - 20); + viewer.scene.add(lightList[index].lightObject.target); + viewer.scene.add(lightList[index].lightObject); + viewer.impl.sceneUpdated(true); + + }); } -//-------------------- end ---------------------- //------------------- 加入熱點 ----------------- async function addHotPoint(data) { @@ -753,13 +755,10 @@ async function addHotPoint(data) { const style = new DataVizCore.ViewableStyle(viewableType, spriteColor, spriteIcon); - //取得燈光清單 - //if (lightDataList != undefined && lightDataList != null && lightDataList.length > 0) { - // lightDataList.forEach((myData, index) => { - // const position = JSON.parse(myData.device_node_coordinate_3d); - // lightList.push({ dbid: myData.forge_dbid, spotLight: newLight(position) }); - // }); - //} + if (lightDataList != undefined && lightDataList != null && lightDataList.length > 0) { + testNewLight(lightDataList); + } + //熱點 點擊事件註冊 viewer.addEventListener(DataVizCore.MOUSE_CLICK, onSpriteClicked);// SPRITE_SELECTED @@ -790,12 +789,16 @@ async function addHotPoint(data) { if (event != undefined && event != null) { if (event.dbId >= dbIdStart) {//event.dbId > 0 && event.dbId < 19 console.log(`Sprite clicked: ${event.dbId}`); - openHotspotModal(); + for (let i = dbIdStart; i <= myDataList.length + 10; i++) { changeColorForHotspot(i); changeScaleForHotspot(i, false); } let myData = myDataList.filter(x => x._dbId == event.dbId)[0]; + if (lightList != undefined && lightList != null && lightList.length > 0) { + //setLightOpenOrClose(false, myData.device_guid);//關燈測試 + //setLightValues(myData.device_guid, 20, 0x00ff00);//更改燈光顏色和強度的測試 + } $(selector).trigger("autodesk:click:sprite", { event, myData }); } else { $(selector).trigger("autodesk:clickOut:sprite", { event }); @@ -817,7 +820,6 @@ async function addHotPoint(data) { // if (dbIds.length > 0) { // // 處理已選取元件的邏輯 // $(selector).trigger("autodesk:click:sprite", event); - // //openHotspotModal(); // console.log(`------ name: ${viewer.model.getInstanceTree().getNodeName(dbIds)} , dbId: ${dbIds}`);//, id: ${event.clickInfo.object.id}, position.x: ${event.clickInfo.point.x}, y: ${event.clickInfo.point.y}, z: ${event.clickInfo.point.z} // } else { // // 處理沒有選取元件的邏輯 @@ -864,22 +866,7 @@ async function changeScaleForHotspot(dbId, type = true) { //------------------- end -------------- -//----------------- 開關熱點小視窗 ---------------------- -function openHotspotModal() { - //var modal = document.getElementById("hotspotModal"); - //modal.style.display = "block"; - //$("#pills-register-tab").removeClass("active"); - //$("#pills-alarm-tab").removeClass("active"); - //$("#pills-operation-tab").removeClass("active"); - //$("#pills-login-tab").tab("show"); -} -function closeHotspotModal() { - //var modal = document.getElementById("hotspotModal"); - //modal.style.display = "none"; - -} -//------------------ end -------------------------------- //------------------ 熱圖 ------------------------------- async function loadHeatmaps(model) { @@ -1118,25 +1105,24 @@ async function newLight(lightPosition) { } //調整燈光 強度、顏色 -async function setLightValues(dbid, intensity, color) { - for (var i = 0; i < lightList.length; i++) { - if (lightList[i].dbid == dbid) { - lightList[i].spotLight.intensity = intensity; - +async function setLightValues(deviceGuid, intensity, color) { + for (var i = 0; i < lightList.length; i++) { + if (lightList[i].device_guid == deviceGuid) { + lightList[i].lightObject.intensity = intensity; + var tempcolor = new THREE.Color().setHex(color); - lightList[i].spotLight.color = tempcolor; - viewer.impl.sceneUpdated(true); + lightList[i].lightObject.color = tempcolor; } } + viewer.impl.sceneUpdated(true); } //燈光開關 -function setLightOpenOrClose(value, light) { - if (value) { - light.visible = true; - } - else { - light.visible = false; +async function setLightOpenOrClose(value, deviceGuid) { + for (var i = 0; i < lightList.length; i++) { + if (lightList[i].device_guid == deviceGuid) { + lightList[i].lightObject.visible = value; + } } viewer.impl.sceneUpdated(true); } @@ -1173,11 +1159,6 @@ function getHopspotPoint(data) { myDataList = data; } -//紀錄燈具座標 -async function getLightData(data) { - lightDataList = data; -} - //呼叫載入熱圖 async function toLoadHeatmap(roomArr) { const model = viewer.model; From fac789c6351dbb41cfb20fe59f38ab2f90c228e8 Mon Sep 17 00:00:00 2001 From: wanli Date: Mon, 9 Jan 2023 17:09:44 +0800 Subject: [PATCH 2/3] =?UTF-8?q?[Frontend]=20=E5=A2=9E=E5=8A=A0=E5=87=BD?= =?UTF-8?q?=E5=BC=8F=20=E7=A7=BB=E5=8B=95=E8=A6=96=E8=A7=92=E8=87=B3?= =?UTF-8?q?=E8=A8=AD=E5=82=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Frontend/js/forge/forgemodel.js | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/Frontend/js/forge/forgemodel.js b/Frontend/js/forge/forgemodel.js index cffbc8d..131ea89 100644 --- a/Frontend/js/forge/forgemodel.js +++ b/Frontend/js/forge/forgemodel.js @@ -726,7 +726,7 @@ async function getLightData(data) { async function testNewLight(dataList) { dataList.forEach((myData, index) => { const position = JSON.parse(myData.device_node_coordinate_3d); - lightList.push({ dbid: myData.forge_dbid, device_guid: myData.device_guid, lightObject: new THREE.SpotLight(0xff0000, 200, 20, 0.6, 0.5, 10) }); + lightList.push({ dbid: myData.forge_dbid, device_guid: myData.device_guid, lightObject: new THREE.SpotLight(0xffffff, 200, 20, 0.6, 0.5, 10) }); lightList[index].lightObject.position.set(position.x, position.y, position.z); lightList[index].lightObject.castShadow = true; @@ -798,6 +798,7 @@ async function addHotPoint(data) { if (lightList != undefined && lightList != null && lightList.length > 0) { //setLightOpenOrClose(false, myData.device_guid);//關燈測試 //setLightValues(myData.device_guid, 20, 0x00ff00);//更改燈光顏色和強度的測試 + moveViewToDevice(myData.forge_dbid);//移動視角至該設備 } $(selector).trigger("autodesk:click:sprite", { event, myData }); } else { @@ -1170,4 +1171,15 @@ function setShadowShow(type = false) { viewer.impl.sceneUpdated(true); } -//============================= end =================================== \ No newline at end of file +//============================= end =================================== + +function moveViewToDevice(letter) { + if (letter != "") { + viewer.clearSelection(); + viewer.select(letter); + viewer.fitToView([letter]); + } + else { + viewer.clearSelection(); + } +} \ No newline at end of file From aab47a13d4c307f8a933e71c550117ceb26b2c35 Mon Sep 17 00:00:00 2001 From: wanli Date: Mon, 9 Jan 2023 17:26:15 +0800 Subject: [PATCH 3/3] =?UTF-8?q?[Frontend]=20=E6=B8=AC=E8=A9=A6=E8=A8=AD?= =?UTF-8?q?=E5=82=99=E6=B8=85=E5=96=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Frontend/forgetTest2.html | 14 +- Frontend/js/forge/modeltest.js | 494 ++++++++++++++++----------------- 2 files changed, 258 insertions(+), 250 deletions(-) diff --git a/Frontend/forgetTest2.html b/Frontend/forgetTest2.html index 7eda69e..a937a3c 100644 --- a/Frontend/forgetTest2.html +++ b/Frontend/forgetTest2.html @@ -51,6 +51,7 @@ + @@ -244,7 +245,7 @@ //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6LW1pdHN1YmlzaGkvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDJUU5JTlCJTk5JUU5JUExJUFGXzEyMjgubndk'); //12.30 整棟樓 ARC + MEP - launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8xMl8zMC5ud2Q'); + //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8xMl8zMC5ud2Q'); //12.30 整棟樓 ARC + MEP 半透明 //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8lRTUlOEQlOEElRTklODAlOEYlRTYlOTglOEUlRTUlQkIlQkElRTclQUYlODlfMTJfMzAubndk'); @@ -254,8 +255,11 @@ //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwTUVQJUUzJTgwJTkxXzIwMjJfMTJfMTMubndj');//new MEP //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwQVJDJUUzJTgwJTkxJUU1JTg1JUE4JUU2JUEzJTlGXzIwMjJfMTJfMTMubndj');//全棟 ARC - + //01.06 加上room_id(樓層有燈具) + //launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDJUU5JTlCJTk5JUU2JUE4JUExJUU1JUJDJThGK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8yMDIzXzAxXzA2Lm53ZA'); + //01.06 樓層刪除燈具 + launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6LW1vZGVsX3Rlc3QxMTIxLyVFMyU4MCU5MCVFNSU4RiVCMCVFNSU4QyU5NyVFNCVCOCVBRCVFOCU4RiVCMSVFNSVBNCVBNyVFNiVBOCU5MyVFMyU4MCU5MUFSQyVFOSU5QiU5OSVFNiVBOCVBMSVFNSVCQyU4RitNRVAlRTYlOEIlODYlRTclQjMlQkIlRTclQjUlQjFfJUU1JTg4JUFBJUU3JTg3JTg4JUU1JTg1JUI3XzIwMjNfMDFfMDYubndk'); }); //function move1Floor() { @@ -412,6 +416,10 @@ createHeatmapRect(labels, colorStops); } + function showList() { + consoleList(); + } + function createHeatmapRect(labels, colorStops) { if (!this.canvas) { return; @@ -438,7 +446,7 @@ context.fillRect(10, 20, 280, 20); } - + diff --git a/Frontend/js/forge/modeltest.js b/Frontend/js/forge/modeltest.js index 765fd66..44ae412 100644 --- a/Frontend/js/forge/modeltest.js +++ b/Frontend/js/forge/modeltest.js @@ -5,6 +5,7 @@ var elevatorSpeed; var allDbIdsStr; let bulbLight;//點燈 var spotLight;//聚光燈 +let testLight; var myDataList;//設備清單 var viewableData; var dataVizExtn; @@ -12,7 +13,9 @@ var spriteColorRed; var levels;//剖面用 var light; let pointLightHelper; - +var tagIdDevList = [];//模型設備List: device_number、device_coordinate_3d、forge_dbid +var roomDataList = [];//模型房間List: room_id、room_name + function launchViewer(urn) { var av = Autodesk.Viewing; var options = { @@ -139,12 +142,10 @@ function onDocumentLoadSuccess(doc) { viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, function () { - var instanceTree = viewer.model.getData().instanceTree; - - var domElem = document.getElementById('all_id'); - allDbIdsStr = Object.keys(instanceTree.nodeAccess.dbIdToIndex); - domElem.innerText = allDbIdsStr; - + var instanceTree = viewer.model.getData().instanceTree; + var domElem = document.getElementById('all_id'); + allDbIdsStr = Object.keys(instanceTree.nodeAccess.dbIdToIndex); + domElem.innerText = allDbIdsStr; //parseInt(allDbIdsStr[i] //for (var i = 0; i < allDbIdsStr.length; i++) { // //setTransparency(parseInt(allDbIdsStr[i]), 0.2); @@ -161,105 +162,152 @@ function onDocumentLoadSuccess(doc) { // }) //} - // ------------------ 取得tag_id底下的nodeId -------------------------------------- - var curDbId = 0; - var tagId = 0; - var _parentId = 0; - var _childId = 0; - var itemName = ''; - var childIdArr = new Array(); - let evelMap = new Map(); + //// ------------------ 取得tag_id底下的nodeId -------------------------------------- + //var curDbId = 0; + ////var tagId = 0; + ////var _parentId = 0; + ////var _childId = 0; + ////var itemName = ''; + ////var childIdArr = new Array(); + ////let evelMap = new Map(); - let tree = viewer.model.getData().instanceTree; - const model = viewer.model; - const fragList = model.getFragmentList(); + //let tree = viewer.model.getData().instanceTree; + //const model = viewer.model; + //const fragList = model.getFragmentList(); - //loadHeatmaps(model); + // //loadHeatmaps(model); + ////allDbIdsStr.forEach((dbId) => { + //// curDbId = parseInt(dbId); + //// viewer.getProperties(curDbId, function (e) { + //// e.properties.forEach(function (item) { + //// if (item.displayName == "tag_id" && e.name == "【電梯】") { + + //// //getFragmentWorldMatrixByNodeId(e.dbId, viewer); + //// //let fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag); + + //// tree.enumNodeFragments(e.dbId, function (frag) { + + //// let fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag); + //// let matrix = new THREE.Matrix4(); + //// console.log("proxy: " + fragProxy.position); + + //// fragProxy.getWorldMatrix(matrix); + + //// }); + + + + //// tagId = e.dbId; + //// viewer.getProperties(tagId, function (e2) { + //// e2.properties.forEach(function (item2) { + //// if (item2.displayName == "child") { + //// _parentId = item2.displayValue; + + //// viewer.getProperties(_parentId, function (e3) { + //// let itemMap = new Map(); + //// e3.properties.forEach(function (item3) { + //// if (item3.displayName == "child") { + //// _childId = item3.displayValue; + //// childIdArr.push(_childId); + + //// var n = 0; + //// viewer.getProperties(childIdArr[n], function (e5) { + //// e5.properties.forEach(function (item5) { + //// if (item5.displayName == "Name") { + //// itemName = item5.displayValue; + //// itemMap.set(childIdArr[0], itemName) + //// console.log("childIdArr[0] ", childIdArr[0]) + //// console.log("item name: ", itemName); + //// n += 3; + //// } + //// }); + //// }) + + //// n = 1; + //// viewer.getProperties(childIdArr[n], function (e6) { + //// e6.properties.forEach(function (item6) { + //// if (item6.displayName == "Name") { + //// itemName = item6.displayValue; + //// itemMap.set(childIdArr[1], itemName) + //// console.log("childIdArr[1] ", childIdArr[1]) + //// console.log("item name: ", itemName); + //// n += 3; + //// } + //// }); + //// }) + + //// n = 2; + //// viewer.getProperties(childIdArr[n], function (e7) { + //// e7.properties.forEach(function (item7) { + //// if (item7.displayName == "Name") { + //// itemName = item7.displayValue; + //// itemMap.set(childIdArr[2], itemName) + //// console.log("childIdArr[2] ", childIdArr[2]) + //// console.log("item name: ", itemName); + //// n += 3; + //// } + //// }); + //// }) + + //// } + //// }); + //// evelMap.set(item.displayValue, itemMap) + //// }) + + //// } + //// }); + //// }) + //// } + //// }); + + //// }) + + ////}) + //allDbIdsStr.forEach((dbId) => { // curDbId = parseInt(dbId); // viewer.getProperties(curDbId, function (e) { // e.properties.forEach(function (item) { - // if (item.displayName == "tag_id" && e.name == "【電梯】") { + // if (item.displayName == "【tag_id】") { // Tag_name tag_id 【tag_id】 + // if (item.displayValue != "") { + // if ((item.displayValue).indexOf('TPE_B1_LT_L1') > -1) {// TPE_B1_ME_M10 + // console.log("--------------------------------------------------"); + // console.log("Tag_name dbid: " + e.dbId); + // console.log("value: " + item.displayValue); + // } + // //var v = getFragmentWorldMatrixByNodeId(e.dbId, viewer); + // //console.log("v: " + v); + + // //tree.enumNodeFragments(e.dbId, function (frag) { + // // fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag); + // // fragProxy.getAnimTransform(); + // // console.log("postion: " + fragProxy.position + ", fragP: " + fragProxy.fragPosition); + // //}); + + + + // let bounds = new THREE.Box3(); + + // instanceTree.enumNodeFragments(e.dbId, (fragId) => { + // let box = new THREE.Box3(); + // fragList.getWorldBounds(fragId, box); + // bounds.union(box); + // }, true); + // var position = bounds.center(); + // if ((item.displayValue).indexOf('TPE_B1_LT_L1') > -1) { + // console.log("position: (" + (position.x).toFixed(2) + ", " + (position.y).toFixed(2) + ", " + (position.z).toFixed(2) + ")"); + // console.log("--------------------------------------------------"); + // } + // } // //getFragmentWorldMatrixByNodeId(e.dbId, viewer); // //let fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag); - // tree.enumNodeFragments(e.dbId, function (frag) { - // let fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag); - // let matrix = new THREE.Matrix4(); - // console.log("proxy: " + fragProxy.position); - - // fragProxy.getWorldMatrix(matrix); - - // }); - - - - // tagId = e.dbId; - // viewer.getProperties(tagId, function (e2) { - // e2.properties.forEach(function (item2) { - // if (item2.displayName == "child") { - // _parentId = item2.displayValue; - - // viewer.getProperties(_parentId, function (e3) { - // let itemMap = new Map(); - // e3.properties.forEach(function (item3) { - // if (item3.displayName == "child") { - // _childId = item3.displayValue; - // childIdArr.push(_childId); - - // var n = 0; - // viewer.getProperties(childIdArr[n], function (e5) { - // e5.properties.forEach(function (item5) { - // if (item5.displayName == "Name") { - // itemName = item5.displayValue; - // itemMap.set(childIdArr[0], itemName) - // console.log("childIdArr[0] ", childIdArr[0]) - // console.log("item name: ", itemName); - // n += 3; - // } - // }); - // }) - - // n = 1; - // viewer.getProperties(childIdArr[n], function (e6) { - // e6.properties.forEach(function (item6) { - // if (item6.displayName == "Name") { - // itemName = item6.displayValue; - // itemMap.set(childIdArr[1], itemName) - // console.log("childIdArr[1] ", childIdArr[1]) - // console.log("item name: ", itemName); - // n += 3; - // } - // }); - // }) - - // n = 2; - // viewer.getProperties(childIdArr[n], function (e7) { - // e7.properties.forEach(function (item7) { - // if (item7.displayName == "Name") { - // itemName = item7.displayValue; - // itemMap.set(childIdArr[2], itemName) - // console.log("childIdArr[2] ", childIdArr[2]) - // console.log("item name: ", itemName); - // n += 3; - // } - // }); - // }) - - // } - // }); - // evelMap.set(item.displayValue, itemMap) - // }) - - // } - // }); - // }) // } // }); @@ -267,54 +315,64 @@ function onDocumentLoadSuccess(doc) { //}) - allDbIdsStr.forEach((dbId) => { - curDbId = parseInt(dbId); - viewer.getProperties(curDbId, function (e) { - e.properties.forEach(function (item) { - if (item.displayName == "【tag_id】") { // Tag_name tag_id 【tag_id】 - if (item.displayValue != "") { - if ((item.displayValue).indexOf('TPE_B1_LT_L1') > -1) {// TPE_B1_ME_M10 - console.log("--------------------------------------------------"); - console.log("Tag_name dbid: " + e.dbId); - console.log("value: " + item.displayValue); + ////---------------------- end --------------------------------------------------- + + // ------------------ 2023.01.06 取得tag_id、底下的nodeId -------------------------------------- + var curDbId = 0; + + let tree = viewer.model.getData().instanceTree; + const model = viewer.model; + const fragList = model.getFragmentList(); + + + allDbIdsStr.forEach((dbId) => { + curDbId = parseInt(dbId); + viewer.getProperties(curDbId, function (e) { + e.properties.forEach(function (item) { + if (item.displayName == "【tag_id】") { // Tag_name tag_id 【tag_id】 + if (item.displayValue != "") { + ////if ((item.displayValue).indexOf('TPE_B1_LT_L1') > -1) {// TPE_B1_ME_M10 + //console.log("--------------------------------------------------"); + //console.log("Tag_name dbid: " + e.dbId); + //console.log("value: " + item.displayValue); + ////} + var str = item.displayValue.split('_'); + if (str.length == 2) { //兩段為房間 ex: U7F_01 + roomDataList.push({ room_id: e.dbId, room_name: item.displayValue }); + } + else if (str.length == 8) { //八段為設備 ex: TPE_B1_ME_M10_U7F_NA_FCU_N1 + //取得座標 + let bounds = new THREE.Box3(); + instanceTree.enumNodeFragments(e.dbId, (fragId) => { + let box = new THREE.Box3(); + fragList.getWorldBounds(fragId, box); + bounds.union(box); + }, true); + var position = bounds.center(); + ////if ((item.displayValue).indexOf('TPE_B1_LT_L1') > -1) { + //console.log("position: (" + (position.x).toFixed(2) + ", " + (position.y).toFixed(2) + ", " + (position.z).toFixed(2) + ")"); + //console.log("--------------------------------------------------"); + ////} + tagIdDevList.push({ device_number: item.displayValue, device_coordinate_3d: '{ "x": ' + (position.x).toFixed(2) + ', "y": ' + (position.y).toFixed(2) + ', "z": ' + (position.z).toFixed(2) + ' }', forge_dbid: e.dbId }); + } + + + + + + + + } - //var v = getFragmentWorldMatrixByNodeId(e.dbId, viewer); - //console.log("v: " + v); - //tree.enumNodeFragments(e.dbId, function (frag) { - // fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag); - // fragProxy.getAnimTransform(); - // console.log("postion: " + fragProxy.position + ", fragP: " + fragProxy.fragPosition); - //}); - - - - let bounds = new THREE.Box3(); - - instanceTree.enumNodeFragments(e.dbId, (fragId) => { - let box = new THREE.Box3(); - fragList.getWorldBounds(fragId, box); - bounds.union(box); - }, true); - var position = bounds.center(); - if ((item.displayValue).indexOf('TPE_B1_LT_L1') > -1) { - console.log("position: (" + (position.x).toFixed(2) + ", " + (position.y).toFixed(2) + ", " + (position.z).toFixed(2) + ")"); - console.log("--------------------------------------------------"); - } } - //getFragmentWorldMatrixByNodeId(e.dbId, viewer); - //let fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag); + }); - - } - }); + }) }) - - }) - - //---------------------- end --------------------------------------------------- + //---------------------- end --------------------------------------------------- @@ -359,116 +417,51 @@ function onDocumentLoadSuccess(doc) { // }) //}) - - //let tree = viewer.model.getData().instanceTree; - let nodeId = 12112;//12104; //749; //10952; - let nodeId2 = 12111;//12105; //750; - let nodeId3 = 12110;//12104; //751; - tree.enumNodeFragments(nodeId, function (frag) { - fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag); - fragProxy.getAnimTransform(); - let fragPosition = new THREE.Vector3(0, 0, 0);// 一樓0 二樓15 三樓 26 - fragProxy.position = fragPosition + // //let tree = viewer.model.getData().instanceTree; + //let nodeId = 12112;//12104; //749; //10952; + //let nodeId2 = 12111;//12105; //750; + //let nodeId3 = 12110;//12104; //751; - fragProxy.updateAnimTransform() + //tree.enumNodeFragments(nodeId, function (frag) { + // fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag); + // fragProxy.getAnimTransform(); + // let fragPosition = new THREE.Vector3(0, 0, 0);// 一樓0 二樓15 三樓 26 + // fragProxy.position = fragPosition + // fragProxy.updateAnimTransform() + //}); + //viewer.impl.sceneUpdated(true); - }); - viewer.impl.sceneUpdated(true); + ////------------ add ------------- + //tree.enumNodeFragments(nodeId2, function (frag) { + // fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag); + // fragProxy.getAnimTransform(); + // let fragPosition = new THREE.Vector3(0, 0, 0);// 一樓0 二樓15 三樓 26 - //------------ add ------------- - tree.enumNodeFragments(nodeId2, function (frag) { - fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag); - fragProxy.getAnimTransform(); - let fragPosition = new THREE.Vector3(0, 0, 0);// 一樓0 二樓15 三樓 26 + // fragProxy.position = fragPosition - fragProxy.position = fragPosition + // fragProxy.updateAnimTransform() - fragProxy.updateAnimTransform() + //}); + //viewer.impl.sceneUpdated(true); - }); - viewer.impl.sceneUpdated(true); + //tree.enumNodeFragments(nodeId3, function (frag) { + // fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag); + // fragProxy.getAnimTransform(); + // let fragPosition = new THREE.Vector3(0, 0, 0);// 一樓0 二樓15 三樓 26 - tree.enumNodeFragments(nodeId3, function (frag) { - fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag); - fragProxy.getAnimTransform(); - let fragPosition = new THREE.Vector3(0, 0, 0);// 一樓0 二樓15 三樓 26 + // fragProxy.position = fragPosition - fragProxy.position = fragPosition + // fragProxy.updateAnimTransform() - fragProxy.updateAnimTransform() - - }); - viewer.impl.sceneUpdated(true); + //}); + //viewer.impl.sceneUpdated(true); }); - - //add toolbar fail - //function ToolbarExtension(viewer, options) { - // Autodesk.Viewing.Extension.call(this, viewer, options); - //} - - //ToolbarExtension.prototype = Object.create(Autodesk.Viewing.Extension.prototype); - //ToolbarExtension.prototype.constructor = ToolbarExtension; - - //ToolbarExtension.prototype.load = function () { - // this.viewer.setLightPreset(6); - // this.viewer.setEnvMapBackground(true); - // this.viewer.fitToView(); - // return true; - //}; - - //ToolbarExtension.prototype.unload = function () { - - //}; - //Autodesk.Viewing.theExtensionManager.registerExtension('ToolbarExtension', ToolbarExtension); - - //ToolbarExtension.prototype.onToolbarCreated = function (toolbar) { - // //alert('TODO: customize Viewer toolbar'); - - // var viewer = this.viewer; - // var button1 = new Autodesk.Viewing.UI.Button('show-env-bg-button'); - // button1.onClick = function (e) { - // viewer.setEnvMapBackground(true); - // }; - // button1.addClass('show-env-bg-button'); - // button1.setToolTip('Show Environment'); - - // //SubToolbar - // this.subToolbar = new Autodesk.Viewing.UI.ControlGroup('my-custom-toolbar'); - // this.subToolbar.addControl(button1); - // toolbar.addControl(this.subToolbar); - - //}; - - - //加入點燈光 - //bulbLight = new THREE.PointLight(0xffffff, 1, 1, 2);//0xff0000 - //bulbLight.position.set(-17.33, 51.03, -2.52);//17.880840301513672 - //bulbLight.castShadow = true; - //bulbLight.intensity = 50; - //bulbLight.distance = 1; - //bulbLight.emissiveIntensity = bulbLight.intensity / Math.pow(0.02, 2.0); - //viewer.scene.add(bulbLight); - - //聚光燈 - //spotLight = new THREE.SpotLight(0xffff00, 80, 10);//0xffffff - //spotLight.position.set(-7.58, 18.20, -0.25); //set(-17.33, 51.03, -2.52); - //spotLight.castShadow = true; - //spotLight.visible = true; - //var geom = new THREE.BoxGeometry(); //create 幾何對象 -17.33, 51.03, -4.52 - //var material = new THREE.MeshLambertMaterial({ color: 0xffff00 });//0xff0000 - //var cube = new THREE.Mesh(geom, material); - //cube.position.set(-7.58, 18.20, -1); //set(-17.33, 51.03, -10);//-4.52 - //viewer.scene.add(cube); - //spotLight.target = cube; - //viewer.scene.add(spotLight); - - //light = newLight(); - newLight(); - + //newLight(); + //testLight = new THREE.SpotLight(); } //------------------- 加入熱點 ----------------- @@ -482,7 +475,8 @@ async function addHotPoint(data) { const spriteIcon = "https://d2zqnmauvnpnnm.cloudfront.net/assets-1/images/circle.svg"; //"/img/forge/hotspot.svg"; const style = new DataVizCore.ViewableStyle(viewableType, spriteColor, spriteIcon); - var a = newLight(); + //var a = newLight(); + newLight(); //function onSpriteClicked(event) { // console.log(`Sprite clicked: ${event.dbId}`); //} @@ -521,7 +515,7 @@ async function addHotPoint(data) { event.hasStopped = true; if (event != undefined && event != null) { if (event.dbId >= 10 && event.dbId <= 13) {//event.dbId > 0 && event.dbId < 19 - setLightValues(20, 0x00ff00) + setLightValues(20, 0x00ff00); console.log(`Sprite clicked: ${event.dbId}`); openHotspotModal(); } @@ -1387,26 +1381,26 @@ async function newLight() { //angle - 光從其上界為 Math.PI / 2 的方向散射的最大角度。 //半影 - 由於半影而衰減的聚光燈錐體的百分比。取值介於 0 和 1 之間。默認值為零。 //decay - 光沿光的距離變暗的量。 - //spotLight = new THREE.SpotLight(0xff0000, 200, 20, 0.6, 0.5, 10);//0xffffff 80, 10 //15, 20 , Math.PI / 12 - //spotLight.position.set(43.72, -15.65, -44.96); //set(-17.33, 51.03, -2.52); // -7.58, 18.20, -0.25 -44.96 - //spotLight.castShadow = false; - //spotLight.visible = true; + spotLight = new THREE.SpotLight(0xff0000, 200, 20, 0.6, 0.5, 10);//0xffffff 80, 10 //15, 20 , Math.PI / 12 + spotLight.position.set(43.72, -15.65, -44.96); //set(-17.33, 51.03, -2.52); // -7.58, 18.20, -0.25 -44.96 + spotLight.castShadow = false; + spotLight.visible = true; - //spotLight.target.position.set(43.72, -15.65, -60);// -15.65 -48 - //viewer.scene.add(spotLight.target); + spotLight.target.position.set(43.72, -15.65, -60);// -15.65 -48 + viewer.scene.add(spotLight.target); - //viewer.scene.add(spotLight); + viewer.scene.add(spotLight); - //viewer.impl.sceneUpdated(true); + viewer.impl.sceneUpdated(true); //return spotLight; //加入點燈光 - bulbLight = new THREE.PointLight(0xff0000, 50, 20, 2);//0xff0000 - bulbLight.position.set(43.72, -15.65, -44.96);//17.880840301513672 - bulbLight.castShadow = true; - bulbLight.visible = true; - viewer.scene.add(bulbLight); + //bulbLight = new THREE.PointLight(0xffffff, 50, 20, 2);//0xff0000 + //bulbLight.position.set(43.72, -15.65, -44.96);//17.880840301513672 + //bulbLight.castShadow = true; + //bulbLight.visible = true; + //viewer.scene.add(bulbLight); //pointLightHelper = new THREE.PointLightHelper(pointLight); //viewer.scene.add(pointLightHelper); @@ -1439,13 +1433,15 @@ function setLightValues(intensity, color) {// distance, angle, penumbra, decay, function setLightOpenOrClose(value) {//, light if (value) { //light.visible = true; - //spotLight.visible = true; - bulbLight.visible = true; + spotLight.visible = true; + //bulbLight.visible = true; + //testLight.visible = true; } else { //light.visible = false; - //spotLight.visible = false; - bulbLight.visible = false; + spotLight.visible = false; + //bulbLight.visible = false; + //testLight.visible = false; } viewer.impl.sceneUpdated(true); } @@ -1457,3 +1453,7 @@ function setLightTransparency(value) { } //------------- end ----------------------------------- +function consoleList() { + console.log(tagIdDevList); + console.log(roomDataList); +} \ No newline at end of file