xzw 8 ヶ月 前
コミット
071b32c10c
3 ファイル変更73 行追加68 行削除
  1. 35 55
      public/lib/potree/potree.js
  2. 1 1
      public/lib/potree/potree.js.map
  3. 37 12
      src/sdk/cover/index.js

+ 35 - 55
public/lib/potree/potree.js

@@ -17811,9 +17811,6 @@
 	 */
 
 	// /**
-
-	//可能还是要用html写,因为要加按钮和图片
-
 	class TextSprite$2 extends Object3D {
 	  //注:为了分两层控制scale,不直接extend Sprite
 	  constructor() {
@@ -17863,8 +17860,6 @@
 	    this.textAlign = options.textAlign || 'center';
 	    this.name = options.name;
 	    this.setText(options.text);
-
-	    //this.setText(text);
 	  }
 	  setText(text) {
 	    if (text == void 0) text = '';
@@ -17931,7 +17926,6 @@
 	    }
 	    var expand = 0; //Math.max(1, Math.pow(this.fontsize / 16, 1.1)) * r  // 针对英文大部分在baseLine之上所以降低一点,或者可以识别当不包含jgqp时才加这个值 . 但即使都是汉字也会不同,如"哈哈"和"粉色",前者居中后者不
 
-	    // border color
 	    context.strokeStyle = 'rgba(' + this.borderColor.r + ',' + this.borderColor.g + ',' + this.borderColor.b + ',' + this.borderColor.a + ')';
 	    context.lineWidth = rectBorderThick;
 	    context.fillStyle = 'rgba(' + this.backgroundColor.r + ',' + this.backgroundColor.g + ',' + this.backgroundColor.b + ',' + this.backgroundColor.a + ')';
@@ -21735,7 +21729,7 @@
 	    panoData.forEach((pano, index) => {
 	      //let cloudPath = `${Potree.settings.urls.prefix1}/${Potree.settings.webSite}/${Potree.settings.number}/data/bundle_${Potree.settings.number}/building/uuidcloud/${pano.uuid}/cloud.js`
 	      //2024.12.9: 加mapping
-	      var mapping = datasetData && Potree.settings.isLocal && datasetData.mapping || '';
+	      var mapping = Potree.settings.isLocal && (datasetData ? datasetData.mapping : browser.urlHasValue('mapping', true)) || '';
 	      mapping && (mapping += '/');
 	      var cloudPath = "".concat(Potree.settings.urls.prefix1, "/").concat(mapping).concat(Potree.settings.webSite, "/").concat(Potree.settings.number, "/data/bundle_").concat(Potree.settings.number, "/building/uuidcloud/").concat(pano.uuid, "/cloud.js");
 	      /*  if(Potree.settings.isLocal && dataset.mapping){
@@ -42333,9 +42327,12 @@
 	      this.edge.addEventListener('addHoverEvent', addHoverEvent, {
 	        once: true
 	      });
+	      if (!this.isNew) {
+	        this.edge.dispatchEvent('addHoverEvent');
+	      }
 	    }
 	    {
-	      this.endCaps = getEndCaps(this);
+	      this.endCaps = getEndCaps(this); //端点处的半圆
 	    }
 	    this.addEventListener('marker_dropped', e => {
 	      this.updateDatasetBelong(e.index);
@@ -42463,7 +42460,7 @@
 	            p2: i == 0 ? O : A
 	          })).setZ(0).multiplyScalar(this.halfPathWidth); //垂线
 	        } else {
-	          var OA = new Vector3().subVectors(A, O).setZ(0).normalize();
+	          var OA = new Vector3().subVectors(A, O).setZ(0).normalize(); //只保证俯视角度正确。(如果两点有高度差,该段四个点不会在同一平面,看起来有扭转,有的地方会肥大,但从俯视角度看是正确的。)
 	          var OB = new Vector3().subVectors(B, O).setZ(0).normalize();
 	          var angle = math.getAngle(OA, OB, 'z');
 	          var midVecLength = this.halfPathWidth / Math.sin(angle / 2);
@@ -42487,7 +42484,8 @@
 	    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
 	    if (options.index == -1) return;
 	    super.update(options); //updateEdge marker
-
+	    this.points.length <= 1 && this.updateEdge(); //补偿上一句 
+	    this.editEnable || this.updateEndCaps();
 	    {
 	      var oldVisi = this.titleLabel.parent.visible;
 	      this.setTitleVisi(this.titleLabel.parent, this.markers.length > 0, 'noPoint');
@@ -42526,11 +42524,11 @@
 	      if (this.addOrRemovePoint) {
 	        //点击删除点
 
-	        //viewer.measuringTool.history.beforeChange(this)
+	        viewer.measuringTool.history.beforeChange(this);
 	        var _index = this.markers.indexOf(marker);
 	        this.removeMarker(_index);
 	        this.hideArrowUntilUpdate();
-	        //viewer.measuringTool.history.afterChange(this)
+	        viewer.measuringTool.history.afterChange(this);
 	        this.dispatchEvent('changed');
 	      } else {
 	        //点击选中点
@@ -42555,7 +42553,7 @@
 	    });
 	    marker.addEventListener('startDragging', e => {
 	      this.isNew || this.setMarkerSelected(marker, 'click'); //选中
-
+	      this.isNew || viewer.measuringTool.history.beforeChange(this);
 	      this.arrows && Potree.Utils.updateVisible(this.arrows, 'dragging', false);
 	      //Potree.Common.waitTool.cancel('pathUpdateArrowDelay')
 	    });
@@ -42589,13 +42587,9 @@
 	    //this.updateEdge()
 	    return marker;
 	  }
-	  setEditEnable(state) {
-	    //是否显示可修改控件
-	    this.editEnable = !!state;
-	    this.markers.forEach(e => Potree.Utils.updateVisible(e, 'editEnable', this.editEnable));
+	  updateEndCaps() {
 	    this.endCaps.forEach((e, i) => {
-	      Potree.Utils.updateVisible(e, 'editEnable', !this.editEnable);
-	      if (!state && this.points.length) {
+	      if (this.points.length) {
 	        var len = this.points.length;
 	        if (len > 1) {
 	          var dir = i == 0 ? new Vector3().subVectors(this.points[1], this.points[0]) : new Vector3().subVectors(this.points[len - 2], this.points[len - 1]);
@@ -42608,6 +42602,13 @@
 	        e.scale.set(s, s, s);
 	      }
 	    });
+	  }
+	  setEditEnable(state) {
+	    //是否显示可修改控件
+	    this.editEnable = !!state;
+	    this.markers.forEach(e => Potree.Utils.updateVisible(e, 'editEnable', this.editEnable));
+	    this.endCaps.forEach((e, i) => Potree.Utils.updateVisible(e, 'editEnable', !this.editEnable));
+	    state || this.updateEndCaps();
 	    viewer.dispatchEvent('content_changed');
 	  }
 	  setAddOrRemPoint(state) {
@@ -42626,6 +42627,7 @@
 	  }
 	  setTitle() {
 	    var title = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
+	    this.title = title;
 	    this.titleLabel.setText(title);
 	    this.setTitleVisi(this.titleLabel.parent, title instanceof Array || title.trim() != '', 'noText');
 	    viewer.dispatchEvent('content_changed');
@@ -42759,31 +42761,6 @@
 	    this.fadeFar = far;
 	    viewer.dispatchEvent('content_changed');
 	  }
-	  reDraw() {
-	    var restMarkerCount = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
-	    //重新开始画 
-	    super.reDraw(restMarkerCount);
-	    if (this.measureType == 'Distance') {
-	      this.shouldShowHorVerGuide = false;
-	      this.setEdgesDisplay(false);
-	    }
-	    if (this.showArea) {
-	      this.area = {
-	        value: 0
-	      };
-	      this.areaLabel && Utils.updateVisible(this.areaLabel, 'setVisible', false);
-	    }
-	    if (this.totalDisLabel && this.showTotalDis) {
-	      Utils.updateVisible(this.totalDisLabel, 'setVisible', false);
-	    }
-	    viewer.inputHandler.dispatchEvent({
-	      type: 'measuring',
-	      v: true,
-	      cause: 'reDraw',
-	      object: this,
-	      situation: 'dragging'
-	    });
-	  }
 	  dispose() {
 	    super.dispose();
 	    this.titleLabel.dispose();
@@ -42929,6 +42906,7 @@
 	Path$1.prototype.cloneMarker = Measure$1.prototype.cloneMarker;
 	Path$1.prototype.updateDatasetBelong = Measure$1.prototype.updateDatasetBelong;
 	Path$1.prototype.getTotalDistance = Measure$1.prototype.getTotalDistance;
+	Path$1.prototype.reDraw = Measure$1.prototype.reDraw;
 
 	/* 
 
@@ -43300,6 +43278,10 @@
 	    this.history = new History({
 	      applyData: data => {
 	        if (data.measure.parent && data.measure.visible) {
+	          if (viewer.scene.measurements.indexOf(data.measure) != viewer.scene.measurements.length - 1) {
+	            //非最新加的
+	            if (data.points.length < data.measure.minMarkers) return; //不允许减少点数至minMarkers以下 
+	          }
 	          data = Potree.Common.CloneObject(data); //避免使用后更改数据又被使用
 	          data.measure.reDraw();
 	          data.measure.initData(data);
@@ -43617,11 +43599,11 @@
 	            //marker全可见 
 	            measure.cloneMarker(0, 3);
 	          } else {
-	            measure.markers[length].visible = false;
+	            Potree.Utils.updateVisible(measure.markers[length], 'adding', false);
 	            measure instanceof Path$1 || (measure.edges[length].visible = false);
 	          }
 	          measure instanceof Path$1 || (measure.edges[length - 1].visible = true);
-	          measure.markers[length - 1].visible = true;
+	          Potree.Utils.updateVisible(measure.markers[length - 1], 'adding', true);
 	          marker.isDragging = true;
 	          this.history.afterChange(measure);
 	          measure.continueDrag(marker, e);
@@ -43682,7 +43664,7 @@
 	      measure.isNew = false;
 	      var length = measure.points.length;
 	      if (length) {
-	        measure.markers[length - 1].visible = true;
+	        Potree.Utils.updateVisible(measure.markers[length - 1], 'adding', true);
 	        if (!(measure instanceof Path$1)) {
 	          measure.edges[length - 1].visible = !!measure.closed;
 	          measure.edges.forEach(edge => {
@@ -43735,9 +43717,6 @@
 	      if (e.measure && e.measure != measure || !viewer.scene.measurements.includes(measure) || !measure.isNew) {
 	        return; //若指定了退出的measure但和该measure不一致,就返回
 	      }
-	      if (e.remove || e.type == 'cancel_insertions' && !e.dontRemove) {
-	        viewer.scene.removeMeasurement(measure);
-	      }
 	      measure.editStateChange(false);
 	      measure.cannotConfirmNormal = false; //一些dropMarker中的句子
 	      measure.guideLine && (measure.guideLine.visible = false);
@@ -43759,6 +43738,9 @@
 	      });
 	      //}
 	      this.viewer.inputHandler.drag && (this.viewer.inputHandler.drag.object = null);
+	      if (e.remove || e.type == 'cancel_insertions' && !e.dontRemove) {
+	        viewer.scene.removeMeasurement(measure);
+	      }
 	    };
 	    this.viewer.addEventListener('cancel_insertions', Exit);
 
@@ -43816,7 +43798,7 @@
 	      measure.dragMarker(e);
 	      measure.dropMarker(e);
 	      if (measure.maxMarkers > 1) {
-	        measure.markers[1].visible = false;
+	        Potree.Utils.updateVisible(measure.markers[1], 'adding', false);
 	        measure instanceof Path$1 || (measure.edges[1].visible = false);
 	      }
 	      if (measure.closed && !measure.isRect) {
@@ -43886,19 +43868,17 @@
 	        endDragFun,
 	        notPressMouse: true
 	      });
+	      Potree.Utils.updateVisible(marker, 'adding', false);
 	      var I = viewer.inputHandler.intersect && (viewer.inputHandler.intersect.orthoIntersect || viewer.inputHandler.intersect.location);
 	      if (I) {
 	        measure.dragChange(I.clone(), measure.points.length - 1); //使最后一个点在鼠标处
 	      }
-	      /* if(measure.markers.length == 1){
-	          Common.updateVisible(marker,  ,false)
-	      } */
 	      args.isRect || measure instanceof Path$1 || (measure.edges[measure.points.length - 1].visible = false);
 
 	      //measure.continueDrag(measure.markers[measure.points.length-1], o )  
 	    };
 	    measure.addEventListener('changeByHistory', changeByHistory);
-	    this.viewer.scene.addMeasurement(measure);
+	    args.resume || this.viewer.scene.addMeasurement(measure);
 	    return measure;
 	  }
 	  render() {

ファイルの差分が大きいため隠しています
+ 1 - 1
public/lib/potree/potree.js.map


+ 37 - 12
src/sdk/cover/index.js

@@ -317,9 +317,13 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
     }
     let getMeasureFunction = function (measure, bus) {
 
-        measure.addEventListener('highlight', (e) => {
-            //console.log('3d->2d highlight',e.state)
-            bus.emit('highlight', e.state)
+        measure.addEventListener('highlight', (e) => { 
+            if(measure.type == 'Path'){
+                bus.emit(e.state ? 'enter' : 'leave')  
+            }else{
+                bus.emit('highlight', e.state)
+            }
+            
         })
         let update = (e)=>{ //拖拽结束后发送changeCallBack
             if (measure.parent) {
@@ -385,15 +389,16 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
                 Potree.Utils.updateVisible(measure, 'inListByUser', false)
             },
             fly() {
+                 
                 let result = viewer.focusOnObject(measure, 'measure', 1200)
-
+ 
                 return result.msg ? result.msg : result.promise
                 //返回值 1 deferred 表示即将位移 2 'posNoChange' 表示已在最佳位置 3 'tooFar' 表示距离最佳位置太远 
             },
 
 
             changeSelect(isHight) {
-                console.log('2d->3d isHight ', isHight)
+                //console.log('2d->3d isHight ', isHight)
                 measure.setSelected(isHight, 'byList')
             },
 
@@ -1324,9 +1329,11 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
                     bus.emit('linePositionChange', {
                         modelId: e.root.dataset_id, 
                         pos:  Potree.Utils.datasetPosTransform({toDataset:true, position: e.position.clone(),  datasetId: e.root.dataset_id })
-                    })
-                     
+                    }) 
                 })
+                /* path.addEventListener('titlePosChanged',(e)=>{
+                    
+                }) */
             }
             let funs = getMeasureFunction(path, bus) 
 
@@ -1369,6 +1376,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
                     path.setTitleVisi(path.titleLabel.parent, v, 'user')
                 },
                 changeName(name){
+                    console.log('changeName, oldName:', path.title, 'newName', name )
                     path.setTitle(name)
                 },
                 changePointName(index,name){
@@ -1399,6 +1407,8 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
                 createAni(tension){
                     let distance = path.getTotalDistance()
                     let pathPoints = path.points.map(e=>e.clone().add(new THREE.Vector3(0,0,2))) //在地面之上一定高度
+                    if(path.reverse)    pathPoints.reverse() 
+                    
                     
                     const speed = 3, //m/s
                           turnDisPerRad = 1.5,  
@@ -1462,11 +1472,25 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
                     path.animation_ = viewer.modules.CamAniEditor.createAnimation(data)
                 },
                 play(playDone){
+                    
+                    let oldStates = {
+                       editEnable:  path.editEnable,
+                       addOrRemovePoint:  path.addOrRemovePoint
+                    } 
+                    path.editEnable && functions.changeEditMode(false)
+                    path.addOrRemovePoint && path.setAddOrRemPoint(false)
+                 
+                    console.log('play')
                     functions.createAni();//不传参数时路径最圆润缓和,但会脱离原路径。传参后除了拐弯都按路径,参数越大越圆润,但容易有折回的bug。 如果没有严格要求就不传参效果最佳。
                     path.animation_.play() 
                     path.animation_.addEventListener('playDone', () => {
-                        playDone && playDone()
+                        oldStates.editEnable && functions.changeEditMode(true)
+                        oldStates.addOrRemovePoint && path.setAddOrRemPoint(true)
+                        playDone && playDone() 
                     },{once:true}) 
+                    
+                    
+                    
                 },
                 pause(){
                     path.animation_.pause()
@@ -1477,6 +1501,9 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
             
             path.functions = functions
             
+            props.line && functions.changeLine(props.line)
+            
+            
             return functions
          
          
@@ -1510,12 +1537,10 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
             
             
             tag.addEventListener('mouseover',()=>{
-                bus.emit('enter')
-                console.log('enter')
+                bus.emit('enter') 
             }) 
             tag.addEventListener('mouseleave',()=>{
-                bus.emit('leave')
-                console.log('leave')
+                bus.emit('leave') 
             }) 
             tag.addEventListener('click',()=>{
                 bus.emit('click')