|
@@ -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;
|
|
|
}
|
|
|
}
|