[Frontend][監控系統][電錶系統] 模型中加入熱點
This commit is contained in:
		
							parent
							
								
									6fdeb7096b
								
							
						
					
					
						commit
						00c9d700cb
					
				@ -12,6 +12,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
<script>
 | 
					<script>
 | 
				
			||||||
    var allDevList = [];  //全設備清單
 | 
					    var allDevList = [];  //全設備清單
 | 
				
			||||||
 | 
					    let devicePointList = [];
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    $(function () {
 | 
					    $(function () {
 | 
				
			||||||
        getBuildMenu((arr,data) => {
 | 
					        getBuildMenu((arr,data) => {
 | 
				
			||||||
@ -20,7 +21,10 @@
 | 
				
			|||||||
                setLightColor();
 | 
					                setLightColor();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (arr.indexOf(5) != -1) {
 | 
					            if (arr.indexOf(5) != -1) {
 | 
				
			||||||
 | 
					                setHotspotPoint();
 | 
				
			||||||
                show3DModel(data.urn_3D);
 | 
					                show3DModel(data.urn_3D);
 | 
				
			||||||
 | 
					                console.log("start ---------");
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
@ -228,8 +232,38 @@
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function show3DModel(urn) {
 | 
					    function show3DModel(urn) {
 | 
				
			||||||
        launchViewer(urn, (viewer, nodeIds) => {
 | 
					        launchViewerForHotspot(urn, (viewer, nodeIds) => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        },"[name=forgeViewer]");
 | 
					        },"[name=forgeViewer]");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function getHotspotPoint() {
 | 
				
			||||||
 | 
					        let url = baseApiUrl + "/api/GetDevForCor";
 | 
				
			||||||
 | 
					        let sendData = {
 | 
				
			||||||
 | 
					            "area_tag": pageAct.AreaTag,
 | 
				
			||||||
 | 
					            "building_tag": pageAct.buiTag,
 | 
				
			||||||
 | 
					            "system_tag": pageAct.sysMainTag,
 | 
				
			||||||
 | 
					            "name_tag": pageAct.sysSubTag,
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					        objSendData.Data = sendData;
 | 
				
			||||||
 | 
					        $.post(url, sendData, function (rel) {
 | 
				
			||||||
 | 
					            if (rel.code == "9999") {
 | 
				
			||||||
 | 
					                toast_error(rel.msg);
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            devicePointList.push(rel.data.device_coordinate_3d);
 | 
				
			||||||
 | 
					        }, 'json');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function setHotspotPoint() {
 | 
				
			||||||
 | 
					        //先假設有抓到點位的座標 之後api改input後再接
 | 
				
			||||||
 | 
					        const mydatalist = [{ position: { x: -21.95, y: 8.92, z: 63.27 } },
 | 
				
			||||||
 | 
					                            { position: { x: -21.95, y: 7.61, z: 63.27 } },
 | 
				
			||||||
 | 
					                            { position: { x: -21.95, y: 6.43, z: 63.27 } },
 | 
				
			||||||
 | 
					                            { position: { x: -21.95, y: 5.31, z: 63.27 } }
 | 
				
			||||||
 | 
					                           ];
 | 
				
			||||||
 | 
					        getHopspotPoint(mydatalist);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
@ -1,56 +1,12 @@
 | 
				
			|||||||
var viewer;
 | 
					var viewer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// const devices = [
 | 
					 | 
				
			||||||
//     {
 | 
					 | 
				
			||||||
//         id: "Sensor 1",
 | 
					 | 
				
			||||||
//         position: {
 | 
					 | 
				
			||||||
//             x: -22.779729106182415,
 | 
					 | 
				
			||||||
//             y: 5.431043023608719,
 | 
					 | 
				
			||||||
//             z: 4.553068469137088,
 | 
					 | 
				
			||||||
//         },
 | 
					 | 
				
			||||||
//         type: "combo",
 | 
					 | 
				
			||||||
//         sensorTypes: ["temperature", "co2"],
 | 
					 | 
				
			||||||
//         dbId: 1,
 | 
					 | 
				
			||||||
//     },
 | 
					 | 
				
			||||||
//     {
 | 
					 | 
				
			||||||
//         id: "Sensor 2",
 | 
					 | 
				
			||||||
//         position: {
 | 
					 | 
				
			||||||
//             x: 0.20752051811882666,
 | 
					 | 
				
			||||||
//             y: 5.431043023608719,
 | 
					 | 
				
			||||||
//             z: 4.553068469137088,
 | 
					 | 
				
			||||||
//         },
 | 
					 | 
				
			||||||
//         type: "combo",
 | 
					 | 
				
			||||||
//         sensorTypes: ["temperature", "co2"],
 | 
					 | 
				
			||||||
//         dbId: 2,
 | 
					 | 
				
			||||||
//     },
 | 
					 | 
				
			||||||
// ];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// var sensorStyleDefinitions = {
 | 
					 | 
				
			||||||
//     co2: {
 | 
					 | 
				
			||||||
//         url: "https://d2zqnmauvnpnnm.cloudfront.net/assets-1/images/co2.svg",
 | 
					 | 
				
			||||||
//         color: 0xffffff,
 | 
					 | 
				
			||||||
//     },
 | 
					 | 
				
			||||||
//     temperature: {
 | 
					 | 
				
			||||||
//         url: "https://d2zqnmauvnpnnm.cloudfront.net/assets-1/images/thermometer.svg",
 | 
					 | 
				
			||||||
//         color: 0xffffff,
 | 
					 | 
				
			||||||
//     },
 | 
					 | 
				
			||||||
//     default: {
 | 
					 | 
				
			||||||
//         url: "https://d2zqnmauvnpnnm.cloudfront.net/assets-1/images/circle.svg",
 | 
					 | 
				
			||||||
//         color: 0xffffff,
 | 
					 | 
				
			||||||
//     },
 | 
					 | 
				
			||||||
// };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Initialize sensor values
 | 
					 | 
				
			||||||
//let sensorVals = [];
 | 
					 | 
				
			||||||
let fragProxy;
 | 
					let fragProxy;
 | 
				
			||||||
var targetFloorZ;
 | 
					var targetFloorZ;
 | 
				
			||||||
var elevatorSpeed;
 | 
					var elevatorSpeed;
 | 
				
			||||||
var selector = "#forgeViewer";
 | 
					var selector = "#forgeViewer";
 | 
				
			||||||
// for (let i = 0; i < devices.length; i++) {
 | 
					let myDataList;
 | 
				
			||||||
//     sensorVals[i] = Math.random();
 | 
					 | 
				
			||||||
// }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
function launchViewer(urn, callback,selector = "#forgeViewer") {
 | 
					function launchViewer(urn, callback, selector = "#forgeViewer") {
 | 
				
			||||||
    var options = {
 | 
					    var options = {
 | 
				
			||||||
        env: 'AutodeskProduction',
 | 
					        env: 'AutodeskProduction',
 | 
				
			||||||
        getAccessToken: getForgeToken
 | 
					        getAccessToken: getForgeToken
 | 
				
			||||||
@ -96,6 +52,30 @@ function launchViewer(urn, callback,selector = "#forgeViewer") {
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function launchViewerForHotspot(urn, callback, selector = "#forgeViewer") {
 | 
				
			||||||
 | 
					    var av = Autodesk.Viewing;
 | 
				
			||||||
 | 
					    var options = {
 | 
				
			||||||
 | 
					        env: 'AutodeskProduction',
 | 
				
			||||||
 | 
					        getAccessToken: getForgeToken
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Autodesk.Viewing.Initializer(options, () => {
 | 
				
			||||||
 | 
					        viewer = new Autodesk.Viewing.GuiViewer3D($(selector)[0]);
 | 
				
			||||||
 | 
					        viewer.start();
 | 
				
			||||||
 | 
					        var documentId = 'urn:' + urn;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        viewer.addEventListener(av.GEOMETRY_LOADED_EVENT, addHotPoint, {
 | 
				
			||||||
 | 
					            once: true,
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Autodesk.Viewing.Document.load(documentId, onDocumentLoadSuccess, onDocumentLoadFailure);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $(selector).on("autodesk:loaded", function (e, nodeIds) {
 | 
				
			||||||
 | 
					            callback ? callback(viewer, nodeIds) : "";
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function launchViewerNoTools(urn, callback) {
 | 
					function launchViewerNoTools(urn, callback) {
 | 
				
			||||||
    var options = {
 | 
					    var options = {
 | 
				
			||||||
        env: 'AutodeskProduction',
 | 
					        env: 'AutodeskProduction',
 | 
				
			||||||
@ -594,3 +574,99 @@ function hideColor(nodeId) {//顏色改成透明
 | 
				
			|||||||
    },true)
 | 
					    },true)
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//------------------ 紀錄熱點座標 ---------------
 | 
				
			||||||
 | 
					function getHopspotPoint(data) {
 | 
				
			||||||
 | 
					    //var av = Autodesk.Viewing;
 | 
				
			||||||
 | 
					    myDataList = data;
 | 
				
			||||||
 | 
					    //viewer.addEventListener(av.GEOMETRY_LOADED_EVENT, addHotPoint, {
 | 
				
			||||||
 | 
					    //    once: true,
 | 
				
			||||||
 | 
					    //});
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					//-------------------- end ----------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//------------------- 加入熱點 -----------------
 | 
				
			||||||
 | 
					async function addHotPoint(data) {
 | 
				
			||||||
 | 
					    var viewer = data.target;
 | 
				
			||||||
 | 
					    const dataVizExtn = await viewer.loadExtension("Autodesk.DataVisualization");
 | 
				
			||||||
 | 
					    const DataVizCore = Autodesk.DataVisualization.Core;
 | 
				
			||||||
 | 
					    const viewableType = Autodesk.DataVisualization.Core.ViewableType.SPRITE;//DataVizCore.ViewableType.SPRITE;
 | 
				
			||||||
 | 
					    const spriteColor = new THREE.Color(0xffffff);
 | 
				
			||||||
 | 
					    const spriteIcon = "/img/forge/hotspot.svg";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const style = new DataVizCore.ViewableStyle(viewableType, spriteColor, spriteIcon);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //熱點 點擊事件註冊
 | 
				
			||||||
 | 
					    viewer.addEventListener(DataVizCore.MOUSE_CLICK, onSpriteClicked);// SPRITE_SELECTED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    viewer.addEventListener(
 | 
				
			||||||
 | 
					        Autodesk.Viewing.SELECTION_CHANGED_EVENT,
 | 
				
			||||||
 | 
					        onSelectionChange
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const viewableData = new DataVizCore.ViewableData();
 | 
				
			||||||
 | 
					    viewableData.spriteSize = 24; // Sprites as points of size 24 x 24 pixels
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    myDataList.forEach((myData, index) => {
 | 
				
			||||||
 | 
					        const dbId = 10 + index;
 | 
				
			||||||
 | 
					        const myPosition = myData.position;
 | 
				
			||||||
 | 
					        const viewable = new DataVizCore.SpriteViewable(myPosition, style, dbId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        viewableData.addViewable(viewable);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    await viewableData.finish();
 | 
				
			||||||
 | 
					    dataVizExtn.addViewables(viewableData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //---------------- 熱點點擊事件 --------------------
 | 
				
			||||||
 | 
					    function onSpriteClicked(event) {
 | 
				
			||||||
 | 
					        if (event != undefined && event != null) {
 | 
				
			||||||
 | 
					            if (event.dbId >= 10 && event.dbId <= 13) {//event.dbId > 0 && event.dbId < 19
 | 
				
			||||||
 | 
					                console.log(`Sprite clicked: ${event.dbId}`);
 | 
				
			||||||
 | 
					                openHotspotModal();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (event.clickInfo != null) {
 | 
				
			||||||
 | 
					                //document.getElementById('deviceName').innerHTML = viewer.model.getInstanceTree().getNodeName(event.clickInfo.dbId);
 | 
				
			||||||
 | 
					                //document.getElementById('deviceDbid').innerHTML = event.clickInfo.dbId;
 | 
				
			||||||
 | 
					                //document.getElementById('devicePosition').innerHTML = "(" + (event.clickInfo.point.x).toFixed(2) + ", " + (event.clickInfo.point.y).toFixed(2) + ", " + (event.clickInfo.point.z).toFixed(2) + ")";
 | 
				
			||||||
 | 
					                console.log(`event>>  dbId: ${event.clickInfo.dbId}, id: ${event.clickInfo.object.id}, position.x: ${event.clickInfo.point.x}, y: ${event.clickInfo.point.y}, z: ${event.clickInfo.point.z}, name: ${viewer.model.getInstanceTree().getNodeName(event.clickInfo.dbId)}`);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function onSelectionChange(event) {
 | 
				
			||||||
 | 
					        if (event != undefined && event != null) {
 | 
				
			||||||
 | 
					            const dbIds = event.dbIdArray;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (dbIds.length > 0) {
 | 
				
			||||||
 | 
					                // 處理已選取元件的邏輯
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                //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 {
 | 
				
			||||||
 | 
					                // 處理沒有選取元件的邏輯
 | 
				
			||||||
 | 
					                console.log("no item");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					//------------------- 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 --------------------------------
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user