|
@@ -115,18 +115,16 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
|
|
viewer.addEventListener('camera_changed', e => {
|
|
viewer.addEventListener('camera_changed', e => {
|
|
var camera = e.viewport.camera
|
|
var camera = e.viewport.camera
|
|
var pos = camera.position
|
|
var pos = camera.position
|
|
- if (e.viewport.name == 'MainView') {
|
|
|
|
|
|
+ if (e.viewport.name == 'MainView' ) {
|
|
sceneBus.emit('cameraChange', { x: pos.x, y: pos.y, z: pos.z, rotate: camera.rotation })
|
|
sceneBus.emit('cameraChange', { x: pos.x, y: pos.y, z: pos.z, rotate: camera.rotation })
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
|
|
- updateMap()
|
|
|
|
-
|
|
|
|
- Potree.Common.intervalTool.isWaiting('updateCamNear', ()=>{
|
|
|
|
- updateCamNear()
|
|
|
|
- }, 1000)
|
|
|
|
- updateCamFar()
|
|
|
|
- //viewer.scene.tags.children.forEach(tag=>tag.functions.updateVisiFar())
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
|
|
+ updateMap()
|
|
|
|
+ Potree.Common.intervalTool.isWaiting('updateCamNear', ()=>{
|
|
|
|
+ updateCamNear()
|
|
|
|
+ }, 1000)
|
|
|
|
+ updateCamFar()
|
|
})
|
|
})
|
|
|
|
|
|
|
|
|
|
@@ -537,7 +535,10 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
|
|
|
|
|
|
console.log('bgOpacity', bgOpacity)
|
|
console.log('bgOpacity', bgOpacity)
|
|
|
|
|
|
- Potree.Utils.updateVisible(MergeEditor.boxHelper, 'screenshot', false)
|
|
|
|
|
|
+ Potree.Utils.updateVisible(MergeEditor.boxHelper, 'screenshot', false)
|
|
|
|
+ Potree.Utils.updateVisible(viewer.scene.overlayScene, 'screenshot', false) //hide all
|
|
|
|
+
|
|
|
|
+
|
|
var { getImagePromise, finishPromise } = viewer.startScreenshot({ type: 'default', /* useRenderTarget:true, */bgOpacity }, width, height)
|
|
var { getImagePromise, finishPromise } = viewer.startScreenshot({ type: 'default', /* useRenderTarget:true, */bgOpacity }, width, height)
|
|
var deferred = $.Deferred();
|
|
var deferred = $.Deferred();
|
|
finishPromise.done(({ dataUrl }) => {
|
|
finishPromise.done(({ dataUrl }) => {
|
|
@@ -559,7 +560,8 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
- Potree.Utils.updateVisible(MergeEditor.boxHelper, 'screenshot', true)
|
|
|
|
|
|
+ Potree.Utils.updateVisible(MergeEditor.boxHelper, 'screenshot', true)
|
|
|
|
+ Potree.Utils.updateVisible(viewer.scene.overlayScene, 'screenshot', true)
|
|
})
|
|
})
|
|
|
|
|
|
return deferred.promise()
|
|
return deferred.promise()
|
|
@@ -1054,13 +1056,11 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
|
|
|
|
|
|
result.leaveTransform()
|
|
result.leaveTransform()
|
|
MergeEditor.enterSplit()
|
|
MergeEditor.enterSplit()
|
|
-
|
|
|
|
-
|
|
|
|
- //console.log('enterAlignment',model.position, model.rotation)
|
|
|
|
- let bus = new mitt()
|
|
|
|
-
|
|
|
|
- /* MergeEditor.transformControls.attach(model)
|
|
|
|
- MergeEditor.transformControls.mode = 'translate' */
|
|
|
|
|
|
+ if(Potree.settings.showCesium){
|
|
|
|
+ cesiumViewer.scene.canvas.style.width = '50%'
|
|
|
|
+ //cesiumViewer.resize()
|
|
|
|
+ }
|
|
|
|
+ let bus = new mitt()
|
|
|
|
|
|
return {
|
|
return {
|
|
bus
|
|
bus
|
|
@@ -1071,7 +1071,10 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
|
|
MergeEditor.leaveSplit()
|
|
MergeEditor.leaveSplit()
|
|
MergeEditor.transformControls.detach()
|
|
MergeEditor.transformControls.detach()
|
|
MergeEditor.transformControls2.detach()
|
|
MergeEditor.transformControls2.detach()
|
|
-
|
|
|
|
|
|
+ if(Potree.settings.showCesium){
|
|
|
|
+ cesiumViewer.scene.canvas.style.width = ''
|
|
|
|
+ updateMap()
|
|
|
|
+ }
|
|
},
|
|
},
|
|
|
|
|
|
enterScaleSet() {//设置比例
|
|
enterScaleSet() {//设置比例
|
|
@@ -1099,8 +1102,8 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
|
|
|
|
|
|
let vec = new THREE.Vector3().subVectors(viewer.mainViewport.camera.position, scaleMeasure.points[1])
|
|
let vec = new THREE.Vector3().subVectors(viewer.mainViewport.camera.position, scaleMeasure.points[1])
|
|
|
|
|
|
-
|
|
|
|
- let s = length / (scaleMeasure.points[0].distanceTo(scaleMeasure.points[1]))
|
|
|
|
|
|
+ let dis = scaleMeasure.points[0].distanceTo(scaleMeasure.points[1])
|
|
|
|
+ let s = length / Math.max(dis,0.00001)
|
|
result.changeScale(model.scale.x * s * 100)
|
|
result.changeScale(model.scale.x * s * 100)
|
|
/* setTimeout(()=>{
|
|
/* setTimeout(()=>{
|
|
viewer.focusOnObject(scaleMeasure , 'measure', 500)
|
|
viewer.focusOnObject(scaleMeasure , 'measure', 500)
|
|
@@ -1110,8 +1113,8 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
|
|
viewer.scene.view.setView({
|
|
viewer.scene.view.setView({
|
|
position: newCamPos, target: scaleMeasure.getCenter(), duration: 0, callback: () => {
|
|
position: newCamPos, target: scaleMeasure.getCenter(), duration: 0, callback: () => {
|
|
//更改target到measure中心的好处就是可以让相机绕measure中心转,坏处是每次更改都会变一下画面
|
|
//更改target到measure中心的好处就是可以让相机绕measure中心转,坏处是每次更改都会变一下画面
|
|
- Potree.settings.cameraFar = Math.max(model.enterScaleOldState_.far, viewer.scene.view.position.distanceTo(model.boundCenter) + model.boundingBox.clone().applyMatrix4(model.matrixWorld).getSize(new THREE.Vector3).length())
|
|
|
|
-
|
|
|
|
|
|
+ //Potree.settings.cameraFar = Math.max(model.enterScaleOldState_.far, viewer.scene.view.position.distanceTo(model.boundCenter) + model.boundingBox.clone().applyMatrix4(model.matrixWorld).getSize(new THREE.Vector3).length())
|
|
|
|
+ //use updateCamFar()
|
|
}
|
|
}
|
|
})
|
|
})
|
|
|
|
|
|
@@ -1143,6 +1146,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
|
|
//bus.emit('quit') //删除
|
|
//bus.emit('quit') //删除
|
|
}
|
|
}
|
|
)
|
|
)
|
|
|
|
+ scaleMeasure.forbitRepeatPoint = true //两个点不能相同,否则长度是0
|
|
scaleMeasure.addEventListener('marker_dropped', (e) => {//拖拽结束后发送changeCallBack
|
|
scaleMeasure.addEventListener('marker_dropped', (e) => {//拖拽结束后发送changeCallBack
|
|
if (scaleMeasure.parent) {
|
|
if (scaleMeasure.parent) {
|
|
//未被删除
|
|
//未被删除
|
|
@@ -1170,7 +1174,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
|
|
setTimeout(()=>{//可能还原了 相机位置移动回去
|
|
setTimeout(()=>{//可能还原了 相机位置移动回去
|
|
if(model.scale.x == model.enterScaleOldState_.scale){
|
|
if(model.scale.x == model.enterScaleOldState_.scale){
|
|
MergeEditor.focusOn(model, 0) //reset orbitcontrol's minRadius //viewer.mainViewport.view.copy(model.enterScaleOldState_.view)
|
|
MergeEditor.focusOn(model, 0) //reset orbitcontrol's minRadius //viewer.mainViewport.view.copy(model.enterScaleOldState_.view)
|
|
- Potree.settings.cameraFar = model.enterScaleOldState_.far
|
|
|
|
|
|
+ //Potree.settings.cameraFar = model.enterScaleOldState_.far
|
|
}
|
|
}
|
|
},10)
|
|
},10)
|
|
|
|
|
|
@@ -1993,7 +1997,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
|
|
|
|
|
|
|
|
|
|
function updateCamFar(){
|
|
function updateCamFar(){
|
|
- Potree.settings.cameraFar = THREE.Math.clamp(viewer.mainViewport.camera.position.z * 2, 10000, 100000000000)
|
|
|
|
|
|
+ Potree.settings.cameraFar = THREE.Math.clamp(viewer.bound.boundingBox.distanceToPoint(viewer.mainViewport.camera.position)+viewer.bound.boundSize.length(), 10000, 100000000000)
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@@ -2001,12 +2005,10 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
|
|
function updateMap(){
|
|
function updateMap(){
|
|
|
|
|
|
if (Potree.settings.showCesium && Potree.settings.displayMode == 'showPointCloud') {
|
|
if (Potree.settings.showCesium && Potree.settings.displayMode == 'showPointCloud') {
|
|
- let camera = viewer.mainViewport.camera
|
|
|
|
|
|
+ let camera = MergeEditor.split ? viewer.viewports.find(e=>e.name == 'top').camera : viewer.mainViewport.camera
|
|
let pPos = new THREE.Vector3(0, 0, 0).applyMatrix4(camera.matrixWorld);
|
|
let pPos = new THREE.Vector3(0, 0, 0).applyMatrix4(camera.matrixWorld);
|
|
- let pRight = new THREE.Vector3(600, 0, 0).applyMatrix4(camera.matrixWorld);
|
|
|
|
- let pUp = new THREE.Vector3(0, 600, 0).applyMatrix4(camera.matrixWorld);
|
|
|
|
- let pTarget = viewer.scene.view.getPivot();
|
|
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+ let orientation
|
|
let toCes = (pos) => {
|
|
let toCes = (pos) => {
|
|
let xy = [pos.x, pos.y];
|
|
let xy = [pos.x, pos.y];
|
|
let height = pos.z;
|
|
let height = pos.z;
|
|
@@ -2017,41 +2019,77 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
|
|
};
|
|
};
|
|
|
|
|
|
let cPos = toCes(pPos);
|
|
let cPos = toCes(pPos);
|
|
- let cUpTarget = toCes(pUp);
|
|
|
|
- let cTarget = toCes(pTarget);
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ if(MergeEditor.split){
|
|
|
|
+ orientation = {
|
|
|
|
+ heading: Cesium.Math.toRadians(0.0), // 方向角
|
|
|
|
+ pitch: Cesium.Math.toRadians(-90.0), // 俯仰角
|
|
|
|
+ roll: 0.0 // 翻滚角
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if(!cesiumViewer.camera.perpFrustum_){
|
|
|
|
+ cesiumViewer.camera.perpFrustum_ = cesiumViewer.camera.frustum
|
|
|
|
+ cesiumViewer.camera.frustum = new Cesium.OrthographicOffCenterFrustum({//OrthographicFrustum OrthographicOffCenterFrustum
|
|
|
|
+ left: -10000, // 左边界
|
|
|
|
+ right: 10000, // 右边界
|
|
|
|
+ bottom: -10000, // 下边界
|
|
|
|
+ top: 10000, // 上边界
|
|
|
|
+ near: 1.0, // 近裁剪面距离
|
|
|
|
+ far: 100000000.0, // 远裁剪面距离
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ cesiumViewer.camera.frustum.left = camera.left / camera.zoom
|
|
|
|
+ cesiumViewer.camera.frustum.right = camera.right / camera.zoom
|
|
|
|
+ cesiumViewer.camera.frustum.top = camera.top / camera.zoom
|
|
|
|
+ cesiumViewer.camera.frustum.bottom = camera.bottom / camera.zoom
|
|
|
|
+ }else{
|
|
|
|
+
|
|
|
|
+ cesiumViewer.camera.perpFrustum_ && (cesiumViewer.camera.frustum = cesiumViewer.camera.perpFrustum_, cesiumViewer.camera.perpFrustum_ = null) //恢复
|
|
|
|
+
|
|
|
|
+ //let pRight = new THREE.Vector3(600, 0, 0).applyMatrix4(camera.matrixWorld);
|
|
|
|
+ let pUp = new THREE.Vector3(0, 600, 0).applyMatrix4(camera.matrixWorld);
|
|
|
|
+ let pTarget = viewer.scene.view.getPivot();
|
|
|
|
+
|
|
|
|
+ let cUpTarget = toCes(pUp);
|
|
|
|
+ let cTarget = toCes(pTarget);
|
|
|
|
|
|
- let cDir = Cesium.Cartesian3.subtract(cTarget, cPos, new Cesium.Cartesian3());
|
|
|
|
- let cUp = Cesium.Cartesian3.subtract(cUpTarget, cPos, new Cesium.Cartesian3());
|
|
|
|
|
|
+ let cDir = Cesium.Cartesian3.subtract(cTarget, cPos, new Cesium.Cartesian3());
|
|
|
|
+ let cUp = Cesium.Cartesian3.subtract(cUpTarget, cPos, new Cesium.Cartesian3());
|
|
|
|
|
|
- cDir = Cesium.Cartesian3.normalize(cDir, new Cesium.Cartesian3());
|
|
|
|
- cUp = Cesium.Cartesian3.normalize(cUp, new Cesium.Cartesian3());
|
|
|
|
- //console.log('ces', 'cPos', cPos, 'cDir',cDir, 'cUp', cUp)
|
|
|
|
- cesiumViewer.camera.setView({
|
|
|
|
- destination: cPos,
|
|
|
|
- orientation: {
|
|
|
|
|
|
+ cDir = Cesium.Cartesian3.normalize(cDir, new Cesium.Cartesian3());
|
|
|
|
+ cUp = Cesium.Cartesian3.normalize(cUp, new Cesium.Cartesian3());
|
|
|
|
+ //console.log('ces', 'cPos', cPos, 'cDir',cDir, 'cUp', cUp)
|
|
|
|
+ orientation = {
|
|
direction: cDir,
|
|
direction: cDir,
|
|
up: cUp
|
|
up: cUp
|
|
}
|
|
}
|
|
|
|
+ let aspect = cesAspect || camera.aspect;
|
|
|
|
+ //console.log('updateMap', aspect)
|
|
|
|
+
|
|
|
|
+ if (aspect < 1) {
|
|
|
|
+ let fovy = Math.PI * (viewer.scene.getActiveCamera().fov / 180);
|
|
|
|
+ cesiumViewer.camera.frustum.fov = fovy;
|
|
|
|
+ } else {
|
|
|
|
+ let fovy = Math.PI * (viewer.scene.getActiveCamera().fov / 180);
|
|
|
|
+ let fovx = Math.atan(Math.tan(0.5 * fovy) * aspect) * 2
|
|
|
|
+ cesiumViewer.camera.frustum.fov = fovx;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ cesiumViewer.camera.setView({
|
|
|
|
+ destination: cPos,
|
|
|
|
+ orientation
|
|
});
|
|
});
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- let aspect = cesAspect || viewer.scene.getActiveCamera().aspect;
|
|
|
|
-
|
|
|
|
- //console.log('updateMap', aspect)
|
|
|
|
-
|
|
|
|
- if (aspect < 1) {
|
|
|
|
- let fovy = Math.PI * (viewer.scene.getActiveCamera().fov / 180);
|
|
|
|
- cesiumViewer.camera.frustum.fov = fovy;
|
|
|
|
- } else {
|
|
|
|
- let fovy = Math.PI * (viewer.scene.getActiveCamera().fov / 180);
|
|
|
|
- let fovx = Math.atan(Math.tan(0.5 * fovy) * aspect) * 2
|
|
|
|
- cesiumViewer.camera.frustum.fov = fovx;
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
|
|
|
|
cesiumViewer.scene.globe.show = camera.position.z > 0 //在地面之下地球会闪烁,故隐藏
|
|
cesiumViewer.scene.globe.show = camera.position.z > 0 //在地面之下地球会闪烁,故隐藏
|
|
cesiumViewer.render(); //立即render,否则会和点云render不同步而错位
|
|
cesiumViewer.render(); //立即render,否则会和点云render不同步而错位
|
|
- }
|
|
|
|
|
|
+ }//cesium测试沙盒 https://sandcastle.cesium.com/
|
|
}
|
|
}
|
|
|
|
|
|
return sdk
|
|
return sdk
|