|
@@ -437,10 +437,12 @@
|
|
|
|
|
|
urls:{
|
|
|
//localTextures:'../resources/textures/',
|
|
|
- prefix: 'https://laser-oss.4dkankan.com',//oss
|
|
|
+ prefix1: 'https://laser-oss.4dkankan.com',//oss
|
|
|
prefix2: 'https://testlaser.4dkankan.com',
|
|
|
prefix3: 'https://4dkk.4dage.com',
|
|
|
- prefix4: 'https://uat-laser.4dkankan.com/',//test.4dkankan
|
|
|
+ prefix4: 'https://uat-laser.4dkankan.com',//test.4dkankan
|
|
|
+ prefix5: 'https://laser.4dkankan.com',
|
|
|
+ prefix6: 'https://mix3d.4dkankan.com/backend',
|
|
|
|
|
|
},
|
|
|
|
|
@@ -734,7 +736,7 @@
|
|
|
number: '', //场景序号
|
|
|
originDatasetId:'',//场景原本的数据集id,应该就是数据集第一个吧
|
|
|
isOfficial:false,
|
|
|
- webSite:'testdata',//'data', //不同环境对应的静态文件的地址不同
|
|
|
+ webSite:'testdata',//正式:'datav1', //不同环境对应的静态文件的地址不同
|
|
|
|
|
|
isLocal:false, //是否本地 局域网版本
|
|
|
libsUrl:'../libs/',
|
|
@@ -780,7 +782,9 @@
|
|
|
rotAroundPoint:true,//点云模式是否能绕intersectPoint旋转
|
|
|
tourTestCameraMove:false, //测试镜头时,不移动真实的镜头, 只移动frustum
|
|
|
cameraAniSmoothRatio : 20, //镜头动画平滑系数,越高越平滑
|
|
|
- urls : $.extend({}, config$1.urls),
|
|
|
+ urls : $.extend({}, config$1.urls, {
|
|
|
+ prefix : config$1.urls.prefix4 //主要使用的 是测试环境,根据不同工程更改
|
|
|
+ }),
|
|
|
|
|
|
|
|
|
useDepthTex: true,//使用深度贴图,但不代表一定有(得到的intersect更快速准确和稳定) SS-t-7DUfWAUZ3V
|
|
@@ -63457,7 +63461,7 @@ void main() {
|
|
|
data.forEach((dataset,index)=>{
|
|
|
if(!ifReload){
|
|
|
var datasetCode = dataset.sceneCode || dataset.name; //对应4dkk的场景码
|
|
|
- var cloudPath = `${Potree.settings.urls.prefix}/${Potree.settings.webSite}/${datasetCode}/data/${datasetCode}/webcloud/cloud.js`;
|
|
|
+ var cloudPath = `${Potree.settings.urls.prefix1}/${Potree.settings.webSite}/${datasetCode}/data/${datasetCode}/webcloud/cloud.js`;
|
|
|
var timeStamp = dataset.createTime ? dataset.createTime.replace(/[^0-9]/ig,'') : ''; //每重算一次后缀随createTime更新一次
|
|
|
//console.warn(dataset.name, 'timeStamp', timeStamp)
|
|
|
Potree.loadPointCloud(cloudPath, dataset.name ,datasetCode, timeStamp, e => {
|
|
@@ -63478,9 +63482,18 @@ void main() {
|
|
|
pointcloud.timeStamp = timeStamp;
|
|
|
transformPointcloud(pointcloud,dataset);
|
|
|
scene.addPointCloud(pointcloud);
|
|
|
+
|
|
|
+ if(!Potree.settings.isOfficial){
|
|
|
+ Potree.settings.floorplanEnables[dataset.id] = true;
|
|
|
+ Potree.settings.floorplanType[dataset.id] = 'default';
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
pointcloudLoaded ++;
|
|
|
if(pointcloudLoaded == datasetLength)pointcloudLoadDone();
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
Potree.loadPanos(dataset.id, (data) => {
|
|
|
//console.log('loadPanos',dataset.sceneCode, dataset.id, data)
|
|
|
viewer.images360.addPanoData(data, dataset.id );
|
|
@@ -63811,7 +63824,7 @@ void main() {
|
|
|
Potree.loadDatasets((data)=>{
|
|
|
let originDataset = data.find(e=>e.sceneCode == sceneCode);//只加载初始数据集
|
|
|
let timeStamp = originDataset.createTime ? originDataset.createTime.replace(/[^0-9]/ig,'') : ''; //每重算一次后缀随createTime更新一次
|
|
|
- let cloudPath = `${Potree.settings.urls.prefix}/${Potree.settings.webSite}/${sceneCode}/data/${sceneCode}/webcloud/cloud.js`;
|
|
|
+ let cloudPath = `${Potree.settings.urls.prefix1}/${Potree.settings.webSite}/${sceneCode}/data/${sceneCode}/webcloud/cloud.js`;
|
|
|
loadCloud(cloudPath, originDataset.sceneName, sceneCode, timeStamp, originDataset.color);
|
|
|
}, sceneCode, onError);
|
|
|
|
|
@@ -75039,7 +75052,7 @@ void main() {
|
|
|
percent = 0;
|
|
|
hasPlayedTime += e.delta;
|
|
|
transitionRatio = startTransitionRatio;
|
|
|
- console.log('延迟开始');
|
|
|
+ //console.log('延迟开始')
|
|
|
if(hasPlayedTime > startDelay){
|
|
|
tStart = performance.now();
|
|
|
}
|
|
@@ -75074,7 +75087,7 @@ void main() {
|
|
|
this.pause();
|
|
|
}else {
|
|
|
hasStoppedTime += e.delta;
|
|
|
- console.log('延迟结束');
|
|
|
+ //console.log('延迟结束')
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -78495,7 +78508,7 @@ void main() {
|
|
|
|
|
|
viewer.setCameraLayers(o.camera, ['measure']);
|
|
|
|
|
|
- if(o.screenshot){ //抗锯齿
|
|
|
+ if(o.screenshot && this.viewer.ssaaRenderPass.enabled){ //抗锯齿
|
|
|
this.viewer.ssaaRenderPass.sampleLevel = 4;
|
|
|
this.viewer.composer.render(this.scene, o.camera );
|
|
|
/* viewer.scene.measurements.forEach(e=>{ //隐藏除了label以外的
|
|
@@ -80272,7 +80285,7 @@ void main() {
|
|
|
set(1,color1); set(5,color1);set(6,color1);
|
|
|
set(2,mid); set(3,mid);set(7,mid);
|
|
|
set(4,color2); set(8,color2);set(9,color2);
|
|
|
- geometry.addAttribute("color", new BufferAttribute(new Float32Array(colors), 3));
|
|
|
+ geometry.setAttribute("color", new BufferAttribute(new Float32Array(colors), 3));
|
|
|
};
|
|
|
var blue1 = [1/255,238/255,245/255]; //逐渐变深
|
|
|
var blue2 = [20/255,146/255,170/255];
|
|
@@ -83806,14 +83819,14 @@ void main() {
|
|
|
data.id = e.id;
|
|
|
data.globalLocation = Potree.Utils.VectorFactory.fromArray3(e.location),
|
|
|
data.orientation = Potree.Utils.QuaternionFactory.fromArray(e.orientation);
|
|
|
- if(Potree.fileServer){
|
|
|
- data.filePath = `${Potree.settings.urls.prefix}${e.file_path}`;
|
|
|
- }else {
|
|
|
- data.filePath = `${Potree.settings.urls.prefix}/data/${Potree.settings.number}/${e.file_path}`;
|
|
|
- }
|
|
|
+ //if(Potree.fileServer){
|
|
|
+ data.filePath = `${Potree.settings.urls.prefix1}${e.file_path}`;
|
|
|
+ //}else{
|
|
|
+ // data.filePath = `${Potree.settings.urls.prefix}/data/${Potree.settings.number}/${e.file_path}`
|
|
|
+ //}
|
|
|
|
|
|
//if(!data.filePath.includes('building_1'))data.filePath = data.filePath.replace('building','building_1')//暂时
|
|
|
- data.fileName = '$DEPTH/$X/$Y.png',//e.file_name,
|
|
|
+ data.fileName = '$DEPTH/$X/$Y.png'; //e.file_name,
|
|
|
data.type = e.type,
|
|
|
data.mapSizeM = e.map_size_m,
|
|
|
data.tileSizePx = e.tile_size_px,
|
|
@@ -85732,7 +85745,7 @@ void main() {
|
|
|
|
|
|
// check for a click
|
|
|
|
|
|
- if(pressDistance < Potree.config.clickMaxDragDis && pressTime<Potree.config.clickMaxPressTime){
|
|
|
+ if(pressDistance < Potree.config.clickMaxDragDis && pressTime<Potree.config.clickMaxPressTime && !e.unableClick){
|
|
|
let clickElement;
|
|
|
if(this.hoveredElements){
|
|
|
clickElement = this.hoveredElements.find(e=>e.object._listeners['click']);
|
|
@@ -85906,12 +85919,15 @@ void main() {
|
|
|
//点云模式,对没加载出的点云不准确。 尤其是需要修改相机位置时,因临时修改并不能使点云加载。
|
|
|
}
|
|
|
|
|
|
- getIntersect(viewport, onlyGetIntersect, pickWindowSize, dontIntersect, usePointcloud, prop={}){
|
|
|
+
|
|
|
+
|
|
|
+ getIntersect(viewport, onlyGetIntersect, pickWindowSize, dontIntersect, usePointcloud, prop={}){// usePointcloud:必须使用点云
|
|
|
let intersectPoint;
|
|
|
let camera = viewport.camera;
|
|
|
let raycaster;
|
|
|
- if(Potree.settings.displayMode == 'showPanos' && viewer.images360.currentPano.pointcloud.hasDepthTex && !usePointcloud && !this.isMeasuring && viewport == viewer.mainViewport ){
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
+ let getByDepthTex = ()=>{
|
|
|
/* if(prop.point){
|
|
|
raycaster = new THREE.Raycaster()
|
|
|
var dir = new THREE.Vector3().subVectors(prop.point, camera.position).normalize()
|
|
@@ -85926,8 +85942,9 @@ void main() {
|
|
|
intersect = Utils.getIntersect(camera, [viewer.images360.cube], this.pointer, raycaster);
|
|
|
}
|
|
|
intersectPoint = viewer.images360.depthSampler.sample(intersect, prop.pano, !!prop.point); //可能不准确, 因pano可能未加载depthTex
|
|
|
-
|
|
|
- }else {
|
|
|
+ };
|
|
|
+
|
|
|
+ let getByCloud = ()=>{
|
|
|
if(prop.point){
|
|
|
prop.cameraPos && camera.position.copy(prop.cameraPos);
|
|
|
camera.lookAt(prop.point);
|
|
@@ -85954,6 +85971,19 @@ void main() {
|
|
|
this.pointer.copy(prop.pointer);
|
|
|
this.mouse.copy(prop.mouse);
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ };
|
|
|
+
|
|
|
+ let canUseDepthTex = Potree.settings.displayMode == 'showPanos' && viewer.images360.currentPano.pointcloud.hasDepthTex && viewport == viewer.mainViewport && !usePointcloud;
|
|
|
+
|
|
|
+ if(canUseDepthTex && !this.isMeasuring){
|
|
|
+ getByDepthTex();
|
|
|
+ }else {
|
|
|
+ getByCloud();
|
|
|
+ if(!intersectPoint && canUseDepthTex ){//得不到的话再使用 getByDepthTex 得一次
|
|
|
+ getByDepthTex();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//console.log(viewport.name , intersectPoint && intersectPoint.location )
|
|
@@ -86113,9 +86143,7 @@ void main() {
|
|
|
|
|
|
|
|
|
} else {
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
if (this.logMessages) console.log(this.constructor.name + ': drag: ');
|
|
|
|
|
|
let dragConsumed = false;
|
|
@@ -91772,7 +91800,7 @@ void main() {
|
|
|
},
|
|
|
set: (mode)=> {
|
|
|
latestRequestMode = mode;
|
|
|
- console.warn('Request setMode: ' + mode);
|
|
|
+ //console.warn('Request setMode: ' + mode)
|
|
|
|
|
|
if(mode != displayMode){
|
|
|
let config = Potree.config.displayMode[mode];
|
|
@@ -91940,7 +91968,7 @@ void main() {
|
|
|
|
|
|
|
|
|
this.dispatchEvent({type:'endChangeMode',mode});
|
|
|
- console.log('setModeSuccess: ' + mode);
|
|
|
+ //console.log('setModeSuccess: ' + mode)
|
|
|
}else {
|
|
|
|
|
|
//this.dispatchEvent({type:'endChangeMode',mode})
|
|
@@ -118509,7 +118537,7 @@ ENDSEC
|
|
|
let w$2 = 200/1.43;
|
|
|
let maxPX = 1366*1024; //ipad pro. 大于这个分辨率的就直接用devicePixelRatio, 如macbook也是
|
|
|
const width2dPX = Math.round(window.devicePixelRatio >= 2 ? ( window.screen.width * window.screen.height >= maxPX ? window.devicePixelRatio/1.2 : window.devicePixelRatio/1.5)*w$2 : w$2); //触屏或高分辨率的可能要放大些。但在手机上不能太大
|
|
|
- console.log('width2dPX', width2dPX);
|
|
|
+ //console.log('width2dPX', width2dPX)
|
|
|
|
|
|
|
|
|
|
|
@@ -126496,7 +126524,7 @@ ENDSEC
|
|
|
|
|
|
|
|
|
|
|
|
- console.log('create viewer');
|
|
|
+ //console.log('create viewer')
|
|
|
|
|
|
this.navigateMode = 'free'; // 'panorama'; 'free'自由模式是只显示点云或者未进入到漫游点,
|
|
|
this.isEdit = true;
|
|
@@ -129235,31 +129263,33 @@ ENDSEC
|
|
|
}));
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- view.render || this.clear(params);
|
|
|
- pRenderer.clearTargets(params);
|
|
|
-
|
|
|
-
|
|
|
- //先渲染不透明的model:
|
|
|
- /* if(this.objs.children.length){
|
|
|
- this.renderer.setRenderTarget(params.target||null)
|
|
|
- this.setCameraLayers(params.camera, ['model'] )//先渲染模型后渲染点云,否则半透明的点云的blend没有混合模型的部分(但模型为何可以混合点云的部分?估计还是PotreeRenderer有问题)
|
|
|
+ if(!view.render){
|
|
|
+ this.clear(params);
|
|
|
+ pRenderer.clearTargets(params);
|
|
|
+
|
|
|
+
|
|
|
+ //先渲染不透明的model:
|
|
|
+ /* if(this.objs.children.length){
|
|
|
+ this.renderer.setRenderTarget(params.target||null)
|
|
|
+ this.setCameraLayers(params.camera, ['model'] )//先渲染模型后渲染点云,否则半透明的点云的blend没有混合模型的部分(但模型为何可以混合点云的部分?估计还是PotreeRenderer有问题)
|
|
|
+
|
|
|
+ this.renderer.render(this.scene.scene, params.camera);
|
|
|
+ } */
|
|
|
+
|
|
|
|
|
|
- this.renderer.render(this.scene.scene, params.camera);
|
|
|
- } */
|
|
|
-
|
|
|
-
|
|
|
- if(Potree.settings.notAdditiveBlending){
|
|
|
- params.renderBeforeCloud = true;
|
|
|
- this.renderOverlay1(params);
|
|
|
- //view.render || this.renderOverlay(params)
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- if(!view.noPointcloud ){
|
|
|
|
|
|
+ if(Potree.settings.notAdditiveBlending){
|
|
|
+ params.renderBeforeCloud = true;
|
|
|
+ this.renderOverlay1(params);
|
|
|
+ //view.render || this.renderOverlay(params)
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ /* view.render || this.clear(params)
|
|
|
+ pRenderer.clearTargets(params); */
|
|
|
+
|
|
|
+
|
|
|
+ if(!view.noPointcloud ){
|
|
|
//if(!params.target){
|
|
|
//params.width = width; params.height = height;
|
|
|
|
|
@@ -129267,8 +129297,7 @@ ENDSEC
|
|
|
if(view.render){
|
|
|
params.noBG = true;
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
|
|
|
view.beforeRender && view.beforeRender();
|
|
|
|
|
@@ -129282,17 +129311,23 @@ ENDSEC
|
|
|
pRenderer.render(params);
|
|
|
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
|
|
|
+ if(!view.render){
|
|
|
+ //view.render || this.renderOverlay(params)
|
|
|
+ if(Potree.settings.notAdditiveBlending){
|
|
|
+ params.renderBeforeCloud = false;
|
|
|
+ this.renderOverlay1(params);
|
|
|
+ this.renderOverlay2(params);
|
|
|
+ }else {
|
|
|
+ /* view.render || */this.renderOverlay(params);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
|
|
|
- //view.render || this.renderOverlay(params)
|
|
|
- if(Potree.settings.notAdditiveBlending){
|
|
|
- params.renderBeforeCloud = false;
|
|
|
- this.renderOverlay1(params);
|
|
|
- this.renderOverlay2(params);
|
|
|
- }else {
|
|
|
- view.render || this.renderOverlay(params);
|
|
|
- }
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
@@ -131661,7 +131696,10 @@ ENDSEC
|
|
|
|
|
|
async function loadFile(path, callback, onError){
|
|
|
if(Potree.fileServer){
|
|
|
+
|
|
|
Potree.fileServer.get(path).then(data=>{
|
|
|
+ if(data.data)data = data.data;
|
|
|
+ if(data.data)data = data.data; //融合页面getdataset需要查找两次data
|
|
|
callback && callback(data);
|
|
|
}).catch(onError);
|
|
|
}else {
|
|
@@ -131690,7 +131728,7 @@ ENDSEC
|
|
|
|
|
|
//path = `${Potree.settings.urls.prefix2}/indoor/${Potree.settings.number}/api/datasets`
|
|
|
//现在只能加载得了本地的了
|
|
|
- path = `${Potree.settings.urls.prefix4}laser/dataset/${sceneCode}/getDataSet`;
|
|
|
+ path = `${Potree.settings.urls.prefix}/laser/dataset/${sceneCode}/getDataSet`;
|
|
|
//path = `${Potree.scriptPath}/data/${sceneCode}/getDataSet.json`
|
|
|
|
|
|
}
|
|
@@ -131703,6 +131741,7 @@ ENDSEC
|
|
|
async function loadMapEntity(datasetId, force){
|
|
|
if(!Potree.settings.floorplanEnable && !force && Potree.fileServer )return /* 等待平面图类型定义好会加载 */
|
|
|
|
|
|
+
|
|
|
let loaded = 0;
|
|
|
|
|
|
let needLoads = datasetId == 'all' ? viewer.scene.pointclouds.map(e=>e.dataset_id) : [datasetId];
|
|
@@ -131726,15 +131765,20 @@ ENDSEC
|
|
|
};
|
|
|
|
|
|
needLoads.forEach(dataset_id=>{
|
|
|
- let floorplanType = Potree.settings.floorplanType[dataset_id];
|
|
|
+ let floorplanType = Potree.settings.floorplanType[dataset_id], prefix = '';
|
|
|
+ if(!Potree.fileServer){
|
|
|
+ prefix = Potree.settings.urls.prefix;
|
|
|
+ }
|
|
|
if(!floorplanType)return
|
|
|
var path;
|
|
|
- if(Potree.fileServer){
|
|
|
- path = `/laser/tiledMap/${Potree.settings.number}/tiledMap/${floorplanType}/${dataset_id}`;
|
|
|
- }else {
|
|
|
- path = `${Potree.settings.urls.prefix2}/indoor/${Potree.settings.number}/api/tiled_maps`;
|
|
|
+ /* if(Potree.fileServer){
|
|
|
+ path = `/laser/tiledMap/${Potree.settings.number}/tiledMap/${floorplanType}/${dataset_id}`
|
|
|
+ }else{
|
|
|
+ path = `${Potree.settings.urls.prefix2}/indoor/${Potree.settings.number}/api/tiled_maps`
|
|
|
|
|
|
- }
|
|
|
+ } */
|
|
|
+ path = `${prefix}/laser/tiledMap/${Potree.settings.number}/tiledMap/${floorplanType}/${dataset_id}`;
|
|
|
+
|
|
|
Potree.settings.floorplanRequests[dataset_id] = true; //开始加载了
|
|
|
return loadFile(path, callback.bind(this, dataset_id, floorplanType) )
|
|
|
});
|
|
@@ -131751,7 +131795,7 @@ ENDSEC
|
|
|
}else {
|
|
|
//path = `${Potree.settings.urls.prefix2}/indoor/${Potree.settings.number}/api/images/filter` + query
|
|
|
//path = `${Potree.scriptPath}/data/${Potree.settings.number}/panos-${datasetId}.json`
|
|
|
- path = `${Potree.settings.urls.prefix4}laser/filter/${Potree.settings.number}/query` + query;
|
|
|
+ path = `${Potree.settings.urls.prefix}/laser/filter/${Potree.settings.number}/query` + query;
|
|
|
|
|
|
|
|
|
}
|