|
@@ -63206,6 +63206,8 @@ void main() {
|
|
|
*/
|
|
|
Potree.settings.number = number || 't-o5YMR13';// 't-iksBApb'// 写在viewer前
|
|
|
Potree.fileServer = fileServer;
|
|
|
+
|
|
|
+
|
|
|
webSite && (Potree.settings.webSite = webSite);
|
|
|
|
|
|
|
|
@@ -63649,6 +63651,9 @@ void main() {
|
|
|
Potree.settings.editType = 'merge';
|
|
|
Potree.settings.intersectOnObjs = true;
|
|
|
Potree.settings.boundAddObjs = true;
|
|
|
+ Potree.settings.unableNavigate = true;
|
|
|
+
|
|
|
+
|
|
|
|
|
|
let viewer = new Potree.Viewer(dom );
|
|
|
|
|
@@ -63665,7 +63670,7 @@ void main() {
|
|
|
//this.bound = new THREE.Box3(new THREE.Vector3(-1,-1,-1),new THREE.Vector3(1,1,1))
|
|
|
|
|
|
viewer.transformationTool.setModeEnable('scale',false);
|
|
|
- viewer.ssaaRenderPass.sampleLevel = 1; //奇怪好像没啥锯齿? sampleLevel为1 的话,ground就不会
|
|
|
+ viewer.ssaaRenderPass.sampleLevel = 0; //奇怪好像没啥锯齿? sampleLevel为1 的话,ground就不会
|
|
|
}
|
|
|
|
|
|
Potree.settings.sizeFitToLevel = true;//当type为衰减模式时自动根据level调节大小。每长一级,大小就除以2
|
|
@@ -63734,7 +63739,7 @@ void main() {
|
|
|
pointcloud.rotateInvMatrix.copy(pointcloud.rotateMatrix).invert()
|
|
|
pointcloud.panos.forEach(e=>e.transformByPointcloud()) */
|
|
|
pointcloud.updateBound();
|
|
|
- pointcloud.getPanosBound();
|
|
|
+ //pointcloud.getPanosBound()
|
|
|
viewer.updateModelBound();
|
|
|
};
|
|
|
|
|
@@ -63751,20 +63756,13 @@ void main() {
|
|
|
|
|
|
//过后改为根据intersect的点来设置底部高度;这样的话,需要发送高度
|
|
|
|
|
|
+ let pos = new Vector3(x,y, planeZ );
|
|
|
+ modelEditing.updateMatrixWorld();
|
|
|
+ let boundCenter = modelEditing.boundingBox.getCenter(new Vector3).applyMatrix4(modelEditing.matrixWorld);
|
|
|
+ let diff = new Vector3().subVectors(pos, boundCenter);
|
|
|
+ modelEditing.position.add(diff); //使模型中心在鼠标所在位置
|
|
|
|
|
|
-
|
|
|
-
|
|
|
- if(modelType == 'laser'){
|
|
|
- /* modelEditing.translateUser.copy(pos)
|
|
|
- Alignment.setMatrix(modelEditing) */
|
|
|
- let pos = new Vector3(x,y,0/* planeZ */);
|
|
|
- modelEditing.position.copy(modelEditing.initialPosition).add(pos); //使位置居中在boundingBox
|
|
|
-
|
|
|
- }else {
|
|
|
- let pos = new Vector3(x,y, modelEditing.position.z /* planeZ */);
|
|
|
- modelEditing.position.copy(pos);
|
|
|
-
|
|
|
- }
|
|
|
+
|
|
|
modelEditing.dispatchEvent("position_changed");
|
|
|
|
|
|
};
|
|
@@ -63792,6 +63790,7 @@ void main() {
|
|
|
viewer.addEventListener('global_mousemove', moveModel);
|
|
|
viewer.addEventListener('global_click', confirmPos, 3);
|
|
|
}else {
|
|
|
+ MergeEditor.setModelBtmHeight(model, prop.btmHeight || 0); //默认离地高度为0
|
|
|
modelEditing = null;
|
|
|
}
|
|
|
model.updateMatrixWorld();
|
|
@@ -63846,21 +63845,23 @@ void main() {
|
|
|
//focusOnSelect(object, 1000)
|
|
|
object.isModel = true;
|
|
|
object.dataset_id = Date.now(); //暂时
|
|
|
+
|
|
|
+ object.traverse(e=>e.material && (e.material.transparent = true));
|
|
|
/* object.addEventListener('select',(e)=>{
|
|
|
if(Potree.settings.displayMode == 'showPanos')return
|
|
|
console.log('select',e)
|
|
|
- viewer.setControls(viewer.orbitControls)
|
|
|
- MergeEditor.focusOnSelect(object)
|
|
|
|
|
|
- viewer.outlinePass.selectedObjects = [object]
|
|
|
+ MergeEditor.selectModel(object, true)
|
|
|
return {stopContinue:true}
|
|
|
},1)
|
|
|
object.addEventListener('deselect',(e)=>{
|
|
|
console.log('deselect',e)
|
|
|
- viewer.setControls(viewer.fpControls)
|
|
|
+ MergeEditor.selectModel(object, false)
|
|
|
viewer.outlinePass.selectedObjects = []
|
|
|
- }) */
|
|
|
-
|
|
|
+ }) */
|
|
|
+ object.addEventListener('click',(e)=>{
|
|
|
+ //只是为了能得到hoverElement识别才加这个侦听
|
|
|
+ });
|
|
|
let updateBound = ()=>{
|
|
|
object.updateMatrixWorld();
|
|
|
viewer.updateModelBound();
|
|
@@ -63883,7 +63884,8 @@ void main() {
|
|
|
glburl: prop.url, //0.3s
|
|
|
transform : {
|
|
|
rotation : prop.rotation,
|
|
|
- position : prop.position
|
|
|
+ position : prop.position,
|
|
|
+ scale: new Vector3(prop.scale,prop.scale,prop.scale),
|
|
|
}
|
|
|
|
|
|
},callback,onprogress);
|
|
@@ -85032,10 +85034,9 @@ void main() {
|
|
|
|
|
|
|
|
|
if(isTouch){
|
|
|
- this.hoveredElements = this.getHoveredElements();
|
|
|
-
|
|
|
- let intersectPoint = this.getIntersect(viewport );
|
|
|
-
|
|
|
+ this.hoveredElements = this.getHoveredElements();
|
|
|
+ this.intersectPoint = this.getIntersect(viewport);
|
|
|
+ this.intersect = this.getWholeIntersect();
|
|
|
|
|
|
}
|
|
|
|
|
@@ -85098,16 +85099,18 @@ void main() {
|
|
|
|
|
|
}
|
|
|
|
|
|
- getWholeIntersect(){//add
|
|
|
- if(Potree.settings.intersectOnObjs && this.hoveredElements[0] && this.hoveredElements[0].object.isModel){
|
|
|
+ getWholeIntersect(hoveredElements, intersectPoint){//add
|
|
|
+ hoveredElements = hoveredElements || this.hoveredElements;
|
|
|
+ intersectPoint = intersectPoint || this.intersectPoint;
|
|
|
+ if(Potree.settings.intersectOnObjs && hoveredElements[0] && hoveredElements[0].object.isModel){
|
|
|
return {//模拟点云的intersectPoint的结构写法
|
|
|
- hoveredElement : this.hoveredElements[0] ,
|
|
|
- location: this.hoveredElements[0].point,
|
|
|
- point: {normal: this.hoveredElements[0].face.normal },
|
|
|
- distance: this.hoveredElements[0].distance,
|
|
|
- object: this.hoveredElements[0].object
|
|
|
+ hoveredElement : hoveredElements[0] ,
|
|
|
+ location: hoveredElements[0].point,
|
|
|
+ point: {normal: hoveredElements[0].face.normal },
|
|
|
+ distance: hoveredElements[0].distance,
|
|
|
+ object: hoveredElements[0].object
|
|
|
}
|
|
|
- }else return this.intersectPoint
|
|
|
+ }else return intersectPoint
|
|
|
}
|
|
|
|
|
|
|
|
@@ -85123,7 +85126,7 @@ void main() {
|
|
|
// button: isTouch ? 0 : e.button,
|
|
|
intersectPoint:this.intersectPoint,
|
|
|
hoveredElement: this.hoveredElements[0],
|
|
|
- intersect: this.getWholeIntersect() , //可能包含mesh上的,针对融合页面
|
|
|
+ intersect: this.intersect//this.getWholeIntersect() , //可能包含mesh上的,针对融合页面
|
|
|
};
|
|
|
|
|
|
|
|
@@ -85242,7 +85245,7 @@ void main() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if(!clickElement){
|
|
|
+ //if(!clickElement){
|
|
|
this.viewer.dispatchEvent($.extend(
|
|
|
this.getEventDesc(e,isTouch),
|
|
|
{
|
|
@@ -85250,7 +85253,7 @@ void main() {
|
|
|
pressDistance
|
|
|
}
|
|
|
));
|
|
|
- }
|
|
|
+ //}
|
|
|
}
|
|
|
|
|
|
|
|
@@ -85485,8 +85488,9 @@ void main() {
|
|
|
|
|
|
if(e.onlyGetIntersect){
|
|
|
if(Potree.settings.intersectOnObjs){
|
|
|
- this.hoveredElements = this.getHoveredElements(); //应该不用发送mouseover事件吧
|
|
|
- return this.getWholeIntersect()
|
|
|
+ let hoveredElements = this.getHoveredElements(); //应该不用发送mouseover事件吧
|
|
|
+ let intersect = this.getWholeIntersect(hoveredElements, intersectPoint);
|
|
|
+ return intersect
|
|
|
}
|
|
|
|
|
|
return intersectPoint
|
|
@@ -85587,7 +85591,13 @@ void main() {
|
|
|
}
|
|
|
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
+ this.hoveredElements = hoveredElements;
|
|
|
+ this.intersect = this.getWholeIntersect();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
this.viewer.dispatchEvent($.extend(
|
|
|
this.getEventDesc(e,isTouch),
|
|
@@ -85596,12 +85606,11 @@ void main() {
|
|
|
|
|
|
}
|
|
|
));
|
|
|
- this.hoveredElements = hoveredElements;
|
|
|
+
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
}
|
|
|
|
|
@@ -114592,7 +114601,15 @@ ENDSEC
|
|
|
let panos = entity.panos.filter(e=>pointcloud.panos.includes(e));
|
|
|
let panoCount = panos.length;
|
|
|
|
|
|
- let score = volume / cloudVolume + panoCount / pointcloud.panos.length;
|
|
|
+ let score = volume / cloudVolume;
|
|
|
+
|
|
|
+ if(pointcloud.panos.length > 0){
|
|
|
+ score += panoCount / pointcloud.panos.length;
|
|
|
+ }else {
|
|
|
+ //score += 1
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
|
|
|
scores.push({entity, volume, panoCount, score});
|
|
|
|
|
@@ -114929,17 +114946,19 @@ ENDSEC
|
|
|
|
|
|
|
|
|
|
|
|
- viewer.addEventListener('click',(e)=>{
|
|
|
+ viewer.addEventListener('global_click',(e)=>{
|
|
|
if(e.intersect){
|
|
|
let object = e.intersect.object || e.intersect.pointcloud;
|
|
|
let objects = this.getAllObjects();
|
|
|
if(objects.includes(object)){
|
|
|
this.selectModel(object);
|
|
|
- }
|
|
|
+ }else {
|
|
|
+ this.selectModel(null);
|
|
|
+ }
|
|
|
}else {
|
|
|
- this.selectModel(object);
|
|
|
+ this.selectModel(null);
|
|
|
}
|
|
|
- });
|
|
|
+ });
|
|
|
|
|
|
},
|
|
|
|
|
@@ -114962,7 +114981,7 @@ ENDSEC
|
|
|
getAllObjects(){
|
|
|
return viewer.objs.children.concat(viewer.scene.pointclouds)
|
|
|
},
|
|
|
- selectModel(model, state, by2d){
|
|
|
+ selectModel(model, state=true, by2d){
|
|
|
if(!model) {
|
|
|
model = this.selected;
|
|
|
state = false;
|
|
@@ -114976,18 +114995,23 @@ ENDSEC
|
|
|
this.selected = model;
|
|
|
MergeEditor.focusOnSelect(model);
|
|
|
viewer.outlinePass.selectedObjects = [model];
|
|
|
+
|
|
|
+ if(model.isPointcloud){
|
|
|
+ viewer.outlinePass.edgeStrength = 4;
|
|
|
+ }else {
|
|
|
+ viewer.outlinePass.edgeStrength = 100;
|
|
|
+ }
|
|
|
+ console.log('selectModel', model);
|
|
|
+
|
|
|
}else {
|
|
|
viewer.outlinePass.selectedObjects = [];
|
|
|
+ this.selected = null;
|
|
|
+ console.log('selectModel', null);
|
|
|
}
|
|
|
|
|
|
|
|
|
- if(model.isPointcloud){
|
|
|
- viewer.outlinePass.edgeStrength = 4;
|
|
|
- }else {
|
|
|
- viewer.outlinePass.edgeStrength = 100;
|
|
|
- }
|
|
|
|
|
|
- if(by2d && model){
|
|
|
+ if(!by2d && model){
|
|
|
model.dispatchEvent({type:'changeSelect', selected : state});
|
|
|
}
|
|
|
|
|
@@ -115016,7 +115040,7 @@ ENDSEC
|
|
|
},
|
|
|
|
|
|
|
|
|
- setModelBtmHeight(model,z ){
|
|
|
+ setModelBtmHeight(model, z ){
|
|
|
//无论模型怎么缩放、旋转,都使最低点为z
|
|
|
if(z == void 0) z = model.btmHeight; //离地高度
|
|
|
else model.btmHeight = z;
|
|
@@ -121700,7 +121724,12 @@ ENDSEC
|
|
|
pass.setSize( size.width, size.height );
|
|
|
|
|
|
},
|
|
|
-
|
|
|
+
|
|
|
+ removePass: function(pass){ //add
|
|
|
+ let index = this.passes.indexOf(pass);
|
|
|
+ index > -1 && this.passes.splice(index,1);
|
|
|
+ },
|
|
|
+
|
|
|
insertPass: function ( pass, index ) {
|
|
|
|
|
|
this.passes.splice( index, 0, pass );
|
|
@@ -122449,11 +122478,11 @@ ENDSEC
|
|
|
|
|
|
//add
|
|
|
this.replaceDepthToViewZ( camera );
|
|
|
-
|
|
|
+
|
|
|
this.oldClearColor.copy( renderer.getClearColor(new Color) );
|
|
|
this.oldClearAlpha = renderer.getClearAlpha();
|
|
|
- var oldAutoClear = renderer.autoClear;
|
|
|
-
|
|
|
+ let oldAutoClear = renderer.autoClear;
|
|
|
+ let oldTarget = renderer.getRenderTarget();
|
|
|
renderer.autoClear = false;
|
|
|
|
|
|
if ( maskActive ) renderer.context.disable( renderer.context.STENCIL_TEST );
|
|
@@ -122535,9 +122564,21 @@ ENDSEC
|
|
|
|
|
|
this.edgeDetectionMaterial.uniforms[ "visibleEdgeColor" ].value = this.visibleEdgeColor;//this.tempPulseColor1;
|
|
|
this.edgeDetectionMaterial.uniforms[ "hiddenEdgeColor" ].value = this.hiddenEdgeColor; //this.tempPulseColor2;
|
|
|
- renderer.setClearColor( 0x000000, 0 );
|
|
|
- renderer.setRenderTarget(readBuffer/* this.renderTargetEdgeBuffer1 */);
|
|
|
- renderer.clear();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ let buffer = readBuffer;
|
|
|
+ if ( this.renderToScreen ) {
|
|
|
+ this.quad.material.transparent = true;
|
|
|
+ buffer = null;
|
|
|
+ renderer.setClearColor( this.oldClearColor, this.oldClearAlpha );
|
|
|
+ render2();
|
|
|
+ }else {
|
|
|
+ renderer.setClearColor( 0x000000, 0 );
|
|
|
+ renderer.clear();
|
|
|
+ }
|
|
|
+ renderer.setRenderTarget(buffer/* this.renderTargetEdgeBuffer1 */);
|
|
|
+
|
|
|
renderer.render( this.scene, this.camera/* , this.renderTargetEdgeBuffer1, true */);
|
|
|
|
|
|
/*
|
|
@@ -122583,19 +122624,19 @@ ENDSEC
|
|
|
renderer.clear()
|
|
|
renderer.render( this.scene, this.camera );
|
|
|
*/
|
|
|
-
|
|
|
+ renderer.setRenderTarget(oldTarget);
|
|
|
renderer.setClearColor( this.oldClearColor, this.oldClearAlpha );
|
|
|
renderer.autoClear = oldAutoClear;
|
|
|
return true
|
|
|
}
|
|
|
|
|
|
- if ( this.renderToScreen ) {
|
|
|
+ /* if ( this.renderToScreen ) {
|
|
|
|
|
|
this.quad.material = this.materialCopy;
|
|
|
this.copyUniforms[ "tDiffuse" ].value = readBuffer.texture;
|
|
|
renderer.render( this.scene , this.camera );
|
|
|
|
|
|
- }
|
|
|
+ } */
|
|
|
|
|
|
},
|
|
|
|
|
@@ -122648,7 +122689,7 @@ ENDSEC
|
|
|
getEdgeDetectionMaterial: function (thickness) {
|
|
|
|
|
|
return new ShaderMaterial( {
|
|
|
-
|
|
|
+
|
|
|
uniforms: {
|
|
|
"thickness": { value: thickness },
|
|
|
"maskTexture": { value: null },
|
|
@@ -123234,10 +123275,11 @@ ENDSEC
|
|
|
|
|
|
|
|
|
//add: for 截图时抗锯齿
|
|
|
+
|
|
|
{
|
|
|
this.composer = new EffectComposer( this.renderer );
|
|
|
this.ssaaRenderPass = new SSAARenderPass(0x000000, 0);
|
|
|
- this.composer.addPass( this.ssaaRenderPass );
|
|
|
+ //this.composer.addPass( this.ssaaRenderPass );
|
|
|
//this.ssaaRenderPass.useCopy = true
|
|
|
//this.ssaaRenderPass.renderToScreen = true;
|
|
|
//this.ssaaRenderPass.needsSwap = false
|
|
@@ -123270,13 +123312,24 @@ ENDSEC
|
|
|
//for 融合页面
|
|
|
|
|
|
|
|
|
- let outlinePass = this.outlinePass = new OutlinePass( );
|
|
|
+ /* let outlinePass = this.outlinePass = new OutlinePass( );
|
|
|
//composer.addPass( outlinePass );
|
|
|
+ outlinePass.edgeStrength = 10
|
|
|
+ outlinePass.edgeGlow = 0
|
|
|
+ outlinePass.visibleEdgeColor = new THREE.Color("#09a1b3")
|
|
|
+ outlinePass.hiddenEdgeColor = new THREE.Color("#09a1b3")
|
|
|
+ this.ssaaRenderPass.addPass(outlinePass)
|
|
|
+ */
|
|
|
+
|
|
|
+
|
|
|
+ let outlinePass = this.outlinePass = new OutlinePass( );
|
|
|
+ outlinePass.renderToScreen = true; //这样更流畅,不用ssaa了,缺点是outline有锯齿
|
|
|
+ this.composer.addPass( outlinePass );
|
|
|
outlinePass.edgeStrength = 10;
|
|
|
outlinePass.edgeGlow = 0;
|
|
|
outlinePass.visibleEdgeColor = new Color("#09a1b3");
|
|
|
- outlinePass.hiddenEdgeColor = new Color("#09a1b3");
|
|
|
- this.ssaaRenderPass.addPass(outlinePass);
|
|
|
+ outlinePass.hiddenEdgeColor = new Color("#09a1b3");
|
|
|
+
|
|
|
|
|
|
}
|
|
|
|
|
@@ -127107,6 +127160,7 @@ ENDSEC
|
|
|
|
|
|
let setTransfrom = (name)=>{
|
|
|
let value = fileInfo.transform[name];
|
|
|
+ if(!value)return
|
|
|
if(value instanceof Array){
|
|
|
object[name].fromArray(value);
|
|
|
}else {
|