|
@@ -599,12 +599,9 @@
|
|
siteModeSideVisi:14,//只有侧面可见
|
|
siteModeSideVisi:14,//只有侧面可见
|
|
},
|
|
},
|
|
|
|
|
|
- /* renderOrders:{ //会影响到绘制、pick时的顺序。
|
|
|
|
- measureLine: 1,
|
|
|
|
- measureLabel: 2,
|
|
|
|
- model:
|
|
|
|
- ground:
|
|
|
|
- }, */
|
|
|
|
|
|
+ renderOrders:{ //会影响到绘制、pick时的顺序。
|
|
|
|
+ model:10
|
|
|
|
+ },
|
|
siteModel:{
|
|
siteModel:{
|
|
names:{
|
|
names:{
|
|
'building': '建筑',
|
|
'building': '建筑',
|
|
@@ -56902,6 +56899,17 @@ void main() {
|
|
return this.visible_
|
|
return this.visible_
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ realVisible(){
|
|
|
|
+ let parent = this;
|
|
|
|
+ while(parent){
|
|
|
|
+ if(parent.visible === false){
|
|
|
|
+ return false
|
|
|
|
+ }
|
|
|
|
+ parent = parent.parent;
|
|
|
|
+ }
|
|
|
|
+ return true
|
|
|
|
+ }
|
|
|
|
+
|
|
update(e){
|
|
update(e){
|
|
if(!e){
|
|
if(!e){
|
|
(this.viewports || viewer.viewports).forEach(view=>{
|
|
(this.viewports || viewer.viewports).forEach(view=>{
|
|
@@ -56909,7 +56917,7 @@ void main() {
|
|
});
|
|
});
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- if(!this.visible || !this.root)return
|
|
|
|
|
|
+ if(!this.root || ! this.realVisible() /* this.visible */ )return
|
|
if(this.viewports && !this.viewports.includes(e.viewport) )return
|
|
if(this.viewports && !this.viewports.includes(e.viewport) )return
|
|
if(e.viewport.name == 'magnifier')return
|
|
if(e.viewport.name == 'magnifier')return
|
|
|
|
|
|
@@ -56955,7 +56963,7 @@ void main() {
|
|
if(!e)e = {viewport:viewer.mainViewport};//随便写一个viewport
|
|
if(!e)e = {viewport:viewer.mainViewport};//随便写一个viewport
|
|
if(e.viewport.name == 'magnifier')return
|
|
if(e.viewport.name == 'magnifier')return
|
|
if(this.viewports && !this.viewports.includes(e.viewport) )return
|
|
if(this.viewports && !this.viewports.includes(e.viewport) )return
|
|
- if(!this.visible || !this.root)return
|
|
|
|
|
|
+ if( !this.root || !this.realVisible() )return
|
|
|
|
|
|
var matrix = this.matrixMap.get(e.viewport);
|
|
var matrix = this.matrixMap.get(e.viewport);
|
|
|
|
|
|
@@ -63864,6 +63872,13 @@ void main() {
|
|
MergeEditor.setModelBtmHeight(model, prop.bottom || 0); //默认离地高度为0
|
|
MergeEditor.setModelBtmHeight(model, prop.bottom || 0); //默认离地高度为0
|
|
modelEditing = null;
|
|
modelEditing = null;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ if(model.isPointcloud){
|
|
|
|
+ model.renderOrder = Potree.config.renderOrders.model; //same as glb
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
{//transform
|
|
{//transform
|
|
let updateBound = ()=>{
|
|
let updateBound = ()=>{
|
|
model.updateMatrixWorld();
|
|
model.updateMatrixWorld();
|
|
@@ -85584,7 +85599,8 @@ void main() {
|
|
|
|
|
|
//console.log(viewport.name , intersectPoint && intersectPoint.location )
|
|
//console.log(viewport.name , intersectPoint && intersectPoint.location )
|
|
let intersect;
|
|
let intersect;
|
|
- let intersectOnModel;
|
|
|
|
|
|
+ let intersectOnModel, allElements;
|
|
|
|
+
|
|
|
|
|
|
if(Potree.settings.intersectOnObjs && !dontIntersect){
|
|
if(Potree.settings.intersectOnObjs && !dontIntersect){
|
|
if(prop.point){
|
|
if(prop.point){
|
|
@@ -85594,17 +85610,17 @@ void main() {
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
- let intesects = this.getHoveredElements(viewer.objs.children, true, raycaster);
|
|
|
|
|
|
+ allElements = this.getHoveredElements(viewer.objs.children, true, raycaster);
|
|
|
|
|
|
|
|
|
|
- if(intesects[0]){
|
|
|
|
|
|
+ if(allElements[0]){
|
|
intersectOnModel = {//模拟点云的intersectPoint的结构写法
|
|
intersectOnModel = {//模拟点云的intersectPoint的结构写法
|
|
- hoveredElement : intesects[0] ,
|
|
|
|
- location: intesects[0].point,
|
|
|
|
- //point: {normal: intesects[0].face.normal },
|
|
|
|
- normal: intesects[0].face.normal,
|
|
|
|
- distance: intesects[0].distance,
|
|
|
|
- object: intesects[0].object
|
|
|
|
|
|
+ hoveredElement : allElements[0] ,
|
|
|
|
+ location: allElements[0].point,
|
|
|
|
+ //point: {normal: allElements[0].face.normal },
|
|
|
|
+ normal: allElements[0].face.normal,
|
|
|
|
+ distance: allElements[0].distance,
|
|
|
|
+ object: allElements[0].object
|
|
};
|
|
};
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -85618,7 +85634,7 @@ void main() {
|
|
}else {
|
|
}else {
|
|
intersect = intersectOnModel || intersectPoint;
|
|
intersect = intersectOnModel || intersectPoint;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
|
|
|
|
if(viewport.camera.type == 'OrthographicCamera'/* == 'mapViewport' */){
|
|
if(viewport.camera.type == 'OrthographicCamera'/* == 'mapViewport' */){
|
|
let pos3d = new Vector3(this.pointer.x,this.pointer.y,-1).unproject(viewport.camera); //z:-1朝外
|
|
let pos3d = new Vector3(this.pointer.x,this.pointer.y,-1).unproject(viewport.camera); //z:-1朝外
|
|
@@ -85628,6 +85644,14 @@ void main() {
|
|
}
|
|
}
|
|
intersect.orthoIntersect = pos3d.clone();
|
|
intersect.orthoIntersect = pos3d.clone();
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ //记录全部hover到的:
|
|
|
|
+ if(intersect){
|
|
|
|
+ intersect.allElements = allElements;
|
|
|
|
+ intersect.pointclouds = intersectPoint ? intersectPoint.pointclouds : [];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
if(onlyGetIntersect){
|
|
if(onlyGetIntersect){
|
|
return intersect
|
|
return intersect
|
|
}
|
|
}
|
|
@@ -117422,17 +117446,20 @@ ENDSEC
|
|
//再加两条线否则在正侧边看不到
|
|
//再加两条线否则在正侧边看不到
|
|
let line1 = LineDraw.createLine([new Vector3(-10000, 0, 0),new Vector3(10000, 0, 0) ], {color:'#666', dontAlwaysSeen:true});
|
|
let line1 = LineDraw.createLine([new Vector3(-10000, 0, 0),new Vector3(10000, 0, 0) ], {color:'#666', dontAlwaysSeen:true});
|
|
let line2 = LineDraw.createLine([new Vector3(0, -10000, 0),new Vector3(0, 10000, 0) ], {mat:line1.material});
|
|
let line2 = LineDraw.createLine([new Vector3(0, -10000, 0),new Vector3(0, 10000, 0) ], {mat:line1.material});
|
|
- ground.renderOrder = line1.renderOrder + 1; //要比模型低,否则模型透明时效果不对
|
|
|
|
|
|
+ ground.renderOrder = Potree.config.renderOrders.model + 1;//line1.renderOrder + 1 //要比模型低,否则模型透明时效果不对
|
|
ground.add(line1);
|
|
ground.add(line1);
|
|
ground.add(line2);
|
|
ground.add(line2);
|
|
|
|
|
|
ground.material.polygonOffset = true; //多边形偏移(视觉上没有移动模型位置),防止闪烁
|
|
ground.material.polygonOffset = true; //多边形偏移(视觉上没有移动模型位置),防止闪烁
|
|
ground.material.polygonOffsetFactor = 100; //多边形偏移因子
|
|
ground.material.polygonOffsetFactor = 100; //多边形偏移因子
|
|
- ground.material.polygonOffsetUnits = 10; //多边形偏移单位
|
|
|
|
|
|
+ ground.material.polygonOffsetUnits = 10; //多边形偏移单位
|
|
|
|
+ ground.material.depthWrite = false;
|
|
//ground.material.depthTest = false
|
|
//ground.material.depthTest = false
|
|
line1.material.polygonOffset = true;
|
|
line1.material.polygonOffset = true;
|
|
line1.material.polygonOffsetFactor = 130;
|
|
line1.material.polygonOffsetFactor = 130;
|
|
line1.material.polygonOffsetUnits = 10;
|
|
line1.material.polygonOffsetUnits = 10;
|
|
|
|
+ line1.material.depthWrite = false;
|
|
|
|
+ //见笔记:透明物体的材质设置
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -117510,7 +117537,9 @@ ENDSEC
|
|
let drag = (e)=>{
|
|
let drag = (e)=>{
|
|
if(this.split && e.dragViewport.name == 'top' && this.selected && this.transformState ){
|
|
if(this.split && e.dragViewport.name == 'top' && this.selected && this.transformState ){
|
|
if(e.type == 'global_mousedown' ){ //开始
|
|
if(e.type == 'global_mousedown' ){ //开始
|
|
- if((e.intersect.object || e.intersect.pointcloud) == this.selected){
|
|
|
|
|
|
+ //if((e.intersect.object || e.intersect.pointcloud) == this.selected){
|
|
|
|
+ if(e.intersect.pointclouds.includes(this.selected) || e.intersect.allElements.some(e=>e.object == this.selected)){
|
|
|
|
+
|
|
dragInfo = {};
|
|
dragInfo = {};
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -117554,7 +117583,9 @@ ENDSEC
|
|
viewer.addEventListener('global_drag', drag, 10);
|
|
viewer.addEventListener('global_drag', drag, 10);
|
|
viewer.addEventListener('global_mousemove', (e)=>{
|
|
viewer.addEventListener('global_mousemove', (e)=>{
|
|
if(this.split && e.hoverViewport.name == 'top' && this.transformState && !e.drag ){
|
|
if(this.split && e.hoverViewport.name == 'top' && this.transformState && !e.drag ){
|
|
- let mouseover = (e.intersect.object || e.intersect.pointcloud) == this.selected;
|
|
|
|
|
|
+
|
|
|
|
+ let mouseover = e.intersect.pointclouds.includes(this.selected) || e.intersect.allElements.some(e=>e.object == this.selected);
|
|
|
|
+ //let mouseover = (e.intersect.object || e.intersect.pointcloud) == this.selected
|
|
if(mouseover){
|
|
if(mouseover){
|
|
if(this.transformState == 'translate'){
|
|
if(this.transformState == 'translate'){
|
|
viewer.dispatchEvent({
|
|
viewer.dispatchEvent({
|
|
@@ -117764,8 +117795,25 @@ ENDSEC
|
|
if(fitBound){
|
|
if(fitBound){
|
|
viewer.focusOnObject({boundingBox}, 'boundingBox', duration, {dontLookUp});
|
|
viewer.focusOnObject({boundingBox}, 'boundingBox', duration, {dontLookUp});
|
|
}else {
|
|
}else {
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ let position = viewer.inputHandler.intersect ? viewer.inputHandler.intersect.location : boundingBox.getCenter(new THREE.Vector3)
|
|
|
|
+ position && viewer.focusOnObject({position}, 'point', duration, {dontChangePos: true})
|
|
|
|
+ */
|
|
let position = viewer.inputHandler.intersect ? viewer.inputHandler.intersect.location : boundingBox.getCenter(new Vector3);
|
|
let position = viewer.inputHandler.intersect ? viewer.inputHandler.intersect.location : boundingBox.getCenter(new Vector3);
|
|
- position && viewer.focusOnObject({position}, 'point', duration, {dontChangePos: true});
|
|
|
|
|
|
+ if(!position)return
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /* let targetOld = viewer.mainViewport.view.getPivot()
|
|
|
|
+
|
|
|
|
+ let projected1 = targetOld.clone().project(viewer.mainViewport.camera);
|
|
|
|
+ let projected2 = position.clone().project(viewer.mainViewport.camera); //使用其z
|
|
|
|
+ let targetNew = projected1.clone().setZ(projected2.z).unproject(viewer.mainViewport.camera);
|
|
|
|
+ viewer.mainViewport.view.lookAt(targetNew) */
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ viewer.mainViewport.view.radius = viewer.mainViewport.camera.position.distanceTo(position);
|
|
|
|
+ //为了不改画面,不调节方向了,只能调调radius,一定程度将target靠近model
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -117833,10 +117881,10 @@ ENDSEC
|
|
|
|
|
|
}
|
|
}
|
|
});
|
|
});
|
|
- if(changed){
|
|
|
|
|
|
+ if(changed){//仿transformByPointcloud
|
|
measure.getPoint2dInfo(measure.points);
|
|
measure.getPoint2dInfo(measure.points);
|
|
measure.update();
|
|
measure.update();
|
|
- measure.setSelected(false);//隐藏edgelabel
|
|
|
|
|
|
+ measure.setSelected(false);//隐藏edgelabel
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
@@ -129965,7 +130013,7 @@ ENDSEC
|
|
|
|
|
|
object.traverse( ( child )=>{
|
|
object.traverse( ( child )=>{
|
|
if ( child instanceof Mesh ) {
|
|
if ( child instanceof Mesh ) {
|
|
- child.renderOrder = 10;
|
|
|
|
|
|
+ child.renderOrder = Potree.config.renderOrders.model;
|
|
if(Potree.settings.boundAddObjs){
|
|
if(Potree.settings.boundAddObjs){
|
|
child.geometry.computeBoundingBox();
|
|
child.geometry.computeBoundingBox();
|
|
//console.log(child.matrixWorld.clone())
|
|
//console.log(child.matrixWorld.clone())
|