xzw 8 months ago
parent
commit
839af6cfa7
4 changed files with 1136 additions and 926 deletions
  1. 1057 840
      pnpm-lock.yaml
  2. 77 84
      public/lib/potree/potree.js
  3. 1 1
      public/lib/potree/potree.js.map
  4. 1 1
      src/sdk/cover/index.js

File diff suppressed because it is too large
+ 1057 - 840
pnpm-lock.yaml


+ 77 - 84
public/lib/potree/potree.js

@@ -17867,7 +17867,8 @@
 	    if (text == void 0) text = '';
 	    if (this.text !== text) {
 	      if (!(text instanceof Array)) {
-	        this.text = [text + ''];
+	        this.text = text.split('\n'); //如果是input手动输入的\n这里会是\\n且不会被拆分, 绘制的依然是\n。
+	        //this.text = [text + '']
 	      } else this.text = text;
 	      this.updateTexture();
 	    }
@@ -19011,6 +19012,8 @@
 	  constructor() {
 	    super();
 	    delete this.sceneBG;
+	    this.overlayScene = new Scene();
+	    viewer.addEventListener("render.pass.perspective_overlay", this.renderOverlay.bind(this));
 	    this.cameraP = new PerspectiveCamera(this.fov, 1, Potree.config.view.near, Potree.config.view.cameraFar);
 	    this.cameraO = new OrthographicCamera(-1, 1, 1, -1, Potree.config.view.near, Potree.settings.cameraFar);
 	    this.cameraP.limitFar = true; //add
@@ -19154,29 +19157,20 @@
 	      bg2.layers.set(Potree.config.renderLayers.bg2);
 	      this.bg2 = bg2;
 	    }
-
-	    // { // lights
-	    // 	{
-	    // 		let light = new THREE.DirectionalLight(0xffffff);
-	    // 		light.position.set(10, 10, 1);
-	    // 		light.target.position.set(0, 0, 0);
-	    // 		this.scene.add(light);
-	    // 	}
-
-	    // 	{
-	    // 		let light = new THREE.DirectionalLight(0xffffff);
-	    // 		light.position.set(-10, 10, 1);
-	    // 		light.target.position.set(0, 0, 0);
-	    // 		this.scene.add(light);
-	    // 	}
-
-	    // 	{
-	    // 		let light = new THREE.DirectionalLight(0xffffff);
-	    // 		light.position.set(0, -10, 20);
-	    // 		light.target.position.set(0, 0, 0);
-	    // 		this.scene.add(light);
-	    // 	}
-	    // }
+	  }
+	  renderOverlay() {
+	    var o = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+	    //  measure  tag
+	    if (this.overlayScene.children.filter(e => e.visible).length == 0) return;
+	    var renderer = o.renderer || this.viewer.renderer;
+	    Potree.Utils.setCameraLayers(o.camera, ['sceneObjects']);
+	    viewer.dispatchEvent({
+	      type: "render.begin2",
+	      name: 'overlays',
+	      viewport: o.viewport,
+	      renderer: o.renderer
+	    });
+	    renderer.render(this.overlayScene, o.camera);
 	  }
 	}
 	;
@@ -22257,6 +22251,7 @@
 	  */
 
 	//xzw add  
+	var labelorder = 5;
 	var config$1 = {
 	  //配置参数   不可修改
 	  displayMode: {
@@ -22529,8 +22524,28 @@
 	    measureLabel: 8,
 	    sorptionSign: 10,
 	    model: 10,
-	    model: 10,
+	    path: {
+	      label: labelorder,
+	      edge: labelorder,
+	      line: labelorder - 1,
+	      marker: labelorder
+	    },
+	    tag: {
+	      label: labelorder,
+	      spot: labelorder,
+	      line: labelorder - 1,
+	      onMesh: {
+	        line: labelorder - 1,
+	        spot: labelorder - 2
+	      }
+	    },
 	    magnifier: 50
+
+	    /* 
+	    renderOrder:
+	        理想情况是大家渲染层级都一样,用真实的遮挡情况。(depthTest为false的话会three会自动根据深度调整渲染顺序, 只是随着角度变化常有错) 但有时候为了处理特殊情况,如希望热点的线永在热点之后不穿出,需要增加层级。但热点和热点之间、热点和其他物品是平等的,而降低的层级总被远处的高层级遮挡。
+	        因此无论何时尽量减少层级数目。如有必要,可临时将容易被忽视穿帮的线条设置为低层级。
+	    */
 	  },
 	  siteModel: {
 	    names: {
@@ -42112,12 +42127,6 @@
 	  width2d: 200
 	};
 	var titleLineHeight = 2;
-	var renderOrders = {
-	  path: 1,
-	  marker: 2,
-	  line: 3,
-	  label: 4
-	};
 	var arrowCountMax = 100; //箭头总数不能超过这个值。 The count value passed into the constructor represents the maximum number of instances of this mesh. You can change the number of instances at runtime to an integer value in the range [0, count].If you need more instances than the original count value, you have to create a new InstancedMesh.
 	var lastArrowCamPos,
 	  lastArrowCount = 0;
@@ -42202,7 +42211,7 @@
 	            setMarkerScale(marker,this.halfPathWidth)
 	            marker.markerSelectStates = {} 
 	            Potree.Utils.setObjectLayers(marker, 'measure' )
-	            marker.renderOrder = renderOrders.marker 
+	            marker.renderOrder = Potree.config.renderOrders.path.marker
 	 
 	    } 
 	    return 
@@ -42237,8 +42246,8 @@
 	        },
 	        borderRadius: 6,
 	        fontsize: this.fontsize || 13,
-	        renderOrder: renderOrders.label,
-	        pickOrder: renderOrders.label,
+	        renderOrder: Potree.config.renderOrders.path.label,
+	        pickOrder: Potree.config.renderOrders.path.label,
 	        clipDistance: 10,
 	        fadeFar: this.fadeFar
 	      }));
@@ -42249,7 +42258,7 @@
 	        transparent: true,
 	        fadeFar: this.fadeFar
 	      }));
-	      line.renderOrder = renderOrders.line;
+	      line.renderOrder = Potree.config.renderOrders.line;
 	      group.add(line);
 	      group.add(this.titleLabel);
 	      this.titleLabel.position.z = titleLineHeight;
@@ -42308,7 +42317,8 @@
 	      })));
 	      //new THREE.MeshBasicMaterial({depthWrite:false, transparent:true, color:this.pathColor || '#fff', opacity:0.5, side:2}))
 	      this.add(this.edge);
-	      this.edge.renderOrder = renderOrders.path;
+	      this.edge.renderOrder = Potree.config.renderOrders.path.edge,
+	      //和tag的一样,但为何遮不住它?好在一般底下有一层地面能遮住
 	      this.edge.name = 'pathEdge';
 	      var addHoverEvent = () => {
 	        var mouseover = e => {
@@ -42406,8 +42416,8 @@
 	      name: 'markerTitle',
 	      text: "",
 	      fontsize: this.fontsize || 12,
-	      renderOrder: renderOrders.label,
-	      pickOrder: renderOrders.label,
+	      renderOrder: Potree.config.renderOrders.path.label,
+	      pickOrder: Potree.config.renderOrders.path.label,
 	      fontWeight: '',
 	      //thick
 	      backgroundColor: {
@@ -42539,7 +42549,7 @@
 	    setMarkerScale(marker, this.halfPathWidth);
 	    marker.markerSelectStates = {};
 	    //Potree.Utils.setObjectLayers(marker, 'measure' )
-	    marker.renderOrder = renderOrders.marker;
+	    marker.renderOrder = Potree.config.renderOrders.path.marker;
 	    marker.addEventListener('mouseover', e => {
 	      if (this.addOrRemovePoint && !this.isNew) {
 	        viewer.dispatchEvent({
@@ -42677,6 +42687,7 @@
 	  }
 	  setMarkerTitle(index, title) {
 	    if (!this.markerLabels[index]) return;
+	    this.markerLabels[index].originText = title;
 	    this.markerLabels[index].setText(title);
 	    this.setTitleVisi(this.markerLabels[index], title instanceof Array || title.trim() != '', 'noText');
 	    viewer.dispatchEvent('content_changed');
@@ -42725,13 +42736,13 @@
 	    state == 'unclick' && (marker.markerSelectStates.click = false);
 	    if (marker.markerSelectStates.click) {
 	      marker.material = getMarkerMat('drag');
-	      marker.renderOrder = marker.pickOrder = renderOrders.marker + 2;
+	      marker.renderOrder = marker.pickOrder = Potree.config.renderOrders.path.marker + 1;
 	    } else if (marker.markerSelectStates.hover) {
 	      marker.material = getMarkerMat(this.addOrRemovePoint ? 'delete' : 'drag');
-	      marker.renderOrder = marker.pickOrder = renderOrders.marker + 1;
+	      marker.renderOrder = marker.pickOrder = Potree.config.renderOrders.path.marker + 1;
 	    } else {
 	      marker.material = getMarkerMat('default');
-	      marker.renderOrder = marker.pickOrder = renderOrders.marker;
+	      marker.renderOrder = marker.pickOrder = Potree.config.renderOrders.path.marker;
 	    }
 
 	    //marker.selected = absoluteState
@@ -42836,6 +42847,7 @@
 	        }));
 	        //let material = new THREE.MeshBasicMaterial({map )})
 	        this.arrows = new InstancedMesh(planeGeo$2, material, arrowCountMax); //会自动向shader添加define和instanceMatrix
+	        this.arrows.renderOrder = Potree.config.renderOrders.path.edge;
 	        this.add(this.arrows);
 	        //Potree.Utils.setObjectLayers(this.arrows, 'measure' )  
 	      }
@@ -43330,7 +43342,7 @@
 	    this.scene.name = 'scene_measurement';
 	    //this.light = new THREE.PointLight(0xffffff, 1.0);
 	    //this.scene.add(this.light);  
-	    this.viewer.inputHandler.registerInteractiveScene(this.scene);
+
 	    this.history = new History({
 	      applyData: data => {
 	        if (data.measure.parent && data.measure.visible) {
@@ -43379,7 +43391,7 @@
 	      e.measurement.dispose(); /* this.scene.remove(e.measurement); */
 	    };
 	    this.onAdd = e => {
-	      this.scene.add(e.measurement);
+	      viewer.scene.overlayScene.add(e.measurement);
 	    };
 	    for (var measurement of viewer.scene.measurements) {
 	      this.onAdd({
@@ -43633,7 +43645,7 @@
 	      args.minMarkers = measure.minMarkers;
 	    } else {
 	      measure = args.measureType == 'MulDistance Ring' ? new Prism(args) : args.type == 'Path' ? new Path$1(args) : new Measure$1(args);
-	      this.scene.add(measure);
+	      viewer.scene.overlayScene.add(measure);
 	    }
 	    measure.isNew = true;
 	    this.viewer.dispatchEvent({
@@ -43943,6 +43955,7 @@
 	  }
 	  render() {
 	    var o = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+	    //废弃
 	    if (this.scene.children.filter(e => e.visible).length == 0) return;
 	    var renderer = o.renderer || this.viewer.renderer;
 	    Potree.Utils.setCameraLayers(o.camera, ['sceneObjects']);
@@ -56521,12 +56534,6 @@
 	  maxOcclusionFactor: 0.7,
 	  maxClipFactor: 1
 	};
-	var renderOrders$1 = {
-	  line: 3,
-	  spot: 15,
-	  //高过模型
-	  label: 17
-	};
 	var planeGeo$3 = new PlaneBufferGeometry(1, 1);
 	var texLoader$8 = new TextureLoader();
 	var lineMat;
@@ -56565,12 +56572,12 @@
 	      map: texLoader$8.load(o.spotUrl || Potree.resourcePath + '/textures/spot_default.png')
 	    })));
 	    this.spot.scale.set(defaultSpotScale, defaultSpotScale, defaultSpotScale);
-	    this.spot.renderOrder = this.spot.pickOrder = renderOrders$1.spot;
+	    this.spot.renderOrder = this.spot.pickOrder = Potree.config.renderOrders.tag.spot;
 	    this.line = LineDraw.createFatLine([], {
 	      mat: lineMat
 	    });
 	    this.line.name = 'tagLine';
-	    this.line.renderOrder = this.line.pickOrder = renderOrders$1.line;
+	    this.line.renderOrder = this.line.pickOrder = Potree.config.renderOrders.tag.line;
 	    this.titleLabel = new TextSprite$2(Object.assign({}, depthMatProp, {
 	      root: group,
 	      text: '',
@@ -56593,8 +56600,8 @@
 	      fontsize: this.fontsize || 13,
 	      fontWeight: '',
 	      //thick
-	      renderOrder: renderOrders$1.label,
-	      pickOrder: renderOrders$1.label,
+	      renderOrder: Potree.config.renderOrders.tag.label,
+	      pickOrder: Potree.config.renderOrders.tag.label,
 	      useDepth: true
 	    })); //更新sprite时,实际更新的是root: spot的矩阵
 	    this.setTitle(this.title);
@@ -56734,13 +56741,15 @@
 	      this.titleLabel.position.y = 0;
 	      this.spot.position.set(0, 0, 0.01); //在mesh之上偏移一点
 	      this.setNorQua();
-	      this.line.renderOrder = renderOrders$1.spot + 1; //比spot高,但比label低
+	      this.spot.renderOrder = Potree.config.renderOrders.tag.onMesh.spot; // 防止遮住线
+	      this.line.renderOrder = Potree.config.renderOrders.tag.onMesh.line;
 	    } else {
 	      this.titleLabel.parent.add(this.spot);
 	      this.updateTitlePos();
 	      this.spot.position.set(0, 0, 0);
-	      this.spot.quaternion.set(0, 0, 0, 1); //this.titleLabel.waitUpdate()
-	      this.line.renderOrder = renderOrders$1.line; //还原
+	      this.spot.quaternion.set(0, 0, 0, 1); //this.titleLabel.waitUpdate() 
+	      this.spot.renderOrder = Potree.config.renderOrders.tag.spot; //还原
+	      this.line.renderOrder = Potree.config.renderOrders.tag.line;
 	    }
 	    Potree.Utils.updateVisible(this.line, 'hideTitle', !this.titleLabel.visible && onMesh ? false : true);
 	    this.updateDepthParams();
@@ -56840,12 +56849,8 @@
 	  constructor(viewer) {
 	    super();
 	    this.viewer = viewer;
-	    this.scene = new Scene();
 	    viewer.tags = new Object3D();
-	    this.scene.add(viewer.tags);
-	    this.viewer.inputHandler.registerInteractiveScene(this.scene);
-	    viewer.addEventListener("render.pass.perspective_overlay", this.render.bind(this)); //在measure之后渲染,盖住它
-
+	    viewer.scene.overlayScene.add(viewer.tags);
 	    this.viewer.addEventListener('start_inserting_tag', e => {
 	      this.viewer.dispatchEvent({
 	        type: 'cancel_insertions'
@@ -56909,19 +56914,6 @@
 	    });
 	    return deferred.promise();
 	  }
-	  render() {
-	    var o = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
-	    if (viewer.tags.children.filter(e => e.visible).length == 0) return;
-	    var renderer = o.renderer || this.viewer.renderer;
-	    Potree.Utils.setCameraLayers(o.camera, ['sceneObjects']);
-	    viewer.dispatchEvent({
-	      type: "render.begin2",
-	      name: 'tags',
-	      viewport: o.viewport,
-	      renderer: o.renderer
-	    });
-	    renderer.render(this.scene, o.camera);
-	  }
 	}
 
 	var initDir = new Vector3(0, 1, 0); //指南针模型的北方向 向屏幕里
@@ -73599,7 +73591,7 @@
 	var rotQua2$1 = new Quaternion().setFromAxisAngle(new Vector3(0, 0, 1), -Math.PI);
 	var lineMats$3 = {};
 	var circleMats = {};
-	var renderOrders$2 = {
+	var renderOrders = {
 	  circleSelected: 3,
 	  circle: 2,
 	  line: 1
@@ -73835,7 +73827,7 @@
 	        this.linkGuideLine.visible = false;
 	        this.linkGuideLine.name = 'linkGuideLine';
 	        viewer.scene.scene.add(this.linkGuideLine);
-	        this.linkGuideLine.renderOrder = renderOrders$2.line;
+	        this.linkGuideLine.renderOrder = renderOrders.line;
 	        var update = e => {
 	          if (this.operation != 'addLink' || this.activeViewName != 'top' && this.activeViewName != 'mainView' || !this.selectedPano) {
 	            return this.linkGuideLine.visible = false;
@@ -74502,7 +74494,7 @@
 	        mat: lineMats$3.default
 	      });
 	      line.name = "".concat(pano0.id, "-").concat(pano1.id);
-	      line.renderOrder = line.pickOrder = renderOrders$2.line;
+	      line.renderOrder = line.pickOrder = renderOrders.line;
 	      this.lineMeshes.add(line);
 	      this.panoLink[pano0.id][pano1.id].line = this.panoLink[pano1.id][pano0.id].line = line;
 	      line.addEventListener('mouseover', () => {
@@ -74645,8 +74637,8 @@
 	          nearBound: 2,
 	          farBound: 10
 	        },
-	        renderOrder: renderOrders$2.circle,
-	        pickOrder: renderOrders$2.circle
+	        renderOrder: renderOrders.circle,
+	        pickOrder: renderOrders.circle
 	      });
 	      circle.pickDontCheckDis = true;
 	      circle.name = 'panoCircle';
@@ -74739,7 +74731,7 @@
 	    var opaProp = this.activeViewName == 'top' ? opacitys.topView : opacitys.sideView;
 	    if (this.selectedPano) {
 	      this.selectedPano.circle.material = circleMats['default' + '_' + this.getPanoRtkState(this.selectedPano)];
-	      this.selectedPano.circle.renderOrder = renderOrders$2.circle;
+	      this.selectedPano.circle.renderOrder = renderOrders.circle;
 	      this.selectedPano.removeEventListener('rePos', this.panoReposCallback);
 	      if (this.activeViewName == 'mainView') {} else {
 	        this.selectedClouds.forEach(e => {
@@ -74752,7 +74744,7 @@
 	    this.updateSelectGroup();
 	    if (pano) {
 	      this.selectedPano.circle.material = circleMats['selected' + '_' + this.getPanoRtkState(this.selectedPano)];
-	      this.selectedPano.circle.renderOrder = this.selectedPano.circle.pickOrder = renderOrders$2.circleSelected; //侧视图能显示在最前
+	      this.selectedPano.circle.renderOrder = this.selectedPano.circle.pickOrder = renderOrders.circleSelected; //侧视图能显示在最前
 
 	      //viewer.controls.setTarget(this.selectedPano.position) //3d时绕其为中心转动 (注释原因:不想变来变去不习惯,难以查看任意角落细节)
 	      this.selectedPano.addEventListener('rePos', this.panoReposCallback);
@@ -74940,7 +74932,7 @@
 	        mat: lineMats$3.suggestLink
 	      });
 	      this.suggestLines.push(line);
-	      line.renderOrder = renderOrders$2.line;
+	      line.renderOrder = renderOrders.line;
 	      viewer.scene.scene.add(line);
 	    });
 	  }
@@ -80734,6 +80726,7 @@
 	        }
 	        this.inputHandler = new InputHandler(this, this.scene.scene);
 	        this.inputHandler.containsMouse = true; //初始化,使键盘事件在mainViewer有效
+	        this.inputHandler.registerInteractiveScene(this.scene.overlayScene);
 	        //this.inputHandler.setScene(this.scene);
 	        //this.inputHandler.addInputListener(this);//add
 

File diff suppressed because it is too large
+ 1 - 1
public/lib/potree/potree.js.map


+ 1 - 1
src/sdk/cover/index.js

@@ -339,7 +339,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
                 //未被删除  
                 console.warn('changePoints', measure.dataset_points.length )   
                 if(measure.type == 'Path'){ 
-                    bus.emit('changePoints', measure.dataset_points.map((p,i)=>{return {position:p.clone(), modelId:measure.points_datasets[i], name:measure.markerLabels[i].text}}))
+                    bus.emit('changePoints', measure.dataset_points.map((p,i)=>{return {position:p.clone(), modelId:measure.points_datasets[i], name:measure.markerLabels[i].originText}}))
                 }else{
                     bus.emit('update', [
                         measure.dataset_points.map(p => p.clone()),