|
@@ -81490,6 +81490,8 @@ void main()
|
|
|
|| !e.isAtDomElement && this.isNew//如果是刚添加时在其他dom点击, 不要响应
|
|
|
|| e.hoverViewport != viewer.mainViewport && this.unableDragAtMap //垂直的测量线不允许在地图上放点
|
|
|
|| this.isNew && !getDifferentPoint(this.points, this.points.length ) //不允许和之前的点相同, 但这句在点云稀疏时会导致难结束
|
|
|
+ || this.isNew && (Date.now() - this.beginAddTime) < Potree.config.clickMaxPressTime && e.pressDistance < Potree.config.clickMaxDragDis/* && e.pressTime<Potree.config.clickMaxPressTime */ //有的设备过于灵敏,点击一下就结束测量了,是因为滑动了被判断为拖拽。所以判断下如果滑动距离过近不时间过短就算单击
|
|
|
+
|
|
|
)
|
|
|
){
|
|
|
return this.continueDrag(null,e)
|
|
@@ -82013,12 +82015,18 @@ void main()
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
|
|
|
+ /* viewer.addEventListener('camera_changed',(e)=>{
|
|
|
+ if(e.changeInfo.positionChanged){
|
|
|
+ setLabelPos()
|
|
|
+ }
|
|
|
+ }) */
|
|
|
|
|
|
|
|
|
let setEdgeLabel = (label,p1,p2,distance)=>{//设置label位置和字
|
|
|
- let center = new Vector3().addVectors(p1,p2).multiplyScalar(0.5);
|
|
|
- label.setPos(center);
|
|
|
+ this.setEdgeLabelPos(label,p1,p2);
|
|
|
+
|
|
|
distance = distance == void 0 ? p1.distanceTo(p2) : distance;
|
|
|
var text = this.labelText || viewer.unitConvert.convert(distance, 'distance', Potree.settings.precision, this.unitSystem, 0.1 , true);//distance要传0.1 这个factor
|
|
|
label.setText(text);
|
|
@@ -82043,10 +82051,10 @@ void main()
|
|
|
let distance = this.labelText || point.distanceTo(nextPoint);
|
|
|
edgeLabel.shouldVisi = this.labelText || (index < lastIndex || this.isRect || this.closed && !this.isNew ) && distance>0;
|
|
|
/* this.closed || */edgeLabel.setVisible(edgeLabel.shouldVisi);
|
|
|
+ edgeLabel.sprite.lineDir = new Vector3().subVectors(point,nextPoint).normalize(); //[point,nextPoint]
|
|
|
if(edgeLabel.visible){
|
|
|
setEdgeLabel(edgeLabel,point,nextPoint,distance);
|
|
|
}
|
|
|
- edgeLabel.sprite.lineDir = new Vector3().subVectors(point,nextPoint).normalize(); //[point,nextPoint]
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -82098,7 +82106,28 @@ void main()
|
|
|
|
|
|
};
|
|
|
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
+ setEdgeLabelPos(label,p1,p2){ //调整label的位置,使倾斜后看起来在线的中心,而不要挡住端点
|
|
|
+ let center = new Vector3().addVectors(p1,p2).multiplyScalar(0.5);
|
|
|
+
|
|
|
+ if(!label.sprite.lineDir || viewer.mainViewport.camera.type == 'OrthographicCamera'){
|
|
|
+ label.setPos(center);
|
|
|
+ }else {
|
|
|
+ let eyePos = viewer.mainViewport.camera.position;
|
|
|
+ let dir = viewer.mainViewport.view.direction; //new THREE.Vector3().subVectors(center,eyePos).normalize()
|
|
|
+ let vec = label.sprite.lineDir;
|
|
|
+ let cos = dir.dot(vec);
|
|
|
+
|
|
|
+ let efficiency = 0.35; // 0-1 数值越高,r越容易接近1或-1,label越容易在倾斜后靠近近端点。
|
|
|
+ let r = 0.5*efficiency*cos + 0.5;
|
|
|
+ //console.log(r, cos )
|
|
|
+ center = p1.clone().multiplyScalar(1-r).add(p2.clone().multiplyScalar(r)); //label在线上滑动,使尽量保持在视觉中心
|
|
|
+ label.setPos(center);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
|
|
|
addMarker (o={}) {
|
|
|
|
|
@@ -83295,6 +83324,16 @@ void main()
|
|
|
|
|
|
viewer.addEventListener('resize',this.setSize.bind(this));
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
onSceneChange(e){
|
|
@@ -83325,7 +83364,41 @@ void main()
|
|
|
}
|
|
|
|
|
|
|
|
|
- update(){
|
|
|
+ update(){
|
|
|
+ //add
|
|
|
+ viewer.scene.measurements.forEach(measure=>{
|
|
|
+
|
|
|
+ let lastIndex = measure.points.length - 1;
|
|
|
+ for (let index = 0; index <= lastIndex; index++) {
|
|
|
+
|
|
|
+ let nextIndex = (index + 1 > lastIndex) ? 0 : index + 1;
|
|
|
+ let previousIndex = (index === 0) ? lastIndex : index - 1;
|
|
|
+
|
|
|
+ let point = measure.points[index];
|
|
|
+ let nextPoint = measure.points[nextIndex];
|
|
|
+ let previousPoint = measure.points[previousIndex];
|
|
|
+
|
|
|
+ if(measure.showDistances || measure.labelText){ // edge labels
|
|
|
+ let edgeLabel = measure.edgeLabels[index];
|
|
|
+
|
|
|
+ if(edgeLabel.visible){
|
|
|
+ measure.setEdgeLabelPos(edgeLabel, point, nextPoint );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
return;
|
|
|
|
|
|
|
|
@@ -83706,6 +83779,8 @@ void main()
|
|
|
this.viewer.removeEventListener('global_touchstart', click );//add importance
|
|
|
measure.dispatchEvent('firstClick');
|
|
|
|
|
|
+
|
|
|
+ measure.beginAddTime = Date.now();
|
|
|
//console.log('measure clicked')
|
|
|
e.consume && e.consume();
|
|
|
|
|
@@ -89507,6 +89582,7 @@ void main()
|
|
|
{
|
|
|
type: 'drop',
|
|
|
pressDistance,
|
|
|
+ pressTime
|
|
|
}
|
|
|
));
|
|
|
|