|
@@ -84034,7 +84034,7 @@ void main() {
|
|
|
return PanoEditor.rotateSideCamera(-e.drag.pointerDelta.x)
|
|
|
}
|
|
|
}else if(Potree.settings.editType == 'merge'){
|
|
|
- if(e.buttons === Buttons.LEFT && viewport.alignment && viewport.rotateSide){
|
|
|
+ if(e.buttons === Buttons.LEFT && viewport.rotateSide){
|
|
|
return MergeEditor.rotateSideCamera(-e.drag.pointerDelta.x)
|
|
|
}
|
|
|
|
|
@@ -85619,7 +85619,7 @@ void main() {
|
|
|
|
|
|
let dontIntersect = this.drag && viewport.alignment/* && Potree.settings.editType == 'pano' */|| isFlying;/* viewer.images360.flying */ // flying 时可能卡顿
|
|
|
//console.log('dontIntersectPointcloud',dontIntersectPointcloud)
|
|
|
- intersect = this.getIntersect(viewport, e.onlyGetIntersect, e.pickWindowSize, dontIntersect, e.whichPointcloud); //数据集多的时候卡顿
|
|
|
+ intersect = this.getIntersect(viewport, e.onlyGetIntersect, e.pickWindowSize, !!dontIntersect, e.whichPointcloud); //数据集多的时候卡顿
|
|
|
//console.log('intersectPoint', intersectPoint)
|
|
|
}
|
|
|
|
|
@@ -112986,7 +112986,7 @@ ENDSEC
|
|
|
// cursor:
|
|
|
|
|
|
let updateCursor = (e)=>{
|
|
|
- if(e.drag)return //仅在鼠标不按下时更新:
|
|
|
+ if(e.drag || !this.editing)return //仅在鼠标不按下时更新:
|
|
|
|
|
|
let handleState = Alignment.handleState;
|
|
|
|
|
@@ -113023,10 +113023,10 @@ ENDSEC
|
|
|
}
|
|
|
};
|
|
|
|
|
|
- if(Potree.settings.editType != 'pano'){
|
|
|
- viewer.addEventListener('global_mousemove',updateCursor);
|
|
|
- viewer.addEventListener('global_drop',updateCursor);//拖拽结束
|
|
|
- }
|
|
|
+
|
|
|
+ viewer.addEventListener('global_mousemove',updateCursor);
|
|
|
+ viewer.addEventListener('global_drop',updateCursor);//拖拽结束
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
@@ -113149,7 +113149,12 @@ ENDSEC
|
|
|
this.editing = false;
|
|
|
this.history.clear();
|
|
|
viewer.updateFpVisiDatasets();
|
|
|
-
|
|
|
+ viewer.dispatchEvent({
|
|
|
+ type : "CursorChange", action : "remove", name:"movePointcloud"
|
|
|
+ });
|
|
|
+ viewer.dispatchEvent({
|
|
|
+ type : "CursorChange", action : "remove", name:"rotatePointcloud"
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
,
|
|
@@ -117421,15 +117426,20 @@ ENDSEC
|
|
|
});
|
|
|
|
|
|
|
|
|
- {
|
|
|
+ {//校准页面拖拽
|
|
|
|
|
|
let dragInfo;
|
|
|
- let drag = (e)=>{
|
|
|
- if(this.split && e.dragViewport.name == 'top' && this.selected){
|
|
|
- if(this.transformState && e.intersect && e.intersect.object == this.selected ){
|
|
|
+ let drag = (e)=>{
|
|
|
+ if(this.split && e.dragViewport.name == 'top' && this.selected && this.transformState ){
|
|
|
+ if(e.type == 'global_mousedown' ){ //开始
|
|
|
+ if((e.intersect.object || e.intersect.pointcloud) == this.selected){
|
|
|
+ dragInfo = {};
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(e.type == 'global_drag' && dragInfo ){
|
|
|
+ if(this.transformState == 'translate'){
|
|
|
|
|
|
- if(this.transformState == 'translate'){
|
|
|
-
|
|
|
let moveVec = Potree.Utils.getOrthoCameraMoveVec(e.drag.pointerDelta, e.dragViewport.camera );//最近一次移动向量
|
|
|
this.selected.position.add(moveVec);
|
|
|
|
|
@@ -117437,14 +117447,10 @@ ENDSEC
|
|
|
}else if(this.transformState == 'rotate'){
|
|
|
|
|
|
let vec = new Vector3().subVectors(e.intersect.orthoIntersect || e.intersect.location, this.selected.boundCenter).setZ(0);
|
|
|
-
|
|
|
- if(dragInfo == void 0){
|
|
|
- dragInfo = {
|
|
|
- lastVec: vec
|
|
|
- };
|
|
|
+ if(dragInfo.lastVec == void 0){//global_mousedown
|
|
|
+ dragInfo.lastVec = vec;
|
|
|
return
|
|
|
}
|
|
|
-
|
|
|
let angle = math.getAngle(dragInfo.lastVec, vec, 'z');
|
|
|
dragInfo.lastVec = vec;
|
|
|
|
|
@@ -117460,16 +117466,43 @@ ENDSEC
|
|
|
|
|
|
viewer.addEventListener('global_mousedown', drag);
|
|
|
viewer.addEventListener('global_drag', drag, 10);
|
|
|
+ viewer.addEventListener('global_mousemove', (e)=>{
|
|
|
+ if(this.split && e.hoverViewport.name == 'top' && this.transformState && !e.drag ){
|
|
|
+ let mouseover = (e.intersect.object || e.intersect.pointcloud) == this.selected;
|
|
|
+ if(mouseover){
|
|
|
+ if(this.transformState == 'translate'){
|
|
|
+ viewer.dispatchEvent({
|
|
|
+ type : "CursorChange", action : "add", name:"movePointcloud"
|
|
|
+ });
|
|
|
+ }else {
|
|
|
+ viewer.dispatchEvent({
|
|
|
+ type : "CursorChange", action : "add", name:"rotatePointcloud"
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ this.clearTranCursor();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
|
|
|
viewer.addEventListener('global_drop', (e)=>{
|
|
|
- dragInfo = null;
|
|
|
-
|
|
|
+ dragInfo = null;
|
|
|
+ this.clearTranCursor();
|
|
|
});
|
|
|
|
|
|
}
|
|
|
},
|
|
|
|
|
|
|
|
|
+ clearTranCursor(){
|
|
|
+ viewer.dispatchEvent({
|
|
|
+ type : "CursorChange", action : "remove", name:"movePointcloud"
|
|
|
+ });
|
|
|
+ viewer.dispatchEvent({
|
|
|
+ type : "CursorChange", action : "remove", name:"rotatePointcloud"
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
enterSplit(){
|
|
|
this.split = true;
|
|
|
if(this.selected) this.SplitScreen.focusCenter = this.selected.boundCenter; //旋转中心。注意 boundCenter不能直接赋值,否则改变后focusCenter也要改
|
|
@@ -117493,7 +117526,8 @@ ENDSEC
|
|
|
},
|
|
|
|
|
|
setTransformState(state){//校准时
|
|
|
- this.transformState = state;
|
|
|
+ this.transformState = state;
|
|
|
+ this.clearTranCursor();
|
|
|
},
|
|
|
//---------------------------
|
|
|
|