/* * @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); } }); });