Fangyizhuo 6 anni fa
parent
commit
065b467811
2 ha cambiato i file con 77 aggiunte e 25 eliminazioni
  1. 23 6
      js/main.js
  2. 54 19
      js/util.js

+ 23 - 6
js/main.js

@@ -3,7 +3,7 @@
 var r2x = [
   // 俯视面
   [-1.92, 0.034, 1.5],
-  [-1.92, 0.284, 1.5],
+  [-2.92, 0.284, 1.5],
   [-6.02, 0.284, 1.5],
   [-6.02, 3.934, 1.5],
   [2.53, 3.934, 1.5],
@@ -15,7 +15,7 @@ var r2x = [
 
   // 仰视面
   [-1.92, 0.034, -1.5],
-  [-1.92, 0.284, -1.5],
+  [-2.92, 0.284, -1.5],
   [-6.02, 0.284, -1.5],
   [-6.02, 3.934, -1.5],
   [2.53, 3.934, -1.5],
@@ -124,9 +124,12 @@ var faceArr = [
 
 var verticalLine=[]
 
+var verticalArr = []
+
 var selectArray;
 var selectArr;
 var selectArrIdx;
+var selectVerticalLine;
 var rx1 = _3dLine(r2x, r3x, ret);
 
 img.onload = function() {
@@ -148,6 +151,8 @@ function draw() {
   context.lineWidth = w / 250;
   // 生成3d格式数据
   fix3dLineArr(rx1,faceArr)
+ 
+  
   var lineArr = _3dTo2d(
     make_matrix_from_quat([
       0.008515,
@@ -171,9 +176,19 @@ function draw() {
       lineArr,
       faceArr,
       current,
+      rx1,
+      scaleTime,
+      scaleTimeH
+    )[0];
+    selectVerticalLine = selectWhichFace(
+      lineArr,
+      faceArr,
+      current,
+      rx1,
       scaleTime,
       scaleTimeH
-    );
+    )[1];
+    verticalArr = findverticalLine(selectVerticalLine,rx1)
     selectArr = selectArray["arr"];
     selectArrIdx = faceArr[selectArray["id"]];
     // selectArr = [lineArr[1],lineArr[22],lineArr[11],lineArr[21]]
@@ -195,8 +210,10 @@ function draw() {
     (function() {
       if (isScale) {
         distance = deltaFactor * e.deltaY * scaleAccuracy;
-        lineArr = updateLineArr(distance, lineArr, r2x, selectArray["id"]);
+
+        lineArr = updateLineArr(distance, lineArr, rx1, selectArray["id"], verticalArr,selectArrIdx);
         selectArrIdx = faceArr[selectArray["id"]];
+
         selectArr = updateSelectArr(lineArr, selectArrIdx);
         selectDragLine(
           context,
@@ -215,7 +232,7 @@ function draw() {
     if (isScale) {
       if (e.keyCode == 38) {
         distance = deltaFactor * 1 * scaleAccuracy;
-        lineArr = updateLineArr(distance, lineArr, r2x, selectArray["id"]);
+        lineArr = updateLineArr(distance, lineArr, rx1, selectArray["id"]);
         selectArrIdx = faceArr[selectArray["id"]];
         selectArr = updateSelectArr(lineArr, selectArrIdx);
         selectDragLine(
@@ -229,7 +246,7 @@ function draw() {
         );
       } else if (e.keyCode == 40) {
         distance = deltaFactor * -1 * scaleAccuracy;
-        lineArr = updateLineArr(distance, lineArr, r2x, selectArray["id"]);
+        lineArr = updateLineArr(distance, lineArr, rx1, selectArray["id"]);
         selectArrIdx = faceArr[selectArray["id"]];
         selectArr = updateSelectArr(lineArr, selectArrIdx);
         selectDragLine(

+ 54 - 19
js/util.js

@@ -82,6 +82,7 @@ function _3dLine(r2x, r3x, ret) {
         ret_t[i][1] = r2x_t[r3x_t[i][1]];
     }
 
+
     return ret;
 }
 
@@ -500,6 +501,7 @@ function _calculateMiddlePoint(test, scaleTime, scaleTimeH) {
             maxY = Math.max(maxY, test[i].line[j][1]);
         }
     }
+
     return [
         ((maxX - minX) / 2 + minX) * scaleTime,
         ((maxY - minY) / 2 + minY) * scaleTimeH
@@ -572,25 +574,48 @@ function isInFace(current, test, scaleTime, scaleTimeH) {
  * @param {缩放的大小} distance
  * @param {墙体线段} lineArr
  */
-function updateLineArr(distance, lineArr, _3dPoint, tag) {
+function updateLineArr(distance, lineArr, _3dPoint, tag, verticalArr,selectArr) {
     // deltaX:值为负的(-1),则表示滚轮向左滚动。值为正的(1),则表示滚轮向右滚动。
     // deltaY:值为负的(-1),则表示滚轮向下滚动。值为正的(1),则表示滚轮向上滚动。
     // deltaFactor:增量因子。通过 deltaFactor * deltaX 或者 deltaFactor * deltaY 可以得到浏览器实际的滚动距离。
     // distance = -10
 
-    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
-    }
+    for (let i = 0; i < selectArr.length; i++) {
+        console.log('====================================');
+        console.log(_3dPoint[selectArr[i]]);
+        console.log('====================================');
+        
+    }
+    console.log('====================================');
+    console.log(selectArr);
+    console.log('====================================');
+    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('====================================');
+        console.log(_3dPoint[verticalArr[i]]);
+        console.log('====================================');
+    }
+
+    // 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);
 
+    console.log('====================================');
+    console.log(rx1);
+    console.log('====================================');
     lineArr = _3dTo2d(
         make_matrix_from_quat([
             0.008515,
@@ -617,26 +642,33 @@ function updateSelectArr(lineArr, idxArr) {
     return ret
 }
 
-function _culaculateFaceArr(lineArr, faceArr) {
+function _culaculateFaceArr(lineArr, faceArr, _3dLine) {
     var ret = [];
+    var ret1 = []
     for (var i = 0; i < faceArr.length; i++) {
         var item = [];
+        var item1 = []
         for (var j = 0; j < faceArr[i].length; j++) {
+            item1.push(_3dLine[faceArr[i][j]]['3d_id'])
             item.push(lineArr[faceArr[i][j]]);
+            // item1.push(_3dLine)
         }
         ret.push({
             id: i,
             arr: item
         });
+        ret1.push(item1)
     }
 
-    return ret;
+    return [ret,ret1];
 }
 
-function selectWhichFace(lineArr, faceArr, current, scaleTime, scaleTimeH) {
-    var allFaceArr = _culaculateFaceArr(lineArr, faceArr);
+function selectWhichFace(lineArr, faceArr, current, _3dLine, scaleTime, scaleTimeH) {
+    var retArr = _culaculateFaceArr(lineArr, faceArr,_3dLine);
+    var allFaceArr = retArr[0]
+    var all3DArr = retArr[1]
+
     var ret = 0;
-    var tempRet = 0;
     var minDist =
         faceArr &&
         _calculateMiddlePointDistance(
@@ -662,7 +694,9 @@ function selectWhichFace(lineArr, faceArr, current, scaleTime, scaleTimeH) {
             }
         }
     }
-    return allFaceArr[ret];
+
+    
+    return [allFaceArr[ret],all3DArr[ret]];
 }
 
 /**
@@ -670,7 +704,8 @@ function selectWhichFace(lineArr, faceArr, current, scaleTime, scaleTimeH) {
 * @param {array} faceLine 面的索引数组
 * @return {object} verticalLineData
 */
-function findverticalLine(faceLine) {
+function findverticalLine(faceLine,n_panorama_line_3d) {
+
     let lineAry = [];
     let verticalLineData = {
         lineAry: [],