|
@@ -18972,7 +18972,7 @@
|
|
|
constructor() {
|
|
|
super();
|
|
|
delete this.sceneBG;
|
|
|
- this.cameraP = new PerspectiveCamera(this.fov, 1, Potree.config.view.near, Potree.config.view.near);
|
|
|
+ this.cameraP = new PerspectiveCamera(this.fov, 1, Potree.config.view.near, Potree.config.view.cameraFar);
|
|
|
this.cameraO = new OrthographicCamera(-1, 1, 1, -1, Potree.config.view.near, Potree.settings.cameraFar);
|
|
|
this.cameraP.limitFar = true; //add
|
|
|
this.initializeExtend();
|
|
@@ -21576,7 +21576,7 @@
|
|
|
*/
|
|
|
//=======================================================================
|
|
|
|
|
|
- function panoEditStart(dom, number, fileServer) {
|
|
|
+ function panoEditStart(dom, number, EditCloudsArgs) {
|
|
|
Potree.settings.editType = 'pano';
|
|
|
Potree.settings.number = number;
|
|
|
Potree.settings.unableNavigate = true;
|
|
@@ -21598,6 +21598,15 @@
|
|
|
});
|
|
|
Potree.settings.sizeFitToLevel = true;
|
|
|
}
|
|
|
+ EditCloudsArgs.forEach((e, i) => {
|
|
|
+ //加载点云和漫游点
|
|
|
+ if (e.datasetId == void 0) {
|
|
|
+ console.error('没有datasetId '); // 看看和看见没有
|
|
|
+ e.datasetId = i; //经常没有datasetId所以自己加
|
|
|
+ }
|
|
|
+ Potree.settings.datasetsPanos[e.datasetId] = null;
|
|
|
+ Potree.loadPanosDone(e.datasetId, e.clouds);
|
|
|
+ });
|
|
|
var pointcloudLoadDone = function pointcloudLoadDone() {
|
|
|
//所有点云cloud.js加载完毕后
|
|
|
|
|
@@ -21933,6 +21942,8 @@
|
|
|
//model.lastMatrixWorld = model.matrixWorld.clone()
|
|
|
model.lastMatrixWorld = new Matrix4();
|
|
|
MergeEditor.modelTransformCallback(model, true);
|
|
|
+ prop.scale != void 0 && model.isPointcloud && model.changePointSize(); //有的被缩放的很小导致testMaxNodeLevel时距离较远时被return 但点云过大急需changesize
|
|
|
+
|
|
|
done(model); // 先发送成功,因为2d界面会随机执行changePosition等初始化,然后这边再将模型移到中心地面上
|
|
|
|
|
|
if (prop.isFirstLoad) {
|
|
@@ -22206,7 +22217,8 @@
|
|
|
view: {
|
|
|
fov: 70,
|
|
|
//navvis:50
|
|
|
- near: 0.1,
|
|
|
+ near: 0.05,
|
|
|
+ // too small will result in z-fighting
|
|
|
far: 10000
|
|
|
},
|
|
|
map: {
|
|
@@ -35698,7 +35710,7 @@
|
|
|
|
|
|
var levels = this.visibleNodes.map(e => e.getLevel());
|
|
|
var actMaxLevel = Math.max.apply(null, levels); //实际加载到的最高的node level
|
|
|
- if (actMaxLevel < this.maxLevel) return true; // 还没加载到能加载到的最高。 但在细节设置较低时,排除作用微弱。
|
|
|
+ if (actMaxLevel < this.maxLevel) return true; // 还没加载到能加载到的最高。 但在细节设置较低时,排除作用微弱。
|
|
|
|
|
|
//尝试加载出更高级的level
|
|
|
var old = this.maxLevel;
|
|
@@ -36077,7 +36089,7 @@
|
|
|
// 设置点大小
|
|
|
changePointSize(num, sizeFitToLevel) {
|
|
|
var size, nodeMaxLevel;
|
|
|
- console.error('changePointSize', num);
|
|
|
+ //console.error('changePointSize',num)
|
|
|
var dontRender = viewer.dealBeforeRender;
|
|
|
if (this.material.pointSizeType != PointSizeType.ATTENUATED) {
|
|
|
num && (size = num / Potree.config.material.realPointSize / 1.3);
|
|
@@ -36099,7 +36111,7 @@
|
|
|
var str = this.temp.pointSize + ':' + this.maxLevel + ':' + nodeMaxLevel;
|
|
|
var value = this.temp.sizeFitToLevel[str]; //储存。防止每次渲染(反复切换density)都要算。
|
|
|
if (value) {
|
|
|
- size = value;
|
|
|
+ size = value *= this.scale.x;
|
|
|
} else {
|
|
|
if (this.maxLevel == Infinity) return;
|
|
|
var base = this.material.spacing / Math.pow(2, this.maxLevel); //点云大小在level为0时设置为spacing,每长一级,大小就除以2. (不同场景还是会有偏差)
|
|
@@ -68615,8 +68627,6 @@
|
|
|
//Potree.Utils.updateVisible(viewer.reticule, 'force', false)
|
|
|
viewer.composer.scaleRatio = 1;
|
|
|
viewer.composer.readTarget = false;
|
|
|
- viewer.mainViewport.camera.near = 0.05; // too small will result in z-fighting
|
|
|
-
|
|
|
viewer.addEventListener('updateModelBound', e => {
|
|
|
if (this.split) {
|
|
|
this.SplitScreen.updateCameraOutOfModel( /* this.selected && [this.selected] */);
|
|
@@ -76184,10 +76194,19 @@
|
|
|
});
|
|
|
};
|
|
|
var scroll = e => {
|
|
|
+ var _viewer$inputHandler$, _viewer$inputHandler$2;
|
|
|
if (!this.enabled) return;
|
|
|
var resolvedRadius = this.currentViewport.view.radius + this.radiusDelta;
|
|
|
- if (resolvedRadius < 0.1 && e.delta > 0) return; //防止缩放太小,导致很慢
|
|
|
+
|
|
|
+ /* let model = viewer.inputHandler.intersect?.model || viewer.inputHandler.intersect?.pointcloud || viewer.modules.MergeEditor?.selected;
|
|
|
+ let min = 0.1
|
|
|
+ if(model){
|
|
|
+ min *= model.scale.x //有的模型太小。注意:如果没有选中模型且没有intersect会无法前进是会有点怪
|
|
|
+ }
|
|
|
+ if(resolvedRadius < min && e.delta>0)return; //防止缩放太小,导致很慢 */
|
|
|
this.radiusDelta += -e.delta * resolvedRadius * 0.1;
|
|
|
+ var model = ((_viewer$inputHandler$ = viewer.inputHandler.intersect) === null || _viewer$inputHandler$ === void 0 ? void 0 : _viewer$inputHandler$.object) || ((_viewer$inputHandler$2 = viewer.inputHandler.intersect) === null || _viewer$inputHandler$2 === void 0 ? void 0 : _viewer$inputHandler$2.pointcloud);
|
|
|
+ model && this.updateRadiusByModel(model, viewer.inputHandler.intersect.location.distanceTo(this.currentViewport.view.position));
|
|
|
this.stopTweens();
|
|
|
};
|
|
|
var dblclick = e => {
|
|
@@ -76370,17 +76389,24 @@
|
|
|
I = I.location;
|
|
|
if (!I || !object) return;
|
|
|
var dis = this.currentViewport.view.position.distanceTo(I);
|
|
|
- var bound = object.boundingBox.clone().applyMatrix4(object.matrixWorld);
|
|
|
- var size = bound.getSize(new Vector3());
|
|
|
- var len = size.length();
|
|
|
- var distance = MathUtils.clamp(dis, 0.1, Math.max(len * 0.1, 3));
|
|
|
- minRadius = distance;
|
|
|
+ var distance = this.updateRadiusByModel(object, dis);
|
|
|
viewer.focusOnObject({
|
|
|
position: I
|
|
|
}, 'point', null, {
|
|
|
distance
|
|
|
});
|
|
|
}
|
|
|
+ updateRadiusByModel(object) {
|
|
|
+ var dis = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10;
|
|
|
+ //鼠标到点的距离,如果没有就给个几率最大的距离
|
|
|
+ var bound = object.boundingBox.clone().applyMatrix4(object.matrixWorld);
|
|
|
+ var size = bound.getSize(new Vector3());
|
|
|
+ var len = size.length();
|
|
|
+ var distance = MathUtils.clamp(dis, 0.8 * object.scale.x, Math.max(len * 0.1, 3 * object.scale.x));
|
|
|
+ minRadius = distance;
|
|
|
+ //console.log('updateRadiusByModel',distance)
|
|
|
+ return distance;
|
|
|
+ }
|
|
|
stopTweens() {
|
|
|
this.tweens.forEach(e => e.stop());
|
|
|
this.tweens = [];
|