|
@@ -599,7 +599,12 @@
|
|
siteModeSideVisi:14,//只有侧面可见
|
|
siteModeSideVisi:14,//只有侧面可见
|
|
},
|
|
},
|
|
|
|
|
|
-
|
|
|
|
|
|
+ /* renderOrders:{ //会影响到绘制、pick时的顺序。
|
|
|
|
+ measureLine: 1,
|
|
|
|
+ measureLabel: 2,
|
|
|
|
+ model:
|
|
|
|
+ ground:
|
|
|
|
+ }, */
|
|
siteModel:{
|
|
siteModel:{
|
|
names:{
|
|
names:{
|
|
'building': '建筑',
|
|
'building': '建筑',
|
|
@@ -778,7 +783,7 @@
|
|
|
|
|
|
|
|
|
|
useDepthTex: true,//使用深度贴图,但不代表一定有(得到的intersect更快速准确和稳定) SS-t-7DUfWAUZ3V
|
|
useDepthTex: true,//使用深度贴图,但不代表一定有(得到的intersect更快速准确和稳定) SS-t-7DUfWAUZ3V
|
|
- matUseDepth:false,
|
|
|
|
|
|
+ //matUseDepth:false,
|
|
//panoEdit:
|
|
//panoEdit:
|
|
datasetsPanos:{},
|
|
datasetsPanos:{},
|
|
|
|
|
|
@@ -56726,7 +56731,7 @@ void main() {
|
|
|
|
|
|
let defines = {};
|
|
let defines = {};
|
|
|
|
|
|
- let useDepth = o.useDepth && Features.EXT_DEPTH.isSupported() && Potree.settings.matUseDepth;
|
|
|
|
|
|
+ let useDepth = o.useDepth && Features.EXT_DEPTH.isSupported();/* && Potree.settings.matUseDepth */
|
|
if(useDepth )defines.useDepth = '';
|
|
if(useDepth )defines.useDepth = '';
|
|
if(o.map)defines.use_map = '';
|
|
if(o.map)defines.use_map = '';
|
|
super({
|
|
super({
|
|
@@ -56843,6 +56848,7 @@ void main() {
|
|
|
|
|
|
this.root = options.root || this;
|
|
this.root = options.root || this;
|
|
this.renderOrder = options.renderOrder != void 0 ? options.renderOrder : 4;
|
|
this.renderOrder = options.renderOrder != void 0 ? options.renderOrder : 4;
|
|
|
|
+ this.pickOrder = options.pickOrder || 0;
|
|
this.sizeInfo = options.sizeInfo;
|
|
this.sizeInfo = options.sizeInfo;
|
|
this.dontFixOrient = options.dontFixOrient;
|
|
this.dontFixOrient = options.dontFixOrient;
|
|
|
|
|
|
@@ -56984,14 +56990,12 @@ void main() {
|
|
map.minFilter = LinearFilter;
|
|
map.minFilter = LinearFilter;
|
|
map.magFilter = LinearFilter;
|
|
map.magFilter = LinearFilter;
|
|
|
|
|
|
- this.sprite = new Sprite$1({
|
|
|
|
- sizeInfo:options.sizeInfo,
|
|
|
|
- renderOrder:options.renderOrder,
|
|
|
|
- useDepth: options.useDepth,
|
|
|
|
- map,
|
|
|
|
- root: this ,
|
|
|
|
- dontFixOrient: options.dontFixOrient
|
|
|
|
- });
|
|
|
|
|
|
+ this.sprite = new Sprite$1( Object.assign({},options,
|
|
|
|
+ {
|
|
|
|
+ root: this ,
|
|
|
|
+ map,
|
|
|
|
+ })
|
|
|
|
+ );
|
|
this.add(this.sprite);
|
|
this.add(this.sprite);
|
|
|
|
|
|
|
|
|
|
@@ -59515,15 +59519,15 @@ void main() {
|
|
//默认
|
|
//默认
|
|
lineWidth : 5,
|
|
lineWidth : 5,
|
|
color:0xffffff,
|
|
color:0xffffff,
|
|
- transparent : true, depthWrite:true, depthTest:true,
|
|
|
|
|
|
+ transparent : true, depthWrite:false, depthTest:false,
|
|
dashSize : 0.1, gapSize:0.1,
|
|
dashSize : 0.1, gapSize:0.1,
|
|
}, o, {
|
|
}, o, {
|
|
//修正覆盖:
|
|
//修正覆盖:
|
|
dashed: o.dashWithDepth ? supportExtDepth && !!o.dashed : !!o.dashed ,
|
|
dashed: o.dashWithDepth ? supportExtDepth && !!o.dashed : !!o.dashed ,
|
|
dashWithDepth:!!o.dashWithDepth,//只在被遮住的部分显示虚线
|
|
dashWithDepth:!!o.dashWithDepth,//只在被遮住的部分显示虚线
|
|
- useDepth: Potree.settings.matUseDepth && !!o.useDepth,
|
|
|
|
|
|
+ useDepth: !!o.useDepth,
|
|
supportExtDepth,
|
|
supportExtDepth,
|
|
-
|
|
|
|
|
|
+
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
@@ -60561,13 +60565,13 @@ void main() {
|
|
textColor: {r: textColor.r*255, g: textColor.g*255, b: textColor.b*255, a: 1.0},
|
|
textColor: {r: textColor.r*255, g: textColor.g*255, b: textColor.b*255, a: 1.0},
|
|
fontsize:16,
|
|
fontsize:16,
|
|
useDepth : true ,
|
|
useDepth : true ,
|
|
- renderOrder : 5
|
|
|
|
|
|
+ renderOrder : 5, pickOrder:5,
|
|
};
|
|
};
|
|
const subLabelProp = {
|
|
const subLabelProp = {
|
|
backgroundColor: {r: 255, g: 255, b: 255, a:1},
|
|
backgroundColor: {r: 255, g: 255, b: 255, a:1},
|
|
textColor: {r: 0, g: 0, b:0, a: 1.0},
|
|
textColor: {r: 0, g: 0, b:0, a: 1.0},
|
|
fontsize:14,
|
|
fontsize:14,
|
|
- renderOrder : 4
|
|
|
|
|
|
+ renderOrder : 4, pickOrder:4,
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
@@ -60815,7 +60819,7 @@ void main() {
|
|
|
|
|
|
let marker = new Sprite$1({mat:this.getMarkerMaterial('default'), sizeInfo: markerSizeInfo, name:"measure_point"} );
|
|
let marker = new Sprite$1({mat:this.getMarkerMaterial('default'), sizeInfo: markerSizeInfo, name:"measure_point"} );
|
|
viewer.setObjectLayers(marker, 'measure' );
|
|
viewer.setObjectLayers(marker, 'measure' );
|
|
- marker.renderOrder = 3;
|
|
|
|
|
|
+ marker.pickOrder = marker.renderOrder = 3;
|
|
marker.markerSelectStates = {};
|
|
marker.markerSelectStates = {};
|
|
marker.addEventListener('startDragging',(e)=>{
|
|
marker.addEventListener('startDragging',(e)=>{
|
|
if(e.drag.dragViewport.name == 'MainView')viewer.inputHandler.dispatchEvent( {type: 'isMeasuring',v:true, cause:'startDragging'});
|
|
if(e.drag.dragViewport.name == 'MainView')viewer.inputHandler.dispatchEvent( {type: 'isMeasuring',v:true, cause:'startDragging'});
|
|
@@ -60827,6 +60831,7 @@ void main() {
|
|
let edge;
|
|
let edge;
|
|
{ // edges
|
|
{ // edges
|
|
edge = LineDraw.createFatLine( [ ],{material:this.getLineMat('edgeDefault')} );
|
|
edge = LineDraw.createFatLine( [ ],{material:this.getLineMat('edgeDefault')} );
|
|
|
|
+ edge.pickOrder = 0;
|
|
viewer.setObjectLayers(edge, 'measure' );
|
|
viewer.setObjectLayers(edge, 'measure' );
|
|
|
|
|
|
|
|
|
|
@@ -61227,7 +61232,7 @@ void main() {
|
|
gapSize: 0.04,
|
|
gapSize: 0.04,
|
|
transparent: true,
|
|
transparent: true,
|
|
opacity: config$1.measure.default.opacity,
|
|
opacity: config$1.measure.default.opacity,
|
|
- depthTestWhenPick:true,
|
|
|
|
|
|
+ depthTestWhenPick:true,
|
|
}),
|
|
}),
|
|
edgeSelect: LineDraw.createFatLineMat({
|
|
edgeSelect: LineDraw.createFatLineMat({
|
|
color: config$1.measure.highlight.color,//'#f0ff00',
|
|
color: config$1.measure.highlight.color,//'#f0ff00',
|
|
@@ -61236,7 +61241,6 @@ void main() {
|
|
lineWidth: config$1.measure.lineWidth ,
|
|
lineWidth: config$1.measure.lineWidth ,
|
|
transparent: true,
|
|
transparent: true,
|
|
opacity: config$1.measure.highlight.opacity
|
|
opacity: config$1.measure.highlight.opacity
|
|
-
|
|
|
|
}),
|
|
}),
|
|
guide: LineDraw.createFatLineMat({
|
|
guide: LineDraw.createFatLineMat({
|
|
color:config$1.measure.guide.color,
|
|
color:config$1.measure.guide.color,
|
|
@@ -74617,8 +74621,8 @@ void main() {
|
|
|
|
|
|
if(this.useDurSlice){ //已经设定好了每一段的duration的话
|
|
if(this.useDurSlice){ //已经设定好了每一段的duration的话
|
|
let sums = [0];
|
|
let sums = [0];
|
|
- let sum = 0, last = this.durations[0];
|
|
|
|
- for(let i=1;i<length;i++){
|
|
|
|
|
|
+ let sum = 0, last;
|
|
|
|
+ for(let i=0;i<length-1;i++){ //去掉最后一个duration,因为已到终点
|
|
let duration = this.durations[i];
|
|
let duration = this.durations[i];
|
|
sum += duration;
|
|
sum += duration;
|
|
last = duration;
|
|
last = duration;
|
|
@@ -85112,8 +85116,8 @@ void main() {
|
|
|
|
|
|
if(isTouch){
|
|
if(isTouch){
|
|
this.hoveredElements = this.getHoveredElements();
|
|
this.hoveredElements = this.getHoveredElements();
|
|
- this.intersectPoint = this.getIntersect(viewport);
|
|
|
|
- this.intersect = this.getWholeIntersect();
|
|
|
|
|
|
+ this.intersect = this.getIntersect(viewport);
|
|
|
|
+ //this.intersect = this.getWholeIntersect()
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@@ -85176,9 +85180,9 @@ void main() {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- getWholeIntersect(hoveredElements, intersectPoint){//add
|
|
|
|
- hoveredElements = hoveredElements || this.hoveredElements;
|
|
|
|
- intersectPoint = intersectPoint || this.intersectPoint;
|
|
|
|
|
|
+ /* getWholeIntersect(hoveredElements, intersectPoint){//add
|
|
|
|
+ hoveredElements = hoveredElements || this.hoveredElements
|
|
|
|
+ intersectPoint = intersectPoint || this.intersectPoint
|
|
if(Potree.settings.intersectOnObjs && hoveredElements[0] && hoveredElements[0].object.isModel){
|
|
if(Potree.settings.intersectOnObjs && hoveredElements[0] && hoveredElements[0].object.isModel){
|
|
return {//模拟点云的intersectPoint的结构写法
|
|
return {//模拟点云的intersectPoint的结构写法
|
|
hoveredElement : hoveredElements[0] ,
|
|
hoveredElement : hoveredElements[0] ,
|
|
@@ -85188,7 +85192,7 @@ void main() {
|
|
object: hoveredElements[0].object
|
|
object: hoveredElements[0].object
|
|
}
|
|
}
|
|
}else return intersectPoint
|
|
}else return intersectPoint
|
|
- }
|
|
|
|
|
|
+ } */
|
|
|
|
|
|
|
|
|
|
getEventDesc(e,isTouch){//搜集dispatchEvent要给的一般数据
|
|
getEventDesc(e,isTouch){//搜集dispatchEvent要给的一般数据
|
|
@@ -85201,7 +85205,7 @@ void main() {
|
|
dragViewport : this.dragViewport,
|
|
dragViewport : this.dragViewport,
|
|
hoverViewport: this.hoverViewport,
|
|
hoverViewport: this.hoverViewport,
|
|
// button: isTouch ? 0 : e.button,
|
|
// button: isTouch ? 0 : e.button,
|
|
- intersectPoint:this.intersectPoint,
|
|
|
|
|
|
+ //intersectPoint:this.intersectPoint,
|
|
hoveredElement: this.hoveredElements[0],
|
|
hoveredElement: this.hoveredElements[0],
|
|
intersect: this.intersect//this.getWholeIntersect() , //可能包含mesh上的,针对融合页面
|
|
intersect: this.intersect//this.getWholeIntersect() , //可能包含mesh上的,针对融合页面
|
|
};
|
|
};
|
|
@@ -85312,7 +85316,8 @@ void main() {
|
|
if(this.hoveredElements){
|
|
if(this.hoveredElements){
|
|
clickElement = this.hoveredElements.find(e=>e.object._listeners['click']);
|
|
clickElement = this.hoveredElements.find(e=>e.object._listeners['click']);
|
|
if(clickElement){
|
|
if(clickElement){
|
|
- if (this.logMessages) console.log(`${this.constructor.name}: click ${clickObject.name}`);
|
|
|
|
|
|
+ console.log('clickElement',clickElement);
|
|
|
|
+ if (this.logMessages) console.log(`${this.constructor.name}: click ${clickElement.name}`);
|
|
clickElement.object.dispatchEvent($.extend(
|
|
clickElement.object.dispatchEvent($.extend(
|
|
this.getEventDesc(e,isTouch),
|
|
this.getEventDesc(e,isTouch),
|
|
{
|
|
{
|
|
@@ -85357,7 +85362,7 @@ void main() {
|
|
|
|
|
|
//自行执行双击:
|
|
//自行执行双击:
|
|
|
|
|
|
- if(now - this.lastClickTime < this.doubleClickTime){
|
|
|
|
|
|
+ if(now - this.lastClickTime < Potree.config.doubleClickTime){
|
|
this.onDoubleClick(e);
|
|
this.onDoubleClick(e);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -85527,22 +85532,50 @@ void main() {
|
|
}
|
|
}
|
|
|
|
|
|
//console.log(viewport.name , intersectPoint && intersectPoint.location )
|
|
//console.log(viewport.name , intersectPoint && intersectPoint.location )
|
|
|
|
+ let intersect;
|
|
|
|
+ let intersectOnModel;
|
|
|
|
+
|
|
|
|
+ if(Potree.settings.intersectOnObjs){
|
|
|
|
+ let intesects = this.getHoveredElements(viewer.objs.children, true);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ if(intesects[0]){
|
|
|
|
+ intersectOnModel = {//模拟点云的intersectPoint的结构写法
|
|
|
|
+ hoveredElement : intesects[0] ,
|
|
|
|
+ location: intesects[0].point,
|
|
|
|
+ point: {normal: intesects[0].face.normal },
|
|
|
|
+ distance: intesects[0].distance,
|
|
|
|
+ object: intesects[0].object
|
|
|
|
+ };
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if(intersectPoint && intersectOnModel){
|
|
|
|
+ if(intersectPoint.distance < intersectOnModel.distance){
|
|
|
|
+ intersect = intersectPoint;
|
|
|
|
+ }else {
|
|
|
|
+ intersect = intersectOnModel;
|
|
|
|
+ }
|
|
|
|
+ }else {
|
|
|
|
+ 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朝外
|
|
|
|
|
|
- if(!intersectPoint){
|
|
|
|
- intersectPoint = {};
|
|
|
|
|
|
+ if(!intersect){
|
|
|
|
+ intersect = {};
|
|
}
|
|
}
|
|
- intersectPoint.orthoIntersect = pos3d.clone();
|
|
|
|
|
|
+ intersect.orthoIntersect = pos3d.clone();
|
|
}
|
|
}
|
|
if(onlyGetIntersect){
|
|
if(onlyGetIntersect){
|
|
- return intersectPoint
|
|
|
|
|
|
+ return intersect
|
|
}
|
|
}
|
|
|
|
|
|
- if (intersectPoint) {
|
|
|
|
|
|
+ if (intersect) {
|
|
if(viewer.showCoordType){ //显示坐标位置时
|
|
if(viewer.showCoordType){ //显示坐标位置时
|
|
- let pos = intersectPoint.point.position.toArray();
|
|
|
|
|
|
+ let pos = intersect.point.position.toArray();
|
|
if(viewer.showCoordType == "local"){
|
|
if(viewer.showCoordType == "local"){
|
|
|
|
|
|
}else if(viewer.showCoordType == "lonlat"){
|
|
}else if(viewer.showCoordType == "lonlat"){
|
|
@@ -85559,11 +85592,11 @@ void main() {
|
|
}
|
|
}
|
|
//console.log('getIntersect', !!intersectPoint)
|
|
//console.log('getIntersect', !!intersectPoint)
|
|
|
|
|
|
- this.intersectPoint = intersectPoint;
|
|
|
|
|
|
+ this.intersect = intersect;
|
|
|
|
|
|
- intersectPoint && (this.hoverViewport.lastIntersect = intersectPoint);
|
|
|
|
|
|
+ intersect && (this.hoverViewport.lastIntersect = intersect);
|
|
|
|
|
|
- return intersectPoint
|
|
|
|
|
|
+ return intersect
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -85585,25 +85618,26 @@ void main() {
|
|
if(!viewport)return//刚变化viewport时会找不到
|
|
if(!viewport)return//刚变化viewport时会找不到
|
|
|
|
|
|
let isFlying = this.viewer.viewports.some(e=>e.view.isFlying());
|
|
let isFlying = this.viewer.viewports.some(e=>e.view.isFlying());
|
|
- let intersectPoint;
|
|
|
|
|
|
+ let intersect;
|
|
|
|
|
|
|
|
|
|
if(e.onlyGetIntersect || !this.drag || this.drag.object || viewport.alignment ){ //没有拖拽物体,但按下鼠标了的话,不intersect
|
|
if(e.onlyGetIntersect || !this.drag || this.drag.object || viewport.alignment ){ //没有拖拽物体,但按下鼠标了的话,不intersect
|
|
|
|
|
|
let dontIntersectPointcloud = this.drag && viewport.alignment && Potree.settings.editType == 'pano' || isFlying;/* viewer.images360.flying */ // flying 时可能卡顿
|
|
let dontIntersectPointcloud = this.drag && viewport.alignment && Potree.settings.editType == 'pano' || isFlying;/* viewer.images360.flying */ // flying 时可能卡顿
|
|
//console.log('dontIntersectPointcloud',dontIntersectPointcloud)
|
|
//console.log('dontIntersectPointcloud',dontIntersectPointcloud)
|
|
- intersectPoint = this.getIntersect(viewport, e.onlyGetIntersect, e.pickWindowSize, dontIntersectPointcloud, e.whichPointcloud); //数据集多的时候卡顿
|
|
|
|
|
|
+ intersect = this.getIntersect(viewport, e.onlyGetIntersect, e.pickWindowSize, dontIntersectPointcloud, e.whichPointcloud); //数据集多的时候卡顿
|
|
//console.log('intersectPoint', intersectPoint)
|
|
//console.log('intersectPoint', intersectPoint)
|
|
}
|
|
}
|
|
|
|
|
|
if(e.onlyGetIntersect){
|
|
if(e.onlyGetIntersect){
|
|
- if(Potree.settings.intersectOnObjs){
|
|
|
|
- let hoveredElements = this.getHoveredElements(); //应该不用发送mouseover事件吧
|
|
|
|
- let intersect = this.getWholeIntersect(hoveredElements, intersectPoint);
|
|
|
|
|
|
+ /* if(Potree.settings.intersectOnObjs){
|
|
|
|
+ let hoveredElements = this.getHoveredElements() //应该不用发送mouseover事件吧
|
|
|
|
+ let intersect = this.getWholeIntersect(hoveredElements, intersectPoint)
|
|
return intersect
|
|
return intersect
|
|
}
|
|
}
|
|
|
|
|
|
- return intersectPoint
|
|
|
|
|
|
+ return intersectPoint */
|
|
|
|
+ return intersect
|
|
}
|
|
}
|
|
e.preventDefault();
|
|
e.preventDefault();
|
|
|
|
|
|
@@ -85707,7 +85741,7 @@ void main() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- this.intersect = this.getWholeIntersect();
|
|
|
|
|
|
+ //this.intersect = this.getWholeIntersect()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -85913,25 +85947,30 @@ void main() {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- getHoveredElements () {
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ getHoveredElements (interactables, dontCheckDis) {
|
|
let scenes = this.hoverViewport.interactiveScenes || this.interactiveScenes.concat(this.scene);
|
|
let scenes = this.hoverViewport.interactiveScenes || this.interactiveScenes.concat(this.scene);
|
|
|
|
|
|
let interactableListeners = ['mouseup', 'mousemove', 'mouseover', 'mouseleave', 'drag', 'drop', 'click', 'select', 'deselect'];
|
|
let interactableListeners = ['mouseup', 'mousemove', 'mouseover', 'mouseleave', 'drag', 'drop', 'click', 'select', 'deselect'];
|
|
- let interactables = [];
|
|
|
|
- for (let scene of scenes) {
|
|
|
|
- scene.traverseVisible(node => {//检测加了侦听的object
|
|
|
|
- if (node._listeners && node.visible && (Potree.settings.intersectOnObjs || !this.blacklist.has(node))) {
|
|
|
|
- let hasInteractableListener = interactableListeners.filter((e) => {
|
|
|
|
- return node._listeners[e] !== undefined;
|
|
|
|
- }).length > 0;
|
|
|
|
-
|
|
|
|
- if (hasInteractableListener) {
|
|
|
|
- interactables.push(node);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
+ if(!interactables){
|
|
|
|
+ interactables = [];
|
|
|
|
+ for (let scene of scenes) {
|
|
|
|
+ scene.traverseVisible(node => {//检测加了侦听的object
|
|
|
|
+ if (node._listeners && node.visible && (Potree.settings.intersectOnObjs || !this.blacklist.has(node))) {
|
|
|
|
+ let hasInteractableListener = interactableListeners.filter((e) => {
|
|
|
|
+ return node._listeners[e] !== undefined;
|
|
|
|
+ }).length > 0;
|
|
|
|
+
|
|
|
|
+ if (hasInteractableListener) {
|
|
|
|
+ interactables.push(node);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ }
|
|
let camera = this.hoverViewport.camera;
|
|
let camera = this.hoverViewport.camera;
|
|
let ray = Utils.mouseToRay(this.pointer, camera );
|
|
let ray = Utils.mouseToRay(this.pointer, camera );
|
|
|
|
|
|
@@ -85958,14 +85997,18 @@ void main() {
|
|
|
|
|
|
viewer.dispatchEvent( {type:'raycaster', viewport: this.hoverViewport});//add
|
|
viewer.dispatchEvent( {type:'raycaster', viewport: this.hoverViewport});//add
|
|
let intersections = raycaster.intersectObjects(interactables.filter(o => o.visible), true); //原本是false 检测不到children
|
|
let intersections = raycaster.intersectObjects(interactables.filter(o => o.visible), true); //原本是false 检测不到children
|
|
- if(this.intersectPoint && this.intersectPoint.distance != void 0){//add
|
|
|
|
|
|
+ //if(this.intersectPoint && this.intersectPoint.distance != void 0){//add
|
|
|
|
+
|
|
|
|
+ if(this.intersect && this.intersect.distance != void 0 && !dontCheckDis){//add
|
|
intersections = intersections.filter(e=>{
|
|
intersections = intersections.filter(e=>{
|
|
let material = e.object.material;
|
|
let material = e.object.material;
|
|
|
|
|
|
return (material.depthTest == false || material.depthWrite == false) && !material.useDepth //!material.depthTestWhenPick
|
|
return (material.depthTest == false || material.depthWrite == false) && !material.useDepth //!material.depthTestWhenPick
|
|
- || ( material instanceof DepthBasicMaterial ? e.distance < this.intersectPoint.distance + material.uniforms.occlusionDistance.value : e.distance < this.intersectPoint.distance )
|
|
|
|
|
|
+ || ( material.useDepth ? e.distance < this.intersect.distance + material.uniforms.occlusionDistance.value : e.distance < this.intersect.distance )
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+
|
|
intersections = intersections.map(e=>{//add 转化为interactables
|
|
intersections = intersections.map(e=>{//add 转化为interactables
|
|
var object = e.object;
|
|
var object = e.object;
|
|
do{
|
|
do{
|
|
@@ -85980,9 +86023,31 @@ void main() {
|
|
return e
|
|
return e
|
|
});
|
|
});
|
|
|
|
|
|
|
|
+
|
|
|
|
+ let intersectionsCopy = intersections.slice();
|
|
|
|
+ /*
|
|
|
|
+ let intersectOnModel =
|
|
|
|
+
|
|
|
|
+ for(let i=0;i<intersections.length;i++){
|
|
|
|
+ if(!intersections.oriObject.isModel)continue
|
|
|
|
+ if(this.intersectPoint && intersections.distance < this.intersectPoint.distance ){
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ } */
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
//add for测量线,在检测到sphere时优先选中sphere而非线
|
|
//add for测量线,在检测到sphere时优先选中sphere而非线
|
|
- intersections = intersections.sort(function(a,b){return b.object.renderOrder-a.object.renderOrder}); // 降序
|
|
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+ //intersections = intersections.sort(function(a,b){return b.object.renderOrder-a.object.renderOrder}) // 降序
|
|
|
|
+ intersections = intersections.sort(function(a,b){
|
|
|
|
+ let order2 = b.object.pickOrder || 0;
|
|
|
|
+ let order1 = a.object.pickOrder || 0;
|
|
|
|
+ return order2-order1
|
|
|
|
+ }); // 降序
|
|
|
|
+
|
|
|
|
+
|
|
//console.log('getHoveredElement ', intersections)
|
|
//console.log('getHoveredElement ', intersections)
|
|
return intersections;
|
|
return intersections;
|
|
}
|
|
}
|
|
@@ -115097,8 +115162,15 @@ ENDSEC
|
|
|
|
|
|
|
|
|
|
viewer.addEventListener('global_single_click',(e)=>{
|
|
viewer.addEventListener('global_single_click',(e)=>{
|
|
|
|
+<<<<<<< HEAD
|
|
if(viewer.inputHandler.selection[0] ||//正在平移和旋转,不允许更换
|
|
if(viewer.inputHandler.selection[0] ||//正在平移和旋转,不允许更换
|
|
viewer.scene.cameraAnimations.length //正在播放
|
|
viewer.scene.cameraAnimations.length //正在播放
|
|
|
|
+=======
|
|
|
|
+ if( viewer.scene.cameraAnimations.length //正在播放
|
|
|
|
+ || e.drag && e.drag.notPressMouse //在加测量线
|
|
|
|
+ || viewer.mainViewport.view.isFlying() //有其他校准
|
|
|
|
+ //e.clickElement && e.clickElement != e.intersect.object
|
|
|
|
+>>>>>>> local
|
|
){
|
|
){
|
|
return
|
|
return
|
|
}
|
|
}
|
|
@@ -115109,10 +115181,14 @@ ENDSEC
|
|
if(objects.includes(object)){
|
|
if(objects.includes(object)){
|
|
this.selectModel(object);
|
|
this.selectModel(object);
|
|
}else {
|
|
}else {
|
|
- this.selectModel(null);
|
|
|
|
|
|
+ if(!viewer.inputHandler.selection[0]){//正在平移和旋转,不允许取消
|
|
|
|
+ this.selectModel(null);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}else {
|
|
}else {
|
|
- this.selectModel(null);
|
|
|
|
|
|
+ if(!viewer.inputHandler.selection[0]){
|
|
|
|
+ this.selectModel(null);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
@@ -115229,7 +115305,8 @@ ENDSEC
|
|
if(fitBound){
|
|
if(fitBound){
|
|
viewer.focusOnObject({boundingBox}, 'boundingBox', duration);
|
|
viewer.focusOnObject({boundingBox}, 'boundingBox', duration);
|
|
}else {
|
|
}else {
|
|
- viewer.focusOnObject({position: boundingBox.getCenter(new Vector3)}, 'point', duration, {dontChangePos: true});
|
|
|
|
|
|
+ let position = viewer.inputHandler.intersect ? viewer.inputHandler.intersect.location : boundingBox.getCenter(new Vector3);
|
|
|
|
+ viewer.focusOnObject({position}, 'point', duration, {dontChangePos: true});
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|