切脚线原代码

// //墙的四个点赋值给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();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值