define([
|
'dojo/_base/declare',
|
'dojo/_base/lang',
|
'dojo/_base/array',
|
'dojo/_base/html',
|
'dojo/topic',
|
'jimu/BaseWidget',
|
],
|
function (declare,
|
lang,
|
array,
|
html,
|
topic,
|
BaseWidget
|
) {
|
return declare([BaseWidget], {
|
baseClass: 'jimu-widget-BOXInteractive',
|
name: 'BOXInteractive',
|
flag: false,
|
startup: function () {
|
var that = this;
|
topic.subscribe("beginBOXInteractive", lang.hitch(this, this.beginBOXInteractive));
|
topic.subscribe("closesBOXInteractive", lang.hitch(this, this.closesBOXInteractive));
|
// topic.publish('getbeginSlope', that.beginSlope);
|
$(`.${that.baseClass}`).find('.closeOUR').click(() => {
|
$(`.${that.baseClass}`).hide();
|
that.closesBOXInteractive();
|
})
|
|
|
// that.beginBOXInteractive();
|
|
},
|
beginBOXInteractive: function () {
|
console.log(`${this.name}--kaishi`);
|
var that = this;
|
|
var viewer = that.map;
|
var URL_CONFIG = window.MYURL_CONFIG;
|
viewer.imageryLayers.addImageryProvider(new Cesium.BingMapsImageryProvider({
|
url: 'https://dev.virtualearth.net',
|
mapStyle: Cesium.BingMapsStyle.AERIAL,
|
key: URL_CONFIG.BING_MAP_KEY
|
}));
|
|
var scene = viewer.scene;
|
var widget = viewer.cesiumWidget;
|
$('#toolbarBOXInteractive').show();
|
$('#loadingbarBOXInteractive').remove();
|
|
var promise = scene.open(URL_CONFIG.SCENE_BIMBUILDING);
|
Cesium.when(promise, function (layers) {
|
// 精准定位
|
scene.camera.setView({
|
destination: new Cesium.Cartesian3(-2180753.065987198, 4379023.266141494, 4092583.575045952),
|
orientation: {
|
heading: 4.0392222751147955,
|
pitch: 0.010279641987852584,
|
roll: 1.240962888005015e-11
|
}
|
});
|
// 设置裁剪线颜色
|
setAllLayersClipColor();
|
var boxEntity = undefined;
|
var $clipMode = $('#clipModeBOXInteractive');
|
|
var tooltip = window.MYcreateTooltip(document.body);
|
|
//交互绘制box
|
|
// Cesium.DrawMode.Box = 4;
|
// console.log(Cesium.DrawMode.Box, 4634343)
|
// var handlerBox = new Cesium.DrawHandler(viewer, Cesium.DrawMode.Box);
|
var handlerBox = new Cesium.DrawHandler(viewer, 4);
|
var editorBox;
|
|
handlerBox.activeEvt.addEventListener(function (isActive) {
|
if (isActive == true) {
|
viewer.enableCursorStyle = false;
|
viewer._element.style.cursor = '';
|
$('body').removeClass('drawCurshizi').addClass('drawCurshizi');
|
}
|
else {
|
viewer.enableCursorStyle = true;
|
$('body').removeClass('drawCurshizi');
|
}
|
});
|
handlerBox.movingEvt.addEventListener(function (windowPosition) {
|
|
if (handlerBox.isDrawing) {
|
tooltip.showAt(windowPosition, '<p>点击鼠标左键结束矩形绘制,移动鼠标绘制box高度。</p><p>右键结束绘制.</p>');
|
} else {
|
tooltip.showAt(windowPosition, '<p>点击鼠标左键,开始绘制矩形作为box底面</p>');
|
}
|
|
});
|
handlerBox.drawEvt.addEventListener(function (e) {
|
console.log(88888888888888888888)
|
tooltip.setVisible(false);
|
// boxEntity = e.object;
|
// var newDim = boxEntity.box.dimensions.getValue();
|
// var position = boxEntity.position.getValue(0);
|
// var boxOption = {
|
// dimensions: newDim,
|
// position: position,
|
// clipMode: $clipMode.val(),
|
// heading: 0
|
// };
|
|
// //box编辑
|
// editorBox = new Cesium.BoxEditor(viewer, boxEntity);
|
|
// editorBox.editEvt.addEventListener(function (e) {
|
// boxEntity.box.dimensions = e.dimensions
|
// boxEntity.position = e.position;
|
// boxEntity.orientation = e.orientation;
|
|
// setClipBox();
|
// });
|
// editorBox.distanceDisplayCondition = new Cesium.DistanceDisplayCondition(0, 950);
|
// editorBox.activate();
|
// setAllLayersClipOptions(boxOption);
|
// tooltip.setVisible(false);
|
// handlerBox.clear();
|
// handlerBox.deactivate();
|
});
|
handlerBox.activate();
|
|
$('#clearboxBOXInteractive').click(function () {
|
for (var i = 0, j = layers.length; i < j; i++) {
|
layers[i].clearCustomClipBox();
|
};
|
editorBox.deactivate();
|
viewer.entities.removeAll();
|
handlerBox.clear();
|
handlerBox.deactivate();
|
handlerBox.activate();
|
|
});
|
|
$clipMode.change(function () {
|
setClipBox();
|
});
|
|
function setClipBox() {
|
var clipMode = $clipMode.val();
|
if (typeof (boxEntity) == "undefined") {
|
return;
|
}
|
var newDim = boxEntity.box.dimensions.getValue();
|
var position = boxEntity.position.getValue(0);
|
|
var heading = 0;
|
if (typeof (boxEntity.orientation) != "undefined") {
|
let rotationM3 = Cesium.Matrix3.fromQuaternion(boxEntity.orientation._value, new Cesium.Matrix3());
|
let localFrame = Cesium.Matrix4.fromRotationTranslation(rotationM3, Cesium.Cartesian3.ZERO, new Cesium.Matrix4());
|
let inverse = Cesium.Matrix4.inverse(Cesium.Transforms.eastNorthUpToFixedFrame(position), new Cesium.Matrix4());
|
let hprm = Cesium.Matrix4.multiply(inverse, localFrame, new Cesium.Matrix4());
|
var rotation = Cesium.Matrix4.getMatrix3(hprm, new Cesium.Matrix3());
|
let hpr = Cesium.HeadingPitchRoll.fromQuaternion(Cesium.Quaternion.fromRotationMatrix(rotation));
|
heading = hpr.heading;
|
}
|
|
|
var boxOptions = {
|
dimensions: newDim,
|
position: position,
|
clipMode: clipMode,
|
heading: heading
|
};
|
setAllLayersClipOptions(boxOptions);
|
}
|
|
function setAllLayersClipColor() {
|
for (var i = 0, j = layers.length; i < j; i++) {
|
layers[i].clipLineColor = new Cesium.Color(1, 1, 1, 0);
|
console.log(layers[i].clipLineColor, 4444444444444)
|
}
|
}
|
|
function setAllLayersClipOptions(boxOptions) {
|
console.log(5555555555555)
|
for (var i = 0, j = layers.length; i < j; i++) {
|
layers[i].setCustomClipBox(boxOptions);
|
}
|
}
|
|
}, function (e) {
|
if (widget._showRenderLoopErrors) {
|
var title = '加载SCP失败,请检查网络连接状态或者url地址是否正确?';
|
widget.showErrorPanel(title, undefined, e);
|
}
|
});
|
|
},
|
closesBOXInteractive: function (froms) {
|
console.log(`${this.name}--guanbi`);
|
var that = this;
|
},
|
onOpen: function () {
|
|
},
|
|
onClose: function () {
|
//面板关闭的时候触发 (when this panel is closed trigger)
|
console.log('jies')
|
},
|
|
onMinimize: function () {
|
this.resize();
|
},
|
|
onMaximize: function () {
|
this.resize();
|
},
|
|
resize: function () {
|
|
},
|
|
destroy: function () {
|
//销毁的时候触发
|
//todo
|
//do something before this func
|
this.inherited(arguments);
|
}
|
|
});
|
});
|