xzw 7 mesi fa
parent
commit
65f6c3ec94
2 ha cambiato i file con 63 aggiunte e 12 eliminazioni
  1. 62 11
      public/lib/potree/potree.js
  2. 1 1
      public/lib/potree/potree.js.map

+ 62 - 11
public/lib/potree/potree.js

@@ -6740,6 +6740,11 @@
 	  }
 	  return v;
 	};
+	Curve.prototype.getPointAt = function (u, optionalTarget) {
+	  var t = this.getUtoTmapping(u);
+	  this.UtoTMapArr && this.UtoTMapArr.push(t); //add
+	  return this.getPoint(t, optionalTarget);
+	};
 
 	var MathLight = {};
 	MathLight.RADIANS_PER_DEGREE = Math.PI / 180;
@@ -22903,7 +22908,7 @@
 	  showNeighSetGui: browser.urlHasValue('neighGui'),
 	  selectShowBox: true,
 	  //fastTran: isTest
-	  pathSmooth: true //true //smooth曲线, 非折线
+	  pathSmooth: false //true//true //smooth曲线, 非折线
 	};
 	Potree.config = config$1;
 	Potree.settings = settings;
@@ -42629,10 +42634,8 @@
 	        this.edge.addEventListener('mousemove', e => {
 	          if (this.addOrRemovePoint && !this.isNew && !this.hoverStates.marker) {
 	            var {
-	              index,
-	              prevIndex,
 	              point
-	            } = this.getPosByIntersect(e);
+	            } = this.getPosByIntersect(e, 'onlyPoint');
 	            showFakeMarker(this, point);
 	          }
 	        });
@@ -42710,17 +42713,60 @@
 	  else if(add == 1)  return (index + 1 > lastIndex) ? 0 : index + 1; 
 	  }
 	     */
-	  getPosByIntersect(e) {
+	  getPosByIntersect(e, type) {
 	    //intersect落在线上的位置
 	    /* let prevIndex = Math.floor(e.hoveredElement.faceIndex / 2) //端点1(可能是最后一个)
 	    let nextIndex = this.getIndex(prevIndex, 1) //端点2(可能是第一个)
 	    let index = prevIndex + 1 //新点在端点1后
 	    let point = math.getFootPoint(e.hoveredElement.point, this.points[prevIndex], this.points[nextIndex] );
 	    return {index, prevIndex, point }  */
-	    var prevIndex = Math.floor(e.hoveredElement.faceIndex / 2); //端点1(可能是最后一个)
-	    var nextIndex = this.getIndex(prevIndex, 1); //端点2(可能是第一个)
-	    var index = prevIndex + 1; //新点在端点1后
-	    var point = math.getFootPoint(e.hoveredElement.point, this.geoPoints[prevIndex], this.geoPoints[nextIndex]);
+	    var prevIndex0 = Math.floor(e.hoveredElement.faceIndex / 2); //端点1(可能是最后一个)
+	    var nextIndex0 = prevIndex0 + 1; //端点2(可能是第一个)
+
+	    var point = math.getFootPoint(e.hoveredElement.point, this.geoPoints[prevIndex0], this.geoPoints[nextIndex0]);
+	    //if(type == 'onlyPoint')return point
+
+	    var prevIndex, nextIndex;
+	    var count = this.points.length - 1;
+	    for (var i = 0; i < count; i++) {
+	      if (prevIndex == void 0 && i / count <= this.UtoTMapArr[prevIndex0] && (i + 1) / count > this.UtoTMapArr[prevIndex0]) {
+	        prevIndex = i; //在i之后
+	      }
+	      if (nextIndex == void 0 && i / count <= this.UtoTMapArr[nextIndex0] && (i + 1) / count > this.UtoTMapArr[nextIndex0]) {
+	        nextIndex = i;
+	      }
+	    }
+	    if (nextIndex == void 0) {
+	      //最后一段
+	      nextIndex = count - 1;
+	    }
+	    if (prevIndex != nextIndex) {
+	      //所在区跨点。  
+	      console.log('跨点', prevIndex, nextIndex);
+	      this.geoPoints[prevIndex];
+	      var lengths = [];
+	      var j = prevIndex;
+	      var A = this.geoPoints[prevIndex0];
+	      var B = this.geoPoints[nextIndex0];
+	      var APlen = A.distanceTo(point); // 端点->点击点
+	      var AB = new Vector3().subVectors(B, A);
+	      var searchIndex;
+	      while (j < nextIndex) {
+	        var len = AB.clone().normalize().dot(new Vector3().subVectors(this.points[j + 1], A)); //在AB的投影长度
+	        if (len > APlen) {
+	          searchIndex = j;
+	          break;
+	        }
+	        j++;
+	      }
+	      searchIndex || (searchIndex = nextIndex);
+	      nextIndex = searchIndex;
+	      prevIndex = nextIndex - 1;
+	    } else {
+	      nextIndex = prevIndex + 1;
+	    }
+	    console.log(prevIndex, nextIndex);
+	    var index = prevIndex0 + 1; //新点在端点1后
 	    return {
 	      index,
 	      prevIndex,
@@ -42818,9 +42864,10 @@
 	      if (Potree.settings.pathSmooth) {
 	        //使用曲线
 	        var line = new CatmullRomCurve3(points, false);
+	        line.UtoTMapArr = [];
 	        //window.arcLengthDivisions  && (line.arcLengthDivisions = arcLengthDivisions) //默认200,但改为1也没变化呀
 	        count = Math.max(2, Math.round(this.getTotalDistance() * 400)), points = line.getSpacedPoints(count - 1); //拆分为更密集的点
-
+	        this.UtoTMapArr = [];
 	        //减少点数(拐弯的部分紧凑些,直线部分宽松些)
 	        var lastVec;
 	        var newPoints = [];
@@ -42828,7 +42875,10 @@
 	          var point = points[i];
 	          var last = points[i - 1];
 	          var next = points[i + 1];
-	          if (i == 0 || i == count - 1) newPoints.push(point); //直接加入
+	          if (i == 0 || i == count - 1) {
+	            newPoints.push(point); //直接加入
+	            this.UtoTMapArr.push(i == 0 ? 0 : 1);
+	          }
 	          if (i < count - 1) {
 	            var curVec = new Vector3().subVectors(next, point);
 	            if (!lastVec) lastVec = curVec;
@@ -42837,6 +42887,7 @@
 	              if (curVec.angleTo(lastVec) > 0.05) {
 	                //最小角度
 	                newPoints.push(point);
+	                this.UtoTMapArr.push(line.UtoTMapArr[i]);
 	                lastVec = curVec;
 	              }
 	            }

File diff suppressed because it is too large
+ 1 - 1
public/lib/potree/potree.js.map