|
@@ -34996,7 +34996,8 @@
|
|
|
var easeName = arguments.length > 4 ? arguments[4] : undefined;
|
|
|
var callback = arguments.length > 5 ? arguments[5] : undefined;
|
|
|
//前两个参数有xy即可
|
|
|
- endPosition = new Vector3(endPosition.x, endPosition.y, Potree.config.map.cameraHeight);
|
|
|
+ var z = Math.max(Potree.config.map.cameraHeight, endPosition.z + (boundSize !== null && boundSize !== void 0 && boundSize.z ? boundSize.z / 2 : 0));
|
|
|
+ endPosition = new Vector3(endPosition.x, endPosition.y, z);
|
|
|
this.view.moveOrthoCamera(this.viewports[0], {
|
|
|
endPosition,
|
|
|
boundSize,
|
|
@@ -36133,11 +36134,13 @@
|
|
|
this.temp.sizeFitToLevel[str] = size;
|
|
|
}
|
|
|
} else {
|
|
|
- /* let base = 0.007; */var _base = this.material.spacing / Math.pow(2, nodeMaxLevel); //点云大小在level为0时设置为spacing,每长一级,大小就除以2
|
|
|
+ var _base = 0.015; //2024.8.21 又要求需要不同场景点云大小相同,所以只能固定值了 (正式环境这两个场景 SG-5yxFuWhEMlg SG-XZNyvCDk0jz)
|
|
|
+ //let base = this.material.spacing / Math.pow(2, nodeMaxLevel) //在保证最高级别大小刚好的情况下,不改变level降低后的大小
|
|
|
//base的数值理论上应该是右侧算出来的,但发现有的场景nodeMaxLevel和nodeMaxLevelPredict差别较大的点云显示也过大,而直接换成固定值反而可以适应所有场景。该固定值来源于 getHighestNodeSpacing 最小值,修改了下。(会不会是我们的相机其实该值是固定的,根据该值算出的spacing才是有误差的? 如果换了相机是否要改值?)
|
|
|
//2022-12-21又换回非固定值。因为有的场景如SS-t-t01myDqnfE的两个数据集密集程度差别很大,应该将稀疏点云的大小设置的大些。 但是这样的缺点是两个数据集因相接处有大有小无法融合。
|
|
|
- size = _base * 20 * num_; /* * window.devicePixelRatio */
|
|
|
+ size = _base * 20 * num_;
|
|
|
}
|
|
|
+ //不同数据集点云最高级别时的间距不同,但不知道如何计算, 级别越高点云越密,spacing越大初始级别越密。 但实际并非2的level次方,底数可能1-2之间
|
|
|
}
|
|
|
//console.log('changePointSize:' + this.dataset_id + ' , num: ' + (num && num.toPrecision(3)) + ' , size: ' + size.toPrecision(3), 'nodeMaxLevel', nodeMaxLevel.toPrecision(3), 'testMaxNodeCount',this.testMaxNodeCount /* this.material.spacing */)
|
|
|
if (size) {
|
|
@@ -60469,7 +60472,7 @@
|
|
|
var extensions = this.extensions;
|
|
|
var materialDef = json.materials[materialIndex];
|
|
|
if (!materialDef) {
|
|
|
- console.error('3dtiles数据有问题'); //add
|
|
|
+ console.error('gltf材质数据有问题, 可能引起一些列错误'); //add
|
|
|
materialDef = json.materials[0] || {};
|
|
|
}
|
|
|
var materialType;
|
|
@@ -75192,7 +75195,7 @@
|
|
|
domElement = document;
|
|
|
}
|
|
|
Object3D.call(this);
|
|
|
- this.visible = false;
|
|
|
+ Potree.Utils.updateVisible(this, 'attach', false);
|
|
|
this.domElement = domElement;
|
|
|
var _gizmo = new TransformControlsGizmo(options);
|
|
|
this.add(_gizmo);
|
|
@@ -75338,7 +75341,7 @@
|
|
|
// Set current object
|
|
|
this.attach = function (object) {
|
|
|
this.object = object;
|
|
|
- this.visible = true;
|
|
|
+ Potree.Utils.updateVisible(this, 'attach', true);
|
|
|
//Config.keyCon = false;//add
|
|
|
//this.linesAssistance.setVisible(true)
|
|
|
viewer.dispatchEvent('content_changed');
|
|
@@ -75348,10 +75351,9 @@
|
|
|
// Detatch from object
|
|
|
this.detach = function () {
|
|
|
this.object = undefined;
|
|
|
- this.visible = false;
|
|
|
this.axis = null;
|
|
|
//Config.keyCon = true;//add
|
|
|
-
|
|
|
+ Potree.Utils.updateVisible(this, 'attach', false);
|
|
|
//this.linesAssistance.setVisible(false)
|
|
|
viewer.dispatchEvent('content_changed');
|
|
|
return this;
|
|
@@ -77027,7 +77029,7 @@
|
|
|
this.boxHelper.quaternion.copy(model.quaternion);
|
|
|
},
|
|
|
showModelOutline(model, state) {
|
|
|
- if (Potree.settings.mergeType2 || model ? model.fileType == '3dgs' : this.boxHelper.visible) {
|
|
|
+ if (Potree.settings.mergeType2 || (model ? model.fileType == '3dgs' : this.boxHelper.visible)) {
|
|
|
//高斯很卡
|
|
|
if (state !== false) {
|
|
|
this.updateBoxHelper(model);
|
|
@@ -89820,7 +89822,12 @@
|
|
|
}); //更新viewports相机透视 使focusOnObject在此窗口大小下
|
|
|
|
|
|
prisms.forEach(prism => {
|
|
|
- points.push(...prism.points);
|
|
|
+ var prismPoints = prism.points.slice();
|
|
|
+ if (prism.baseModel) {
|
|
|
+ var currentBound = prism.baseModel.currentBound || prism.baseModel.boundingBox.clone().applyMatrix4(prism.baseModel.matrixWorld);
|
|
|
+ prismPoints = prismPoints.map(e => e.clone().setZ(Math.max(e.z, currentBound.max.z)));
|
|
|
+ }
|
|
|
+ points.push(...prismPoints);
|
|
|
prism.setSelected(false);
|
|
|
prism.changeStyleForScreenshot(true, {
|
|
|
hideLabel: info.type != 'prism2d-all',
|
|
@@ -90006,10 +90013,12 @@
|
|
|
}
|
|
|
if (o.focusBoundCenter) {
|
|
|
boundOri.getCenter(target);
|
|
|
+ target.z += 1;
|
|
|
}
|
|
|
var boundSizeOri = boundOri.getSize(new Vector3());
|
|
|
- var boundSizeMap = boundSizeOri.clone().multiplyScalar(o.boundExpandRatio || math.linearClamp(Math.max(boundSizeOri.x, boundSizeOri.y), [0.5, 30], [2.5, 1.2])); //为了能同时看清测量线和地图,当测量线较短时,扩大margin,防止地图过度放大
|
|
|
-
|
|
|
+ var expand = o.boundExpandRatio || math.linearClamp(Math.max(boundSizeOri.x, boundSizeOri.y), [0.5, 30], [2.5, 1.2]); //为了能同时看清测量线和地图,当测量线较短时,扩大margin,防止地图过度放大
|
|
|
+ var boundSizeMap = boundSizeOri.clone();
|
|
|
+ boundSizeMap.x *= expand, boundSizeMap.y *= expand;
|
|
|
boundSizeMap.x = Math.max(minBound.x, boundSizeMap.x);
|
|
|
boundSizeMap.y = Math.max(minBound.y, boundSizeMap.y);
|
|
|
this.mapViewer.moveTo(target.clone(), boundSizeMap, duration, o.margin, null, done);
|
|
@@ -91288,7 +91297,6 @@
|
|
|
gsViewer.start();
|
|
|
gsViewer.splatMesh.updateMatrix();
|
|
|
gsViewer.splatMesh.updateMatrixWorld();
|
|
|
- gsViewer.splatMesh.visible = false;
|
|
|
gsViewer.splatMesh.onSplatTreeReadyCallback = () => {
|
|
|
loadDone(gsViewer.splatMesh);
|
|
|
var {
|
|
@@ -91319,9 +91327,7 @@
|
|
|
if (e.name == 'scene') {
|
|
|
//gsViewer.selfDrivenUpdate()
|
|
|
gsViewer.update();
|
|
|
- if (gsViewer.initialized && gsViewer.splatRenderReady) {
|
|
|
- gsViewer.splatMesh.visible = true;
|
|
|
- }
|
|
|
+ if (gsViewer.initialized && gsViewer.splatRenderReady) {}
|
|
|
}
|
|
|
});
|
|
|
}
|