tremble 6 years ago
parent
commit
2f12ea6346
6 changed files with 67 additions and 34 deletions
  1. 4 0
      assets/js/jquery.min.js
  2. 8 0
      assets/js/jquery.mousewheel.min.js
  3. 1 0
      assets/js/numbers.min.js
  4. 3 3
      index.html
  5. 9 4
      js/main.js
  6. 42 27
      js/util.js

File diff suppressed because it is too large
+ 4 - 0
assets/js/jquery.min.js


File diff suppressed because it is too large
+ 8 - 0
assets/js/jquery.mousewheel.min.js


File diff suppressed because it is too large
+ 1 - 0
assets/js/numbers.min.js


+ 3 - 3
index.html

@@ -5,9 +5,9 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge" />
     <title>Page Title</title>
     <meta name="viewport" content="width=device-width, initial-scale=1" />
-    <script src="https://cdn.bootcss.com/jquery/2.2.3/jquery.min.js"></script>
-    <script src="https://cdn.bootcss.com/jquery-mousewheel/3.1.13/jquery.mousewheel.min.js"></script>
-    <script src="https://cdn.bootcss.com/numbers.js/0.7.0/numbers.min.js"></script>
+    <script src="assets/js/jquery.min.js"></script>
+    <script src="assets/js/jquery.mousewheel.min.js"></script>
+    <script src="assets/js/numbers.min.js"></script>
     <link rel="stylesheet" href="./css/style.css" />
   </head>
   <body>

+ 9 - 4
js/main.js

@@ -125,6 +125,7 @@ var faceArr = [
 var verticalLine=[]
 
 var verticalArr = []
+var verticalVec = []
 
 var selectArray;
 var selectArr;
@@ -188,8 +189,10 @@ function draw() {
       scaleTime,
       scaleTimeH
     )[1];
+    
     verticalArr = findverticalLine(selectVerticalLine,rx1).lineAry
-
+    verticalVec = findverticalLine(selectVerticalLine,rx1).verticalVec
+    
     selectArr = selectArray["arr"];
     selectArrIdx = faceArr[selectArray["id"]];
     // selectArr = [lineArr[1],lineArr[22],lineArr[11],lineArr[21]]
@@ -212,7 +215,7 @@ function draw() {
       if (isScale) {
         distance = deltaFactor * e.deltaY * scaleAccuracy;
 
-        lineArr = updateLineArr(distance, lineArr, rx1, selectArray["id"], verticalArr,selectArrIdx);
+        lineArr = updateLineArr(distance, lineArr, rx1, r2x,selectArrIdx,verticalVec);
         selectArrIdx = faceArr[selectArray["id"]];
 
         selectArr = updateSelectArr(lineArr, selectArrIdx);
@@ -233,8 +236,9 @@ function draw() {
     if (isScale) {
       if (e.keyCode == 38) {
         distance = deltaFactor * 1 * scaleAccuracy;
-        lineArr = updateLineArr(distance, lineArr, rx1, selectArray["id"]);
+        lineArr = updateLineArr(distance, lineArr, rx1, r2x,selectArrIdx,verticalVec);
         selectArrIdx = faceArr[selectArray["id"]];
+
         selectArr = updateSelectArr(lineArr, selectArrIdx);
         selectDragLine(
           context,
@@ -247,8 +251,9 @@ function draw() {
         );
       } else if (e.keyCode == 40) {
         distance = deltaFactor * -1 * scaleAccuracy;
-        lineArr = updateLineArr(distance, lineArr, rx1, selectArray["id"]);
+        lineArr = updateLineArr(distance, lineArr, rx1, r2x,selectArrIdx,verticalVec);
         selectArrIdx = faceArr[selectArray["id"]];
+
         selectArr = updateSelectArr(lineArr, selectArrIdx);
         selectDragLine(
           context,

+ 42 - 27
js/util.js

@@ -569,43 +569,58 @@ function isInFace(current, test, scaleTime, scaleTimeH) {
     );
 }
 
+// 最简单数组去重法
+/*
+* 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中
+* IE8以下不支持数组的indexOf方法
+* */
+function uniq(array){
+    var temp = []; //一个新的临时数组
+    for(var i = 0; i < array.length; i++){
+        if(temp.indexOf(array[i]) == -1){
+            temp.push(array[i]);
+        }
+    }
+    return temp;
+}
+
+
+function get3dLinePoint(arr,fullPoint) {
+    let temp = []
+    for (let i = 0; i < arr.length; i++) {
+        temp.push(arr[i]['3d_point1'])
+        temp.push(arr[i]['3d_point2'])
+    }
+    return uniq(temp)
+}
+
 /**
  * 更新墙体线段的位置
  * @param {缩放的大小} distance
  * @param {墙体线段} lineArr
  */
-function updateLineArr(distance, lineArr, _3dPoint, tag, verticalArr,selectArr) {
+function updateLineArr(distance, lineArr, _3dLineArr, _3dPoint,selectArr,verticalVec) {
     // deltaX:值为负的(-1),则表示滚轮向左滚动。值为正的(1),则表示滚轮向右滚动。
     // deltaY:值为负的(-1),则表示滚轮向下滚动。值为正的(1),则表示滚轮向上滚动。
     // deltaFactor:增量因子。通过 deltaFactor * deltaX 或者 deltaFactor * deltaY 可以得到浏览器实际的滚动距离。
     // distance = -10
-
+    let selectLine = []
+    
     for (let i = 0; i < selectArr.length; i++) {
-        console.log(_3dPoint[selectArr[i]]);
-        
-    }
-
-    var xl = [1*distance,0*distance,0*distance]
-    for (let i = 0; i < verticalArr.length; i++) {
-        
-        // _3dPoint[i] = [_3dPoint[i][0]+xl[0],_3dPoint[i][1]+xl[1],_3dPoint[i][2]+xl[2]]
-        // _3dPoint[i] = [_3dPoint[i][0]+xl[0],_3dPoint[i][1]+xl[1],_3dPoint[i][2]+xl[2]]
-        // _3dPoint[verticalArr[i]] = [_3dPoint[verticalArr[i]]['3d_point1']]
-        console.log('verticalArr',_3dPoint[verticalArr[i]]);
-    }
-
-    // if (tag) {
-    //     _3dPoint[2][0] += distance
-    //     _3dPoint[3][0] += distance
-    //     _3dPoint[((_3dPoint.length) / 2 + 2)][0] += distance
-    //     _3dPoint[((_3dPoint.length) / 2 + 3)][0] += distance
-    // } else {
-    //     _3dPoint[1][1] += distance
-    //     _3dPoint[2][1] += distance
-    //     _3dPoint[((_3dPoint.length) / 2 + 1)][1] += distance
-    //     _3dPoint[((_3dPoint.length) / 2 + 2)][1] += distance
-    // }
-    rx1 = _3dLine(r2x, r3x, ret);
+        selectLine.push(_3dLineArr[selectArr[i]])
+    }
+    
+    let _3dLinePoint = get3dLinePoint(selectLine)
+    for (let i = 0; i < _3dLinePoint.length; i++) {
+        for (let j = 0; j < _3dPoint.length; j++) {
+            if (_3dLinePoint[i].toString() === _3dPoint[j].toString()) {
+                    _3dPoint[j][0] += distance * Math.abs(verticalVec[0])
+                    _3dPoint[j][1] += distance * Math.abs(verticalVec[1])
+            }            
+        }
+    }
+
+    rx1 = _3dLine(_3dPoint, r3x, ret);
 
     lineArr = _3dTo2d(
         make_matrix_from_quat([