|
@@ -367,7 +367,7 @@ export default {
|
|
|
})
|
|
|
},
|
|
|
// 获取当前分区下的业务空间
|
|
|
- getBusinessSpace(other) {
|
|
|
+ getBusinessSpace() {
|
|
|
this.canvasLoading = true
|
|
|
let ObjectType = this.tab.code == 'OtherZone' ? this.OtherValue : this.tab.code;
|
|
|
let pa = {
|
|
@@ -451,6 +451,7 @@ export default {
|
|
|
this.scene.isSpaceSelectable = true;
|
|
|
// 设置业务空间不可选
|
|
|
this.scene.isZoneSelectable = false
|
|
|
+ this.view._needDraw = true;
|
|
|
},
|
|
|
// 查看未关联的业务空间--flag--查看-or-选择
|
|
|
lookUnrelatBSpace(flag) {
|
|
@@ -565,62 +566,62 @@ export default {
|
|
|
},
|
|
|
// 根据图创建新的业务空间-弹窗返回确认创建
|
|
|
createRoom(val) {
|
|
|
- // const zoneObj = { Outline: [], Height: 0 }, IspaceIdList = [];
|
|
|
- // let spaces = {};
|
|
|
- // if (this.scene.cutItem || this.scene.sceneMark) {
|
|
|
- // // 如果有划分,求交集
|
|
|
- // // 格式为Poly(先与业务空间求差集)
|
|
|
- // const obj = this.scene.getZoneDifference(true);
|
|
|
- // // 差集与楼层平面图或用户划分区域求交集
|
|
|
- // spaces = this.scene.getPloyIntersect(obj)
|
|
|
- // } else {
|
|
|
- // // 格式为SPoint[]
|
|
|
- // spaces = this.scene.getZoneDifference();
|
|
|
- // }
|
|
|
- // for (let key in spaces) {
|
|
|
- // spaces[key].map(t => {
|
|
|
- // let temp = t.map(item => {
|
|
|
- // return {
|
|
|
- // X: 1*item.x.toFixed(2),
|
|
|
- // Y: -item.y.toFixed(2),
|
|
|
- // Z: 0
|
|
|
- // }
|
|
|
- // })
|
|
|
- // zoneObj.Outline.push([temp]);
|
|
|
- // })
|
|
|
- // let curISP = this.sourceIdToISP[key];
|
|
|
- // if (curISP) {
|
|
|
- // curISP && IspaceIdList.push(curISP.RoomID);
|
|
|
- // zoneObj.Height = zoneObj.Height == 0 ? curISP.Height : zoneObj.Height > curISP.Height ? curISP.Height : zoneObj.Height;
|
|
|
- // }
|
|
|
- // }
|
|
|
- // 数据计算导致浏览器奔溃,临时注释
|
|
|
- let zoneObj = { Outline: [], Height: 0 }, IspaceIdList = [];
|
|
|
- let selectSpaces = this.scene.getSelectedSpaces();
|
|
|
- selectSpaces.map(t => {
|
|
|
- zoneObj.Outline.push(t.data.OutLine);
|
|
|
- let key = t.data.SourceId;
|
|
|
- let curISP = this.sourceIdToISP[key];
|
|
|
- if (curISP) {
|
|
|
- IspaceIdList.push(curISP.RoomID);
|
|
|
- zoneObj.Height = zoneObj.Height == 0 ? curISP.Height : zoneObj.Height > curISP.Height ? curISP.Height : zoneObj.Height;
|
|
|
- }
|
|
|
- })
|
|
|
- // 如果有划分,求交集
|
|
|
+ const zoneObj = { Outline: [], Height: 0 }, IspaceIdList = [];
|
|
|
+ let spaces = {};
|
|
|
if (this.scene.cutItem || this.scene.sceneMark) {
|
|
|
- zoneObj.Outline = [];
|
|
|
- let arr = this.scene.getIntersect();
|
|
|
- arr.map(t => {
|
|
|
+ // 如果有划分,求交集
|
|
|
+ // 格式为Poly(先与业务空间求差集)
|
|
|
+ const obj = this.scene.getZoneDifference(true);
|
|
|
+ // 差集与楼层平面图或用户划分区域求交集
|
|
|
+ spaces = this.scene.getPloyIntersect(obj)
|
|
|
+ } else {
|
|
|
+ // 格式为SPoint[]
|
|
|
+ spaces = this.scene.getZoneDifference();
|
|
|
+ }
|
|
|
+ for (let key in spaces) {
|
|
|
+ spaces[key].map(t => {
|
|
|
let temp = t.map(item => {
|
|
|
return {
|
|
|
- X: 1 * item.x,
|
|
|
- Y: -item.y,
|
|
|
+ X: 1 * item.x.toFixed(2),
|
|
|
+ Y: -item.y.toFixed(2),
|
|
|
Z: 0
|
|
|
}
|
|
|
})
|
|
|
zoneObj.Outline.push([temp]);
|
|
|
})
|
|
|
+ let curISP = this.sourceIdToISP[key];
|
|
|
+ if (curISP) {
|
|
|
+ curISP && IspaceIdList.push(curISP.RoomID);
|
|
|
+ zoneObj.Height = zoneObj.Height == 0 ? curISP.Height : zoneObj.Height > curISP.Height ? curISP.Height : zoneObj.Height;
|
|
|
+ }
|
|
|
}
|
|
|
+ // 数据计算导致浏览器奔溃,临时注释(测试计算未崩溃改好)
|
|
|
+ // let zoneObj = { Outline: [], Height: 0 }, IspaceIdList = [];
|
|
|
+ // let selectSpaces = this.scene.getSelectedSpaces();
|
|
|
+ // selectSpaces.map(t => {
|
|
|
+ // zoneObj.Outline.push(t.data.OutLine);
|
|
|
+ // let key = t.data.SourceId;
|
|
|
+ // let curISP = this.sourceIdToISP[key];
|
|
|
+ // if (curISP) {
|
|
|
+ // IspaceIdList.push(curISP.RoomID);
|
|
|
+ // zoneObj.Height = zoneObj.Height == 0 ? curISP.Height : zoneObj.Height > curISP.Height ? curISP.Height : zoneObj.Height;
|
|
|
+ // }
|
|
|
+ // })
|
|
|
+ // // 如果有划分,求交集
|
|
|
+ // if (this.scene.cutItem || this.scene.sceneMark) {
|
|
|
+ // zoneObj.Outline = [];
|
|
|
+ // let arr = this.scene.getIntersect();
|
|
|
+ // arr.map(t => {
|
|
|
+ // let temp = t.map(item => {
|
|
|
+ // return {
|
|
|
+ // X: 1 * item.x,
|
|
|
+ // Y: -item.y,
|
|
|
+ // Z: 0
|
|
|
+ // }
|
|
|
+ // })
|
|
|
+ // zoneObj.Outline.push([temp]);
|
|
|
+ // })
|
|
|
+ // }
|
|
|
// 至此
|
|
|
if (!zoneObj.Outline.length) {
|
|
|
zoneObj.Outline = null;
|
|
@@ -753,7 +754,7 @@ export default {
|
|
|
let selectSpace = this.scene.getSelectedSpaces();
|
|
|
let selectLikeSpace = this.scene.getSelectedLikeSpace();
|
|
|
//更新业务空间
|
|
|
- let zoneObj = { Outline: [], Height: 0, State: this.confirmAndSaveFlag ? 0 : this.curZoneItem.Infected ? 1 : 0 }, IspaceIdList = [];
|
|
|
+ let zoneObj = { Outline: [], Height: 0, State: this.confirmAndSaveFlag ? 0 : this.curZoneItem.isInfected ? 1 : 0 }, IspaceIdList = [];
|
|
|
// 空间
|
|
|
selectSpace.map(t => {
|
|
|
zoneObj.Outline.push(t.data.OutLine);
|
|
@@ -802,117 +803,133 @@ export default {
|
|
|
},
|
|
|
// 根据图批量创建所选业务空间
|
|
|
groupCreateZone() {
|
|
|
- // let arr = this.scene.getSelectedSpaces();
|
|
|
- // let createSpaces = [], spaces = {};
|
|
|
- // if (this.scene.cutItem || this.scene.sceneMark) {
|
|
|
- // // 如果有划分,求交集
|
|
|
- // // 格式为Poly(先与业务空间求差集)
|
|
|
- // const obj = this.scene.getZoneDifference(true);
|
|
|
- // // 差集与楼层平面图或用户划分区域求交集
|
|
|
- // spaces = this.scene.getPloyIntersect(obj)
|
|
|
- // } else {
|
|
|
- // // 格式为SPoint[]
|
|
|
- // spaces = this.scene.getZoneDifference();
|
|
|
- // }
|
|
|
- // for (let key in spaces) {
|
|
|
- // let zoneObj = { Outline: [], Height: 0 }
|
|
|
- // spaces[key].map(t => {
|
|
|
- // let temp = t.map(item => {
|
|
|
- // return {
|
|
|
- // X: 1 * item.x.toFixed(2),
|
|
|
- // Y: -item.y.toFixed(2),
|
|
|
- // Z: 0
|
|
|
- // }
|
|
|
- // })
|
|
|
- // zoneObj.Outline.push([temp]);
|
|
|
- // })
|
|
|
- // if (!zoneObj.Outline.length) {
|
|
|
- // continue
|
|
|
- // }
|
|
|
- // let curISP = this.sourceIdToISP[key];
|
|
|
- // if (curISP) {
|
|
|
- // zoneObj.Height = zoneObj.Height == 0 ? curISP.Height : zoneObj.Height > curISP.Height ? curISP.Height : zoneObj.Height;
|
|
|
- // zoneObj.IspaceId = curISP.RoomID;
|
|
|
- // zoneObj.RoomLocalName = curISP.RoomLocalName;
|
|
|
- // }
|
|
|
- // zoneObj.BuildingId = this.buildFloor[0];
|
|
|
- // zoneObj.FloorId = this.buildFloor[1];
|
|
|
- // createSpaces.push(zoneObj);
|
|
|
- // }
|
|
|
-
|
|
|
- // 改回之前逻辑
|
|
|
let arr = this.scene.getSelectedSpaces();
|
|
|
- let createSpaces = [];
|
|
|
- // 如果有划分,求交集
|
|
|
+ let createSpaces = [], spaces = {};
|
|
|
if (this.scene.cutItem || this.scene.sceneMark) {
|
|
|
- let outlines = this.scene.getIntersectInSpace();
|
|
|
- for (let k in outlines) {
|
|
|
- outlines[k] = outlines[k].map(t => {
|
|
|
- t = t.map(item => {
|
|
|
- item = item.map(j => {
|
|
|
- return { X: j.x, Y: -j.y, Z: 0 }
|
|
|
- })
|
|
|
- return item
|
|
|
- })
|
|
|
- return t;
|
|
|
- })
|
|
|
- }
|
|
|
- createSpaces = arr.map(t => {
|
|
|
- let line = outlines[t.data.SourceId];
|
|
|
- if (!line || !line.length) {
|
|
|
- return undefined
|
|
|
- } else {
|
|
|
- let area = 0;
|
|
|
- for (let i = 0; i < line.length; i++) {
|
|
|
- for (let j = 0; j < line[i].length; j++) {
|
|
|
- if (j == 0) {
|
|
|
- area += this.getarea(line[i][0]);
|
|
|
- } else {
|
|
|
- area -= this.getarea(line[i][j]);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- area = (area / 1000000).toFixed(2);
|
|
|
- if (area < (this.areaValue / 100)) {
|
|
|
- return undefined;
|
|
|
- }
|
|
|
- }
|
|
|
- return {
|
|
|
- IspaceId: this.BIMIDToSID[t.data.SourceId],
|
|
|
- RoomLocalName: this.BIMIDToSIName[t.data.SourceId],
|
|
|
- Outline: line,
|
|
|
- BuildingId: this.buildFloor[0],
|
|
|
- FloorId: this.buildFloor[1],
|
|
|
- Height: t.data.Height > 100 ? (t.data.Height / 1000).toFixed(2) : t.data.Height || 0
|
|
|
- }
|
|
|
- }).filter(item => item)
|
|
|
+ // 如果有划分,求交集
|
|
|
+ // 格式为Poly(先与业务空间求差集)
|
|
|
+ const obj = this.scene.getZoneDifference(true);
|
|
|
+ // 差集与楼层平面图或用户划分区域求交集
|
|
|
+ spaces = this.scene.getPloyIntersect(obj)
|
|
|
} else {
|
|
|
- createSpaces = arr.map(t => {
|
|
|
- let line = t.data.OutLine;
|
|
|
- if (!line || !line.length) {
|
|
|
- return undefined
|
|
|
- } else {
|
|
|
- let area = this.getarea(line[0]);
|
|
|
- if (line.length > 1) {
|
|
|
- for (let i = 1; i < line.length; i++) {
|
|
|
- area -= this.getarea(line[i]);
|
|
|
- }
|
|
|
+ // 格式为SPoint[]
|
|
|
+ spaces = this.scene.getZoneDifference();
|
|
|
+ }
|
|
|
+ for (let key in spaces) {
|
|
|
+ let zoneObj = { Outline: [], Height: 0 }
|
|
|
+ spaces[key].map(t => {
|
|
|
+ let temp = t.map(item => {
|
|
|
+ return {
|
|
|
+ X: 1 * item.x.toFixed(2),
|
|
|
+ Y: -item.y.toFixed(2),
|
|
|
+ Z: 0
|
|
|
}
|
|
|
- area = (area / 1000000).toFixed(2);
|
|
|
- if (area < (this.areaValue / 100)) {
|
|
|
- return undefined;
|
|
|
+ })
|
|
|
+ zoneObj.Outline.push([temp]);
|
|
|
+ })
|
|
|
+ if (!zoneObj.Outline.length) {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ //计算面积
|
|
|
+ let area = 0, line = zoneObj.Outline;
|
|
|
+ for (let i = 0; i < line.length; i++) {
|
|
|
+ for (let j = 0; j < line[i].length; j++) {
|
|
|
+ if (j == 0) {
|
|
|
+ area += this.getarea(line[i][0]);
|
|
|
+ } else {
|
|
|
+ area -= this.getarea(line[i][j]);
|
|
|
}
|
|
|
}
|
|
|
- return {
|
|
|
- IspaceId: this.BIMIDToSID[t.data.SourceId],
|
|
|
- RoomLocalName: this.BIMIDToSIName[t.data.SourceId],
|
|
|
- Outline: [line],
|
|
|
- BuildingId: this.buildFloor[0],
|
|
|
- FloorId: this.buildFloor[1],
|
|
|
- Height: t.data.Height > 100 ? (t.data.Height / 1000).toFixed(2) : t.data.Height || 0
|
|
|
- }
|
|
|
- }).filter(item => item);
|
|
|
+ }
|
|
|
+ area = (area / 1000000).toFixed(2);
|
|
|
+ if (area < (this.areaValue / 100)) {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ //生成空间对象
|
|
|
+ let curISP = this.sourceIdToISP[key];
|
|
|
+ if (curISP) {
|
|
|
+ zoneObj.Height = zoneObj.Height == 0 ? curISP.Height : zoneObj.Height > curISP.Height ? curISP.Height : zoneObj.Height;
|
|
|
+ zoneObj.IspaceId = curISP.RoomID;
|
|
|
+ zoneObj.RoomLocalName = curISP.RoomLocalName;
|
|
|
+ }
|
|
|
+ zoneObj.BuildingId = this.buildFloor[0];
|
|
|
+ zoneObj.FloorId = this.buildFloor[1];
|
|
|
+ createSpaces.push(zoneObj);
|
|
|
}
|
|
|
+
|
|
|
+ // 改回之前逻辑
|
|
|
+ // let arr = this.scene.getSelectedSpaces();
|
|
|
+ // let createSpaces = [];
|
|
|
+ // // 如果有划分,求交集
|
|
|
+ // if (this.scene.cutItem || this.scene.sceneMark) {
|
|
|
+ // let outlines = this.scene.getIntersectInSpace();
|
|
|
+ // for (let k in outlines) {
|
|
|
+ // outlines[k] = outlines[k].map(t => {
|
|
|
+ // t = t.map(item => {
|
|
|
+ // item = item.map(j => {
|
|
|
+ // return { X: j.x, Y: -j.y, Z: 0 }
|
|
|
+ // })
|
|
|
+ // return item
|
|
|
+ // })
|
|
|
+ // return t;
|
|
|
+ // })
|
|
|
+ // }
|
|
|
+ // createSpaces = arr.map(t => {
|
|
|
+ // let line = outlines[t.data.SourceId];
|
|
|
+ // if (!line || !line.length) {
|
|
|
+ // return undefined
|
|
|
+ // } else {
|
|
|
+ // let area = 0;
|
|
|
+ // for (let i = 0; i < line.length; i++) {
|
|
|
+ // for (let j = 0; j < line[i].length; j++) {
|
|
|
+ // if (j == 0) {
|
|
|
+ // area += this.getarea(line[i][0]);
|
|
|
+ // } else {
|
|
|
+ // area -= this.getarea(line[i][j]);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // area = (area / 1000000).toFixed(2);
|
|
|
+ // if (area < (this.areaValue / 100)) {
|
|
|
+ // return undefined;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // return {
|
|
|
+ // IspaceId: this.BIMIDToSID[t.data.SourceId],
|
|
|
+ // RoomLocalName: this.BIMIDToSIName[t.data.SourceId],
|
|
|
+ // Outline: line,
|
|
|
+ // BuildingId: this.buildFloor[0],
|
|
|
+ // FloorId: this.buildFloor[1],
|
|
|
+ // Height: t.data.Height > 100 ? (t.data.Height / 1000).toFixed(2) : t.data.Height || 0
|
|
|
+ // }
|
|
|
+ // }).filter(item => item)
|
|
|
+ // } else {
|
|
|
+ // createSpaces = arr.map(t => {
|
|
|
+ // let line = t.data.OutLine;
|
|
|
+ // if (!line || !line.length) {
|
|
|
+ // return undefined
|
|
|
+ // } else {
|
|
|
+ // let area = this.getarea(line[0]);
|
|
|
+ // if (line.length > 1) {
|
|
|
+ // for (let i = 1; i < line.length; i++) {
|
|
|
+ // area -= this.getarea(line[i]);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // area = (area / 1000000).toFixed(2);
|
|
|
+ // if (area < (this.areaValue / 100)) {
|
|
|
+ // return undefined;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // return {
|
|
|
+ // IspaceId: this.BIMIDToSID[t.data.SourceId],
|
|
|
+ // RoomLocalName: this.BIMIDToSIName[t.data.SourceId],
|
|
|
+ // Outline: [line],
|
|
|
+ // BuildingId: this.buildFloor[0],
|
|
|
+ // FloorId: this.buildFloor[1],
|
|
|
+ // Height: t.data.Height > 100 ? (t.data.Height / 1000).toFixed(2) : t.data.Height || 0
|
|
|
+ // }
|
|
|
+ // }).filter(item => item);
|
|
|
+ // }
|
|
|
if (createSpaces.length) {
|
|
|
this.canvasLoading = true;
|
|
|
this.groupCreateBSP(createSpaces)
|