From 4a31ede53d0e237921282de08feba3b6ed545e4f Mon Sep 17 00:00:00 2001
From: nnnjjj123 <494715143@qq.com>
Date: Mon, 02 Nov 2020 14:56:29 +0800
Subject: [PATCH] 右击菜单

---
 widgets/ContextMenu/Widget.js |  272 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 265 insertions(+), 7 deletions(-)

diff --git a/widgets/ContextMenu/Widget.js b/widgets/ContextMenu/Widget.js
index 92fa4f4..39fb132 100644
--- a/widgets/ContextMenu/Widget.js
+++ b/widgets/ContextMenu/Widget.js
@@ -7,9 +7,9 @@
  * @LastEditTime: 2020-10-24 09:11:19
  */
 define([
-		'dojo/_base/declare',
-		'jimu/BaseWidget'
-	],
+	'dojo/_base/declare',
+	'jimu/BaseWidget'
+],
 	function (
 		declare,
 		BaseWidget
@@ -17,17 +17,275 @@
 		return declare([BaseWidget], {
 			baseClass: 'jimu-widget-ContextMenu',
 			name: 'ContextMenu',
-			layers:{},
+			layers: {},
+			yutiandata: null,
 			startup: function () {
 				this.inherited(arguments);
-				let contextMenu = window.dcViewer.contextMenu
-				contextMenu.enable = true
-				contextMenu.addMenuItem('测试', () => {}, this)
+				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("<li class='" + that.yutiandata[i]["navId"] + "'><span class='shead'></span><a>" + that.yutiandata[i]["navTitle"] + "</a><ul></ul></li>");
+						}
+						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("<span class='sfoot'><img src='/widgets/ContextMenu/image/1.png' style='width:10px; height:10px;'/></span>");
 			},
 
 			onClose: function () {

--
Gitblit v1.9.3