// //墙的四个点赋值给footLine // var footLine = Studio.builder.houseDraft.bottomLinePath; // // var box = new THREE.Box3().setFromPoints(worldPoints); // if (box.min.y > 0.1) { // isInFloor = false; // // this.updateBottomLines(); // // return; // } // // //判断是否有脚线 // if (footLine.length) { // var doorIsSave = false, doorIndex; // //Studio.builder.doors 全局门集合 与门点,墙点相对应 // //如果当前的门已经存在(在移动门时),记录当前门在全局门集合中的位置 // for (var i = 0; i < Studio.builder.doors.length; i++) { // if (this === Studio.builder.doors[i]) { // doorIndex = i; // doorIsSave = true; // } // } // if (isInFloor) { // //当门不存在时加入全局门集合 // if (!doorIsSave) { // Studio.builder.doors.push(this); // } // var doorPointA = worldPoints[0].clone(), doorPointB, wallPointAB = []; // doorPointA.y = 0; // // //得到门处于脚线的两点 // for (var i = 1; i < worldPoints.length; i++) { // if (!DXSUtils.floatEqual(worldPoints[i].x, doorPointA.x) || !DXSUtils.floatEqual(worldPoints[i].z, doorPointA.z)) { // doorPointB = worldPoints[i].clone(); // doorPointB.y = 0; // break; // } // } // //门所在面的两点 // for (var i = 0; i < this.wallPolygon.points.length; i++) { // if (this.wallPolygon.points[i].point.y < 0.0001) { // wallPointAB.push(this.wallPolygon.points[i].point); // } // } // //门点和墙点增加/更新 // if (!doorIsSave) { // Studio.builder.doorPoints.push(doorPointA, doorPointB); // Studio.builder.wallPoints.push(wallPointAB[0], wallPointAB[1]); // } else { // Studio.builder.doorPoints[doorIndex * 2] = doorPointA; // Studio.builder.doorPoints[doorIndex * 2 + 1] = doorPointB; // } // this.updateBottomLines(); // }else{//不落地 // if(doorIsSave){//更改为不落地后 // Studio.builder.doors.splice(doorIndex,1); // Studio.builder.doorPoints.splice(doorIndex*2,2); // Studio.builder.wallPoints.splice(doorIndex*2,2); // // this.updateBottomLines(); // } // this.updateBottomLines(); // } // // } // // }, // //更新脚线 // updateBottomLines: function () { // //原本脚线路径 // this.footLine = Studio.builder.houseDraft.bottomLinePath; // //遍历所有的门,算出最终的路径 // for (var i = 0; i < Studio.builder.doorPoints.length - 1; i += 2) { // Studio.builder.houseDraft.bottomLinePath = []; // var wallPointIndexA = i; // var wallPointIndexB = i + 1; // var footPointStart = -1; // var startPoint = -1; // //脚线路径中第一个门的某一个墙点位置 // for (var j = 0; j < this.footLine.length; j++) { // if (DXSUtils.pointEqual(this.footLine[j], Studio.builder.wallPoints[wallPointIndexA])) { // footPointStart = j; // break; // } // } // if (footPointStart == -1) { // console.log('没找到点'); // return; // } // //固定方向与顺序,使门所在墙的两点分别对应AB,footStart为墙A在墙点集中的位置 // var n = footPointStart + 1 >= this.footLine.length ? 0 : footPointStart + 1; // //当footPointStart为右上角点时执行 // //下一个墙节点不是wallPointIndexB // while (n !== footPointStart) { // //是墙结点且不属于indexB // if (this.judgePointInDoor(this.footLine[n])) { // n = n + 1 >= this.footLine.length ? 0 : n + 1; // continue; // } // else { // //进入下一个第一个墙点 // if (!DXSUtils.pointEqual(this.footLine[n], Studio.builder.wallPoints[wallPointIndexB])) { // var temp = Studio.builder.wallPoints[wallPointIndexA]; // Studio.builder.wallPoints[wallPointIndexA] = Studio.builder.wallPoints[wallPointIndexB]; // Studio.builder.wallPoints[wallPointIndexB] = temp; // while (1) { // if (footPointStart - 1 < 0) { // footPointStart = this.footLine.length - 1; // } else { // footPointStart -= 1; // } // if (!this.judgePointInDoor(this.footLine[footPointStart])) { // break; // } // } // break; // } else { // break; // } // } // // } // //固定方向与顺序,使顺序为 墙A,门A,门B,墙B,+1的顺序 // if (Studio.builder.wallPoints[wallPointIndexA].clone().sub(Studio.builder.doorPoints[wallPointIndexB]).lengthSq() < Studio.builder.wallPoints[wallPointIndexA].clone().sub(Studio.builder.doorPoints[wallPointIndexA]).lengthSq()) { // var temp = Studio.builder.doorPoints[wallPointIndexA]; // Studio.builder.doorPoints[wallPointIndexA] = Studio.builder.doorPoints[wallPointIndexB]; // Studio.builder.doorPoints[wallPointIndexB] = temp; // } // //计算初始点 // var nextPointJudge = footPointStart + 1; // if (nextPointJudge >= this.footLine.length) { // nextPointJudge = this.footLine.length - 1; // } // //中间是否存在门点,footPointStart为‘左上角’点下标 // startPoint = footPointStart; // if (this.judgePointInDoor(this.footLine[nextPointJudge])) { // var newPointDistance = Studio.builder.doorPoints[wallPointIndexA].distanceTo(this.footLine[footPointStart]); // var nextPointDistance = this.footLine[nextPointJudge].distanceTo(this.footLine[footPointStart]); // //新节点前有门节点 // if (newPointDistance > nextPointDistance) { // startPoint = (footPointStart + 2) - (this.footLine.length); // startPoint = startPoint < 0 ? startPoint + (this.footLine.length) : startPoint; // } // } // //这里的wallPointIndexA代表的是门点的第一个点,将新的门点插入到原本路径的前后 // Studio.builder.houseDraft.bottomLinePath.push(Studio.builder.doorPoints[wallPointIndexA].clone()); // var m = startPoint; // do { // Studio.builder.houseDraft.bottomLinePath.push(this.footLine[startPoint]); // if (--startPoint < 0) // startPoint = this.footLine.length - 1; // } while (m !== startPoint) // Studio.builder.houseDraft.bottomLinePath.push(Studio.builder.doorPoints[wallPointIndexB]); // this.footLine = []; // for (var k = 0; k < Studio.builder.houseDraft.bottomLinePath.length; k++) { // this.footLine.push(Studio.builder.houseDraft.bottomLinePath[k].clone()); // } // } // //切分脚线 // var newPath = true; // this.bottomLinePaths = []; // //顺逆时针处理 // var contour = []; // for (var j = 0; j < Studio.builder.houseDraft.bottomLinePath.length; j++) // contour.push(new THREE.Vector2(Studio.builder.houseDraft.bottomLinePath[j].x, Studio.builder.houseDraft.bottomLinePath[j].z)); // if (contour) { // var order = THREE.ShapeUtils.area(contour); // } else { // return; // } // if (order < 0 && Studio.builder.houseDraft.bottomLinePath.length > 6) { // Studio.builder.houseDraft.bottomLinePath.reverse(); // } // for (var i = 0; i < Studio.builder.houseDraft.bottomLinePath.length; i++) { // if (!i || newPath) { // var segmentFootLinePath = []; // segmentFootLinePath.push(Studio.builder.houseDraft.bottomLinePath[i]); // newPath = false; // continue; // } // segmentFootLinePath.push(Studio.builder.houseDraft.bottomLinePath[i]); // if (this.judgePointInDoor(Studio.builder.houseDraft.bottomLinePath[i])) { // this.bottomLinePaths.push(segmentFootLinePath); // newPath = true; // } // } // this.updateSegmentLines();
切脚线原代码
最新推荐文章于 2019-06-27 21:24:23 发布