|
@@ -21790,7 +21790,7 @@
|
|
|
Potree.settings.sizeFitToLevel = true; //当type为衰减模式时自动根据level调节大小。每长一级,大小就除以2
|
|
|
Potree.loadPointCloudScene = function (url, type, id, title, done, onError) {
|
|
|
//对应4dkk的场景码
|
|
|
-
|
|
|
+ var dataset;
|
|
|
var loadCloud = _ref => {
|
|
|
var {
|
|
|
cloudPath,
|
|
@@ -21804,6 +21804,7 @@
|
|
|
var pointcloud = e.pointcloud;
|
|
|
var config = Potree.config.material;
|
|
|
var material = pointcloud.material;
|
|
|
+ pointcloud.datasetData = dataset;
|
|
|
material.minSize = config.minSize;
|
|
|
material.maxSize = config.maxSize;
|
|
|
material.pointSizeType = config.pointSizeType; //Potree.PointSizeType[config.pointSizeType]//Potree.PointSizeType.ADAPTIVE;//FIXED
|
|
@@ -21830,12 +21831,6 @@
|
|
|
font: [null, 10]
|
|
|
});
|
|
|
}
|
|
|
-
|
|
|
- /* Potree.loadPanos(dataset.id, (data) => { //暂时不加载panos了,因为没有id
|
|
|
- //console.log('loadPanos',dataset.sceneCode, dataset.id, data)
|
|
|
- viewer.images360.addPanoData(data, dataset.id )
|
|
|
- viewer.images360.loadDone()
|
|
|
- viewer.scene.add360Images(viewer.images360); */
|
|
|
viewer.dispatchEvent('allLoaded');
|
|
|
done(pointcloud);
|
|
|
}, onError);
|
|
@@ -21847,7 +21842,7 @@
|
|
|
var timeStamp = originDataset.updateTime ? originDataset.updateTime.replace(/[^0-9]/ig, '') : ''; //每重算一次后缀随updateTime更新一次
|
|
|
//let cloudPath = `${Potree.settings.urls.prefix1}/${Potree.settings.webSite}/${sceneCode}/data/${sceneCode}/webcloud/cloud.js`
|
|
|
var cloudPath = "".concat(Potree.settings.urls.prefix1, "/").concat(originDataset.webBin); //webBin添加原因:每次裁剪之类的操作会换路径,因为oss文件缓存太严重,更新慢
|
|
|
-
|
|
|
+ dataset = originDataset;
|
|
|
loadCloud({
|
|
|
cloudPath,
|
|
|
sceneName: originDataset.sceneName,
|
|
@@ -21859,6 +21854,7 @@
|
|
|
} else {
|
|
|
//las or ply 直接用url
|
|
|
var name = type + '|' + id + '|' + title;
|
|
|
+ //有漫游点吗
|
|
|
if (url instanceof Array) {
|
|
|
if (url.length == 1) {
|
|
|
url = url[0];
|
|
@@ -22028,6 +22024,9 @@
|
|
|
modelEditing = null;
|
|
|
}
|
|
|
MergeEditor.modelAdded(model);
|
|
|
+ Potree.settings.mergeType2 && model.addEventListener('changeSelect', e => {
|
|
|
+ e.selected ? MergeEditor.transformControls.attach(model) : MergeEditor.transformControls.detach();
|
|
|
+ });
|
|
|
};
|
|
|
if (prop.type == 'glb') {
|
|
|
var callback = object => {
|
|
@@ -22115,34 +22114,16 @@
|
|
|
pointcloud.matrixAutoUpdate = true;
|
|
|
pointcloud.initialPosition = pointcloud.position.clone();
|
|
|
pointcloud.pos1MatrixInvert = new Matrix4().setPosition(pointcloud.initialPosition).invert();
|
|
|
-
|
|
|
- /* let maintainBtmZ = ()=>{
|
|
|
- MergeEditor.setModelBtmHeight(pointcloud)
|
|
|
- updateMatrix()
|
|
|
- }
|
|
|
- let updateMatrix = ()=>{
|
|
|
- setMatrix(pointcloud)
|
|
|
- pointcloud.dispatchEvent('transformChanged')
|
|
|
+ if (pointcloud.datasetData) {
|
|
|
+ Potree.loadPanos(pointcloud.datasetData.id, data => {
|
|
|
+ viewer.images360.addPanoData(data, pointcloud.datasetData.id);
|
|
|
+ viewer.images360.loadDone();
|
|
|
+ viewer.scene.add360Images(viewer.images360);
|
|
|
+ loadDone(pointcloud);
|
|
|
+ }, prop.url);
|
|
|
+ } else {
|
|
|
+ loadDone(pointcloud);
|
|
|
}
|
|
|
- pointcloud.addEventListener('position_changed', updateMatrix )
|
|
|
- pointcloud.addEventListener("orientation_changed", maintainBtmZ )
|
|
|
- pointcloud.addEventListener("scale_changed", maintainBtmZ ) */
|
|
|
-
|
|
|
- loadDone(pointcloud);
|
|
|
- /* pointcloud.addEventListener('select',(e)=>{
|
|
|
- if(Potree.settings.displayMode == 'showPanos')return
|
|
|
- console.log('select',e)
|
|
|
- //viewer.setControls(viewer.orbitControls)
|
|
|
- MergeEditor.focusOnSelect(pointcloud)
|
|
|
-
|
|
|
- viewer.outlinePass.selectedObjects = [pointcloud]
|
|
|
- return {stopContinue:true}
|
|
|
- },{importance:1})
|
|
|
- pointcloud.addEventListener('deselect',(e)=>{
|
|
|
- console.log('deselect',e)
|
|
|
- //viewer.setControls(viewer.fpControls)
|
|
|
- viewer.outlinePass.selectedObjects = []
|
|
|
- }) */
|
|
|
}, onError);
|
|
|
}
|
|
|
};
|
|
@@ -30604,6 +30585,7 @@
|
|
|
});
|
|
|
}
|
|
|
this.updateCube(this.currentPano);
|
|
|
+ viewer.setControls(viewer.fpControls);
|
|
|
} else {
|
|
|
if (camera.limitFar) camera.far = Potree.settings.cameraFar; //修改far
|
|
|
Potree.settings.pointDensity = Potree.settings.UserPointDensity;
|
|
@@ -30614,6 +30596,7 @@
|
|
|
e.material.pointSizeType = Potree.config.material.pointSizeType;
|
|
|
});
|
|
|
}
|
|
|
+ Potree.settings.editType == 'merge' && viewer.setControls(viewer.orbitControls);
|
|
|
}
|
|
|
camera.updateProjectionMatrix();
|
|
|
if (this.elDisplayModel) {
|
|
@@ -32357,6 +32340,9 @@
|
|
|
if (this.closestPano == pano) this.closestPano = null;
|
|
|
});
|
|
|
this.panos.push(pano);
|
|
|
+ this.neighbourMap[info.id] = {};
|
|
|
+ pano.label && Potree.Utils.setObjectLayers(pano.label, 'bothMapAndScene');
|
|
|
+ pano.label2 && Potree.Utils.setObjectLayers(pano.label2, 'bothMapAndScene');
|
|
|
if (Potree.settings.editType == 'pano') {
|
|
|
Potree.settings.datasetsPanos[datasetId].panos.push(pano);
|
|
|
}
|
|
@@ -32364,14 +32350,7 @@
|
|
|
}
|
|
|
loadDone() {
|
|
|
Potree.Utils.setObjectLayers(this.node, 'sceneObjects');
|
|
|
- //this.updateCube(/* viewer.bound */)
|
|
|
-
|
|
|
- this.panos.forEach(e => {
|
|
|
- this.neighbourMap[e.id] = {};
|
|
|
- e.label && Potree.Utils.setObjectLayers(e.label, 'bothMapAndScene');
|
|
|
- e.label2 && Potree.Utils.setObjectLayers(e.label2, 'bothMapAndScene');
|
|
|
- });
|
|
|
- this.tileDownloader.setPanoData(this.panos, [] /* , Potree.settings.number */);
|
|
|
+ this.tileDownloader.setPanoData(this.panos, []);
|
|
|
{
|
|
|
var minSize = new Vector3(1, 1, 1);
|
|
|
this.bound = math.getBoundByPoints(this.panos.map(e => e.position), minSize);
|
|
@@ -76456,6 +76435,7 @@
|
|
|
|
|
|
var texLoader$a = new TextureLoader();
|
|
|
texLoader$a.crossOrigin = "anonymous";
|
|
|
+ var boxHelper = new Box3Helper$1(new Box3(new Vector3(-0.5, -0.5, -0.5), new Vector3(0.5, 0.5, 0.5)));
|
|
|
var edgeStrengths = {
|
|
|
pointcloud: 4,
|
|
|
glb: 100
|
|
@@ -76498,6 +76478,8 @@
|
|
|
bus: new EventDispatcher(),
|
|
|
SplitScreen: new SplitScreen(),
|
|
|
init() {
|
|
|
+ viewer.scene.scene.add(boxHelper);
|
|
|
+ Potree.Utils.updateVisible(boxHelper, 'unselect', false);
|
|
|
this.history = new History({
|
|
|
applyData: data => {
|
|
|
if (data.object.parent /* && data.object == this.selected */) {
|
|
@@ -76885,7 +76867,30 @@
|
|
|
});
|
|
|
}
|
|
|
},
|
|
|
+ updateBoxHelper(model) {
|
|
|
+ var size = new Vector3();
|
|
|
+ model.boundingBox.getSize(size);
|
|
|
+ size.multiply(model.scale);
|
|
|
+ boxHelper.scale.copy(size);
|
|
|
+ var center = new Vector3();
|
|
|
+ model.boundingBox.getCenter(center);
|
|
|
+ center.applyMatrix4(model.matrixWorld);
|
|
|
+ //center.add(model.position)
|
|
|
+ boxHelper.position.copy(center);
|
|
|
+ boxHelper.quaternion.copy(model.quaternion);
|
|
|
+ },
|
|
|
showModelOutline(model, state) {
|
|
|
+ //if(Potree.settings.dontUseOutline){//高斯很卡
|
|
|
+ if (state !== false) {
|
|
|
+ this.updateBoxHelper(model);
|
|
|
+ Potree.Utils.updateVisible(boxHelper, 'unselect', true);
|
|
|
+ } else {
|
|
|
+ //model.remove(boxHelper)
|
|
|
+ Potree.Utils.updateVisible(boxHelper, 'unselect', false);
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ //}
|
|
|
+
|
|
|
if (this.fadeOutlineAuto) {
|
|
|
if (state === false) {
|
|
|
viewer.outlinePass.selectedObjects = [];
|
|
@@ -77030,9 +77035,19 @@
|
|
|
measure.setSelected(false); //隐藏edgelabel
|
|
|
}
|
|
|
});
|
|
|
+
|
|
|
+ //反向求transformMatrix 参考Alignment.js 移动漫游点
|
|
|
+ if (model.isPointcloud && model.transformMatrix) {
|
|
|
+ model.transformMatrix.multiplyMatrices(model.matrix, model.pos1MatrixInvert);
|
|
|
+ model.transformInvMatrix.copy(model.transformMatrix).invert();
|
|
|
+ model.panos.forEach(e => e.transformByPointcloud());
|
|
|
+ }
|
|
|
model.lastMatrixWorld = model.matrixWorld.clone();
|
|
|
viewer.dispatchEvent('content_changed');
|
|
|
viewer.mapViewer && Potree.settings.showObjectsOnMap && viewer.mapViewer.dispatchEvent('content_changed');
|
|
|
+
|
|
|
+ //--------
|
|
|
+ this.updateBoxHelper(model);
|
|
|
},
|
|
|
changeOpacity(model, opacity) {
|
|
|
var isRoot = model.dataset_id != void 0; //是否是最外层
|
|
@@ -91111,13 +91126,13 @@
|
|
|
//viewer.mainViewport.view.setView({position: new THREE.Vector3(-4.980, -5.3879, 5.4503095), quaternion:new THREE.Quaternion(0.5750,-0.2809,-0.3372,0.6903)})
|
|
|
|
|
|
gsViewer.splatMesh.onSplatTreeReadyCallback = () => {
|
|
|
+ loadDone(gsViewer.splatMesh);
|
|
|
var {
|
|
|
sceneMax,
|
|
|
sceneMin
|
|
|
} = gsViewer.splatMesh.splatTree.subTrees[0];
|
|
|
gsViewer.splatMesh.boundingBox.min.copy(sceneMin);
|
|
|
gsViewer.splatMesh.boundingBox.max.copy(sceneMax);
|
|
|
- loadDone(gsViewer.splatMesh);
|
|
|
};
|
|
|
});
|
|
|
|
|
@@ -92291,11 +92306,14 @@
|
|
|
return loadFile(path, null, callback.bind(this, dataset_id, floorplanType));
|
|
|
});
|
|
|
}
|
|
|
- async function loadPanos(datasetId, callback) {
|
|
|
+ async function loadPanos(datasetId, callback, number) {
|
|
|
var path;
|
|
|
//let query = `?datasetId=${datasetId}` //`?lat=${center.lat}&lon=${center.lon}&radius=200000`
|
|
|
if (Potree.fileServer) {
|
|
|
path = "/laser/filter/".concat(Potree.settings.number, "/query");
|
|
|
+ } else if (Potree.settings.mergeType2) {
|
|
|
+ //每个场景只加载初始数据集
|
|
|
+ path = "".concat(Potree.settings.urls.prefix, "/laser/filter/").concat(number, "/query");
|
|
|
} else {
|
|
|
//path = `${Potree.settings.urls.prefix2}/indoor/${Potree.settings.number}/api/images/filter` + query
|
|
|
//path = `${Potree.scriptPath}/data/${Potree.settings.number}/panos-${datasetId}.json`
|