xzw 3 rokov pred
rodič
commit
9cd166d83d

+ 37 - 20
public/lib/potree/potree.js

@@ -78860,8 +78860,8 @@ void main() {
     }
 
     //add-------------------------------------
-    const OpaWhenNotSelect = 0.75;
-    const ScaleRatio = 4;
+    const OpaWhenNotSelect = 0.6;
+    const ScaleRatio = 8;
     const OutlineColor = 0x666666;
     //----------------------------------------
     const hideFocusHandles = true;//add
@@ -78872,7 +78872,7 @@ void main() {
     		this.viewer = viewer;
 
     		this.scene = new Scene();
-
+            this.modesEnabled = {};//add
     		this.selection = [];
     		this.pivot = new Vector3();
     		this.dragging = false;
@@ -78986,7 +78986,8 @@ void main() {
             if(!handels)return
             for(let o in handels){
                 handels[o].node.visible = !!enable;
-            } 
+            }  
+            this.modesEnabled[mode] = !!enable;
         }
       
       
@@ -79189,11 +79190,13 @@ void main() {
     	initializeTranslationHandles(){
 
     		let boxGeometry = new BoxGeometry(1, 1, 1);
-
+            this.translateNodes = new Object3D;
+            this.scene.add(this.translateNodes);
+            
     		for(let handleName of Object.keys(this.translationHandles)){
     			let handle = this.handles[handleName];
     			let node = handle.node;
-    			this.scene.add(node);
+    			this.translateNodes.add(node);
 
     			let material = new MeshBasicMaterial({
     				color: handle.color,
@@ -79214,7 +79217,7 @@ void main() {
 
     			let box = new Mesh(boxGeometry, material);
     			box.name = `${handleName}.handle`;
-    			box.scale.set(1, 1, 36);
+    			box.scale.set(1, 1, 72);
     			box.lookAt(new Vector3(...handle.alignment));
     			box.renderOrder = 10;
     			node.add(box);
@@ -79718,7 +79721,9 @@ void main() {
     				for(let handleName of Object.keys(this.handles)){
     					let handle = this.handles[handleName];
     					let node = handle.node;
-
+                        let mode = handleName.split('.')[0]; 
+                        if(!this.modesEnabled[mode])continue;//xzw add
+                        
     					let handlePos = node.getWorldPosition(new Vector3());
     					let distance = handlePos.distanceTo(camera.position);
     					let pr = Utils.projectedRadius(1, camera, distance, domElement.clientWidth, domElement.clientHeight);
@@ -79727,10 +79732,11 @@ void main() {
 
     					let s = (ScaleRatio / pr);
     					let scale = new Vector3(s, s, s).divide(ws);
-        
+                    
     					let rot = new Matrix4().makeRotationFromEuler(node.rotation);     //需要使用到旋转,所以我把设置scale的移到旋转后了,否则在视图上下旋转的分界线处rotateHandel会被拉长从而闪烁。
     					let rotInv = rot.clone().invert();
-
+                         
+                        
     					scale.applyMatrix4(rotInv);
     					scale.x = Math.abs(scale.x);
     					scale.y = Math.abs(scale.y);
@@ -79738,22 +79744,32 @@ void main() {
 
     					node.scale.copy(scale);
     				}
-
-
+                    //add
+                    /* this.translateNodes.rotation.copy(this.selection[0].rotation)
+                    this.translateNodes.rotation.x *= -1
+                    this.translateNodes.rotation.y *= -1
+                    this.translateNodes.rotation.z *= -1
+                      */
+                     
+                
 
     				{
     					let ray = Utils.mouseToRay(pointer, camera, domElement.clientWidth, domElement.clientHeight);
     					let raycaster = new Raycaster(ray.origin, ray.direction);
     					raycaster.layers.enableAll();//add
                         
-                        let intersects = raycaster.intersectObjects(this.pickVolumes.filter(v => v.visible), true);
-                        
-                        
                         
+                        let pickVolumes = this.pickVolumes.filter(v=>{
+                            let mode = v.handle.split('.')[0]; 
+                            return this.modesEnabled[mode]
+                        });
+                        let intersects = raycaster.intersectObjects(pickVolumes, true);
                         
+                         
     					if(intersects.length > 0){
     						let I = intersects[0];
     						let handleName = I.object.handle;
+                            console.log(handleName);
     						this.setActiveHandle(this.handles[handleName]);
     					}else {
     						this.setActiveHandle(null);
@@ -115179,14 +115195,14 @@ ENDSEC
                     if(objects.includes(object)){ 
                         this.selectModel(object); 
                     }else {
-                        if(!viewer.inputHandler.selection[0]){//正在平移和旋转,不允许取消
+                        //if(!viewer.inputHandler.selection[0]){//正在平移和旋转,不允许取消
                             this.selectModel(null);
-                        }
+                        //}
                     }                    
                 }else {
-                    if(!viewer.inputHandler.selection[0]){
+                    //if(!viewer.inputHandler.selection[0]){
                         this.selectModel(null);
-                    }                
+                    //}                
                 }
             });  
             
@@ -115259,6 +115275,7 @@ ENDSEC
             }else { 
                 viewer.outlinePass.selectedObjects = [];
                 this.selected = null;
+                viewer.transformObject(null);
                 //console.log('selectModel', null)
             } 
             
@@ -126683,7 +126700,7 @@ ENDSEC
         focusOnObject(object, type, duration, o={} ) {
             //飞向热点、测量线等 。
             
-            console.log('focusOnObject: ', object,  type);
+            //console.log('focusOnObject: ', object,  type)
             
             let deferred = o.deferred || $.Deferred();
             let target  = new Vector3,  //相机focus的位置

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 1 - 1
public/lib/potree/potree.js.map


+ 53 - 25
src/sdk/cover/index.js

@@ -23,10 +23,11 @@ export const enter = (dom, isLocal) => {
     })
     
     window.THREE = THREE
-     
-    let autoLoads = [] 
-    let autoLoadsDone = []
-   
+    //isLocal = false 
+    let autoLoads = []  
+    let readyToAddModel 
+    let maxLoadingCount = isLocal ? 1 : 2; //正在加载模型的最大数目
+    
     
     let sdk = {
         sceneBus,
@@ -326,37 +327,60 @@ export const enter = (dom, isLocal) => {
         //scaleRange: { min, max }, opacityRange: { min, max }, bottomRange: { min, max } })
         
         addModel(props){ 
+            
             let bus = mitt()  
             //console.log('addModel',props)
             props.isFirstLoad = props.bottom == void 0 //在编辑时用户添加的
             if(props.opacity == void 0)  props.opacity = 1
             props.scale /= 100
-            var oneByOne = !!isLocal;
-             
-            if(!props.isFirstLoad){
+            
+            if(!props.isFirstLoad){ 
+                if(autoLoads.length == 0){ //首次加载
+                    setTimeout(()=>{
+                        let sizes = autoLoads.map(e=>e.size)
+                        console.log('需要请求加载的模型大小为', sizes, '总大小', sizes.reduce(function(total, currentValue ){
+                            let current = parseFloat(currentValue)
+                            return total + (currentValue.includes('M') ? current : current / 1024)
+                        }, 0))
+                         
+                        readyToAddModel = true  //准备开始加载
+                        startLoad(autoLoads[0])
+                    },30) 
+                }
                 autoLoads.push(props) 
+            }else{
+                readyToAddModel = true
             }
+             
+            
             
             let startLoad = (prop)=>{
+                //if(autoLoads.filter(e=>e.loaded).length>1)return console.log('取消加载', prop), prop.onError()
                 Potree.addModel(prop,  prop.done , prop.progressFun, prop.onError)
+                prop.loading = true
                 console.log('startLoad', prop)
             }
             
             let spliceFromArr = (model,loaded)=>{
-                let index = autoLoads.indexOf(props)
-                if(index>-1){
-                    autoLoads.splice(index,1)
-                     
-                    if(loaded){
-                        autoLoadsDone.push(model)
-                    }
+                //let autoLoads.find()
+                props.loadFinish = true
+                props.loading = false
+                  
+                if(loaded){
+                    props.loaded = true
+                    props.model = model
+                }else{
+                    props.error = true 
                 }
-
-                if(oneByOne && autoLoads[0]){
-                    startLoad(autoLoads[0])
+               
+                let haventLoad = autoLoads.filter(e=>!e.loading && !e.loadFinish);
+                if( haventLoad[0]){
+                    startLoad(haventLoad[0])
                      
                     //this.addModel(autoLoads[0])
-                }else if(autoLoads.length == 0 && autoLoadsDone.length>0){//设置相机位置:当自动开始加载第一个模型时(其余的也跟着自动加载),等这批加载完后;  
+                }else if(autoLoads.filter(e=>!e.loadFinish).length == 0 && autoLoads.filter(e=>e.loaded).length>0){//设置相机位置:当自动开始加载第一个模型时(其余的也跟着自动加载),等这批加载完后;  
+                    let autoLoadsDone = autoLoads.filter(e=>e.loaded).map(e=>e.model)
+                    console.log('所有模型加载完毕')
                     MergeEditor.focusOn(autoLoadsDone, 1000)
                 }  
             }
@@ -364,7 +388,7 @@ export const enter = (dom, isLocal) => {
             let model
             let done = (model_)=>{
                 model = model_
-                props.opacity < 1 && result.changeOpacity(props.opacity) 
+                props.opacity < 100 && result.changeOpacity(props.opacity) 
                 
                 model.addEventListener('changeSelect',(e)=>{
                     bus.emit('changeSelect',e.selected)
@@ -405,10 +429,13 @@ export const enter = (dom, isLocal) => {
             props.done = done; props.progressFun = progressFun; props.onError = onError
             
             
-            
-            if(!oneByOne || autoLoads.length==1){
-                startLoad(props)
-            }                
+            if(readyToAddModel){
+                   
+                if(autoLoads.filter(e=>e.loading).length<maxLoadingCount ){
+                    startLoad(props)
+                }
+                    
+            }
             
             
             let result = {  
@@ -433,8 +460,9 @@ export const enter = (dom, isLocal) => {
                         model.dispatchEvent("scale_changed")
                     }
                 },
-                changeOpacity(opacity){
-                    if(opacity == void 0)opacity = 1
+                changeOpacity(opacity){ 
+                    if(opacity == void 0)opacity = 100
+                    opacity/=100
                     if(model){
                         if(model.isPointcloud){
                             model.material.opacity = opacity