diff --git a/src/components/content/tunnelScene/TunnelScene.vue b/src/components/content/tunnelScene/TunnelScene.vue index 5387c3d..c727dbf 100644 --- a/src/components/content/tunnelScene/TunnelScene.vue +++ b/src/components/content/tunnelScene/TunnelScene.vue @@ -3,34 +3,17 @@
- - + + ">

是否确定删除该设备

@@ -148,7 +131,7 @@ function loadModel(path) { (obj) => { resolve(obj); }, - (xhr) => {}, + (xhr) => { }, (err) => { reject(err); } @@ -244,12 +227,14 @@ function handleConfirmAddEqu() { type: "success", }); }) - .catch((res) => { - ElMessage({ - message: "删除失败!", - type: "warning", + .catch( + (res) => { + console.log(res); + ElMessage({ + message: "删除失败!", + type: "warning", + }); }); - }); } // 处理取消关闭编辑框事件 function handleCancel() { diff --git a/src/components/content/tunnelScene/sceneClass/editEquipment/index.js b/src/components/content/tunnelScene/sceneClass/editEquipment/index.js index 5d5b827..076bef6 100644 --- a/src/components/content/tunnelScene/sceneClass/editEquipment/index.js +++ b/src/components/content/tunnelScene/sceneClass/editEquipment/index.js @@ -33,10 +33,15 @@ function addEquipment(targetPoint, formInfo) { this.clearTagsObj(); } +//判断墙是否已经存在,如果存在的话,就不管,添加则无效嘛(就是说只能添加一面墙,如果存在一面墙,则不管了) +let hasWall = false +let wallHang = 0; + // function handleValveEqu(targetPoint, equipmentInfo) { // } -// let allline = new Array(); +let allline = new Array(); +let Allhang = new Array(); // 其他传感器 function handleOtherEqu(targetPoint, equipmentInfo) { const equMesh = this.equMap.get("equ_sensors").clone(); @@ -67,7 +72,76 @@ function handleOtherEqu(targetPoint, equipmentInfo) { targetPoint.scale.set(0.03, 0.06, 0.05); this.scene.add(equMesh); targetPoint.visible = false; - targetPoint.hasWall = true; + // targetPoint.hasWall = true; + allline.push(targetPoint.name) + if (hasWall == false) { + let findWallHang = new Array; + // console.log(targetPoint.name); + console.log(allline); + Allhang = allline.map(function (str) { + return parseInt(str.match(/\d+/)[0], 10); + }) + console.log(Allhang); + //将取出来的所有行数字符串用一个新数组来保存,之后判断是不是存在同一行的(即相同的行数) + for (let i = 0; i < Allhang.length; i++) { + //判断是不是存在相同的行数,如果存在,则继续判断是不是存在左右的传感器 + findWallHang.push(Allhang[i - 1]) + if (findWallHang.includes(Allhang[i])) { + console.log(allline[i - 1].slice(-1)); + console.log(allline[i].slice(-1)); + wallHang = Allhang[i]; + let sameHang = findWallHang.indexOf(Allhang[i]) + if ((allline[sameHang - 1].slice(-1) == 'r' && allline[i].slice(-1) == 'l') || allline[sameHang - 1].slice(-1) == 'l' && allline[i].slice(-1) == 'r') { + console.log('进行添加操作'); + // 将这二个符合添加规则的锚点给设一个属性,这样方便之后我们进行删除操作 + // this.scene.getObjectByName(allline[i - 1]).hasWall = true + // this.scene.getObjectByName(allline[i]).hasWall = true + console.log(this.scene.getObjectByName(allline[i - 1])); + console.log(this.scene.getObjectByName(allline[i])); + //出现满足条件的风压阀了,这时候就设定为已经有墙了,不需要再添加了 + hasWall = true + findWallHang = [] + //进行添加操作,因为数值问题,所以我们分开进行添加操作 + for (let line = Allhang[i]; line <= 20; line++) { + if (line < 10) { + let wall = 'wall_' + '0' + line + console.log(wall); + //把墙设为可见 + this.scene.getObjectByName(wall).visible = true + let point = 'point_' + '00' + line + '_tc' + // console.log(this.scene.getObjectByName(point)); + //把顶部的附着点设为隐藏!!!,然后设为不可选中 + this.scene.getObjectByName(point).visible = false + this.scene.getObjectByName(point).layers.set(-2) + //如果最中间一行有设备,我们则需要将设备进行隐藏!!! + if (this.scene.getObjectByName(point).hasDevice == true) { + let EquID = this.scene.getObjectByName(point).info.id + this.scene.getObjectById(EquID).visible = false + } + } else if (line >= 10) { + let wall = 'wall_' + line + this.scene.getObjectByName(wall).visible = true + let point = 'point_' + '0' + line + '_tc' + this.scene.getObjectByName(point).visible = false + this.scene.getObjectByName(point).layers.set(-2) + if (this.scene.getObjectByName(point).hasDevice == true) { + let EquID = this.scene.getObjectByName(point).info.id + this.scene.getObjectById(EquID).visible = false + } + } + //处理21行的设备和附着点 + let point = 'point_' + '0' + 21 + '_tc' + this.scene.getObjectByName(point).visible = false + this.scene.getObjectByName(point).layers.set(-2) + if (this.scene.getObjectByName(point).hasDevice == true) { + let EquID = this.scene.getObjectByName(point).info.id + this.scene.getObjectById(EquID).visible = false + } + } + } + } + } + } //处理风压阀的代码片段 // let lineIndex = targetPoint.name.slice(7, 9); // if (allline.includes(Number(lineIndex))) { @@ -92,9 +166,11 @@ function handleOtherEqu(targetPoint, equipmentInfo) { ...equipmentInfo, }; //下面进行模拟分压阀的添加效果 - // 1.先取出当前点击添加设备锚点的行数 - // 2.再进行字符串拼接出墙的名字,使用scene.getObjectByName(墙名去获取) - // 3.加上循环,固定到20结束就可以了,将点击的函数到20的函数的墙全部设为visable设为可见,还需要将中间的那行设备和附着点全部设为隐藏,且层级变低,无法选中 + // 1. 不能放在初始化的地方去写,我们最好放在同一行的地方去写,当用户每添加一个模型,就判断是不是该行已经添加过了多个模型了 + // 2.如果是的话,我们必须判断是不是左右同时添加的情况,如果是的话则则可以加一个墙 + + // 0. 首先需要定义一个变量,看墙是否已经添加了,如果已经添加的话,则直接跳出不管(因为只会有二个风压阀生成的墙) + // 1. 每添加一个则将附着点保存到数组里面,然后对数组里面进行第一遍过滤,将相同行数的提取出来,如果存在左右的话,则进行墙的展示(里面套for循环将后面的墙全部打开,并且将该行上面的附着点全部隐藏,包括设备和层级!!!) } // 风机 @@ -137,43 +213,55 @@ function handleFanEqu( function removeEquipment(targetPoint) { //删除设备这里需要再进行处理,就是根据附着点(附着点一定保存了当前添加设备的信息了)判断是不是分压阀,然后继续一样的隐藏 if (!targetPoint.hasDevice) return; - // if (targetPoint.hasWall == true) { - // let lineIndex = targetPoint.name.slice(7, 9); - // for (let line = Number(lineIndex); line <= 20; line++) { - // if (line < 10) { - // let wall = "wall_" + "0" + line; - // this.scene.getObjectByName(wall).visible = false; - // let point = "point_" + "00" + line + "_tc"; - // console.log(this.scene.getObjectByName(point)); - // this.scene.getObjectByName(point).visible = true; - // this.scene.getObjectByName(point).layers.set(0); - // if (this.scene.getObjectByName(point).hasDevice == true) { - // this.scene.getObjectByName(point).visible = false; - // let EquID = this.scene.getObjectByName(point).info.id; - // this.scene.getObjectById(EquID).visible = true; - // } - // } else if (line >= 10) { - // let wall = "wall_" + line; - // this.scene.getObjectByName(wall).visible = false; - // let point = "point_" + "0" + line + "_tc"; - // this.scene.getObjectByName(point).visible = true; - // this.scene.getObjectByName(point).layers.set(0); - // if (this.scene.getObjectByName(point).hasDevice == true) { - // this.scene.getObjectByName(point).visible = false; - // let EquID = this.scene.getObjectByName(point).info.id; - // this.scene.getObjectById(EquID).visible = true; - // } - // } - // //处理21行的设备和附着点 - // let point = "point_" + "0" + 21 + "_tc"; - // this.scene.getObjectByName(point).visible = true; - // this.scene.getObjectByName(point).layers.set(0); - // if (this.scene.getObjectByName(point).hasDevice == true) { - // let EquID = this.scene.getObjectByName(point).info.id; - // this.scene.getObjectById(EquID).visible = true; - // } - // } - // } + + + //删除我们这里使用行数来判断,即是不是删除到了我们的那一行呢? + //如果删除到了我们那行的话,我们必须将行的数组从中去掉已存在的数据,然后将附着点列表中也去除这个点,然后将墙设置为false来让下次使用 + + let lineIndex = targetPoint.name.slice(7, 9) + deleteItem(allline, targetPoint.name) + if (Number(lineIndex) == wallHang) { + wallHang = 0; + hasWall = false + for (let line = Number(lineIndex); line <= 20; line++) { + if (line < 10) { + let wall = 'wall_' + '0' + line + this.scene.getObjectByName(wall).visible = false + let point = 'point_' + '00' + line + '_tc' + console.log(this.scene.getObjectByName(point)); + this.scene.getObjectByName(point).visible = true + this.scene.getObjectByName(point).layers.set(0) + if (this.scene.getObjectByName(point).hasDevice == true) { + this.scene.getObjectByName(point).visible = false + let EquID = this.scene.getObjectByName(point).info.id + this.scene.getObjectById(EquID).visible = true + } + } else if (line >= 10) { + let wall = 'wall_' + line + this.scene.getObjectByName(wall).visible = false + let point = 'point_' + '0' + line + '_tc' + this.scene.getObjectByName(point).visible = true + this.scene.getObjectByName(point).layers.set(0) + if (this.scene.getObjectByName(point).hasDevice == true) { + this.scene.getObjectByName(point).visible = false + let EquID = this.scene.getObjectByName(point).info.id + this.scene.getObjectById(EquID).visible = true + } + } + //处理21行的设备和附着点 + let point = 'point_' + '0' + 21 + '_tc' + this.scene.getObjectByName(point).visible = true + this.scene.getObjectByName(point).layers.set(0) + if (this.scene.getObjectByName(point).hasDevice == true) { + let EquID = this.scene.getObjectByName(point).info.id + this.scene.getObjectById(EquID).visible = true + } + } + } + deleteItem(Allhang, Number(lineIndex)) + + + console.log("测试是不是删除了"); const mesh = this.scene.getObjectById(targetPoint.info.id); this.scene.remove(mesh); @@ -183,3 +271,12 @@ function removeEquipment(targetPoint) { delete targetPoint.info; // 清空设备信息 } export { addEquipment, removeEquipment }; + + +function deleteItem(array, item) { + let index = array.indexOf(item); + if (index !== -1) { + array.splice(index, 1); + } + return array +} \ No newline at end of file