/*
* @Descripttion: 右键菜单部件
* @version:
* @Author: song
* @Date: 2020-10-24 08:57:47
* @LastEditors: song
* @LastEditTime: 2020-10-24 09:11:19
*/
define([
'dojo/_base/declare',
'jimu/BaseWidget'
],
function (
declare,
BaseWidget
) {
return declare([BaseWidget], {
baseClass: 'jimu-widget-ContextMenu',
name: 'ContextMenu',
layers: {},
yutiandata: null,
startup: function () {
this.inherited(arguments);
var that = this;
let contextMenu = window.dcViewer.contextMenu;
contextMenu.enable = true;
document.oncontextmenu = function () {
$("#nav_box").stop().hide();
$("#nav_box").find("li").remove();
return false;
}
var handler = new Cesium.ScreenSpaceEventHandler(window.viewer.scene.canvas);
handler.setInputAction(function(click){
contextMenu.hide();
$("#nav_box").stop().hide();
$("#nav_box").find("li").remove();
},Cesium.ScreenSpaceEventType.LEFT_DOWN);
contextMenu.addMenuItem('场景设置', () => {
$("#nav-mainbox").empty();
$("#mulu_rongqi").find("li").remove();
for (var i = 0; i < that.yutiandata.length; i++) {
if (that.yutiandata[i]["navParentId"] == 0) {
$(".sfoot img").stop().show();
$("#nav-mainbox").append("
" + that.yutiandata[i]["navTitle"] + "");
}
else {
break;
}
}
//x
var x = $('.dc-context-menu').css("transform").replace(/[^0-9\-,]/g, '').split(',')[4];
//y
var y = $('.dc-context-menu').css("transform").replace(/[^0-9\-,]/g, '').split(',')[5];
$("#nav_box").css({
"left": parseInt(x) + 123 + "px",
"top": parseInt(y) - 10 + "px"
}).stop().show()
$("#nav-mainbox").on("click", "li", function () {
if ($(this).text() == "开启雾天") {
window.viewer.scene.postProcessStages.removeAll();
if (that.yutiandata[1]["navTitle"] = "关闭雨天") {
that.yutiandata[1]["navTitle"] = "开启雨天"
}
if (that.yutiandata[2]["navTitle"] = "关闭雪天") {
that.yutiandata[2]["navTitle"] = "开启雪天"
}
if (that.yutiandata[3]["navTitle"] = "关闭日照") {
that.yutiandata[3]["navTitle"] = "开启日照"
}
var collection = window.viewer.scene.postProcessStages;
var fog = Cesium.PostProcessStageLibrary.createSnowStagew();
collection.add(fog);
$("#nav_box").stop().hide();
$("#nav_box").find("li").remove();
contextMenu.hide();
that.yutiandata[0]["navTitle"] = "关闭雾天"
}
else if ($(this).text() == "开启雨天") {
window.viewer.scene.postProcessStages.removeAll();
if (that.yutiandata[0]["navTitle"] = "关闭雾天") {
that.yutiandata[0]["navTitle"] = "开启雾天"
}
if (that.yutiandata[2]["navTitle"] = "关闭雪天") {
that.yutiandata[2]["navTitle"] = "开启雪天"
}
if (that.yutiandata[3]["navTitle"] = "关闭日照") {
that.yutiandata[3]["navTitle"] = "开启日照"
}
var collection = window.viewer.scene.postProcessStages;
var rain = Cesium.PostProcessStageLibrary.createSnowStagey();
collection.add(rain);
window.viewer.scene.skyAtmosphere.hueShift = -0.8;
window.viewer.scene.skyAtmosphere.saturationShift = -0.7;
window.viewer.scene.skyAtmosphere.brightnessShift = -0.33;
window.viewer.scene.fog.density = 0.001;
window.viewer.scene.fog.minimumBrightness = 0.8;
$("#nav_box").stop().hide();
$("#nav_box").find("li").remove();
contextMenu.hide();
that.yutiandata[1]["navTitle"] = "关闭雨天"
}
else if ($(this).text() == "开启雪天") {
window.viewer.scene.postProcessStages.removeAll();
if (that.yutiandata[0]["navTitle"] = "关闭雾天") {
that.yutiandata[0]["navTitle"] = "开启雾天"
}
if (that.yutiandata[1]["navTitle"] = "关闭雨天") {
that.yutiandata[1]["navTitle"] = "开启雨天"
}
if (that.yutiandata[3]["navTitle"] = "关闭日照") {
that.yutiandata[3]["navTitle"] = "开启日照"
}
var collection = window.viewer.scene.postProcessStages;
var snow = Cesium.PostProcessStageLibrary.createSnowStage();
collection.add(snow);
window.viewer.scene.skyAtmosphere.hueShift = -0.8;
window.viewer.scene.skyAtmosphere.saturationShift = -0.7;
window.viewer.scene.skyAtmosphere.brightnessShift = -0.33;
window.viewer.scene.fog.density = 0.001;
window.viewer.scene.fog.minimumBrightness = 0.8;
$("#nav_box").stop().hide();
$("#nav_box").find("li").remove();
contextMenu.hide();
that.yutiandata[2]["navTitle"] = "关闭雪天"
}
else if ($(this).text() == "开启日照") {
window.viewer.scene.postProcessStages.removeAll();
if (that.yutiandata[0]["navTitle"] = "关闭雾天") {
that.yutiandata[0]["navTitle"] = "开启雾天"
}
if (that.yutiandata[1]["navTitle"] = "关闭雨天") {
that.yutiandata[1]["navTitle"] = "开启雨天"
}
if (that.yutiandata[2]["navTitle"] = "关闭雪天") {
that.yutiandata[2]["navTitle"] = "开启雪天"
}
window.viewer.scene.postProcessStages.removeAll();
window.viewer.scene.globe.enableLighting = true//必须开启光照效果,
window.viewer.scene.dayAlpha = 0.0 //白天图层透明值
window.viewer.scene.nightAlpha = 3.0 //夜晚图层透明值
window.viewer.scene.brightness = 3.5 //图层发光亮度
$("#nav_box").stop().hide();
$("#nav_box").find("li").remove();
contextMenu.hide();
that.yutiandata[3]["navTitle"] = "关闭日照"
}
else if ($(this).text() == "关闭雨天") {
window.viewer.scene.postProcessStages.removeAll();
$("#nav_box").stop().hide();
$("#nav_box").find("li").remove();
contextMenu.hide();
that.yutiandata[1]["navTitle"] = "开启雨天"
}
else if ($(this).text() == "关闭雪天") {
window.viewer.scene.postProcessStages.removeAll();
$("#nav_box").stop().hide();
$("#nav_box").find("li").remove();
contextMenu.hide();
that.yutiandata[2]["navTitle"] = "开启雪天"
}
else if ($(this).text() == "关闭雾天") {
window.viewer.scene.postProcessStages.removeAll();
$("#nav_box").stop().hide();
$("#nav_box").find("li").remove();
contextMenu.hide();
that.yutiandata[0]["navTitle"] = "开启雾天"
}
else if ($(this).text() == "关闭日照") {
window.viewer.scene.postProcessStages.removeAll();
window.viewer.scene.globe.enableLighting = false//必须开启光照效果,
window.viewer.scene.dayAlpha = 1.0 //白天图层透明值
window.viewer.scene.nightAlpha = 0.0 //夜晚图层透明值
window.viewer.scene.brightness = 3.5 //图层发光亮度
$("#nav_box").stop().hide();
$("#nav_box").find("li").remove();
contextMenu.hide();
that.yutiandata[3]["navTitle"] = "开启日照"
}
});
}, this)
$(".menu-items").click(function () {
$("#nav_box").stop().hide();
$("#nav_box").find("li").remove();
});
//雾
Cesium.PostProcessStageLibrary.createSnowStagew = function () {
var fog = new Cesium.PostProcessStage({
name: 'czm_fog',
fragmentShader: fs_fog()
});
return fog;
}
//雨
Cesium.PostProcessStageLibrary.createSnowStagey = function () {
var rain = new Cesium.PostProcessStage({
name: 'czm_rain',
fragmentShader: fs_rain()
});
return rain;
}
Cesium.PostProcessStageLibrary.createSnowStage = function () {
var snow = new Cesium.PostProcessStage({
name: 'czm_snow',
fragmentShader: fs_snow()
});
return snow;
}
//雾
function fs_fog() {
return " uniform sampler2D colorTexture;\n" +
" uniform sampler2D depthTexture;\n" +
" varying vec2 v_textureCoordinates;\n" +
" void main(void)\n" +
" {\n" +
" vec4 origcolor=texture2D(colorTexture, v_textureCoordinates);\n" +
" vec4 fogcolor=vec4(0.8,0.8,0.8,0.5);\n" +
"\n" +
" float depth = czm_readDepth(depthTexture, v_textureCoordinates);\n" +
" vec4 depthcolor=texture2D(depthTexture, v_textureCoordinates);\n" +
"\n" +
" float f=(depthcolor.r-0.22)/0.5;\n" +
" if(f<0.0) f=0.0;\n" +
" else if(f>1.0) f=1.0;\n" +
" gl_FragColor = mix(origcolor,fogcolor,f);\n" +
" }"
}
//雨
function fs_rain() {
return 'uniform sampler2D colorTexture;\n'
+ 'varying vec2 v_textureCoordinates;\n'
+ ' float hash(float x){\n'
+ ' return fract(sin(x*133.3)*13.13);\n'
+ ' }\n'
+ ' void main(void){\n'
+ ' float time = czm_frameNumber / 60.0;\n'
+ ' vec2 resolution = czm_viewport.zw; \n'
+ ' vec2 uv=(gl_FragCoord.xy*2.-resolution.xy)/min(resolution.x,resolution.y);\n'
+ ' vec3 c=vec3(.6,.7,.8); \n'
+ ' float a=-.4;\n'
+ ' float si=sin(a),co=cos(a);\n'
+ ' uv*=mat2(co,-si,si,co);\n'
+ ' uv*=length(uv+vec2(0,4.9))*.3+1.;\n'
+ ' float v=1.-sin(hash(floor(uv.x*100.))*2.);\n'
+ ' float b=clamp(abs(sin(20.*time*v+uv.y*(5./(2.+v))))-.95,0.,1.)*20.;\n'
+ ' c*=v*b; \n'
+ ' gl_FragColor = mix(texture2D(colorTexture, v_textureCoordinates), vec4(c,1), 0.5); \n'
+ ' }';
}
//雪
function fs_snow() {
return 'uniform sampler2D colorTexture;\n'
+ 'varying vec2 v_textureCoordinates;\n'
+ 'float snow(vec2 uv,float scale)\n'
+ '{\n'
+ ' float time = czm_frameNumber / 60.0;\n'
+ ' float w=smoothstep(1.,0.,-uv.y*(scale/10.));if(w<.1)return 0.;\n'
+ ' uv+=time/scale;uv.y+=time*2./scale;uv.x+=sin(uv.y+time*.5)/scale;\n'
+ ' uv*=scale;vec2 s=floor(uv),f=fract(uv),p;float k=3.,d;\n'
+ ' p=.5+.35*sin(11.*fract(sin((s+p+scale)*mat2(7,3,6,5))*5.))-f;d=length(p);k=min(d,k);\n'
+ ' k=smoothstep(0.,k,sin(f.x+f.y)*0.01);\n'
+ ' return k*w;\n'
+ '}\n'
+ 'void main(void){\n'
+ ' vec2 resolution = czm_viewport.zw;\n'
+ ' vec2 uv=(gl_FragCoord.xy*2.-resolution.xy)/min(resolution.x,resolution.y);\n'
+ ' vec3 finalColor=vec3(0);\n'
+ ' float c = 0.0;\n'
+ ' c+=snow(uv,30.)*.0;\n'
+ ' c+=snow(uv,20.)*.0;\n'
+ ' c+=snow(uv,15.)*.0;\n'
+ ' c+=snow(uv,10.);\n'
+ ' c+=snow(uv,8.);\n'
+ ' c+=snow(uv,6.);\n'
+ ' c+=snow(uv,5.);\n'
+ ' finalColor=(vec3(c));\n'
+ ' gl_FragColor = mix(texture2D(colorTexture, v_textureCoordinates), vec4(finalColor,1), 0.5);\n'
+ '}';
}
},
onOpen: function () {
var self = this;
//面板打开的时候触发 (when open this panel trigger)
$.getJSON("/widgets/ContextMenu/nav.json", function (data) {
self.yutiandata = data
})
$(".menu-item").append("");
},
onClose: function () {
//面板关闭的时候触发 (when this panel is closed trigger)
},
onMinimize: function () {
this.resize();
},
onMaximize: function () {
this.resize();
},
resize: function () {
},
destroy: function () {
//销毁的时候触发
//todo
//do something before this func
this.inherited(arguments);
}
});
});