|
@@ -71070,7 +71070,7 @@ void main()
|
|
|
|
|
|
realVisible(){
|
|
realVisible(){
|
|
|
|
|
|
- if(!this.visible && this.unvisibleReasons && this.unvisibleReasons.some(e=>e != 'unableCompute')){
|
|
|
|
|
|
+ if(!this.visible && this.unvisibleReasons && this.unvisibleReasons.some(e=>e.reason != 'unableCompute')){
|
|
return false
|
|
return false
|
|
}
|
|
}
|
|
|
|
|
|
@@ -71171,8 +71171,8 @@ void main()
|
|
if(!r2.trueSide){
|
|
if(!r2.trueSide){
|
|
return Potree.Utils.updateVisible(this, 'unableCompute', false)//, console.log(' !r2.trueSide', )
|
|
return Potree.Utils.updateVisible(this, 'unableCompute', false)//, console.log(' !r2.trueSide', )
|
|
}
|
|
}
|
|
- //Potree.Utils.updateVisible(this, 'notTrueSide', true)
|
|
|
|
|
|
|
|
|
|
+ Potree.Utils.updateVisible(this, 'unableCompute', true);
|
|
let p1 = r1.pos, p2 = r2.pos;
|
|
let p1 = r1.pos, p2 = r2.pos;
|
|
let vec = new Vector2().subVectors(p1,p2);
|
|
let vec = new Vector2().subVectors(p1,p2);
|
|
let angle = -vec.angle(); //根据测量线在屏幕上的角度在旋转label,使之和屏幕上的二维线平行。
|
|
let angle = -vec.angle(); //根据测量线在屏幕上的角度在旋转label,使之和屏幕上的二维线平行。
|
|
@@ -81121,6 +81121,14 @@ void main()
|
|
};
|
|
};
|
|
o.marker.addEventListener('mouseover', mouseover);
|
|
o.marker.addEventListener('mouseover', mouseover);
|
|
o.marker.addEventListener('mouseleave', mouseleave);
|
|
o.marker.addEventListener('mouseleave', mouseleave);
|
|
|
|
+
|
|
|
|
+ o.marker.addEventListener('startDragging', (e)=>{//for mobile
|
|
|
|
+ this.setMarkerSelected(o.marker, 'hover', 'single');
|
|
|
|
+ });
|
|
|
|
+ o.marker.addEventListener('drop', (e)=>{//for mobile
|
|
|
|
+ this.setMarkerSelected(o.marker, 'unhover', 'single');
|
|
|
|
+ });
|
|
|
|
+
|
|
o.marker.removeEventListener('addHoverEvent',addHoverEvent);
|
|
o.marker.removeEventListener('addHoverEvent',addHoverEvent);
|
|
};
|
|
};
|
|
o.marker.addEventListener('addHoverEvent',addHoverEvent);//当非isNew时才添加事件
|
|
o.marker.addEventListener('addHoverEvent',addHoverEvent);//当非isNew时才添加事件
|
|
@@ -82406,7 +82414,11 @@ void main()
|
|
}
|
|
}
|
|
|
|
|
|
focus(){
|
|
focus(){
|
|
- viewer.focusOnObject(this, 'measure');
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ let dontChangeCamDir = viewer.mainViewport.camera.type == 'OrthographicCamera' && math.closeTo( viewer.mainViewport.view.pitch , -1.57079632); //俯视图不改角度
|
|
|
|
+
|
|
|
|
+ viewer.focusOnObject(this, 'measure', null, {dontChangeCamDir});
|
|
|
|
|
|
if(this.clickSelected)return
|
|
if(this.clickSelected)return
|
|
this.setSelected(true, 'focus');
|
|
this.setSelected(true, 'focus');
|
|
@@ -91025,7 +91037,7 @@ void main()
|
|
|
|
|
|
const Colors = {
|
|
const Colors = {
|
|
black : '#161A1A',
|
|
black : '#161A1A',
|
|
- blue: '#00F',
|
|
|
|
|
|
+ blue: '#3290ff',
|
|
gray: '#878585' ,
|
|
gray: '#878585' ,
|
|
white:'#ffffff'
|
|
white:'#ffffff'
|
|
};
|
|
};
|
|
@@ -91582,11 +91594,15 @@ void main()
|
|
|
|
|
|
faceMesh.addEventListener('click', (e)=>{
|
|
faceMesh.addEventListener('click', (e)=>{
|
|
if(viewer.mainViewport.view.isFlying())return
|
|
if(viewer.mainViewport.view.isFlying())return
|
|
|
|
+
|
|
|
|
+ let dir = directions[name];
|
|
|
|
+ if(name == 'top'){
|
|
|
|
+ let baseLine = viewer.scene.measurements.find(e=>e.isBaseLine); //使基准线在俯视图中水平
|
|
|
|
+ let yaw = baseLine ? new Vector2().subVectors(baseLine.points[0], baseLine.points[1]).angle() : 0;
|
|
|
|
+ dir = baseLine ? {dir: new Vector3(0,0,-1),yaw,pitch: -1.5707963267948966} : directions[name];
|
|
|
|
+ }
|
|
|
|
|
|
- let baseLine = viewer.scene.measurements.find(e=>e.isBaseLine); //使基准线在俯视图中水平
|
|
|
|
- let yaw = baseLine ? new Vector2().subVectors(baseLine.points[0], baseLine.points[1]).angle() : 0;
|
|
|
|
-
|
|
|
|
- navCubeViewer.switchView('ortho', baseLine ? {dir: new Vector3(0,0,-1),yaw,pitch: -1.5707963267948966} : directions[name] , ()=>{
|
|
|
|
|
|
+ navCubeViewer.switchView('ortho', dir, ()=>{
|
|
faceMesh.material.uniforms.faceColor.value.set(Colors.black);
|
|
faceMesh.material.uniforms.faceColor.value.set(Colors.black);
|
|
});
|
|
});
|
|
faceMesh.material.uniforms.faceColor.value.set(Colors.blue);
|
|
faceMesh.material.uniforms.faceColor.value.set(Colors.blue);
|
|
@@ -139371,40 +139387,40 @@ ENDSEC
|
|
target.copy(object.getCenter());
|
|
target.copy(object.getCenter());
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
- //试试改变位置(方向),直视测量线。能避免倾斜角度造成的非常不居中、以及看不到面的情况
|
|
|
|
- if(object.points.length>2/* && window.focusMeasureFaceToIt */){
|
|
|
|
-
|
|
|
|
- let facePlane = object.facePlane || new Plane().setFromCoplanarPoints(...object.points.slice(0,3) );
|
|
|
|
- let normal = facePlane.normal.clone();
|
|
|
|
- let angle = this.scene.view.direction.angleTo(normal);
|
|
|
|
- let minDiff = MathUtils$1.degToRad(60);
|
|
|
|
- //console.log('angle',angle)
|
|
|
|
- if(angle>minDiff && angle<Math.PI-minDiff){//当几乎正对时就不执行
|
|
|
|
- if(angle<Math.PI/2){ //在背面
|
|
|
|
- normal.negate();
|
|
|
|
- }
|
|
|
|
- let dir = new Vector3().subVectors(camera.position, target).normalize();
|
|
|
|
- let newDir = new Vector3().addVectors(dir,normal);//两个角度的中间
|
|
|
|
- cameraPos.copy(target.clone().add(newDir));
|
|
|
|
- }
|
|
|
|
- }else if(object.points.length == 2){ //线段
|
|
|
|
- let lineDir = new Vector3().subVectors(object.points[0],object.points[1]).normalize();
|
|
|
|
- let angle = this.scene.view.direction.angleTo(lineDir);
|
|
|
|
- let maxDiff = Math.PI*0.25;// 45度
|
|
|
|
- if(angle<maxDiff || angle>Math.PI-maxDiff){//当几乎正对时就不执行
|
|
|
|
- if(angle>Math.PI/2){ //令dir和lineDir成钝角
|
|
|
|
- lineDir.negate();
|
|
|
|
|
|
+ if(!o.dontChangeCamDir){
|
|
|
|
+ //试试改变位置(方向),直视测量线。能避免倾斜角度造成的非常不居中、以及看不到面的情况
|
|
|
|
+ if(object.points.length>2/* && window.focusMeasureFaceToIt */){
|
|
|
|
+
|
|
|
|
+ let facePlane = object.facePlane || new Plane().setFromCoplanarPoints(...object.points.slice(0,3) );
|
|
|
|
+ let normal = facePlane.normal.clone();
|
|
|
|
+ let angle = this.scene.view.direction.angleTo(normal);
|
|
|
|
+ let minDiff = MathUtils$1.degToRad(60);
|
|
|
|
+ //console.log('angle',angle)
|
|
|
|
+ if(angle>minDiff && angle<Math.PI-minDiff){//当几乎正对时就不执行
|
|
|
|
+ if(angle<Math.PI/2){ //在背面
|
|
|
|
+ normal.negate();
|
|
|
|
+ }
|
|
|
|
+ let dir = new Vector3().subVectors(camera.position, target).normalize();
|
|
|
|
+ let newDir = new Vector3().addVectors(dir,normal);//两个角度的中间
|
|
|
|
+ cameraPos.copy(target.clone().add(newDir));
|
|
|
|
+ }
|
|
|
|
+ }else if(object.points.length == 2){ //线段
|
|
|
|
+ let lineDir = new Vector3().subVectors(object.points[0],object.points[1]).normalize();
|
|
|
|
+ let angle = this.scene.view.direction.angleTo(lineDir);
|
|
|
|
+ let maxDiff = Math.PI*0.25;// 45度
|
|
|
|
+ if(angle<maxDiff || angle>Math.PI-maxDiff){//当几乎正对时就不执行
|
|
|
|
+ if(angle>Math.PI/2){ //令dir和lineDir成钝角
|
|
|
|
+ lineDir.negate();
|
|
|
|
+ }
|
|
|
|
+ let dir = new Vector3().subVectors(camera.position, target).normalize();
|
|
|
|
+ let mid = new Vector3().addVectors(lineDir, dir).normalize(); //中间法向量(如果刚好dir和lineDir反向,那得到的为零向量,就不移动了,但一般不会酱紫吧)
|
|
|
|
+ let newDir = new Vector3().addVectors(dir, mid);
|
|
|
|
+ cameraPos.copy(target.clone().add(newDir));
|
|
}
|
|
}
|
|
- let dir = new Vector3().subVectors(camera.position, target).normalize();
|
|
|
|
- let mid = new Vector3().addVectors(lineDir, dir).normalize(); //中间法向量(如果刚好dir和lineDir反向,那得到的为零向量,就不移动了,但一般不会酱紫吧)
|
|
|
|
- let newDir = new Vector3().addVectors(dir, mid);
|
|
|
|
- cameraPos.copy(target.clone().add(newDir));
|
|
|
|
|
|
+ }else {
|
|
|
|
+ console.error('measure 没有facePlane points点数还不为2?');
|
|
}
|
|
}
|
|
- }else {
|
|
|
|
- console.error('measure 没有facePlane points点数还不为2?');
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ }
|
|
|
|
|
|
position = getPosWithFullBound(object.points, null, target, cameraPos );
|
|
position = getPosWithFullBound(object.points, null, target, cameraPos );
|
|
|
|
|
|
@@ -139639,7 +139655,8 @@ ENDSEC
|
|
}, duration);
|
|
}, duration);
|
|
|
|
|
|
}else if(camera.type == "OrthographicCamera"){
|
|
}else if(camera.type == "OrthographicCamera"){
|
|
- viewer.scene.view.moveOrthoCamera(this.mainViewport, { endPosition:position, target ,
|
|
|
|
|
|
+ viewer.scene.view.moveOrthoCamera(this.mainViewport, { endPosition:position,
|
|
|
|
+ target: o.dontChangeCamDir?null:target,
|
|
boundSize,
|
|
boundSize,
|
|
endYaw:o.endYaw, endPitch:o.endPitch,
|
|
endYaw:o.endYaw, endPitch:o.endPitch,
|
|
callback:()=>{
|
|
callback:()=>{
|