+
是否循环播放
diff --git a/src/Global/FlyRoam/index.js b/src/Global/FlyRoam/index.js
index c1a1819..02b8375 100644
--- a/src/Global/FlyRoam/index.js
+++ b/src/Global/FlyRoam/index.js
@@ -139,11 +139,10 @@ const open = async (sdk, options = {}, _Dialog = {}) => {
})
let totalTimeElm = contentElm.querySelector("input[name='totalTime']")
- let isTotalTimeElm = contentElm.querySelector("input[name='isTotalTime']")
- let repeatElm = contentElm.querySelector("input[name='repeat']")
- isTotalTimeElm.addEventListener('change', () => {
- let trList = tableBody.getElementsByClassName('tr')
- if (isTotalTimeElm.checked && trList.length > 0) {
+ let setTotalTimeBtn = contentElm.getElementsByClassName('set-total-time-btn')[0]
+ setTotalTimeBtn.addEventListener('click', () => {
+ if (points.length > 0) {
+ let trList = tableBody.getElementsByClassName('tr')
let time = Number((Number(totalTimeElm.value) / (trList.length - 1)).toFixed(2))
for (let i = 0; i < trList.length - 1; i++) {
points[i].duration = time
@@ -152,20 +151,12 @@ const open = async (sdk, options = {}, _Dialog = {}) => {
trList[trList.length - 1].querySelector("input[name='time']").value = 0
}
})
+ let repeatElm = contentElm.querySelector("input[name='repeat']")
totalTimeElm.addEventListener('blur', () => {
- let trList = tableBody.getElementsByClassName('tr')
totalTimeElm.value = Number(totalTimeElm.value)
if (totalTimeElm.value < 0) {
totalTimeElm.value = 0
}
- if (isTotalTimeElm.checked && trList.length > 0) {
- let time = Number((Number(totalTimeElm.value) / (trList.length - 1)).toFixed(2))
- for (let i = 0; i < trList.length - 1; i++) {
- points[i].duration = time
- trList[i].querySelector("input[name='time']").value = time
- }
- trList[trList.length - 1].querySelector("input[name='time']").value = 0
- }
})
repeatElm.checked = (repeat === Infinity ? true : false)
repeatElm.addEventListener('change', () => {
@@ -286,7 +277,6 @@ const open = async (sdk, options = {}, _Dialog = {}) => {
// }
})
e_time.addEventListener('input', (v) => {
- isTotalTimeElm.checked = false
data.duration = Number(e_time.value)
if (data.duration < 0) {
data.duration = 0
diff --git a/src/Global/MapPrint/index.js b/src/Global/MapPrint/index.js
index 43ba23c..8aae62b 100644
--- a/src/Global/MapPrint/index.js
+++ b/src/Global/MapPrint/index.js
@@ -6,7 +6,7 @@ import { getTemplateData } from './dataSource.js'
let tools = new Tools();
-async function MapPrint(sdk, thumbnailImg, rectangle, originalImg) {
+async function MapPrint(sdk, thumbnailImg, rectangle, originalImg, totalCanvas, scale) {
let exporting = false;
let templateData = getTemplateData(tools)
let _DialogObject
@@ -290,21 +290,48 @@ async function MapPrint(sdk, thumbnailImg, rectangle, originalImg) {
let closeBtn
let exportBtn
+ let saveBtn
setTimeout(() => {
closeBtn = _DialogObject._element.foot.getElementsByClassName('close')[0]
exportBtn = document.createElement('button')
exportBtn.className = 'export';
exportBtn.innerHTML = '打印';
+ exportBtn.style.right = '150px'
leftElm.appendChild(closeBtn)
leftElm.appendChild(exportBtn)
+ saveBtn = document.createElement('button')
+ saveBtn.className = 'export';
+ saveBtn.innerHTML = '保存';
+ leftElm.appendChild(closeBtn)
+ leftElm.appendChild(saveBtn)
exportBtn.addEventListener('click', function () {
if (exporting) {
return
}
exporting = true
exportBtn.innerHTML = '
打印'
- exportMap()
+ saveBtn.innerHTML = '
保存'
+ exportMap('export')
+ // exporting = true
+ // exportBtn.innerHTML = '
打印'
+ // let imgBlobData = canvas.toDataURL();
+ // let downloadElement = document.createElement('a');
+ // downloadElement.href = imgBlobData;
+ // downloadElement.download = `高清出图-${getDateTimeString()}.png`;
+ // document.body.appendChild(downloadElement);
+ // downloadElement.click();
+ // document.body.removeChild(downloadElement);
+ // URL.revokeObjectURL(imgBlobData);
+ })
+ saveBtn.addEventListener('click', function () {
+ if (exporting) {
+ return
+ }
+ exporting = true
+ exportBtn.innerHTML = '
打印'
+ saveBtn.innerHTML = '
保存'
+ exportMap('save')
// exporting = true
// exportBtn.innerHTML = '
打印'
// let imgBlobData = canvas.toDataURL();
@@ -1197,12 +1224,52 @@ async function MapPrint(sdk, thumbnailImg, rectangle, originalImg) {
return `${year}${month}${day}${hours}${minutes}${seconds}${milliseconds}`;
}
- function exportMap() {
+ function exportMap(type) {
+ let iframeDoc = document
let unitDistance2
- let canvas2 = document.createElement('canvas');
+ let iframe
+ if (type === 'export') {
+ iframe = document.createElement('iframe');
+ iframe.id = 'printIframe';
+ // iframe.src = 'print.html';
+ iframe.frameborder = '0';
+ iframe.style.position = 'absolute';
+ iframe.style.zIndex = '-9999999';
+ iframe.style.width = '100vw';
+ iframe.style.height = '100vh';
+ iframe.style.left = '0';
+ iframe.style.top = '0';
+
+ document.body.appendChild(iframe);
+ iframeDoc = iframe.contentDocument || iframe.contentWindow.document;
+ }
+
+ let canvas2 = iframeDoc.createElement('canvas');
+ if (type === 'export') {
+ canvas2.style.width = '100%'
+ canvas2.style.height = '100%'
+ canvas2.style.objectFit = 'contain';
+ iframeDoc.body.appendChild(canvas2);
+ }
+
let ctx2 = canvas2.getContext('2d');
let imgElm2 = new Image();
- imgElm2.src = originalImg
+ if (type === 'export') {
+ const tempCanvas = document.createElement('canvas');
+ const tempCtx = tempCanvas.getContext('2d');
+ if(scale>=3) {
+ tempCanvas.width = totalCanvas.width / scale * 2
+ tempCanvas.height = totalCanvas.height / scale * 2
+ tempCtx.drawImage(totalCanvas, 0, 0, tempCanvas.width, tempCanvas.height);
+ imgElm2.src = tempCanvas.toDataURL('image/jpeg', 0.95)
+ }
+ else {
+ imgElm2.src = originalImg
+ }
+ }
+ else {
+ imgElm2.src = originalImg
+ }
imgElm2.onload = function () {
if (isLoad) {
return
@@ -1416,17 +1483,36 @@ async function MapPrint(sdk, thumbnailImg, rectangle, originalImg) {
// 在释放资源后执行回调
- canvas2.toBlob(function (blob) {
- const url = URL.createObjectURL(blob);
- let downloadElement = document.createElement('a');
- downloadElement.href = url;
- downloadElement.download = `高清出图-${getDateTimeString()}.png`;
- document.body.appendChild(downloadElement);
- downloadElement.click();
- document.body.removeChild(downloadElement);
- }, 'image/png', 0.95);
+
+
+
+ if (type === 'export') {
+ const iframeWindow = iframe.contentWindow;
+ if (iframeWindow && typeof iframeWindow.print === 'function') {
+ iframeWindow.addEventListener('afterprint', function () {
+ document.body.removeChild(iframe)
+ })
+ iframeWindow.print();
+ } else {
+ console.error('打印失败,请手动保存截图');
+ }
+ }
+ else {
+ canvas2.toBlob(function (blob) {
+ const url = URL.createObjectURL(blob);
+ let downloadElement = document.createElement('a');
+ downloadElement.href = url;
+ downloadElement.download = `高清出图-${getDateTimeString()}.png`;
+ document.body.appendChild(downloadElement);
+ downloadElement.click();
+ document.body.removeChild(downloadElement);
+ URL.revokeObjectURL(url);
+ }, 'image/png', 0.95);
+ }
+
exporting = false;
exportBtn.innerHTML = '打印';
+ saveBtn.innerHTML = '保存';
// canvas2.toBlob(function (blob) {
// let imgBlobData = URL.createObjectURL(blob);
// let downloadElement = document.createElement('a');
diff --git a/src/Global/ScreenShot/index.js b/src/Global/ScreenShot/index.js
index 7898bf4..a767e93 100644
--- a/src/Global/ScreenShot/index.js
+++ b/src/Global/ScreenShot/index.js
@@ -123,6 +123,7 @@ async function ScreenShotHD(sdk, options = {}, cd = () => { }) {
startScreenShotObject.desist()
startScreenShotObject = null
}
+ window.removeEventListener('resize', resize)
_DialogObject = undefined
}
})
@@ -133,7 +134,7 @@ async function ScreenShotHD(sdk, options = {}, cd = () => { }) {
- 当前窗口长宽:${sdk.viewer.canvas.width}*${sdk.viewer.canvas.height}像素
+ 当前窗口长宽:${sdk.viewer.canvas.width}*${sdk.viewer.canvas.height}像素
@@ -176,6 +177,17 @@ async function ScreenShotHD(sdk, options = {}, cd = () => { }) {
sdk.viewer.scene.screenSpaceCameraController.enableLook = false;
sdk.viewer._element.getElementsByClassName('compass')[0].style.pointerEvents = 'none'
+ window.addEventListener('resize', resize);
+
+ function resize() {
+ setTimeout(() => {
+ contentElm.getElementsByClassName('canvas-width-span')[0].innerHTML = sdk.viewer.canvas.width
+ contentElm.getElementsByClassName('canvas-height-span')[0].innerHTML = sdk.viewer.canvas.height
+ contentElm.getElementsByClassName('output-width')[0].innerHTML = sdk.viewer.canvas.width * scale
+ contentElm.getElementsByClassName('output-height')[0].innerHTML = sdk.viewer.canvas.height * scale
+ }, 500);
+ }
+
let centerResult = sdk.viewer.camera.pickEllipsoid(
new Cesium.Cartesian2(
diff --git a/src/Global/SheetIndex/index.js b/src/Global/SheetIndex/index.js
index 56a798d..3ce4925 100644
--- a/src/Global/SheetIndex/index.js
+++ b/src/Global/SheetIndex/index.js
@@ -166,6 +166,9 @@ function open(sdk) {
}
let isChanged = false
let rectangle = getViewExtend();
+ if(!rectangle) {
+ return
+ }
let minLng = Cesium.Math.toDegrees(rectangle.west)
let minLat = Cesium.Math.toDegrees(rectangle.south)
diff --git a/src/Obj/Analysis/Submerge/index.js b/src/Obj/Analysis/Submerge/index.js
index 1ed1486..216d6d2 100644
--- a/src/Obj/Analysis/Submerge/index.js
+++ b/src/Obj/Analysis/Submerge/index.js
@@ -4,6 +4,7 @@ import DrawPolygon from "../../../Draw/drawPolygon"
import Tools from "../../../Tools";
import { closeRotateAround, closeViewFollow} from '../../../Global/global'
class Submerge extends Tools {
+ #_isupdate = false
/**
* @constructor
* @param sdk
@@ -158,10 +159,12 @@ class Submerge extends Tools {
e_risingSpeed[0].value = that.options.risingSpeed
e_risingSpeed[1].value = that.options.risingSpeed
e_risingSpeed[0].addEventListener('input', e => {
+ that.#_isupdate = true
that.options.risingSpeed = Number(e.target.value);
});
e_risingSpeed[1].addEventListener('input', e => {
if (e.data != '.') {
+ that.#_isupdate = true
let value = Number(e.target.value)
let max = Number(e_risingSpeed[0].max)
let min = Number(e_risingSpeed[0].min)
@@ -191,6 +194,7 @@ class Submerge extends Tools {
e_minWaterLevel.value = that.options.minWaterLevel
e_minWaterLevel.addEventListener('input', e => {
if (e.data != '.') {
+ that.#_isupdate = true
let value = Number(e.target.value)
if (value > 999999999) {
value = 999999999
@@ -216,6 +220,7 @@ class Submerge extends Tools {
e_maxWaterLevel.value = that.options.maxWaterLevel
e_maxWaterLevel.addEventListener('input', e => {
if (e.data != '.') {
+ that.#_isupdate = true
let value = Number(e.target.value)
if (value > 999999999) {
value = 999999999
@@ -250,6 +255,7 @@ class Submerge extends Tools {
e_waterVolume.value = that.options.waterVolume
e_waterVolume.addEventListener('input', e => {
if (e.data != '.') {
+ that.#_isupdate = true
let value = Number(e.target.value)
if (value > 99999999999999) {
value = 99999999999999
@@ -319,19 +325,24 @@ class Submerge extends Tools {
if (this.TweenAnimate) {
TWEEN.remove(this.TweenAnimate)
}
- let totalTime = ((this.options.maxWaterLevel - this.options.minWaterLevel) / this.options.risingSpeed) * 1000
- this.TweenAnimate = new TWEEN.Tween({ waterLevel: this.options.minWaterLevel }).to({ waterLevel: this.options.maxWaterLevel }, totalTime).delay(this.delay).easing(TWEEN.Easing.Linear.None).onUpdate(async (r, a) => {
- this.currentWaterLaver = r.waterLevel
- }).start()
+ this.#_isupdate = false
let contentElm = this._DialogObject._element.body
let pauseBtn = contentElm.getElementsByClassName('pause')[0];
let startBtn = contentElm.getElementsByClassName('start')[0];
+ let totalTime = ((this.options.maxWaterLevel - this.options.minWaterLevel) / this.options.risingSpeed) * 1000
+ this.TweenAnimate = new TWEEN.Tween({ waterLevel: this.options.minWaterLevel }).to({ waterLevel: this.options.maxWaterLevel }, totalTime).delay(this.delay).easing(TWEEN.Easing.Linear.None).onUpdate(async (r, a) => {
+ this.currentWaterLaver = r.waterLevel
+ }).onComplete(()=>{
+ startBtn.style.display = 'flex'
+ pauseBtn.style.display = 'none'
+ }).start()
startBtn.style.display = 'none'
pauseBtn.style.display = 'flex'
}
restart() {
this.currentWaterLaver = this.options.minWaterLevel
+ this.#_isupdate = false
let isPaused = false
if (this.TweenAnimate) {
isPaused = this.TweenAnimate._isPaused
@@ -348,7 +359,17 @@ class Submerge extends Tools {
start() {
if (this.TweenAnimate) {
- this.TweenAnimate.resume()
+ if(this.#_isupdate) {
+ this.move()
+ }
+ else {
+ if(this.TweenAnimate._isPlaying) {
+ this.TweenAnimate.resume()
+ }
+ else {
+ this.TweenAnimate.start()
+ }
+ }
}
}
pause() {
diff --git a/src/Obj/Analysis/ViewShed/index.js b/src/Obj/Analysis/ViewShed/index.js
index 573c00c..81a745e 100644
--- a/src/Obj/Analysis/ViewShed/index.js
+++ b/src/Obj/Analysis/ViewShed/index.js
@@ -397,6 +397,9 @@ class ViewShedStage extends Tools {
ctx.fillText(item.text, 44, 28 + (index * 26));
imagesLoaded++;
if (imagesLoaded === data.length) {
+ if (that.viewBillboardPrimitive) {
+ that.viewer.scene.primitives.remove(that.viewBillboardPrimitive)
+ }
that.viewBillboardPrimitive = that.viewer.scene.primitives.add(new Cesium.BillboardCollection())
that.viewBillboardPrimitive.add({
position: Cesium.Cartesian3.fromDegrees(that.viewPosition.lng, that.viewPosition.lat, that.viewPosition.alt + that.viewPointHeight),
diff --git a/src/Obj/Base/AttackArrowObject/index.js b/src/Obj/Base/AttackArrowObject/index.js
index 66ae18a..0ff0240 100644
--- a/src/Obj/Base/AttackArrowObject/index.js
+++ b/src/Obj/Base/AttackArrowObject/index.js
@@ -893,7 +893,7 @@ class AttackArrowObject extends Base {
}
that.positions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray)
let positionsA = that.computeAttackArrow(that.options.positions)
- if (positionsA.length == 0) {
+ if (positionsA.length == 0 || Array.isArray(positionsA[0])) {
return
}
@@ -1623,7 +1623,7 @@ class AttackArrowObject extends Base {
_addRr() {
if (this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value) {
this.options.attribute.vr.content.push({
- name: '全景图' ,
+ name: '全景图',
url: this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value
})
this._DialogObject._element.content.getElementsByClassName('vr_add')[0].value = ''
@@ -1636,7 +1636,7 @@ class AttackArrowObject extends Base {
addAttributeRr(vr) {
this.options.attribute.vr.content.push({
- name: '全景图' ,
+ name: '全景图',
url: vr
})
this.attributeVr = this.options.attribute.vr.content
@@ -2189,22 +2189,23 @@ class AttackArrowObject extends Base {
that.event.mouse_right_keyboard_ctrl((movement, cartesian) => {
if (selectPoint) {
- that.options.positions.pop()
- that.sdk.viewer.entities.remove(that.nodePoints[that.nodePoints.length - 1])
- that.nodePoints.pop()
- if (!selectPoint.index) {
- // selectPoint = null
- }
- else if (selectPoint.index === that.options.positions.length) {
- if (that.nodePoints[selectPoint.index - 1]) {
- selectPoint = that.nodePoints[selectPoint.index - 1]
+ if (that.options.positions.length > 3) {
+ that.options.positions.pop()
+ that.sdk.viewer.entities.remove(that.nodePoints[that.nodePoints.length - 1])
+ that.nodePoints.pop()
+ if (!selectPoint.index) {
+ // selectPoint = null
}
- else {
- selectPoint.index = selectPoint.index - 1
+ else if (selectPoint.index === that.options.positions.length) {
+ if (that.nodePoints[selectPoint.index - 1]) {
+ selectPoint = that.nodePoints[selectPoint.index - 1]
+ }
+ else {
+ selectPoint.index = selectPoint.index - 1
+ }
}
+ that.renewPositions()
}
-
- that.renewPositions()
}
})
@@ -2317,7 +2318,7 @@ class AttackArrowObject extends Base {
}
}
let arr = this.computeAttackArrow(positions84)
- if (arr.length == 0) {
+ if (arr.length == 0 || Array.isArray(arr[0])) {
return
}
this.entity.polygon.hierarchy = new Cesium.CallbackProperty(function () {
@@ -2338,7 +2339,7 @@ class AttackArrowObject extends Base {
options.y = (options.y || options.y === 0) ? options.y : 10
let positions = this.computeAttackArrow(this.options.positions)
- if (positions.length == 0) {
+ if (positions.length == 0 || Array.isArray(positions[0])) {
return
}
let points = [[]]
@@ -2609,11 +2610,13 @@ class AttackArrowObject extends Base {
this.positions = Cesium.Cartesian3.fromDegreesArray(fromDegreesArray)
let positionsA = this.computeAttackArrow(positions)
- if (positionsA.length == 0) {
+ if (positionsA.length == 0 || Array.isArray(positionsA[0])) {
+ this.positionsH = [this.positions[0], this.positions[0], this.positions[0]]
return
}
let points = [[]]
let pos84 = []
+
for (let i = 0; i < positionsA.length; i++) {
let position = this.cartesian3Towgs84(positionsA[i], this.sdk.viewer)
pos84.push(position)
diff --git a/src/Obj/Base/BaseSource/BaseTileset/Tileset/index.js b/src/Obj/Base/BaseSource/BaseTileset/Tileset/index.js
index 6fa7d40..3b5d99a 100644
--- a/src/Obj/Base/BaseSource/BaseTileset/Tileset/index.js
+++ b/src/Obj/Base/BaseSource/BaseTileset/Tileset/index.js
@@ -230,6 +230,17 @@ class Tileset extends BaseTileset {
else {
this.rotationEditing = true
}
+ if (!this.tileset.root.transform) {
+ if (window.ELEMENT) {
+ window.ELEMENT.Message.closeAll();
+ window.ELEMENT.Message({
+ message: '该模型不支持移动和旋转!',
+ type: 'warning',
+ duration: 1500
+ });
+ }
+ return
+ }
},
translationalCallBack: () => {
if (this.positionEditing) {
@@ -238,6 +249,17 @@ class Tileset extends BaseTileset {
else {
this.positionEditing = true
}
+ if (!this.tileset.root.transform) {
+ if (window.ELEMENT) {
+ window.ELEMENT.Message.closeAll();
+ window.ELEMENT.Message({
+ message: '该模型不支持移动和旋转!',
+ type: 'warning',
+ duration: 1500
+ });
+ }
+ return
+ }
}
}, true)
document.getElementsByTagName('head')[0].appendChild(this._element_style);
@@ -263,14 +285,14 @@ class Tileset extends BaseTileset {
//更新模型位置
updateModel(_tx, _ty, _tz, _rx = 0, _ry = 0, _rz = 0, s = 1) {
if (!this.tileset.root.transform) {
- if (window.ELEMENT) {
- window.ELEMENT.Message.closeAll();
- window.ELEMENT.Message({
- message: '该模型不支持移动和旋转!',
- type: 'warning',
- duration: 1500
- });
- }
+ // if (window.ELEMENT) {
+ // window.ELEMENT.Message.closeAll();
+ // window.ELEMENT.Message({
+ // message: '该模型不支持移动和旋转!',
+ // type: 'warning',
+ // duration: 1500
+ // });
+ // }
console.warn('该模型不支持移动和旋转!')
return
}
diff --git a/src/Obj/Base/BatchModel/index.js b/src/Obj/Base/BatchModel/index.js
index 5e71777..efe7b71 100644
--- a/src/Obj/Base/BatchModel/index.js
+++ b/src/Obj/Base/BatchModel/index.js
@@ -156,9 +156,9 @@ class BatchModel extends Base {
})
})
} else if (that.options.type == '点') {
- let height = await that.getClampToHeight({ lng: that.options.positions.lng, lat: that.options.positions.lat })
- posiArr = [{ lng: that.options.positions.lng, lat: that.options.positions.lat, alt: height }]
- // posiArr = [that.options.positions]
+ // let height = await that.getClampToHeight({ lng: that.options.positions.lng, lat: that.options.positions.lat })
+ // posiArr = [{ lng: that.options.positions.lng, lat: that.options.positions.lat, alt: height }]
+ posiArr = [that.options.positions]
that.pointArr = posiArr
}
let params = {
diff --git a/src/Obj/Base/BillboardObject/_element.js b/src/Obj/Base/BillboardObject/_element.js
index 3f58c42..c168f13 100644
--- a/src/Obj/Base/BillboardObject/_element.js
+++ b/src/Obj/Base/BillboardObject/_element.js
@@ -304,17 +304,17 @@ function html(that) {
-->
-
-
-
-
-
-
-
-
-
-
-
+
+