[前台] 各樓層隱藏天花板 | 運維維修 異常 error_code 修正
This commit is contained in:
parent
f528ab8737
commit
7c6e0b6411
@ -1499,7 +1499,7 @@
|
|||||||
|
|
||||||
$.each(res.data, function (i, v) {
|
$.each(res.data, function (i, v) {
|
||||||
msg = v.msgText != null ? ($.trim(v.msgText.toString()).length > 0 ? v.msgText.split(':')[0] : '') : '';
|
msg = v.msgText != null ? ($.trim(v.msgText.toString()).length > 0 ? v.msgText.split(':')[0] : '') : '';
|
||||||
strHtml += `<option value=${v.uuid}>${v.uuid}</option>`;
|
strHtml += `<option value=${v.uuid}>${v.uuid.split("-")[0]}</option>`;
|
||||||
});
|
});
|
||||||
if (res.count > 0)
|
if (res.count > 0)
|
||||||
$(pageAct.work_type == '1' ? '#inpErrCode' : '#inpErrCode_2').html(strHtml);
|
$(pageAct.work_type == '1' ? '#inpErrCode' : '#inpErrCode_2').html(strHtml);
|
||||||
|
@ -46,8 +46,10 @@
|
|||||||
});
|
});
|
||||||
initChart();
|
initChart();
|
||||||
getFloData();
|
getFloData();
|
||||||
|
getFloData();
|
||||||
|
if (pageAct.sysSubTag !== "L1") {
|
||||||
subDevice();
|
subDevice();
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
onEvent("click", "#resChartZoom", function () {
|
onEvent("click", "#resChartZoom", function () {
|
||||||
@ -87,7 +89,6 @@
|
|||||||
//currentData = selected_floor_objs[0].device;
|
//currentData = selected_floor_objs[0].device;
|
||||||
|
|
||||||
currentData = $.map(devList, function (item) {
|
currentData = $.map(devList, function (item) {
|
||||||
|
|
||||||
//資料處理
|
//資料處理
|
||||||
if (selected_floor.device_number != undefined
|
if (selected_floor.device_number != undefined
|
||||||
&& selected_floor.device_number != null
|
&& selected_floor.device_number != null
|
||||||
@ -109,6 +110,7 @@
|
|||||||
&& item.device_nodes != null
|
&& item.device_nodes != null
|
||||||
&& item.device_nodes.length > 0) {
|
&& item.device_nodes.length > 0) {
|
||||||
|
|
||||||
|
console.log("燈", item, selected_floor)
|
||||||
if (item.device_master_number == selected_floor.device_master) {
|
if (item.device_master_number == selected_floor.device_master) {
|
||||||
//var datatable_data = {
|
//var datatable_data = {
|
||||||
// device_full_name: item.full_name,
|
// device_full_name: item.full_name,
|
||||||
@ -152,8 +154,9 @@
|
|||||||
}
|
}
|
||||||
return item;
|
return item;
|
||||||
});
|
});
|
||||||
|
console.log("currentData", currentData)
|
||||||
if (currentData == null || currentData.length == 0) {
|
if (currentData == null || currentData.length == 0) {
|
||||||
this.currentData = [];
|
currentData = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
// myBaja.setPrepareSubscribeDevices(currentData);
|
// myBaja.setPrepareSubscribeDevices(currentData);
|
||||||
@ -187,6 +190,7 @@
|
|||||||
// animationDurationUpdate: 1500,
|
// animationDurationUpdate: 1500,
|
||||||
tooltip: {
|
tooltip: {
|
||||||
formatter: function (params) {
|
formatter: function (params) {
|
||||||
|
console.log("params", params)
|
||||||
if (params.data.device_node_guid != undefined && params.data.device_node_guid != null && params.data.device_node_guid != "") {
|
if (params.data.device_node_guid != undefined && params.data.device_node_guid != null && params.data.device_node_guid != "") {
|
||||||
return `<div >
|
return `<div >
|
||||||
名稱:${params.data.device_node_full_name}<br>
|
名稱:${params.data.device_node_full_name}<br>
|
||||||
@ -206,7 +210,7 @@
|
|||||||
map: 'floor_svg',
|
map: 'floor_svg',
|
||||||
roam: true,
|
roam: true,
|
||||||
scaleLimit: { //限制放大縮小倍數
|
scaleLimit: { //限制放大縮小倍數
|
||||||
max: 32,
|
max: 16,
|
||||||
min: 1
|
min: 1
|
||||||
},
|
},
|
||||||
layoutSize: '100%',
|
layoutSize: '100%',
|
||||||
@ -220,7 +224,7 @@
|
|||||||
coordinateSystem: 'geo',
|
coordinateSystem: 'geo',
|
||||||
geoIndex: 0,
|
geoIndex: 0,
|
||||||
symbol: 'circle',
|
symbol: 'circle',
|
||||||
symbolSize: 10,
|
symbolSize: 20,
|
||||||
symbolOffset: [10, 10],
|
symbolOffset: [10, 10],
|
||||||
label: {
|
label: {
|
||||||
show: false
|
show: false
|
||||||
@ -232,7 +236,7 @@
|
|||||||
type: 'scatter',
|
type: 'scatter',
|
||||||
coordinateSystem: 'geo',
|
coordinateSystem: 'geo',
|
||||||
geoIndex: 0,
|
geoIndex: 0,
|
||||||
symbolSize: 30,
|
symbolSize: 50,
|
||||||
label: {
|
label: {
|
||||||
formatter: '{b}',
|
formatter: '{b}',
|
||||||
position: 'bottom',
|
position: 'bottom',
|
||||||
@ -256,7 +260,7 @@
|
|||||||
coordinateSystem: 'geo',
|
coordinateSystem: 'geo',
|
||||||
geoIndex: 0,
|
geoIndex: 0,
|
||||||
showEffectOn: 'render',
|
showEffectOn: 'render',
|
||||||
symbolSize: 30,
|
symbolSize: 50,
|
||||||
label: {
|
label: {
|
||||||
formatter: '{b}',
|
formatter: '{b}',
|
||||||
position: 'bottom',
|
position: 'bottom',
|
||||||
@ -280,7 +284,7 @@
|
|||||||
coordinateSystem: 'geo',
|
coordinateSystem: 'geo',
|
||||||
geoIndex: 0,
|
geoIndex: 0,
|
||||||
symbol: 'circle',
|
symbol: 'circle',
|
||||||
symbolSize: 10,
|
symbolSize: 20,
|
||||||
symbolOffset: [10, 10],
|
symbolOffset: [10, 10],
|
||||||
label: {
|
label: {
|
||||||
show: false
|
show: false
|
||||||
@ -292,7 +296,7 @@
|
|||||||
type: 'scatter',
|
type: 'scatter',
|
||||||
coordinateSystem: 'geo',
|
coordinateSystem: 'geo',
|
||||||
geoIndex: 0,
|
geoIndex: 0,
|
||||||
symbolSize: 30,
|
symbolSize: 50,
|
||||||
label: {
|
label: {
|
||||||
formatter: '{b}',
|
formatter: '{b}',
|
||||||
position: 'bottom',
|
position: 'bottom',
|
||||||
@ -476,13 +480,18 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (data.point_name == "SSC") {
|
if (data.point_name == "SSC" && pageAct.sysSubTag === "L1") {
|
||||||
const lightOn = data.value.includes("true")
|
const lightOn = data.value.includes("true")
|
||||||
setLightOpenOrClose(lightOn, matchDevice.device_guid);
|
setLightOpenOrClose(lightOn, matchDevice.device_guid);
|
||||||
if (lightOn) {
|
if (lightOn) {
|
||||||
|
//console.log(matchDevice)
|
||||||
setLightValues(matchDevice.device_guid, 200, 0xe1cf18);
|
setLightValues(matchDevice.device_guid, 200, 0xe1cf18);
|
||||||
|
console.log("SSC", matchDevice.device_number, 40)
|
||||||
|
heatMap?.changeTemp(matchDevice.device_number, 40);
|
||||||
} else {
|
} else {
|
||||||
setLightValues(matchDevice.device_guid, 0, 0xffffff);
|
setLightValues(matchDevice.device_guid, 0, 0xffffff);
|
||||||
|
// console.log("SSC",matchDevice.device_number, 0)
|
||||||
|
heatMap?.changeTemp(matchDevice.device_number, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -653,7 +662,7 @@
|
|||||||
|
|
||||||
// 重設平面圖設備資料
|
// 重設平面圖設備資料
|
||||||
function resetData() {
|
function resetData() {
|
||||||
|
console.log("reset", currentData)
|
||||||
const scatter_symbol_convertData = function (data, zoom) { //正常、關閉排除CCVT(圓點)
|
const scatter_symbol_convertData = function (data, zoom) { //正常、關閉排除CCVT(圓點)
|
||||||
let res = [], temp = [];
|
let res = [], temp = [];
|
||||||
data.forEach(function (item, index) {
|
data.forEach(function (item, index) {
|
||||||
@ -840,6 +849,7 @@
|
|||||||
item_node.device_image = item.device_image;
|
item_node.device_image = item.device_image;
|
||||||
temp.push(item_node);
|
temp.push(item_node);
|
||||||
});
|
});
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
temp.push(item)
|
temp.push(item)
|
||||||
}
|
}
|
||||||
@ -1095,7 +1105,12 @@
|
|||||||
nextFloor = nextFloor.split("U")[1];
|
nextFloor = nextFloor.split("U")[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
getLevelsData(curFloTag, nextFloor, function () {
|
getLevelsData(curFloTag, nextFloor, function () {
|
||||||
|
viewer.model.search("天花板", (nodeIds) => {
|
||||||
|
// console.log("2",nodeIds)
|
||||||
|
viewer.hide(nodeIds)
|
||||||
|
}, (e) => { console.log(e) })
|
||||||
$(loadEle).Loading("close");
|
$(loadEle).Loading("close");
|
||||||
});
|
});
|
||||||
setHeatMap();
|
setHeatMap();
|
||||||
@ -1120,7 +1135,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function setHeatMap() {
|
function setHeatMap() {
|
||||||
if (pageAct.sysMainTag !== "LT" && pageAct.sysSubTag !== "M12") {
|
if (pageAct.sysSubTag !== "M12") {
|
||||||
devices = currentData.map(x => {
|
devices = currentData.map(x => {
|
||||||
return {
|
return {
|
||||||
roomDbId: !isNaN(parseInt(x.room_dbid)) ? parseInt(x.room_dbid) : -1,
|
roomDbId: !isNaN(parseInt(x.room_dbid)) ? parseInt(x.room_dbid) : -1,
|
||||||
@ -1139,9 +1154,9 @@
|
|||||||
|
|
||||||
heatMap = new ADHeatMaps(option);
|
heatMap = new ADHeatMaps(option);
|
||||||
heatMap.onComplete = () => {
|
heatMap.onComplete = () => {
|
||||||
|
|
||||||
$.each(currentData, (idx, dev) => {
|
$.each(currentData, (idx, dev) => {
|
||||||
heatMap.changeTemp(dev.device_number, dev._temp || 0);
|
heatMap.changeTemp(dev.device_number, dev._temp || 0);
|
||||||
|
subDevice();
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1230,7 +1245,7 @@
|
|||||||
let option = floChart.getOption();
|
let option = floChart.getOption();
|
||||||
option.series.forEach(function (series) {
|
option.series.forEach(function (series) {
|
||||||
series.data.forEach(function (point) {
|
series.data.forEach(function (point) {
|
||||||
point.symbolSize = 10;
|
point.symbolSize = 20;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
floChart.setOption(option);
|
floChart.setOption(option);
|
||||||
@ -1243,7 +1258,7 @@
|
|||||||
option.series.forEach(function (series) {
|
option.series.forEach(function (series) {
|
||||||
series.data.forEach(function (point) {
|
series.data.forEach(function (point) {
|
||||||
if (point.device_guid == devGuid) {
|
if (point.device_guid == devGuid) {
|
||||||
point.symbolSize = 10;
|
point.symbolSize = 20;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -8,8 +8,8 @@ var myDataList;
|
|||||||
var lightDataList;
|
var lightDataList;
|
||||||
var lightList = [];//燈光清單
|
var lightList = [];//燈光清單
|
||||||
var levels;//剖面用
|
var levels;//剖面用
|
||||||
var lowerIdx;//剖面的下方樓層
|
var lowerIdx = 0;//剖面的下方樓層
|
||||||
var upperIdx;//剖面的上方樓層
|
var upperIdx = 0;//剖面的上方樓層
|
||||||
|
|
||||||
function launchViewer(urn, callback, failCallback, _selector = "#forgeViewer") {
|
function launchViewer(urn, callback, failCallback, _selector = "#forgeViewer") {
|
||||||
selector = _selector;
|
selector = _selector;
|
||||||
@ -340,12 +340,12 @@ class elevator3D {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function onDocumentLoadSuccess(doc, eleOption) {
|
function onDocumentLoadSuccess(doc, eleOption) {
|
||||||
|
|
||||||
var viewables = doc.getRoot().getDefaultGeometry();
|
var viewables = doc.getRoot().getDefaultGeometry();
|
||||||
viewer.loadDocumentNode(doc, viewables).then(i => {
|
viewer.loadDocumentNode(doc, viewables).then(i => {
|
||||||
// documented loaded, any action?
|
// documented loaded, any action?
|
||||||
|
|
||||||
});
|
});
|
||||||
// viewer.addEventListener(Autodesk.Viewing.AGGREGATE_SELECTION_CHANGED_EVENT, (args) => {
|
// viewer.addEventListener(Autodesk.Viewing.AGGREGATE_SELECTION_CHANGED_EVENT, (args) => {
|
||||||
// var currSelection = viewer.getSelection();
|
// var currSelection = viewer.getSelection();
|
||||||
@ -559,6 +559,7 @@ class ADHeatMaps {
|
|||||||
this.roomDbIds = []; //房間 dbId
|
this.roomDbIds = []; //房間 dbId
|
||||||
this.model = null;
|
this.model = null;
|
||||||
this.dataVizExtn = null;
|
this.dataVizExtn = null;
|
||||||
|
this.shadingData = null;
|
||||||
this.onComplete = option.onComplete ?? null;
|
this.onComplete = option.onComplete ?? null;
|
||||||
this.init();
|
this.init();
|
||||||
}
|
}
|
||||||
@ -571,54 +572,78 @@ class ADHeatMaps {
|
|||||||
this.model = viewer.model;
|
this.model = viewer.model;
|
||||||
this.addHeatMaps()
|
this.addHeatMaps()
|
||||||
}
|
}
|
||||||
|
|
||||||
async addHeatMaps() {
|
async addHeatMaps() {
|
||||||
const {
|
const {
|
||||||
SurfaceShadingData,
|
SurfaceShadingData,
|
||||||
SurfaceShadingPoint,
|
SurfaceShadingPoint,
|
||||||
SurfaceShadingNode,
|
SurfaceShadingNode,
|
||||||
|
SurfaceShadingGroup
|
||||||
} = Autodesk.DataVisualization.Core;
|
} = Autodesk.DataVisualization.Core;
|
||||||
|
// test
|
||||||
|
const shadingGroup = new SurfaceShadingGroup('iot-heatmap');
|
||||||
|
const rooms = new Map();
|
||||||
|
|
||||||
|
for (const { id, roomDbId, position, sensorTypes } of this.devices) {
|
||||||
|
// console.log(id, roomDbId, position, sensorTypes)
|
||||||
|
if (!id || roomDbId == -1) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!rooms.has(roomDbId)) {
|
||||||
|
const room = new SurfaceShadingNode(id, roomDbId);
|
||||||
|
shadingGroup.addChild(room);
|
||||||
|
rooms.set(roomDbId, room);
|
||||||
|
}
|
||||||
|
const room = rooms.get(roomDbId);
|
||||||
|
room.addPoint(new SurfaceShadingPoint(id, position, sensorTypes));
|
||||||
|
}
|
||||||
|
this.shadingData = new SurfaceShadingData();
|
||||||
|
this.shadingData.addChild(shadingGroup)
|
||||||
|
this.shadingData.initialize(this.model);
|
||||||
|
await this.dataVizExtn.setupSurfaceShading(this.model, this.shadingData);
|
||||||
|
this.dataVizExtn.renderSurfaceShading('iot-heatmap', "temperature", this.getSensorValue.bind(this));
|
||||||
|
|
||||||
//let nodeIds = await getNodeIdByDbIds(this.checkNodeString);
|
//let nodeIds = await getNodeIdByDbIds(this.checkNodeString);
|
||||||
//nodeIds = Array.from(nodeIds);
|
//nodeIds = Array.from(nodeIds);
|
||||||
//nodeIds = nodeIds.map(x => { return { room: x[0] , nodeId: x[1]} });
|
//nodeIds = nodeIds.map(x => { return { room: x[0] , nodeId: x[1]} });
|
||||||
this.roomDbIds = this.devices.filter(x => x.roomDbId != -1).map(x => x.roomDbId).Distinct();
|
// this.roomDbIds = this.devices.filter(x => x.roomDbId != -1).map(x => x.roomDbId).Distinct();
|
||||||
|
|
||||||
// 建立一個 SurfaceShadingData 物件,並將 SurfaceShadingNode 加入到該物件中
|
// // 建立一個 SurfaceShadingData 物件,並將 SurfaceShadingNode 加入到該物件中
|
||||||
const heatmapData = new SurfaceShadingData();
|
// const heatmapData = new SurfaceShadingData();
|
||||||
|
|
||||||
$.each(this.roomDbIds, (idx, rDbid) => {
|
// $.each(this.roomDbIds, (idx, rDbid) => {
|
||||||
// 建立一個名為 "Room Panel" 的 SurfaceShadingNode 物件,並將房間的模型給傳入,只在該房間呈現溫度
|
// // 建立一個名為 "Room Panel" 的 SurfaceShadingNode 物件,並將房間的模型給傳入,只在該房間呈現溫度
|
||||||
const shadingNode = new SurfaceShadingNode("RoomPanel" + rDbid, rDbid);
|
// const shadingNode = new SurfaceShadingNode("RoomPanel" + rDbid, rDbid);
|
||||||
|
|
||||||
// 遍歷每個設備,建立一個 SurfaceShadingPoint 物件並加入到 SurfaceShadingNode 中,透過這些設備渲染溫度
|
// // 遍歷每個設備,建立一個 SurfaceShadingPoint 物件並加入到 SurfaceShadingNode 中,透過這些設備渲染溫度
|
||||||
this.devices.filter(x => x.roomDbId == rDbid).forEach((device) => {
|
// this.devices.filter(x => x.roomDbId == rDbid).forEach((device) => {
|
||||||
const shadingPoint = new SurfaceShadingPoint(
|
// const shadingPoint = new SurfaceShadingPoint(
|
||||||
device.id,
|
// device.id,
|
||||||
undefined,
|
// undefined,
|
||||||
device.sensorTypes
|
// device.sensorTypes
|
||||||
);
|
// );
|
||||||
shadingPoint.positionFromDBId(this.model, device.roomDbId)
|
// shadingPoint.positionFromDBId(this.model, device.roomDbId)
|
||||||
shadingNode.addPoint(shadingPoint);
|
// shadingNode.addPoint(shadingPoint);
|
||||||
// device.temp = 0;
|
// // device.temp = 0;
|
||||||
});
|
// });
|
||||||
|
|
||||||
heatmapData.addChild(shadingNode);
|
// heatmapData.addChild(shadingNode);
|
||||||
})
|
// })
|
||||||
|
|
||||||
// 將資料初始化並顯示在模型上
|
// // 將資料初始化並顯示在模型上
|
||||||
heatmapData.initialize(this.model);
|
// heatmapData.initialize(this.model);
|
||||||
|
|
||||||
// 對模型做表面顏色的渲染
|
// // 對模型做表面顏色的渲染
|
||||||
await this.dataVizExtn.setupSurfaceShading(this.model, heatmapData);
|
// await this.dataVizExtn.setupSurfaceShading(this.model, heatmapData);
|
||||||
|
|
||||||
// 對 "temperature" 的溫度設定兩種顏色:紅色和藍色
|
// // 對 "temperature" 的溫度設定兩種顏色:紅色和藍色
|
||||||
this.dataVizExtn.registerSurfaceShadingColors("temperature", [0x0000ff, 0x00ff00, 0xffff00, 0xff0000]);
|
// this.dataVizExtn.registerSurfaceShadingColors("temperature", [0x0000ff, 0x00ff00, 0xffff00, 0xff0000]);
|
||||||
|
|
||||||
$.each(this.roomDbIds, (idx, rDbid) => {
|
// $.each(this.roomDbIds, (idx, rDbid) => {
|
||||||
this.dataVizExtn.renderSurfaceShading("RoomPanel" + rDbid, "temperature", this.getSensorValue.bind(this));
|
// this.dataVizExtn.renderSurfaceShading("RoomPanel" + rDbid, "temperature", this.getSensorValue.bind(this));
|
||||||
})
|
// })
|
||||||
|
|
||||||
/*this.changeTemp(this.tempVal);*/
|
// /*this.changeTemp(this.tempVal);*/
|
||||||
this.onComplete ? this.onComplete() : "";
|
this.onComplete ? this.onComplete() : "";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -629,7 +654,7 @@ class ADHeatMaps {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 改變溫度
|
// 改變溫度
|
||||||
changeTemp = function (devId, temp) {
|
changeTemp = async function (devId, temp) {
|
||||||
this.tempVal = temp;
|
this.tempVal = temp;
|
||||||
// 透過 device id 取得 roomDbId
|
// 透過 device id 取得 roomDbId
|
||||||
this.devices.forEach((dev) => {
|
this.devices.forEach((dev) => {
|
||||||
@ -637,9 +662,18 @@ class ADHeatMaps {
|
|||||||
dev.temp = temp;
|
dev.temp = temp;
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
$.each(this.roomDbIds, async (idx, rDbid) => {
|
|
||||||
this.dataVizExtn.renderSurfaceShading("RoomPanel" + rDbid, "temperature", this.getSensorValue.bind(this));
|
if (!this.shadingData) {
|
||||||
})
|
await this.addHeatMaps();
|
||||||
|
this.dataVizExtn.renderSurfaceShading('iot-heatmap', "temperature", this.getSensorValue.bind(this));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.dataVizExtn.updateSurfaceShading(this.getSensorValue.bind(this));
|
||||||
|
}
|
||||||
|
// $.each(this.roomDbIds, async (idx, rDbid) => {
|
||||||
|
// this.dataVizExtn.renderSurfaceShading("RoomPanel" + rDbid, "temperature", this.getSensorValue.bind(this));
|
||||||
|
// })
|
||||||
|
|
||||||
//if (rDbid != null) {
|
//if (rDbid != null) {
|
||||||
// // 取得新的溫度值
|
// // 取得新的溫度值
|
||||||
// let getSensorValue = (device, sensorType) => {
|
// let getSensorValue = (device, sensorType) => {
|
||||||
@ -740,10 +774,11 @@ async function getLightData(data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function testNewLight(dataList) {
|
async function testNewLight(dataList) {
|
||||||
|
console.log("dataList", dataList)
|
||||||
dataList.forEach((myData, index) => {
|
dataList.forEach((myData, index) => {
|
||||||
const position = JSON.parse(myData.device_coordinate_3d);
|
const position = JSON.parse(myData.device_coordinate_3d);
|
||||||
if (lightList.findIndex(x => x.device_guid == myData.device_guid) == -1) {
|
if (lightList.findIndex(x => x.device_guid == myData.device_guid) == -1) {
|
||||||
lightList.push({ dbid: myData.forge_dbid, device_guid: myData.device_guid, lightObject: new THREE.SpotLight(0xe1cf18, 0, 20, 0.6, 0.5, 10) });
|
lightList.push({ dbid: myData.forge_dbid, device_guid: myData.device_guid, lightObject: new THREE.SpotLight(0xe1cf18, 10, 200, 1, 1, 2) });
|
||||||
}
|
}
|
||||||
|
|
||||||
lightList[index].lightObject.position.set(position.x, position.y, position.z);
|
lightList[index].lightObject.position.set(position.x, position.y, position.z);
|
||||||
@ -917,6 +952,7 @@ async function changeScaleForHotspot(dbId, type = true) {
|
|||||||
|
|
||||||
//------------------ 熱圖 -------------------------------
|
//------------------ 熱圖 -------------------------------
|
||||||
async function loadHeatmaps(model) {
|
async function loadHeatmaps(model) {
|
||||||
|
//console.log("熱圖 loadHeat")
|
||||||
const dataVizExtn = await viewer.loadExtension("Autodesk.DataVisualization");
|
const dataVizExtn = await viewer.loadExtension("Autodesk.DataVisualization");
|
||||||
|
|
||||||
//取三個空調設備的位置打點
|
//取三個空調設備的位置打點
|
||||||
@ -1082,28 +1118,73 @@ async function loadHeatmapForFloor() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//------------ 剖面 ----------------------
|
//------------ 剖面 ----------------------
|
||||||
async function getRemoteLevels() {
|
|
||||||
const aecData = await Autodesk.Viewing.Document.getAecModelData(this.viewer.model.getDocumentNode());
|
|
||||||
if (!aecData || !aecData.levels) return null;
|
|
||||||
|
|
||||||
const levels2 = aecData.levels;
|
function findLevels(model) {
|
||||||
levels2.sort((a, b) => b.elevation - a.elevation);
|
return new Promise((resolve, reject) => {
|
||||||
return levels2;
|
model.search("layer", (nodeIds) => {
|
||||||
|
let levels = []
|
||||||
|
const tree = viewer.model.getInstanceTree();
|
||||||
|
for (let i = 0; i < nodeIds.length; i++) {
|
||||||
|
const dbId = nodeIds[i];
|
||||||
|
const name = tree.getNodeName(dbId);
|
||||||
|
if (!name || name.includes('<沒有層級>')) continue;
|
||||||
|
levels.push({
|
||||||
|
guid: dbId,
|
||||||
|
name,
|
||||||
|
dbId,
|
||||||
|
extension: {
|
||||||
|
buildingStory: true,
|
||||||
|
structure: false,
|
||||||
|
computationHeight: 0,
|
||||||
|
groundPlane: false,
|
||||||
|
hasAssociatedViewPlans: false,
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
resolve(levels)
|
||||||
|
}, (e) => { reject(e) })
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async function getRemoteLevels() {
|
||||||
|
|
||||||
|
let aecData = await Autodesk.Viewing.Document.getAecModelData(this.viewer.model.getDocumentNode());
|
||||||
|
|
||||||
|
let levels;
|
||||||
|
if (!aecData || !aecData.levels) {
|
||||||
|
const levelExt = await viewer.loadExtension('Autodesk.AEC.LevelsExtension');
|
||||||
|
levelExt.setAecModelData(undefined, viewer.model); //!<<< Clear before reset
|
||||||
|
levels = await findLevels(viewer.model)
|
||||||
|
aecdata = Autodesk.AEC.AecModelData.computeLevels(levels, viewer.model); //!<<< Rebuild aec model data
|
||||||
|
} else {
|
||||||
|
levels = aecData.levels;
|
||||||
|
}
|
||||||
|
levels.sort((a, b) => b.elevation - a.elevation);
|
||||||
|
return levels;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getLevelsData(lowerFloor, upperFloor, callback = null) {
|
async function getLevelsData(lowerFloor, upperFloor, callback = null) {
|
||||||
|
console.log(lowerFloor, upperFloor)
|
||||||
// 樓層正規化 取得樓層
|
// 樓層正規化 取得樓層
|
||||||
const floorRegex = /[\d|\w]+F/gmi;
|
const floorRegex = /[\d|\w]+F/gmi;
|
||||||
|
const floorRegex2 = /^FL[\d|\w]+/gmi;
|
||||||
const data = await this.getRemoteLevels();
|
const data = await this.getRemoteLevels();
|
||||||
|
console.log(data)
|
||||||
for (var i = 0; i < data.length; i++) {
|
for (var i = 0; i < data.length; i++) {
|
||||||
let name = data[i].name?.match(floorRegex);
|
let name = data[i].name?.match(floorRegex) || data[i].name?.match(floorRegex2)[0].split("L")[1] + "F";
|
||||||
if (name && name[0] == lowerFloor) {
|
if (name && name[0] == lowerFloor || name == lowerFloor) {
|
||||||
lowerIdx = i;
|
lowerIdx = i;
|
||||||
}
|
}
|
||||||
if (name && name[0] == upperFloor) {
|
if (name && name[0] == upperFloor || name == upperFloor) {
|
||||||
|
if (i > upperIdx && lowerFloor == upperFloor) {
|
||||||
|
|
||||||
|
} else {
|
||||||
upperIdx = i;
|
upperIdx = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.levels = data;
|
this.levels = data;
|
||||||
profile(callback);
|
profile(callback);
|
||||||
}
|
}
|
||||||
@ -1118,7 +1199,7 @@ function getCutPlaneParam(idx, n) {
|
|||||||
const globalOffset = model.getData().globalOffset;
|
const globalOffset = model.getData().globalOffset;
|
||||||
const units = model.getUnitString();
|
const units = model.getUnitString();
|
||||||
const elevRaw = Autodesk.Viewing.Private.convertUnits('ft', units, 1, level.elevation);
|
const elevRaw = Autodesk.Viewing.Private.convertUnits('ft', units, 1, level.elevation);
|
||||||
|
console.log(globalOffset, units, elevRaw)
|
||||||
let d = elevRaw - globalOffset.z - 0.5;
|
let d = elevRaw - globalOffset.z - 0.5;
|
||||||
if (n == 1)
|
if (n == 1)
|
||||||
d = -1 * d;
|
d = -1 * d;
|
||||||
|
@ -7,8 +7,8 @@ var baseImgUrl = "https://localhost:44376"; // 本地開發用
|
|||||||
//var baseImgUrl = "http://220.132.206.5:8848"; // production 用
|
//var baseImgUrl = "http://220.132.206.5:8848"; // production 用
|
||||||
|
|
||||||
// WSP
|
// WSP
|
||||||
//var baseApiUrl = "http://220.132.206.5"; // production 用
|
// var baseApiUrl = "http://220.132.206.5:8001"; // production 用
|
||||||
//var baseImgUrl = "http://220.132.206.5:8849"; // production 用
|
// var baseImgUrl = "http://220.132.206.5:8849"; // production 用
|
||||||
|
|
||||||
//var baseApiUrl = "http://localhost";
|
//var baseApiUrl = "http://localhost";
|
||||||
//var baseImgUrl = "http://localhost:8848";
|
//var baseImgUrl = "http://localhost:8848";
|
||||||
@ -31,11 +31,17 @@ var common = {
|
|||||||
}
|
}
|
||||||
var objSendData = { Data: null };
|
var objSendData = { Data: null };
|
||||||
// Mitsubishi
|
// Mitsubishi
|
||||||
|
var elevatorShow = true
|
||||||
|
var port = "";
|
||||||
var initAreaTag = "TPE";
|
var initAreaTag = "TPE";
|
||||||
var n4Sup = "Mitsubishi_JACE8000";
|
var n4Sup = "Mitsubishi_JACE8000";
|
||||||
|
|
||||||
// WSP
|
// WSP
|
||||||
//var initAreaTag = "NTPC";
|
// var elevatorShow = false
|
||||||
//var n4Sup = "Banqiao";
|
// var port = "4912";
|
||||||
|
// var initAreaTag = "NTPC";
|
||||||
|
// var n4Sup = "WSP_Supervisor";
|
||||||
|
|
||||||
var forgeTokenBase = {
|
var forgeTokenBase = {
|
||||||
url: baseApiUrl + '/api/forge/oauth/token',
|
url: baseApiUrl + '/api/forge/oauth/token',
|
||||||
res_access_token: ["dictionary", "access_token"],
|
res_access_token: ["dictionary", "access_token"],
|
||||||
|
Loading…
Reference in New Issue
Block a user