xzw 1 месяц назад
Родитель
Сommit
e3bec57d7f

+ 5 - 6
src/custom/mergeStartTest.js

@@ -356,13 +356,12 @@ var start = function(dom, mapDom, number, fileServer, webSite){ //t-Zvd3w0m
     ], tileIndex = Potree.browser.urlHasValue('tileIndex',true) || 0
     
      let glbUrls = [ 
-        {url:`${Potree.resourcePath}/models/glb/animation/man.glb`, angle:0},//transform后,SkinnedMesh莫名移近会消失,可能模型没做好
-        {url:`${Potree.resourcePath}/models/glb/animation/kid.glb`, angle:Math.PI/2},
+     //   {url:`${Potree.resourcePath}/models/glb/animation/man.glb`, angle:0},//transform后,SkinnedMesh莫名移近会消失,可能模型没做好
+     //   {url:`${Potree.resourcePath}/models/glb/animation/kid.glb`, angle:Math.PI/2},
      
-        {url:`${Potree.resourcePath}/models/glb/animation/Soldier.glb`, angle:Math.PI/2},
-         /* 
-        {url:`${Potree.resourcePath}/models/glb/animation/man--running.glb`, angle:Math.PI/2},
-        {url:`${Potree.resourcePath}/models/glb/animation/man--walk.glb`, angle:Math.PI/2}, */
+     //   {url:`${Potree.resourcePath}/models/glb/animation/Soldier.glb`, angle:Math.PI/2},
+         
+        {url:`${Potree.resourcePath}/models/glb/animation/man--walk.glb`, angle:Math.PI/2},  
         {url:`${Potree.resourcePath}/models/glb/animation/dog.glb`, angle:Math.PI/2},
         
         

+ 2 - 0
src/custom/modules/Animation/AnimationEditor.js

@@ -381,6 +381,8 @@ export default class AnimationEditor extends THREE.EventDispatcher{
         let curve = key.path.curve.clone()
         if(key.reverse) curve.points.reverse()  
         let position = curve.getPointAt(percent); 
+            position.add(key.path.edge.position)
+    
         let pathQua, quaternion
       
         if(percent2 <= 1){  

+ 5 - 5
src/custom/objects/tool/Measure.js

@@ -658,7 +658,7 @@ export class Measure extends ctrlPolygon{
         //marker.measure = this 
         let edge
 		{ // edges 
-            edge = o.edge || LineDraw.createFatLine( [ ],{mat:this.getMat('edgeDefault')} ) 
+            edge = o.edge || LineDraw.createFatLine( [ ],{mat:this.getMat('edgeDefault'), avoidBigNumber: true } ) 
             edge.pickOrder = 0
             //Potree.Utils.setObjectLayers(edge, 'measure' ) 
 
@@ -970,18 +970,18 @@ export class Measure extends ctrlPolygon{
      
     
     createGuideLine(){//add 辅助线 
-        var guideLine = LineDraw.createFatLine([ ],{mat:this.getMat('edgeGuide')} )
+        var guideLine = LineDraw.createFatLine([ ],{mat:this.getMat('edgeGuide'), avoidBigNumber:true} )
         guideLine.visible = false 
         this.guideLine = guideLine
         this.add(guideLine);
     }
     createHorVerGuideLine(){//创建水平与垂直辅助线,仅距离测量有。
-        var verGuideEdge = LineDraw.createFatLine([ ],{mat:this.getMat('edgeGuide')} )
+        var verGuideEdge = LineDraw.createFatLine([ ],{mat:this.getMat('edgeGuide'), avoidBigNumber:true} )
         verGuideEdge.visible = false 
         this.verGuideEdge = verGuideEdge
         verGuideEdge.name = 'verGuideEdge'
         
-        var horGuideEdge = LineDraw.createFatLine([ ],{mat:this.getMat('edgeGuide')} )
+        var horGuideEdge = LineDraw.createFatLine([ ],{mat:this.getMat('edgeGuide'), avoidBigNumber:true} )
         horGuideEdge.visible = false 
         horGuideEdge.name = 'horGuideEdge'
         this.horGuideEdge = horGuideEdge
@@ -1660,7 +1660,7 @@ class ExpandLine extends ctrlPolygon{
      
     
     addMarker({point,index }={}){
-        super.addMarker({index, point, edge: LineDraw.createFatLine( [ ],{ mat: this.measure.getMat('edgeExpand')  })})
+        super.addMarker({index, point, edge: LineDraw.createFatLine( [ ],{ mat: this.measure.getMat('edgeExpand'), avoidBigNumber: true })})
     }
     
     getArea(){

+ 8 - 2
src/custom/objects/tool/Path.js

@@ -555,7 +555,7 @@ export class Path extends ctrlPolygon{
         
         //只允许path水平放置
         let geo
-        let points = this.getDifferentPoint(this.points)
+        let points = this.getDifferentPoint(this.points) 
         let count = points.length
         this.edge.geometry.dispose()
         
@@ -563,7 +563,13 @@ export class Path extends ctrlPolygon{
             geo = voidGeometry
             this.geoPoints = []
             this.curve = null
-        }else{
+            this.edge.position.set(0,0,0)
+        }else{ 
+            { //avoidBigNumber 
+                let boundCenter = this.getCenter('bound')
+                points = points.map(e=>e.clone().sub(boundCenter))//防止大数  avoidBigNumber  不过prism的点云效果不对,传入了大数,不好改,等提bug了再说吧
+                this.edge.position.copy(boundCenter)  
+            }
             if(Potree.settings.pathSmooth){//使用曲线
                 let curve = this.curve = new THREE.CatmullRomCurve3(points, false    )  
                 curve.UtoTMapArr = [] //用于存储 getSpacedPoints得到的点对应points的百分比对应

+ 29 - 12
src/custom/objects/tool/ctrlPolygon.js

@@ -39,13 +39,13 @@ export class ctrlPolygon extends THREE.Object3D {
         this.markers = []; 
 		this.edges = [];
         
-        this.center
-        
-        
-        
+        this.center 
         
+         
     }
     
+     
+    
     initData(prop){
         //开始加数据  
         
@@ -560,11 +560,12 @@ export class ctrlPolygon extends THREE.Object3D {
         if(this.facePlane && (this.atPlane || Potree.settings.areaAtNotPlane)){
  
             let facePlane = this.getFacePlane()  
-            
+            let boundCenter = this.getCenter('bound', points)
+            let shiftPoints = points.map(e=>e.clone().sub(boundCenter))//防止大数  avoidBigNumber
             var originPoint0 = points[0].clone() 
             var qua = math.getQuaBetween2Vector(facePlane.normal, new THREE.Vector3(0,0,1), new THREE.Vector3(0,0,1));
-            let points2d = points.map(e=>e.clone().applyQuaternion(qua))  
-        
+            let points2d = shiftPoints.map(e=>e.clone().applyQuaternion(qua))  
+         
             this.point2dInfo = {
                 originPoint0 ,
                 points2d,
@@ -666,7 +667,12 @@ export class ctrlPolygon extends THREE.Object3D {
             if(this.isPrism){
                 let z = this.horizonZ || 0
                 let points2d = this.points.map(e=>e.clone().setZ(z))
-                this.areaPlane.geometry = MeshDraw.getShapeGeo(points2d) //z=0
+                
+                let boundCenter = this.getCenter('bound')
+                let shiftPoints = this.points.map(e=>e.clone().sub(boundCenter))//防止大数  avoidBigNumber  不过prism的点云效果不对,传入了大数,不好改,等提bug了再说吧
+             
+                this.areaPlane.geometry = MeshDraw.getShapeGeo(shiftPoints) //z=0
+                this.areaPlane.position.copy(boundCenter)
                 let center = math.getCenterOfGravityPoint(points2d) //重心 
                 this.areaPlaneCenter = new THREE.Vector3(center.x, center.y, z)
                 this.areaPlane.position.z = z
@@ -735,8 +741,14 @@ export class ctrlPolygon extends THREE.Object3D {
     }
 
 
-    getCenter(type){  
-        if(this.center){
+    getCenter(type, points=this.points){  
+        if(type == 'bound'){
+            let boundCenter = new THREE.Vector3
+            let bound = new THREE.Box3
+            points.forEach(e=>bound.expandByPoint(e))
+            bound.getCenter(boundCenter)
+            return boundCenter
+        }else if(this.center){
             return this.center.clone()
         }else{  
             let center = this.points.reduce(function(total, currentValue ){
@@ -745,10 +757,11 @@ export class ctrlPolygon extends THREE.Object3D {
             
             this.points.length && center.multiplyScalar(1/this.points.length)
             return center //求不出重心呜呜
-        } 
-        
+        }  
     }
     
+    
+    
     getIndex(index, add){
         let lastIndex = this.points.length - 1
         if(add == -1) return (index === 0) ? (this.closed ? lastIndex : null) : index - 1;
@@ -765,12 +778,16 @@ export class ctrlPolygon extends THREE.Object3D {
         this.edges[index] && LineDraw.updateLine( this.edges[index], p1,p2)
     }
     
+    
+     
     update(options={}){
         if(this.points.length === 0){
 			return;
 		} 
         //performance.mark('measureUpdate-start')
         
+         
+        
         let lastIndex = this.points.length - 1
         
         

+ 34 - 3
src/custom/utils/DrawUtil.js

@@ -6,7 +6,8 @@ import {Line2} from "../../../libs/three.js/lines/Line2.js";
 import {LineGeometry} from "../../../libs/three.js/lines/LineGeometry.js";
 import {LineMaterial} from "../../../libs/three.js/lines/LineMaterial.js";
 //画线等函数--by 许钟文
-import {Features} from "../../Features.js";
+import {Features} from "../../Features.js"; 
+import Common from './Common.js'
 
 var defaultColor = new THREE.Color(1,1,1);//config.applicationName == "zhiHouse" ? Colors.zhiBlue : Colors.lightGreen;
 
@@ -28,6 +29,21 @@ function dealPosArr(points){//识别是否每个点都不一样,把连续点
     
 } 
 
+let center = new THREE.Vector3 
+function extractPos(posArr){//尽量让所有点都靠近原点 
+ 
+    //console.log('extractPos', posArr.map(e=>e.clone()))
+    let bound = new THREE.Box3
+    posArr.forEach(e=>bound.expandByPoint(e))
+    bound.getCenter(center)
+    
+    posArr.forEach(e=>e.sub(center))
+    
+    //console.log('extractPos2  ', posArr.map(e=>e.clone()), center.clone())
+    
+    return center.clone()
+}
+
 
 var LineDraw = {
     
@@ -53,7 +69,7 @@ var LineDraw = {
         
         var line = new THREE.LineSegments(new THREE.BufferGeometry, mat);
 		line.renderOrder = o.renderOrder || Potree.config.renderOrders.line
-  
+        line.avoidBigNumber = o.avoidBigNumber
         this.moveLine(line, posArr)
         
 		return line;  
@@ -61,10 +77,15 @@ var LineDraw = {
 	},
     
 	moveLine: function (line, posArr) {
+        posArr = Common.CloneObject(posArr)
         //if(posArr.length == 0)return
         if(!line.uncontinuous || posArr[0] && posArr[0] instanceof Array)posArr = dealPosArr(posArr)
         let position = []
         posArr.forEach(e=>position.push(e.x,e.y,e.z))
+        if(line.avoidBigNumber){  
+            let moveVec = extractPos(posArr)
+            line.position.copy(moveVec)//无视原本的position!
+        }
         line.geometry.setAttribute('position', new THREE.Float32BufferAttribute(/* new Float32Array( */position/* ) */, 3));
       
 		line.geometry.attributes.position.needsUpdate = true;
@@ -120,6 +141,7 @@ var LineDraw = {
 		var line = new Line2( geometry, matLine );
 		//line.computeLineDistances();
         line.uncontinuous = o.uncontinuous //线不连续,由线段组成
+        line.avoidBigNumber = o.avoidBigNumber
 		line.scale.set( 1, 1, 1 );
 		line.renderOrder = Potree.config.renderOrders.line;
         
@@ -131,10 +153,19 @@ var LineDraw = {
     
     
     
-	moveFatLine: function(line, posArr){
+	moveFatLine: function(line, posArr ){
+        posArr = Common.CloneObject(posArr)
+        
 		var geometry = line.geometry;
         var positions = [];
         if(!line.uncontinuous || posArr[0] && posArr[0] instanceof Array) posArr = dealPosArr(posArr) 
+        
+        if(line.avoidBigNumber){  
+            let moveVec = extractPos(posArr)
+            line.position.copy(moveVec)//无视原本的position!
+        }  
+        
+        
         posArr.forEach(e=>{positions.push(...e.toArray())})
          
 		 

+ 2 - 1
src/custom/viewer/ViewerNew.js

@@ -6195,7 +6195,8 @@ export class Viewer extends ViewerBase{
                     model.actions.push(mixer.clipAction( ani )); 
                 } 
             })
-            model.mixer = mixer
+            model.mixer = mixer 
+           
         }
         
     }