xzw 1 gadu atpakaļ
vecāks
revīzija
819180850d

+ 1 - 1
src/Features.js

@@ -5,7 +5,7 @@ export const Features = (function () {
 
 	let gl = ftCanvas.getContext('webgl') || ftCanvas.getContext('experimental-webgl');
 	if (gl === null){ 
-		return null; 
+		return {}; 
 	}
 
 	// -- code taken from THREE.WebGLRenderer --

+ 1 - 1
src/Potree.js

@@ -168,7 +168,7 @@ export async function loadFile(path, params , callback, onError){
             callback && callback(data)    
             return data 
         }catch(e){
-            console.error('loadFile出错', path)
+            console.error('loadFile出错', path, e)
             onError && onError(e)
         }
           

+ 51 - 48
src/custom/modules/clipModel/Clip.js

@@ -15,7 +15,7 @@ var Clip = {
     
 
     init(){
-        let {pos,scale,rotation} = this.getBoxPose()
+        
         this.box = new BoxVolume({
             clip:true , lineMat: new THREE.LineDashedMaterial({
                 dashSize:0.1,
@@ -29,14 +29,12 @@ var Clip = {
         this.box.clipTask = ClipTask['SHOW_INSIDE_Big' ]
         this.box.showBox = true
         this.box.name = "ClipBox"; 
-        this.box.position.copy(pos)
-        this.box.scale.copy(scale)
-        this.box.rotation.copy(rotation) 
-        viewer.scene.addVolume(this.box);
-         
         
+        viewer.scene.addVolume(this.box);
+        this.setBoxPose()
+        this.box.visible = false
         
-        viewer.addEventListener('addBaseLine',(e)=>{
+        /* viewer.addEventListener('addBaseLine',(e)=>{
             let data = this.getBoxData()
             if(!data.rotByUser){
                 data.rotAngle = this.getRotByBaseLine(e.measure)
@@ -50,36 +48,47 @@ var Clip = {
                 data.rotAngle = 0
                 this.box.rotation.setZ(0)
             }
-        })
+        }) */
+        
+        
+         
+        
+        
     },
 
 
-    getBoxPose(){
+    
+
+    setBoxPose(){
+        const min = 0.01//0的话相当于没有box所以不能为0
         //box底部不变,永远在bound的底部。但top会根据height改变
         let boxData = this.getBoxData()
         let bound = viewer.bound.boundingBox.clone();
-        let scale = viewer.bound.boundSize.clone().setZ(boxData.height)
+        let scale = viewer.bound.boundSize.clone().setZ(Math.max(min,boxData.height)) 
         let pos = viewer.bound.center.clone().setZ(bound.min.z + boxData.height/2)
         let rotation = new THREE.Euler(0,0,boxData.rotAngle)
-        scale.setX(scale.x*boxData.scaleXY).setY(scale.y*boxData.scaleXY)
+        scale.setX(Math.max(min,scale.x*boxData.scaleXY)).setY(Math.max(min,scale.y*boxData.scaleXY))
         
-        return {pos,scale,rotation}
+        this.box.position.copy(pos)
+        this.box.rotation.copy(rotation)
+        this.box.scale.copy(scale)
+         
     },
 
     //暂定为在手动设置旋转之前 , 如果有基准线,使用基准线的旋转角。 
     getDefaultData(){  
         this.boxData = {
-            height : 1, scaleXY:1,  //水平缩放比率。1代表和bound相同
-            rotAngle:this.getRotByBaseLine(),  rotByUser: false
+            height : 4, scaleXY:1,  //水平缩放比率。1代表和bound相同
+            rotAngle: 0//this.getRotByBaseLine()   ,   rotByUser: false
         } 
     },
     
-    getRotByBaseLine(baseLine){
+    /* getRotByBaseLine(baseLine){
         baseLine = baseLine || viewer.scene.measurements.find(e=>e.isBaseLine && e.points.length == 2)  //使基准线在俯视图中水平
         
         let yaw = baseLine ? new THREE.Vector2().subVectors(baseLine.points[0], baseLine.points[1]).angle() : 0 
         return yaw   
-    },
+    }, */
     
     getBoxData(){
         this.boxData || this.getDefaultData()
@@ -107,17 +116,15 @@ var Clip = {
             }
         }) */
         //viewer.setControls(viewer.orbitControls);
-        viewer.setLimitFar(false) 
+        //viewer.setLimitFar(false) 
           
-        /* 
-        Potree.settings.unableNavigate = true
-        Potree.settings.ifShowMarker = false
+         
+        //Potree.settings.unableNavigate = true
+        //Potree.settings.ifShowMarker = false
         Potree.Utils.updateVisible(viewer.measuringTool.scene, 'clipModel', false)   
-        //Potree.Utils.updateVisible(viewer.mapViewer.cursor, 'clipModel', false)//隐藏地图游标
-        viewer.inputHandler.toggleSelection(this.box);
-        viewer.inputHandler.fixSelection = true
-        viewer.transformationTool.frame.material.color.set(Potree.config.clip.color)//navvis 15899953 
-        viewer.setPointStandardMat(true)  */
+         
+        
+        //viewer.setPointStandardMat(true)   
         
         {  
             this.events = {
@@ -154,38 +161,34 @@ var Clip = {
         
         //viewer.setControls(viewer.fpControls);
         
-        Potree.settings.unableNavigate = false
-        Potree.settings.ifShowMarker = this.previousView.ifShowMarker
+        //Potree.settings.unableNavigate = false
+        //Potree.settings.ifShowMarker = this.previousView.ifShowMarker
         Potree.Utils.updateVisible(viewer.measuringTool.scene, 'clipModel', true)  
         //Potree.Utils.updateVisible(viewer.mapViewer.cursor, 'clipModel', true) 
-        viewer.setView(this.previousView)
-        viewer.setLimitFar(true)
-        viewer.setPointStandardMat(false) 
+        //viewer.setView(this.previousView) 
         //viewer.setClipState(true)
-        viewer.controls.setTarget(null)
+        //viewer.controls.setTarget(null)
          
         this.editing = false
     },
     
 
-
-     
-    
-
-    getTarget:function(boundCenter){//box位置。要找一个有点云的地方。方案1相机位置, 方案2接近相机的漫游点, 方案3接近中心的漫游点。选择方案2,因最大概率有点云
-        var target = new THREE.Vector3()
-        var cameraPos = viewer.images360.position;
-        var pano = Common.find(viewer.images360.panos , [], [Images360.sortFunctions.floorDisSquaredToPoint(cameraPos)]);
-        if(pano){
-            target.copy(pano.position) 
-            target.setZ(boundCenter.z)
-        }else{
-            target.copy(boundCenter)
-        }
-        
-        return target
-    },
     
+    //这三个调试用
+    setRot(rotAngle){
+        this.boxData.rotAngle = rotAngle
+        this.box.rotation.set(0,0, this.boxData.rotAngle) 
+    }, 
+    setScale(s){
+        this.boxData.scaleXY = s
+        this.box.scale.x = viewer.bound.boundSize.x * s
+        this.box.scale.y = viewer.bound.boundSize.y * s 
+    }, 
+    setHeight(v){
+        this.boxData.height = v 
+        this.box.scale.z = v 
+        this.box.position.z = viewer.bound.boundingBox.min.z + v/2
+    }
    
    
     

+ 6 - 4
src/custom/utils/DrawUtil.js

@@ -54,9 +54,9 @@ var LineDraw = {
 
 	},
     
-	moveLine: function (line, posArr) {
+	moveLine: function (line, posArr ) {
         if(posArr.length == 0)return
-        posArr = dealPosArr(posArr)
+        if(!line.uncontinuous)posArr = dealPosArr(posArr)
         let position = []
         posArr.forEach(e=>position.push(e.x,e.y,e.z))
         line.geometry.setAttribute('position', new THREE.Float32BufferAttribute(/* new Float32Array( */position/* ) */, 3));
@@ -113,7 +113,9 @@ var LineDraw = {
 		var matLine = o.material || this.createFatLineMat(o);
 		var line = new Line2( geometry, matLine );
 		//line.computeLineDistances();
-         
+        line.uncontinuous = o.uncontinuous //线不连续,由线段组成
+        
+        
 		line.scale.set( 1, 1, 1 );
 		line.renderOrder = 2;
         
@@ -128,7 +130,7 @@ var LineDraw = {
 	moveFatLine: function(line, posArr){
 		var geometry = line.geometry;
         var positions = [];
-        posArr = dealPosArr(posArr)
+        line.uncontinuous || (posArr = dealPosArr(posArr))
         posArr.forEach(e=>{positions.push(...e.toArray())})
          
 		 

+ 47 - 7
src/utils/VolumeNew.js

@@ -18,6 +18,7 @@ const colors = {
     2: 0xffffff,//0x00ff80, //可见
     3: 0xffc23b,//0xff3158, //不可见
     4: 0xffffff, //
+    highlight: 0x0000ff,
 }
 
 export class Volume extends THREE.Object3D {
@@ -141,7 +142,7 @@ export class BoxVolume extends Volume{
 
 			boxFrameGeometry.vertices.push(
 
-				// bottom
+				/* // bottom
 				new Vector3(-0.5, -0.5, 0.5),
 				new Vector3(0.5, -0.5, 0.5),
 				new Vector3(0.5, -0.5, 0.5),
@@ -167,8 +168,34 @@ export class BoxVolume extends Volume{
 				new Vector3(0.5, -0.5, -0.5),
 				new Vector3(0.5, 0.5, -0.5),
 				new Vector3(-0.5, -0.5, -0.5),
+				new Vector3(-0.5, 0.5, -0.5), */
+                // bottom
+				new Vector3(-0.5, 0.5,-0.5,),
+				new Vector3(0.5, 0.5, -0.5),
+				new Vector3(0.5, 0.5,-0.5),
+				new Vector3(0.5, -0.5,-0.5),
+				new Vector3(0.5, -0.5, -0.5),
+				new Vector3(-0.5, -0.5, -0.5),
+				new Vector3(-0.5, -0.5,-0.5),
+				new Vector3(-0.5, 0.5,-0.5),
+				// top
+				new Vector3(-0.5, 0.5, 0.5),
+				new Vector3(0.5, 0.5, 0.5),
+				new Vector3(0.5, 0.5, 0.5),
+				new Vector3(0.5, -0.5, 0.5),
+				new Vector3(0.5, -0.5, 0.5),
+				new Vector3(-0.5, -0.5, 0.5),
+				new Vector3(-0.5, -0.5, 0.5),
+				new Vector3(-0.5, 0.5, 0.5),
+				// sides
 				new Vector3(-0.5, 0.5, -0.5),
-
+				new Vector3(-0.5, 0.5, 0.5),
+				new Vector3(0.5, 0.5, -0.5),
+				new Vector3(0.5, 0.5, 0.5),
+				new Vector3(0.5, -0.5, -0.5),
+				new Vector3(0.5, -0.5, 0.5),
+				new Vector3(-0.5, -0.5, -0.5),
+				new Vector3(-0.5, -0.5, 0.5),
 			);
 
 		}
@@ -196,11 +223,24 @@ export class BoxVolume extends Volume{
 		//this.frame = new THREE.LineSegments(boxFrameGeometry, new THREE.LineBasicMaterial({color: colors[this.clipTask], opacity:LineOpacity.default/* 0xff2050 */}));
 		this.frame = LineDraw.createFatLine(
                 boxFrameGeometry.vertices,  
-                {dashed:true, dashSize:0.1, gapSize:0.1, opacity: 0.5, color: colors[this.clipTask], opacity:LineOpacity.default, lineWidth:2,  dontAlwaysSeen:true}   )
-                      
+                {dashed:true, dashSize:0.02, gapSize:0.02, opacity: 0.5,  lineWidth:2, color: colors[this.clipTask],  dontAlwaysSeen:true}   )
+         
+        this.frameHorizon =  
+            LineDraw.createFatLine(
+                boxFrameGeometry.vertices.slice(0,16),  
+                { opacity: 1,  lineWidth:2, color: colors['highlight'],   dontAlwaysSeen:true}   )
+        this.frameVertical = LineDraw.createFatLine(
+            boxFrameGeometry.vertices.slice(16,24),  
+            { opacity: 1,  lineWidth:2, color: colors['highlight'],   uncontinuous:true, dontAlwaysSeen:true}   )
+        this.frameHorizon.visible = false
+        this.frameVertical.visible = false 
+        this.add(this.frameHorizon); 
+        this.add(this.frameVertical); 
+
+
+        this.boxFrameGeometry = boxFrameGeometry
         // this.frame.mode = THREE.Lines;
-		this.add(this.frame);
-        this.frame.computeLineDistances()
+		this.add(this.frame); 
 		this.update();  
 	}
 
@@ -220,7 +260,7 @@ export class BoxVolume extends Volume{
         this.box.material.color.set(colors[this.clipTask])
         this.frame.material.color.set(colors[this.clipTask])
         this.frame.material.opacity = this.selected ? LineOpacity.selected : LineOpacity.default
-        this.frame.material.lineWidth = this.selected ? 2 : 1
+       
 	}
 
 	raycast (raycaster, intersects) {