diff --git a/ClassDoubleScreenCompare.cs b/ClassDoubleScreenCompare.cs new file mode 100644 index 0000000..f2935da --- /dev/null +++ b/ClassDoubleScreenCompare.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using GeoScene.Globe; +using GeoScene.Data; +using GeoScene.Engine; +using System.Drawing; + +namespace Cyberpipe +{ + class ClassDoubleScreenCompare + { + public static GSOFeature getSameFeatureFromOtherGlobe(GSOFeature feature, + GSOGlobeControl globeControl1, GSOGlobeControl globeControl2,double bufferWidth,GSOGeoPolygon3D resPolygon) + { + GSOLayer layer; + GSOFeatures features = new GSOFeatures(); + + if (!feature.Dataset.Caption.StartsWith("施工")) + { + layer = feature.Dataset.Caption == "供电管线" + ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") + : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(feature, fs[i], globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + else + { + layer = feature.Dataset.Caption == "施工电力管线" + ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") + : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(fs[i], feature, globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + + return getMostSimilarFeatureFromFeatures(feature, features); + + } + + + private static GSOFeature getMostSimilarFeatureFromFeatures(GSOFeature feature, GSOFeatures features) + { + double maxLength = 0; + GSOFeature f = new GSOFeature(); + GSOGeoPolyline3D line = feature.Geometry as GSOGeoPolyline3D; + + if (features.Length == 0) return null; + if (features.Length == 1) + { + f = features[0]; + f.HighLight = true; + } + else + { + for (int m = 0; m < features.Length; m++) + { + GSOGeoPolyline3D tempSGLine = features[m].Geometry as GSOGeoPolyline3D; + + double tempLength = tempSGLine.GetSpaceLength(false, 6378137); + double lengthAbs = Math.Abs(tempLength - line.GetSpaceLength(false, 6378137)); + if (m == 0) + { + f = features[0]; + f.HighLight = true; + maxLength = lengthAbs; + } + else if (lengthAbs < maxLength) + { + f = features[m]; + f.HighLight = true; + maxLength = lengthAbs; + } + } + } + return f; + } + + private static bool isSameFeature(GSOFeature feature1, GSOFeature feature2, GSOLayer layer, double bufferWidth) + { + GSOGeoPolyline3D line = feature1.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = line.CreateBuffer(bufferWidth * 2, true, 5, true, false); + + if (bufferPolygon == null) return false; + + GSOFeatures featuresInLayer = layer.FindFeaturesInPolygon(bufferPolygon, true); + + if (featuresInLayer == null || featuresInLayer.Length <= 0) + return false; + + for (int i = 0; i < featuresInLayer.Length; i++) + { + if (featuresInLayer[i].Name == feature2.Name) + { + return true; + break; + } + } + return false; + } + + private static bool isSimilarFeature(GSOFeature srcFeature, GSOFeature dscFeature, + GSOGlobeControl globeControl1,GSOGlobeControl globeControl2,double bufferWidth) + { + GSOLayer dscLayer = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); + GSOLayer srcLayer = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); + + if (!isSameFeature(srcFeature, dscFeature, dscLayer, bufferWidth) + && !isSameFeature(dscFeature, srcFeature, srcLayer, bufferWidth)) + return false; + return true; + } + + public static void CalculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2, + out double horizonDistance, out double verticalDistance, GSOGlobeControl globeControl1, GSOGlobeControl globeControl2) + { + GSOPoint3d pntIntersect1 = new GSOPoint3d(); + GSOPoint3d pntIntersect2 = new GSOPoint3d(); + GSOPoint3d pntProIntersect1 = new GSOPoint3d(); + GSOPoint3d pntProIntersect2 = new GSOPoint3d(); + + verticalDistance = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, verticalDistance, true, "垂直", globeControl1, globeControl2); + + horizonDistance = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, horizonDistance, true, "水平", globeControl1, globeControl2); + + } + + private static GSOPoint3d LabelDistance(GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, + double distance, bool markerVisible, string label,GSOGlobeControl globeControl1,GSOGlobeControl globeControl2) + { + if (pntIntersect1 == null || pntIntersect2 == null) + return new GSOPoint3d(); + GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); + GSOPoint3ds point3ds = new GSOPoint3ds(); + point3ds.Add(pntIntersect1); + point3ds.Add(pntIntersect2); + disline.AddPart(point3ds); + + GSOGeoMarker dismarker = new GSOGeoMarker(); + GSOFeature marker = null; + GSOFeature line = null; + createLineStyle(out marker, out line, disline, pntIntersect1, pntIntersect2, distance, label, dismarker); + + line.Visible = marker.Visible = markerVisible; + globeControl1.Globe.MemoryLayer.AddFeature(line); + globeControl1.Globe.MemoryLayer.AddFeature(marker); + + globeControl2.Globe.MemoryLayer.AddFeature(line); + globeControl2.Globe.MemoryLayer.AddFeature(marker); + + return dismarker.Position; + } + + private static void createLineStyle(out GSOFeature marker, out GSOFeature line, GSOGeoPolyline3D disline, + GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) + { + GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 + style.LineColor = Color.Red; + style.LineWidth = 5; //设置线的宽度为5 + style.VertexVisible = true; //显示线的节点 + disline.Style = style; //把风格添加到线上 + disline.AltitudeMode = EnumAltitudeMode.Absolute; + line = new GSOFeature(); + line.Geometry = disline; + + dismarker.X = pntIntersect1.X; + dismarker.Y = pntIntersect1.Y; + dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; + dismarker.Text = label + distance.ToString("0.00") + "米"; + dismarker.AltitudeMode = EnumAltitudeMode.Absolute; + + GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); + GSOTextStyle styleText = new GSOTextStyle(); + styleText.IsSizeFixed = true; + styleText.ForeColor = Color.Red; + styleText.FontSize = 20; + styleMarker.TextStyle = styleText; + dismarker.Style = styleMarker; + + marker = new GSOFeature(); + marker.Geometry = dismarker; + } + + } +} diff --git a/ClassDoubleScreenCompare.cs b/ClassDoubleScreenCompare.cs new file mode 100644 index 0000000..f2935da --- /dev/null +++ b/ClassDoubleScreenCompare.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using GeoScene.Globe; +using GeoScene.Data; +using GeoScene.Engine; +using System.Drawing; + +namespace Cyberpipe +{ + class ClassDoubleScreenCompare + { + public static GSOFeature getSameFeatureFromOtherGlobe(GSOFeature feature, + GSOGlobeControl globeControl1, GSOGlobeControl globeControl2,double bufferWidth,GSOGeoPolygon3D resPolygon) + { + GSOLayer layer; + GSOFeatures features = new GSOFeatures(); + + if (!feature.Dataset.Caption.StartsWith("施工")) + { + layer = feature.Dataset.Caption == "供电管线" + ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") + : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(feature, fs[i], globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + else + { + layer = feature.Dataset.Caption == "施工电力管线" + ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") + : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(fs[i], feature, globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + + return getMostSimilarFeatureFromFeatures(feature, features); + + } + + + private static GSOFeature getMostSimilarFeatureFromFeatures(GSOFeature feature, GSOFeatures features) + { + double maxLength = 0; + GSOFeature f = new GSOFeature(); + GSOGeoPolyline3D line = feature.Geometry as GSOGeoPolyline3D; + + if (features.Length == 0) return null; + if (features.Length == 1) + { + f = features[0]; + f.HighLight = true; + } + else + { + for (int m = 0; m < features.Length; m++) + { + GSOGeoPolyline3D tempSGLine = features[m].Geometry as GSOGeoPolyline3D; + + double tempLength = tempSGLine.GetSpaceLength(false, 6378137); + double lengthAbs = Math.Abs(tempLength - line.GetSpaceLength(false, 6378137)); + if (m == 0) + { + f = features[0]; + f.HighLight = true; + maxLength = lengthAbs; + } + else if (lengthAbs < maxLength) + { + f = features[m]; + f.HighLight = true; + maxLength = lengthAbs; + } + } + } + return f; + } + + private static bool isSameFeature(GSOFeature feature1, GSOFeature feature2, GSOLayer layer, double bufferWidth) + { + GSOGeoPolyline3D line = feature1.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = line.CreateBuffer(bufferWidth * 2, true, 5, true, false); + + if (bufferPolygon == null) return false; + + GSOFeatures featuresInLayer = layer.FindFeaturesInPolygon(bufferPolygon, true); + + if (featuresInLayer == null || featuresInLayer.Length <= 0) + return false; + + for (int i = 0; i < featuresInLayer.Length; i++) + { + if (featuresInLayer[i].Name == feature2.Name) + { + return true; + break; + } + } + return false; + } + + private static bool isSimilarFeature(GSOFeature srcFeature, GSOFeature dscFeature, + GSOGlobeControl globeControl1,GSOGlobeControl globeControl2,double bufferWidth) + { + GSOLayer dscLayer = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); + GSOLayer srcLayer = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); + + if (!isSameFeature(srcFeature, dscFeature, dscLayer, bufferWidth) + && !isSameFeature(dscFeature, srcFeature, srcLayer, bufferWidth)) + return false; + return true; + } + + public static void CalculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2, + out double horizonDistance, out double verticalDistance, GSOGlobeControl globeControl1, GSOGlobeControl globeControl2) + { + GSOPoint3d pntIntersect1 = new GSOPoint3d(); + GSOPoint3d pntIntersect2 = new GSOPoint3d(); + GSOPoint3d pntProIntersect1 = new GSOPoint3d(); + GSOPoint3d pntProIntersect2 = new GSOPoint3d(); + + verticalDistance = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, verticalDistance, true, "垂直", globeControl1, globeControl2); + + horizonDistance = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, horizonDistance, true, "水平", globeControl1, globeControl2); + + } + + private static GSOPoint3d LabelDistance(GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, + double distance, bool markerVisible, string label,GSOGlobeControl globeControl1,GSOGlobeControl globeControl2) + { + if (pntIntersect1 == null || pntIntersect2 == null) + return new GSOPoint3d(); + GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); + GSOPoint3ds point3ds = new GSOPoint3ds(); + point3ds.Add(pntIntersect1); + point3ds.Add(pntIntersect2); + disline.AddPart(point3ds); + + GSOGeoMarker dismarker = new GSOGeoMarker(); + GSOFeature marker = null; + GSOFeature line = null; + createLineStyle(out marker, out line, disline, pntIntersect1, pntIntersect2, distance, label, dismarker); + + line.Visible = marker.Visible = markerVisible; + globeControl1.Globe.MemoryLayer.AddFeature(line); + globeControl1.Globe.MemoryLayer.AddFeature(marker); + + globeControl2.Globe.MemoryLayer.AddFeature(line); + globeControl2.Globe.MemoryLayer.AddFeature(marker); + + return dismarker.Position; + } + + private static void createLineStyle(out GSOFeature marker, out GSOFeature line, GSOGeoPolyline3D disline, + GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) + { + GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 + style.LineColor = Color.Red; + style.LineWidth = 5; //设置线的宽度为5 + style.VertexVisible = true; //显示线的节点 + disline.Style = style; //把风格添加到线上 + disline.AltitudeMode = EnumAltitudeMode.Absolute; + line = new GSOFeature(); + line.Geometry = disline; + + dismarker.X = pntIntersect1.X; + dismarker.Y = pntIntersect1.Y; + dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; + dismarker.Text = label + distance.ToString("0.00") + "米"; + dismarker.AltitudeMode = EnumAltitudeMode.Absolute; + + GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); + GSOTextStyle styleText = new GSOTextStyle(); + styleText.IsSizeFixed = true; + styleText.ForeColor = Color.Red; + styleText.FontSize = 20; + styleMarker.TextStyle = styleText; + dismarker.Style = styleMarker; + + marker = new GSOFeature(); + marker.Geometry = dismarker; + } + + } +} diff --git a/Cyberpipe.csproj b/Cyberpipe.csproj index d8aa9c8..bcce54d 100644 --- a/Cyberpipe.csproj +++ b/Cyberpipe.csproj @@ -203,6 +203,7 @@ + @@ -1143,6 +1144,7 @@ SysRescInfoManager.cs + True True diff --git a/ClassDoubleScreenCompare.cs b/ClassDoubleScreenCompare.cs new file mode 100644 index 0000000..f2935da --- /dev/null +++ b/ClassDoubleScreenCompare.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using GeoScene.Globe; +using GeoScene.Data; +using GeoScene.Engine; +using System.Drawing; + +namespace Cyberpipe +{ + class ClassDoubleScreenCompare + { + public static GSOFeature getSameFeatureFromOtherGlobe(GSOFeature feature, + GSOGlobeControl globeControl1, GSOGlobeControl globeControl2,double bufferWidth,GSOGeoPolygon3D resPolygon) + { + GSOLayer layer; + GSOFeatures features = new GSOFeatures(); + + if (!feature.Dataset.Caption.StartsWith("施工")) + { + layer = feature.Dataset.Caption == "供电管线" + ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") + : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(feature, fs[i], globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + else + { + layer = feature.Dataset.Caption == "施工电力管线" + ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") + : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(fs[i], feature, globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + + return getMostSimilarFeatureFromFeatures(feature, features); + + } + + + private static GSOFeature getMostSimilarFeatureFromFeatures(GSOFeature feature, GSOFeatures features) + { + double maxLength = 0; + GSOFeature f = new GSOFeature(); + GSOGeoPolyline3D line = feature.Geometry as GSOGeoPolyline3D; + + if (features.Length == 0) return null; + if (features.Length == 1) + { + f = features[0]; + f.HighLight = true; + } + else + { + for (int m = 0; m < features.Length; m++) + { + GSOGeoPolyline3D tempSGLine = features[m].Geometry as GSOGeoPolyline3D; + + double tempLength = tempSGLine.GetSpaceLength(false, 6378137); + double lengthAbs = Math.Abs(tempLength - line.GetSpaceLength(false, 6378137)); + if (m == 0) + { + f = features[0]; + f.HighLight = true; + maxLength = lengthAbs; + } + else if (lengthAbs < maxLength) + { + f = features[m]; + f.HighLight = true; + maxLength = lengthAbs; + } + } + } + return f; + } + + private static bool isSameFeature(GSOFeature feature1, GSOFeature feature2, GSOLayer layer, double bufferWidth) + { + GSOGeoPolyline3D line = feature1.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = line.CreateBuffer(bufferWidth * 2, true, 5, true, false); + + if (bufferPolygon == null) return false; + + GSOFeatures featuresInLayer = layer.FindFeaturesInPolygon(bufferPolygon, true); + + if (featuresInLayer == null || featuresInLayer.Length <= 0) + return false; + + for (int i = 0; i < featuresInLayer.Length; i++) + { + if (featuresInLayer[i].Name == feature2.Name) + { + return true; + break; + } + } + return false; + } + + private static bool isSimilarFeature(GSOFeature srcFeature, GSOFeature dscFeature, + GSOGlobeControl globeControl1,GSOGlobeControl globeControl2,double bufferWidth) + { + GSOLayer dscLayer = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); + GSOLayer srcLayer = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); + + if (!isSameFeature(srcFeature, dscFeature, dscLayer, bufferWidth) + && !isSameFeature(dscFeature, srcFeature, srcLayer, bufferWidth)) + return false; + return true; + } + + public static void CalculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2, + out double horizonDistance, out double verticalDistance, GSOGlobeControl globeControl1, GSOGlobeControl globeControl2) + { + GSOPoint3d pntIntersect1 = new GSOPoint3d(); + GSOPoint3d pntIntersect2 = new GSOPoint3d(); + GSOPoint3d pntProIntersect1 = new GSOPoint3d(); + GSOPoint3d pntProIntersect2 = new GSOPoint3d(); + + verticalDistance = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, verticalDistance, true, "垂直", globeControl1, globeControl2); + + horizonDistance = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, horizonDistance, true, "水平", globeControl1, globeControl2); + + } + + private static GSOPoint3d LabelDistance(GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, + double distance, bool markerVisible, string label,GSOGlobeControl globeControl1,GSOGlobeControl globeControl2) + { + if (pntIntersect1 == null || pntIntersect2 == null) + return new GSOPoint3d(); + GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); + GSOPoint3ds point3ds = new GSOPoint3ds(); + point3ds.Add(pntIntersect1); + point3ds.Add(pntIntersect2); + disline.AddPart(point3ds); + + GSOGeoMarker dismarker = new GSOGeoMarker(); + GSOFeature marker = null; + GSOFeature line = null; + createLineStyle(out marker, out line, disline, pntIntersect1, pntIntersect2, distance, label, dismarker); + + line.Visible = marker.Visible = markerVisible; + globeControl1.Globe.MemoryLayer.AddFeature(line); + globeControl1.Globe.MemoryLayer.AddFeature(marker); + + globeControl2.Globe.MemoryLayer.AddFeature(line); + globeControl2.Globe.MemoryLayer.AddFeature(marker); + + return dismarker.Position; + } + + private static void createLineStyle(out GSOFeature marker, out GSOFeature line, GSOGeoPolyline3D disline, + GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) + { + GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 + style.LineColor = Color.Red; + style.LineWidth = 5; //设置线的宽度为5 + style.VertexVisible = true; //显示线的节点 + disline.Style = style; //把风格添加到线上 + disline.AltitudeMode = EnumAltitudeMode.Absolute; + line = new GSOFeature(); + line.Geometry = disline; + + dismarker.X = pntIntersect1.X; + dismarker.Y = pntIntersect1.Y; + dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; + dismarker.Text = label + distance.ToString("0.00") + "米"; + dismarker.AltitudeMode = EnumAltitudeMode.Absolute; + + GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); + GSOTextStyle styleText = new GSOTextStyle(); + styleText.IsSizeFixed = true; + styleText.ForeColor = Color.Red; + styleText.FontSize = 20; + styleMarker.TextStyle = styleText; + dismarker.Style = styleMarker; + + marker = new GSOFeature(); + marker.Geometry = dismarker; + } + + } +} diff --git a/Cyberpipe.csproj b/Cyberpipe.csproj index d8aa9c8..bcce54d 100644 --- a/Cyberpipe.csproj +++ b/Cyberpipe.csproj @@ -203,6 +203,7 @@ + @@ -1143,6 +1144,7 @@ SysRescInfoManager.cs + True True diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 123caf1..2c45db6 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -258,42 +258,25 @@ for (int i = 0; i < scLayer.GetAllFeatures().Length; i++) { GSOFeature scFeature = scLayer.GetAt(i); - if (scFeature.GetFieldAsString("所属道路") == road) + if (scFeature.GetFieldAsString("所属道路") != road) continue; + GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + + GSOFeature sgFeature = null; + GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); + + //**判断同一个Feature + if (sgFeatures.Length >= 1) { - GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); - GSOFeature sgFeature = null; - GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); - - //**判断同一个Feature - if (sgFeatures.Length >= 1) + if (sgFeature != null) { - sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); + GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; + double horizonDistance, verticalDistance; - if (sgFeature != null) - { - GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; - double horizonDistance, verticalDistance; - - CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); - GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); - } - else - { - scFeature.HighLight = true; - DataRow dr = dt.NewRow(); - dr[0] = scLayer.Caption; - dr[1] = scFeature.GetFieldAsString("编号"); - dr[2] = sgLayer.Caption; - dr[3] = "无"; - dr[4] = "无"; - dr[5] = "0.02"; - dr[6] = "无"; - dr[7] = "0.02"; - dr[8] = "未设计管段"; - dt.Rows.Add(dr); - } + CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); + GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); } else { @@ -311,6 +294,21 @@ dt.Rows.Add(dr); } } + else + { + scFeature.HighLight = true; + DataRow dr = dt.NewRow(); + dr[0] = scLayer.Caption; + dr[1] = scFeature.GetFieldAsString("编号"); + dr[2] = sgLayer.Caption; + dr[3] = "无"; + dr[4] = "无"; + dr[5] = "0.02"; + dr[6] = "无"; + dr[7] = "0.02"; + dr[8] = "未设计管段"; + dt.Rows.Add(dr); + } } } /// diff --git a/ClassDoubleScreenCompare.cs b/ClassDoubleScreenCompare.cs new file mode 100644 index 0000000..f2935da --- /dev/null +++ b/ClassDoubleScreenCompare.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using GeoScene.Globe; +using GeoScene.Data; +using GeoScene.Engine; +using System.Drawing; + +namespace Cyberpipe +{ + class ClassDoubleScreenCompare + { + public static GSOFeature getSameFeatureFromOtherGlobe(GSOFeature feature, + GSOGlobeControl globeControl1, GSOGlobeControl globeControl2,double bufferWidth,GSOGeoPolygon3D resPolygon) + { + GSOLayer layer; + GSOFeatures features = new GSOFeatures(); + + if (!feature.Dataset.Caption.StartsWith("施工")) + { + layer = feature.Dataset.Caption == "供电管线" + ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") + : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(feature, fs[i], globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + else + { + layer = feature.Dataset.Caption == "施工电力管线" + ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") + : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(fs[i], feature, globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + + return getMostSimilarFeatureFromFeatures(feature, features); + + } + + + private static GSOFeature getMostSimilarFeatureFromFeatures(GSOFeature feature, GSOFeatures features) + { + double maxLength = 0; + GSOFeature f = new GSOFeature(); + GSOGeoPolyline3D line = feature.Geometry as GSOGeoPolyline3D; + + if (features.Length == 0) return null; + if (features.Length == 1) + { + f = features[0]; + f.HighLight = true; + } + else + { + for (int m = 0; m < features.Length; m++) + { + GSOGeoPolyline3D tempSGLine = features[m].Geometry as GSOGeoPolyline3D; + + double tempLength = tempSGLine.GetSpaceLength(false, 6378137); + double lengthAbs = Math.Abs(tempLength - line.GetSpaceLength(false, 6378137)); + if (m == 0) + { + f = features[0]; + f.HighLight = true; + maxLength = lengthAbs; + } + else if (lengthAbs < maxLength) + { + f = features[m]; + f.HighLight = true; + maxLength = lengthAbs; + } + } + } + return f; + } + + private static bool isSameFeature(GSOFeature feature1, GSOFeature feature2, GSOLayer layer, double bufferWidth) + { + GSOGeoPolyline3D line = feature1.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = line.CreateBuffer(bufferWidth * 2, true, 5, true, false); + + if (bufferPolygon == null) return false; + + GSOFeatures featuresInLayer = layer.FindFeaturesInPolygon(bufferPolygon, true); + + if (featuresInLayer == null || featuresInLayer.Length <= 0) + return false; + + for (int i = 0; i < featuresInLayer.Length; i++) + { + if (featuresInLayer[i].Name == feature2.Name) + { + return true; + break; + } + } + return false; + } + + private static bool isSimilarFeature(GSOFeature srcFeature, GSOFeature dscFeature, + GSOGlobeControl globeControl1,GSOGlobeControl globeControl2,double bufferWidth) + { + GSOLayer dscLayer = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); + GSOLayer srcLayer = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); + + if (!isSameFeature(srcFeature, dscFeature, dscLayer, bufferWidth) + && !isSameFeature(dscFeature, srcFeature, srcLayer, bufferWidth)) + return false; + return true; + } + + public static void CalculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2, + out double horizonDistance, out double verticalDistance, GSOGlobeControl globeControl1, GSOGlobeControl globeControl2) + { + GSOPoint3d pntIntersect1 = new GSOPoint3d(); + GSOPoint3d pntIntersect2 = new GSOPoint3d(); + GSOPoint3d pntProIntersect1 = new GSOPoint3d(); + GSOPoint3d pntProIntersect2 = new GSOPoint3d(); + + verticalDistance = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, verticalDistance, true, "垂直", globeControl1, globeControl2); + + horizonDistance = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, horizonDistance, true, "水平", globeControl1, globeControl2); + + } + + private static GSOPoint3d LabelDistance(GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, + double distance, bool markerVisible, string label,GSOGlobeControl globeControl1,GSOGlobeControl globeControl2) + { + if (pntIntersect1 == null || pntIntersect2 == null) + return new GSOPoint3d(); + GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); + GSOPoint3ds point3ds = new GSOPoint3ds(); + point3ds.Add(pntIntersect1); + point3ds.Add(pntIntersect2); + disline.AddPart(point3ds); + + GSOGeoMarker dismarker = new GSOGeoMarker(); + GSOFeature marker = null; + GSOFeature line = null; + createLineStyle(out marker, out line, disline, pntIntersect1, pntIntersect2, distance, label, dismarker); + + line.Visible = marker.Visible = markerVisible; + globeControl1.Globe.MemoryLayer.AddFeature(line); + globeControl1.Globe.MemoryLayer.AddFeature(marker); + + globeControl2.Globe.MemoryLayer.AddFeature(line); + globeControl2.Globe.MemoryLayer.AddFeature(marker); + + return dismarker.Position; + } + + private static void createLineStyle(out GSOFeature marker, out GSOFeature line, GSOGeoPolyline3D disline, + GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) + { + GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 + style.LineColor = Color.Red; + style.LineWidth = 5; //设置线的宽度为5 + style.VertexVisible = true; //显示线的节点 + disline.Style = style; //把风格添加到线上 + disline.AltitudeMode = EnumAltitudeMode.Absolute; + line = new GSOFeature(); + line.Geometry = disline; + + dismarker.X = pntIntersect1.X; + dismarker.Y = pntIntersect1.Y; + dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; + dismarker.Text = label + distance.ToString("0.00") + "米"; + dismarker.AltitudeMode = EnumAltitudeMode.Absolute; + + GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); + GSOTextStyle styleText = new GSOTextStyle(); + styleText.IsSizeFixed = true; + styleText.ForeColor = Color.Red; + styleText.FontSize = 20; + styleMarker.TextStyle = styleText; + dismarker.Style = styleMarker; + + marker = new GSOFeature(); + marker.Geometry = dismarker; + } + + } +} diff --git a/Cyberpipe.csproj b/Cyberpipe.csproj index d8aa9c8..bcce54d 100644 --- a/Cyberpipe.csproj +++ b/Cyberpipe.csproj @@ -203,6 +203,7 @@ + @@ -1143,6 +1144,7 @@ SysRescInfoManager.cs + True True diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 123caf1..2c45db6 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -258,42 +258,25 @@ for (int i = 0; i < scLayer.GetAllFeatures().Length; i++) { GSOFeature scFeature = scLayer.GetAt(i); - if (scFeature.GetFieldAsString("所属道路") == road) + if (scFeature.GetFieldAsString("所属道路") != road) continue; + GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + + GSOFeature sgFeature = null; + GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); + + //**判断同一个Feature + if (sgFeatures.Length >= 1) { - GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); - GSOFeature sgFeature = null; - GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); - - //**判断同一个Feature - if (sgFeatures.Length >= 1) + if (sgFeature != null) { - sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); + GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; + double horizonDistance, verticalDistance; - if (sgFeature != null) - { - GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; - double horizonDistance, verticalDistance; - - CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); - GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); - } - else - { - scFeature.HighLight = true; - DataRow dr = dt.NewRow(); - dr[0] = scLayer.Caption; - dr[1] = scFeature.GetFieldAsString("编号"); - dr[2] = sgLayer.Caption; - dr[3] = "无"; - dr[4] = "无"; - dr[5] = "0.02"; - dr[6] = "无"; - dr[7] = "0.02"; - dr[8] = "未设计管段"; - dt.Rows.Add(dr); - } + CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); + GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); } else { @@ -311,6 +294,21 @@ dt.Rows.Add(dr); } } + else + { + scFeature.HighLight = true; + DataRow dr = dt.NewRow(); + dr[0] = scLayer.Caption; + dr[1] = scFeature.GetFieldAsString("编号"); + dr[2] = sgLayer.Caption; + dr[3] = "无"; + dr[4] = "无"; + dr[5] = "0.02"; + dr[6] = "无"; + dr[7] = "0.02"; + dr[8] = "未设计管段"; + dt.Rows.Add(dr); + } } } /// diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index 53946c0..fe32265 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -4,7 +4,7 @@ using GeoScene.Globe; namespace Cyberpipe -{ +{ //本类作用为:辅助GlobalControl上Feature的统计分析工具类 class FeatureStatisticsService { /// @@ -60,8 +60,8 @@ /// /// /// - /// - /// + /// + /// /// /// public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) @@ -74,6 +74,7 @@ for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; double length = line.GetSpaceLength(true, 6378137); totalLength += length; ncount += 1; @@ -114,7 +115,7 @@ for (int i = 0; i < feats.Length; i++) { double radius = feats[i].GetFieldAsDouble(fieldName); - if (radius >= min && radius <= max) + if (radius >= minValue && radius <= maxValue) { result.Add(feats[i]); } @@ -148,23 +149,22 @@ lstDiameter.Sort(); if (lstDiameter.Count > 0) { - for (int m = 0; m < lstDiameter.Count; m++) + foreach (float diameter in lstDiameter) { double totalLength = 0.00; int ncount = 0; for (int j = 0; j < feats.Length; j++) { - if (feats[j].GetFieldAsFloat("管径_毫米") == lstDiameter[m]) - { - GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } + if (Math.Abs(feats[j].GetFieldAsFloat("管径_毫米") - diameter) > 0.00001) continue; + GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = lstDiameter[m].ToString(); + featuresClass.groupFieldValue = diameter.ToString(); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -191,13 +191,13 @@ //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); - for (int j = 0; j < accessStrs.Length; j++) + foreach (string accssname in accessStrs) { - GSOFeatures feats = null; - int ncount = 0; + GSOFeatures feats; + int ncount; if (polygon == null) { - feats = flayer.GetFeatureByFieldValue("附属物名称", accessStrs[j], true); + feats = flayer.GetFeatureByFieldValue("附属物名称", accssname, true); ncount = feats.Length; } else @@ -207,14 +207,14 @@ //过滤 for (int n = 0; n < feats.Length; n++) { - if (feats[n].GetFieldAsString("附属物名称").Contains(accessStrs[j])) newfeats.Add(feats[n]); + if (feats[n].GetFieldAsString("附属物名称").Contains(accssname)) newfeats.Add(feats[n]); } ncount = newfeats.Length; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); - featuresClass.layerName = accessStrs[j]; + featuresClass.layerName = accssname; featuresClass.ncount = ncount; result.Add(featuresClass); @@ -303,6 +303,26 @@ if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); - } + } + + + /// + /// 获取globeControl上选中的管线,如果返回空则没有选中的管线 + /// + /// 地球引擎 + /// 返回一根线 + public static GSOFeature GetSelectedPipeline(GSOGlobeControl globeControl) + { + GSOFeature resFeature; + if (globeControl.Globe.SelObjectCount < 1) return null; + GSOLayer resLayer; + globeControl.Globe.GetSelectObject(0, out resFeature, out resLayer); + if (resFeature == null) return null; + + GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; + if (line1 == null) return null; + GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; + return pipeStyle1 == null ? null : resFeature; + } } } diff --git a/ClassDoubleScreenCompare.cs b/ClassDoubleScreenCompare.cs new file mode 100644 index 0000000..f2935da --- /dev/null +++ b/ClassDoubleScreenCompare.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using GeoScene.Globe; +using GeoScene.Data; +using GeoScene.Engine; +using System.Drawing; + +namespace Cyberpipe +{ + class ClassDoubleScreenCompare + { + public static GSOFeature getSameFeatureFromOtherGlobe(GSOFeature feature, + GSOGlobeControl globeControl1, GSOGlobeControl globeControl2,double bufferWidth,GSOGeoPolygon3D resPolygon) + { + GSOLayer layer; + GSOFeatures features = new GSOFeatures(); + + if (!feature.Dataset.Caption.StartsWith("施工")) + { + layer = feature.Dataset.Caption == "供电管线" + ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") + : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(feature, fs[i], globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + else + { + layer = feature.Dataset.Caption == "施工电力管线" + ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") + : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(fs[i], feature, globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + + return getMostSimilarFeatureFromFeatures(feature, features); + + } + + + private static GSOFeature getMostSimilarFeatureFromFeatures(GSOFeature feature, GSOFeatures features) + { + double maxLength = 0; + GSOFeature f = new GSOFeature(); + GSOGeoPolyline3D line = feature.Geometry as GSOGeoPolyline3D; + + if (features.Length == 0) return null; + if (features.Length == 1) + { + f = features[0]; + f.HighLight = true; + } + else + { + for (int m = 0; m < features.Length; m++) + { + GSOGeoPolyline3D tempSGLine = features[m].Geometry as GSOGeoPolyline3D; + + double tempLength = tempSGLine.GetSpaceLength(false, 6378137); + double lengthAbs = Math.Abs(tempLength - line.GetSpaceLength(false, 6378137)); + if (m == 0) + { + f = features[0]; + f.HighLight = true; + maxLength = lengthAbs; + } + else if (lengthAbs < maxLength) + { + f = features[m]; + f.HighLight = true; + maxLength = lengthAbs; + } + } + } + return f; + } + + private static bool isSameFeature(GSOFeature feature1, GSOFeature feature2, GSOLayer layer, double bufferWidth) + { + GSOGeoPolyline3D line = feature1.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = line.CreateBuffer(bufferWidth * 2, true, 5, true, false); + + if (bufferPolygon == null) return false; + + GSOFeatures featuresInLayer = layer.FindFeaturesInPolygon(bufferPolygon, true); + + if (featuresInLayer == null || featuresInLayer.Length <= 0) + return false; + + for (int i = 0; i < featuresInLayer.Length; i++) + { + if (featuresInLayer[i].Name == feature2.Name) + { + return true; + break; + } + } + return false; + } + + private static bool isSimilarFeature(GSOFeature srcFeature, GSOFeature dscFeature, + GSOGlobeControl globeControl1,GSOGlobeControl globeControl2,double bufferWidth) + { + GSOLayer dscLayer = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); + GSOLayer srcLayer = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); + + if (!isSameFeature(srcFeature, dscFeature, dscLayer, bufferWidth) + && !isSameFeature(dscFeature, srcFeature, srcLayer, bufferWidth)) + return false; + return true; + } + + public static void CalculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2, + out double horizonDistance, out double verticalDistance, GSOGlobeControl globeControl1, GSOGlobeControl globeControl2) + { + GSOPoint3d pntIntersect1 = new GSOPoint3d(); + GSOPoint3d pntIntersect2 = new GSOPoint3d(); + GSOPoint3d pntProIntersect1 = new GSOPoint3d(); + GSOPoint3d pntProIntersect2 = new GSOPoint3d(); + + verticalDistance = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, verticalDistance, true, "垂直", globeControl1, globeControl2); + + horizonDistance = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, horizonDistance, true, "水平", globeControl1, globeControl2); + + } + + private static GSOPoint3d LabelDistance(GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, + double distance, bool markerVisible, string label,GSOGlobeControl globeControl1,GSOGlobeControl globeControl2) + { + if (pntIntersect1 == null || pntIntersect2 == null) + return new GSOPoint3d(); + GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); + GSOPoint3ds point3ds = new GSOPoint3ds(); + point3ds.Add(pntIntersect1); + point3ds.Add(pntIntersect2); + disline.AddPart(point3ds); + + GSOGeoMarker dismarker = new GSOGeoMarker(); + GSOFeature marker = null; + GSOFeature line = null; + createLineStyle(out marker, out line, disline, pntIntersect1, pntIntersect2, distance, label, dismarker); + + line.Visible = marker.Visible = markerVisible; + globeControl1.Globe.MemoryLayer.AddFeature(line); + globeControl1.Globe.MemoryLayer.AddFeature(marker); + + globeControl2.Globe.MemoryLayer.AddFeature(line); + globeControl2.Globe.MemoryLayer.AddFeature(marker); + + return dismarker.Position; + } + + private static void createLineStyle(out GSOFeature marker, out GSOFeature line, GSOGeoPolyline3D disline, + GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) + { + GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 + style.LineColor = Color.Red; + style.LineWidth = 5; //设置线的宽度为5 + style.VertexVisible = true; //显示线的节点 + disline.Style = style; //把风格添加到线上 + disline.AltitudeMode = EnumAltitudeMode.Absolute; + line = new GSOFeature(); + line.Geometry = disline; + + dismarker.X = pntIntersect1.X; + dismarker.Y = pntIntersect1.Y; + dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; + dismarker.Text = label + distance.ToString("0.00") + "米"; + dismarker.AltitudeMode = EnumAltitudeMode.Absolute; + + GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); + GSOTextStyle styleText = new GSOTextStyle(); + styleText.IsSizeFixed = true; + styleText.ForeColor = Color.Red; + styleText.FontSize = 20; + styleMarker.TextStyle = styleText; + dismarker.Style = styleMarker; + + marker = new GSOFeature(); + marker.Geometry = dismarker; + } + + } +} diff --git a/Cyberpipe.csproj b/Cyberpipe.csproj index d8aa9c8..bcce54d 100644 --- a/Cyberpipe.csproj +++ b/Cyberpipe.csproj @@ -203,6 +203,7 @@ + @@ -1143,6 +1144,7 @@ SysRescInfoManager.cs + True True diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 123caf1..2c45db6 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -258,42 +258,25 @@ for (int i = 0; i < scLayer.GetAllFeatures().Length; i++) { GSOFeature scFeature = scLayer.GetAt(i); - if (scFeature.GetFieldAsString("所属道路") == road) + if (scFeature.GetFieldAsString("所属道路") != road) continue; + GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + + GSOFeature sgFeature = null; + GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); + + //**判断同一个Feature + if (sgFeatures.Length >= 1) { - GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); - GSOFeature sgFeature = null; - GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); - - //**判断同一个Feature - if (sgFeatures.Length >= 1) + if (sgFeature != null) { - sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); + GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; + double horizonDistance, verticalDistance; - if (sgFeature != null) - { - GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; - double horizonDistance, verticalDistance; - - CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); - GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); - } - else - { - scFeature.HighLight = true; - DataRow dr = dt.NewRow(); - dr[0] = scLayer.Caption; - dr[1] = scFeature.GetFieldAsString("编号"); - dr[2] = sgLayer.Caption; - dr[3] = "无"; - dr[4] = "无"; - dr[5] = "0.02"; - dr[6] = "无"; - dr[7] = "0.02"; - dr[8] = "未设计管段"; - dt.Rows.Add(dr); - } + CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); + GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); } else { @@ -311,6 +294,21 @@ dt.Rows.Add(dr); } } + else + { + scFeature.HighLight = true; + DataRow dr = dt.NewRow(); + dr[0] = scLayer.Caption; + dr[1] = scFeature.GetFieldAsString("编号"); + dr[2] = sgLayer.Caption; + dr[3] = "无"; + dr[4] = "无"; + dr[5] = "0.02"; + dr[6] = "无"; + dr[7] = "0.02"; + dr[8] = "未设计管段"; + dt.Rows.Add(dr); + } } } /// diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index 53946c0..fe32265 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -4,7 +4,7 @@ using GeoScene.Globe; namespace Cyberpipe -{ +{ //本类作用为:辅助GlobalControl上Feature的统计分析工具类 class FeatureStatisticsService { /// @@ -60,8 +60,8 @@ /// /// /// - /// - /// + /// + /// /// /// public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) @@ -74,6 +74,7 @@ for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; double length = line.GetSpaceLength(true, 6378137); totalLength += length; ncount += 1; @@ -114,7 +115,7 @@ for (int i = 0; i < feats.Length; i++) { double radius = feats[i].GetFieldAsDouble(fieldName); - if (radius >= min && radius <= max) + if (radius >= minValue && radius <= maxValue) { result.Add(feats[i]); } @@ -148,23 +149,22 @@ lstDiameter.Sort(); if (lstDiameter.Count > 0) { - for (int m = 0; m < lstDiameter.Count; m++) + foreach (float diameter in lstDiameter) { double totalLength = 0.00; int ncount = 0; for (int j = 0; j < feats.Length; j++) { - if (feats[j].GetFieldAsFloat("管径_毫米") == lstDiameter[m]) - { - GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } + if (Math.Abs(feats[j].GetFieldAsFloat("管径_毫米") - diameter) > 0.00001) continue; + GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = lstDiameter[m].ToString(); + featuresClass.groupFieldValue = diameter.ToString(); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -191,13 +191,13 @@ //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); - for (int j = 0; j < accessStrs.Length; j++) + foreach (string accssname in accessStrs) { - GSOFeatures feats = null; - int ncount = 0; + GSOFeatures feats; + int ncount; if (polygon == null) { - feats = flayer.GetFeatureByFieldValue("附属物名称", accessStrs[j], true); + feats = flayer.GetFeatureByFieldValue("附属物名称", accssname, true); ncount = feats.Length; } else @@ -207,14 +207,14 @@ //过滤 for (int n = 0; n < feats.Length; n++) { - if (feats[n].GetFieldAsString("附属物名称").Contains(accessStrs[j])) newfeats.Add(feats[n]); + if (feats[n].GetFieldAsString("附属物名称").Contains(accssname)) newfeats.Add(feats[n]); } ncount = newfeats.Length; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); - featuresClass.layerName = accessStrs[j]; + featuresClass.layerName = accssname; featuresClass.ncount = ncount; result.Add(featuresClass); @@ -303,6 +303,26 @@ if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); - } + } + + + /// + /// 获取globeControl上选中的管线,如果返回空则没有选中的管线 + /// + /// 地球引擎 + /// 返回一根线 + public static GSOFeature GetSelectedPipeline(GSOGlobeControl globeControl) + { + GSOFeature resFeature; + if (globeControl.Globe.SelObjectCount < 1) return null; + GSOLayer resLayer; + globeControl.Globe.GetSelectObject(0, out resFeature, out resLayer); + if (resFeature == null) return null; + + GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; + if (line1 == null) return null; + GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; + return pipeStyle1 == null ? null : resFeature; + } } } diff --git a/FrmCompareFeature.cs b/FrmCompareFeature.cs index a05e8e7..ac622c4 100644 --- a/FrmCompareFeature.cs +++ b/FrmCompareFeature.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Data; using System.Drawing; using System.Windows.Forms; @@ -11,26 +10,16 @@ { public partial class FrmCompareFeature : Office2007Form { - GSOFeature srcFeature; - GSOFeature dscFeature; - GSOGlobeControl globeControl1; - GSOGlobeControl globeControl2; - bool isSamePolyline; - - GSOLayer layerTemp; - GSOLayer layerTemp2; - GSOFeature new_feat; + private GSOFeature srcFeature, dscFeature; + private GSOGlobeControl globeControl1, globeControl2; GSOGeoPolygon3D resPolygon; - static FrmCompareFeature frm; - public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2, int width) + public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, int width) { if (frm == null) { - frm = new FrmCompareFeature(_globeControl1, _globeControl2, _layerTemp, _layerTemp2); - + frm = new FrmCompareFeature(_globeControl1, _globeControl2); frm.Location = new Point((width - frm.Width)/2, 50); frm.Show(_globeControl1.Parent); } @@ -41,8 +30,7 @@ } } - public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2) + public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2) { globeControl1 = _globeControl1; globeControl2 = _globeControl2; @@ -50,99 +38,35 @@ globeControl1.Globe.Action = EnumAction3D.SelectObject; globeControl2.Globe.Action = EnumAction3D.SelectObject; - layerTemp = _layerTemp; - layerTemp2 = _layerTemp2; globeControl1.MouseClick += globeControl1_MouseClick; globeControl2.MouseClick += globeControl2_MouseClick; } + private void invalParam() + { + if (srcFeature == null || dscFeature == null) + { + MessageBox.Show("请选择要对比的管段!", "提示"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) + { + MessageBox.Show("请选择同种类型图层!"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type || + srcFeature.Geometry.Type != EnumGeometryType.GeoPolyline3D) + return; + } + private void buttonAnalysis_Click(object sender, EventArgs e) { + invalParam(); + dataGridViewX1.DataSource = null; - - double bufferWidth = Convert.ToDouble(textBox1.Text); - - if (srcFeature == null || dscFeature == null) - MessageBox.Show("请选择要对比的管段!", "提示"); - else - { - if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) - MessageBox.Show("请选择同种类型图层!"); - else if (srcFeature.Geometry.Type == dscFeature.Geometry.Type && - srcFeature.Geometry.Type == EnumGeometryType.GeoPolyline3D) - { - lineLayerCompare(srcFeature, dscFeature, bufferWidth); - if (!isSamePolyline) - MessageBox.Show("实测管段与施工管段非同一条管段,请选择同一管段进行比较!", "提示"); - else - { - lineFeatureCompare(srcFeature, dscFeature); - globeControl1.Globe.Action = EnumAction3D.ActionNull; - globeControl2.Globe.Action = EnumAction3D.ActionNull; - } - } - else - MessageBox.Show("无法处理该类型图层!"); - } + lineFeatureCompare(srcFeature, dscFeature); } - - /// - /// 在容差范围内判断是否同一根管段 - /// - /// - /// - /// - /// - private bool lineLayerCompare(GSOFeature srcFeature, GSOFeature dscFeature, double bufferWidth) - { - isSamePolyline = false; - - GSOGeoPolyline3D srcLine = srcFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D srcBufferPolygon = srcLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer dsc = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); - - if (srcBufferPolygon != null) - { - GSOFeatures featuresInSrcLayer = dsc.FindFeaturesInPolygon(srcBufferPolygon, true); - - if (featuresInSrcLayer != null && featuresInSrcLayer.Length > 0) - { - for (int i = 0; i < featuresInSrcLayer.Length; i++) - { - if (featuresInSrcLayer[i].Name == dscFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D dscBufferPolygon = dscLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer src = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); - - if (dscBufferPolygon != null) - { - GSOFeatures featuresInDscLayer = src.FindFeaturesInPolygon(dscBufferPolygon, true); - - if (featuresInDscLayer != null && featuresInDscLayer.Length > 0) - { - for (int i = 0; i < featuresInDscLayer.Length; i++) - { - if (featuresInDscLayer[i].Name == srcFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - return isSamePolyline; - } - /// /// 分析两根管段的具体差异 /// @@ -156,8 +80,10 @@ GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; double dscLineLength = dscLine.GetSpaceLength(false, 6378137); - double horizonDistance = calculateDistance(srcLine, dscLine,false); - double verticalDistance = calculateDistance(srcLine, dscLine,true); + double horizonDistance, verticalDistance; + + ClassDoubleScreenCompare.CalculateDistance(srcLine, dscLine, out horizonDistance, + out verticalDistance,globeControl1,globeControl2); DataTable dt = new DataTable(); dt.Columns.Add("数据名称"); @@ -189,6 +115,98 @@ dt.Rows.Add(dscRow); dataGridViewX1.DataSource = dt; + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) + { + globeControl1.Globe.MemoryLayer.RemoveAllFeature(); + globeControl2.Globe.MemoryLayer.RemoveAllFeature(); + + GSOFeature new_feat = new GSOFeature(); + resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); + resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; + new_feat.Geometry = resPolygon; + + globeControl1.Globe.MemoryLayer.AddFeature(new_feat); + globeControl2.Globe.MemoryLayer.AddFeature(new_feat); + + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + public static void clearFeatureHighLight(GSOGlobeControl glb) + { + for (int i = 0; i < glb.Globe.Layers.Count; i++) + { + GSOLayer layer = glb.Globe.Layers[i]; + if (!(layer is GSOFeatureLayer)) continue; + GSOFeatures feats = layer.GetAllFeatures(); + for (int j = 0; j < feats.Length; j++) + { + feats[j].HighLight = false; + } + } + } + + void globeControl1_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl1.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl1.Globe.Action != EnumAction3D.SelectObject || + globeControl1.Globe.SelectedObject == null) + return; + GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + srcFeature = globeControl1.Globe.SelectedObject; + dscFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(srcFeature, + globeControl1,globeControl2,bufferWidth,resPolygon); + + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } + + void globeControl2_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl2.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl2.Globe.Action != EnumAction3D.SelectObject || + globeControl2.Globe.SelectedObject == null) + return; + + GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + dscFeature = globeControl2.Globe.SelectedObject; + srcFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(dscFeature, + globeControl1, globeControl2, bufferWidth, resPolygon); + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } private void FrmCompareFeature_FormClosing(object sender, FormClosingEventArgs e) @@ -198,322 +216,5 @@ frm = null; } - private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) - { - new_feat = new GSOFeature(); - resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); - resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; - new_feat.Geometry = resPolygon; - - layerTemp.AddFeature(new_feat); - layerTemp2.AddFeature(new_feat); - globeControl1.Refresh(); - globeControl2.Refresh(); - } - - private GSOLayer getSameLayer(GSOFeature feature) - { - GSOLayer layer = null; - if (!feature.Dataset.Caption.StartsWith("施工")) - { - layer = feature.Dataset.Caption == "供电管线" - ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") - : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); - } - else - { - layer = feature.Dataset.Caption == "施工电力管线" - ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") - : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); - } - - return layer; - } - - /// - /// 地球1中点击地球2中同步添加缓冲区 - /// - /// - /// - void globeControl1_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl1.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl1.Globe.Action == EnumAction3D.SelectObject && - globeControl1.Globe.SelectedObject != null) - { - GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - addPologyToGlobeControl(line, bufferWidth); - } - - srcFeature = globeControl1.Globe.SelectedObject; - GSOLayer layers = getSameLayer(srcFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = srcFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(srcFeature, features[i], Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - listFeatures.Add(features[i]); - } - calculate(out maxLength, out dscFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - /// - /// 地球2中点击地球1中同步添加缓冲区 - /// - /// - /// - void globeControl2_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl2.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl2.Globe.Action != EnumAction3D.SelectObject || - globeControl2.Globe.SelectedObject == null) - return; - else - { - GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - - addPologyToGlobeControl(line, bufferWidth); - } - - dscFeature = globeControl2.Globe.SelectedObject; - //双屏同时选中同一管段 - GSOLayer layers = getSameLayer(dscFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = dscFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(features[i], dscFeature, Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - { - listFeatures.Add(features[i]); - } - } - calculate(out maxLength, out srcFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - private void calculate(out double maxLength, out GSOFeature feature, GSOFeatures listFeatures, - GSOGeoPolyline3D scLine) - { - maxLength = 0; - feature=new GSOFeature(); - if (listFeatures.Length == 0) - feature = null; - else - { - if (listFeatures.Length == 1) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - } - else - { - for (int m = 0; m < listFeatures.Length; m++) - { - GSOGeoPolyline3D tempSGLine = listFeatures[m].Geometry as GSOGeoPolyline3D; - - double tempLength = tempSGLine.GetSpaceLength(false, 6378137); - double lengthAbs = Math.Abs(tempLength - scLine.GetSpaceLength(false, 6378137)); - if (m == 0) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - maxLength = lengthAbs; - } - else if (lengthAbs < maxLength) - { - feature = listFeatures[m]; - listFeatures[m].HighLight = true; - maxLength = lengthAbs; - } - } - } - } - } - - /// - /// 计算距离 - /// - /// - /// - /// - double calculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2,bool isVertical) - { - GSOPoint3d pntIntersect1 = new GSOPoint3d(); - GSOPoint3d pntIntersect2 = new GSOPoint3d(); - GSOPoint3d pntProIntersect1 = new GSOPoint3d(); - GSOPoint3d pntProIntersect2 = new GSOPoint3d(); - double dDist = 0; - if (isVertical) - { - dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "垂直"); - } - else - { - dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "水平"); - } - - return dDist; - } - - /// - /// 清除所有高亮Feature - /// - /// - private void clearFeatureHighLight(GSOGlobeControl glb1,GSOGlobeControl glb2) - { - layerTemp.RemoveAllFeature(); - layerTemp2.RemoveAllFeature(); - //清除gbl1中高亮 - for (int i = 0; i < glb1.Globe.Layers.Count; i++) - { - GSOLayer layer = glb1.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - //清除gbl2中高亮 - for (int i = 0; i < glb2.Globe.Layers.Count; i++) - { - GSOLayer layer = glb2.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - } - - /// - /// 添加标注 - /// - /// - /// - /// - /// - /// - /// - private GSOPoint3d LabelDistance(GSOLayer markerLayer, GSOLayer markerLayer2, - GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, bool markerVisible,string label) - { - if (pntIntersect1 == null || pntIntersect2 == null) - return new GSOPoint3d(); - GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); - GSOPoint3ds point3ds = new GSOPoint3ds(); - point3ds.Add(pntIntersect1); - point3ds.Add(pntIntersect2); - disline.AddPart(point3ds); - - GSOGeoMarker dismarker = new GSOGeoMarker(); - GSOFeature marker = null; - GSOFeature line = null; - createLineStyle(out marker, out line,disline, pntIntersect1, pntIntersect2, distance, label, dismarker); - - line.Visible = marker.Visible = markerVisible; - markerLayer.AddFeature(line); - markerLayer.AddFeature(marker); - - markerLayer2.AddFeature(line); - markerLayer2.AddFeature(marker); - - return dismarker.Position; - } - /// - /// 控制标注和字体的颜色 - /// - /// - /// - /// - /// - /// - /// - /// - /// - private void createLineStyle(out GSOFeature marker,out GSOFeature line,GSOGeoPolyline3D disline, - GSOPoint3d pntIntersect1,GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) - { - GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 - style.LineColor = Color.Red; - style.LineWidth = 5; //设置线的宽度为5 - style.VertexVisible = true; //显示线的节点 - disline.Style = style; //把风格添加到线上 - disline.AltitudeMode = EnumAltitudeMode.Absolute; - line=new GSOFeature(); - line.Geometry = disline; - - dismarker.X = pntIntersect1.X; - dismarker.Y = pntIntersect1.Y; - dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; - dismarker.Text = label + distance.ToString("0.00") + "米"; - dismarker.AltitudeMode = EnumAltitudeMode.Absolute; - - GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); - GSOTextStyle styleText = new GSOTextStyle(); - styleText.IsSizeFixed = true; - styleText.ForeColor = Color.Red; - styleText.FontSize = 20; - styleMarker.TextStyle = styleText; - dismarker.Style = styleMarker; - - marker=new GSOFeature(); - marker.Geometry = dismarker; - } - } } diff --git a/ClassDoubleScreenCompare.cs b/ClassDoubleScreenCompare.cs new file mode 100644 index 0000000..f2935da --- /dev/null +++ b/ClassDoubleScreenCompare.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using GeoScene.Globe; +using GeoScene.Data; +using GeoScene.Engine; +using System.Drawing; + +namespace Cyberpipe +{ + class ClassDoubleScreenCompare + { + public static GSOFeature getSameFeatureFromOtherGlobe(GSOFeature feature, + GSOGlobeControl globeControl1, GSOGlobeControl globeControl2,double bufferWidth,GSOGeoPolygon3D resPolygon) + { + GSOLayer layer; + GSOFeatures features = new GSOFeatures(); + + if (!feature.Dataset.Caption.StartsWith("施工")) + { + layer = feature.Dataset.Caption == "供电管线" + ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") + : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(feature, fs[i], globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + else + { + layer = feature.Dataset.Caption == "施工电力管线" + ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") + : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(fs[i], feature, globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + + return getMostSimilarFeatureFromFeatures(feature, features); + + } + + + private static GSOFeature getMostSimilarFeatureFromFeatures(GSOFeature feature, GSOFeatures features) + { + double maxLength = 0; + GSOFeature f = new GSOFeature(); + GSOGeoPolyline3D line = feature.Geometry as GSOGeoPolyline3D; + + if (features.Length == 0) return null; + if (features.Length == 1) + { + f = features[0]; + f.HighLight = true; + } + else + { + for (int m = 0; m < features.Length; m++) + { + GSOGeoPolyline3D tempSGLine = features[m].Geometry as GSOGeoPolyline3D; + + double tempLength = tempSGLine.GetSpaceLength(false, 6378137); + double lengthAbs = Math.Abs(tempLength - line.GetSpaceLength(false, 6378137)); + if (m == 0) + { + f = features[0]; + f.HighLight = true; + maxLength = lengthAbs; + } + else if (lengthAbs < maxLength) + { + f = features[m]; + f.HighLight = true; + maxLength = lengthAbs; + } + } + } + return f; + } + + private static bool isSameFeature(GSOFeature feature1, GSOFeature feature2, GSOLayer layer, double bufferWidth) + { + GSOGeoPolyline3D line = feature1.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = line.CreateBuffer(bufferWidth * 2, true, 5, true, false); + + if (bufferPolygon == null) return false; + + GSOFeatures featuresInLayer = layer.FindFeaturesInPolygon(bufferPolygon, true); + + if (featuresInLayer == null || featuresInLayer.Length <= 0) + return false; + + for (int i = 0; i < featuresInLayer.Length; i++) + { + if (featuresInLayer[i].Name == feature2.Name) + { + return true; + break; + } + } + return false; + } + + private static bool isSimilarFeature(GSOFeature srcFeature, GSOFeature dscFeature, + GSOGlobeControl globeControl1,GSOGlobeControl globeControl2,double bufferWidth) + { + GSOLayer dscLayer = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); + GSOLayer srcLayer = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); + + if (!isSameFeature(srcFeature, dscFeature, dscLayer, bufferWidth) + && !isSameFeature(dscFeature, srcFeature, srcLayer, bufferWidth)) + return false; + return true; + } + + public static void CalculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2, + out double horizonDistance, out double verticalDistance, GSOGlobeControl globeControl1, GSOGlobeControl globeControl2) + { + GSOPoint3d pntIntersect1 = new GSOPoint3d(); + GSOPoint3d pntIntersect2 = new GSOPoint3d(); + GSOPoint3d pntProIntersect1 = new GSOPoint3d(); + GSOPoint3d pntProIntersect2 = new GSOPoint3d(); + + verticalDistance = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, verticalDistance, true, "垂直", globeControl1, globeControl2); + + horizonDistance = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, horizonDistance, true, "水平", globeControl1, globeControl2); + + } + + private static GSOPoint3d LabelDistance(GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, + double distance, bool markerVisible, string label,GSOGlobeControl globeControl1,GSOGlobeControl globeControl2) + { + if (pntIntersect1 == null || pntIntersect2 == null) + return new GSOPoint3d(); + GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); + GSOPoint3ds point3ds = new GSOPoint3ds(); + point3ds.Add(pntIntersect1); + point3ds.Add(pntIntersect2); + disline.AddPart(point3ds); + + GSOGeoMarker dismarker = new GSOGeoMarker(); + GSOFeature marker = null; + GSOFeature line = null; + createLineStyle(out marker, out line, disline, pntIntersect1, pntIntersect2, distance, label, dismarker); + + line.Visible = marker.Visible = markerVisible; + globeControl1.Globe.MemoryLayer.AddFeature(line); + globeControl1.Globe.MemoryLayer.AddFeature(marker); + + globeControl2.Globe.MemoryLayer.AddFeature(line); + globeControl2.Globe.MemoryLayer.AddFeature(marker); + + return dismarker.Position; + } + + private static void createLineStyle(out GSOFeature marker, out GSOFeature line, GSOGeoPolyline3D disline, + GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) + { + GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 + style.LineColor = Color.Red; + style.LineWidth = 5; //设置线的宽度为5 + style.VertexVisible = true; //显示线的节点 + disline.Style = style; //把风格添加到线上 + disline.AltitudeMode = EnumAltitudeMode.Absolute; + line = new GSOFeature(); + line.Geometry = disline; + + dismarker.X = pntIntersect1.X; + dismarker.Y = pntIntersect1.Y; + dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; + dismarker.Text = label + distance.ToString("0.00") + "米"; + dismarker.AltitudeMode = EnumAltitudeMode.Absolute; + + GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); + GSOTextStyle styleText = new GSOTextStyle(); + styleText.IsSizeFixed = true; + styleText.ForeColor = Color.Red; + styleText.FontSize = 20; + styleMarker.TextStyle = styleText; + dismarker.Style = styleMarker; + + marker = new GSOFeature(); + marker.Geometry = dismarker; + } + + } +} diff --git a/Cyberpipe.csproj b/Cyberpipe.csproj index d8aa9c8..bcce54d 100644 --- a/Cyberpipe.csproj +++ b/Cyberpipe.csproj @@ -203,6 +203,7 @@ + @@ -1143,6 +1144,7 @@ SysRescInfoManager.cs + True True diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 123caf1..2c45db6 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -258,42 +258,25 @@ for (int i = 0; i < scLayer.GetAllFeatures().Length; i++) { GSOFeature scFeature = scLayer.GetAt(i); - if (scFeature.GetFieldAsString("所属道路") == road) + if (scFeature.GetFieldAsString("所属道路") != road) continue; + GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + + GSOFeature sgFeature = null; + GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); + + //**判断同一个Feature + if (sgFeatures.Length >= 1) { - GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); - GSOFeature sgFeature = null; - GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); - - //**判断同一个Feature - if (sgFeatures.Length >= 1) + if (sgFeature != null) { - sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); + GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; + double horizonDistance, verticalDistance; - if (sgFeature != null) - { - GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; - double horizonDistance, verticalDistance; - - CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); - GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); - } - else - { - scFeature.HighLight = true; - DataRow dr = dt.NewRow(); - dr[0] = scLayer.Caption; - dr[1] = scFeature.GetFieldAsString("编号"); - dr[2] = sgLayer.Caption; - dr[3] = "无"; - dr[4] = "无"; - dr[5] = "0.02"; - dr[6] = "无"; - dr[7] = "0.02"; - dr[8] = "未设计管段"; - dt.Rows.Add(dr); - } + CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); + GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); } else { @@ -311,6 +294,21 @@ dt.Rows.Add(dr); } } + else + { + scFeature.HighLight = true; + DataRow dr = dt.NewRow(); + dr[0] = scLayer.Caption; + dr[1] = scFeature.GetFieldAsString("编号"); + dr[2] = sgLayer.Caption; + dr[3] = "无"; + dr[4] = "无"; + dr[5] = "0.02"; + dr[6] = "无"; + dr[7] = "0.02"; + dr[8] = "未设计管段"; + dt.Rows.Add(dr); + } } } /// diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index 53946c0..fe32265 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -4,7 +4,7 @@ using GeoScene.Globe; namespace Cyberpipe -{ +{ //本类作用为:辅助GlobalControl上Feature的统计分析工具类 class FeatureStatisticsService { /// @@ -60,8 +60,8 @@ /// /// /// - /// - /// + /// + /// /// /// public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) @@ -74,6 +74,7 @@ for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; double length = line.GetSpaceLength(true, 6378137); totalLength += length; ncount += 1; @@ -114,7 +115,7 @@ for (int i = 0; i < feats.Length; i++) { double radius = feats[i].GetFieldAsDouble(fieldName); - if (radius >= min && radius <= max) + if (radius >= minValue && radius <= maxValue) { result.Add(feats[i]); } @@ -148,23 +149,22 @@ lstDiameter.Sort(); if (lstDiameter.Count > 0) { - for (int m = 0; m < lstDiameter.Count; m++) + foreach (float diameter in lstDiameter) { double totalLength = 0.00; int ncount = 0; for (int j = 0; j < feats.Length; j++) { - if (feats[j].GetFieldAsFloat("管径_毫米") == lstDiameter[m]) - { - GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } + if (Math.Abs(feats[j].GetFieldAsFloat("管径_毫米") - diameter) > 0.00001) continue; + GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = lstDiameter[m].ToString(); + featuresClass.groupFieldValue = diameter.ToString(); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -191,13 +191,13 @@ //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); - for (int j = 0; j < accessStrs.Length; j++) + foreach (string accssname in accessStrs) { - GSOFeatures feats = null; - int ncount = 0; + GSOFeatures feats; + int ncount; if (polygon == null) { - feats = flayer.GetFeatureByFieldValue("附属物名称", accessStrs[j], true); + feats = flayer.GetFeatureByFieldValue("附属物名称", accssname, true); ncount = feats.Length; } else @@ -207,14 +207,14 @@ //过滤 for (int n = 0; n < feats.Length; n++) { - if (feats[n].GetFieldAsString("附属物名称").Contains(accessStrs[j])) newfeats.Add(feats[n]); + if (feats[n].GetFieldAsString("附属物名称").Contains(accssname)) newfeats.Add(feats[n]); } ncount = newfeats.Length; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); - featuresClass.layerName = accessStrs[j]; + featuresClass.layerName = accssname; featuresClass.ncount = ncount; result.Add(featuresClass); @@ -303,6 +303,26 @@ if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); - } + } + + + /// + /// 获取globeControl上选中的管线,如果返回空则没有选中的管线 + /// + /// 地球引擎 + /// 返回一根线 + public static GSOFeature GetSelectedPipeline(GSOGlobeControl globeControl) + { + GSOFeature resFeature; + if (globeControl.Globe.SelObjectCount < 1) return null; + GSOLayer resLayer; + globeControl.Globe.GetSelectObject(0, out resFeature, out resLayer); + if (resFeature == null) return null; + + GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; + if (line1 == null) return null; + GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; + return pipeStyle1 == null ? null : resFeature; + } } } diff --git a/FrmCompareFeature.cs b/FrmCompareFeature.cs index a05e8e7..ac622c4 100644 --- a/FrmCompareFeature.cs +++ b/FrmCompareFeature.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Data; using System.Drawing; using System.Windows.Forms; @@ -11,26 +10,16 @@ { public partial class FrmCompareFeature : Office2007Form { - GSOFeature srcFeature; - GSOFeature dscFeature; - GSOGlobeControl globeControl1; - GSOGlobeControl globeControl2; - bool isSamePolyline; - - GSOLayer layerTemp; - GSOLayer layerTemp2; - GSOFeature new_feat; + private GSOFeature srcFeature, dscFeature; + private GSOGlobeControl globeControl1, globeControl2; GSOGeoPolygon3D resPolygon; - static FrmCompareFeature frm; - public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2, int width) + public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, int width) { if (frm == null) { - frm = new FrmCompareFeature(_globeControl1, _globeControl2, _layerTemp, _layerTemp2); - + frm = new FrmCompareFeature(_globeControl1, _globeControl2); frm.Location = new Point((width - frm.Width)/2, 50); frm.Show(_globeControl1.Parent); } @@ -41,8 +30,7 @@ } } - public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2) + public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2) { globeControl1 = _globeControl1; globeControl2 = _globeControl2; @@ -50,99 +38,35 @@ globeControl1.Globe.Action = EnumAction3D.SelectObject; globeControl2.Globe.Action = EnumAction3D.SelectObject; - layerTemp = _layerTemp; - layerTemp2 = _layerTemp2; globeControl1.MouseClick += globeControl1_MouseClick; globeControl2.MouseClick += globeControl2_MouseClick; } + private void invalParam() + { + if (srcFeature == null || dscFeature == null) + { + MessageBox.Show("请选择要对比的管段!", "提示"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) + { + MessageBox.Show("请选择同种类型图层!"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type || + srcFeature.Geometry.Type != EnumGeometryType.GeoPolyline3D) + return; + } + private void buttonAnalysis_Click(object sender, EventArgs e) { + invalParam(); + dataGridViewX1.DataSource = null; - - double bufferWidth = Convert.ToDouble(textBox1.Text); - - if (srcFeature == null || dscFeature == null) - MessageBox.Show("请选择要对比的管段!", "提示"); - else - { - if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) - MessageBox.Show("请选择同种类型图层!"); - else if (srcFeature.Geometry.Type == dscFeature.Geometry.Type && - srcFeature.Geometry.Type == EnumGeometryType.GeoPolyline3D) - { - lineLayerCompare(srcFeature, dscFeature, bufferWidth); - if (!isSamePolyline) - MessageBox.Show("实测管段与施工管段非同一条管段,请选择同一管段进行比较!", "提示"); - else - { - lineFeatureCompare(srcFeature, dscFeature); - globeControl1.Globe.Action = EnumAction3D.ActionNull; - globeControl2.Globe.Action = EnumAction3D.ActionNull; - } - } - else - MessageBox.Show("无法处理该类型图层!"); - } + lineFeatureCompare(srcFeature, dscFeature); } - - /// - /// 在容差范围内判断是否同一根管段 - /// - /// - /// - /// - /// - private bool lineLayerCompare(GSOFeature srcFeature, GSOFeature dscFeature, double bufferWidth) - { - isSamePolyline = false; - - GSOGeoPolyline3D srcLine = srcFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D srcBufferPolygon = srcLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer dsc = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); - - if (srcBufferPolygon != null) - { - GSOFeatures featuresInSrcLayer = dsc.FindFeaturesInPolygon(srcBufferPolygon, true); - - if (featuresInSrcLayer != null && featuresInSrcLayer.Length > 0) - { - for (int i = 0; i < featuresInSrcLayer.Length; i++) - { - if (featuresInSrcLayer[i].Name == dscFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D dscBufferPolygon = dscLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer src = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); - - if (dscBufferPolygon != null) - { - GSOFeatures featuresInDscLayer = src.FindFeaturesInPolygon(dscBufferPolygon, true); - - if (featuresInDscLayer != null && featuresInDscLayer.Length > 0) - { - for (int i = 0; i < featuresInDscLayer.Length; i++) - { - if (featuresInDscLayer[i].Name == srcFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - return isSamePolyline; - } - /// /// 分析两根管段的具体差异 /// @@ -156,8 +80,10 @@ GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; double dscLineLength = dscLine.GetSpaceLength(false, 6378137); - double horizonDistance = calculateDistance(srcLine, dscLine,false); - double verticalDistance = calculateDistance(srcLine, dscLine,true); + double horizonDistance, verticalDistance; + + ClassDoubleScreenCompare.CalculateDistance(srcLine, dscLine, out horizonDistance, + out verticalDistance,globeControl1,globeControl2); DataTable dt = new DataTable(); dt.Columns.Add("数据名称"); @@ -189,6 +115,98 @@ dt.Rows.Add(dscRow); dataGridViewX1.DataSource = dt; + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) + { + globeControl1.Globe.MemoryLayer.RemoveAllFeature(); + globeControl2.Globe.MemoryLayer.RemoveAllFeature(); + + GSOFeature new_feat = new GSOFeature(); + resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); + resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; + new_feat.Geometry = resPolygon; + + globeControl1.Globe.MemoryLayer.AddFeature(new_feat); + globeControl2.Globe.MemoryLayer.AddFeature(new_feat); + + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + public static void clearFeatureHighLight(GSOGlobeControl glb) + { + for (int i = 0; i < glb.Globe.Layers.Count; i++) + { + GSOLayer layer = glb.Globe.Layers[i]; + if (!(layer is GSOFeatureLayer)) continue; + GSOFeatures feats = layer.GetAllFeatures(); + for (int j = 0; j < feats.Length; j++) + { + feats[j].HighLight = false; + } + } + } + + void globeControl1_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl1.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl1.Globe.Action != EnumAction3D.SelectObject || + globeControl1.Globe.SelectedObject == null) + return; + GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + srcFeature = globeControl1.Globe.SelectedObject; + dscFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(srcFeature, + globeControl1,globeControl2,bufferWidth,resPolygon); + + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } + + void globeControl2_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl2.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl2.Globe.Action != EnumAction3D.SelectObject || + globeControl2.Globe.SelectedObject == null) + return; + + GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + dscFeature = globeControl2.Globe.SelectedObject; + srcFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(dscFeature, + globeControl1, globeControl2, bufferWidth, resPolygon); + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } private void FrmCompareFeature_FormClosing(object sender, FormClosingEventArgs e) @@ -198,322 +216,5 @@ frm = null; } - private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) - { - new_feat = new GSOFeature(); - resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); - resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; - new_feat.Geometry = resPolygon; - - layerTemp.AddFeature(new_feat); - layerTemp2.AddFeature(new_feat); - globeControl1.Refresh(); - globeControl2.Refresh(); - } - - private GSOLayer getSameLayer(GSOFeature feature) - { - GSOLayer layer = null; - if (!feature.Dataset.Caption.StartsWith("施工")) - { - layer = feature.Dataset.Caption == "供电管线" - ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") - : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); - } - else - { - layer = feature.Dataset.Caption == "施工电力管线" - ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") - : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); - } - - return layer; - } - - /// - /// 地球1中点击地球2中同步添加缓冲区 - /// - /// - /// - void globeControl1_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl1.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl1.Globe.Action == EnumAction3D.SelectObject && - globeControl1.Globe.SelectedObject != null) - { - GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - addPologyToGlobeControl(line, bufferWidth); - } - - srcFeature = globeControl1.Globe.SelectedObject; - GSOLayer layers = getSameLayer(srcFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = srcFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(srcFeature, features[i], Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - listFeatures.Add(features[i]); - } - calculate(out maxLength, out dscFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - /// - /// 地球2中点击地球1中同步添加缓冲区 - /// - /// - /// - void globeControl2_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl2.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl2.Globe.Action != EnumAction3D.SelectObject || - globeControl2.Globe.SelectedObject == null) - return; - else - { - GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - - addPologyToGlobeControl(line, bufferWidth); - } - - dscFeature = globeControl2.Globe.SelectedObject; - //双屏同时选中同一管段 - GSOLayer layers = getSameLayer(dscFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = dscFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(features[i], dscFeature, Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - { - listFeatures.Add(features[i]); - } - } - calculate(out maxLength, out srcFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - private void calculate(out double maxLength, out GSOFeature feature, GSOFeatures listFeatures, - GSOGeoPolyline3D scLine) - { - maxLength = 0; - feature=new GSOFeature(); - if (listFeatures.Length == 0) - feature = null; - else - { - if (listFeatures.Length == 1) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - } - else - { - for (int m = 0; m < listFeatures.Length; m++) - { - GSOGeoPolyline3D tempSGLine = listFeatures[m].Geometry as GSOGeoPolyline3D; - - double tempLength = tempSGLine.GetSpaceLength(false, 6378137); - double lengthAbs = Math.Abs(tempLength - scLine.GetSpaceLength(false, 6378137)); - if (m == 0) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - maxLength = lengthAbs; - } - else if (lengthAbs < maxLength) - { - feature = listFeatures[m]; - listFeatures[m].HighLight = true; - maxLength = lengthAbs; - } - } - } - } - } - - /// - /// 计算距离 - /// - /// - /// - /// - double calculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2,bool isVertical) - { - GSOPoint3d pntIntersect1 = new GSOPoint3d(); - GSOPoint3d pntIntersect2 = new GSOPoint3d(); - GSOPoint3d pntProIntersect1 = new GSOPoint3d(); - GSOPoint3d pntProIntersect2 = new GSOPoint3d(); - double dDist = 0; - if (isVertical) - { - dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "垂直"); - } - else - { - dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "水平"); - } - - return dDist; - } - - /// - /// 清除所有高亮Feature - /// - /// - private void clearFeatureHighLight(GSOGlobeControl glb1,GSOGlobeControl glb2) - { - layerTemp.RemoveAllFeature(); - layerTemp2.RemoveAllFeature(); - //清除gbl1中高亮 - for (int i = 0; i < glb1.Globe.Layers.Count; i++) - { - GSOLayer layer = glb1.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - //清除gbl2中高亮 - for (int i = 0; i < glb2.Globe.Layers.Count; i++) - { - GSOLayer layer = glb2.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - } - - /// - /// 添加标注 - /// - /// - /// - /// - /// - /// - /// - private GSOPoint3d LabelDistance(GSOLayer markerLayer, GSOLayer markerLayer2, - GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, bool markerVisible,string label) - { - if (pntIntersect1 == null || pntIntersect2 == null) - return new GSOPoint3d(); - GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); - GSOPoint3ds point3ds = new GSOPoint3ds(); - point3ds.Add(pntIntersect1); - point3ds.Add(pntIntersect2); - disline.AddPart(point3ds); - - GSOGeoMarker dismarker = new GSOGeoMarker(); - GSOFeature marker = null; - GSOFeature line = null; - createLineStyle(out marker, out line,disline, pntIntersect1, pntIntersect2, distance, label, dismarker); - - line.Visible = marker.Visible = markerVisible; - markerLayer.AddFeature(line); - markerLayer.AddFeature(marker); - - markerLayer2.AddFeature(line); - markerLayer2.AddFeature(marker); - - return dismarker.Position; - } - /// - /// 控制标注和字体的颜色 - /// - /// - /// - /// - /// - /// - /// - /// - /// - private void createLineStyle(out GSOFeature marker,out GSOFeature line,GSOGeoPolyline3D disline, - GSOPoint3d pntIntersect1,GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) - { - GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 - style.LineColor = Color.Red; - style.LineWidth = 5; //设置线的宽度为5 - style.VertexVisible = true; //显示线的节点 - disline.Style = style; //把风格添加到线上 - disline.AltitudeMode = EnumAltitudeMode.Absolute; - line=new GSOFeature(); - line.Geometry = disline; - - dismarker.X = pntIntersect1.X; - dismarker.Y = pntIntersect1.Y; - dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; - dismarker.Text = label + distance.ToString("0.00") + "米"; - dismarker.AltitudeMode = EnumAltitudeMode.Absolute; - - GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); - GSOTextStyle styleText = new GSOTextStyle(); - styleText.IsSizeFixed = true; - styleText.ForeColor = Color.Red; - styleText.FontSize = 20; - styleMarker.TextStyle = styleText; - dismarker.Style = styleMarker; - - marker=new GSOFeature(); - marker.Geometry = dismarker; - } - } } diff --git a/FrmHotFuncStat.cs b/FrmHotFuncStat.cs index 84131ef..f313b20 100644 --- a/FrmHotFuncStat.cs +++ b/FrmHotFuncStat.cs @@ -58,14 +58,11 @@ DataTable table = OledbHelper.QueryTable(sql); - if (table != null) + if (table == null) return; + for (int i = 0; i < table.Rows.Count; i++) { - for (int i = 0; i < table.Rows.Count; i++) - { - userLists.Items.Add(table.Rows[i][0].ToString()); - } + userLists.Items.Add(table.Rows[i][0].ToString()); } - } //统计结果 private void statBtn_Click(object sender, EventArgs e) diff --git a/ClassDoubleScreenCompare.cs b/ClassDoubleScreenCompare.cs new file mode 100644 index 0000000..f2935da --- /dev/null +++ b/ClassDoubleScreenCompare.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using GeoScene.Globe; +using GeoScene.Data; +using GeoScene.Engine; +using System.Drawing; + +namespace Cyberpipe +{ + class ClassDoubleScreenCompare + { + public static GSOFeature getSameFeatureFromOtherGlobe(GSOFeature feature, + GSOGlobeControl globeControl1, GSOGlobeControl globeControl2,double bufferWidth,GSOGeoPolygon3D resPolygon) + { + GSOLayer layer; + GSOFeatures features = new GSOFeatures(); + + if (!feature.Dataset.Caption.StartsWith("施工")) + { + layer = feature.Dataset.Caption == "供电管线" + ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") + : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(feature, fs[i], globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + else + { + layer = feature.Dataset.Caption == "施工电力管线" + ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") + : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(fs[i], feature, globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + + return getMostSimilarFeatureFromFeatures(feature, features); + + } + + + private static GSOFeature getMostSimilarFeatureFromFeatures(GSOFeature feature, GSOFeatures features) + { + double maxLength = 0; + GSOFeature f = new GSOFeature(); + GSOGeoPolyline3D line = feature.Geometry as GSOGeoPolyline3D; + + if (features.Length == 0) return null; + if (features.Length == 1) + { + f = features[0]; + f.HighLight = true; + } + else + { + for (int m = 0; m < features.Length; m++) + { + GSOGeoPolyline3D tempSGLine = features[m].Geometry as GSOGeoPolyline3D; + + double tempLength = tempSGLine.GetSpaceLength(false, 6378137); + double lengthAbs = Math.Abs(tempLength - line.GetSpaceLength(false, 6378137)); + if (m == 0) + { + f = features[0]; + f.HighLight = true; + maxLength = lengthAbs; + } + else if (lengthAbs < maxLength) + { + f = features[m]; + f.HighLight = true; + maxLength = lengthAbs; + } + } + } + return f; + } + + private static bool isSameFeature(GSOFeature feature1, GSOFeature feature2, GSOLayer layer, double bufferWidth) + { + GSOGeoPolyline3D line = feature1.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = line.CreateBuffer(bufferWidth * 2, true, 5, true, false); + + if (bufferPolygon == null) return false; + + GSOFeatures featuresInLayer = layer.FindFeaturesInPolygon(bufferPolygon, true); + + if (featuresInLayer == null || featuresInLayer.Length <= 0) + return false; + + for (int i = 0; i < featuresInLayer.Length; i++) + { + if (featuresInLayer[i].Name == feature2.Name) + { + return true; + break; + } + } + return false; + } + + private static bool isSimilarFeature(GSOFeature srcFeature, GSOFeature dscFeature, + GSOGlobeControl globeControl1,GSOGlobeControl globeControl2,double bufferWidth) + { + GSOLayer dscLayer = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); + GSOLayer srcLayer = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); + + if (!isSameFeature(srcFeature, dscFeature, dscLayer, bufferWidth) + && !isSameFeature(dscFeature, srcFeature, srcLayer, bufferWidth)) + return false; + return true; + } + + public static void CalculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2, + out double horizonDistance, out double verticalDistance, GSOGlobeControl globeControl1, GSOGlobeControl globeControl2) + { + GSOPoint3d pntIntersect1 = new GSOPoint3d(); + GSOPoint3d pntIntersect2 = new GSOPoint3d(); + GSOPoint3d pntProIntersect1 = new GSOPoint3d(); + GSOPoint3d pntProIntersect2 = new GSOPoint3d(); + + verticalDistance = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, verticalDistance, true, "垂直", globeControl1, globeControl2); + + horizonDistance = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, horizonDistance, true, "水平", globeControl1, globeControl2); + + } + + private static GSOPoint3d LabelDistance(GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, + double distance, bool markerVisible, string label,GSOGlobeControl globeControl1,GSOGlobeControl globeControl2) + { + if (pntIntersect1 == null || pntIntersect2 == null) + return new GSOPoint3d(); + GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); + GSOPoint3ds point3ds = new GSOPoint3ds(); + point3ds.Add(pntIntersect1); + point3ds.Add(pntIntersect2); + disline.AddPart(point3ds); + + GSOGeoMarker dismarker = new GSOGeoMarker(); + GSOFeature marker = null; + GSOFeature line = null; + createLineStyle(out marker, out line, disline, pntIntersect1, pntIntersect2, distance, label, dismarker); + + line.Visible = marker.Visible = markerVisible; + globeControl1.Globe.MemoryLayer.AddFeature(line); + globeControl1.Globe.MemoryLayer.AddFeature(marker); + + globeControl2.Globe.MemoryLayer.AddFeature(line); + globeControl2.Globe.MemoryLayer.AddFeature(marker); + + return dismarker.Position; + } + + private static void createLineStyle(out GSOFeature marker, out GSOFeature line, GSOGeoPolyline3D disline, + GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) + { + GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 + style.LineColor = Color.Red; + style.LineWidth = 5; //设置线的宽度为5 + style.VertexVisible = true; //显示线的节点 + disline.Style = style; //把风格添加到线上 + disline.AltitudeMode = EnumAltitudeMode.Absolute; + line = new GSOFeature(); + line.Geometry = disline; + + dismarker.X = pntIntersect1.X; + dismarker.Y = pntIntersect1.Y; + dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; + dismarker.Text = label + distance.ToString("0.00") + "米"; + dismarker.AltitudeMode = EnumAltitudeMode.Absolute; + + GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); + GSOTextStyle styleText = new GSOTextStyle(); + styleText.IsSizeFixed = true; + styleText.ForeColor = Color.Red; + styleText.FontSize = 20; + styleMarker.TextStyle = styleText; + dismarker.Style = styleMarker; + + marker = new GSOFeature(); + marker.Geometry = dismarker; + } + + } +} diff --git a/Cyberpipe.csproj b/Cyberpipe.csproj index d8aa9c8..bcce54d 100644 --- a/Cyberpipe.csproj +++ b/Cyberpipe.csproj @@ -203,6 +203,7 @@ + @@ -1143,6 +1144,7 @@ SysRescInfoManager.cs + True True diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 123caf1..2c45db6 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -258,42 +258,25 @@ for (int i = 0; i < scLayer.GetAllFeatures().Length; i++) { GSOFeature scFeature = scLayer.GetAt(i); - if (scFeature.GetFieldAsString("所属道路") == road) + if (scFeature.GetFieldAsString("所属道路") != road) continue; + GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + + GSOFeature sgFeature = null; + GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); + + //**判断同一个Feature + if (sgFeatures.Length >= 1) { - GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); - GSOFeature sgFeature = null; - GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); - - //**判断同一个Feature - if (sgFeatures.Length >= 1) + if (sgFeature != null) { - sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); + GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; + double horizonDistance, verticalDistance; - if (sgFeature != null) - { - GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; - double horizonDistance, verticalDistance; - - CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); - GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); - } - else - { - scFeature.HighLight = true; - DataRow dr = dt.NewRow(); - dr[0] = scLayer.Caption; - dr[1] = scFeature.GetFieldAsString("编号"); - dr[2] = sgLayer.Caption; - dr[3] = "无"; - dr[4] = "无"; - dr[5] = "0.02"; - dr[6] = "无"; - dr[7] = "0.02"; - dr[8] = "未设计管段"; - dt.Rows.Add(dr); - } + CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); + GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); } else { @@ -311,6 +294,21 @@ dt.Rows.Add(dr); } } + else + { + scFeature.HighLight = true; + DataRow dr = dt.NewRow(); + dr[0] = scLayer.Caption; + dr[1] = scFeature.GetFieldAsString("编号"); + dr[2] = sgLayer.Caption; + dr[3] = "无"; + dr[4] = "无"; + dr[5] = "0.02"; + dr[6] = "无"; + dr[7] = "0.02"; + dr[8] = "未设计管段"; + dt.Rows.Add(dr); + } } } /// diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index 53946c0..fe32265 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -4,7 +4,7 @@ using GeoScene.Globe; namespace Cyberpipe -{ +{ //本类作用为:辅助GlobalControl上Feature的统计分析工具类 class FeatureStatisticsService { /// @@ -60,8 +60,8 @@ /// /// /// - /// - /// + /// + /// /// /// public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) @@ -74,6 +74,7 @@ for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; double length = line.GetSpaceLength(true, 6378137); totalLength += length; ncount += 1; @@ -114,7 +115,7 @@ for (int i = 0; i < feats.Length; i++) { double radius = feats[i].GetFieldAsDouble(fieldName); - if (radius >= min && radius <= max) + if (radius >= minValue && radius <= maxValue) { result.Add(feats[i]); } @@ -148,23 +149,22 @@ lstDiameter.Sort(); if (lstDiameter.Count > 0) { - for (int m = 0; m < lstDiameter.Count; m++) + foreach (float diameter in lstDiameter) { double totalLength = 0.00; int ncount = 0; for (int j = 0; j < feats.Length; j++) { - if (feats[j].GetFieldAsFloat("管径_毫米") == lstDiameter[m]) - { - GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } + if (Math.Abs(feats[j].GetFieldAsFloat("管径_毫米") - diameter) > 0.00001) continue; + GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = lstDiameter[m].ToString(); + featuresClass.groupFieldValue = diameter.ToString(); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -191,13 +191,13 @@ //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); - for (int j = 0; j < accessStrs.Length; j++) + foreach (string accssname in accessStrs) { - GSOFeatures feats = null; - int ncount = 0; + GSOFeatures feats; + int ncount; if (polygon == null) { - feats = flayer.GetFeatureByFieldValue("附属物名称", accessStrs[j], true); + feats = flayer.GetFeatureByFieldValue("附属物名称", accssname, true); ncount = feats.Length; } else @@ -207,14 +207,14 @@ //过滤 for (int n = 0; n < feats.Length; n++) { - if (feats[n].GetFieldAsString("附属物名称").Contains(accessStrs[j])) newfeats.Add(feats[n]); + if (feats[n].GetFieldAsString("附属物名称").Contains(accssname)) newfeats.Add(feats[n]); } ncount = newfeats.Length; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); - featuresClass.layerName = accessStrs[j]; + featuresClass.layerName = accssname; featuresClass.ncount = ncount; result.Add(featuresClass); @@ -303,6 +303,26 @@ if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); - } + } + + + /// + /// 获取globeControl上选中的管线,如果返回空则没有选中的管线 + /// + /// 地球引擎 + /// 返回一根线 + public static GSOFeature GetSelectedPipeline(GSOGlobeControl globeControl) + { + GSOFeature resFeature; + if (globeControl.Globe.SelObjectCount < 1) return null; + GSOLayer resLayer; + globeControl.Globe.GetSelectObject(0, out resFeature, out resLayer); + if (resFeature == null) return null; + + GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; + if (line1 == null) return null; + GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; + return pipeStyle1 == null ? null : resFeature; + } } } diff --git a/FrmCompareFeature.cs b/FrmCompareFeature.cs index a05e8e7..ac622c4 100644 --- a/FrmCompareFeature.cs +++ b/FrmCompareFeature.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Data; using System.Drawing; using System.Windows.Forms; @@ -11,26 +10,16 @@ { public partial class FrmCompareFeature : Office2007Form { - GSOFeature srcFeature; - GSOFeature dscFeature; - GSOGlobeControl globeControl1; - GSOGlobeControl globeControl2; - bool isSamePolyline; - - GSOLayer layerTemp; - GSOLayer layerTemp2; - GSOFeature new_feat; + private GSOFeature srcFeature, dscFeature; + private GSOGlobeControl globeControl1, globeControl2; GSOGeoPolygon3D resPolygon; - static FrmCompareFeature frm; - public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2, int width) + public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, int width) { if (frm == null) { - frm = new FrmCompareFeature(_globeControl1, _globeControl2, _layerTemp, _layerTemp2); - + frm = new FrmCompareFeature(_globeControl1, _globeControl2); frm.Location = new Point((width - frm.Width)/2, 50); frm.Show(_globeControl1.Parent); } @@ -41,8 +30,7 @@ } } - public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2) + public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2) { globeControl1 = _globeControl1; globeControl2 = _globeControl2; @@ -50,99 +38,35 @@ globeControl1.Globe.Action = EnumAction3D.SelectObject; globeControl2.Globe.Action = EnumAction3D.SelectObject; - layerTemp = _layerTemp; - layerTemp2 = _layerTemp2; globeControl1.MouseClick += globeControl1_MouseClick; globeControl2.MouseClick += globeControl2_MouseClick; } + private void invalParam() + { + if (srcFeature == null || dscFeature == null) + { + MessageBox.Show("请选择要对比的管段!", "提示"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) + { + MessageBox.Show("请选择同种类型图层!"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type || + srcFeature.Geometry.Type != EnumGeometryType.GeoPolyline3D) + return; + } + private void buttonAnalysis_Click(object sender, EventArgs e) { + invalParam(); + dataGridViewX1.DataSource = null; - - double bufferWidth = Convert.ToDouble(textBox1.Text); - - if (srcFeature == null || dscFeature == null) - MessageBox.Show("请选择要对比的管段!", "提示"); - else - { - if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) - MessageBox.Show("请选择同种类型图层!"); - else if (srcFeature.Geometry.Type == dscFeature.Geometry.Type && - srcFeature.Geometry.Type == EnumGeometryType.GeoPolyline3D) - { - lineLayerCompare(srcFeature, dscFeature, bufferWidth); - if (!isSamePolyline) - MessageBox.Show("实测管段与施工管段非同一条管段,请选择同一管段进行比较!", "提示"); - else - { - lineFeatureCompare(srcFeature, dscFeature); - globeControl1.Globe.Action = EnumAction3D.ActionNull; - globeControl2.Globe.Action = EnumAction3D.ActionNull; - } - } - else - MessageBox.Show("无法处理该类型图层!"); - } + lineFeatureCompare(srcFeature, dscFeature); } - - /// - /// 在容差范围内判断是否同一根管段 - /// - /// - /// - /// - /// - private bool lineLayerCompare(GSOFeature srcFeature, GSOFeature dscFeature, double bufferWidth) - { - isSamePolyline = false; - - GSOGeoPolyline3D srcLine = srcFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D srcBufferPolygon = srcLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer dsc = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); - - if (srcBufferPolygon != null) - { - GSOFeatures featuresInSrcLayer = dsc.FindFeaturesInPolygon(srcBufferPolygon, true); - - if (featuresInSrcLayer != null && featuresInSrcLayer.Length > 0) - { - for (int i = 0; i < featuresInSrcLayer.Length; i++) - { - if (featuresInSrcLayer[i].Name == dscFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D dscBufferPolygon = dscLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer src = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); - - if (dscBufferPolygon != null) - { - GSOFeatures featuresInDscLayer = src.FindFeaturesInPolygon(dscBufferPolygon, true); - - if (featuresInDscLayer != null && featuresInDscLayer.Length > 0) - { - for (int i = 0; i < featuresInDscLayer.Length; i++) - { - if (featuresInDscLayer[i].Name == srcFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - return isSamePolyline; - } - /// /// 分析两根管段的具体差异 /// @@ -156,8 +80,10 @@ GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; double dscLineLength = dscLine.GetSpaceLength(false, 6378137); - double horizonDistance = calculateDistance(srcLine, dscLine,false); - double verticalDistance = calculateDistance(srcLine, dscLine,true); + double horizonDistance, verticalDistance; + + ClassDoubleScreenCompare.CalculateDistance(srcLine, dscLine, out horizonDistance, + out verticalDistance,globeControl1,globeControl2); DataTable dt = new DataTable(); dt.Columns.Add("数据名称"); @@ -189,6 +115,98 @@ dt.Rows.Add(dscRow); dataGridViewX1.DataSource = dt; + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) + { + globeControl1.Globe.MemoryLayer.RemoveAllFeature(); + globeControl2.Globe.MemoryLayer.RemoveAllFeature(); + + GSOFeature new_feat = new GSOFeature(); + resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); + resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; + new_feat.Geometry = resPolygon; + + globeControl1.Globe.MemoryLayer.AddFeature(new_feat); + globeControl2.Globe.MemoryLayer.AddFeature(new_feat); + + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + public static void clearFeatureHighLight(GSOGlobeControl glb) + { + for (int i = 0; i < glb.Globe.Layers.Count; i++) + { + GSOLayer layer = glb.Globe.Layers[i]; + if (!(layer is GSOFeatureLayer)) continue; + GSOFeatures feats = layer.GetAllFeatures(); + for (int j = 0; j < feats.Length; j++) + { + feats[j].HighLight = false; + } + } + } + + void globeControl1_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl1.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl1.Globe.Action != EnumAction3D.SelectObject || + globeControl1.Globe.SelectedObject == null) + return; + GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + srcFeature = globeControl1.Globe.SelectedObject; + dscFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(srcFeature, + globeControl1,globeControl2,bufferWidth,resPolygon); + + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } + + void globeControl2_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl2.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl2.Globe.Action != EnumAction3D.SelectObject || + globeControl2.Globe.SelectedObject == null) + return; + + GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + dscFeature = globeControl2.Globe.SelectedObject; + srcFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(dscFeature, + globeControl1, globeControl2, bufferWidth, resPolygon); + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } private void FrmCompareFeature_FormClosing(object sender, FormClosingEventArgs e) @@ -198,322 +216,5 @@ frm = null; } - private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) - { - new_feat = new GSOFeature(); - resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); - resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; - new_feat.Geometry = resPolygon; - - layerTemp.AddFeature(new_feat); - layerTemp2.AddFeature(new_feat); - globeControl1.Refresh(); - globeControl2.Refresh(); - } - - private GSOLayer getSameLayer(GSOFeature feature) - { - GSOLayer layer = null; - if (!feature.Dataset.Caption.StartsWith("施工")) - { - layer = feature.Dataset.Caption == "供电管线" - ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") - : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); - } - else - { - layer = feature.Dataset.Caption == "施工电力管线" - ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") - : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); - } - - return layer; - } - - /// - /// 地球1中点击地球2中同步添加缓冲区 - /// - /// - /// - void globeControl1_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl1.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl1.Globe.Action == EnumAction3D.SelectObject && - globeControl1.Globe.SelectedObject != null) - { - GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - addPologyToGlobeControl(line, bufferWidth); - } - - srcFeature = globeControl1.Globe.SelectedObject; - GSOLayer layers = getSameLayer(srcFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = srcFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(srcFeature, features[i], Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - listFeatures.Add(features[i]); - } - calculate(out maxLength, out dscFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - /// - /// 地球2中点击地球1中同步添加缓冲区 - /// - /// - /// - void globeControl2_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl2.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl2.Globe.Action != EnumAction3D.SelectObject || - globeControl2.Globe.SelectedObject == null) - return; - else - { - GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - - addPologyToGlobeControl(line, bufferWidth); - } - - dscFeature = globeControl2.Globe.SelectedObject; - //双屏同时选中同一管段 - GSOLayer layers = getSameLayer(dscFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = dscFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(features[i], dscFeature, Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - { - listFeatures.Add(features[i]); - } - } - calculate(out maxLength, out srcFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - private void calculate(out double maxLength, out GSOFeature feature, GSOFeatures listFeatures, - GSOGeoPolyline3D scLine) - { - maxLength = 0; - feature=new GSOFeature(); - if (listFeatures.Length == 0) - feature = null; - else - { - if (listFeatures.Length == 1) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - } - else - { - for (int m = 0; m < listFeatures.Length; m++) - { - GSOGeoPolyline3D tempSGLine = listFeatures[m].Geometry as GSOGeoPolyline3D; - - double tempLength = tempSGLine.GetSpaceLength(false, 6378137); - double lengthAbs = Math.Abs(tempLength - scLine.GetSpaceLength(false, 6378137)); - if (m == 0) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - maxLength = lengthAbs; - } - else if (lengthAbs < maxLength) - { - feature = listFeatures[m]; - listFeatures[m].HighLight = true; - maxLength = lengthAbs; - } - } - } - } - } - - /// - /// 计算距离 - /// - /// - /// - /// - double calculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2,bool isVertical) - { - GSOPoint3d pntIntersect1 = new GSOPoint3d(); - GSOPoint3d pntIntersect2 = new GSOPoint3d(); - GSOPoint3d pntProIntersect1 = new GSOPoint3d(); - GSOPoint3d pntProIntersect2 = new GSOPoint3d(); - double dDist = 0; - if (isVertical) - { - dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "垂直"); - } - else - { - dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "水平"); - } - - return dDist; - } - - /// - /// 清除所有高亮Feature - /// - /// - private void clearFeatureHighLight(GSOGlobeControl glb1,GSOGlobeControl glb2) - { - layerTemp.RemoveAllFeature(); - layerTemp2.RemoveAllFeature(); - //清除gbl1中高亮 - for (int i = 0; i < glb1.Globe.Layers.Count; i++) - { - GSOLayer layer = glb1.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - //清除gbl2中高亮 - for (int i = 0; i < glb2.Globe.Layers.Count; i++) - { - GSOLayer layer = glb2.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - } - - /// - /// 添加标注 - /// - /// - /// - /// - /// - /// - /// - private GSOPoint3d LabelDistance(GSOLayer markerLayer, GSOLayer markerLayer2, - GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, bool markerVisible,string label) - { - if (pntIntersect1 == null || pntIntersect2 == null) - return new GSOPoint3d(); - GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); - GSOPoint3ds point3ds = new GSOPoint3ds(); - point3ds.Add(pntIntersect1); - point3ds.Add(pntIntersect2); - disline.AddPart(point3ds); - - GSOGeoMarker dismarker = new GSOGeoMarker(); - GSOFeature marker = null; - GSOFeature line = null; - createLineStyle(out marker, out line,disline, pntIntersect1, pntIntersect2, distance, label, dismarker); - - line.Visible = marker.Visible = markerVisible; - markerLayer.AddFeature(line); - markerLayer.AddFeature(marker); - - markerLayer2.AddFeature(line); - markerLayer2.AddFeature(marker); - - return dismarker.Position; - } - /// - /// 控制标注和字体的颜色 - /// - /// - /// - /// - /// - /// - /// - /// - /// - private void createLineStyle(out GSOFeature marker,out GSOFeature line,GSOGeoPolyline3D disline, - GSOPoint3d pntIntersect1,GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) - { - GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 - style.LineColor = Color.Red; - style.LineWidth = 5; //设置线的宽度为5 - style.VertexVisible = true; //显示线的节点 - disline.Style = style; //把风格添加到线上 - disline.AltitudeMode = EnumAltitudeMode.Absolute; - line=new GSOFeature(); - line.Geometry = disline; - - dismarker.X = pntIntersect1.X; - dismarker.Y = pntIntersect1.Y; - dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; - dismarker.Text = label + distance.ToString("0.00") + "米"; - dismarker.AltitudeMode = EnumAltitudeMode.Absolute; - - GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); - GSOTextStyle styleText = new GSOTextStyle(); - styleText.IsSizeFixed = true; - styleText.ForeColor = Color.Red; - styleText.FontSize = 20; - styleMarker.TextStyle = styleText; - dismarker.Style = styleMarker; - - marker=new GSOFeature(); - marker.Geometry = dismarker; - } - } } diff --git a/FrmHotFuncStat.cs b/FrmHotFuncStat.cs index 84131ef..f313b20 100644 --- a/FrmHotFuncStat.cs +++ b/FrmHotFuncStat.cs @@ -58,14 +58,11 @@ DataTable table = OledbHelper.QueryTable(sql); - if (table != null) + if (table == null) return; + for (int i = 0; i < table.Rows.Count; i++) { - for (int i = 0; i < table.Rows.Count; i++) - { - userLists.Items.Add(table.Rows[i][0].ToString()); - } + userLists.Items.Add(table.Rows[i][0].ToString()); } - } //统计结果 private void statBtn_Click(object sender, EventArgs e) diff --git a/FrmLayerControl.cs b/FrmLayerControl.cs index 8586041..8fbce97 100644 --- a/FrmLayerControl.cs +++ b/FrmLayerControl.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Windows.Forms; using DevComponents.DotNetBar; using GeoScene.Data; @@ -13,10 +14,10 @@ GSOGlobeControl globeControl1; GSOGlobeControl globeControl2; - TreeNode terrainManagerNode = null; - TreeNode layerManagerNode = null; - TreeNode terrainManagerNode1 = null; - TreeNode layerManagerNode1 = null; +// TreeNode terrainManagerNode = null; +// TreeNode layerManagerNode = null; +// TreeNode terrainManagerNode1 = null; +// TreeNode layerManagerNode1 = null; public FrmLayerControl(GSOGlobeControl ctl1,GSOGlobeControl ctl2) { @@ -25,14 +26,14 @@ globeControl2 = ctl2; } - private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) - { - treeNode=new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - } +// private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) +// { +// treeNode=new TreeNode(); +// treeNode.ImageIndex = 0; +// treeNode.SelectedImageIndex = 0; +// treeNode.Checked = false; +// treeNode.Text = strTreeNodeText; +// } // private void initTreeView() // { @@ -51,234 +52,258 @@ // layerTree2.Nodes.Add(terrainManagerNode); // } - #region wxl重构树形结构代码 + + - private TreeNode treeNode(string strTreeNodeText) - { - TreeNode treeNode = new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - return treeNode; - } -// private void appendToParent(TreeNodeCollection treeNodeCollection, ) - #endregion - private void initTreeView() +// private void initNode(string nodeName) +// { +// TreeNode nodeGroupElse1 = new TreeNode(); +// nodeGroupElse1.Text = nodeName; +// layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); +// +// TreeNode nodeGroupElse = new TreeNode(); +// nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; +// layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); +// } + +// private void initTreeNode(XmlNodeList Params) +// { +// foreach (XmlNode paramsNode in Params) //layers +// { +// foreach (XmlNode layerNode in paramsNode) //layer +// { +// initNode(layerNode.Attributes["label"].Value); +// } +// } +// +// initNode("基础图层"); +// initNode("其他"); +// } + +// private void FrmLayerControl_Load(object sender, EventArgs e) +// { +// +// initTreeView(); +// try +// { +// XmlDocument doc = new XmlDocument(); +// doc.Load(Application.StartupPath + "\\双屏设置.xml"); +// XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// +// initTreeNode(Params); +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// +// RefreshLayerAndTerrainTree(); +// } + private void FrmLayerControl_Load(object sender, EventArgs e) { layerTree1.Nodes.Clear(); layerTree2.Nodes.Clear(); - - //加载layertree2 - initLayerTree(out layerManagerNode1, "图层管理"); - layerTree1.Nodes.Add(layerManagerNode1); - initLayerTree(out terrainManagerNode1, "地形管理"); - layerTree1.Nodes.Add(terrainManagerNode1); - - initLayerTree(out layerManagerNode, "图层管理"); - layerTree2.Nodes.Add(layerManagerNode); - initLayerTree(out terrainManagerNode, "地形管理"); - layerTree2.Nodes.Add(terrainManagerNode); + TreeUtils.InitLayerTree(globeControl1, layerTree1, "实测数据"); + TreeUtils.InitLayerTree(globeControl2, layerTree2, "施工数据"); } - private void initNode(string nodeName) - { - TreeNode nodeGroupElse1 = new TreeNode(); - nodeGroupElse1.Text = nodeName; - layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); + #region wxl重构树形结构代码 - TreeNode nodeGroupElse = new TreeNode(); - nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; - layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); - } + /// + /// 构造tree,最多解析三层,可放在工具类中 - private void initTreeNode(XmlNodeList Params) - { - foreach (XmlNode paramsNode in Params) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - initNode(layerNode.Attributes["label"].Value); - } - } + /// 所属地球 + /// 要加载的树 + /// 数据来源,实测数据/施工数据/规划数据/红线数据,为空则展示全部 +// private void initTree(GSOGlobeControl gsoGlobeControl,TreeView treeView, string viewDatasrc) +// { +// treeView.Nodes.Clear(); +// LayerConfig layerConfig = Utility.layerConfig; +// List datasrcs = layerConfig.datasrcs; +// foreach (DataSrc datasrc in datasrcs) +// { +// if (viewDatasrc != null && !viewDatasrc.Trim().Equals("") && !datasrc.label.Equals(viewDatasrc)) continue; +// TreeNode rootNode = treeView.Nodes.Add(datasrc.label); +// List layerTypes = datasrc.layertypes; +// foreach (LayerType layerType in layerTypes) +// { +// TreeNode secNode = rootNode.Nodes.Add(layerType.label); +// List layers = layerType.layers; +// foreach (Layer layer in layers) +// { +// GSOLayer gsoLayer = gsoGlobeControl.Globe.Layers.GetLayerByCaption(layer.layer); +// if (gsoLayer == null) continue;//将不存在的去除 +// TreeNode node = new TreeNode(); +// node.Tag = gsoLayer; +// node.Text = layer.label; +// node.Checked = gsoLayer.Visible; +// if (gsoLayer.Visible) +// { +// secNode.Checked = true; +// rootNode.Checked = true; +// } +// secNode.Nodes.Add(node); +// } +// } +// } +// } - initNode("基础图层"); - initNode("其他"); - } + #endregion - private void FrmLayerControl_Load(object sender, EventArgs e) - { - initTreeView(); - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(Application.StartupPath + "\\双屏设置.xml"); - XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, +// TreeView layerTree) +// { +// try +// { +// for (int i = 0; i < nLayerCount; i++) +// { +// GSOLayer layer = globcontrol.Globe.Layers[i]; +// if (layer == null) continue; +// string layerName = layer.Name; +// TreeNode node = new TreeNode(); +// node.Tag = layer; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = layer.Caption; +// node.Checked = layer.Visible; +// +// bool isContains = false; +// for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) +// { +// if (!layerName.Contains("fttp:")) +// { +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || +// layerName.Contains("施工") || +// layerName.Contains("规划")) continue; +// break; +// case "layerTree2": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[j].Nodes.Add(node); +// isContains = true; +// break; +// } +// else +// { +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); +// isContains = true; +// break; +// } +// } +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || +// layerName.Contains("标注") || +// isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || +// layerName.Contains("景观") || layerName.Contains("红线")) +// continue; +// break; +// case "layerTree2": +// if (isContains != false || layerName.Contains("tempLgdData2")) +// continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); +// } +// +// for (int i = 0; i < nTerrainCount; i++) +// { +// GSOTerrain terrain = globcontrol.Globe.Terrains[i]; +// if (terrain == null) continue; +// TreeNode node = new TreeNode(); +// node.Tag = terrain; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = terrain.Caption; +// node.Checked = terrain.Visible; +// switch (layerTree.Name) +// { +// case "layerTree1": +// terrainManagerNode1.Nodes.Add(node); +// break; +// case "layerTree2": +// terrainManagerNode.Nodes.Add(node); +// break; +// default: +// break; +// } +// } +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// } - initTreeNode(Params); - } - catch (Exception ex) - { - LogError.PublishError(ex); - } +// private void initTreeNodeCheckedStatus(TreeView layerTreeView) +// { +// //节点选中状态控制 +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// if (node.Checked != true) continue; +// layerTreeView.Nodes[0].Checked = true; +// break; +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOTerrain layer = childNode.Tag as GSOTerrain; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// } - RefreshLayerAndTerrainTree(); - } - - private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, - TreeView layerTree) - { - try - { - for (int i = 0; i < nLayerCount; i++) - { - GSOLayer layer = globcontrol.Globe.Layers[i]; - if (layer == null) continue; - string layerName = layer.Name; - TreeNode node = new TreeNode(); - node.Tag = layer; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = layer.Caption; - node.Checked = layer.Visible; - - bool isContains = false; - for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) - { - if (!layerName.Contains("fttp:")) - { - switch (layerTree.Name) - { - case "layerTree1": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || - layerName.Contains("施工") || - layerName.Contains("规划")) continue; - break; - case "layerTree2": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[j].Nodes.Add(node); - isContains = true; - break; - } - else - { - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); - isContains = true; - break; - } - } - switch (layerTree.Name) - { - case "layerTree1": - if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || - layerName.Contains("标注") || - isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || - layerName.Contains("景观") || layerName.Contains("红线")) - continue; - break; - case "layerTree2": - if (isContains != false || layerName.Contains("tempLgdData2")) - continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); - } - - for (int i = 0; i < nTerrainCount; i++) - { - GSOTerrain terrain = globcontrol.Globe.Terrains[i]; - if (terrain == null) continue; - TreeNode node = new TreeNode(); - node.Tag = terrain; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = terrain.Caption; - node.Checked = terrain.Visible; - switch (layerTree.Name) - { - case "layerTree1": - terrainManagerNode1.Nodes.Add(node); - break; - case "layerTree2": - terrainManagerNode.Nodes.Add(node); - break; - default: - break; - } - } - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - - private void initTreeNodeCheckedStatus(TreeView layerTreeView) - { - //节点选中状态控制 - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - if (node.Checked != true) continue; - layerTreeView.Nodes[0].Checked = true; - break; - } - - foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOTerrain layer = childNode.Tag as GSOTerrain; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - } - - void exPandTreeNode() - { - layerManagerNode1.Expand(); - terrainManagerNode1.Expand(); - layerManagerNode.Expand(); - terrainManagerNode.Expand(); - } +// void exPandTreeNode() +// { +// layerManagerNode1.Expand(); +// terrainManagerNode1.Expand(); +// layerManagerNode.Expand(); +// terrainManagerNode.Expand(); +// } /// /// 刷新节点树 /// - private void RefreshLayerAndTerrainTree() - { - int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 - int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 - addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); - initTreeNodeCheckedStatus(layerTree1); - - int nLayerCount = globeControl2.Globe.Layers.Count; - int nTerrainCount = globeControl2.Globe.Terrains.Count; - addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); - initTreeNodeCheckedStatus(layerTree2); - - // 展开 - exPandTreeNode(); - } +// private void RefreshLayerAndTerrainTree() +// { +// int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 +// int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 +// addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); +// initTreeNodeCheckedStatus(layerTree1); +// +// int nLayerCount = globeControl2.Globe.Layers.Count; +// int nTerrainCount = globeControl2.Globe.Terrains.Count; +// addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); +// initTreeNodeCheckedStatus(layerTree2); +// +// // 展开 +// exPandTreeNode(); +// } /// /// 节点树复选框选中状态改变事件处理 @@ -289,144 +314,132 @@ { if (e.Action != TreeViewAction.Unknown) { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } + TreeUtils.TreeNodeCheckedChange(globeControl2,e.Node); + } + } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree2(e.Node, e.Node.Checked); + private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) + { + if (e.Action != TreeViewAction.Unknown) + { + TreeUtils.TreeNodeCheckedChange(globeControl1, e.Node); } } + + +// private void layerTree2_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree2(e.Node, e.Node.Checked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree1(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree1(childNode, isChecked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree2(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree2(childNode, isChecked); +// } +// } /// /// 节点树选中状态改变事件 /// /// /// - private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) - { - if (e.Action != TreeViewAction.Unknown) - { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } +// private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree1(e.Node, e.Node.Checked); +// } +// } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree1(e.Node, e.Node.Checked); - } - } - /// - /// 改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 - /// - /// - private void CheckParentNode(TreeNode curNode) - { - bool bChecked = false; - - if (curNode.Parent != null) - { - foreach (TreeNode node in curNode.Parent.Nodes) - { - if (node.Checked) - { - bChecked = true; - break; - } - } - if (bChecked) - { - curNode.Parent.Checked = true; - CheckParentNode(curNode.Parent); - } - else - { - curNode.Parent.Checked = false; - CheckParentNode(curNode.Parent); - } - } - } } } diff --git a/ClassDoubleScreenCompare.cs b/ClassDoubleScreenCompare.cs new file mode 100644 index 0000000..f2935da --- /dev/null +++ b/ClassDoubleScreenCompare.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using GeoScene.Globe; +using GeoScene.Data; +using GeoScene.Engine; +using System.Drawing; + +namespace Cyberpipe +{ + class ClassDoubleScreenCompare + { + public static GSOFeature getSameFeatureFromOtherGlobe(GSOFeature feature, + GSOGlobeControl globeControl1, GSOGlobeControl globeControl2,double bufferWidth,GSOGeoPolygon3D resPolygon) + { + GSOLayer layer; + GSOFeatures features = new GSOFeatures(); + + if (!feature.Dataset.Caption.StartsWith("施工")) + { + layer = feature.Dataset.Caption == "供电管线" + ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") + : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(feature, fs[i], globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + else + { + layer = feature.Dataset.Caption == "施工电力管线" + ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") + : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(fs[i], feature, globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + + return getMostSimilarFeatureFromFeatures(feature, features); + + } + + + private static GSOFeature getMostSimilarFeatureFromFeatures(GSOFeature feature, GSOFeatures features) + { + double maxLength = 0; + GSOFeature f = new GSOFeature(); + GSOGeoPolyline3D line = feature.Geometry as GSOGeoPolyline3D; + + if (features.Length == 0) return null; + if (features.Length == 1) + { + f = features[0]; + f.HighLight = true; + } + else + { + for (int m = 0; m < features.Length; m++) + { + GSOGeoPolyline3D tempSGLine = features[m].Geometry as GSOGeoPolyline3D; + + double tempLength = tempSGLine.GetSpaceLength(false, 6378137); + double lengthAbs = Math.Abs(tempLength - line.GetSpaceLength(false, 6378137)); + if (m == 0) + { + f = features[0]; + f.HighLight = true; + maxLength = lengthAbs; + } + else if (lengthAbs < maxLength) + { + f = features[m]; + f.HighLight = true; + maxLength = lengthAbs; + } + } + } + return f; + } + + private static bool isSameFeature(GSOFeature feature1, GSOFeature feature2, GSOLayer layer, double bufferWidth) + { + GSOGeoPolyline3D line = feature1.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = line.CreateBuffer(bufferWidth * 2, true, 5, true, false); + + if (bufferPolygon == null) return false; + + GSOFeatures featuresInLayer = layer.FindFeaturesInPolygon(bufferPolygon, true); + + if (featuresInLayer == null || featuresInLayer.Length <= 0) + return false; + + for (int i = 0; i < featuresInLayer.Length; i++) + { + if (featuresInLayer[i].Name == feature2.Name) + { + return true; + break; + } + } + return false; + } + + private static bool isSimilarFeature(GSOFeature srcFeature, GSOFeature dscFeature, + GSOGlobeControl globeControl1,GSOGlobeControl globeControl2,double bufferWidth) + { + GSOLayer dscLayer = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); + GSOLayer srcLayer = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); + + if (!isSameFeature(srcFeature, dscFeature, dscLayer, bufferWidth) + && !isSameFeature(dscFeature, srcFeature, srcLayer, bufferWidth)) + return false; + return true; + } + + public static void CalculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2, + out double horizonDistance, out double verticalDistance, GSOGlobeControl globeControl1, GSOGlobeControl globeControl2) + { + GSOPoint3d pntIntersect1 = new GSOPoint3d(); + GSOPoint3d pntIntersect2 = new GSOPoint3d(); + GSOPoint3d pntProIntersect1 = new GSOPoint3d(); + GSOPoint3d pntProIntersect2 = new GSOPoint3d(); + + verticalDistance = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, verticalDistance, true, "垂直", globeControl1, globeControl2); + + horizonDistance = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, horizonDistance, true, "水平", globeControl1, globeControl2); + + } + + private static GSOPoint3d LabelDistance(GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, + double distance, bool markerVisible, string label,GSOGlobeControl globeControl1,GSOGlobeControl globeControl2) + { + if (pntIntersect1 == null || pntIntersect2 == null) + return new GSOPoint3d(); + GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); + GSOPoint3ds point3ds = new GSOPoint3ds(); + point3ds.Add(pntIntersect1); + point3ds.Add(pntIntersect2); + disline.AddPart(point3ds); + + GSOGeoMarker dismarker = new GSOGeoMarker(); + GSOFeature marker = null; + GSOFeature line = null; + createLineStyle(out marker, out line, disline, pntIntersect1, pntIntersect2, distance, label, dismarker); + + line.Visible = marker.Visible = markerVisible; + globeControl1.Globe.MemoryLayer.AddFeature(line); + globeControl1.Globe.MemoryLayer.AddFeature(marker); + + globeControl2.Globe.MemoryLayer.AddFeature(line); + globeControl2.Globe.MemoryLayer.AddFeature(marker); + + return dismarker.Position; + } + + private static void createLineStyle(out GSOFeature marker, out GSOFeature line, GSOGeoPolyline3D disline, + GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) + { + GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 + style.LineColor = Color.Red; + style.LineWidth = 5; //设置线的宽度为5 + style.VertexVisible = true; //显示线的节点 + disline.Style = style; //把风格添加到线上 + disline.AltitudeMode = EnumAltitudeMode.Absolute; + line = new GSOFeature(); + line.Geometry = disline; + + dismarker.X = pntIntersect1.X; + dismarker.Y = pntIntersect1.Y; + dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; + dismarker.Text = label + distance.ToString("0.00") + "米"; + dismarker.AltitudeMode = EnumAltitudeMode.Absolute; + + GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); + GSOTextStyle styleText = new GSOTextStyle(); + styleText.IsSizeFixed = true; + styleText.ForeColor = Color.Red; + styleText.FontSize = 20; + styleMarker.TextStyle = styleText; + dismarker.Style = styleMarker; + + marker = new GSOFeature(); + marker.Geometry = dismarker; + } + + } +} diff --git a/Cyberpipe.csproj b/Cyberpipe.csproj index d8aa9c8..bcce54d 100644 --- a/Cyberpipe.csproj +++ b/Cyberpipe.csproj @@ -203,6 +203,7 @@ + @@ -1143,6 +1144,7 @@ SysRescInfoManager.cs + True True diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 123caf1..2c45db6 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -258,42 +258,25 @@ for (int i = 0; i < scLayer.GetAllFeatures().Length; i++) { GSOFeature scFeature = scLayer.GetAt(i); - if (scFeature.GetFieldAsString("所属道路") == road) + if (scFeature.GetFieldAsString("所属道路") != road) continue; + GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + + GSOFeature sgFeature = null; + GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); + + //**判断同一个Feature + if (sgFeatures.Length >= 1) { - GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); - GSOFeature sgFeature = null; - GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); - - //**判断同一个Feature - if (sgFeatures.Length >= 1) + if (sgFeature != null) { - sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); + GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; + double horizonDistance, verticalDistance; - if (sgFeature != null) - { - GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; - double horizonDistance, verticalDistance; - - CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); - GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); - } - else - { - scFeature.HighLight = true; - DataRow dr = dt.NewRow(); - dr[0] = scLayer.Caption; - dr[1] = scFeature.GetFieldAsString("编号"); - dr[2] = sgLayer.Caption; - dr[3] = "无"; - dr[4] = "无"; - dr[5] = "0.02"; - dr[6] = "无"; - dr[7] = "0.02"; - dr[8] = "未设计管段"; - dt.Rows.Add(dr); - } + CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); + GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); } else { @@ -311,6 +294,21 @@ dt.Rows.Add(dr); } } + else + { + scFeature.HighLight = true; + DataRow dr = dt.NewRow(); + dr[0] = scLayer.Caption; + dr[1] = scFeature.GetFieldAsString("编号"); + dr[2] = sgLayer.Caption; + dr[3] = "无"; + dr[4] = "无"; + dr[5] = "0.02"; + dr[6] = "无"; + dr[7] = "0.02"; + dr[8] = "未设计管段"; + dt.Rows.Add(dr); + } } } /// diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index 53946c0..fe32265 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -4,7 +4,7 @@ using GeoScene.Globe; namespace Cyberpipe -{ +{ //本类作用为:辅助GlobalControl上Feature的统计分析工具类 class FeatureStatisticsService { /// @@ -60,8 +60,8 @@ /// /// /// - /// - /// + /// + /// /// /// public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) @@ -74,6 +74,7 @@ for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; double length = line.GetSpaceLength(true, 6378137); totalLength += length; ncount += 1; @@ -114,7 +115,7 @@ for (int i = 0; i < feats.Length; i++) { double radius = feats[i].GetFieldAsDouble(fieldName); - if (radius >= min && radius <= max) + if (radius >= minValue && radius <= maxValue) { result.Add(feats[i]); } @@ -148,23 +149,22 @@ lstDiameter.Sort(); if (lstDiameter.Count > 0) { - for (int m = 0; m < lstDiameter.Count; m++) + foreach (float diameter in lstDiameter) { double totalLength = 0.00; int ncount = 0; for (int j = 0; j < feats.Length; j++) { - if (feats[j].GetFieldAsFloat("管径_毫米") == lstDiameter[m]) - { - GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } + if (Math.Abs(feats[j].GetFieldAsFloat("管径_毫米") - diameter) > 0.00001) continue; + GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = lstDiameter[m].ToString(); + featuresClass.groupFieldValue = diameter.ToString(); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -191,13 +191,13 @@ //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); - for (int j = 0; j < accessStrs.Length; j++) + foreach (string accssname in accessStrs) { - GSOFeatures feats = null; - int ncount = 0; + GSOFeatures feats; + int ncount; if (polygon == null) { - feats = flayer.GetFeatureByFieldValue("附属物名称", accessStrs[j], true); + feats = flayer.GetFeatureByFieldValue("附属物名称", accssname, true); ncount = feats.Length; } else @@ -207,14 +207,14 @@ //过滤 for (int n = 0; n < feats.Length; n++) { - if (feats[n].GetFieldAsString("附属物名称").Contains(accessStrs[j])) newfeats.Add(feats[n]); + if (feats[n].GetFieldAsString("附属物名称").Contains(accssname)) newfeats.Add(feats[n]); } ncount = newfeats.Length; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); - featuresClass.layerName = accessStrs[j]; + featuresClass.layerName = accssname; featuresClass.ncount = ncount; result.Add(featuresClass); @@ -303,6 +303,26 @@ if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); - } + } + + + /// + /// 获取globeControl上选中的管线,如果返回空则没有选中的管线 + /// + /// 地球引擎 + /// 返回一根线 + public static GSOFeature GetSelectedPipeline(GSOGlobeControl globeControl) + { + GSOFeature resFeature; + if (globeControl.Globe.SelObjectCount < 1) return null; + GSOLayer resLayer; + globeControl.Globe.GetSelectObject(0, out resFeature, out resLayer); + if (resFeature == null) return null; + + GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; + if (line1 == null) return null; + GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; + return pipeStyle1 == null ? null : resFeature; + } } } diff --git a/FrmCompareFeature.cs b/FrmCompareFeature.cs index a05e8e7..ac622c4 100644 --- a/FrmCompareFeature.cs +++ b/FrmCompareFeature.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Data; using System.Drawing; using System.Windows.Forms; @@ -11,26 +10,16 @@ { public partial class FrmCompareFeature : Office2007Form { - GSOFeature srcFeature; - GSOFeature dscFeature; - GSOGlobeControl globeControl1; - GSOGlobeControl globeControl2; - bool isSamePolyline; - - GSOLayer layerTemp; - GSOLayer layerTemp2; - GSOFeature new_feat; + private GSOFeature srcFeature, dscFeature; + private GSOGlobeControl globeControl1, globeControl2; GSOGeoPolygon3D resPolygon; - static FrmCompareFeature frm; - public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2, int width) + public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, int width) { if (frm == null) { - frm = new FrmCompareFeature(_globeControl1, _globeControl2, _layerTemp, _layerTemp2); - + frm = new FrmCompareFeature(_globeControl1, _globeControl2); frm.Location = new Point((width - frm.Width)/2, 50); frm.Show(_globeControl1.Parent); } @@ -41,8 +30,7 @@ } } - public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2) + public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2) { globeControl1 = _globeControl1; globeControl2 = _globeControl2; @@ -50,99 +38,35 @@ globeControl1.Globe.Action = EnumAction3D.SelectObject; globeControl2.Globe.Action = EnumAction3D.SelectObject; - layerTemp = _layerTemp; - layerTemp2 = _layerTemp2; globeControl1.MouseClick += globeControl1_MouseClick; globeControl2.MouseClick += globeControl2_MouseClick; } + private void invalParam() + { + if (srcFeature == null || dscFeature == null) + { + MessageBox.Show("请选择要对比的管段!", "提示"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) + { + MessageBox.Show("请选择同种类型图层!"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type || + srcFeature.Geometry.Type != EnumGeometryType.GeoPolyline3D) + return; + } + private void buttonAnalysis_Click(object sender, EventArgs e) { + invalParam(); + dataGridViewX1.DataSource = null; - - double bufferWidth = Convert.ToDouble(textBox1.Text); - - if (srcFeature == null || dscFeature == null) - MessageBox.Show("请选择要对比的管段!", "提示"); - else - { - if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) - MessageBox.Show("请选择同种类型图层!"); - else if (srcFeature.Geometry.Type == dscFeature.Geometry.Type && - srcFeature.Geometry.Type == EnumGeometryType.GeoPolyline3D) - { - lineLayerCompare(srcFeature, dscFeature, bufferWidth); - if (!isSamePolyline) - MessageBox.Show("实测管段与施工管段非同一条管段,请选择同一管段进行比较!", "提示"); - else - { - lineFeatureCompare(srcFeature, dscFeature); - globeControl1.Globe.Action = EnumAction3D.ActionNull; - globeControl2.Globe.Action = EnumAction3D.ActionNull; - } - } - else - MessageBox.Show("无法处理该类型图层!"); - } + lineFeatureCompare(srcFeature, dscFeature); } - - /// - /// 在容差范围内判断是否同一根管段 - /// - /// - /// - /// - /// - private bool lineLayerCompare(GSOFeature srcFeature, GSOFeature dscFeature, double bufferWidth) - { - isSamePolyline = false; - - GSOGeoPolyline3D srcLine = srcFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D srcBufferPolygon = srcLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer dsc = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); - - if (srcBufferPolygon != null) - { - GSOFeatures featuresInSrcLayer = dsc.FindFeaturesInPolygon(srcBufferPolygon, true); - - if (featuresInSrcLayer != null && featuresInSrcLayer.Length > 0) - { - for (int i = 0; i < featuresInSrcLayer.Length; i++) - { - if (featuresInSrcLayer[i].Name == dscFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D dscBufferPolygon = dscLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer src = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); - - if (dscBufferPolygon != null) - { - GSOFeatures featuresInDscLayer = src.FindFeaturesInPolygon(dscBufferPolygon, true); - - if (featuresInDscLayer != null && featuresInDscLayer.Length > 0) - { - for (int i = 0; i < featuresInDscLayer.Length; i++) - { - if (featuresInDscLayer[i].Name == srcFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - return isSamePolyline; - } - /// /// 分析两根管段的具体差异 /// @@ -156,8 +80,10 @@ GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; double dscLineLength = dscLine.GetSpaceLength(false, 6378137); - double horizonDistance = calculateDistance(srcLine, dscLine,false); - double verticalDistance = calculateDistance(srcLine, dscLine,true); + double horizonDistance, verticalDistance; + + ClassDoubleScreenCompare.CalculateDistance(srcLine, dscLine, out horizonDistance, + out verticalDistance,globeControl1,globeControl2); DataTable dt = new DataTable(); dt.Columns.Add("数据名称"); @@ -189,6 +115,98 @@ dt.Rows.Add(dscRow); dataGridViewX1.DataSource = dt; + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) + { + globeControl1.Globe.MemoryLayer.RemoveAllFeature(); + globeControl2.Globe.MemoryLayer.RemoveAllFeature(); + + GSOFeature new_feat = new GSOFeature(); + resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); + resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; + new_feat.Geometry = resPolygon; + + globeControl1.Globe.MemoryLayer.AddFeature(new_feat); + globeControl2.Globe.MemoryLayer.AddFeature(new_feat); + + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + public static void clearFeatureHighLight(GSOGlobeControl glb) + { + for (int i = 0; i < glb.Globe.Layers.Count; i++) + { + GSOLayer layer = glb.Globe.Layers[i]; + if (!(layer is GSOFeatureLayer)) continue; + GSOFeatures feats = layer.GetAllFeatures(); + for (int j = 0; j < feats.Length; j++) + { + feats[j].HighLight = false; + } + } + } + + void globeControl1_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl1.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl1.Globe.Action != EnumAction3D.SelectObject || + globeControl1.Globe.SelectedObject == null) + return; + GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + srcFeature = globeControl1.Globe.SelectedObject; + dscFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(srcFeature, + globeControl1,globeControl2,bufferWidth,resPolygon); + + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } + + void globeControl2_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl2.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl2.Globe.Action != EnumAction3D.SelectObject || + globeControl2.Globe.SelectedObject == null) + return; + + GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + dscFeature = globeControl2.Globe.SelectedObject; + srcFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(dscFeature, + globeControl1, globeControl2, bufferWidth, resPolygon); + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } private void FrmCompareFeature_FormClosing(object sender, FormClosingEventArgs e) @@ -198,322 +216,5 @@ frm = null; } - private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) - { - new_feat = new GSOFeature(); - resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); - resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; - new_feat.Geometry = resPolygon; - - layerTemp.AddFeature(new_feat); - layerTemp2.AddFeature(new_feat); - globeControl1.Refresh(); - globeControl2.Refresh(); - } - - private GSOLayer getSameLayer(GSOFeature feature) - { - GSOLayer layer = null; - if (!feature.Dataset.Caption.StartsWith("施工")) - { - layer = feature.Dataset.Caption == "供电管线" - ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") - : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); - } - else - { - layer = feature.Dataset.Caption == "施工电力管线" - ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") - : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); - } - - return layer; - } - - /// - /// 地球1中点击地球2中同步添加缓冲区 - /// - /// - /// - void globeControl1_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl1.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl1.Globe.Action == EnumAction3D.SelectObject && - globeControl1.Globe.SelectedObject != null) - { - GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - addPologyToGlobeControl(line, bufferWidth); - } - - srcFeature = globeControl1.Globe.SelectedObject; - GSOLayer layers = getSameLayer(srcFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = srcFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(srcFeature, features[i], Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - listFeatures.Add(features[i]); - } - calculate(out maxLength, out dscFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - /// - /// 地球2中点击地球1中同步添加缓冲区 - /// - /// - /// - void globeControl2_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl2.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl2.Globe.Action != EnumAction3D.SelectObject || - globeControl2.Globe.SelectedObject == null) - return; - else - { - GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - - addPologyToGlobeControl(line, bufferWidth); - } - - dscFeature = globeControl2.Globe.SelectedObject; - //双屏同时选中同一管段 - GSOLayer layers = getSameLayer(dscFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = dscFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(features[i], dscFeature, Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - { - listFeatures.Add(features[i]); - } - } - calculate(out maxLength, out srcFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - private void calculate(out double maxLength, out GSOFeature feature, GSOFeatures listFeatures, - GSOGeoPolyline3D scLine) - { - maxLength = 0; - feature=new GSOFeature(); - if (listFeatures.Length == 0) - feature = null; - else - { - if (listFeatures.Length == 1) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - } - else - { - for (int m = 0; m < listFeatures.Length; m++) - { - GSOGeoPolyline3D tempSGLine = listFeatures[m].Geometry as GSOGeoPolyline3D; - - double tempLength = tempSGLine.GetSpaceLength(false, 6378137); - double lengthAbs = Math.Abs(tempLength - scLine.GetSpaceLength(false, 6378137)); - if (m == 0) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - maxLength = lengthAbs; - } - else if (lengthAbs < maxLength) - { - feature = listFeatures[m]; - listFeatures[m].HighLight = true; - maxLength = lengthAbs; - } - } - } - } - } - - /// - /// 计算距离 - /// - /// - /// - /// - double calculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2,bool isVertical) - { - GSOPoint3d pntIntersect1 = new GSOPoint3d(); - GSOPoint3d pntIntersect2 = new GSOPoint3d(); - GSOPoint3d pntProIntersect1 = new GSOPoint3d(); - GSOPoint3d pntProIntersect2 = new GSOPoint3d(); - double dDist = 0; - if (isVertical) - { - dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "垂直"); - } - else - { - dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "水平"); - } - - return dDist; - } - - /// - /// 清除所有高亮Feature - /// - /// - private void clearFeatureHighLight(GSOGlobeControl glb1,GSOGlobeControl glb2) - { - layerTemp.RemoveAllFeature(); - layerTemp2.RemoveAllFeature(); - //清除gbl1中高亮 - for (int i = 0; i < glb1.Globe.Layers.Count; i++) - { - GSOLayer layer = glb1.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - //清除gbl2中高亮 - for (int i = 0; i < glb2.Globe.Layers.Count; i++) - { - GSOLayer layer = glb2.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - } - - /// - /// 添加标注 - /// - /// - /// - /// - /// - /// - /// - private GSOPoint3d LabelDistance(GSOLayer markerLayer, GSOLayer markerLayer2, - GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, bool markerVisible,string label) - { - if (pntIntersect1 == null || pntIntersect2 == null) - return new GSOPoint3d(); - GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); - GSOPoint3ds point3ds = new GSOPoint3ds(); - point3ds.Add(pntIntersect1); - point3ds.Add(pntIntersect2); - disline.AddPart(point3ds); - - GSOGeoMarker dismarker = new GSOGeoMarker(); - GSOFeature marker = null; - GSOFeature line = null; - createLineStyle(out marker, out line,disline, pntIntersect1, pntIntersect2, distance, label, dismarker); - - line.Visible = marker.Visible = markerVisible; - markerLayer.AddFeature(line); - markerLayer.AddFeature(marker); - - markerLayer2.AddFeature(line); - markerLayer2.AddFeature(marker); - - return dismarker.Position; - } - /// - /// 控制标注和字体的颜色 - /// - /// - /// - /// - /// - /// - /// - /// - /// - private void createLineStyle(out GSOFeature marker,out GSOFeature line,GSOGeoPolyline3D disline, - GSOPoint3d pntIntersect1,GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) - { - GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 - style.LineColor = Color.Red; - style.LineWidth = 5; //设置线的宽度为5 - style.VertexVisible = true; //显示线的节点 - disline.Style = style; //把风格添加到线上 - disline.AltitudeMode = EnumAltitudeMode.Absolute; - line=new GSOFeature(); - line.Geometry = disline; - - dismarker.X = pntIntersect1.X; - dismarker.Y = pntIntersect1.Y; - dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; - dismarker.Text = label + distance.ToString("0.00") + "米"; - dismarker.AltitudeMode = EnumAltitudeMode.Absolute; - - GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); - GSOTextStyle styleText = new GSOTextStyle(); - styleText.IsSizeFixed = true; - styleText.ForeColor = Color.Red; - styleText.FontSize = 20; - styleMarker.TextStyle = styleText; - dismarker.Style = styleMarker; - - marker=new GSOFeature(); - marker.Geometry = dismarker; - } - } } diff --git a/FrmHotFuncStat.cs b/FrmHotFuncStat.cs index 84131ef..f313b20 100644 --- a/FrmHotFuncStat.cs +++ b/FrmHotFuncStat.cs @@ -58,14 +58,11 @@ DataTable table = OledbHelper.QueryTable(sql); - if (table != null) + if (table == null) return; + for (int i = 0; i < table.Rows.Count; i++) { - for (int i = 0; i < table.Rows.Count; i++) - { - userLists.Items.Add(table.Rows[i][0].ToString()); - } + userLists.Items.Add(table.Rows[i][0].ToString()); } - } //统计结果 private void statBtn_Click(object sender, EventArgs e) diff --git a/FrmLayerControl.cs b/FrmLayerControl.cs index 8586041..8fbce97 100644 --- a/FrmLayerControl.cs +++ b/FrmLayerControl.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Windows.Forms; using DevComponents.DotNetBar; using GeoScene.Data; @@ -13,10 +14,10 @@ GSOGlobeControl globeControl1; GSOGlobeControl globeControl2; - TreeNode terrainManagerNode = null; - TreeNode layerManagerNode = null; - TreeNode terrainManagerNode1 = null; - TreeNode layerManagerNode1 = null; +// TreeNode terrainManagerNode = null; +// TreeNode layerManagerNode = null; +// TreeNode terrainManagerNode1 = null; +// TreeNode layerManagerNode1 = null; public FrmLayerControl(GSOGlobeControl ctl1,GSOGlobeControl ctl2) { @@ -25,14 +26,14 @@ globeControl2 = ctl2; } - private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) - { - treeNode=new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - } +// private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) +// { +// treeNode=new TreeNode(); +// treeNode.ImageIndex = 0; +// treeNode.SelectedImageIndex = 0; +// treeNode.Checked = false; +// treeNode.Text = strTreeNodeText; +// } // private void initTreeView() // { @@ -51,234 +52,258 @@ // layerTree2.Nodes.Add(terrainManagerNode); // } - #region wxl重构树形结构代码 + + - private TreeNode treeNode(string strTreeNodeText) - { - TreeNode treeNode = new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - return treeNode; - } -// private void appendToParent(TreeNodeCollection treeNodeCollection, ) - #endregion - private void initTreeView() +// private void initNode(string nodeName) +// { +// TreeNode nodeGroupElse1 = new TreeNode(); +// nodeGroupElse1.Text = nodeName; +// layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); +// +// TreeNode nodeGroupElse = new TreeNode(); +// nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; +// layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); +// } + +// private void initTreeNode(XmlNodeList Params) +// { +// foreach (XmlNode paramsNode in Params) //layers +// { +// foreach (XmlNode layerNode in paramsNode) //layer +// { +// initNode(layerNode.Attributes["label"].Value); +// } +// } +// +// initNode("基础图层"); +// initNode("其他"); +// } + +// private void FrmLayerControl_Load(object sender, EventArgs e) +// { +// +// initTreeView(); +// try +// { +// XmlDocument doc = new XmlDocument(); +// doc.Load(Application.StartupPath + "\\双屏设置.xml"); +// XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// +// initTreeNode(Params); +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// +// RefreshLayerAndTerrainTree(); +// } + private void FrmLayerControl_Load(object sender, EventArgs e) { layerTree1.Nodes.Clear(); layerTree2.Nodes.Clear(); - - //加载layertree2 - initLayerTree(out layerManagerNode1, "图层管理"); - layerTree1.Nodes.Add(layerManagerNode1); - initLayerTree(out terrainManagerNode1, "地形管理"); - layerTree1.Nodes.Add(terrainManagerNode1); - - initLayerTree(out layerManagerNode, "图层管理"); - layerTree2.Nodes.Add(layerManagerNode); - initLayerTree(out terrainManagerNode, "地形管理"); - layerTree2.Nodes.Add(terrainManagerNode); + TreeUtils.InitLayerTree(globeControl1, layerTree1, "实测数据"); + TreeUtils.InitLayerTree(globeControl2, layerTree2, "施工数据"); } - private void initNode(string nodeName) - { - TreeNode nodeGroupElse1 = new TreeNode(); - nodeGroupElse1.Text = nodeName; - layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); + #region wxl重构树形结构代码 - TreeNode nodeGroupElse = new TreeNode(); - nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; - layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); - } + /// + /// 构造tree,最多解析三层,可放在工具类中 - private void initTreeNode(XmlNodeList Params) - { - foreach (XmlNode paramsNode in Params) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - initNode(layerNode.Attributes["label"].Value); - } - } + /// 所属地球 + /// 要加载的树 + /// 数据来源,实测数据/施工数据/规划数据/红线数据,为空则展示全部 +// private void initTree(GSOGlobeControl gsoGlobeControl,TreeView treeView, string viewDatasrc) +// { +// treeView.Nodes.Clear(); +// LayerConfig layerConfig = Utility.layerConfig; +// List datasrcs = layerConfig.datasrcs; +// foreach (DataSrc datasrc in datasrcs) +// { +// if (viewDatasrc != null && !viewDatasrc.Trim().Equals("") && !datasrc.label.Equals(viewDatasrc)) continue; +// TreeNode rootNode = treeView.Nodes.Add(datasrc.label); +// List layerTypes = datasrc.layertypes; +// foreach (LayerType layerType in layerTypes) +// { +// TreeNode secNode = rootNode.Nodes.Add(layerType.label); +// List layers = layerType.layers; +// foreach (Layer layer in layers) +// { +// GSOLayer gsoLayer = gsoGlobeControl.Globe.Layers.GetLayerByCaption(layer.layer); +// if (gsoLayer == null) continue;//将不存在的去除 +// TreeNode node = new TreeNode(); +// node.Tag = gsoLayer; +// node.Text = layer.label; +// node.Checked = gsoLayer.Visible; +// if (gsoLayer.Visible) +// { +// secNode.Checked = true; +// rootNode.Checked = true; +// } +// secNode.Nodes.Add(node); +// } +// } +// } +// } - initNode("基础图层"); - initNode("其他"); - } + #endregion - private void FrmLayerControl_Load(object sender, EventArgs e) - { - initTreeView(); - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(Application.StartupPath + "\\双屏设置.xml"); - XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, +// TreeView layerTree) +// { +// try +// { +// for (int i = 0; i < nLayerCount; i++) +// { +// GSOLayer layer = globcontrol.Globe.Layers[i]; +// if (layer == null) continue; +// string layerName = layer.Name; +// TreeNode node = new TreeNode(); +// node.Tag = layer; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = layer.Caption; +// node.Checked = layer.Visible; +// +// bool isContains = false; +// for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) +// { +// if (!layerName.Contains("fttp:")) +// { +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || +// layerName.Contains("施工") || +// layerName.Contains("规划")) continue; +// break; +// case "layerTree2": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[j].Nodes.Add(node); +// isContains = true; +// break; +// } +// else +// { +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); +// isContains = true; +// break; +// } +// } +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || +// layerName.Contains("标注") || +// isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || +// layerName.Contains("景观") || layerName.Contains("红线")) +// continue; +// break; +// case "layerTree2": +// if (isContains != false || layerName.Contains("tempLgdData2")) +// continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); +// } +// +// for (int i = 0; i < nTerrainCount; i++) +// { +// GSOTerrain terrain = globcontrol.Globe.Terrains[i]; +// if (terrain == null) continue; +// TreeNode node = new TreeNode(); +// node.Tag = terrain; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = terrain.Caption; +// node.Checked = terrain.Visible; +// switch (layerTree.Name) +// { +// case "layerTree1": +// terrainManagerNode1.Nodes.Add(node); +// break; +// case "layerTree2": +// terrainManagerNode.Nodes.Add(node); +// break; +// default: +// break; +// } +// } +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// } - initTreeNode(Params); - } - catch (Exception ex) - { - LogError.PublishError(ex); - } +// private void initTreeNodeCheckedStatus(TreeView layerTreeView) +// { +// //节点选中状态控制 +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// if (node.Checked != true) continue; +// layerTreeView.Nodes[0].Checked = true; +// break; +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOTerrain layer = childNode.Tag as GSOTerrain; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// } - RefreshLayerAndTerrainTree(); - } - - private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, - TreeView layerTree) - { - try - { - for (int i = 0; i < nLayerCount; i++) - { - GSOLayer layer = globcontrol.Globe.Layers[i]; - if (layer == null) continue; - string layerName = layer.Name; - TreeNode node = new TreeNode(); - node.Tag = layer; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = layer.Caption; - node.Checked = layer.Visible; - - bool isContains = false; - for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) - { - if (!layerName.Contains("fttp:")) - { - switch (layerTree.Name) - { - case "layerTree1": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || - layerName.Contains("施工") || - layerName.Contains("规划")) continue; - break; - case "layerTree2": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[j].Nodes.Add(node); - isContains = true; - break; - } - else - { - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); - isContains = true; - break; - } - } - switch (layerTree.Name) - { - case "layerTree1": - if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || - layerName.Contains("标注") || - isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || - layerName.Contains("景观") || layerName.Contains("红线")) - continue; - break; - case "layerTree2": - if (isContains != false || layerName.Contains("tempLgdData2")) - continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); - } - - for (int i = 0; i < nTerrainCount; i++) - { - GSOTerrain terrain = globcontrol.Globe.Terrains[i]; - if (terrain == null) continue; - TreeNode node = new TreeNode(); - node.Tag = terrain; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = terrain.Caption; - node.Checked = terrain.Visible; - switch (layerTree.Name) - { - case "layerTree1": - terrainManagerNode1.Nodes.Add(node); - break; - case "layerTree2": - terrainManagerNode.Nodes.Add(node); - break; - default: - break; - } - } - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - - private void initTreeNodeCheckedStatus(TreeView layerTreeView) - { - //节点选中状态控制 - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - if (node.Checked != true) continue; - layerTreeView.Nodes[0].Checked = true; - break; - } - - foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOTerrain layer = childNode.Tag as GSOTerrain; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - } - - void exPandTreeNode() - { - layerManagerNode1.Expand(); - terrainManagerNode1.Expand(); - layerManagerNode.Expand(); - terrainManagerNode.Expand(); - } +// void exPandTreeNode() +// { +// layerManagerNode1.Expand(); +// terrainManagerNode1.Expand(); +// layerManagerNode.Expand(); +// terrainManagerNode.Expand(); +// } /// /// 刷新节点树 /// - private void RefreshLayerAndTerrainTree() - { - int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 - int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 - addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); - initTreeNodeCheckedStatus(layerTree1); - - int nLayerCount = globeControl2.Globe.Layers.Count; - int nTerrainCount = globeControl2.Globe.Terrains.Count; - addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); - initTreeNodeCheckedStatus(layerTree2); - - // 展开 - exPandTreeNode(); - } +// private void RefreshLayerAndTerrainTree() +// { +// int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 +// int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 +// addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); +// initTreeNodeCheckedStatus(layerTree1); +// +// int nLayerCount = globeControl2.Globe.Layers.Count; +// int nTerrainCount = globeControl2.Globe.Terrains.Count; +// addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); +// initTreeNodeCheckedStatus(layerTree2); +// +// // 展开 +// exPandTreeNode(); +// } /// /// 节点树复选框选中状态改变事件处理 @@ -289,144 +314,132 @@ { if (e.Action != TreeViewAction.Unknown) { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } + TreeUtils.TreeNodeCheckedChange(globeControl2,e.Node); + } + } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree2(e.Node, e.Node.Checked); + private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) + { + if (e.Action != TreeViewAction.Unknown) + { + TreeUtils.TreeNodeCheckedChange(globeControl1, e.Node); } } + + +// private void layerTree2_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree2(e.Node, e.Node.Checked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree1(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree1(childNode, isChecked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree2(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree2(childNode, isChecked); +// } +// } /// /// 节点树选中状态改变事件 /// /// /// - private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) - { - if (e.Action != TreeViewAction.Unknown) - { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } +// private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree1(e.Node, e.Node.Checked); +// } +// } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree1(e.Node, e.Node.Checked); - } - } - /// - /// 改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 - /// - /// - private void CheckParentNode(TreeNode curNode) - { - bool bChecked = false; - - if (curNode.Parent != null) - { - foreach (TreeNode node in curNode.Parent.Nodes) - { - if (node.Checked) - { - bChecked = true; - break; - } - } - if (bChecked) - { - curNode.Parent.Checked = true; - CheckParentNode(curNode.Parent); - } - else - { - curNode.Parent.Checked = false; - CheckParentNode(curNode.Parent); - } - } - } } } diff --git a/FrmMetadata.cs b/FrmMetadata.cs index 4d0d5cb..bb7c46c 100644 --- a/FrmMetadata.cs +++ b/FrmMetadata.cs @@ -12,12 +12,8 @@ { public partial class FrmMetadata : Office2007Form { - List pipelineLayerNames = new List();//线图层名称 - List workwellLayerNames = new List();//工井图层名称 - List valueLayerNames = new List();//阀门图层名称 - List instrumenLayerNames = new List();//附属物图层名称 - string filename = Utility.filename; - DataSet dataSet = new DataSet(); + + bool selectedLayer; public FrmMetadata() @@ -25,308 +21,33 @@ InitializeComponent(); loadTreeView(layerTree); } - private void FrmMetadata_Load(object sender, EventArgs e) - { - //this.ntLblC.Text = "nn"; - // loadTreeView(layerTree); - } private void loadTreeView(TreeView tv)//构建图层树 { - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - //tv.ShowPlusMinus = false; - - //tv.Nodes.Clear(); - tv.ShowLines = true; - // tv.ImageList = imageList1; - tv.CheckBoxes = false; - #region 三级 - - //foreach (XmlNode paramsNode in Params1) //layers - //{ - // foreach (XmlNode layerNode in paramsNode) //layer - // { - // TreeNode nodelayer = new TreeNode(); - // string layerName = layerNode.Attributes["label"].Value; - // nodelayer.Text = layerName; - - // if (layerNode.HasChildNodes != false) - // { - // tv.Nodes.Add(nodelayer); - // foreach (XmlNode layerchildNode in layerNode) //layerchild - // { - // if (layerchildNode.Name == "layerchild") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["type"].Value; - // string layerchildName = layerchildNode.Attributes["label"].Value; - // if (layerType == "locaserver") - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - - // } - // else - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // if (layerchildNode.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = boollayer; - // nodelayer.Nodes.Add(nodelayerchild); - // } - // } - // else if (layerchildNode.Name == "layertype") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["label"].Value; - // nodelayerchild.Text = layerType; - // nodelayerchild.Tag = layerType; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - // if (layerchildNode.HasChildNodes == true) - // { - // foreach (XmlNode childNodeLayer in layerchildNode) - // { - // TreeNode nodelayerchild1 = new TreeNode(); - // string layerName1 = childNodeLayer.Attributes["layer"].Value; - // string layerchildName = childNodeLayer.Attributes["label"].Value; - // string layerType1 = childNodeLayer.Attributes["type"].Value; - // if (childNodeLayer.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild1.Text = layerchildName; - // nodelayerchild1.Tag = layerType1 + "|" + layerName1; - // nodelayerchild1.Checked = boollayer; - // nodelayerchild.Nodes.Add(nodelayerchild1); - // } - // } - // } - - // } - // } - // else - // { - // tv.Nodes.Add(nodelayer); - // } - // } - - //} - - #endregion - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - TreeNode nodelayer = new TreeNode(); - string layerName = layerNode.Attributes["label"].Value; - nodelayer.Text = layerName; - - if (layerNode.HasChildNodes) - { - tv.Nodes.Add(nodelayer); - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - if (layerchildNode.Name == "layerchild") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["type"].Value; - string layerchildName = layerchildNode.Attributes["label"].Value; - if (layerType == "locaserver") - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - - } - else - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - if (layerchildNode.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - //nodelayerchild.Checked = boollayer; - nodelayer.Nodes.Add(nodelayerchild); - } - } - else if (layerchildNode.Name == "layertype") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["label"].Value; - nodelayerchild.Text = layerType; - nodelayerchild.Tag = layerType; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode) - { - if (childNodeLayer.HasChildNodes) - { - TreeNode nodelayerchild2 = new TreeNode(); - string layer = childNodeLayer.Attributes["label"].Value; - nodelayerchild2.Text = layer; - nodelayerchild2.Tag = layer; - nodelayerchild2.Checked = true; - nodelayerchild.Nodes.Add(nodelayerchild2); - foreach (XmlNode n in childNodeLayer) - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = n.Attributes["layer"].Value; - string layerchildName = n.Attributes["label"].Value; - string layerType1 = n.Attributes["type"].Value; - if (n.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (n.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (n.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (n.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild2.Nodes.Add(nodelayerchild1); - - } - } - else - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = childNodeLayer.Attributes["layer"].Value; - string layerchildName = childNodeLayer.Attributes["label"].Value; - string layerType1 = childNodeLayer.Attributes["type"].Value; - if (childNodeLayer.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild.Nodes.Add(nodelayerchild1); - - } - } - } - } - - } - } - else - { - tv.Nodes.Add(nodelayer); - } - } - - } - if (tv.Nodes.Count > 0) - { - //tv.Nodes[0].Expand(); - if (tv.Nodes.Count > 0) - { - foreach (TreeNode node in tv.Nodes) - { - //node.Expand(); - } - } - } - //tv.ExpandAll(); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } + //tv.ShowPlusMinus = false; + //tv.Nodes.Clear(); + // tv.ImageList = imageList1; + tv.ShowLines = true; + tv.CheckBoxes = false; + TreeUtils.InitLayerTree(null, tv, null); } - + /// + /// 点击父节点则展开,点击子节点则编辑元数据 + /// + /// + /// private void layerTree_AfterSelect(object sender, TreeViewEventArgs e) { - String layername = layerTree.SelectedNode.Text; - if (layerTree.SelectedNode.GetNodeCount(true) == 0) { - searchLayerInfo(layername); - - selectedLayer = true; - clearBtn.Hide(); - completeBtn.Hide(); + String layername = e.Node.Text; + if (e.Node.GetNodeCount(true) != 0) + { //点击父节点,则展开 + e.Node.Expand(); + return; } + searchLayerInfo(layername); + selectedLayer = true; + clearBtn.Hide(); + completeBtn.Hide(); } //查询元数据 private void searchLayerInfo(String layername) { @@ -335,8 +56,6 @@ + " casic_metadatalayer where casic_metadatacontent.\"LAYERID\" = casic_metadatalayer.\"LAYERID\" and casic_metadatalayer.\"LAYERNAME\"='" + layername+"'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; - if (table != null && table.Rows.Count > 0) { groupBox1.Text = layername; @@ -400,8 +119,6 @@ //判断此时layerTree有没有选中的图层 if (selectedLayer)//有选中的图层,获得其名 { - string name = layerTree.SelectedNode.Text; - OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "支持格式(*.xml)|*.xml|XML数据(*.xml)|"; dlg.Multiselect = true; @@ -419,31 +136,24 @@ //读入元数据 private void AddXMLMDdata(string strFilePath) { - try - { - dataSet.Clear(); //清空数据集中的内容 - dataSet.ReadXml(strFilePath); //读取XML文件中的内容 + DataSet dataSet = new DataSet(); + dataSet.ReadXml(strFilePath); //读取XML文件中的内容 - //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); - string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); - string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); - string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); - string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); + //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); + string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); + string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); + string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); + string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); - //this.titleLbl.Text = attrtitle; - consLblC.Text = attrcons; - descLblC.Text = attrdesc; - authorLblC.Text = attrauthor; - ntLblC.Text = attrnt; - //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); + //this.titleLbl.Text = attrtitle; + consLblC.Text = attrcons; + descLblC.Text = attrdesc; + authorLblC.Text = attrauthor; + ntLblC.Text = attrnt; + //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); - completeBtn.Visible = true; - //this.clearBtn.Visible = true; - } - catch (Exception e) - { - - } + completeBtn.Visible = true; + //this.clearBtn.Visible = true; } //新建/编辑元数据 private void editBtn_Click(object sender, EventArgs e) @@ -509,11 +219,7 @@ string sql = "select \"LAYERID\" from casic_metadatalayer where \"LAYERNAME\" = '" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - if (table != null && table.Rows.Count > 0)//已有该图层,属于编辑 - { - return false; - } - return true; + return table == null || table.Rows.Count <= 0; } //保存元数据 private void saveData(String method,String layername,String cons,String desc,String author,String nt) { @@ -539,17 +245,16 @@ string insertSQL = "insert into casic_metadatalayer values ('" + layerid + "','" + layername + "')";//+ string insertSQL2 = "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','" + desc + "','" + author + "','" + nt + "')"; // "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','"+desc+"','"+author+"','"+nt+"')"; - if ((OledbHelper.sqlExecuteNonQuery(insertSQL) > 0)&&(OledbHelper.sqlExecuteNonQuery(insertSQL2)>0)) - { - MessageBox.Show("保存元数据成功!"); + if ((OledbHelper.sqlExecuteNonQuery(insertSQL) <= 0) || + (OledbHelper.sqlExecuteNonQuery(insertSQL2) <= 0)) return; + MessageBox.Show("保存元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } else { //更新 string layeridSQL = "select layerid from casic_metadatalayer where LAYERNAME='"+layername+"'"; @@ -561,16 +266,14 @@ + "',casic_metadatacontent.MDAUTHOR ='" + author.Trim() + "',casic_metadatacontent.NT ='" + nt.Trim() + "' where casic_metadatacontent.LAYERID='" + layerid + "'"; - if (OledbHelper.sqlExecuteNonQuery(updateSQL) > 0) - { - MessageBox.Show("更新元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + if (OledbHelper.sqlExecuteNonQuery(updateSQL) <= 0) return; + MessageBox.Show("更新元数据成功!"); + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } } diff --git a/ClassDoubleScreenCompare.cs b/ClassDoubleScreenCompare.cs new file mode 100644 index 0000000..f2935da --- /dev/null +++ b/ClassDoubleScreenCompare.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using GeoScene.Globe; +using GeoScene.Data; +using GeoScene.Engine; +using System.Drawing; + +namespace Cyberpipe +{ + class ClassDoubleScreenCompare + { + public static GSOFeature getSameFeatureFromOtherGlobe(GSOFeature feature, + GSOGlobeControl globeControl1, GSOGlobeControl globeControl2,double bufferWidth,GSOGeoPolygon3D resPolygon) + { + GSOLayer layer; + GSOFeatures features = new GSOFeatures(); + + if (!feature.Dataset.Caption.StartsWith("施工")) + { + layer = feature.Dataset.Caption == "供电管线" + ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") + : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(feature, fs[i], globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + else + { + layer = feature.Dataset.Caption == "施工电力管线" + ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") + : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(fs[i], feature, globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + + return getMostSimilarFeatureFromFeatures(feature, features); + + } + + + private static GSOFeature getMostSimilarFeatureFromFeatures(GSOFeature feature, GSOFeatures features) + { + double maxLength = 0; + GSOFeature f = new GSOFeature(); + GSOGeoPolyline3D line = feature.Geometry as GSOGeoPolyline3D; + + if (features.Length == 0) return null; + if (features.Length == 1) + { + f = features[0]; + f.HighLight = true; + } + else + { + for (int m = 0; m < features.Length; m++) + { + GSOGeoPolyline3D tempSGLine = features[m].Geometry as GSOGeoPolyline3D; + + double tempLength = tempSGLine.GetSpaceLength(false, 6378137); + double lengthAbs = Math.Abs(tempLength - line.GetSpaceLength(false, 6378137)); + if (m == 0) + { + f = features[0]; + f.HighLight = true; + maxLength = lengthAbs; + } + else if (lengthAbs < maxLength) + { + f = features[m]; + f.HighLight = true; + maxLength = lengthAbs; + } + } + } + return f; + } + + private static bool isSameFeature(GSOFeature feature1, GSOFeature feature2, GSOLayer layer, double bufferWidth) + { + GSOGeoPolyline3D line = feature1.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = line.CreateBuffer(bufferWidth * 2, true, 5, true, false); + + if (bufferPolygon == null) return false; + + GSOFeatures featuresInLayer = layer.FindFeaturesInPolygon(bufferPolygon, true); + + if (featuresInLayer == null || featuresInLayer.Length <= 0) + return false; + + for (int i = 0; i < featuresInLayer.Length; i++) + { + if (featuresInLayer[i].Name == feature2.Name) + { + return true; + break; + } + } + return false; + } + + private static bool isSimilarFeature(GSOFeature srcFeature, GSOFeature dscFeature, + GSOGlobeControl globeControl1,GSOGlobeControl globeControl2,double bufferWidth) + { + GSOLayer dscLayer = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); + GSOLayer srcLayer = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); + + if (!isSameFeature(srcFeature, dscFeature, dscLayer, bufferWidth) + && !isSameFeature(dscFeature, srcFeature, srcLayer, bufferWidth)) + return false; + return true; + } + + public static void CalculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2, + out double horizonDistance, out double verticalDistance, GSOGlobeControl globeControl1, GSOGlobeControl globeControl2) + { + GSOPoint3d pntIntersect1 = new GSOPoint3d(); + GSOPoint3d pntIntersect2 = new GSOPoint3d(); + GSOPoint3d pntProIntersect1 = new GSOPoint3d(); + GSOPoint3d pntProIntersect2 = new GSOPoint3d(); + + verticalDistance = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, verticalDistance, true, "垂直", globeControl1, globeControl2); + + horizonDistance = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, horizonDistance, true, "水平", globeControl1, globeControl2); + + } + + private static GSOPoint3d LabelDistance(GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, + double distance, bool markerVisible, string label,GSOGlobeControl globeControl1,GSOGlobeControl globeControl2) + { + if (pntIntersect1 == null || pntIntersect2 == null) + return new GSOPoint3d(); + GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); + GSOPoint3ds point3ds = new GSOPoint3ds(); + point3ds.Add(pntIntersect1); + point3ds.Add(pntIntersect2); + disline.AddPart(point3ds); + + GSOGeoMarker dismarker = new GSOGeoMarker(); + GSOFeature marker = null; + GSOFeature line = null; + createLineStyle(out marker, out line, disline, pntIntersect1, pntIntersect2, distance, label, dismarker); + + line.Visible = marker.Visible = markerVisible; + globeControl1.Globe.MemoryLayer.AddFeature(line); + globeControl1.Globe.MemoryLayer.AddFeature(marker); + + globeControl2.Globe.MemoryLayer.AddFeature(line); + globeControl2.Globe.MemoryLayer.AddFeature(marker); + + return dismarker.Position; + } + + private static void createLineStyle(out GSOFeature marker, out GSOFeature line, GSOGeoPolyline3D disline, + GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) + { + GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 + style.LineColor = Color.Red; + style.LineWidth = 5; //设置线的宽度为5 + style.VertexVisible = true; //显示线的节点 + disline.Style = style; //把风格添加到线上 + disline.AltitudeMode = EnumAltitudeMode.Absolute; + line = new GSOFeature(); + line.Geometry = disline; + + dismarker.X = pntIntersect1.X; + dismarker.Y = pntIntersect1.Y; + dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; + dismarker.Text = label + distance.ToString("0.00") + "米"; + dismarker.AltitudeMode = EnumAltitudeMode.Absolute; + + GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); + GSOTextStyle styleText = new GSOTextStyle(); + styleText.IsSizeFixed = true; + styleText.ForeColor = Color.Red; + styleText.FontSize = 20; + styleMarker.TextStyle = styleText; + dismarker.Style = styleMarker; + + marker = new GSOFeature(); + marker.Geometry = dismarker; + } + + } +} diff --git a/Cyberpipe.csproj b/Cyberpipe.csproj index d8aa9c8..bcce54d 100644 --- a/Cyberpipe.csproj +++ b/Cyberpipe.csproj @@ -203,6 +203,7 @@ + @@ -1143,6 +1144,7 @@ SysRescInfoManager.cs + True True diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 123caf1..2c45db6 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -258,42 +258,25 @@ for (int i = 0; i < scLayer.GetAllFeatures().Length; i++) { GSOFeature scFeature = scLayer.GetAt(i); - if (scFeature.GetFieldAsString("所属道路") == road) + if (scFeature.GetFieldAsString("所属道路") != road) continue; + GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + + GSOFeature sgFeature = null; + GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); + + //**判断同一个Feature + if (sgFeatures.Length >= 1) { - GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); - GSOFeature sgFeature = null; - GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); - - //**判断同一个Feature - if (sgFeatures.Length >= 1) + if (sgFeature != null) { - sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); + GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; + double horizonDistance, verticalDistance; - if (sgFeature != null) - { - GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; - double horizonDistance, verticalDistance; - - CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); - GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); - } - else - { - scFeature.HighLight = true; - DataRow dr = dt.NewRow(); - dr[0] = scLayer.Caption; - dr[1] = scFeature.GetFieldAsString("编号"); - dr[2] = sgLayer.Caption; - dr[3] = "无"; - dr[4] = "无"; - dr[5] = "0.02"; - dr[6] = "无"; - dr[7] = "0.02"; - dr[8] = "未设计管段"; - dt.Rows.Add(dr); - } + CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); + GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); } else { @@ -311,6 +294,21 @@ dt.Rows.Add(dr); } } + else + { + scFeature.HighLight = true; + DataRow dr = dt.NewRow(); + dr[0] = scLayer.Caption; + dr[1] = scFeature.GetFieldAsString("编号"); + dr[2] = sgLayer.Caption; + dr[3] = "无"; + dr[4] = "无"; + dr[5] = "0.02"; + dr[6] = "无"; + dr[7] = "0.02"; + dr[8] = "未设计管段"; + dt.Rows.Add(dr); + } } } /// diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index 53946c0..fe32265 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -4,7 +4,7 @@ using GeoScene.Globe; namespace Cyberpipe -{ +{ //本类作用为:辅助GlobalControl上Feature的统计分析工具类 class FeatureStatisticsService { /// @@ -60,8 +60,8 @@ /// /// /// - /// - /// + /// + /// /// /// public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) @@ -74,6 +74,7 @@ for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; double length = line.GetSpaceLength(true, 6378137); totalLength += length; ncount += 1; @@ -114,7 +115,7 @@ for (int i = 0; i < feats.Length; i++) { double radius = feats[i].GetFieldAsDouble(fieldName); - if (radius >= min && radius <= max) + if (radius >= minValue && radius <= maxValue) { result.Add(feats[i]); } @@ -148,23 +149,22 @@ lstDiameter.Sort(); if (lstDiameter.Count > 0) { - for (int m = 0; m < lstDiameter.Count; m++) + foreach (float diameter in lstDiameter) { double totalLength = 0.00; int ncount = 0; for (int j = 0; j < feats.Length; j++) { - if (feats[j].GetFieldAsFloat("管径_毫米") == lstDiameter[m]) - { - GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } + if (Math.Abs(feats[j].GetFieldAsFloat("管径_毫米") - diameter) > 0.00001) continue; + GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = lstDiameter[m].ToString(); + featuresClass.groupFieldValue = diameter.ToString(); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -191,13 +191,13 @@ //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); - for (int j = 0; j < accessStrs.Length; j++) + foreach (string accssname in accessStrs) { - GSOFeatures feats = null; - int ncount = 0; + GSOFeatures feats; + int ncount; if (polygon == null) { - feats = flayer.GetFeatureByFieldValue("附属物名称", accessStrs[j], true); + feats = flayer.GetFeatureByFieldValue("附属物名称", accssname, true); ncount = feats.Length; } else @@ -207,14 +207,14 @@ //过滤 for (int n = 0; n < feats.Length; n++) { - if (feats[n].GetFieldAsString("附属物名称").Contains(accessStrs[j])) newfeats.Add(feats[n]); + if (feats[n].GetFieldAsString("附属物名称").Contains(accssname)) newfeats.Add(feats[n]); } ncount = newfeats.Length; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); - featuresClass.layerName = accessStrs[j]; + featuresClass.layerName = accssname; featuresClass.ncount = ncount; result.Add(featuresClass); @@ -303,6 +303,26 @@ if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); - } + } + + + /// + /// 获取globeControl上选中的管线,如果返回空则没有选中的管线 + /// + /// 地球引擎 + /// 返回一根线 + public static GSOFeature GetSelectedPipeline(GSOGlobeControl globeControl) + { + GSOFeature resFeature; + if (globeControl.Globe.SelObjectCount < 1) return null; + GSOLayer resLayer; + globeControl.Globe.GetSelectObject(0, out resFeature, out resLayer); + if (resFeature == null) return null; + + GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; + if (line1 == null) return null; + GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; + return pipeStyle1 == null ? null : resFeature; + } } } diff --git a/FrmCompareFeature.cs b/FrmCompareFeature.cs index a05e8e7..ac622c4 100644 --- a/FrmCompareFeature.cs +++ b/FrmCompareFeature.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Data; using System.Drawing; using System.Windows.Forms; @@ -11,26 +10,16 @@ { public partial class FrmCompareFeature : Office2007Form { - GSOFeature srcFeature; - GSOFeature dscFeature; - GSOGlobeControl globeControl1; - GSOGlobeControl globeControl2; - bool isSamePolyline; - - GSOLayer layerTemp; - GSOLayer layerTemp2; - GSOFeature new_feat; + private GSOFeature srcFeature, dscFeature; + private GSOGlobeControl globeControl1, globeControl2; GSOGeoPolygon3D resPolygon; - static FrmCompareFeature frm; - public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2, int width) + public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, int width) { if (frm == null) { - frm = new FrmCompareFeature(_globeControl1, _globeControl2, _layerTemp, _layerTemp2); - + frm = new FrmCompareFeature(_globeControl1, _globeControl2); frm.Location = new Point((width - frm.Width)/2, 50); frm.Show(_globeControl1.Parent); } @@ -41,8 +30,7 @@ } } - public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2) + public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2) { globeControl1 = _globeControl1; globeControl2 = _globeControl2; @@ -50,99 +38,35 @@ globeControl1.Globe.Action = EnumAction3D.SelectObject; globeControl2.Globe.Action = EnumAction3D.SelectObject; - layerTemp = _layerTemp; - layerTemp2 = _layerTemp2; globeControl1.MouseClick += globeControl1_MouseClick; globeControl2.MouseClick += globeControl2_MouseClick; } + private void invalParam() + { + if (srcFeature == null || dscFeature == null) + { + MessageBox.Show("请选择要对比的管段!", "提示"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) + { + MessageBox.Show("请选择同种类型图层!"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type || + srcFeature.Geometry.Type != EnumGeometryType.GeoPolyline3D) + return; + } + private void buttonAnalysis_Click(object sender, EventArgs e) { + invalParam(); + dataGridViewX1.DataSource = null; - - double bufferWidth = Convert.ToDouble(textBox1.Text); - - if (srcFeature == null || dscFeature == null) - MessageBox.Show("请选择要对比的管段!", "提示"); - else - { - if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) - MessageBox.Show("请选择同种类型图层!"); - else if (srcFeature.Geometry.Type == dscFeature.Geometry.Type && - srcFeature.Geometry.Type == EnumGeometryType.GeoPolyline3D) - { - lineLayerCompare(srcFeature, dscFeature, bufferWidth); - if (!isSamePolyline) - MessageBox.Show("实测管段与施工管段非同一条管段,请选择同一管段进行比较!", "提示"); - else - { - lineFeatureCompare(srcFeature, dscFeature); - globeControl1.Globe.Action = EnumAction3D.ActionNull; - globeControl2.Globe.Action = EnumAction3D.ActionNull; - } - } - else - MessageBox.Show("无法处理该类型图层!"); - } + lineFeatureCompare(srcFeature, dscFeature); } - - /// - /// 在容差范围内判断是否同一根管段 - /// - /// - /// - /// - /// - private bool lineLayerCompare(GSOFeature srcFeature, GSOFeature dscFeature, double bufferWidth) - { - isSamePolyline = false; - - GSOGeoPolyline3D srcLine = srcFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D srcBufferPolygon = srcLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer dsc = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); - - if (srcBufferPolygon != null) - { - GSOFeatures featuresInSrcLayer = dsc.FindFeaturesInPolygon(srcBufferPolygon, true); - - if (featuresInSrcLayer != null && featuresInSrcLayer.Length > 0) - { - for (int i = 0; i < featuresInSrcLayer.Length; i++) - { - if (featuresInSrcLayer[i].Name == dscFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D dscBufferPolygon = dscLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer src = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); - - if (dscBufferPolygon != null) - { - GSOFeatures featuresInDscLayer = src.FindFeaturesInPolygon(dscBufferPolygon, true); - - if (featuresInDscLayer != null && featuresInDscLayer.Length > 0) - { - for (int i = 0; i < featuresInDscLayer.Length; i++) - { - if (featuresInDscLayer[i].Name == srcFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - return isSamePolyline; - } - /// /// 分析两根管段的具体差异 /// @@ -156,8 +80,10 @@ GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; double dscLineLength = dscLine.GetSpaceLength(false, 6378137); - double horizonDistance = calculateDistance(srcLine, dscLine,false); - double verticalDistance = calculateDistance(srcLine, dscLine,true); + double horizonDistance, verticalDistance; + + ClassDoubleScreenCompare.CalculateDistance(srcLine, dscLine, out horizonDistance, + out verticalDistance,globeControl1,globeControl2); DataTable dt = new DataTable(); dt.Columns.Add("数据名称"); @@ -189,6 +115,98 @@ dt.Rows.Add(dscRow); dataGridViewX1.DataSource = dt; + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) + { + globeControl1.Globe.MemoryLayer.RemoveAllFeature(); + globeControl2.Globe.MemoryLayer.RemoveAllFeature(); + + GSOFeature new_feat = new GSOFeature(); + resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); + resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; + new_feat.Geometry = resPolygon; + + globeControl1.Globe.MemoryLayer.AddFeature(new_feat); + globeControl2.Globe.MemoryLayer.AddFeature(new_feat); + + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + public static void clearFeatureHighLight(GSOGlobeControl glb) + { + for (int i = 0; i < glb.Globe.Layers.Count; i++) + { + GSOLayer layer = glb.Globe.Layers[i]; + if (!(layer is GSOFeatureLayer)) continue; + GSOFeatures feats = layer.GetAllFeatures(); + for (int j = 0; j < feats.Length; j++) + { + feats[j].HighLight = false; + } + } + } + + void globeControl1_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl1.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl1.Globe.Action != EnumAction3D.SelectObject || + globeControl1.Globe.SelectedObject == null) + return; + GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + srcFeature = globeControl1.Globe.SelectedObject; + dscFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(srcFeature, + globeControl1,globeControl2,bufferWidth,resPolygon); + + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } + + void globeControl2_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl2.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl2.Globe.Action != EnumAction3D.SelectObject || + globeControl2.Globe.SelectedObject == null) + return; + + GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + dscFeature = globeControl2.Globe.SelectedObject; + srcFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(dscFeature, + globeControl1, globeControl2, bufferWidth, resPolygon); + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } private void FrmCompareFeature_FormClosing(object sender, FormClosingEventArgs e) @@ -198,322 +216,5 @@ frm = null; } - private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) - { - new_feat = new GSOFeature(); - resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); - resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; - new_feat.Geometry = resPolygon; - - layerTemp.AddFeature(new_feat); - layerTemp2.AddFeature(new_feat); - globeControl1.Refresh(); - globeControl2.Refresh(); - } - - private GSOLayer getSameLayer(GSOFeature feature) - { - GSOLayer layer = null; - if (!feature.Dataset.Caption.StartsWith("施工")) - { - layer = feature.Dataset.Caption == "供电管线" - ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") - : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); - } - else - { - layer = feature.Dataset.Caption == "施工电力管线" - ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") - : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); - } - - return layer; - } - - /// - /// 地球1中点击地球2中同步添加缓冲区 - /// - /// - /// - void globeControl1_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl1.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl1.Globe.Action == EnumAction3D.SelectObject && - globeControl1.Globe.SelectedObject != null) - { - GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - addPologyToGlobeControl(line, bufferWidth); - } - - srcFeature = globeControl1.Globe.SelectedObject; - GSOLayer layers = getSameLayer(srcFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = srcFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(srcFeature, features[i], Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - listFeatures.Add(features[i]); - } - calculate(out maxLength, out dscFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - /// - /// 地球2中点击地球1中同步添加缓冲区 - /// - /// - /// - void globeControl2_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl2.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl2.Globe.Action != EnumAction3D.SelectObject || - globeControl2.Globe.SelectedObject == null) - return; - else - { - GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - - addPologyToGlobeControl(line, bufferWidth); - } - - dscFeature = globeControl2.Globe.SelectedObject; - //双屏同时选中同一管段 - GSOLayer layers = getSameLayer(dscFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = dscFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(features[i], dscFeature, Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - { - listFeatures.Add(features[i]); - } - } - calculate(out maxLength, out srcFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - private void calculate(out double maxLength, out GSOFeature feature, GSOFeatures listFeatures, - GSOGeoPolyline3D scLine) - { - maxLength = 0; - feature=new GSOFeature(); - if (listFeatures.Length == 0) - feature = null; - else - { - if (listFeatures.Length == 1) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - } - else - { - for (int m = 0; m < listFeatures.Length; m++) - { - GSOGeoPolyline3D tempSGLine = listFeatures[m].Geometry as GSOGeoPolyline3D; - - double tempLength = tempSGLine.GetSpaceLength(false, 6378137); - double lengthAbs = Math.Abs(tempLength - scLine.GetSpaceLength(false, 6378137)); - if (m == 0) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - maxLength = lengthAbs; - } - else if (lengthAbs < maxLength) - { - feature = listFeatures[m]; - listFeatures[m].HighLight = true; - maxLength = lengthAbs; - } - } - } - } - } - - /// - /// 计算距离 - /// - /// - /// - /// - double calculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2,bool isVertical) - { - GSOPoint3d pntIntersect1 = new GSOPoint3d(); - GSOPoint3d pntIntersect2 = new GSOPoint3d(); - GSOPoint3d pntProIntersect1 = new GSOPoint3d(); - GSOPoint3d pntProIntersect2 = new GSOPoint3d(); - double dDist = 0; - if (isVertical) - { - dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "垂直"); - } - else - { - dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "水平"); - } - - return dDist; - } - - /// - /// 清除所有高亮Feature - /// - /// - private void clearFeatureHighLight(GSOGlobeControl glb1,GSOGlobeControl glb2) - { - layerTemp.RemoveAllFeature(); - layerTemp2.RemoveAllFeature(); - //清除gbl1中高亮 - for (int i = 0; i < glb1.Globe.Layers.Count; i++) - { - GSOLayer layer = glb1.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - //清除gbl2中高亮 - for (int i = 0; i < glb2.Globe.Layers.Count; i++) - { - GSOLayer layer = glb2.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - } - - /// - /// 添加标注 - /// - /// - /// - /// - /// - /// - /// - private GSOPoint3d LabelDistance(GSOLayer markerLayer, GSOLayer markerLayer2, - GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, bool markerVisible,string label) - { - if (pntIntersect1 == null || pntIntersect2 == null) - return new GSOPoint3d(); - GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); - GSOPoint3ds point3ds = new GSOPoint3ds(); - point3ds.Add(pntIntersect1); - point3ds.Add(pntIntersect2); - disline.AddPart(point3ds); - - GSOGeoMarker dismarker = new GSOGeoMarker(); - GSOFeature marker = null; - GSOFeature line = null; - createLineStyle(out marker, out line,disline, pntIntersect1, pntIntersect2, distance, label, dismarker); - - line.Visible = marker.Visible = markerVisible; - markerLayer.AddFeature(line); - markerLayer.AddFeature(marker); - - markerLayer2.AddFeature(line); - markerLayer2.AddFeature(marker); - - return dismarker.Position; - } - /// - /// 控制标注和字体的颜色 - /// - /// - /// - /// - /// - /// - /// - /// - /// - private void createLineStyle(out GSOFeature marker,out GSOFeature line,GSOGeoPolyline3D disline, - GSOPoint3d pntIntersect1,GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) - { - GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 - style.LineColor = Color.Red; - style.LineWidth = 5; //设置线的宽度为5 - style.VertexVisible = true; //显示线的节点 - disline.Style = style; //把风格添加到线上 - disline.AltitudeMode = EnumAltitudeMode.Absolute; - line=new GSOFeature(); - line.Geometry = disline; - - dismarker.X = pntIntersect1.X; - dismarker.Y = pntIntersect1.Y; - dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; - dismarker.Text = label + distance.ToString("0.00") + "米"; - dismarker.AltitudeMode = EnumAltitudeMode.Absolute; - - GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); - GSOTextStyle styleText = new GSOTextStyle(); - styleText.IsSizeFixed = true; - styleText.ForeColor = Color.Red; - styleText.FontSize = 20; - styleMarker.TextStyle = styleText; - dismarker.Style = styleMarker; - - marker=new GSOFeature(); - marker.Geometry = dismarker; - } - } } diff --git a/FrmHotFuncStat.cs b/FrmHotFuncStat.cs index 84131ef..f313b20 100644 --- a/FrmHotFuncStat.cs +++ b/FrmHotFuncStat.cs @@ -58,14 +58,11 @@ DataTable table = OledbHelper.QueryTable(sql); - if (table != null) + if (table == null) return; + for (int i = 0; i < table.Rows.Count; i++) { - for (int i = 0; i < table.Rows.Count; i++) - { - userLists.Items.Add(table.Rows[i][0].ToString()); - } + userLists.Items.Add(table.Rows[i][0].ToString()); } - } //统计结果 private void statBtn_Click(object sender, EventArgs e) diff --git a/FrmLayerControl.cs b/FrmLayerControl.cs index 8586041..8fbce97 100644 --- a/FrmLayerControl.cs +++ b/FrmLayerControl.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Windows.Forms; using DevComponents.DotNetBar; using GeoScene.Data; @@ -13,10 +14,10 @@ GSOGlobeControl globeControl1; GSOGlobeControl globeControl2; - TreeNode terrainManagerNode = null; - TreeNode layerManagerNode = null; - TreeNode terrainManagerNode1 = null; - TreeNode layerManagerNode1 = null; +// TreeNode terrainManagerNode = null; +// TreeNode layerManagerNode = null; +// TreeNode terrainManagerNode1 = null; +// TreeNode layerManagerNode1 = null; public FrmLayerControl(GSOGlobeControl ctl1,GSOGlobeControl ctl2) { @@ -25,14 +26,14 @@ globeControl2 = ctl2; } - private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) - { - treeNode=new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - } +// private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) +// { +// treeNode=new TreeNode(); +// treeNode.ImageIndex = 0; +// treeNode.SelectedImageIndex = 0; +// treeNode.Checked = false; +// treeNode.Text = strTreeNodeText; +// } // private void initTreeView() // { @@ -51,234 +52,258 @@ // layerTree2.Nodes.Add(terrainManagerNode); // } - #region wxl重构树形结构代码 + + - private TreeNode treeNode(string strTreeNodeText) - { - TreeNode treeNode = new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - return treeNode; - } -// private void appendToParent(TreeNodeCollection treeNodeCollection, ) - #endregion - private void initTreeView() +// private void initNode(string nodeName) +// { +// TreeNode nodeGroupElse1 = new TreeNode(); +// nodeGroupElse1.Text = nodeName; +// layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); +// +// TreeNode nodeGroupElse = new TreeNode(); +// nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; +// layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); +// } + +// private void initTreeNode(XmlNodeList Params) +// { +// foreach (XmlNode paramsNode in Params) //layers +// { +// foreach (XmlNode layerNode in paramsNode) //layer +// { +// initNode(layerNode.Attributes["label"].Value); +// } +// } +// +// initNode("基础图层"); +// initNode("其他"); +// } + +// private void FrmLayerControl_Load(object sender, EventArgs e) +// { +// +// initTreeView(); +// try +// { +// XmlDocument doc = new XmlDocument(); +// doc.Load(Application.StartupPath + "\\双屏设置.xml"); +// XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// +// initTreeNode(Params); +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// +// RefreshLayerAndTerrainTree(); +// } + private void FrmLayerControl_Load(object sender, EventArgs e) { layerTree1.Nodes.Clear(); layerTree2.Nodes.Clear(); - - //加载layertree2 - initLayerTree(out layerManagerNode1, "图层管理"); - layerTree1.Nodes.Add(layerManagerNode1); - initLayerTree(out terrainManagerNode1, "地形管理"); - layerTree1.Nodes.Add(terrainManagerNode1); - - initLayerTree(out layerManagerNode, "图层管理"); - layerTree2.Nodes.Add(layerManagerNode); - initLayerTree(out terrainManagerNode, "地形管理"); - layerTree2.Nodes.Add(terrainManagerNode); + TreeUtils.InitLayerTree(globeControl1, layerTree1, "实测数据"); + TreeUtils.InitLayerTree(globeControl2, layerTree2, "施工数据"); } - private void initNode(string nodeName) - { - TreeNode nodeGroupElse1 = new TreeNode(); - nodeGroupElse1.Text = nodeName; - layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); + #region wxl重构树形结构代码 - TreeNode nodeGroupElse = new TreeNode(); - nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; - layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); - } + /// + /// 构造tree,最多解析三层,可放在工具类中 - private void initTreeNode(XmlNodeList Params) - { - foreach (XmlNode paramsNode in Params) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - initNode(layerNode.Attributes["label"].Value); - } - } + /// 所属地球 + /// 要加载的树 + /// 数据来源,实测数据/施工数据/规划数据/红线数据,为空则展示全部 +// private void initTree(GSOGlobeControl gsoGlobeControl,TreeView treeView, string viewDatasrc) +// { +// treeView.Nodes.Clear(); +// LayerConfig layerConfig = Utility.layerConfig; +// List datasrcs = layerConfig.datasrcs; +// foreach (DataSrc datasrc in datasrcs) +// { +// if (viewDatasrc != null && !viewDatasrc.Trim().Equals("") && !datasrc.label.Equals(viewDatasrc)) continue; +// TreeNode rootNode = treeView.Nodes.Add(datasrc.label); +// List layerTypes = datasrc.layertypes; +// foreach (LayerType layerType in layerTypes) +// { +// TreeNode secNode = rootNode.Nodes.Add(layerType.label); +// List layers = layerType.layers; +// foreach (Layer layer in layers) +// { +// GSOLayer gsoLayer = gsoGlobeControl.Globe.Layers.GetLayerByCaption(layer.layer); +// if (gsoLayer == null) continue;//将不存在的去除 +// TreeNode node = new TreeNode(); +// node.Tag = gsoLayer; +// node.Text = layer.label; +// node.Checked = gsoLayer.Visible; +// if (gsoLayer.Visible) +// { +// secNode.Checked = true; +// rootNode.Checked = true; +// } +// secNode.Nodes.Add(node); +// } +// } +// } +// } - initNode("基础图层"); - initNode("其他"); - } + #endregion - private void FrmLayerControl_Load(object sender, EventArgs e) - { - initTreeView(); - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(Application.StartupPath + "\\双屏设置.xml"); - XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, +// TreeView layerTree) +// { +// try +// { +// for (int i = 0; i < nLayerCount; i++) +// { +// GSOLayer layer = globcontrol.Globe.Layers[i]; +// if (layer == null) continue; +// string layerName = layer.Name; +// TreeNode node = new TreeNode(); +// node.Tag = layer; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = layer.Caption; +// node.Checked = layer.Visible; +// +// bool isContains = false; +// for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) +// { +// if (!layerName.Contains("fttp:")) +// { +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || +// layerName.Contains("施工") || +// layerName.Contains("规划")) continue; +// break; +// case "layerTree2": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[j].Nodes.Add(node); +// isContains = true; +// break; +// } +// else +// { +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); +// isContains = true; +// break; +// } +// } +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || +// layerName.Contains("标注") || +// isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || +// layerName.Contains("景观") || layerName.Contains("红线")) +// continue; +// break; +// case "layerTree2": +// if (isContains != false || layerName.Contains("tempLgdData2")) +// continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); +// } +// +// for (int i = 0; i < nTerrainCount; i++) +// { +// GSOTerrain terrain = globcontrol.Globe.Terrains[i]; +// if (terrain == null) continue; +// TreeNode node = new TreeNode(); +// node.Tag = terrain; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = terrain.Caption; +// node.Checked = terrain.Visible; +// switch (layerTree.Name) +// { +// case "layerTree1": +// terrainManagerNode1.Nodes.Add(node); +// break; +// case "layerTree2": +// terrainManagerNode.Nodes.Add(node); +// break; +// default: +// break; +// } +// } +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// } - initTreeNode(Params); - } - catch (Exception ex) - { - LogError.PublishError(ex); - } +// private void initTreeNodeCheckedStatus(TreeView layerTreeView) +// { +// //节点选中状态控制 +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// if (node.Checked != true) continue; +// layerTreeView.Nodes[0].Checked = true; +// break; +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOTerrain layer = childNode.Tag as GSOTerrain; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// } - RefreshLayerAndTerrainTree(); - } - - private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, - TreeView layerTree) - { - try - { - for (int i = 0; i < nLayerCount; i++) - { - GSOLayer layer = globcontrol.Globe.Layers[i]; - if (layer == null) continue; - string layerName = layer.Name; - TreeNode node = new TreeNode(); - node.Tag = layer; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = layer.Caption; - node.Checked = layer.Visible; - - bool isContains = false; - for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) - { - if (!layerName.Contains("fttp:")) - { - switch (layerTree.Name) - { - case "layerTree1": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || - layerName.Contains("施工") || - layerName.Contains("规划")) continue; - break; - case "layerTree2": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[j].Nodes.Add(node); - isContains = true; - break; - } - else - { - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); - isContains = true; - break; - } - } - switch (layerTree.Name) - { - case "layerTree1": - if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || - layerName.Contains("标注") || - isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || - layerName.Contains("景观") || layerName.Contains("红线")) - continue; - break; - case "layerTree2": - if (isContains != false || layerName.Contains("tempLgdData2")) - continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); - } - - for (int i = 0; i < nTerrainCount; i++) - { - GSOTerrain terrain = globcontrol.Globe.Terrains[i]; - if (terrain == null) continue; - TreeNode node = new TreeNode(); - node.Tag = terrain; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = terrain.Caption; - node.Checked = terrain.Visible; - switch (layerTree.Name) - { - case "layerTree1": - terrainManagerNode1.Nodes.Add(node); - break; - case "layerTree2": - terrainManagerNode.Nodes.Add(node); - break; - default: - break; - } - } - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - - private void initTreeNodeCheckedStatus(TreeView layerTreeView) - { - //节点选中状态控制 - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - if (node.Checked != true) continue; - layerTreeView.Nodes[0].Checked = true; - break; - } - - foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOTerrain layer = childNode.Tag as GSOTerrain; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - } - - void exPandTreeNode() - { - layerManagerNode1.Expand(); - terrainManagerNode1.Expand(); - layerManagerNode.Expand(); - terrainManagerNode.Expand(); - } +// void exPandTreeNode() +// { +// layerManagerNode1.Expand(); +// terrainManagerNode1.Expand(); +// layerManagerNode.Expand(); +// terrainManagerNode.Expand(); +// } /// /// 刷新节点树 /// - private void RefreshLayerAndTerrainTree() - { - int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 - int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 - addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); - initTreeNodeCheckedStatus(layerTree1); - - int nLayerCount = globeControl2.Globe.Layers.Count; - int nTerrainCount = globeControl2.Globe.Terrains.Count; - addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); - initTreeNodeCheckedStatus(layerTree2); - - // 展开 - exPandTreeNode(); - } +// private void RefreshLayerAndTerrainTree() +// { +// int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 +// int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 +// addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); +// initTreeNodeCheckedStatus(layerTree1); +// +// int nLayerCount = globeControl2.Globe.Layers.Count; +// int nTerrainCount = globeControl2.Globe.Terrains.Count; +// addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); +// initTreeNodeCheckedStatus(layerTree2); +// +// // 展开 +// exPandTreeNode(); +// } /// /// 节点树复选框选中状态改变事件处理 @@ -289,144 +314,132 @@ { if (e.Action != TreeViewAction.Unknown) { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } + TreeUtils.TreeNodeCheckedChange(globeControl2,e.Node); + } + } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree2(e.Node, e.Node.Checked); + private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) + { + if (e.Action != TreeViewAction.Unknown) + { + TreeUtils.TreeNodeCheckedChange(globeControl1, e.Node); } } + + +// private void layerTree2_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree2(e.Node, e.Node.Checked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree1(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree1(childNode, isChecked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree2(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree2(childNode, isChecked); +// } +// } /// /// 节点树选中状态改变事件 /// /// /// - private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) - { - if (e.Action != TreeViewAction.Unknown) - { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } +// private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree1(e.Node, e.Node.Checked); +// } +// } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree1(e.Node, e.Node.Checked); - } - } - /// - /// 改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 - /// - /// - private void CheckParentNode(TreeNode curNode) - { - bool bChecked = false; - - if (curNode.Parent != null) - { - foreach (TreeNode node in curNode.Parent.Nodes) - { - if (node.Checked) - { - bChecked = true; - break; - } - } - if (bChecked) - { - curNode.Parent.Checked = true; - CheckParentNode(curNode.Parent); - } - else - { - curNode.Parent.Checked = false; - CheckParentNode(curNode.Parent); - } - } - } } } diff --git a/FrmMetadata.cs b/FrmMetadata.cs index 4d0d5cb..bb7c46c 100644 --- a/FrmMetadata.cs +++ b/FrmMetadata.cs @@ -12,12 +12,8 @@ { public partial class FrmMetadata : Office2007Form { - List pipelineLayerNames = new List();//线图层名称 - List workwellLayerNames = new List();//工井图层名称 - List valueLayerNames = new List();//阀门图层名称 - List instrumenLayerNames = new List();//附属物图层名称 - string filename = Utility.filename; - DataSet dataSet = new DataSet(); + + bool selectedLayer; public FrmMetadata() @@ -25,308 +21,33 @@ InitializeComponent(); loadTreeView(layerTree); } - private void FrmMetadata_Load(object sender, EventArgs e) - { - //this.ntLblC.Text = "nn"; - // loadTreeView(layerTree); - } private void loadTreeView(TreeView tv)//构建图层树 { - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - //tv.ShowPlusMinus = false; - - //tv.Nodes.Clear(); - tv.ShowLines = true; - // tv.ImageList = imageList1; - tv.CheckBoxes = false; - #region 三级 - - //foreach (XmlNode paramsNode in Params1) //layers - //{ - // foreach (XmlNode layerNode in paramsNode) //layer - // { - // TreeNode nodelayer = new TreeNode(); - // string layerName = layerNode.Attributes["label"].Value; - // nodelayer.Text = layerName; - - // if (layerNode.HasChildNodes != false) - // { - // tv.Nodes.Add(nodelayer); - // foreach (XmlNode layerchildNode in layerNode) //layerchild - // { - // if (layerchildNode.Name == "layerchild") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["type"].Value; - // string layerchildName = layerchildNode.Attributes["label"].Value; - // if (layerType == "locaserver") - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - - // } - // else - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // if (layerchildNode.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = boollayer; - // nodelayer.Nodes.Add(nodelayerchild); - // } - // } - // else if (layerchildNode.Name == "layertype") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["label"].Value; - // nodelayerchild.Text = layerType; - // nodelayerchild.Tag = layerType; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - // if (layerchildNode.HasChildNodes == true) - // { - // foreach (XmlNode childNodeLayer in layerchildNode) - // { - // TreeNode nodelayerchild1 = new TreeNode(); - // string layerName1 = childNodeLayer.Attributes["layer"].Value; - // string layerchildName = childNodeLayer.Attributes["label"].Value; - // string layerType1 = childNodeLayer.Attributes["type"].Value; - // if (childNodeLayer.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild1.Text = layerchildName; - // nodelayerchild1.Tag = layerType1 + "|" + layerName1; - // nodelayerchild1.Checked = boollayer; - // nodelayerchild.Nodes.Add(nodelayerchild1); - // } - // } - // } - - // } - // } - // else - // { - // tv.Nodes.Add(nodelayer); - // } - // } - - //} - - #endregion - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - TreeNode nodelayer = new TreeNode(); - string layerName = layerNode.Attributes["label"].Value; - nodelayer.Text = layerName; - - if (layerNode.HasChildNodes) - { - tv.Nodes.Add(nodelayer); - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - if (layerchildNode.Name == "layerchild") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["type"].Value; - string layerchildName = layerchildNode.Attributes["label"].Value; - if (layerType == "locaserver") - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - - } - else - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - if (layerchildNode.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - //nodelayerchild.Checked = boollayer; - nodelayer.Nodes.Add(nodelayerchild); - } - } - else if (layerchildNode.Name == "layertype") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["label"].Value; - nodelayerchild.Text = layerType; - nodelayerchild.Tag = layerType; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode) - { - if (childNodeLayer.HasChildNodes) - { - TreeNode nodelayerchild2 = new TreeNode(); - string layer = childNodeLayer.Attributes["label"].Value; - nodelayerchild2.Text = layer; - nodelayerchild2.Tag = layer; - nodelayerchild2.Checked = true; - nodelayerchild.Nodes.Add(nodelayerchild2); - foreach (XmlNode n in childNodeLayer) - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = n.Attributes["layer"].Value; - string layerchildName = n.Attributes["label"].Value; - string layerType1 = n.Attributes["type"].Value; - if (n.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (n.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (n.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (n.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild2.Nodes.Add(nodelayerchild1); - - } - } - else - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = childNodeLayer.Attributes["layer"].Value; - string layerchildName = childNodeLayer.Attributes["label"].Value; - string layerType1 = childNodeLayer.Attributes["type"].Value; - if (childNodeLayer.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild.Nodes.Add(nodelayerchild1); - - } - } - } - } - - } - } - else - { - tv.Nodes.Add(nodelayer); - } - } - - } - if (tv.Nodes.Count > 0) - { - //tv.Nodes[0].Expand(); - if (tv.Nodes.Count > 0) - { - foreach (TreeNode node in tv.Nodes) - { - //node.Expand(); - } - } - } - //tv.ExpandAll(); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } + //tv.ShowPlusMinus = false; + //tv.Nodes.Clear(); + // tv.ImageList = imageList1; + tv.ShowLines = true; + tv.CheckBoxes = false; + TreeUtils.InitLayerTree(null, tv, null); } - + /// + /// 点击父节点则展开,点击子节点则编辑元数据 + /// + /// + /// private void layerTree_AfterSelect(object sender, TreeViewEventArgs e) { - String layername = layerTree.SelectedNode.Text; - if (layerTree.SelectedNode.GetNodeCount(true) == 0) { - searchLayerInfo(layername); - - selectedLayer = true; - clearBtn.Hide(); - completeBtn.Hide(); + String layername = e.Node.Text; + if (e.Node.GetNodeCount(true) != 0) + { //点击父节点,则展开 + e.Node.Expand(); + return; } + searchLayerInfo(layername); + selectedLayer = true; + clearBtn.Hide(); + completeBtn.Hide(); } //查询元数据 private void searchLayerInfo(String layername) { @@ -335,8 +56,6 @@ + " casic_metadatalayer where casic_metadatacontent.\"LAYERID\" = casic_metadatalayer.\"LAYERID\" and casic_metadatalayer.\"LAYERNAME\"='" + layername+"'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; - if (table != null && table.Rows.Count > 0) { groupBox1.Text = layername; @@ -400,8 +119,6 @@ //判断此时layerTree有没有选中的图层 if (selectedLayer)//有选中的图层,获得其名 { - string name = layerTree.SelectedNode.Text; - OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "支持格式(*.xml)|*.xml|XML数据(*.xml)|"; dlg.Multiselect = true; @@ -419,31 +136,24 @@ //读入元数据 private void AddXMLMDdata(string strFilePath) { - try - { - dataSet.Clear(); //清空数据集中的内容 - dataSet.ReadXml(strFilePath); //读取XML文件中的内容 + DataSet dataSet = new DataSet(); + dataSet.ReadXml(strFilePath); //读取XML文件中的内容 - //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); - string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); - string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); - string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); - string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); + //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); + string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); + string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); + string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); + string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); - //this.titleLbl.Text = attrtitle; - consLblC.Text = attrcons; - descLblC.Text = attrdesc; - authorLblC.Text = attrauthor; - ntLblC.Text = attrnt; - //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); + //this.titleLbl.Text = attrtitle; + consLblC.Text = attrcons; + descLblC.Text = attrdesc; + authorLblC.Text = attrauthor; + ntLblC.Text = attrnt; + //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); - completeBtn.Visible = true; - //this.clearBtn.Visible = true; - } - catch (Exception e) - { - - } + completeBtn.Visible = true; + //this.clearBtn.Visible = true; } //新建/编辑元数据 private void editBtn_Click(object sender, EventArgs e) @@ -509,11 +219,7 @@ string sql = "select \"LAYERID\" from casic_metadatalayer where \"LAYERNAME\" = '" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - if (table != null && table.Rows.Count > 0)//已有该图层,属于编辑 - { - return false; - } - return true; + return table == null || table.Rows.Count <= 0; } //保存元数据 private void saveData(String method,String layername,String cons,String desc,String author,String nt) { @@ -539,17 +245,16 @@ string insertSQL = "insert into casic_metadatalayer values ('" + layerid + "','" + layername + "')";//+ string insertSQL2 = "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','" + desc + "','" + author + "','" + nt + "')"; // "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','"+desc+"','"+author+"','"+nt+"')"; - if ((OledbHelper.sqlExecuteNonQuery(insertSQL) > 0)&&(OledbHelper.sqlExecuteNonQuery(insertSQL2)>0)) - { - MessageBox.Show("保存元数据成功!"); + if ((OledbHelper.sqlExecuteNonQuery(insertSQL) <= 0) || + (OledbHelper.sqlExecuteNonQuery(insertSQL2) <= 0)) return; + MessageBox.Show("保存元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } else { //更新 string layeridSQL = "select layerid from casic_metadatalayer where LAYERNAME='"+layername+"'"; @@ -561,16 +266,14 @@ + "',casic_metadatacontent.MDAUTHOR ='" + author.Trim() + "',casic_metadatacontent.NT ='" + nt.Trim() + "' where casic_metadatacontent.LAYERID='" + layerid + "'"; - if (OledbHelper.sqlExecuteNonQuery(updateSQL) > 0) - { - MessageBox.Show("更新元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + if (OledbHelper.sqlExecuteNonQuery(updateSQL) <= 0) return; + MessageBox.Show("更新元数据成功!"); + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } } diff --git a/FrmMetadataStat.cs b/FrmMetadataStat.cs index cb19f84..c3c1359 100644 --- a/FrmMetadataStat.cs +++ b/FrmMetadataStat.cs @@ -2,16 +2,16 @@ using System.Collections; using System.Collections.Generic; using System.Data; +using System.Linq; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; -using System.Xml; using DevComponents.DotNetBar; namespace Cyberpipe { public partial class FrmMetadataStat : Office2007Form { - Dictionary dic = new Dictionary(); + public FrmMetadataStat() { InitializeComponent(); @@ -22,7 +22,7 @@ string sql = "select LAYERNAME from casic_metadataLayer where LAYERNAME like '%" + keywordsTxt.Text.Trim() + "%'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; + int num = 0; resultList.Clear(); consLblC.Text = ""; @@ -32,6 +32,7 @@ if (table != null && table.Rows.Count > 0) { + num = table.Rows.Count; for (int i = 0; i < num;i++ ) { resultList.Items.Add(table.Rows[i][0].ToString()); @@ -56,7 +57,8 @@ int metadataLayernum = statistMDLayer(); int nomdLayernum = layernum - metadataLayernum; //MessageBox.Show("共有多少层?" + layernum.ToString()+"=="+metadataLayernum.ToString()+"=="+nomdLayernum.ToString()); - dic.Clear(); +// dic.Clear(); + Dictionary dic = new Dictionary(); dic.Add("已建",metadataLayernum); dic.Add("未建", nomdLayernum); @@ -74,11 +76,9 @@ foreach (string key in dic.Keys) { - if (dic[key] != 0) - { - xlist.Add(key); - ylist.Add(dic[key]); - } + if (dic[key] == 0) continue; + xlist.Add(key); + ylist.Add(dic[key]); } chart1.Series[0].Points.DataBindXY(xlist, ylist); @@ -89,73 +89,15 @@ string sql = "select * from casic_metadataLayer"; DataTable table = OledbHelper.QueryTable(sql); - mdlayernum = table.Rows.Count; + if(table!=null)mdlayernum = table.Rows.Count; return mdlayernum; } //统计有多少个图层 - private int statistLayer() { - int layernum = 0; - - string filename = Utility.filename; - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - //MessageBox.Show(layerNode.Attributes["label"].Value); - - if (layerNode.HasChildNodes) - { - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - //MessageBox.Show(layerchildNode.Attributes["label"].Value); - if (layerchildNode.Name == "layerchild") - { - layernum++; - } - else if (layerchildNode.Name == "layertype") - { - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode)//layertype下的layerchild - { - //MessageBox.Show(childNodeLayer.Attributes["label"].Value); - if (childNodeLayer.HasChildNodes) - { - - foreach (XmlNode n in childNodeLayer) - { - layernum++; - } - } - else - { - - layernum++; - } - } - } - } - - } - } - } - - } - - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - return layernum; + private int statistLayer() + { + List datasrcs = Utility.layerConfig.datasrcs; + return datasrcs.SelectMany(datasrc => datasrc.layertypes).Sum(layerType => layerType.layers.Count); } //选择list @@ -174,7 +116,6 @@ + "join casic_metadatalayer on casic_metadatalayer.LAYERID = casic_metadatacontent.LAYERID " + "where casic_metadatalayer.LAYERNAME='" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; //MessageBox.Show(num.ToString()); if (table != null && table.Rows.Count > 0) { @@ -192,10 +133,5 @@ ntLblC.Text = ""; } } - - private void buttonX1_Click(object sender, EventArgs e) - { - drawChart(); - } } } diff --git a/ClassDoubleScreenCompare.cs b/ClassDoubleScreenCompare.cs new file mode 100644 index 0000000..f2935da --- /dev/null +++ b/ClassDoubleScreenCompare.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using GeoScene.Globe; +using GeoScene.Data; +using GeoScene.Engine; +using System.Drawing; + +namespace Cyberpipe +{ + class ClassDoubleScreenCompare + { + public static GSOFeature getSameFeatureFromOtherGlobe(GSOFeature feature, + GSOGlobeControl globeControl1, GSOGlobeControl globeControl2,double bufferWidth,GSOGeoPolygon3D resPolygon) + { + GSOLayer layer; + GSOFeatures features = new GSOFeatures(); + + if (!feature.Dataset.Caption.StartsWith("施工")) + { + layer = feature.Dataset.Caption == "供电管线" + ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") + : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(feature, fs[i], globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + else + { + layer = feature.Dataset.Caption == "施工电力管线" + ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") + : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(fs[i], feature, globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + + return getMostSimilarFeatureFromFeatures(feature, features); + + } + + + private static GSOFeature getMostSimilarFeatureFromFeatures(GSOFeature feature, GSOFeatures features) + { + double maxLength = 0; + GSOFeature f = new GSOFeature(); + GSOGeoPolyline3D line = feature.Geometry as GSOGeoPolyline3D; + + if (features.Length == 0) return null; + if (features.Length == 1) + { + f = features[0]; + f.HighLight = true; + } + else + { + for (int m = 0; m < features.Length; m++) + { + GSOGeoPolyline3D tempSGLine = features[m].Geometry as GSOGeoPolyline3D; + + double tempLength = tempSGLine.GetSpaceLength(false, 6378137); + double lengthAbs = Math.Abs(tempLength - line.GetSpaceLength(false, 6378137)); + if (m == 0) + { + f = features[0]; + f.HighLight = true; + maxLength = lengthAbs; + } + else if (lengthAbs < maxLength) + { + f = features[m]; + f.HighLight = true; + maxLength = lengthAbs; + } + } + } + return f; + } + + private static bool isSameFeature(GSOFeature feature1, GSOFeature feature2, GSOLayer layer, double bufferWidth) + { + GSOGeoPolyline3D line = feature1.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = line.CreateBuffer(bufferWidth * 2, true, 5, true, false); + + if (bufferPolygon == null) return false; + + GSOFeatures featuresInLayer = layer.FindFeaturesInPolygon(bufferPolygon, true); + + if (featuresInLayer == null || featuresInLayer.Length <= 0) + return false; + + for (int i = 0; i < featuresInLayer.Length; i++) + { + if (featuresInLayer[i].Name == feature2.Name) + { + return true; + break; + } + } + return false; + } + + private static bool isSimilarFeature(GSOFeature srcFeature, GSOFeature dscFeature, + GSOGlobeControl globeControl1,GSOGlobeControl globeControl2,double bufferWidth) + { + GSOLayer dscLayer = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); + GSOLayer srcLayer = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); + + if (!isSameFeature(srcFeature, dscFeature, dscLayer, bufferWidth) + && !isSameFeature(dscFeature, srcFeature, srcLayer, bufferWidth)) + return false; + return true; + } + + public static void CalculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2, + out double horizonDistance, out double verticalDistance, GSOGlobeControl globeControl1, GSOGlobeControl globeControl2) + { + GSOPoint3d pntIntersect1 = new GSOPoint3d(); + GSOPoint3d pntIntersect2 = new GSOPoint3d(); + GSOPoint3d pntProIntersect1 = new GSOPoint3d(); + GSOPoint3d pntProIntersect2 = new GSOPoint3d(); + + verticalDistance = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, verticalDistance, true, "垂直", globeControl1, globeControl2); + + horizonDistance = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, horizonDistance, true, "水平", globeControl1, globeControl2); + + } + + private static GSOPoint3d LabelDistance(GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, + double distance, bool markerVisible, string label,GSOGlobeControl globeControl1,GSOGlobeControl globeControl2) + { + if (pntIntersect1 == null || pntIntersect2 == null) + return new GSOPoint3d(); + GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); + GSOPoint3ds point3ds = new GSOPoint3ds(); + point3ds.Add(pntIntersect1); + point3ds.Add(pntIntersect2); + disline.AddPart(point3ds); + + GSOGeoMarker dismarker = new GSOGeoMarker(); + GSOFeature marker = null; + GSOFeature line = null; + createLineStyle(out marker, out line, disline, pntIntersect1, pntIntersect2, distance, label, dismarker); + + line.Visible = marker.Visible = markerVisible; + globeControl1.Globe.MemoryLayer.AddFeature(line); + globeControl1.Globe.MemoryLayer.AddFeature(marker); + + globeControl2.Globe.MemoryLayer.AddFeature(line); + globeControl2.Globe.MemoryLayer.AddFeature(marker); + + return dismarker.Position; + } + + private static void createLineStyle(out GSOFeature marker, out GSOFeature line, GSOGeoPolyline3D disline, + GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) + { + GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 + style.LineColor = Color.Red; + style.LineWidth = 5; //设置线的宽度为5 + style.VertexVisible = true; //显示线的节点 + disline.Style = style; //把风格添加到线上 + disline.AltitudeMode = EnumAltitudeMode.Absolute; + line = new GSOFeature(); + line.Geometry = disline; + + dismarker.X = pntIntersect1.X; + dismarker.Y = pntIntersect1.Y; + dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; + dismarker.Text = label + distance.ToString("0.00") + "米"; + dismarker.AltitudeMode = EnumAltitudeMode.Absolute; + + GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); + GSOTextStyle styleText = new GSOTextStyle(); + styleText.IsSizeFixed = true; + styleText.ForeColor = Color.Red; + styleText.FontSize = 20; + styleMarker.TextStyle = styleText; + dismarker.Style = styleMarker; + + marker = new GSOFeature(); + marker.Geometry = dismarker; + } + + } +} diff --git a/Cyberpipe.csproj b/Cyberpipe.csproj index d8aa9c8..bcce54d 100644 --- a/Cyberpipe.csproj +++ b/Cyberpipe.csproj @@ -203,6 +203,7 @@ + @@ -1143,6 +1144,7 @@ SysRescInfoManager.cs + True True diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 123caf1..2c45db6 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -258,42 +258,25 @@ for (int i = 0; i < scLayer.GetAllFeatures().Length; i++) { GSOFeature scFeature = scLayer.GetAt(i); - if (scFeature.GetFieldAsString("所属道路") == road) + if (scFeature.GetFieldAsString("所属道路") != road) continue; + GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + + GSOFeature sgFeature = null; + GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); + + //**判断同一个Feature + if (sgFeatures.Length >= 1) { - GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); - GSOFeature sgFeature = null; - GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); - - //**判断同一个Feature - if (sgFeatures.Length >= 1) + if (sgFeature != null) { - sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); + GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; + double horizonDistance, verticalDistance; - if (sgFeature != null) - { - GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; - double horizonDistance, verticalDistance; - - CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); - GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); - } - else - { - scFeature.HighLight = true; - DataRow dr = dt.NewRow(); - dr[0] = scLayer.Caption; - dr[1] = scFeature.GetFieldAsString("编号"); - dr[2] = sgLayer.Caption; - dr[3] = "无"; - dr[4] = "无"; - dr[5] = "0.02"; - dr[6] = "无"; - dr[7] = "0.02"; - dr[8] = "未设计管段"; - dt.Rows.Add(dr); - } + CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); + GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); } else { @@ -311,6 +294,21 @@ dt.Rows.Add(dr); } } + else + { + scFeature.HighLight = true; + DataRow dr = dt.NewRow(); + dr[0] = scLayer.Caption; + dr[1] = scFeature.GetFieldAsString("编号"); + dr[2] = sgLayer.Caption; + dr[3] = "无"; + dr[4] = "无"; + dr[5] = "0.02"; + dr[6] = "无"; + dr[7] = "0.02"; + dr[8] = "未设计管段"; + dt.Rows.Add(dr); + } } } /// diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index 53946c0..fe32265 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -4,7 +4,7 @@ using GeoScene.Globe; namespace Cyberpipe -{ +{ //本类作用为:辅助GlobalControl上Feature的统计分析工具类 class FeatureStatisticsService { /// @@ -60,8 +60,8 @@ /// /// /// - /// - /// + /// + /// /// /// public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) @@ -74,6 +74,7 @@ for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; double length = line.GetSpaceLength(true, 6378137); totalLength += length; ncount += 1; @@ -114,7 +115,7 @@ for (int i = 0; i < feats.Length; i++) { double radius = feats[i].GetFieldAsDouble(fieldName); - if (radius >= min && radius <= max) + if (radius >= minValue && radius <= maxValue) { result.Add(feats[i]); } @@ -148,23 +149,22 @@ lstDiameter.Sort(); if (lstDiameter.Count > 0) { - for (int m = 0; m < lstDiameter.Count; m++) + foreach (float diameter in lstDiameter) { double totalLength = 0.00; int ncount = 0; for (int j = 0; j < feats.Length; j++) { - if (feats[j].GetFieldAsFloat("管径_毫米") == lstDiameter[m]) - { - GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } + if (Math.Abs(feats[j].GetFieldAsFloat("管径_毫米") - diameter) > 0.00001) continue; + GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = lstDiameter[m].ToString(); + featuresClass.groupFieldValue = diameter.ToString(); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -191,13 +191,13 @@ //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); - for (int j = 0; j < accessStrs.Length; j++) + foreach (string accssname in accessStrs) { - GSOFeatures feats = null; - int ncount = 0; + GSOFeatures feats; + int ncount; if (polygon == null) { - feats = flayer.GetFeatureByFieldValue("附属物名称", accessStrs[j], true); + feats = flayer.GetFeatureByFieldValue("附属物名称", accssname, true); ncount = feats.Length; } else @@ -207,14 +207,14 @@ //过滤 for (int n = 0; n < feats.Length; n++) { - if (feats[n].GetFieldAsString("附属物名称").Contains(accessStrs[j])) newfeats.Add(feats[n]); + if (feats[n].GetFieldAsString("附属物名称").Contains(accssname)) newfeats.Add(feats[n]); } ncount = newfeats.Length; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); - featuresClass.layerName = accessStrs[j]; + featuresClass.layerName = accssname; featuresClass.ncount = ncount; result.Add(featuresClass); @@ -303,6 +303,26 @@ if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); - } + } + + + /// + /// 获取globeControl上选中的管线,如果返回空则没有选中的管线 + /// + /// 地球引擎 + /// 返回一根线 + public static GSOFeature GetSelectedPipeline(GSOGlobeControl globeControl) + { + GSOFeature resFeature; + if (globeControl.Globe.SelObjectCount < 1) return null; + GSOLayer resLayer; + globeControl.Globe.GetSelectObject(0, out resFeature, out resLayer); + if (resFeature == null) return null; + + GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; + if (line1 == null) return null; + GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; + return pipeStyle1 == null ? null : resFeature; + } } } diff --git a/FrmCompareFeature.cs b/FrmCompareFeature.cs index a05e8e7..ac622c4 100644 --- a/FrmCompareFeature.cs +++ b/FrmCompareFeature.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Data; using System.Drawing; using System.Windows.Forms; @@ -11,26 +10,16 @@ { public partial class FrmCompareFeature : Office2007Form { - GSOFeature srcFeature; - GSOFeature dscFeature; - GSOGlobeControl globeControl1; - GSOGlobeControl globeControl2; - bool isSamePolyline; - - GSOLayer layerTemp; - GSOLayer layerTemp2; - GSOFeature new_feat; + private GSOFeature srcFeature, dscFeature; + private GSOGlobeControl globeControl1, globeControl2; GSOGeoPolygon3D resPolygon; - static FrmCompareFeature frm; - public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2, int width) + public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, int width) { if (frm == null) { - frm = new FrmCompareFeature(_globeControl1, _globeControl2, _layerTemp, _layerTemp2); - + frm = new FrmCompareFeature(_globeControl1, _globeControl2); frm.Location = new Point((width - frm.Width)/2, 50); frm.Show(_globeControl1.Parent); } @@ -41,8 +30,7 @@ } } - public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2) + public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2) { globeControl1 = _globeControl1; globeControl2 = _globeControl2; @@ -50,99 +38,35 @@ globeControl1.Globe.Action = EnumAction3D.SelectObject; globeControl2.Globe.Action = EnumAction3D.SelectObject; - layerTemp = _layerTemp; - layerTemp2 = _layerTemp2; globeControl1.MouseClick += globeControl1_MouseClick; globeControl2.MouseClick += globeControl2_MouseClick; } + private void invalParam() + { + if (srcFeature == null || dscFeature == null) + { + MessageBox.Show("请选择要对比的管段!", "提示"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) + { + MessageBox.Show("请选择同种类型图层!"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type || + srcFeature.Geometry.Type != EnumGeometryType.GeoPolyline3D) + return; + } + private void buttonAnalysis_Click(object sender, EventArgs e) { + invalParam(); + dataGridViewX1.DataSource = null; - - double bufferWidth = Convert.ToDouble(textBox1.Text); - - if (srcFeature == null || dscFeature == null) - MessageBox.Show("请选择要对比的管段!", "提示"); - else - { - if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) - MessageBox.Show("请选择同种类型图层!"); - else if (srcFeature.Geometry.Type == dscFeature.Geometry.Type && - srcFeature.Geometry.Type == EnumGeometryType.GeoPolyline3D) - { - lineLayerCompare(srcFeature, dscFeature, bufferWidth); - if (!isSamePolyline) - MessageBox.Show("实测管段与施工管段非同一条管段,请选择同一管段进行比较!", "提示"); - else - { - lineFeatureCompare(srcFeature, dscFeature); - globeControl1.Globe.Action = EnumAction3D.ActionNull; - globeControl2.Globe.Action = EnumAction3D.ActionNull; - } - } - else - MessageBox.Show("无法处理该类型图层!"); - } + lineFeatureCompare(srcFeature, dscFeature); } - - /// - /// 在容差范围内判断是否同一根管段 - /// - /// - /// - /// - /// - private bool lineLayerCompare(GSOFeature srcFeature, GSOFeature dscFeature, double bufferWidth) - { - isSamePolyline = false; - - GSOGeoPolyline3D srcLine = srcFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D srcBufferPolygon = srcLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer dsc = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); - - if (srcBufferPolygon != null) - { - GSOFeatures featuresInSrcLayer = dsc.FindFeaturesInPolygon(srcBufferPolygon, true); - - if (featuresInSrcLayer != null && featuresInSrcLayer.Length > 0) - { - for (int i = 0; i < featuresInSrcLayer.Length; i++) - { - if (featuresInSrcLayer[i].Name == dscFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D dscBufferPolygon = dscLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer src = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); - - if (dscBufferPolygon != null) - { - GSOFeatures featuresInDscLayer = src.FindFeaturesInPolygon(dscBufferPolygon, true); - - if (featuresInDscLayer != null && featuresInDscLayer.Length > 0) - { - for (int i = 0; i < featuresInDscLayer.Length; i++) - { - if (featuresInDscLayer[i].Name == srcFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - return isSamePolyline; - } - /// /// 分析两根管段的具体差异 /// @@ -156,8 +80,10 @@ GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; double dscLineLength = dscLine.GetSpaceLength(false, 6378137); - double horizonDistance = calculateDistance(srcLine, dscLine,false); - double verticalDistance = calculateDistance(srcLine, dscLine,true); + double horizonDistance, verticalDistance; + + ClassDoubleScreenCompare.CalculateDistance(srcLine, dscLine, out horizonDistance, + out verticalDistance,globeControl1,globeControl2); DataTable dt = new DataTable(); dt.Columns.Add("数据名称"); @@ -189,6 +115,98 @@ dt.Rows.Add(dscRow); dataGridViewX1.DataSource = dt; + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) + { + globeControl1.Globe.MemoryLayer.RemoveAllFeature(); + globeControl2.Globe.MemoryLayer.RemoveAllFeature(); + + GSOFeature new_feat = new GSOFeature(); + resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); + resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; + new_feat.Geometry = resPolygon; + + globeControl1.Globe.MemoryLayer.AddFeature(new_feat); + globeControl2.Globe.MemoryLayer.AddFeature(new_feat); + + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + public static void clearFeatureHighLight(GSOGlobeControl glb) + { + for (int i = 0; i < glb.Globe.Layers.Count; i++) + { + GSOLayer layer = glb.Globe.Layers[i]; + if (!(layer is GSOFeatureLayer)) continue; + GSOFeatures feats = layer.GetAllFeatures(); + for (int j = 0; j < feats.Length; j++) + { + feats[j].HighLight = false; + } + } + } + + void globeControl1_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl1.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl1.Globe.Action != EnumAction3D.SelectObject || + globeControl1.Globe.SelectedObject == null) + return; + GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + srcFeature = globeControl1.Globe.SelectedObject; + dscFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(srcFeature, + globeControl1,globeControl2,bufferWidth,resPolygon); + + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } + + void globeControl2_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl2.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl2.Globe.Action != EnumAction3D.SelectObject || + globeControl2.Globe.SelectedObject == null) + return; + + GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + dscFeature = globeControl2.Globe.SelectedObject; + srcFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(dscFeature, + globeControl1, globeControl2, bufferWidth, resPolygon); + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } private void FrmCompareFeature_FormClosing(object sender, FormClosingEventArgs e) @@ -198,322 +216,5 @@ frm = null; } - private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) - { - new_feat = new GSOFeature(); - resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); - resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; - new_feat.Geometry = resPolygon; - - layerTemp.AddFeature(new_feat); - layerTemp2.AddFeature(new_feat); - globeControl1.Refresh(); - globeControl2.Refresh(); - } - - private GSOLayer getSameLayer(GSOFeature feature) - { - GSOLayer layer = null; - if (!feature.Dataset.Caption.StartsWith("施工")) - { - layer = feature.Dataset.Caption == "供电管线" - ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") - : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); - } - else - { - layer = feature.Dataset.Caption == "施工电力管线" - ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") - : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); - } - - return layer; - } - - /// - /// 地球1中点击地球2中同步添加缓冲区 - /// - /// - /// - void globeControl1_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl1.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl1.Globe.Action == EnumAction3D.SelectObject && - globeControl1.Globe.SelectedObject != null) - { - GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - addPologyToGlobeControl(line, bufferWidth); - } - - srcFeature = globeControl1.Globe.SelectedObject; - GSOLayer layers = getSameLayer(srcFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = srcFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(srcFeature, features[i], Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - listFeatures.Add(features[i]); - } - calculate(out maxLength, out dscFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - /// - /// 地球2中点击地球1中同步添加缓冲区 - /// - /// - /// - void globeControl2_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl2.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl2.Globe.Action != EnumAction3D.SelectObject || - globeControl2.Globe.SelectedObject == null) - return; - else - { - GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - - addPologyToGlobeControl(line, bufferWidth); - } - - dscFeature = globeControl2.Globe.SelectedObject; - //双屏同时选中同一管段 - GSOLayer layers = getSameLayer(dscFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = dscFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(features[i], dscFeature, Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - { - listFeatures.Add(features[i]); - } - } - calculate(out maxLength, out srcFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - private void calculate(out double maxLength, out GSOFeature feature, GSOFeatures listFeatures, - GSOGeoPolyline3D scLine) - { - maxLength = 0; - feature=new GSOFeature(); - if (listFeatures.Length == 0) - feature = null; - else - { - if (listFeatures.Length == 1) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - } - else - { - for (int m = 0; m < listFeatures.Length; m++) - { - GSOGeoPolyline3D tempSGLine = listFeatures[m].Geometry as GSOGeoPolyline3D; - - double tempLength = tempSGLine.GetSpaceLength(false, 6378137); - double lengthAbs = Math.Abs(tempLength - scLine.GetSpaceLength(false, 6378137)); - if (m == 0) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - maxLength = lengthAbs; - } - else if (lengthAbs < maxLength) - { - feature = listFeatures[m]; - listFeatures[m].HighLight = true; - maxLength = lengthAbs; - } - } - } - } - } - - /// - /// 计算距离 - /// - /// - /// - /// - double calculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2,bool isVertical) - { - GSOPoint3d pntIntersect1 = new GSOPoint3d(); - GSOPoint3d pntIntersect2 = new GSOPoint3d(); - GSOPoint3d pntProIntersect1 = new GSOPoint3d(); - GSOPoint3d pntProIntersect2 = new GSOPoint3d(); - double dDist = 0; - if (isVertical) - { - dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "垂直"); - } - else - { - dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "水平"); - } - - return dDist; - } - - /// - /// 清除所有高亮Feature - /// - /// - private void clearFeatureHighLight(GSOGlobeControl glb1,GSOGlobeControl glb2) - { - layerTemp.RemoveAllFeature(); - layerTemp2.RemoveAllFeature(); - //清除gbl1中高亮 - for (int i = 0; i < glb1.Globe.Layers.Count; i++) - { - GSOLayer layer = glb1.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - //清除gbl2中高亮 - for (int i = 0; i < glb2.Globe.Layers.Count; i++) - { - GSOLayer layer = glb2.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - } - - /// - /// 添加标注 - /// - /// - /// - /// - /// - /// - /// - private GSOPoint3d LabelDistance(GSOLayer markerLayer, GSOLayer markerLayer2, - GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, bool markerVisible,string label) - { - if (pntIntersect1 == null || pntIntersect2 == null) - return new GSOPoint3d(); - GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); - GSOPoint3ds point3ds = new GSOPoint3ds(); - point3ds.Add(pntIntersect1); - point3ds.Add(pntIntersect2); - disline.AddPart(point3ds); - - GSOGeoMarker dismarker = new GSOGeoMarker(); - GSOFeature marker = null; - GSOFeature line = null; - createLineStyle(out marker, out line,disline, pntIntersect1, pntIntersect2, distance, label, dismarker); - - line.Visible = marker.Visible = markerVisible; - markerLayer.AddFeature(line); - markerLayer.AddFeature(marker); - - markerLayer2.AddFeature(line); - markerLayer2.AddFeature(marker); - - return dismarker.Position; - } - /// - /// 控制标注和字体的颜色 - /// - /// - /// - /// - /// - /// - /// - /// - /// - private void createLineStyle(out GSOFeature marker,out GSOFeature line,GSOGeoPolyline3D disline, - GSOPoint3d pntIntersect1,GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) - { - GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 - style.LineColor = Color.Red; - style.LineWidth = 5; //设置线的宽度为5 - style.VertexVisible = true; //显示线的节点 - disline.Style = style; //把风格添加到线上 - disline.AltitudeMode = EnumAltitudeMode.Absolute; - line=new GSOFeature(); - line.Geometry = disline; - - dismarker.X = pntIntersect1.X; - dismarker.Y = pntIntersect1.Y; - dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; - dismarker.Text = label + distance.ToString("0.00") + "米"; - dismarker.AltitudeMode = EnumAltitudeMode.Absolute; - - GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); - GSOTextStyle styleText = new GSOTextStyle(); - styleText.IsSizeFixed = true; - styleText.ForeColor = Color.Red; - styleText.FontSize = 20; - styleMarker.TextStyle = styleText; - dismarker.Style = styleMarker; - - marker=new GSOFeature(); - marker.Geometry = dismarker; - } - } } diff --git a/FrmHotFuncStat.cs b/FrmHotFuncStat.cs index 84131ef..f313b20 100644 --- a/FrmHotFuncStat.cs +++ b/FrmHotFuncStat.cs @@ -58,14 +58,11 @@ DataTable table = OledbHelper.QueryTable(sql); - if (table != null) + if (table == null) return; + for (int i = 0; i < table.Rows.Count; i++) { - for (int i = 0; i < table.Rows.Count; i++) - { - userLists.Items.Add(table.Rows[i][0].ToString()); - } + userLists.Items.Add(table.Rows[i][0].ToString()); } - } //统计结果 private void statBtn_Click(object sender, EventArgs e) diff --git a/FrmLayerControl.cs b/FrmLayerControl.cs index 8586041..8fbce97 100644 --- a/FrmLayerControl.cs +++ b/FrmLayerControl.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Windows.Forms; using DevComponents.DotNetBar; using GeoScene.Data; @@ -13,10 +14,10 @@ GSOGlobeControl globeControl1; GSOGlobeControl globeControl2; - TreeNode terrainManagerNode = null; - TreeNode layerManagerNode = null; - TreeNode terrainManagerNode1 = null; - TreeNode layerManagerNode1 = null; +// TreeNode terrainManagerNode = null; +// TreeNode layerManagerNode = null; +// TreeNode terrainManagerNode1 = null; +// TreeNode layerManagerNode1 = null; public FrmLayerControl(GSOGlobeControl ctl1,GSOGlobeControl ctl2) { @@ -25,14 +26,14 @@ globeControl2 = ctl2; } - private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) - { - treeNode=new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - } +// private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) +// { +// treeNode=new TreeNode(); +// treeNode.ImageIndex = 0; +// treeNode.SelectedImageIndex = 0; +// treeNode.Checked = false; +// treeNode.Text = strTreeNodeText; +// } // private void initTreeView() // { @@ -51,234 +52,258 @@ // layerTree2.Nodes.Add(terrainManagerNode); // } - #region wxl重构树形结构代码 + + - private TreeNode treeNode(string strTreeNodeText) - { - TreeNode treeNode = new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - return treeNode; - } -// private void appendToParent(TreeNodeCollection treeNodeCollection, ) - #endregion - private void initTreeView() +// private void initNode(string nodeName) +// { +// TreeNode nodeGroupElse1 = new TreeNode(); +// nodeGroupElse1.Text = nodeName; +// layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); +// +// TreeNode nodeGroupElse = new TreeNode(); +// nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; +// layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); +// } + +// private void initTreeNode(XmlNodeList Params) +// { +// foreach (XmlNode paramsNode in Params) //layers +// { +// foreach (XmlNode layerNode in paramsNode) //layer +// { +// initNode(layerNode.Attributes["label"].Value); +// } +// } +// +// initNode("基础图层"); +// initNode("其他"); +// } + +// private void FrmLayerControl_Load(object sender, EventArgs e) +// { +// +// initTreeView(); +// try +// { +// XmlDocument doc = new XmlDocument(); +// doc.Load(Application.StartupPath + "\\双屏设置.xml"); +// XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// +// initTreeNode(Params); +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// +// RefreshLayerAndTerrainTree(); +// } + private void FrmLayerControl_Load(object sender, EventArgs e) { layerTree1.Nodes.Clear(); layerTree2.Nodes.Clear(); - - //加载layertree2 - initLayerTree(out layerManagerNode1, "图层管理"); - layerTree1.Nodes.Add(layerManagerNode1); - initLayerTree(out terrainManagerNode1, "地形管理"); - layerTree1.Nodes.Add(terrainManagerNode1); - - initLayerTree(out layerManagerNode, "图层管理"); - layerTree2.Nodes.Add(layerManagerNode); - initLayerTree(out terrainManagerNode, "地形管理"); - layerTree2.Nodes.Add(terrainManagerNode); + TreeUtils.InitLayerTree(globeControl1, layerTree1, "实测数据"); + TreeUtils.InitLayerTree(globeControl2, layerTree2, "施工数据"); } - private void initNode(string nodeName) - { - TreeNode nodeGroupElse1 = new TreeNode(); - nodeGroupElse1.Text = nodeName; - layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); + #region wxl重构树形结构代码 - TreeNode nodeGroupElse = new TreeNode(); - nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; - layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); - } + /// + /// 构造tree,最多解析三层,可放在工具类中 - private void initTreeNode(XmlNodeList Params) - { - foreach (XmlNode paramsNode in Params) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - initNode(layerNode.Attributes["label"].Value); - } - } + /// 所属地球 + /// 要加载的树 + /// 数据来源,实测数据/施工数据/规划数据/红线数据,为空则展示全部 +// private void initTree(GSOGlobeControl gsoGlobeControl,TreeView treeView, string viewDatasrc) +// { +// treeView.Nodes.Clear(); +// LayerConfig layerConfig = Utility.layerConfig; +// List datasrcs = layerConfig.datasrcs; +// foreach (DataSrc datasrc in datasrcs) +// { +// if (viewDatasrc != null && !viewDatasrc.Trim().Equals("") && !datasrc.label.Equals(viewDatasrc)) continue; +// TreeNode rootNode = treeView.Nodes.Add(datasrc.label); +// List layerTypes = datasrc.layertypes; +// foreach (LayerType layerType in layerTypes) +// { +// TreeNode secNode = rootNode.Nodes.Add(layerType.label); +// List layers = layerType.layers; +// foreach (Layer layer in layers) +// { +// GSOLayer gsoLayer = gsoGlobeControl.Globe.Layers.GetLayerByCaption(layer.layer); +// if (gsoLayer == null) continue;//将不存在的去除 +// TreeNode node = new TreeNode(); +// node.Tag = gsoLayer; +// node.Text = layer.label; +// node.Checked = gsoLayer.Visible; +// if (gsoLayer.Visible) +// { +// secNode.Checked = true; +// rootNode.Checked = true; +// } +// secNode.Nodes.Add(node); +// } +// } +// } +// } - initNode("基础图层"); - initNode("其他"); - } + #endregion - private void FrmLayerControl_Load(object sender, EventArgs e) - { - initTreeView(); - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(Application.StartupPath + "\\双屏设置.xml"); - XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, +// TreeView layerTree) +// { +// try +// { +// for (int i = 0; i < nLayerCount; i++) +// { +// GSOLayer layer = globcontrol.Globe.Layers[i]; +// if (layer == null) continue; +// string layerName = layer.Name; +// TreeNode node = new TreeNode(); +// node.Tag = layer; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = layer.Caption; +// node.Checked = layer.Visible; +// +// bool isContains = false; +// for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) +// { +// if (!layerName.Contains("fttp:")) +// { +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || +// layerName.Contains("施工") || +// layerName.Contains("规划")) continue; +// break; +// case "layerTree2": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[j].Nodes.Add(node); +// isContains = true; +// break; +// } +// else +// { +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); +// isContains = true; +// break; +// } +// } +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || +// layerName.Contains("标注") || +// isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || +// layerName.Contains("景观") || layerName.Contains("红线")) +// continue; +// break; +// case "layerTree2": +// if (isContains != false || layerName.Contains("tempLgdData2")) +// continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); +// } +// +// for (int i = 0; i < nTerrainCount; i++) +// { +// GSOTerrain terrain = globcontrol.Globe.Terrains[i]; +// if (terrain == null) continue; +// TreeNode node = new TreeNode(); +// node.Tag = terrain; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = terrain.Caption; +// node.Checked = terrain.Visible; +// switch (layerTree.Name) +// { +// case "layerTree1": +// terrainManagerNode1.Nodes.Add(node); +// break; +// case "layerTree2": +// terrainManagerNode.Nodes.Add(node); +// break; +// default: +// break; +// } +// } +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// } - initTreeNode(Params); - } - catch (Exception ex) - { - LogError.PublishError(ex); - } +// private void initTreeNodeCheckedStatus(TreeView layerTreeView) +// { +// //节点选中状态控制 +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// if (node.Checked != true) continue; +// layerTreeView.Nodes[0].Checked = true; +// break; +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOTerrain layer = childNode.Tag as GSOTerrain; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// } - RefreshLayerAndTerrainTree(); - } - - private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, - TreeView layerTree) - { - try - { - for (int i = 0; i < nLayerCount; i++) - { - GSOLayer layer = globcontrol.Globe.Layers[i]; - if (layer == null) continue; - string layerName = layer.Name; - TreeNode node = new TreeNode(); - node.Tag = layer; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = layer.Caption; - node.Checked = layer.Visible; - - bool isContains = false; - for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) - { - if (!layerName.Contains("fttp:")) - { - switch (layerTree.Name) - { - case "layerTree1": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || - layerName.Contains("施工") || - layerName.Contains("规划")) continue; - break; - case "layerTree2": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[j].Nodes.Add(node); - isContains = true; - break; - } - else - { - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); - isContains = true; - break; - } - } - switch (layerTree.Name) - { - case "layerTree1": - if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || - layerName.Contains("标注") || - isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || - layerName.Contains("景观") || layerName.Contains("红线")) - continue; - break; - case "layerTree2": - if (isContains != false || layerName.Contains("tempLgdData2")) - continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); - } - - for (int i = 0; i < nTerrainCount; i++) - { - GSOTerrain terrain = globcontrol.Globe.Terrains[i]; - if (terrain == null) continue; - TreeNode node = new TreeNode(); - node.Tag = terrain; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = terrain.Caption; - node.Checked = terrain.Visible; - switch (layerTree.Name) - { - case "layerTree1": - terrainManagerNode1.Nodes.Add(node); - break; - case "layerTree2": - terrainManagerNode.Nodes.Add(node); - break; - default: - break; - } - } - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - - private void initTreeNodeCheckedStatus(TreeView layerTreeView) - { - //节点选中状态控制 - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - if (node.Checked != true) continue; - layerTreeView.Nodes[0].Checked = true; - break; - } - - foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOTerrain layer = childNode.Tag as GSOTerrain; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - } - - void exPandTreeNode() - { - layerManagerNode1.Expand(); - terrainManagerNode1.Expand(); - layerManagerNode.Expand(); - terrainManagerNode.Expand(); - } +// void exPandTreeNode() +// { +// layerManagerNode1.Expand(); +// terrainManagerNode1.Expand(); +// layerManagerNode.Expand(); +// terrainManagerNode.Expand(); +// } /// /// 刷新节点树 /// - private void RefreshLayerAndTerrainTree() - { - int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 - int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 - addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); - initTreeNodeCheckedStatus(layerTree1); - - int nLayerCount = globeControl2.Globe.Layers.Count; - int nTerrainCount = globeControl2.Globe.Terrains.Count; - addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); - initTreeNodeCheckedStatus(layerTree2); - - // 展开 - exPandTreeNode(); - } +// private void RefreshLayerAndTerrainTree() +// { +// int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 +// int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 +// addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); +// initTreeNodeCheckedStatus(layerTree1); +// +// int nLayerCount = globeControl2.Globe.Layers.Count; +// int nTerrainCount = globeControl2.Globe.Terrains.Count; +// addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); +// initTreeNodeCheckedStatus(layerTree2); +// +// // 展开 +// exPandTreeNode(); +// } /// /// 节点树复选框选中状态改变事件处理 @@ -289,144 +314,132 @@ { if (e.Action != TreeViewAction.Unknown) { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } + TreeUtils.TreeNodeCheckedChange(globeControl2,e.Node); + } + } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree2(e.Node, e.Node.Checked); + private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) + { + if (e.Action != TreeViewAction.Unknown) + { + TreeUtils.TreeNodeCheckedChange(globeControl1, e.Node); } } + + +// private void layerTree2_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree2(e.Node, e.Node.Checked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree1(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree1(childNode, isChecked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree2(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree2(childNode, isChecked); +// } +// } /// /// 节点树选中状态改变事件 /// /// /// - private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) - { - if (e.Action != TreeViewAction.Unknown) - { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } +// private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree1(e.Node, e.Node.Checked); +// } +// } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree1(e.Node, e.Node.Checked); - } - } - /// - /// 改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 - /// - /// - private void CheckParentNode(TreeNode curNode) - { - bool bChecked = false; - - if (curNode.Parent != null) - { - foreach (TreeNode node in curNode.Parent.Nodes) - { - if (node.Checked) - { - bChecked = true; - break; - } - } - if (bChecked) - { - curNode.Parent.Checked = true; - CheckParentNode(curNode.Parent); - } - else - { - curNode.Parent.Checked = false; - CheckParentNode(curNode.Parent); - } - } - } } } diff --git a/FrmMetadata.cs b/FrmMetadata.cs index 4d0d5cb..bb7c46c 100644 --- a/FrmMetadata.cs +++ b/FrmMetadata.cs @@ -12,12 +12,8 @@ { public partial class FrmMetadata : Office2007Form { - List pipelineLayerNames = new List();//线图层名称 - List workwellLayerNames = new List();//工井图层名称 - List valueLayerNames = new List();//阀门图层名称 - List instrumenLayerNames = new List();//附属物图层名称 - string filename = Utility.filename; - DataSet dataSet = new DataSet(); + + bool selectedLayer; public FrmMetadata() @@ -25,308 +21,33 @@ InitializeComponent(); loadTreeView(layerTree); } - private void FrmMetadata_Load(object sender, EventArgs e) - { - //this.ntLblC.Text = "nn"; - // loadTreeView(layerTree); - } private void loadTreeView(TreeView tv)//构建图层树 { - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - //tv.ShowPlusMinus = false; - - //tv.Nodes.Clear(); - tv.ShowLines = true; - // tv.ImageList = imageList1; - tv.CheckBoxes = false; - #region 三级 - - //foreach (XmlNode paramsNode in Params1) //layers - //{ - // foreach (XmlNode layerNode in paramsNode) //layer - // { - // TreeNode nodelayer = new TreeNode(); - // string layerName = layerNode.Attributes["label"].Value; - // nodelayer.Text = layerName; - - // if (layerNode.HasChildNodes != false) - // { - // tv.Nodes.Add(nodelayer); - // foreach (XmlNode layerchildNode in layerNode) //layerchild - // { - // if (layerchildNode.Name == "layerchild") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["type"].Value; - // string layerchildName = layerchildNode.Attributes["label"].Value; - // if (layerType == "locaserver") - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - - // } - // else - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // if (layerchildNode.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = boollayer; - // nodelayer.Nodes.Add(nodelayerchild); - // } - // } - // else if (layerchildNode.Name == "layertype") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["label"].Value; - // nodelayerchild.Text = layerType; - // nodelayerchild.Tag = layerType; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - // if (layerchildNode.HasChildNodes == true) - // { - // foreach (XmlNode childNodeLayer in layerchildNode) - // { - // TreeNode nodelayerchild1 = new TreeNode(); - // string layerName1 = childNodeLayer.Attributes["layer"].Value; - // string layerchildName = childNodeLayer.Attributes["label"].Value; - // string layerType1 = childNodeLayer.Attributes["type"].Value; - // if (childNodeLayer.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild1.Text = layerchildName; - // nodelayerchild1.Tag = layerType1 + "|" + layerName1; - // nodelayerchild1.Checked = boollayer; - // nodelayerchild.Nodes.Add(nodelayerchild1); - // } - // } - // } - - // } - // } - // else - // { - // tv.Nodes.Add(nodelayer); - // } - // } - - //} - - #endregion - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - TreeNode nodelayer = new TreeNode(); - string layerName = layerNode.Attributes["label"].Value; - nodelayer.Text = layerName; - - if (layerNode.HasChildNodes) - { - tv.Nodes.Add(nodelayer); - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - if (layerchildNode.Name == "layerchild") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["type"].Value; - string layerchildName = layerchildNode.Attributes["label"].Value; - if (layerType == "locaserver") - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - - } - else - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - if (layerchildNode.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - //nodelayerchild.Checked = boollayer; - nodelayer.Nodes.Add(nodelayerchild); - } - } - else if (layerchildNode.Name == "layertype") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["label"].Value; - nodelayerchild.Text = layerType; - nodelayerchild.Tag = layerType; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode) - { - if (childNodeLayer.HasChildNodes) - { - TreeNode nodelayerchild2 = new TreeNode(); - string layer = childNodeLayer.Attributes["label"].Value; - nodelayerchild2.Text = layer; - nodelayerchild2.Tag = layer; - nodelayerchild2.Checked = true; - nodelayerchild.Nodes.Add(nodelayerchild2); - foreach (XmlNode n in childNodeLayer) - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = n.Attributes["layer"].Value; - string layerchildName = n.Attributes["label"].Value; - string layerType1 = n.Attributes["type"].Value; - if (n.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (n.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (n.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (n.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild2.Nodes.Add(nodelayerchild1); - - } - } - else - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = childNodeLayer.Attributes["layer"].Value; - string layerchildName = childNodeLayer.Attributes["label"].Value; - string layerType1 = childNodeLayer.Attributes["type"].Value; - if (childNodeLayer.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild.Nodes.Add(nodelayerchild1); - - } - } - } - } - - } - } - else - { - tv.Nodes.Add(nodelayer); - } - } - - } - if (tv.Nodes.Count > 0) - { - //tv.Nodes[0].Expand(); - if (tv.Nodes.Count > 0) - { - foreach (TreeNode node in tv.Nodes) - { - //node.Expand(); - } - } - } - //tv.ExpandAll(); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } + //tv.ShowPlusMinus = false; + //tv.Nodes.Clear(); + // tv.ImageList = imageList1; + tv.ShowLines = true; + tv.CheckBoxes = false; + TreeUtils.InitLayerTree(null, tv, null); } - + /// + /// 点击父节点则展开,点击子节点则编辑元数据 + /// + /// + /// private void layerTree_AfterSelect(object sender, TreeViewEventArgs e) { - String layername = layerTree.SelectedNode.Text; - if (layerTree.SelectedNode.GetNodeCount(true) == 0) { - searchLayerInfo(layername); - - selectedLayer = true; - clearBtn.Hide(); - completeBtn.Hide(); + String layername = e.Node.Text; + if (e.Node.GetNodeCount(true) != 0) + { //点击父节点,则展开 + e.Node.Expand(); + return; } + searchLayerInfo(layername); + selectedLayer = true; + clearBtn.Hide(); + completeBtn.Hide(); } //查询元数据 private void searchLayerInfo(String layername) { @@ -335,8 +56,6 @@ + " casic_metadatalayer where casic_metadatacontent.\"LAYERID\" = casic_metadatalayer.\"LAYERID\" and casic_metadatalayer.\"LAYERNAME\"='" + layername+"'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; - if (table != null && table.Rows.Count > 0) { groupBox1.Text = layername; @@ -400,8 +119,6 @@ //判断此时layerTree有没有选中的图层 if (selectedLayer)//有选中的图层,获得其名 { - string name = layerTree.SelectedNode.Text; - OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "支持格式(*.xml)|*.xml|XML数据(*.xml)|"; dlg.Multiselect = true; @@ -419,31 +136,24 @@ //读入元数据 private void AddXMLMDdata(string strFilePath) { - try - { - dataSet.Clear(); //清空数据集中的内容 - dataSet.ReadXml(strFilePath); //读取XML文件中的内容 + DataSet dataSet = new DataSet(); + dataSet.ReadXml(strFilePath); //读取XML文件中的内容 - //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); - string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); - string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); - string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); - string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); + //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); + string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); + string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); + string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); + string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); - //this.titleLbl.Text = attrtitle; - consLblC.Text = attrcons; - descLblC.Text = attrdesc; - authorLblC.Text = attrauthor; - ntLblC.Text = attrnt; - //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); + //this.titleLbl.Text = attrtitle; + consLblC.Text = attrcons; + descLblC.Text = attrdesc; + authorLblC.Text = attrauthor; + ntLblC.Text = attrnt; + //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); - completeBtn.Visible = true; - //this.clearBtn.Visible = true; - } - catch (Exception e) - { - - } + completeBtn.Visible = true; + //this.clearBtn.Visible = true; } //新建/编辑元数据 private void editBtn_Click(object sender, EventArgs e) @@ -509,11 +219,7 @@ string sql = "select \"LAYERID\" from casic_metadatalayer where \"LAYERNAME\" = '" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - if (table != null && table.Rows.Count > 0)//已有该图层,属于编辑 - { - return false; - } - return true; + return table == null || table.Rows.Count <= 0; } //保存元数据 private void saveData(String method,String layername,String cons,String desc,String author,String nt) { @@ -539,17 +245,16 @@ string insertSQL = "insert into casic_metadatalayer values ('" + layerid + "','" + layername + "')";//+ string insertSQL2 = "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','" + desc + "','" + author + "','" + nt + "')"; // "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','"+desc+"','"+author+"','"+nt+"')"; - if ((OledbHelper.sqlExecuteNonQuery(insertSQL) > 0)&&(OledbHelper.sqlExecuteNonQuery(insertSQL2)>0)) - { - MessageBox.Show("保存元数据成功!"); + if ((OledbHelper.sqlExecuteNonQuery(insertSQL) <= 0) || + (OledbHelper.sqlExecuteNonQuery(insertSQL2) <= 0)) return; + MessageBox.Show("保存元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } else { //更新 string layeridSQL = "select layerid from casic_metadatalayer where LAYERNAME='"+layername+"'"; @@ -561,16 +266,14 @@ + "',casic_metadatacontent.MDAUTHOR ='" + author.Trim() + "',casic_metadatacontent.NT ='" + nt.Trim() + "' where casic_metadatacontent.LAYERID='" + layerid + "'"; - if (OledbHelper.sqlExecuteNonQuery(updateSQL) > 0) - { - MessageBox.Show("更新元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + if (OledbHelper.sqlExecuteNonQuery(updateSQL) <= 0) return; + MessageBox.Show("更新元数据成功!"); + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } } diff --git a/FrmMetadataStat.cs b/FrmMetadataStat.cs index cb19f84..c3c1359 100644 --- a/FrmMetadataStat.cs +++ b/FrmMetadataStat.cs @@ -2,16 +2,16 @@ using System.Collections; using System.Collections.Generic; using System.Data; +using System.Linq; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; -using System.Xml; using DevComponents.DotNetBar; namespace Cyberpipe { public partial class FrmMetadataStat : Office2007Form { - Dictionary dic = new Dictionary(); + public FrmMetadataStat() { InitializeComponent(); @@ -22,7 +22,7 @@ string sql = "select LAYERNAME from casic_metadataLayer where LAYERNAME like '%" + keywordsTxt.Text.Trim() + "%'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; + int num = 0; resultList.Clear(); consLblC.Text = ""; @@ -32,6 +32,7 @@ if (table != null && table.Rows.Count > 0) { + num = table.Rows.Count; for (int i = 0; i < num;i++ ) { resultList.Items.Add(table.Rows[i][0].ToString()); @@ -56,7 +57,8 @@ int metadataLayernum = statistMDLayer(); int nomdLayernum = layernum - metadataLayernum; //MessageBox.Show("共有多少层?" + layernum.ToString()+"=="+metadataLayernum.ToString()+"=="+nomdLayernum.ToString()); - dic.Clear(); +// dic.Clear(); + Dictionary dic = new Dictionary(); dic.Add("已建",metadataLayernum); dic.Add("未建", nomdLayernum); @@ -74,11 +76,9 @@ foreach (string key in dic.Keys) { - if (dic[key] != 0) - { - xlist.Add(key); - ylist.Add(dic[key]); - } + if (dic[key] == 0) continue; + xlist.Add(key); + ylist.Add(dic[key]); } chart1.Series[0].Points.DataBindXY(xlist, ylist); @@ -89,73 +89,15 @@ string sql = "select * from casic_metadataLayer"; DataTable table = OledbHelper.QueryTable(sql); - mdlayernum = table.Rows.Count; + if(table!=null)mdlayernum = table.Rows.Count; return mdlayernum; } //统计有多少个图层 - private int statistLayer() { - int layernum = 0; - - string filename = Utility.filename; - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - //MessageBox.Show(layerNode.Attributes["label"].Value); - - if (layerNode.HasChildNodes) - { - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - //MessageBox.Show(layerchildNode.Attributes["label"].Value); - if (layerchildNode.Name == "layerchild") - { - layernum++; - } - else if (layerchildNode.Name == "layertype") - { - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode)//layertype下的layerchild - { - //MessageBox.Show(childNodeLayer.Attributes["label"].Value); - if (childNodeLayer.HasChildNodes) - { - - foreach (XmlNode n in childNodeLayer) - { - layernum++; - } - } - else - { - - layernum++; - } - } - } - } - - } - } - } - - } - - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - return layernum; + private int statistLayer() + { + List datasrcs = Utility.layerConfig.datasrcs; + return datasrcs.SelectMany(datasrc => datasrc.layertypes).Sum(layerType => layerType.layers.Count); } //选择list @@ -174,7 +116,6 @@ + "join casic_metadatalayer on casic_metadatalayer.LAYERID = casic_metadatacontent.LAYERID " + "where casic_metadatalayer.LAYERNAME='" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; //MessageBox.Show(num.ToString()); if (table != null && table.Rows.Count > 0) { @@ -192,10 +133,5 @@ ntLblC.Text = ""; } } - - private void buttonX1_Click(object sender, EventArgs e) - { - drawChart(); - } } } diff --git a/FrmWait.Designer.cs b/FrmWait.Designer.cs index 99733ea..88f5a29 100644 --- a/FrmWait.Designer.cs +++ b/FrmWait.Designer.cs @@ -55,7 +55,6 @@ this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(0, 24); this.label1.TabIndex = 1; - this.label1.Click += new System.EventHandler(this.label1_Click); // // FrmWait // @@ -71,7 +70,7 @@ this.ShowIcon = false; this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; this.Text = "正在处理,请稍后..."; - this.Load += new System.EventHandler(this.FrmWait_Load); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmWait_FormClosing); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); diff --git a/ClassDoubleScreenCompare.cs b/ClassDoubleScreenCompare.cs new file mode 100644 index 0000000..f2935da --- /dev/null +++ b/ClassDoubleScreenCompare.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using GeoScene.Globe; +using GeoScene.Data; +using GeoScene.Engine; +using System.Drawing; + +namespace Cyberpipe +{ + class ClassDoubleScreenCompare + { + public static GSOFeature getSameFeatureFromOtherGlobe(GSOFeature feature, + GSOGlobeControl globeControl1, GSOGlobeControl globeControl2,double bufferWidth,GSOGeoPolygon3D resPolygon) + { + GSOLayer layer; + GSOFeatures features = new GSOFeatures(); + + if (!feature.Dataset.Caption.StartsWith("施工")) + { + layer = feature.Dataset.Caption == "供电管线" + ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") + : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(feature, fs[i], globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + else + { + layer = feature.Dataset.Caption == "施工电力管线" + ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") + : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(fs[i], feature, globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + + return getMostSimilarFeatureFromFeatures(feature, features); + + } + + + private static GSOFeature getMostSimilarFeatureFromFeatures(GSOFeature feature, GSOFeatures features) + { + double maxLength = 0; + GSOFeature f = new GSOFeature(); + GSOGeoPolyline3D line = feature.Geometry as GSOGeoPolyline3D; + + if (features.Length == 0) return null; + if (features.Length == 1) + { + f = features[0]; + f.HighLight = true; + } + else + { + for (int m = 0; m < features.Length; m++) + { + GSOGeoPolyline3D tempSGLine = features[m].Geometry as GSOGeoPolyline3D; + + double tempLength = tempSGLine.GetSpaceLength(false, 6378137); + double lengthAbs = Math.Abs(tempLength - line.GetSpaceLength(false, 6378137)); + if (m == 0) + { + f = features[0]; + f.HighLight = true; + maxLength = lengthAbs; + } + else if (lengthAbs < maxLength) + { + f = features[m]; + f.HighLight = true; + maxLength = lengthAbs; + } + } + } + return f; + } + + private static bool isSameFeature(GSOFeature feature1, GSOFeature feature2, GSOLayer layer, double bufferWidth) + { + GSOGeoPolyline3D line = feature1.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = line.CreateBuffer(bufferWidth * 2, true, 5, true, false); + + if (bufferPolygon == null) return false; + + GSOFeatures featuresInLayer = layer.FindFeaturesInPolygon(bufferPolygon, true); + + if (featuresInLayer == null || featuresInLayer.Length <= 0) + return false; + + for (int i = 0; i < featuresInLayer.Length; i++) + { + if (featuresInLayer[i].Name == feature2.Name) + { + return true; + break; + } + } + return false; + } + + private static bool isSimilarFeature(GSOFeature srcFeature, GSOFeature dscFeature, + GSOGlobeControl globeControl1,GSOGlobeControl globeControl2,double bufferWidth) + { + GSOLayer dscLayer = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); + GSOLayer srcLayer = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); + + if (!isSameFeature(srcFeature, dscFeature, dscLayer, bufferWidth) + && !isSameFeature(dscFeature, srcFeature, srcLayer, bufferWidth)) + return false; + return true; + } + + public static void CalculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2, + out double horizonDistance, out double verticalDistance, GSOGlobeControl globeControl1, GSOGlobeControl globeControl2) + { + GSOPoint3d pntIntersect1 = new GSOPoint3d(); + GSOPoint3d pntIntersect2 = new GSOPoint3d(); + GSOPoint3d pntProIntersect1 = new GSOPoint3d(); + GSOPoint3d pntProIntersect2 = new GSOPoint3d(); + + verticalDistance = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, verticalDistance, true, "垂直", globeControl1, globeControl2); + + horizonDistance = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, horizonDistance, true, "水平", globeControl1, globeControl2); + + } + + private static GSOPoint3d LabelDistance(GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, + double distance, bool markerVisible, string label,GSOGlobeControl globeControl1,GSOGlobeControl globeControl2) + { + if (pntIntersect1 == null || pntIntersect2 == null) + return new GSOPoint3d(); + GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); + GSOPoint3ds point3ds = new GSOPoint3ds(); + point3ds.Add(pntIntersect1); + point3ds.Add(pntIntersect2); + disline.AddPart(point3ds); + + GSOGeoMarker dismarker = new GSOGeoMarker(); + GSOFeature marker = null; + GSOFeature line = null; + createLineStyle(out marker, out line, disline, pntIntersect1, pntIntersect2, distance, label, dismarker); + + line.Visible = marker.Visible = markerVisible; + globeControl1.Globe.MemoryLayer.AddFeature(line); + globeControl1.Globe.MemoryLayer.AddFeature(marker); + + globeControl2.Globe.MemoryLayer.AddFeature(line); + globeControl2.Globe.MemoryLayer.AddFeature(marker); + + return dismarker.Position; + } + + private static void createLineStyle(out GSOFeature marker, out GSOFeature line, GSOGeoPolyline3D disline, + GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) + { + GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 + style.LineColor = Color.Red; + style.LineWidth = 5; //设置线的宽度为5 + style.VertexVisible = true; //显示线的节点 + disline.Style = style; //把风格添加到线上 + disline.AltitudeMode = EnumAltitudeMode.Absolute; + line = new GSOFeature(); + line.Geometry = disline; + + dismarker.X = pntIntersect1.X; + dismarker.Y = pntIntersect1.Y; + dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; + dismarker.Text = label + distance.ToString("0.00") + "米"; + dismarker.AltitudeMode = EnumAltitudeMode.Absolute; + + GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); + GSOTextStyle styleText = new GSOTextStyle(); + styleText.IsSizeFixed = true; + styleText.ForeColor = Color.Red; + styleText.FontSize = 20; + styleMarker.TextStyle = styleText; + dismarker.Style = styleMarker; + + marker = new GSOFeature(); + marker.Geometry = dismarker; + } + + } +} diff --git a/Cyberpipe.csproj b/Cyberpipe.csproj index d8aa9c8..bcce54d 100644 --- a/Cyberpipe.csproj +++ b/Cyberpipe.csproj @@ -203,6 +203,7 @@ + @@ -1143,6 +1144,7 @@ SysRescInfoManager.cs + True True diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 123caf1..2c45db6 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -258,42 +258,25 @@ for (int i = 0; i < scLayer.GetAllFeatures().Length; i++) { GSOFeature scFeature = scLayer.GetAt(i); - if (scFeature.GetFieldAsString("所属道路") == road) + if (scFeature.GetFieldAsString("所属道路") != road) continue; + GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + + GSOFeature sgFeature = null; + GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); + + //**判断同一个Feature + if (sgFeatures.Length >= 1) { - GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); - GSOFeature sgFeature = null; - GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); - - //**判断同一个Feature - if (sgFeatures.Length >= 1) + if (sgFeature != null) { - sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); + GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; + double horizonDistance, verticalDistance; - if (sgFeature != null) - { - GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; - double horizonDistance, verticalDistance; - - CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); - GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); - } - else - { - scFeature.HighLight = true; - DataRow dr = dt.NewRow(); - dr[0] = scLayer.Caption; - dr[1] = scFeature.GetFieldAsString("编号"); - dr[2] = sgLayer.Caption; - dr[3] = "无"; - dr[4] = "无"; - dr[5] = "0.02"; - dr[6] = "无"; - dr[7] = "0.02"; - dr[8] = "未设计管段"; - dt.Rows.Add(dr); - } + CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); + GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); } else { @@ -311,6 +294,21 @@ dt.Rows.Add(dr); } } + else + { + scFeature.HighLight = true; + DataRow dr = dt.NewRow(); + dr[0] = scLayer.Caption; + dr[1] = scFeature.GetFieldAsString("编号"); + dr[2] = sgLayer.Caption; + dr[3] = "无"; + dr[4] = "无"; + dr[5] = "0.02"; + dr[6] = "无"; + dr[7] = "0.02"; + dr[8] = "未设计管段"; + dt.Rows.Add(dr); + } } } /// diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index 53946c0..fe32265 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -4,7 +4,7 @@ using GeoScene.Globe; namespace Cyberpipe -{ +{ //本类作用为:辅助GlobalControl上Feature的统计分析工具类 class FeatureStatisticsService { /// @@ -60,8 +60,8 @@ /// /// /// - /// - /// + /// + /// /// /// public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) @@ -74,6 +74,7 @@ for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; double length = line.GetSpaceLength(true, 6378137); totalLength += length; ncount += 1; @@ -114,7 +115,7 @@ for (int i = 0; i < feats.Length; i++) { double radius = feats[i].GetFieldAsDouble(fieldName); - if (radius >= min && radius <= max) + if (radius >= minValue && radius <= maxValue) { result.Add(feats[i]); } @@ -148,23 +149,22 @@ lstDiameter.Sort(); if (lstDiameter.Count > 0) { - for (int m = 0; m < lstDiameter.Count; m++) + foreach (float diameter in lstDiameter) { double totalLength = 0.00; int ncount = 0; for (int j = 0; j < feats.Length; j++) { - if (feats[j].GetFieldAsFloat("管径_毫米") == lstDiameter[m]) - { - GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } + if (Math.Abs(feats[j].GetFieldAsFloat("管径_毫米") - diameter) > 0.00001) continue; + GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = lstDiameter[m].ToString(); + featuresClass.groupFieldValue = diameter.ToString(); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -191,13 +191,13 @@ //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); - for (int j = 0; j < accessStrs.Length; j++) + foreach (string accssname in accessStrs) { - GSOFeatures feats = null; - int ncount = 0; + GSOFeatures feats; + int ncount; if (polygon == null) { - feats = flayer.GetFeatureByFieldValue("附属物名称", accessStrs[j], true); + feats = flayer.GetFeatureByFieldValue("附属物名称", accssname, true); ncount = feats.Length; } else @@ -207,14 +207,14 @@ //过滤 for (int n = 0; n < feats.Length; n++) { - if (feats[n].GetFieldAsString("附属物名称").Contains(accessStrs[j])) newfeats.Add(feats[n]); + if (feats[n].GetFieldAsString("附属物名称").Contains(accssname)) newfeats.Add(feats[n]); } ncount = newfeats.Length; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); - featuresClass.layerName = accessStrs[j]; + featuresClass.layerName = accssname; featuresClass.ncount = ncount; result.Add(featuresClass); @@ -303,6 +303,26 @@ if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); - } + } + + + /// + /// 获取globeControl上选中的管线,如果返回空则没有选中的管线 + /// + /// 地球引擎 + /// 返回一根线 + public static GSOFeature GetSelectedPipeline(GSOGlobeControl globeControl) + { + GSOFeature resFeature; + if (globeControl.Globe.SelObjectCount < 1) return null; + GSOLayer resLayer; + globeControl.Globe.GetSelectObject(0, out resFeature, out resLayer); + if (resFeature == null) return null; + + GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; + if (line1 == null) return null; + GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; + return pipeStyle1 == null ? null : resFeature; + } } } diff --git a/FrmCompareFeature.cs b/FrmCompareFeature.cs index a05e8e7..ac622c4 100644 --- a/FrmCompareFeature.cs +++ b/FrmCompareFeature.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Data; using System.Drawing; using System.Windows.Forms; @@ -11,26 +10,16 @@ { public partial class FrmCompareFeature : Office2007Form { - GSOFeature srcFeature; - GSOFeature dscFeature; - GSOGlobeControl globeControl1; - GSOGlobeControl globeControl2; - bool isSamePolyline; - - GSOLayer layerTemp; - GSOLayer layerTemp2; - GSOFeature new_feat; + private GSOFeature srcFeature, dscFeature; + private GSOGlobeControl globeControl1, globeControl2; GSOGeoPolygon3D resPolygon; - static FrmCompareFeature frm; - public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2, int width) + public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, int width) { if (frm == null) { - frm = new FrmCompareFeature(_globeControl1, _globeControl2, _layerTemp, _layerTemp2); - + frm = new FrmCompareFeature(_globeControl1, _globeControl2); frm.Location = new Point((width - frm.Width)/2, 50); frm.Show(_globeControl1.Parent); } @@ -41,8 +30,7 @@ } } - public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2) + public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2) { globeControl1 = _globeControl1; globeControl2 = _globeControl2; @@ -50,99 +38,35 @@ globeControl1.Globe.Action = EnumAction3D.SelectObject; globeControl2.Globe.Action = EnumAction3D.SelectObject; - layerTemp = _layerTemp; - layerTemp2 = _layerTemp2; globeControl1.MouseClick += globeControl1_MouseClick; globeControl2.MouseClick += globeControl2_MouseClick; } + private void invalParam() + { + if (srcFeature == null || dscFeature == null) + { + MessageBox.Show("请选择要对比的管段!", "提示"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) + { + MessageBox.Show("请选择同种类型图层!"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type || + srcFeature.Geometry.Type != EnumGeometryType.GeoPolyline3D) + return; + } + private void buttonAnalysis_Click(object sender, EventArgs e) { + invalParam(); + dataGridViewX1.DataSource = null; - - double bufferWidth = Convert.ToDouble(textBox1.Text); - - if (srcFeature == null || dscFeature == null) - MessageBox.Show("请选择要对比的管段!", "提示"); - else - { - if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) - MessageBox.Show("请选择同种类型图层!"); - else if (srcFeature.Geometry.Type == dscFeature.Geometry.Type && - srcFeature.Geometry.Type == EnumGeometryType.GeoPolyline3D) - { - lineLayerCompare(srcFeature, dscFeature, bufferWidth); - if (!isSamePolyline) - MessageBox.Show("实测管段与施工管段非同一条管段,请选择同一管段进行比较!", "提示"); - else - { - lineFeatureCompare(srcFeature, dscFeature); - globeControl1.Globe.Action = EnumAction3D.ActionNull; - globeControl2.Globe.Action = EnumAction3D.ActionNull; - } - } - else - MessageBox.Show("无法处理该类型图层!"); - } + lineFeatureCompare(srcFeature, dscFeature); } - - /// - /// 在容差范围内判断是否同一根管段 - /// - /// - /// - /// - /// - private bool lineLayerCompare(GSOFeature srcFeature, GSOFeature dscFeature, double bufferWidth) - { - isSamePolyline = false; - - GSOGeoPolyline3D srcLine = srcFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D srcBufferPolygon = srcLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer dsc = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); - - if (srcBufferPolygon != null) - { - GSOFeatures featuresInSrcLayer = dsc.FindFeaturesInPolygon(srcBufferPolygon, true); - - if (featuresInSrcLayer != null && featuresInSrcLayer.Length > 0) - { - for (int i = 0; i < featuresInSrcLayer.Length; i++) - { - if (featuresInSrcLayer[i].Name == dscFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D dscBufferPolygon = dscLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer src = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); - - if (dscBufferPolygon != null) - { - GSOFeatures featuresInDscLayer = src.FindFeaturesInPolygon(dscBufferPolygon, true); - - if (featuresInDscLayer != null && featuresInDscLayer.Length > 0) - { - for (int i = 0; i < featuresInDscLayer.Length; i++) - { - if (featuresInDscLayer[i].Name == srcFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - return isSamePolyline; - } - /// /// 分析两根管段的具体差异 /// @@ -156,8 +80,10 @@ GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; double dscLineLength = dscLine.GetSpaceLength(false, 6378137); - double horizonDistance = calculateDistance(srcLine, dscLine,false); - double verticalDistance = calculateDistance(srcLine, dscLine,true); + double horizonDistance, verticalDistance; + + ClassDoubleScreenCompare.CalculateDistance(srcLine, dscLine, out horizonDistance, + out verticalDistance,globeControl1,globeControl2); DataTable dt = new DataTable(); dt.Columns.Add("数据名称"); @@ -189,6 +115,98 @@ dt.Rows.Add(dscRow); dataGridViewX1.DataSource = dt; + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) + { + globeControl1.Globe.MemoryLayer.RemoveAllFeature(); + globeControl2.Globe.MemoryLayer.RemoveAllFeature(); + + GSOFeature new_feat = new GSOFeature(); + resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); + resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; + new_feat.Geometry = resPolygon; + + globeControl1.Globe.MemoryLayer.AddFeature(new_feat); + globeControl2.Globe.MemoryLayer.AddFeature(new_feat); + + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + public static void clearFeatureHighLight(GSOGlobeControl glb) + { + for (int i = 0; i < glb.Globe.Layers.Count; i++) + { + GSOLayer layer = glb.Globe.Layers[i]; + if (!(layer is GSOFeatureLayer)) continue; + GSOFeatures feats = layer.GetAllFeatures(); + for (int j = 0; j < feats.Length; j++) + { + feats[j].HighLight = false; + } + } + } + + void globeControl1_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl1.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl1.Globe.Action != EnumAction3D.SelectObject || + globeControl1.Globe.SelectedObject == null) + return; + GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + srcFeature = globeControl1.Globe.SelectedObject; + dscFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(srcFeature, + globeControl1,globeControl2,bufferWidth,resPolygon); + + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } + + void globeControl2_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl2.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl2.Globe.Action != EnumAction3D.SelectObject || + globeControl2.Globe.SelectedObject == null) + return; + + GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + dscFeature = globeControl2.Globe.SelectedObject; + srcFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(dscFeature, + globeControl1, globeControl2, bufferWidth, resPolygon); + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } private void FrmCompareFeature_FormClosing(object sender, FormClosingEventArgs e) @@ -198,322 +216,5 @@ frm = null; } - private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) - { - new_feat = new GSOFeature(); - resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); - resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; - new_feat.Geometry = resPolygon; - - layerTemp.AddFeature(new_feat); - layerTemp2.AddFeature(new_feat); - globeControl1.Refresh(); - globeControl2.Refresh(); - } - - private GSOLayer getSameLayer(GSOFeature feature) - { - GSOLayer layer = null; - if (!feature.Dataset.Caption.StartsWith("施工")) - { - layer = feature.Dataset.Caption == "供电管线" - ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") - : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); - } - else - { - layer = feature.Dataset.Caption == "施工电力管线" - ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") - : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); - } - - return layer; - } - - /// - /// 地球1中点击地球2中同步添加缓冲区 - /// - /// - /// - void globeControl1_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl1.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl1.Globe.Action == EnumAction3D.SelectObject && - globeControl1.Globe.SelectedObject != null) - { - GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - addPologyToGlobeControl(line, bufferWidth); - } - - srcFeature = globeControl1.Globe.SelectedObject; - GSOLayer layers = getSameLayer(srcFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = srcFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(srcFeature, features[i], Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - listFeatures.Add(features[i]); - } - calculate(out maxLength, out dscFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - /// - /// 地球2中点击地球1中同步添加缓冲区 - /// - /// - /// - void globeControl2_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl2.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl2.Globe.Action != EnumAction3D.SelectObject || - globeControl2.Globe.SelectedObject == null) - return; - else - { - GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - - addPologyToGlobeControl(line, bufferWidth); - } - - dscFeature = globeControl2.Globe.SelectedObject; - //双屏同时选中同一管段 - GSOLayer layers = getSameLayer(dscFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = dscFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(features[i], dscFeature, Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - { - listFeatures.Add(features[i]); - } - } - calculate(out maxLength, out srcFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - private void calculate(out double maxLength, out GSOFeature feature, GSOFeatures listFeatures, - GSOGeoPolyline3D scLine) - { - maxLength = 0; - feature=new GSOFeature(); - if (listFeatures.Length == 0) - feature = null; - else - { - if (listFeatures.Length == 1) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - } - else - { - for (int m = 0; m < listFeatures.Length; m++) - { - GSOGeoPolyline3D tempSGLine = listFeatures[m].Geometry as GSOGeoPolyline3D; - - double tempLength = tempSGLine.GetSpaceLength(false, 6378137); - double lengthAbs = Math.Abs(tempLength - scLine.GetSpaceLength(false, 6378137)); - if (m == 0) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - maxLength = lengthAbs; - } - else if (lengthAbs < maxLength) - { - feature = listFeatures[m]; - listFeatures[m].HighLight = true; - maxLength = lengthAbs; - } - } - } - } - } - - /// - /// 计算距离 - /// - /// - /// - /// - double calculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2,bool isVertical) - { - GSOPoint3d pntIntersect1 = new GSOPoint3d(); - GSOPoint3d pntIntersect2 = new GSOPoint3d(); - GSOPoint3d pntProIntersect1 = new GSOPoint3d(); - GSOPoint3d pntProIntersect2 = new GSOPoint3d(); - double dDist = 0; - if (isVertical) - { - dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "垂直"); - } - else - { - dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "水平"); - } - - return dDist; - } - - /// - /// 清除所有高亮Feature - /// - /// - private void clearFeatureHighLight(GSOGlobeControl glb1,GSOGlobeControl glb2) - { - layerTemp.RemoveAllFeature(); - layerTemp2.RemoveAllFeature(); - //清除gbl1中高亮 - for (int i = 0; i < glb1.Globe.Layers.Count; i++) - { - GSOLayer layer = glb1.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - //清除gbl2中高亮 - for (int i = 0; i < glb2.Globe.Layers.Count; i++) - { - GSOLayer layer = glb2.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - } - - /// - /// 添加标注 - /// - /// - /// - /// - /// - /// - /// - private GSOPoint3d LabelDistance(GSOLayer markerLayer, GSOLayer markerLayer2, - GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, bool markerVisible,string label) - { - if (pntIntersect1 == null || pntIntersect2 == null) - return new GSOPoint3d(); - GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); - GSOPoint3ds point3ds = new GSOPoint3ds(); - point3ds.Add(pntIntersect1); - point3ds.Add(pntIntersect2); - disline.AddPart(point3ds); - - GSOGeoMarker dismarker = new GSOGeoMarker(); - GSOFeature marker = null; - GSOFeature line = null; - createLineStyle(out marker, out line,disline, pntIntersect1, pntIntersect2, distance, label, dismarker); - - line.Visible = marker.Visible = markerVisible; - markerLayer.AddFeature(line); - markerLayer.AddFeature(marker); - - markerLayer2.AddFeature(line); - markerLayer2.AddFeature(marker); - - return dismarker.Position; - } - /// - /// 控制标注和字体的颜色 - /// - /// - /// - /// - /// - /// - /// - /// - /// - private void createLineStyle(out GSOFeature marker,out GSOFeature line,GSOGeoPolyline3D disline, - GSOPoint3d pntIntersect1,GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) - { - GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 - style.LineColor = Color.Red; - style.LineWidth = 5; //设置线的宽度为5 - style.VertexVisible = true; //显示线的节点 - disline.Style = style; //把风格添加到线上 - disline.AltitudeMode = EnumAltitudeMode.Absolute; - line=new GSOFeature(); - line.Geometry = disline; - - dismarker.X = pntIntersect1.X; - dismarker.Y = pntIntersect1.Y; - dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; - dismarker.Text = label + distance.ToString("0.00") + "米"; - dismarker.AltitudeMode = EnumAltitudeMode.Absolute; - - GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); - GSOTextStyle styleText = new GSOTextStyle(); - styleText.IsSizeFixed = true; - styleText.ForeColor = Color.Red; - styleText.FontSize = 20; - styleMarker.TextStyle = styleText; - dismarker.Style = styleMarker; - - marker=new GSOFeature(); - marker.Geometry = dismarker; - } - } } diff --git a/FrmHotFuncStat.cs b/FrmHotFuncStat.cs index 84131ef..f313b20 100644 --- a/FrmHotFuncStat.cs +++ b/FrmHotFuncStat.cs @@ -58,14 +58,11 @@ DataTable table = OledbHelper.QueryTable(sql); - if (table != null) + if (table == null) return; + for (int i = 0; i < table.Rows.Count; i++) { - for (int i = 0; i < table.Rows.Count; i++) - { - userLists.Items.Add(table.Rows[i][0].ToString()); - } + userLists.Items.Add(table.Rows[i][0].ToString()); } - } //统计结果 private void statBtn_Click(object sender, EventArgs e) diff --git a/FrmLayerControl.cs b/FrmLayerControl.cs index 8586041..8fbce97 100644 --- a/FrmLayerControl.cs +++ b/FrmLayerControl.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Windows.Forms; using DevComponents.DotNetBar; using GeoScene.Data; @@ -13,10 +14,10 @@ GSOGlobeControl globeControl1; GSOGlobeControl globeControl2; - TreeNode terrainManagerNode = null; - TreeNode layerManagerNode = null; - TreeNode terrainManagerNode1 = null; - TreeNode layerManagerNode1 = null; +// TreeNode terrainManagerNode = null; +// TreeNode layerManagerNode = null; +// TreeNode terrainManagerNode1 = null; +// TreeNode layerManagerNode1 = null; public FrmLayerControl(GSOGlobeControl ctl1,GSOGlobeControl ctl2) { @@ -25,14 +26,14 @@ globeControl2 = ctl2; } - private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) - { - treeNode=new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - } +// private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) +// { +// treeNode=new TreeNode(); +// treeNode.ImageIndex = 0; +// treeNode.SelectedImageIndex = 0; +// treeNode.Checked = false; +// treeNode.Text = strTreeNodeText; +// } // private void initTreeView() // { @@ -51,234 +52,258 @@ // layerTree2.Nodes.Add(terrainManagerNode); // } - #region wxl重构树形结构代码 + + - private TreeNode treeNode(string strTreeNodeText) - { - TreeNode treeNode = new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - return treeNode; - } -// private void appendToParent(TreeNodeCollection treeNodeCollection, ) - #endregion - private void initTreeView() +// private void initNode(string nodeName) +// { +// TreeNode nodeGroupElse1 = new TreeNode(); +// nodeGroupElse1.Text = nodeName; +// layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); +// +// TreeNode nodeGroupElse = new TreeNode(); +// nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; +// layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); +// } + +// private void initTreeNode(XmlNodeList Params) +// { +// foreach (XmlNode paramsNode in Params) //layers +// { +// foreach (XmlNode layerNode in paramsNode) //layer +// { +// initNode(layerNode.Attributes["label"].Value); +// } +// } +// +// initNode("基础图层"); +// initNode("其他"); +// } + +// private void FrmLayerControl_Load(object sender, EventArgs e) +// { +// +// initTreeView(); +// try +// { +// XmlDocument doc = new XmlDocument(); +// doc.Load(Application.StartupPath + "\\双屏设置.xml"); +// XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// +// initTreeNode(Params); +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// +// RefreshLayerAndTerrainTree(); +// } + private void FrmLayerControl_Load(object sender, EventArgs e) { layerTree1.Nodes.Clear(); layerTree2.Nodes.Clear(); - - //加载layertree2 - initLayerTree(out layerManagerNode1, "图层管理"); - layerTree1.Nodes.Add(layerManagerNode1); - initLayerTree(out terrainManagerNode1, "地形管理"); - layerTree1.Nodes.Add(terrainManagerNode1); - - initLayerTree(out layerManagerNode, "图层管理"); - layerTree2.Nodes.Add(layerManagerNode); - initLayerTree(out terrainManagerNode, "地形管理"); - layerTree2.Nodes.Add(terrainManagerNode); + TreeUtils.InitLayerTree(globeControl1, layerTree1, "实测数据"); + TreeUtils.InitLayerTree(globeControl2, layerTree2, "施工数据"); } - private void initNode(string nodeName) - { - TreeNode nodeGroupElse1 = new TreeNode(); - nodeGroupElse1.Text = nodeName; - layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); + #region wxl重构树形结构代码 - TreeNode nodeGroupElse = new TreeNode(); - nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; - layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); - } + /// + /// 构造tree,最多解析三层,可放在工具类中 - private void initTreeNode(XmlNodeList Params) - { - foreach (XmlNode paramsNode in Params) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - initNode(layerNode.Attributes["label"].Value); - } - } + /// 所属地球 + /// 要加载的树 + /// 数据来源,实测数据/施工数据/规划数据/红线数据,为空则展示全部 +// private void initTree(GSOGlobeControl gsoGlobeControl,TreeView treeView, string viewDatasrc) +// { +// treeView.Nodes.Clear(); +// LayerConfig layerConfig = Utility.layerConfig; +// List datasrcs = layerConfig.datasrcs; +// foreach (DataSrc datasrc in datasrcs) +// { +// if (viewDatasrc != null && !viewDatasrc.Trim().Equals("") && !datasrc.label.Equals(viewDatasrc)) continue; +// TreeNode rootNode = treeView.Nodes.Add(datasrc.label); +// List layerTypes = datasrc.layertypes; +// foreach (LayerType layerType in layerTypes) +// { +// TreeNode secNode = rootNode.Nodes.Add(layerType.label); +// List layers = layerType.layers; +// foreach (Layer layer in layers) +// { +// GSOLayer gsoLayer = gsoGlobeControl.Globe.Layers.GetLayerByCaption(layer.layer); +// if (gsoLayer == null) continue;//将不存在的去除 +// TreeNode node = new TreeNode(); +// node.Tag = gsoLayer; +// node.Text = layer.label; +// node.Checked = gsoLayer.Visible; +// if (gsoLayer.Visible) +// { +// secNode.Checked = true; +// rootNode.Checked = true; +// } +// secNode.Nodes.Add(node); +// } +// } +// } +// } - initNode("基础图层"); - initNode("其他"); - } + #endregion - private void FrmLayerControl_Load(object sender, EventArgs e) - { - initTreeView(); - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(Application.StartupPath + "\\双屏设置.xml"); - XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, +// TreeView layerTree) +// { +// try +// { +// for (int i = 0; i < nLayerCount; i++) +// { +// GSOLayer layer = globcontrol.Globe.Layers[i]; +// if (layer == null) continue; +// string layerName = layer.Name; +// TreeNode node = new TreeNode(); +// node.Tag = layer; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = layer.Caption; +// node.Checked = layer.Visible; +// +// bool isContains = false; +// for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) +// { +// if (!layerName.Contains("fttp:")) +// { +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || +// layerName.Contains("施工") || +// layerName.Contains("规划")) continue; +// break; +// case "layerTree2": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[j].Nodes.Add(node); +// isContains = true; +// break; +// } +// else +// { +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); +// isContains = true; +// break; +// } +// } +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || +// layerName.Contains("标注") || +// isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || +// layerName.Contains("景观") || layerName.Contains("红线")) +// continue; +// break; +// case "layerTree2": +// if (isContains != false || layerName.Contains("tempLgdData2")) +// continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); +// } +// +// for (int i = 0; i < nTerrainCount; i++) +// { +// GSOTerrain terrain = globcontrol.Globe.Terrains[i]; +// if (terrain == null) continue; +// TreeNode node = new TreeNode(); +// node.Tag = terrain; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = terrain.Caption; +// node.Checked = terrain.Visible; +// switch (layerTree.Name) +// { +// case "layerTree1": +// terrainManagerNode1.Nodes.Add(node); +// break; +// case "layerTree2": +// terrainManagerNode.Nodes.Add(node); +// break; +// default: +// break; +// } +// } +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// } - initTreeNode(Params); - } - catch (Exception ex) - { - LogError.PublishError(ex); - } +// private void initTreeNodeCheckedStatus(TreeView layerTreeView) +// { +// //节点选中状态控制 +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// if (node.Checked != true) continue; +// layerTreeView.Nodes[0].Checked = true; +// break; +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOTerrain layer = childNode.Tag as GSOTerrain; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// } - RefreshLayerAndTerrainTree(); - } - - private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, - TreeView layerTree) - { - try - { - for (int i = 0; i < nLayerCount; i++) - { - GSOLayer layer = globcontrol.Globe.Layers[i]; - if (layer == null) continue; - string layerName = layer.Name; - TreeNode node = new TreeNode(); - node.Tag = layer; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = layer.Caption; - node.Checked = layer.Visible; - - bool isContains = false; - for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) - { - if (!layerName.Contains("fttp:")) - { - switch (layerTree.Name) - { - case "layerTree1": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || - layerName.Contains("施工") || - layerName.Contains("规划")) continue; - break; - case "layerTree2": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[j].Nodes.Add(node); - isContains = true; - break; - } - else - { - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); - isContains = true; - break; - } - } - switch (layerTree.Name) - { - case "layerTree1": - if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || - layerName.Contains("标注") || - isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || - layerName.Contains("景观") || layerName.Contains("红线")) - continue; - break; - case "layerTree2": - if (isContains != false || layerName.Contains("tempLgdData2")) - continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); - } - - for (int i = 0; i < nTerrainCount; i++) - { - GSOTerrain terrain = globcontrol.Globe.Terrains[i]; - if (terrain == null) continue; - TreeNode node = new TreeNode(); - node.Tag = terrain; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = terrain.Caption; - node.Checked = terrain.Visible; - switch (layerTree.Name) - { - case "layerTree1": - terrainManagerNode1.Nodes.Add(node); - break; - case "layerTree2": - terrainManagerNode.Nodes.Add(node); - break; - default: - break; - } - } - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - - private void initTreeNodeCheckedStatus(TreeView layerTreeView) - { - //节点选中状态控制 - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - if (node.Checked != true) continue; - layerTreeView.Nodes[0].Checked = true; - break; - } - - foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOTerrain layer = childNode.Tag as GSOTerrain; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - } - - void exPandTreeNode() - { - layerManagerNode1.Expand(); - terrainManagerNode1.Expand(); - layerManagerNode.Expand(); - terrainManagerNode.Expand(); - } +// void exPandTreeNode() +// { +// layerManagerNode1.Expand(); +// terrainManagerNode1.Expand(); +// layerManagerNode.Expand(); +// terrainManagerNode.Expand(); +// } /// /// 刷新节点树 /// - private void RefreshLayerAndTerrainTree() - { - int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 - int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 - addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); - initTreeNodeCheckedStatus(layerTree1); - - int nLayerCount = globeControl2.Globe.Layers.Count; - int nTerrainCount = globeControl2.Globe.Terrains.Count; - addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); - initTreeNodeCheckedStatus(layerTree2); - - // 展开 - exPandTreeNode(); - } +// private void RefreshLayerAndTerrainTree() +// { +// int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 +// int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 +// addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); +// initTreeNodeCheckedStatus(layerTree1); +// +// int nLayerCount = globeControl2.Globe.Layers.Count; +// int nTerrainCount = globeControl2.Globe.Terrains.Count; +// addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); +// initTreeNodeCheckedStatus(layerTree2); +// +// // 展开 +// exPandTreeNode(); +// } /// /// 节点树复选框选中状态改变事件处理 @@ -289,144 +314,132 @@ { if (e.Action != TreeViewAction.Unknown) { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } + TreeUtils.TreeNodeCheckedChange(globeControl2,e.Node); + } + } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree2(e.Node, e.Node.Checked); + private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) + { + if (e.Action != TreeViewAction.Unknown) + { + TreeUtils.TreeNodeCheckedChange(globeControl1, e.Node); } } + + +// private void layerTree2_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree2(e.Node, e.Node.Checked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree1(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree1(childNode, isChecked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree2(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree2(childNode, isChecked); +// } +// } /// /// 节点树选中状态改变事件 /// /// /// - private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) - { - if (e.Action != TreeViewAction.Unknown) - { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } +// private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree1(e.Node, e.Node.Checked); +// } +// } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree1(e.Node, e.Node.Checked); - } - } - /// - /// 改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 - /// - /// - private void CheckParentNode(TreeNode curNode) - { - bool bChecked = false; - - if (curNode.Parent != null) - { - foreach (TreeNode node in curNode.Parent.Nodes) - { - if (node.Checked) - { - bChecked = true; - break; - } - } - if (bChecked) - { - curNode.Parent.Checked = true; - CheckParentNode(curNode.Parent); - } - else - { - curNode.Parent.Checked = false; - CheckParentNode(curNode.Parent); - } - } - } } } diff --git a/FrmMetadata.cs b/FrmMetadata.cs index 4d0d5cb..bb7c46c 100644 --- a/FrmMetadata.cs +++ b/FrmMetadata.cs @@ -12,12 +12,8 @@ { public partial class FrmMetadata : Office2007Form { - List pipelineLayerNames = new List();//线图层名称 - List workwellLayerNames = new List();//工井图层名称 - List valueLayerNames = new List();//阀门图层名称 - List instrumenLayerNames = new List();//附属物图层名称 - string filename = Utility.filename; - DataSet dataSet = new DataSet(); + + bool selectedLayer; public FrmMetadata() @@ -25,308 +21,33 @@ InitializeComponent(); loadTreeView(layerTree); } - private void FrmMetadata_Load(object sender, EventArgs e) - { - //this.ntLblC.Text = "nn"; - // loadTreeView(layerTree); - } private void loadTreeView(TreeView tv)//构建图层树 { - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - //tv.ShowPlusMinus = false; - - //tv.Nodes.Clear(); - tv.ShowLines = true; - // tv.ImageList = imageList1; - tv.CheckBoxes = false; - #region 三级 - - //foreach (XmlNode paramsNode in Params1) //layers - //{ - // foreach (XmlNode layerNode in paramsNode) //layer - // { - // TreeNode nodelayer = new TreeNode(); - // string layerName = layerNode.Attributes["label"].Value; - // nodelayer.Text = layerName; - - // if (layerNode.HasChildNodes != false) - // { - // tv.Nodes.Add(nodelayer); - // foreach (XmlNode layerchildNode in layerNode) //layerchild - // { - // if (layerchildNode.Name == "layerchild") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["type"].Value; - // string layerchildName = layerchildNode.Attributes["label"].Value; - // if (layerType == "locaserver") - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - - // } - // else - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // if (layerchildNode.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = boollayer; - // nodelayer.Nodes.Add(nodelayerchild); - // } - // } - // else if (layerchildNode.Name == "layertype") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["label"].Value; - // nodelayerchild.Text = layerType; - // nodelayerchild.Tag = layerType; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - // if (layerchildNode.HasChildNodes == true) - // { - // foreach (XmlNode childNodeLayer in layerchildNode) - // { - // TreeNode nodelayerchild1 = new TreeNode(); - // string layerName1 = childNodeLayer.Attributes["layer"].Value; - // string layerchildName = childNodeLayer.Attributes["label"].Value; - // string layerType1 = childNodeLayer.Attributes["type"].Value; - // if (childNodeLayer.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild1.Text = layerchildName; - // nodelayerchild1.Tag = layerType1 + "|" + layerName1; - // nodelayerchild1.Checked = boollayer; - // nodelayerchild.Nodes.Add(nodelayerchild1); - // } - // } - // } - - // } - // } - // else - // { - // tv.Nodes.Add(nodelayer); - // } - // } - - //} - - #endregion - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - TreeNode nodelayer = new TreeNode(); - string layerName = layerNode.Attributes["label"].Value; - nodelayer.Text = layerName; - - if (layerNode.HasChildNodes) - { - tv.Nodes.Add(nodelayer); - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - if (layerchildNode.Name == "layerchild") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["type"].Value; - string layerchildName = layerchildNode.Attributes["label"].Value; - if (layerType == "locaserver") - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - - } - else - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - if (layerchildNode.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - //nodelayerchild.Checked = boollayer; - nodelayer.Nodes.Add(nodelayerchild); - } - } - else if (layerchildNode.Name == "layertype") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["label"].Value; - nodelayerchild.Text = layerType; - nodelayerchild.Tag = layerType; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode) - { - if (childNodeLayer.HasChildNodes) - { - TreeNode nodelayerchild2 = new TreeNode(); - string layer = childNodeLayer.Attributes["label"].Value; - nodelayerchild2.Text = layer; - nodelayerchild2.Tag = layer; - nodelayerchild2.Checked = true; - nodelayerchild.Nodes.Add(nodelayerchild2); - foreach (XmlNode n in childNodeLayer) - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = n.Attributes["layer"].Value; - string layerchildName = n.Attributes["label"].Value; - string layerType1 = n.Attributes["type"].Value; - if (n.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (n.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (n.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (n.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild2.Nodes.Add(nodelayerchild1); - - } - } - else - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = childNodeLayer.Attributes["layer"].Value; - string layerchildName = childNodeLayer.Attributes["label"].Value; - string layerType1 = childNodeLayer.Attributes["type"].Value; - if (childNodeLayer.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild.Nodes.Add(nodelayerchild1); - - } - } - } - } - - } - } - else - { - tv.Nodes.Add(nodelayer); - } - } - - } - if (tv.Nodes.Count > 0) - { - //tv.Nodes[0].Expand(); - if (tv.Nodes.Count > 0) - { - foreach (TreeNode node in tv.Nodes) - { - //node.Expand(); - } - } - } - //tv.ExpandAll(); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } + //tv.ShowPlusMinus = false; + //tv.Nodes.Clear(); + // tv.ImageList = imageList1; + tv.ShowLines = true; + tv.CheckBoxes = false; + TreeUtils.InitLayerTree(null, tv, null); } - + /// + /// 点击父节点则展开,点击子节点则编辑元数据 + /// + /// + /// private void layerTree_AfterSelect(object sender, TreeViewEventArgs e) { - String layername = layerTree.SelectedNode.Text; - if (layerTree.SelectedNode.GetNodeCount(true) == 0) { - searchLayerInfo(layername); - - selectedLayer = true; - clearBtn.Hide(); - completeBtn.Hide(); + String layername = e.Node.Text; + if (e.Node.GetNodeCount(true) != 0) + { //点击父节点,则展开 + e.Node.Expand(); + return; } + searchLayerInfo(layername); + selectedLayer = true; + clearBtn.Hide(); + completeBtn.Hide(); } //查询元数据 private void searchLayerInfo(String layername) { @@ -335,8 +56,6 @@ + " casic_metadatalayer where casic_metadatacontent.\"LAYERID\" = casic_metadatalayer.\"LAYERID\" and casic_metadatalayer.\"LAYERNAME\"='" + layername+"'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; - if (table != null && table.Rows.Count > 0) { groupBox1.Text = layername; @@ -400,8 +119,6 @@ //判断此时layerTree有没有选中的图层 if (selectedLayer)//有选中的图层,获得其名 { - string name = layerTree.SelectedNode.Text; - OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "支持格式(*.xml)|*.xml|XML数据(*.xml)|"; dlg.Multiselect = true; @@ -419,31 +136,24 @@ //读入元数据 private void AddXMLMDdata(string strFilePath) { - try - { - dataSet.Clear(); //清空数据集中的内容 - dataSet.ReadXml(strFilePath); //读取XML文件中的内容 + DataSet dataSet = new DataSet(); + dataSet.ReadXml(strFilePath); //读取XML文件中的内容 - //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); - string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); - string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); - string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); - string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); + //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); + string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); + string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); + string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); + string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); - //this.titleLbl.Text = attrtitle; - consLblC.Text = attrcons; - descLblC.Text = attrdesc; - authorLblC.Text = attrauthor; - ntLblC.Text = attrnt; - //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); + //this.titleLbl.Text = attrtitle; + consLblC.Text = attrcons; + descLblC.Text = attrdesc; + authorLblC.Text = attrauthor; + ntLblC.Text = attrnt; + //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); - completeBtn.Visible = true; - //this.clearBtn.Visible = true; - } - catch (Exception e) - { - - } + completeBtn.Visible = true; + //this.clearBtn.Visible = true; } //新建/编辑元数据 private void editBtn_Click(object sender, EventArgs e) @@ -509,11 +219,7 @@ string sql = "select \"LAYERID\" from casic_metadatalayer where \"LAYERNAME\" = '" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - if (table != null && table.Rows.Count > 0)//已有该图层,属于编辑 - { - return false; - } - return true; + return table == null || table.Rows.Count <= 0; } //保存元数据 private void saveData(String method,String layername,String cons,String desc,String author,String nt) { @@ -539,17 +245,16 @@ string insertSQL = "insert into casic_metadatalayer values ('" + layerid + "','" + layername + "')";//+ string insertSQL2 = "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','" + desc + "','" + author + "','" + nt + "')"; // "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','"+desc+"','"+author+"','"+nt+"')"; - if ((OledbHelper.sqlExecuteNonQuery(insertSQL) > 0)&&(OledbHelper.sqlExecuteNonQuery(insertSQL2)>0)) - { - MessageBox.Show("保存元数据成功!"); + if ((OledbHelper.sqlExecuteNonQuery(insertSQL) <= 0) || + (OledbHelper.sqlExecuteNonQuery(insertSQL2) <= 0)) return; + MessageBox.Show("保存元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } else { //更新 string layeridSQL = "select layerid from casic_metadatalayer where LAYERNAME='"+layername+"'"; @@ -561,16 +266,14 @@ + "',casic_metadatacontent.MDAUTHOR ='" + author.Trim() + "',casic_metadatacontent.NT ='" + nt.Trim() + "' where casic_metadatacontent.LAYERID='" + layerid + "'"; - if (OledbHelper.sqlExecuteNonQuery(updateSQL) > 0) - { - MessageBox.Show("更新元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + if (OledbHelper.sqlExecuteNonQuery(updateSQL) <= 0) return; + MessageBox.Show("更新元数据成功!"); + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } } diff --git a/FrmMetadataStat.cs b/FrmMetadataStat.cs index cb19f84..c3c1359 100644 --- a/FrmMetadataStat.cs +++ b/FrmMetadataStat.cs @@ -2,16 +2,16 @@ using System.Collections; using System.Collections.Generic; using System.Data; +using System.Linq; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; -using System.Xml; using DevComponents.DotNetBar; namespace Cyberpipe { public partial class FrmMetadataStat : Office2007Form { - Dictionary dic = new Dictionary(); + public FrmMetadataStat() { InitializeComponent(); @@ -22,7 +22,7 @@ string sql = "select LAYERNAME from casic_metadataLayer where LAYERNAME like '%" + keywordsTxt.Text.Trim() + "%'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; + int num = 0; resultList.Clear(); consLblC.Text = ""; @@ -32,6 +32,7 @@ if (table != null && table.Rows.Count > 0) { + num = table.Rows.Count; for (int i = 0; i < num;i++ ) { resultList.Items.Add(table.Rows[i][0].ToString()); @@ -56,7 +57,8 @@ int metadataLayernum = statistMDLayer(); int nomdLayernum = layernum - metadataLayernum; //MessageBox.Show("共有多少层?" + layernum.ToString()+"=="+metadataLayernum.ToString()+"=="+nomdLayernum.ToString()); - dic.Clear(); +// dic.Clear(); + Dictionary dic = new Dictionary(); dic.Add("已建",metadataLayernum); dic.Add("未建", nomdLayernum); @@ -74,11 +76,9 @@ foreach (string key in dic.Keys) { - if (dic[key] != 0) - { - xlist.Add(key); - ylist.Add(dic[key]); - } + if (dic[key] == 0) continue; + xlist.Add(key); + ylist.Add(dic[key]); } chart1.Series[0].Points.DataBindXY(xlist, ylist); @@ -89,73 +89,15 @@ string sql = "select * from casic_metadataLayer"; DataTable table = OledbHelper.QueryTable(sql); - mdlayernum = table.Rows.Count; + if(table!=null)mdlayernum = table.Rows.Count; return mdlayernum; } //统计有多少个图层 - private int statistLayer() { - int layernum = 0; - - string filename = Utility.filename; - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - //MessageBox.Show(layerNode.Attributes["label"].Value); - - if (layerNode.HasChildNodes) - { - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - //MessageBox.Show(layerchildNode.Attributes["label"].Value); - if (layerchildNode.Name == "layerchild") - { - layernum++; - } - else if (layerchildNode.Name == "layertype") - { - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode)//layertype下的layerchild - { - //MessageBox.Show(childNodeLayer.Attributes["label"].Value); - if (childNodeLayer.HasChildNodes) - { - - foreach (XmlNode n in childNodeLayer) - { - layernum++; - } - } - else - { - - layernum++; - } - } - } - } - - } - } - } - - } - - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - return layernum; + private int statistLayer() + { + List datasrcs = Utility.layerConfig.datasrcs; + return datasrcs.SelectMany(datasrc => datasrc.layertypes).Sum(layerType => layerType.layers.Count); } //选择list @@ -174,7 +116,6 @@ + "join casic_metadatalayer on casic_metadatalayer.LAYERID = casic_metadatacontent.LAYERID " + "where casic_metadatalayer.LAYERNAME='" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; //MessageBox.Show(num.ToString()); if (table != null && table.Rows.Count > 0) { @@ -192,10 +133,5 @@ ntLblC.Text = ""; } } - - private void buttonX1_Click(object sender, EventArgs e) - { - drawChart(); - } } } diff --git a/FrmWait.Designer.cs b/FrmWait.Designer.cs index 99733ea..88f5a29 100644 --- a/FrmWait.Designer.cs +++ b/FrmWait.Designer.cs @@ -55,7 +55,6 @@ this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(0, 24); this.label1.TabIndex = 1; - this.label1.Click += new System.EventHandler(this.label1_Click); // // FrmWait // @@ -71,7 +70,7 @@ this.ShowIcon = false; this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; this.Text = "正在处理,请稍后..."; - this.Load += new System.EventHandler(this.FrmWait_Load); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmWait_FormClosing); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); diff --git a/FrmWait.cs b/FrmWait.cs index d3b7a48..d645ae4 100644 --- a/FrmWait.cs +++ b/FrmWait.cs @@ -32,27 +32,6 @@ frm = null; } - private void FrmWait_Load(object sender, EventArgs e) - { - - - } - - - private void labelX2_Click(object sender, EventArgs e) - { - - } - - private void progressBarX1_Click(object sender, EventArgs e) - { - - } - - private void label1_Click(object sender, EventArgs e) - { - - } } } diff --git a/ClassDoubleScreenCompare.cs b/ClassDoubleScreenCompare.cs new file mode 100644 index 0000000..f2935da --- /dev/null +++ b/ClassDoubleScreenCompare.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using GeoScene.Globe; +using GeoScene.Data; +using GeoScene.Engine; +using System.Drawing; + +namespace Cyberpipe +{ + class ClassDoubleScreenCompare + { + public static GSOFeature getSameFeatureFromOtherGlobe(GSOFeature feature, + GSOGlobeControl globeControl1, GSOGlobeControl globeControl2,double bufferWidth,GSOGeoPolygon3D resPolygon) + { + GSOLayer layer; + GSOFeatures features = new GSOFeatures(); + + if (!feature.Dataset.Caption.StartsWith("施工")) + { + layer = feature.Dataset.Caption == "供电管线" + ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") + : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(feature, fs[i], globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + else + { + layer = feature.Dataset.Caption == "施工电力管线" + ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") + : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(fs[i], feature, globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + + return getMostSimilarFeatureFromFeatures(feature, features); + + } + + + private static GSOFeature getMostSimilarFeatureFromFeatures(GSOFeature feature, GSOFeatures features) + { + double maxLength = 0; + GSOFeature f = new GSOFeature(); + GSOGeoPolyline3D line = feature.Geometry as GSOGeoPolyline3D; + + if (features.Length == 0) return null; + if (features.Length == 1) + { + f = features[0]; + f.HighLight = true; + } + else + { + for (int m = 0; m < features.Length; m++) + { + GSOGeoPolyline3D tempSGLine = features[m].Geometry as GSOGeoPolyline3D; + + double tempLength = tempSGLine.GetSpaceLength(false, 6378137); + double lengthAbs = Math.Abs(tempLength - line.GetSpaceLength(false, 6378137)); + if (m == 0) + { + f = features[0]; + f.HighLight = true; + maxLength = lengthAbs; + } + else if (lengthAbs < maxLength) + { + f = features[m]; + f.HighLight = true; + maxLength = lengthAbs; + } + } + } + return f; + } + + private static bool isSameFeature(GSOFeature feature1, GSOFeature feature2, GSOLayer layer, double bufferWidth) + { + GSOGeoPolyline3D line = feature1.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = line.CreateBuffer(bufferWidth * 2, true, 5, true, false); + + if (bufferPolygon == null) return false; + + GSOFeatures featuresInLayer = layer.FindFeaturesInPolygon(bufferPolygon, true); + + if (featuresInLayer == null || featuresInLayer.Length <= 0) + return false; + + for (int i = 0; i < featuresInLayer.Length; i++) + { + if (featuresInLayer[i].Name == feature2.Name) + { + return true; + break; + } + } + return false; + } + + private static bool isSimilarFeature(GSOFeature srcFeature, GSOFeature dscFeature, + GSOGlobeControl globeControl1,GSOGlobeControl globeControl2,double bufferWidth) + { + GSOLayer dscLayer = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); + GSOLayer srcLayer = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); + + if (!isSameFeature(srcFeature, dscFeature, dscLayer, bufferWidth) + && !isSameFeature(dscFeature, srcFeature, srcLayer, bufferWidth)) + return false; + return true; + } + + public static void CalculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2, + out double horizonDistance, out double verticalDistance, GSOGlobeControl globeControl1, GSOGlobeControl globeControl2) + { + GSOPoint3d pntIntersect1 = new GSOPoint3d(); + GSOPoint3d pntIntersect2 = new GSOPoint3d(); + GSOPoint3d pntProIntersect1 = new GSOPoint3d(); + GSOPoint3d pntProIntersect2 = new GSOPoint3d(); + + verticalDistance = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, verticalDistance, true, "垂直", globeControl1, globeControl2); + + horizonDistance = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, horizonDistance, true, "水平", globeControl1, globeControl2); + + } + + private static GSOPoint3d LabelDistance(GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, + double distance, bool markerVisible, string label,GSOGlobeControl globeControl1,GSOGlobeControl globeControl2) + { + if (pntIntersect1 == null || pntIntersect2 == null) + return new GSOPoint3d(); + GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); + GSOPoint3ds point3ds = new GSOPoint3ds(); + point3ds.Add(pntIntersect1); + point3ds.Add(pntIntersect2); + disline.AddPart(point3ds); + + GSOGeoMarker dismarker = new GSOGeoMarker(); + GSOFeature marker = null; + GSOFeature line = null; + createLineStyle(out marker, out line, disline, pntIntersect1, pntIntersect2, distance, label, dismarker); + + line.Visible = marker.Visible = markerVisible; + globeControl1.Globe.MemoryLayer.AddFeature(line); + globeControl1.Globe.MemoryLayer.AddFeature(marker); + + globeControl2.Globe.MemoryLayer.AddFeature(line); + globeControl2.Globe.MemoryLayer.AddFeature(marker); + + return dismarker.Position; + } + + private static void createLineStyle(out GSOFeature marker, out GSOFeature line, GSOGeoPolyline3D disline, + GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) + { + GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 + style.LineColor = Color.Red; + style.LineWidth = 5; //设置线的宽度为5 + style.VertexVisible = true; //显示线的节点 + disline.Style = style; //把风格添加到线上 + disline.AltitudeMode = EnumAltitudeMode.Absolute; + line = new GSOFeature(); + line.Geometry = disline; + + dismarker.X = pntIntersect1.X; + dismarker.Y = pntIntersect1.Y; + dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; + dismarker.Text = label + distance.ToString("0.00") + "米"; + dismarker.AltitudeMode = EnumAltitudeMode.Absolute; + + GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); + GSOTextStyle styleText = new GSOTextStyle(); + styleText.IsSizeFixed = true; + styleText.ForeColor = Color.Red; + styleText.FontSize = 20; + styleMarker.TextStyle = styleText; + dismarker.Style = styleMarker; + + marker = new GSOFeature(); + marker.Geometry = dismarker; + } + + } +} diff --git a/Cyberpipe.csproj b/Cyberpipe.csproj index d8aa9c8..bcce54d 100644 --- a/Cyberpipe.csproj +++ b/Cyberpipe.csproj @@ -203,6 +203,7 @@ + @@ -1143,6 +1144,7 @@ SysRescInfoManager.cs + True True diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 123caf1..2c45db6 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -258,42 +258,25 @@ for (int i = 0; i < scLayer.GetAllFeatures().Length; i++) { GSOFeature scFeature = scLayer.GetAt(i); - if (scFeature.GetFieldAsString("所属道路") == road) + if (scFeature.GetFieldAsString("所属道路") != road) continue; + GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + + GSOFeature sgFeature = null; + GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); + + //**判断同一个Feature + if (sgFeatures.Length >= 1) { - GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); - GSOFeature sgFeature = null; - GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); - - //**判断同一个Feature - if (sgFeatures.Length >= 1) + if (sgFeature != null) { - sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); + GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; + double horizonDistance, verticalDistance; - if (sgFeature != null) - { - GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; - double horizonDistance, verticalDistance; - - CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); - GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); - } - else - { - scFeature.HighLight = true; - DataRow dr = dt.NewRow(); - dr[0] = scLayer.Caption; - dr[1] = scFeature.GetFieldAsString("编号"); - dr[2] = sgLayer.Caption; - dr[3] = "无"; - dr[4] = "无"; - dr[5] = "0.02"; - dr[6] = "无"; - dr[7] = "0.02"; - dr[8] = "未设计管段"; - dt.Rows.Add(dr); - } + CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); + GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); } else { @@ -311,6 +294,21 @@ dt.Rows.Add(dr); } } + else + { + scFeature.HighLight = true; + DataRow dr = dt.NewRow(); + dr[0] = scLayer.Caption; + dr[1] = scFeature.GetFieldAsString("编号"); + dr[2] = sgLayer.Caption; + dr[3] = "无"; + dr[4] = "无"; + dr[5] = "0.02"; + dr[6] = "无"; + dr[7] = "0.02"; + dr[8] = "未设计管段"; + dt.Rows.Add(dr); + } } } /// diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index 53946c0..fe32265 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -4,7 +4,7 @@ using GeoScene.Globe; namespace Cyberpipe -{ +{ //本类作用为:辅助GlobalControl上Feature的统计分析工具类 class FeatureStatisticsService { /// @@ -60,8 +60,8 @@ /// /// /// - /// - /// + /// + /// /// /// public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) @@ -74,6 +74,7 @@ for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; double length = line.GetSpaceLength(true, 6378137); totalLength += length; ncount += 1; @@ -114,7 +115,7 @@ for (int i = 0; i < feats.Length; i++) { double radius = feats[i].GetFieldAsDouble(fieldName); - if (radius >= min && radius <= max) + if (radius >= minValue && radius <= maxValue) { result.Add(feats[i]); } @@ -148,23 +149,22 @@ lstDiameter.Sort(); if (lstDiameter.Count > 0) { - for (int m = 0; m < lstDiameter.Count; m++) + foreach (float diameter in lstDiameter) { double totalLength = 0.00; int ncount = 0; for (int j = 0; j < feats.Length; j++) { - if (feats[j].GetFieldAsFloat("管径_毫米") == lstDiameter[m]) - { - GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } + if (Math.Abs(feats[j].GetFieldAsFloat("管径_毫米") - diameter) > 0.00001) continue; + GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = lstDiameter[m].ToString(); + featuresClass.groupFieldValue = diameter.ToString(); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -191,13 +191,13 @@ //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); - for (int j = 0; j < accessStrs.Length; j++) + foreach (string accssname in accessStrs) { - GSOFeatures feats = null; - int ncount = 0; + GSOFeatures feats; + int ncount; if (polygon == null) { - feats = flayer.GetFeatureByFieldValue("附属物名称", accessStrs[j], true); + feats = flayer.GetFeatureByFieldValue("附属物名称", accssname, true); ncount = feats.Length; } else @@ -207,14 +207,14 @@ //过滤 for (int n = 0; n < feats.Length; n++) { - if (feats[n].GetFieldAsString("附属物名称").Contains(accessStrs[j])) newfeats.Add(feats[n]); + if (feats[n].GetFieldAsString("附属物名称").Contains(accssname)) newfeats.Add(feats[n]); } ncount = newfeats.Length; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); - featuresClass.layerName = accessStrs[j]; + featuresClass.layerName = accssname; featuresClass.ncount = ncount; result.Add(featuresClass); @@ -303,6 +303,26 @@ if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); - } + } + + + /// + /// 获取globeControl上选中的管线,如果返回空则没有选中的管线 + /// + /// 地球引擎 + /// 返回一根线 + public static GSOFeature GetSelectedPipeline(GSOGlobeControl globeControl) + { + GSOFeature resFeature; + if (globeControl.Globe.SelObjectCount < 1) return null; + GSOLayer resLayer; + globeControl.Globe.GetSelectObject(0, out resFeature, out resLayer); + if (resFeature == null) return null; + + GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; + if (line1 == null) return null; + GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; + return pipeStyle1 == null ? null : resFeature; + } } } diff --git a/FrmCompareFeature.cs b/FrmCompareFeature.cs index a05e8e7..ac622c4 100644 --- a/FrmCompareFeature.cs +++ b/FrmCompareFeature.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Data; using System.Drawing; using System.Windows.Forms; @@ -11,26 +10,16 @@ { public partial class FrmCompareFeature : Office2007Form { - GSOFeature srcFeature; - GSOFeature dscFeature; - GSOGlobeControl globeControl1; - GSOGlobeControl globeControl2; - bool isSamePolyline; - - GSOLayer layerTemp; - GSOLayer layerTemp2; - GSOFeature new_feat; + private GSOFeature srcFeature, dscFeature; + private GSOGlobeControl globeControl1, globeControl2; GSOGeoPolygon3D resPolygon; - static FrmCompareFeature frm; - public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2, int width) + public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, int width) { if (frm == null) { - frm = new FrmCompareFeature(_globeControl1, _globeControl2, _layerTemp, _layerTemp2); - + frm = new FrmCompareFeature(_globeControl1, _globeControl2); frm.Location = new Point((width - frm.Width)/2, 50); frm.Show(_globeControl1.Parent); } @@ -41,8 +30,7 @@ } } - public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2) + public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2) { globeControl1 = _globeControl1; globeControl2 = _globeControl2; @@ -50,99 +38,35 @@ globeControl1.Globe.Action = EnumAction3D.SelectObject; globeControl2.Globe.Action = EnumAction3D.SelectObject; - layerTemp = _layerTemp; - layerTemp2 = _layerTemp2; globeControl1.MouseClick += globeControl1_MouseClick; globeControl2.MouseClick += globeControl2_MouseClick; } + private void invalParam() + { + if (srcFeature == null || dscFeature == null) + { + MessageBox.Show("请选择要对比的管段!", "提示"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) + { + MessageBox.Show("请选择同种类型图层!"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type || + srcFeature.Geometry.Type != EnumGeometryType.GeoPolyline3D) + return; + } + private void buttonAnalysis_Click(object sender, EventArgs e) { + invalParam(); + dataGridViewX1.DataSource = null; - - double bufferWidth = Convert.ToDouble(textBox1.Text); - - if (srcFeature == null || dscFeature == null) - MessageBox.Show("请选择要对比的管段!", "提示"); - else - { - if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) - MessageBox.Show("请选择同种类型图层!"); - else if (srcFeature.Geometry.Type == dscFeature.Geometry.Type && - srcFeature.Geometry.Type == EnumGeometryType.GeoPolyline3D) - { - lineLayerCompare(srcFeature, dscFeature, bufferWidth); - if (!isSamePolyline) - MessageBox.Show("实测管段与施工管段非同一条管段,请选择同一管段进行比较!", "提示"); - else - { - lineFeatureCompare(srcFeature, dscFeature); - globeControl1.Globe.Action = EnumAction3D.ActionNull; - globeControl2.Globe.Action = EnumAction3D.ActionNull; - } - } - else - MessageBox.Show("无法处理该类型图层!"); - } + lineFeatureCompare(srcFeature, dscFeature); } - - /// - /// 在容差范围内判断是否同一根管段 - /// - /// - /// - /// - /// - private bool lineLayerCompare(GSOFeature srcFeature, GSOFeature dscFeature, double bufferWidth) - { - isSamePolyline = false; - - GSOGeoPolyline3D srcLine = srcFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D srcBufferPolygon = srcLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer dsc = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); - - if (srcBufferPolygon != null) - { - GSOFeatures featuresInSrcLayer = dsc.FindFeaturesInPolygon(srcBufferPolygon, true); - - if (featuresInSrcLayer != null && featuresInSrcLayer.Length > 0) - { - for (int i = 0; i < featuresInSrcLayer.Length; i++) - { - if (featuresInSrcLayer[i].Name == dscFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D dscBufferPolygon = dscLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer src = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); - - if (dscBufferPolygon != null) - { - GSOFeatures featuresInDscLayer = src.FindFeaturesInPolygon(dscBufferPolygon, true); - - if (featuresInDscLayer != null && featuresInDscLayer.Length > 0) - { - for (int i = 0; i < featuresInDscLayer.Length; i++) - { - if (featuresInDscLayer[i].Name == srcFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - return isSamePolyline; - } - /// /// 分析两根管段的具体差异 /// @@ -156,8 +80,10 @@ GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; double dscLineLength = dscLine.GetSpaceLength(false, 6378137); - double horizonDistance = calculateDistance(srcLine, dscLine,false); - double verticalDistance = calculateDistance(srcLine, dscLine,true); + double horizonDistance, verticalDistance; + + ClassDoubleScreenCompare.CalculateDistance(srcLine, dscLine, out horizonDistance, + out verticalDistance,globeControl1,globeControl2); DataTable dt = new DataTable(); dt.Columns.Add("数据名称"); @@ -189,6 +115,98 @@ dt.Rows.Add(dscRow); dataGridViewX1.DataSource = dt; + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) + { + globeControl1.Globe.MemoryLayer.RemoveAllFeature(); + globeControl2.Globe.MemoryLayer.RemoveAllFeature(); + + GSOFeature new_feat = new GSOFeature(); + resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); + resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; + new_feat.Geometry = resPolygon; + + globeControl1.Globe.MemoryLayer.AddFeature(new_feat); + globeControl2.Globe.MemoryLayer.AddFeature(new_feat); + + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + public static void clearFeatureHighLight(GSOGlobeControl glb) + { + for (int i = 0; i < glb.Globe.Layers.Count; i++) + { + GSOLayer layer = glb.Globe.Layers[i]; + if (!(layer is GSOFeatureLayer)) continue; + GSOFeatures feats = layer.GetAllFeatures(); + for (int j = 0; j < feats.Length; j++) + { + feats[j].HighLight = false; + } + } + } + + void globeControl1_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl1.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl1.Globe.Action != EnumAction3D.SelectObject || + globeControl1.Globe.SelectedObject == null) + return; + GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + srcFeature = globeControl1.Globe.SelectedObject; + dscFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(srcFeature, + globeControl1,globeControl2,bufferWidth,resPolygon); + + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } + + void globeControl2_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl2.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl2.Globe.Action != EnumAction3D.SelectObject || + globeControl2.Globe.SelectedObject == null) + return; + + GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + dscFeature = globeControl2.Globe.SelectedObject; + srcFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(dscFeature, + globeControl1, globeControl2, bufferWidth, resPolygon); + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } private void FrmCompareFeature_FormClosing(object sender, FormClosingEventArgs e) @@ -198,322 +216,5 @@ frm = null; } - private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) - { - new_feat = new GSOFeature(); - resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); - resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; - new_feat.Geometry = resPolygon; - - layerTemp.AddFeature(new_feat); - layerTemp2.AddFeature(new_feat); - globeControl1.Refresh(); - globeControl2.Refresh(); - } - - private GSOLayer getSameLayer(GSOFeature feature) - { - GSOLayer layer = null; - if (!feature.Dataset.Caption.StartsWith("施工")) - { - layer = feature.Dataset.Caption == "供电管线" - ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") - : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); - } - else - { - layer = feature.Dataset.Caption == "施工电力管线" - ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") - : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); - } - - return layer; - } - - /// - /// 地球1中点击地球2中同步添加缓冲区 - /// - /// - /// - void globeControl1_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl1.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl1.Globe.Action == EnumAction3D.SelectObject && - globeControl1.Globe.SelectedObject != null) - { - GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - addPologyToGlobeControl(line, bufferWidth); - } - - srcFeature = globeControl1.Globe.SelectedObject; - GSOLayer layers = getSameLayer(srcFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = srcFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(srcFeature, features[i], Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - listFeatures.Add(features[i]); - } - calculate(out maxLength, out dscFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - /// - /// 地球2中点击地球1中同步添加缓冲区 - /// - /// - /// - void globeControl2_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl2.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl2.Globe.Action != EnumAction3D.SelectObject || - globeControl2.Globe.SelectedObject == null) - return; - else - { - GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - - addPologyToGlobeControl(line, bufferWidth); - } - - dscFeature = globeControl2.Globe.SelectedObject; - //双屏同时选中同一管段 - GSOLayer layers = getSameLayer(dscFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = dscFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(features[i], dscFeature, Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - { - listFeatures.Add(features[i]); - } - } - calculate(out maxLength, out srcFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - private void calculate(out double maxLength, out GSOFeature feature, GSOFeatures listFeatures, - GSOGeoPolyline3D scLine) - { - maxLength = 0; - feature=new GSOFeature(); - if (listFeatures.Length == 0) - feature = null; - else - { - if (listFeatures.Length == 1) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - } - else - { - for (int m = 0; m < listFeatures.Length; m++) - { - GSOGeoPolyline3D tempSGLine = listFeatures[m].Geometry as GSOGeoPolyline3D; - - double tempLength = tempSGLine.GetSpaceLength(false, 6378137); - double lengthAbs = Math.Abs(tempLength - scLine.GetSpaceLength(false, 6378137)); - if (m == 0) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - maxLength = lengthAbs; - } - else if (lengthAbs < maxLength) - { - feature = listFeatures[m]; - listFeatures[m].HighLight = true; - maxLength = lengthAbs; - } - } - } - } - } - - /// - /// 计算距离 - /// - /// - /// - /// - double calculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2,bool isVertical) - { - GSOPoint3d pntIntersect1 = new GSOPoint3d(); - GSOPoint3d pntIntersect2 = new GSOPoint3d(); - GSOPoint3d pntProIntersect1 = new GSOPoint3d(); - GSOPoint3d pntProIntersect2 = new GSOPoint3d(); - double dDist = 0; - if (isVertical) - { - dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "垂直"); - } - else - { - dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "水平"); - } - - return dDist; - } - - /// - /// 清除所有高亮Feature - /// - /// - private void clearFeatureHighLight(GSOGlobeControl glb1,GSOGlobeControl glb2) - { - layerTemp.RemoveAllFeature(); - layerTemp2.RemoveAllFeature(); - //清除gbl1中高亮 - for (int i = 0; i < glb1.Globe.Layers.Count; i++) - { - GSOLayer layer = glb1.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - //清除gbl2中高亮 - for (int i = 0; i < glb2.Globe.Layers.Count; i++) - { - GSOLayer layer = glb2.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - } - - /// - /// 添加标注 - /// - /// - /// - /// - /// - /// - /// - private GSOPoint3d LabelDistance(GSOLayer markerLayer, GSOLayer markerLayer2, - GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, bool markerVisible,string label) - { - if (pntIntersect1 == null || pntIntersect2 == null) - return new GSOPoint3d(); - GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); - GSOPoint3ds point3ds = new GSOPoint3ds(); - point3ds.Add(pntIntersect1); - point3ds.Add(pntIntersect2); - disline.AddPart(point3ds); - - GSOGeoMarker dismarker = new GSOGeoMarker(); - GSOFeature marker = null; - GSOFeature line = null; - createLineStyle(out marker, out line,disline, pntIntersect1, pntIntersect2, distance, label, dismarker); - - line.Visible = marker.Visible = markerVisible; - markerLayer.AddFeature(line); - markerLayer.AddFeature(marker); - - markerLayer2.AddFeature(line); - markerLayer2.AddFeature(marker); - - return dismarker.Position; - } - /// - /// 控制标注和字体的颜色 - /// - /// - /// - /// - /// - /// - /// - /// - /// - private void createLineStyle(out GSOFeature marker,out GSOFeature line,GSOGeoPolyline3D disline, - GSOPoint3d pntIntersect1,GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) - { - GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 - style.LineColor = Color.Red; - style.LineWidth = 5; //设置线的宽度为5 - style.VertexVisible = true; //显示线的节点 - disline.Style = style; //把风格添加到线上 - disline.AltitudeMode = EnumAltitudeMode.Absolute; - line=new GSOFeature(); - line.Geometry = disline; - - dismarker.X = pntIntersect1.X; - dismarker.Y = pntIntersect1.Y; - dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; - dismarker.Text = label + distance.ToString("0.00") + "米"; - dismarker.AltitudeMode = EnumAltitudeMode.Absolute; - - GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); - GSOTextStyle styleText = new GSOTextStyle(); - styleText.IsSizeFixed = true; - styleText.ForeColor = Color.Red; - styleText.FontSize = 20; - styleMarker.TextStyle = styleText; - dismarker.Style = styleMarker; - - marker=new GSOFeature(); - marker.Geometry = dismarker; - } - } } diff --git a/FrmHotFuncStat.cs b/FrmHotFuncStat.cs index 84131ef..f313b20 100644 --- a/FrmHotFuncStat.cs +++ b/FrmHotFuncStat.cs @@ -58,14 +58,11 @@ DataTable table = OledbHelper.QueryTable(sql); - if (table != null) + if (table == null) return; + for (int i = 0; i < table.Rows.Count; i++) { - for (int i = 0; i < table.Rows.Count; i++) - { - userLists.Items.Add(table.Rows[i][0].ToString()); - } + userLists.Items.Add(table.Rows[i][0].ToString()); } - } //统计结果 private void statBtn_Click(object sender, EventArgs e) diff --git a/FrmLayerControl.cs b/FrmLayerControl.cs index 8586041..8fbce97 100644 --- a/FrmLayerControl.cs +++ b/FrmLayerControl.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Windows.Forms; using DevComponents.DotNetBar; using GeoScene.Data; @@ -13,10 +14,10 @@ GSOGlobeControl globeControl1; GSOGlobeControl globeControl2; - TreeNode terrainManagerNode = null; - TreeNode layerManagerNode = null; - TreeNode terrainManagerNode1 = null; - TreeNode layerManagerNode1 = null; +// TreeNode terrainManagerNode = null; +// TreeNode layerManagerNode = null; +// TreeNode terrainManagerNode1 = null; +// TreeNode layerManagerNode1 = null; public FrmLayerControl(GSOGlobeControl ctl1,GSOGlobeControl ctl2) { @@ -25,14 +26,14 @@ globeControl2 = ctl2; } - private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) - { - treeNode=new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - } +// private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) +// { +// treeNode=new TreeNode(); +// treeNode.ImageIndex = 0; +// treeNode.SelectedImageIndex = 0; +// treeNode.Checked = false; +// treeNode.Text = strTreeNodeText; +// } // private void initTreeView() // { @@ -51,234 +52,258 @@ // layerTree2.Nodes.Add(terrainManagerNode); // } - #region wxl重构树形结构代码 + + - private TreeNode treeNode(string strTreeNodeText) - { - TreeNode treeNode = new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - return treeNode; - } -// private void appendToParent(TreeNodeCollection treeNodeCollection, ) - #endregion - private void initTreeView() +// private void initNode(string nodeName) +// { +// TreeNode nodeGroupElse1 = new TreeNode(); +// nodeGroupElse1.Text = nodeName; +// layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); +// +// TreeNode nodeGroupElse = new TreeNode(); +// nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; +// layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); +// } + +// private void initTreeNode(XmlNodeList Params) +// { +// foreach (XmlNode paramsNode in Params) //layers +// { +// foreach (XmlNode layerNode in paramsNode) //layer +// { +// initNode(layerNode.Attributes["label"].Value); +// } +// } +// +// initNode("基础图层"); +// initNode("其他"); +// } + +// private void FrmLayerControl_Load(object sender, EventArgs e) +// { +// +// initTreeView(); +// try +// { +// XmlDocument doc = new XmlDocument(); +// doc.Load(Application.StartupPath + "\\双屏设置.xml"); +// XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// +// initTreeNode(Params); +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// +// RefreshLayerAndTerrainTree(); +// } + private void FrmLayerControl_Load(object sender, EventArgs e) { layerTree1.Nodes.Clear(); layerTree2.Nodes.Clear(); - - //加载layertree2 - initLayerTree(out layerManagerNode1, "图层管理"); - layerTree1.Nodes.Add(layerManagerNode1); - initLayerTree(out terrainManagerNode1, "地形管理"); - layerTree1.Nodes.Add(terrainManagerNode1); - - initLayerTree(out layerManagerNode, "图层管理"); - layerTree2.Nodes.Add(layerManagerNode); - initLayerTree(out terrainManagerNode, "地形管理"); - layerTree2.Nodes.Add(terrainManagerNode); + TreeUtils.InitLayerTree(globeControl1, layerTree1, "实测数据"); + TreeUtils.InitLayerTree(globeControl2, layerTree2, "施工数据"); } - private void initNode(string nodeName) - { - TreeNode nodeGroupElse1 = new TreeNode(); - nodeGroupElse1.Text = nodeName; - layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); + #region wxl重构树形结构代码 - TreeNode nodeGroupElse = new TreeNode(); - nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; - layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); - } + /// + /// 构造tree,最多解析三层,可放在工具类中 - private void initTreeNode(XmlNodeList Params) - { - foreach (XmlNode paramsNode in Params) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - initNode(layerNode.Attributes["label"].Value); - } - } + /// 所属地球 + /// 要加载的树 + /// 数据来源,实测数据/施工数据/规划数据/红线数据,为空则展示全部 +// private void initTree(GSOGlobeControl gsoGlobeControl,TreeView treeView, string viewDatasrc) +// { +// treeView.Nodes.Clear(); +// LayerConfig layerConfig = Utility.layerConfig; +// List datasrcs = layerConfig.datasrcs; +// foreach (DataSrc datasrc in datasrcs) +// { +// if (viewDatasrc != null && !viewDatasrc.Trim().Equals("") && !datasrc.label.Equals(viewDatasrc)) continue; +// TreeNode rootNode = treeView.Nodes.Add(datasrc.label); +// List layerTypes = datasrc.layertypes; +// foreach (LayerType layerType in layerTypes) +// { +// TreeNode secNode = rootNode.Nodes.Add(layerType.label); +// List layers = layerType.layers; +// foreach (Layer layer in layers) +// { +// GSOLayer gsoLayer = gsoGlobeControl.Globe.Layers.GetLayerByCaption(layer.layer); +// if (gsoLayer == null) continue;//将不存在的去除 +// TreeNode node = new TreeNode(); +// node.Tag = gsoLayer; +// node.Text = layer.label; +// node.Checked = gsoLayer.Visible; +// if (gsoLayer.Visible) +// { +// secNode.Checked = true; +// rootNode.Checked = true; +// } +// secNode.Nodes.Add(node); +// } +// } +// } +// } - initNode("基础图层"); - initNode("其他"); - } + #endregion - private void FrmLayerControl_Load(object sender, EventArgs e) - { - initTreeView(); - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(Application.StartupPath + "\\双屏设置.xml"); - XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, +// TreeView layerTree) +// { +// try +// { +// for (int i = 0; i < nLayerCount; i++) +// { +// GSOLayer layer = globcontrol.Globe.Layers[i]; +// if (layer == null) continue; +// string layerName = layer.Name; +// TreeNode node = new TreeNode(); +// node.Tag = layer; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = layer.Caption; +// node.Checked = layer.Visible; +// +// bool isContains = false; +// for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) +// { +// if (!layerName.Contains("fttp:")) +// { +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || +// layerName.Contains("施工") || +// layerName.Contains("规划")) continue; +// break; +// case "layerTree2": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[j].Nodes.Add(node); +// isContains = true; +// break; +// } +// else +// { +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); +// isContains = true; +// break; +// } +// } +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || +// layerName.Contains("标注") || +// isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || +// layerName.Contains("景观") || layerName.Contains("红线")) +// continue; +// break; +// case "layerTree2": +// if (isContains != false || layerName.Contains("tempLgdData2")) +// continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); +// } +// +// for (int i = 0; i < nTerrainCount; i++) +// { +// GSOTerrain terrain = globcontrol.Globe.Terrains[i]; +// if (terrain == null) continue; +// TreeNode node = new TreeNode(); +// node.Tag = terrain; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = terrain.Caption; +// node.Checked = terrain.Visible; +// switch (layerTree.Name) +// { +// case "layerTree1": +// terrainManagerNode1.Nodes.Add(node); +// break; +// case "layerTree2": +// terrainManagerNode.Nodes.Add(node); +// break; +// default: +// break; +// } +// } +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// } - initTreeNode(Params); - } - catch (Exception ex) - { - LogError.PublishError(ex); - } +// private void initTreeNodeCheckedStatus(TreeView layerTreeView) +// { +// //节点选中状态控制 +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// if (node.Checked != true) continue; +// layerTreeView.Nodes[0].Checked = true; +// break; +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOTerrain layer = childNode.Tag as GSOTerrain; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// } - RefreshLayerAndTerrainTree(); - } - - private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, - TreeView layerTree) - { - try - { - for (int i = 0; i < nLayerCount; i++) - { - GSOLayer layer = globcontrol.Globe.Layers[i]; - if (layer == null) continue; - string layerName = layer.Name; - TreeNode node = new TreeNode(); - node.Tag = layer; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = layer.Caption; - node.Checked = layer.Visible; - - bool isContains = false; - for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) - { - if (!layerName.Contains("fttp:")) - { - switch (layerTree.Name) - { - case "layerTree1": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || - layerName.Contains("施工") || - layerName.Contains("规划")) continue; - break; - case "layerTree2": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[j].Nodes.Add(node); - isContains = true; - break; - } - else - { - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); - isContains = true; - break; - } - } - switch (layerTree.Name) - { - case "layerTree1": - if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || - layerName.Contains("标注") || - isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || - layerName.Contains("景观") || layerName.Contains("红线")) - continue; - break; - case "layerTree2": - if (isContains != false || layerName.Contains("tempLgdData2")) - continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); - } - - for (int i = 0; i < nTerrainCount; i++) - { - GSOTerrain terrain = globcontrol.Globe.Terrains[i]; - if (terrain == null) continue; - TreeNode node = new TreeNode(); - node.Tag = terrain; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = terrain.Caption; - node.Checked = terrain.Visible; - switch (layerTree.Name) - { - case "layerTree1": - terrainManagerNode1.Nodes.Add(node); - break; - case "layerTree2": - terrainManagerNode.Nodes.Add(node); - break; - default: - break; - } - } - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - - private void initTreeNodeCheckedStatus(TreeView layerTreeView) - { - //节点选中状态控制 - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - if (node.Checked != true) continue; - layerTreeView.Nodes[0].Checked = true; - break; - } - - foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOTerrain layer = childNode.Tag as GSOTerrain; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - } - - void exPandTreeNode() - { - layerManagerNode1.Expand(); - terrainManagerNode1.Expand(); - layerManagerNode.Expand(); - terrainManagerNode.Expand(); - } +// void exPandTreeNode() +// { +// layerManagerNode1.Expand(); +// terrainManagerNode1.Expand(); +// layerManagerNode.Expand(); +// terrainManagerNode.Expand(); +// } /// /// 刷新节点树 /// - private void RefreshLayerAndTerrainTree() - { - int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 - int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 - addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); - initTreeNodeCheckedStatus(layerTree1); - - int nLayerCount = globeControl2.Globe.Layers.Count; - int nTerrainCount = globeControl2.Globe.Terrains.Count; - addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); - initTreeNodeCheckedStatus(layerTree2); - - // 展开 - exPandTreeNode(); - } +// private void RefreshLayerAndTerrainTree() +// { +// int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 +// int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 +// addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); +// initTreeNodeCheckedStatus(layerTree1); +// +// int nLayerCount = globeControl2.Globe.Layers.Count; +// int nTerrainCount = globeControl2.Globe.Terrains.Count; +// addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); +// initTreeNodeCheckedStatus(layerTree2); +// +// // 展开 +// exPandTreeNode(); +// } /// /// 节点树复选框选中状态改变事件处理 @@ -289,144 +314,132 @@ { if (e.Action != TreeViewAction.Unknown) { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } + TreeUtils.TreeNodeCheckedChange(globeControl2,e.Node); + } + } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree2(e.Node, e.Node.Checked); + private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) + { + if (e.Action != TreeViewAction.Unknown) + { + TreeUtils.TreeNodeCheckedChange(globeControl1, e.Node); } } + + +// private void layerTree2_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree2(e.Node, e.Node.Checked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree1(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree1(childNode, isChecked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree2(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree2(childNode, isChecked); +// } +// } /// /// 节点树选中状态改变事件 /// /// /// - private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) - { - if (e.Action != TreeViewAction.Unknown) - { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } +// private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree1(e.Node, e.Node.Checked); +// } +// } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree1(e.Node, e.Node.Checked); - } - } - /// - /// 改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 - /// - /// - private void CheckParentNode(TreeNode curNode) - { - bool bChecked = false; - - if (curNode.Parent != null) - { - foreach (TreeNode node in curNode.Parent.Nodes) - { - if (node.Checked) - { - bChecked = true; - break; - } - } - if (bChecked) - { - curNode.Parent.Checked = true; - CheckParentNode(curNode.Parent); - } - else - { - curNode.Parent.Checked = false; - CheckParentNode(curNode.Parent); - } - } - } } } diff --git a/FrmMetadata.cs b/FrmMetadata.cs index 4d0d5cb..bb7c46c 100644 --- a/FrmMetadata.cs +++ b/FrmMetadata.cs @@ -12,12 +12,8 @@ { public partial class FrmMetadata : Office2007Form { - List pipelineLayerNames = new List();//线图层名称 - List workwellLayerNames = new List();//工井图层名称 - List valueLayerNames = new List();//阀门图层名称 - List instrumenLayerNames = new List();//附属物图层名称 - string filename = Utility.filename; - DataSet dataSet = new DataSet(); + + bool selectedLayer; public FrmMetadata() @@ -25,308 +21,33 @@ InitializeComponent(); loadTreeView(layerTree); } - private void FrmMetadata_Load(object sender, EventArgs e) - { - //this.ntLblC.Text = "nn"; - // loadTreeView(layerTree); - } private void loadTreeView(TreeView tv)//构建图层树 { - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - //tv.ShowPlusMinus = false; - - //tv.Nodes.Clear(); - tv.ShowLines = true; - // tv.ImageList = imageList1; - tv.CheckBoxes = false; - #region 三级 - - //foreach (XmlNode paramsNode in Params1) //layers - //{ - // foreach (XmlNode layerNode in paramsNode) //layer - // { - // TreeNode nodelayer = new TreeNode(); - // string layerName = layerNode.Attributes["label"].Value; - // nodelayer.Text = layerName; - - // if (layerNode.HasChildNodes != false) - // { - // tv.Nodes.Add(nodelayer); - // foreach (XmlNode layerchildNode in layerNode) //layerchild - // { - // if (layerchildNode.Name == "layerchild") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["type"].Value; - // string layerchildName = layerchildNode.Attributes["label"].Value; - // if (layerType == "locaserver") - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - - // } - // else - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // if (layerchildNode.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = boollayer; - // nodelayer.Nodes.Add(nodelayerchild); - // } - // } - // else if (layerchildNode.Name == "layertype") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["label"].Value; - // nodelayerchild.Text = layerType; - // nodelayerchild.Tag = layerType; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - // if (layerchildNode.HasChildNodes == true) - // { - // foreach (XmlNode childNodeLayer in layerchildNode) - // { - // TreeNode nodelayerchild1 = new TreeNode(); - // string layerName1 = childNodeLayer.Attributes["layer"].Value; - // string layerchildName = childNodeLayer.Attributes["label"].Value; - // string layerType1 = childNodeLayer.Attributes["type"].Value; - // if (childNodeLayer.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild1.Text = layerchildName; - // nodelayerchild1.Tag = layerType1 + "|" + layerName1; - // nodelayerchild1.Checked = boollayer; - // nodelayerchild.Nodes.Add(nodelayerchild1); - // } - // } - // } - - // } - // } - // else - // { - // tv.Nodes.Add(nodelayer); - // } - // } - - //} - - #endregion - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - TreeNode nodelayer = new TreeNode(); - string layerName = layerNode.Attributes["label"].Value; - nodelayer.Text = layerName; - - if (layerNode.HasChildNodes) - { - tv.Nodes.Add(nodelayer); - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - if (layerchildNode.Name == "layerchild") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["type"].Value; - string layerchildName = layerchildNode.Attributes["label"].Value; - if (layerType == "locaserver") - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - - } - else - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - if (layerchildNode.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - //nodelayerchild.Checked = boollayer; - nodelayer.Nodes.Add(nodelayerchild); - } - } - else if (layerchildNode.Name == "layertype") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["label"].Value; - nodelayerchild.Text = layerType; - nodelayerchild.Tag = layerType; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode) - { - if (childNodeLayer.HasChildNodes) - { - TreeNode nodelayerchild2 = new TreeNode(); - string layer = childNodeLayer.Attributes["label"].Value; - nodelayerchild2.Text = layer; - nodelayerchild2.Tag = layer; - nodelayerchild2.Checked = true; - nodelayerchild.Nodes.Add(nodelayerchild2); - foreach (XmlNode n in childNodeLayer) - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = n.Attributes["layer"].Value; - string layerchildName = n.Attributes["label"].Value; - string layerType1 = n.Attributes["type"].Value; - if (n.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (n.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (n.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (n.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild2.Nodes.Add(nodelayerchild1); - - } - } - else - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = childNodeLayer.Attributes["layer"].Value; - string layerchildName = childNodeLayer.Attributes["label"].Value; - string layerType1 = childNodeLayer.Attributes["type"].Value; - if (childNodeLayer.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild.Nodes.Add(nodelayerchild1); - - } - } - } - } - - } - } - else - { - tv.Nodes.Add(nodelayer); - } - } - - } - if (tv.Nodes.Count > 0) - { - //tv.Nodes[0].Expand(); - if (tv.Nodes.Count > 0) - { - foreach (TreeNode node in tv.Nodes) - { - //node.Expand(); - } - } - } - //tv.ExpandAll(); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } + //tv.ShowPlusMinus = false; + //tv.Nodes.Clear(); + // tv.ImageList = imageList1; + tv.ShowLines = true; + tv.CheckBoxes = false; + TreeUtils.InitLayerTree(null, tv, null); } - + /// + /// 点击父节点则展开,点击子节点则编辑元数据 + /// + /// + /// private void layerTree_AfterSelect(object sender, TreeViewEventArgs e) { - String layername = layerTree.SelectedNode.Text; - if (layerTree.SelectedNode.GetNodeCount(true) == 0) { - searchLayerInfo(layername); - - selectedLayer = true; - clearBtn.Hide(); - completeBtn.Hide(); + String layername = e.Node.Text; + if (e.Node.GetNodeCount(true) != 0) + { //点击父节点,则展开 + e.Node.Expand(); + return; } + searchLayerInfo(layername); + selectedLayer = true; + clearBtn.Hide(); + completeBtn.Hide(); } //查询元数据 private void searchLayerInfo(String layername) { @@ -335,8 +56,6 @@ + " casic_metadatalayer where casic_metadatacontent.\"LAYERID\" = casic_metadatalayer.\"LAYERID\" and casic_metadatalayer.\"LAYERNAME\"='" + layername+"'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; - if (table != null && table.Rows.Count > 0) { groupBox1.Text = layername; @@ -400,8 +119,6 @@ //判断此时layerTree有没有选中的图层 if (selectedLayer)//有选中的图层,获得其名 { - string name = layerTree.SelectedNode.Text; - OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "支持格式(*.xml)|*.xml|XML数据(*.xml)|"; dlg.Multiselect = true; @@ -419,31 +136,24 @@ //读入元数据 private void AddXMLMDdata(string strFilePath) { - try - { - dataSet.Clear(); //清空数据集中的内容 - dataSet.ReadXml(strFilePath); //读取XML文件中的内容 + DataSet dataSet = new DataSet(); + dataSet.ReadXml(strFilePath); //读取XML文件中的内容 - //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); - string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); - string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); - string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); - string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); + //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); + string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); + string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); + string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); + string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); - //this.titleLbl.Text = attrtitle; - consLblC.Text = attrcons; - descLblC.Text = attrdesc; - authorLblC.Text = attrauthor; - ntLblC.Text = attrnt; - //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); + //this.titleLbl.Text = attrtitle; + consLblC.Text = attrcons; + descLblC.Text = attrdesc; + authorLblC.Text = attrauthor; + ntLblC.Text = attrnt; + //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); - completeBtn.Visible = true; - //this.clearBtn.Visible = true; - } - catch (Exception e) - { - - } + completeBtn.Visible = true; + //this.clearBtn.Visible = true; } //新建/编辑元数据 private void editBtn_Click(object sender, EventArgs e) @@ -509,11 +219,7 @@ string sql = "select \"LAYERID\" from casic_metadatalayer where \"LAYERNAME\" = '" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - if (table != null && table.Rows.Count > 0)//已有该图层,属于编辑 - { - return false; - } - return true; + return table == null || table.Rows.Count <= 0; } //保存元数据 private void saveData(String method,String layername,String cons,String desc,String author,String nt) { @@ -539,17 +245,16 @@ string insertSQL = "insert into casic_metadatalayer values ('" + layerid + "','" + layername + "')";//+ string insertSQL2 = "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','" + desc + "','" + author + "','" + nt + "')"; // "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','"+desc+"','"+author+"','"+nt+"')"; - if ((OledbHelper.sqlExecuteNonQuery(insertSQL) > 0)&&(OledbHelper.sqlExecuteNonQuery(insertSQL2)>0)) - { - MessageBox.Show("保存元数据成功!"); + if ((OledbHelper.sqlExecuteNonQuery(insertSQL) <= 0) || + (OledbHelper.sqlExecuteNonQuery(insertSQL2) <= 0)) return; + MessageBox.Show("保存元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } else { //更新 string layeridSQL = "select layerid from casic_metadatalayer where LAYERNAME='"+layername+"'"; @@ -561,16 +266,14 @@ + "',casic_metadatacontent.MDAUTHOR ='" + author.Trim() + "',casic_metadatacontent.NT ='" + nt.Trim() + "' where casic_metadatacontent.LAYERID='" + layerid + "'"; - if (OledbHelper.sqlExecuteNonQuery(updateSQL) > 0) - { - MessageBox.Show("更新元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + if (OledbHelper.sqlExecuteNonQuery(updateSQL) <= 0) return; + MessageBox.Show("更新元数据成功!"); + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } } diff --git a/FrmMetadataStat.cs b/FrmMetadataStat.cs index cb19f84..c3c1359 100644 --- a/FrmMetadataStat.cs +++ b/FrmMetadataStat.cs @@ -2,16 +2,16 @@ using System.Collections; using System.Collections.Generic; using System.Data; +using System.Linq; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; -using System.Xml; using DevComponents.DotNetBar; namespace Cyberpipe { public partial class FrmMetadataStat : Office2007Form { - Dictionary dic = new Dictionary(); + public FrmMetadataStat() { InitializeComponent(); @@ -22,7 +22,7 @@ string sql = "select LAYERNAME from casic_metadataLayer where LAYERNAME like '%" + keywordsTxt.Text.Trim() + "%'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; + int num = 0; resultList.Clear(); consLblC.Text = ""; @@ -32,6 +32,7 @@ if (table != null && table.Rows.Count > 0) { + num = table.Rows.Count; for (int i = 0; i < num;i++ ) { resultList.Items.Add(table.Rows[i][0].ToString()); @@ -56,7 +57,8 @@ int metadataLayernum = statistMDLayer(); int nomdLayernum = layernum - metadataLayernum; //MessageBox.Show("共有多少层?" + layernum.ToString()+"=="+metadataLayernum.ToString()+"=="+nomdLayernum.ToString()); - dic.Clear(); +// dic.Clear(); + Dictionary dic = new Dictionary(); dic.Add("已建",metadataLayernum); dic.Add("未建", nomdLayernum); @@ -74,11 +76,9 @@ foreach (string key in dic.Keys) { - if (dic[key] != 0) - { - xlist.Add(key); - ylist.Add(dic[key]); - } + if (dic[key] == 0) continue; + xlist.Add(key); + ylist.Add(dic[key]); } chart1.Series[0].Points.DataBindXY(xlist, ylist); @@ -89,73 +89,15 @@ string sql = "select * from casic_metadataLayer"; DataTable table = OledbHelper.QueryTable(sql); - mdlayernum = table.Rows.Count; + if(table!=null)mdlayernum = table.Rows.Count; return mdlayernum; } //统计有多少个图层 - private int statistLayer() { - int layernum = 0; - - string filename = Utility.filename; - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - //MessageBox.Show(layerNode.Attributes["label"].Value); - - if (layerNode.HasChildNodes) - { - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - //MessageBox.Show(layerchildNode.Attributes["label"].Value); - if (layerchildNode.Name == "layerchild") - { - layernum++; - } - else if (layerchildNode.Name == "layertype") - { - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode)//layertype下的layerchild - { - //MessageBox.Show(childNodeLayer.Attributes["label"].Value); - if (childNodeLayer.HasChildNodes) - { - - foreach (XmlNode n in childNodeLayer) - { - layernum++; - } - } - else - { - - layernum++; - } - } - } - } - - } - } - } - - } - - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - return layernum; + private int statistLayer() + { + List datasrcs = Utility.layerConfig.datasrcs; + return datasrcs.SelectMany(datasrc => datasrc.layertypes).Sum(layerType => layerType.layers.Count); } //选择list @@ -174,7 +116,6 @@ + "join casic_metadatalayer on casic_metadatalayer.LAYERID = casic_metadatacontent.LAYERID " + "where casic_metadatalayer.LAYERNAME='" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; //MessageBox.Show(num.ToString()); if (table != null && table.Rows.Count > 0) { @@ -192,10 +133,5 @@ ntLblC.Text = ""; } } - - private void buttonX1_Click(object sender, EventArgs e) - { - drawChart(); - } } } diff --git a/FrmWait.Designer.cs b/FrmWait.Designer.cs index 99733ea..88f5a29 100644 --- a/FrmWait.Designer.cs +++ b/FrmWait.Designer.cs @@ -55,7 +55,6 @@ this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(0, 24); this.label1.TabIndex = 1; - this.label1.Click += new System.EventHandler(this.label1_Click); // // FrmWait // @@ -71,7 +70,7 @@ this.ShowIcon = false; this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; this.Text = "正在处理,请稍后..."; - this.Load += new System.EventHandler(this.FrmWait_Load); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmWait_FormClosing); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); diff --git a/FrmWait.cs b/FrmWait.cs index d3b7a48..d645ae4 100644 --- a/FrmWait.cs +++ b/FrmWait.cs @@ -32,27 +32,6 @@ frm = null; } - private void FrmWait_Load(object sender, EventArgs e) - { - - - } - - - private void labelX2_Click(object sender, EventArgs e) - { - - } - - private void progressBarX1_Click(object sender, EventArgs e) - { - - } - - private void label1_Click(object sender, EventArgs e) - { - - } } } diff --git a/FrmYJSHTC.cs b/FrmYJSHTC.cs index 3572371..27b7186 100644 --- a/FrmYJSHTC.cs +++ b/FrmYJSHTC.cs @@ -143,9 +143,7 @@ for (int i = ctl1.Globe.Layers.Count - 1; i >= 0; i--) { if (ctl1.Globe.Layers[i].Caption == str) - { ctl1.Globe.Layers.Remove(ctl1.Globe.Layers[i]); - } } foreach (TreeNode n in layerTree.Nodes) @@ -155,20 +153,15 @@ for (int i = 0; i < n.Nodes.Count; i++) { if (n.Nodes[i].Text == str) - { n.Nodes[i].Remove(); - } } } } string sql = "delete from casic_audit_result where SH_LAYER = '" + str + "'"; - OledbHelper.sqlExecuteNonQuery(sql); - } } - } } diff --git a/ClassDoubleScreenCompare.cs b/ClassDoubleScreenCompare.cs new file mode 100644 index 0000000..f2935da --- /dev/null +++ b/ClassDoubleScreenCompare.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using GeoScene.Globe; +using GeoScene.Data; +using GeoScene.Engine; +using System.Drawing; + +namespace Cyberpipe +{ + class ClassDoubleScreenCompare + { + public static GSOFeature getSameFeatureFromOtherGlobe(GSOFeature feature, + GSOGlobeControl globeControl1, GSOGlobeControl globeControl2,double bufferWidth,GSOGeoPolygon3D resPolygon) + { + GSOLayer layer; + GSOFeatures features = new GSOFeatures(); + + if (!feature.Dataset.Caption.StartsWith("施工")) + { + layer = feature.Dataset.Caption == "供电管线" + ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") + : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(feature, fs[i], globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + else + { + layer = feature.Dataset.Caption == "施工电力管线" + ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") + : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(fs[i], feature, globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + + return getMostSimilarFeatureFromFeatures(feature, features); + + } + + + private static GSOFeature getMostSimilarFeatureFromFeatures(GSOFeature feature, GSOFeatures features) + { + double maxLength = 0; + GSOFeature f = new GSOFeature(); + GSOGeoPolyline3D line = feature.Geometry as GSOGeoPolyline3D; + + if (features.Length == 0) return null; + if (features.Length == 1) + { + f = features[0]; + f.HighLight = true; + } + else + { + for (int m = 0; m < features.Length; m++) + { + GSOGeoPolyline3D tempSGLine = features[m].Geometry as GSOGeoPolyline3D; + + double tempLength = tempSGLine.GetSpaceLength(false, 6378137); + double lengthAbs = Math.Abs(tempLength - line.GetSpaceLength(false, 6378137)); + if (m == 0) + { + f = features[0]; + f.HighLight = true; + maxLength = lengthAbs; + } + else if (lengthAbs < maxLength) + { + f = features[m]; + f.HighLight = true; + maxLength = lengthAbs; + } + } + } + return f; + } + + private static bool isSameFeature(GSOFeature feature1, GSOFeature feature2, GSOLayer layer, double bufferWidth) + { + GSOGeoPolyline3D line = feature1.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = line.CreateBuffer(bufferWidth * 2, true, 5, true, false); + + if (bufferPolygon == null) return false; + + GSOFeatures featuresInLayer = layer.FindFeaturesInPolygon(bufferPolygon, true); + + if (featuresInLayer == null || featuresInLayer.Length <= 0) + return false; + + for (int i = 0; i < featuresInLayer.Length; i++) + { + if (featuresInLayer[i].Name == feature2.Name) + { + return true; + break; + } + } + return false; + } + + private static bool isSimilarFeature(GSOFeature srcFeature, GSOFeature dscFeature, + GSOGlobeControl globeControl1,GSOGlobeControl globeControl2,double bufferWidth) + { + GSOLayer dscLayer = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); + GSOLayer srcLayer = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); + + if (!isSameFeature(srcFeature, dscFeature, dscLayer, bufferWidth) + && !isSameFeature(dscFeature, srcFeature, srcLayer, bufferWidth)) + return false; + return true; + } + + public static void CalculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2, + out double horizonDistance, out double verticalDistance, GSOGlobeControl globeControl1, GSOGlobeControl globeControl2) + { + GSOPoint3d pntIntersect1 = new GSOPoint3d(); + GSOPoint3d pntIntersect2 = new GSOPoint3d(); + GSOPoint3d pntProIntersect1 = new GSOPoint3d(); + GSOPoint3d pntProIntersect2 = new GSOPoint3d(); + + verticalDistance = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, verticalDistance, true, "垂直", globeControl1, globeControl2); + + horizonDistance = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, horizonDistance, true, "水平", globeControl1, globeControl2); + + } + + private static GSOPoint3d LabelDistance(GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, + double distance, bool markerVisible, string label,GSOGlobeControl globeControl1,GSOGlobeControl globeControl2) + { + if (pntIntersect1 == null || pntIntersect2 == null) + return new GSOPoint3d(); + GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); + GSOPoint3ds point3ds = new GSOPoint3ds(); + point3ds.Add(pntIntersect1); + point3ds.Add(pntIntersect2); + disline.AddPart(point3ds); + + GSOGeoMarker dismarker = new GSOGeoMarker(); + GSOFeature marker = null; + GSOFeature line = null; + createLineStyle(out marker, out line, disline, pntIntersect1, pntIntersect2, distance, label, dismarker); + + line.Visible = marker.Visible = markerVisible; + globeControl1.Globe.MemoryLayer.AddFeature(line); + globeControl1.Globe.MemoryLayer.AddFeature(marker); + + globeControl2.Globe.MemoryLayer.AddFeature(line); + globeControl2.Globe.MemoryLayer.AddFeature(marker); + + return dismarker.Position; + } + + private static void createLineStyle(out GSOFeature marker, out GSOFeature line, GSOGeoPolyline3D disline, + GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) + { + GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 + style.LineColor = Color.Red; + style.LineWidth = 5; //设置线的宽度为5 + style.VertexVisible = true; //显示线的节点 + disline.Style = style; //把风格添加到线上 + disline.AltitudeMode = EnumAltitudeMode.Absolute; + line = new GSOFeature(); + line.Geometry = disline; + + dismarker.X = pntIntersect1.X; + dismarker.Y = pntIntersect1.Y; + dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; + dismarker.Text = label + distance.ToString("0.00") + "米"; + dismarker.AltitudeMode = EnumAltitudeMode.Absolute; + + GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); + GSOTextStyle styleText = new GSOTextStyle(); + styleText.IsSizeFixed = true; + styleText.ForeColor = Color.Red; + styleText.FontSize = 20; + styleMarker.TextStyle = styleText; + dismarker.Style = styleMarker; + + marker = new GSOFeature(); + marker.Geometry = dismarker; + } + + } +} diff --git a/Cyberpipe.csproj b/Cyberpipe.csproj index d8aa9c8..bcce54d 100644 --- a/Cyberpipe.csproj +++ b/Cyberpipe.csproj @@ -203,6 +203,7 @@ + @@ -1143,6 +1144,7 @@ SysRescInfoManager.cs + True True diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 123caf1..2c45db6 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -258,42 +258,25 @@ for (int i = 0; i < scLayer.GetAllFeatures().Length; i++) { GSOFeature scFeature = scLayer.GetAt(i); - if (scFeature.GetFieldAsString("所属道路") == road) + if (scFeature.GetFieldAsString("所属道路") != road) continue; + GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + + GSOFeature sgFeature = null; + GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); + + //**判断同一个Feature + if (sgFeatures.Length >= 1) { - GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); - GSOFeature sgFeature = null; - GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); - - //**判断同一个Feature - if (sgFeatures.Length >= 1) + if (sgFeature != null) { - sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); + GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; + double horizonDistance, verticalDistance; - if (sgFeature != null) - { - GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; - double horizonDistance, verticalDistance; - - CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); - GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); - } - else - { - scFeature.HighLight = true; - DataRow dr = dt.NewRow(); - dr[0] = scLayer.Caption; - dr[1] = scFeature.GetFieldAsString("编号"); - dr[2] = sgLayer.Caption; - dr[3] = "无"; - dr[4] = "无"; - dr[5] = "0.02"; - dr[6] = "无"; - dr[7] = "0.02"; - dr[8] = "未设计管段"; - dt.Rows.Add(dr); - } + CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); + GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); } else { @@ -311,6 +294,21 @@ dt.Rows.Add(dr); } } + else + { + scFeature.HighLight = true; + DataRow dr = dt.NewRow(); + dr[0] = scLayer.Caption; + dr[1] = scFeature.GetFieldAsString("编号"); + dr[2] = sgLayer.Caption; + dr[3] = "无"; + dr[4] = "无"; + dr[5] = "0.02"; + dr[6] = "无"; + dr[7] = "0.02"; + dr[8] = "未设计管段"; + dt.Rows.Add(dr); + } } } /// diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index 53946c0..fe32265 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -4,7 +4,7 @@ using GeoScene.Globe; namespace Cyberpipe -{ +{ //本类作用为:辅助GlobalControl上Feature的统计分析工具类 class FeatureStatisticsService { /// @@ -60,8 +60,8 @@ /// /// /// - /// - /// + /// + /// /// /// public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) @@ -74,6 +74,7 @@ for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; double length = line.GetSpaceLength(true, 6378137); totalLength += length; ncount += 1; @@ -114,7 +115,7 @@ for (int i = 0; i < feats.Length; i++) { double radius = feats[i].GetFieldAsDouble(fieldName); - if (radius >= min && radius <= max) + if (radius >= minValue && radius <= maxValue) { result.Add(feats[i]); } @@ -148,23 +149,22 @@ lstDiameter.Sort(); if (lstDiameter.Count > 0) { - for (int m = 0; m < lstDiameter.Count; m++) + foreach (float diameter in lstDiameter) { double totalLength = 0.00; int ncount = 0; for (int j = 0; j < feats.Length; j++) { - if (feats[j].GetFieldAsFloat("管径_毫米") == lstDiameter[m]) - { - GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } + if (Math.Abs(feats[j].GetFieldAsFloat("管径_毫米") - diameter) > 0.00001) continue; + GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = lstDiameter[m].ToString(); + featuresClass.groupFieldValue = diameter.ToString(); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -191,13 +191,13 @@ //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); - for (int j = 0; j < accessStrs.Length; j++) + foreach (string accssname in accessStrs) { - GSOFeatures feats = null; - int ncount = 0; + GSOFeatures feats; + int ncount; if (polygon == null) { - feats = flayer.GetFeatureByFieldValue("附属物名称", accessStrs[j], true); + feats = flayer.GetFeatureByFieldValue("附属物名称", accssname, true); ncount = feats.Length; } else @@ -207,14 +207,14 @@ //过滤 for (int n = 0; n < feats.Length; n++) { - if (feats[n].GetFieldAsString("附属物名称").Contains(accessStrs[j])) newfeats.Add(feats[n]); + if (feats[n].GetFieldAsString("附属物名称").Contains(accssname)) newfeats.Add(feats[n]); } ncount = newfeats.Length; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); - featuresClass.layerName = accessStrs[j]; + featuresClass.layerName = accssname; featuresClass.ncount = ncount; result.Add(featuresClass); @@ -303,6 +303,26 @@ if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); - } + } + + + /// + /// 获取globeControl上选中的管线,如果返回空则没有选中的管线 + /// + /// 地球引擎 + /// 返回一根线 + public static GSOFeature GetSelectedPipeline(GSOGlobeControl globeControl) + { + GSOFeature resFeature; + if (globeControl.Globe.SelObjectCount < 1) return null; + GSOLayer resLayer; + globeControl.Globe.GetSelectObject(0, out resFeature, out resLayer); + if (resFeature == null) return null; + + GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; + if (line1 == null) return null; + GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; + return pipeStyle1 == null ? null : resFeature; + } } } diff --git a/FrmCompareFeature.cs b/FrmCompareFeature.cs index a05e8e7..ac622c4 100644 --- a/FrmCompareFeature.cs +++ b/FrmCompareFeature.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Data; using System.Drawing; using System.Windows.Forms; @@ -11,26 +10,16 @@ { public partial class FrmCompareFeature : Office2007Form { - GSOFeature srcFeature; - GSOFeature dscFeature; - GSOGlobeControl globeControl1; - GSOGlobeControl globeControl2; - bool isSamePolyline; - - GSOLayer layerTemp; - GSOLayer layerTemp2; - GSOFeature new_feat; + private GSOFeature srcFeature, dscFeature; + private GSOGlobeControl globeControl1, globeControl2; GSOGeoPolygon3D resPolygon; - static FrmCompareFeature frm; - public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2, int width) + public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, int width) { if (frm == null) { - frm = new FrmCompareFeature(_globeControl1, _globeControl2, _layerTemp, _layerTemp2); - + frm = new FrmCompareFeature(_globeControl1, _globeControl2); frm.Location = new Point((width - frm.Width)/2, 50); frm.Show(_globeControl1.Parent); } @@ -41,8 +30,7 @@ } } - public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2) + public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2) { globeControl1 = _globeControl1; globeControl2 = _globeControl2; @@ -50,99 +38,35 @@ globeControl1.Globe.Action = EnumAction3D.SelectObject; globeControl2.Globe.Action = EnumAction3D.SelectObject; - layerTemp = _layerTemp; - layerTemp2 = _layerTemp2; globeControl1.MouseClick += globeControl1_MouseClick; globeControl2.MouseClick += globeControl2_MouseClick; } + private void invalParam() + { + if (srcFeature == null || dscFeature == null) + { + MessageBox.Show("请选择要对比的管段!", "提示"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) + { + MessageBox.Show("请选择同种类型图层!"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type || + srcFeature.Geometry.Type != EnumGeometryType.GeoPolyline3D) + return; + } + private void buttonAnalysis_Click(object sender, EventArgs e) { + invalParam(); + dataGridViewX1.DataSource = null; - - double bufferWidth = Convert.ToDouble(textBox1.Text); - - if (srcFeature == null || dscFeature == null) - MessageBox.Show("请选择要对比的管段!", "提示"); - else - { - if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) - MessageBox.Show("请选择同种类型图层!"); - else if (srcFeature.Geometry.Type == dscFeature.Geometry.Type && - srcFeature.Geometry.Type == EnumGeometryType.GeoPolyline3D) - { - lineLayerCompare(srcFeature, dscFeature, bufferWidth); - if (!isSamePolyline) - MessageBox.Show("实测管段与施工管段非同一条管段,请选择同一管段进行比较!", "提示"); - else - { - lineFeatureCompare(srcFeature, dscFeature); - globeControl1.Globe.Action = EnumAction3D.ActionNull; - globeControl2.Globe.Action = EnumAction3D.ActionNull; - } - } - else - MessageBox.Show("无法处理该类型图层!"); - } + lineFeatureCompare(srcFeature, dscFeature); } - - /// - /// 在容差范围内判断是否同一根管段 - /// - /// - /// - /// - /// - private bool lineLayerCompare(GSOFeature srcFeature, GSOFeature dscFeature, double bufferWidth) - { - isSamePolyline = false; - - GSOGeoPolyline3D srcLine = srcFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D srcBufferPolygon = srcLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer dsc = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); - - if (srcBufferPolygon != null) - { - GSOFeatures featuresInSrcLayer = dsc.FindFeaturesInPolygon(srcBufferPolygon, true); - - if (featuresInSrcLayer != null && featuresInSrcLayer.Length > 0) - { - for (int i = 0; i < featuresInSrcLayer.Length; i++) - { - if (featuresInSrcLayer[i].Name == dscFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D dscBufferPolygon = dscLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer src = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); - - if (dscBufferPolygon != null) - { - GSOFeatures featuresInDscLayer = src.FindFeaturesInPolygon(dscBufferPolygon, true); - - if (featuresInDscLayer != null && featuresInDscLayer.Length > 0) - { - for (int i = 0; i < featuresInDscLayer.Length; i++) - { - if (featuresInDscLayer[i].Name == srcFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - return isSamePolyline; - } - /// /// 分析两根管段的具体差异 /// @@ -156,8 +80,10 @@ GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; double dscLineLength = dscLine.GetSpaceLength(false, 6378137); - double horizonDistance = calculateDistance(srcLine, dscLine,false); - double verticalDistance = calculateDistance(srcLine, dscLine,true); + double horizonDistance, verticalDistance; + + ClassDoubleScreenCompare.CalculateDistance(srcLine, dscLine, out horizonDistance, + out verticalDistance,globeControl1,globeControl2); DataTable dt = new DataTable(); dt.Columns.Add("数据名称"); @@ -189,6 +115,98 @@ dt.Rows.Add(dscRow); dataGridViewX1.DataSource = dt; + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) + { + globeControl1.Globe.MemoryLayer.RemoveAllFeature(); + globeControl2.Globe.MemoryLayer.RemoveAllFeature(); + + GSOFeature new_feat = new GSOFeature(); + resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); + resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; + new_feat.Geometry = resPolygon; + + globeControl1.Globe.MemoryLayer.AddFeature(new_feat); + globeControl2.Globe.MemoryLayer.AddFeature(new_feat); + + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + public static void clearFeatureHighLight(GSOGlobeControl glb) + { + for (int i = 0; i < glb.Globe.Layers.Count; i++) + { + GSOLayer layer = glb.Globe.Layers[i]; + if (!(layer is GSOFeatureLayer)) continue; + GSOFeatures feats = layer.GetAllFeatures(); + for (int j = 0; j < feats.Length; j++) + { + feats[j].HighLight = false; + } + } + } + + void globeControl1_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl1.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl1.Globe.Action != EnumAction3D.SelectObject || + globeControl1.Globe.SelectedObject == null) + return; + GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + srcFeature = globeControl1.Globe.SelectedObject; + dscFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(srcFeature, + globeControl1,globeControl2,bufferWidth,resPolygon); + + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } + + void globeControl2_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl2.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl2.Globe.Action != EnumAction3D.SelectObject || + globeControl2.Globe.SelectedObject == null) + return; + + GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + dscFeature = globeControl2.Globe.SelectedObject; + srcFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(dscFeature, + globeControl1, globeControl2, bufferWidth, resPolygon); + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } private void FrmCompareFeature_FormClosing(object sender, FormClosingEventArgs e) @@ -198,322 +216,5 @@ frm = null; } - private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) - { - new_feat = new GSOFeature(); - resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); - resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; - new_feat.Geometry = resPolygon; - - layerTemp.AddFeature(new_feat); - layerTemp2.AddFeature(new_feat); - globeControl1.Refresh(); - globeControl2.Refresh(); - } - - private GSOLayer getSameLayer(GSOFeature feature) - { - GSOLayer layer = null; - if (!feature.Dataset.Caption.StartsWith("施工")) - { - layer = feature.Dataset.Caption == "供电管线" - ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") - : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); - } - else - { - layer = feature.Dataset.Caption == "施工电力管线" - ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") - : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); - } - - return layer; - } - - /// - /// 地球1中点击地球2中同步添加缓冲区 - /// - /// - /// - void globeControl1_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl1.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl1.Globe.Action == EnumAction3D.SelectObject && - globeControl1.Globe.SelectedObject != null) - { - GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - addPologyToGlobeControl(line, bufferWidth); - } - - srcFeature = globeControl1.Globe.SelectedObject; - GSOLayer layers = getSameLayer(srcFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = srcFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(srcFeature, features[i], Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - listFeatures.Add(features[i]); - } - calculate(out maxLength, out dscFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - /// - /// 地球2中点击地球1中同步添加缓冲区 - /// - /// - /// - void globeControl2_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl2.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl2.Globe.Action != EnumAction3D.SelectObject || - globeControl2.Globe.SelectedObject == null) - return; - else - { - GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - - addPologyToGlobeControl(line, bufferWidth); - } - - dscFeature = globeControl2.Globe.SelectedObject; - //双屏同时选中同一管段 - GSOLayer layers = getSameLayer(dscFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = dscFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(features[i], dscFeature, Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - { - listFeatures.Add(features[i]); - } - } - calculate(out maxLength, out srcFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - private void calculate(out double maxLength, out GSOFeature feature, GSOFeatures listFeatures, - GSOGeoPolyline3D scLine) - { - maxLength = 0; - feature=new GSOFeature(); - if (listFeatures.Length == 0) - feature = null; - else - { - if (listFeatures.Length == 1) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - } - else - { - for (int m = 0; m < listFeatures.Length; m++) - { - GSOGeoPolyline3D tempSGLine = listFeatures[m].Geometry as GSOGeoPolyline3D; - - double tempLength = tempSGLine.GetSpaceLength(false, 6378137); - double lengthAbs = Math.Abs(tempLength - scLine.GetSpaceLength(false, 6378137)); - if (m == 0) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - maxLength = lengthAbs; - } - else if (lengthAbs < maxLength) - { - feature = listFeatures[m]; - listFeatures[m].HighLight = true; - maxLength = lengthAbs; - } - } - } - } - } - - /// - /// 计算距离 - /// - /// - /// - /// - double calculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2,bool isVertical) - { - GSOPoint3d pntIntersect1 = new GSOPoint3d(); - GSOPoint3d pntIntersect2 = new GSOPoint3d(); - GSOPoint3d pntProIntersect1 = new GSOPoint3d(); - GSOPoint3d pntProIntersect2 = new GSOPoint3d(); - double dDist = 0; - if (isVertical) - { - dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "垂直"); - } - else - { - dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "水平"); - } - - return dDist; - } - - /// - /// 清除所有高亮Feature - /// - /// - private void clearFeatureHighLight(GSOGlobeControl glb1,GSOGlobeControl glb2) - { - layerTemp.RemoveAllFeature(); - layerTemp2.RemoveAllFeature(); - //清除gbl1中高亮 - for (int i = 0; i < glb1.Globe.Layers.Count; i++) - { - GSOLayer layer = glb1.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - //清除gbl2中高亮 - for (int i = 0; i < glb2.Globe.Layers.Count; i++) - { - GSOLayer layer = glb2.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - } - - /// - /// 添加标注 - /// - /// - /// - /// - /// - /// - /// - private GSOPoint3d LabelDistance(GSOLayer markerLayer, GSOLayer markerLayer2, - GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, bool markerVisible,string label) - { - if (pntIntersect1 == null || pntIntersect2 == null) - return new GSOPoint3d(); - GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); - GSOPoint3ds point3ds = new GSOPoint3ds(); - point3ds.Add(pntIntersect1); - point3ds.Add(pntIntersect2); - disline.AddPart(point3ds); - - GSOGeoMarker dismarker = new GSOGeoMarker(); - GSOFeature marker = null; - GSOFeature line = null; - createLineStyle(out marker, out line,disline, pntIntersect1, pntIntersect2, distance, label, dismarker); - - line.Visible = marker.Visible = markerVisible; - markerLayer.AddFeature(line); - markerLayer.AddFeature(marker); - - markerLayer2.AddFeature(line); - markerLayer2.AddFeature(marker); - - return dismarker.Position; - } - /// - /// 控制标注和字体的颜色 - /// - /// - /// - /// - /// - /// - /// - /// - /// - private void createLineStyle(out GSOFeature marker,out GSOFeature line,GSOGeoPolyline3D disline, - GSOPoint3d pntIntersect1,GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) - { - GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 - style.LineColor = Color.Red; - style.LineWidth = 5; //设置线的宽度为5 - style.VertexVisible = true; //显示线的节点 - disline.Style = style; //把风格添加到线上 - disline.AltitudeMode = EnumAltitudeMode.Absolute; - line=new GSOFeature(); - line.Geometry = disline; - - dismarker.X = pntIntersect1.X; - dismarker.Y = pntIntersect1.Y; - dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; - dismarker.Text = label + distance.ToString("0.00") + "米"; - dismarker.AltitudeMode = EnumAltitudeMode.Absolute; - - GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); - GSOTextStyle styleText = new GSOTextStyle(); - styleText.IsSizeFixed = true; - styleText.ForeColor = Color.Red; - styleText.FontSize = 20; - styleMarker.TextStyle = styleText; - dismarker.Style = styleMarker; - - marker=new GSOFeature(); - marker.Geometry = dismarker; - } - } } diff --git a/FrmHotFuncStat.cs b/FrmHotFuncStat.cs index 84131ef..f313b20 100644 --- a/FrmHotFuncStat.cs +++ b/FrmHotFuncStat.cs @@ -58,14 +58,11 @@ DataTable table = OledbHelper.QueryTable(sql); - if (table != null) + if (table == null) return; + for (int i = 0; i < table.Rows.Count; i++) { - for (int i = 0; i < table.Rows.Count; i++) - { - userLists.Items.Add(table.Rows[i][0].ToString()); - } + userLists.Items.Add(table.Rows[i][0].ToString()); } - } //统计结果 private void statBtn_Click(object sender, EventArgs e) diff --git a/FrmLayerControl.cs b/FrmLayerControl.cs index 8586041..8fbce97 100644 --- a/FrmLayerControl.cs +++ b/FrmLayerControl.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Windows.Forms; using DevComponents.DotNetBar; using GeoScene.Data; @@ -13,10 +14,10 @@ GSOGlobeControl globeControl1; GSOGlobeControl globeControl2; - TreeNode terrainManagerNode = null; - TreeNode layerManagerNode = null; - TreeNode terrainManagerNode1 = null; - TreeNode layerManagerNode1 = null; +// TreeNode terrainManagerNode = null; +// TreeNode layerManagerNode = null; +// TreeNode terrainManagerNode1 = null; +// TreeNode layerManagerNode1 = null; public FrmLayerControl(GSOGlobeControl ctl1,GSOGlobeControl ctl2) { @@ -25,14 +26,14 @@ globeControl2 = ctl2; } - private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) - { - treeNode=new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - } +// private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) +// { +// treeNode=new TreeNode(); +// treeNode.ImageIndex = 0; +// treeNode.SelectedImageIndex = 0; +// treeNode.Checked = false; +// treeNode.Text = strTreeNodeText; +// } // private void initTreeView() // { @@ -51,234 +52,258 @@ // layerTree2.Nodes.Add(terrainManagerNode); // } - #region wxl重构树形结构代码 + + - private TreeNode treeNode(string strTreeNodeText) - { - TreeNode treeNode = new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - return treeNode; - } -// private void appendToParent(TreeNodeCollection treeNodeCollection, ) - #endregion - private void initTreeView() +// private void initNode(string nodeName) +// { +// TreeNode nodeGroupElse1 = new TreeNode(); +// nodeGroupElse1.Text = nodeName; +// layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); +// +// TreeNode nodeGroupElse = new TreeNode(); +// nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; +// layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); +// } + +// private void initTreeNode(XmlNodeList Params) +// { +// foreach (XmlNode paramsNode in Params) //layers +// { +// foreach (XmlNode layerNode in paramsNode) //layer +// { +// initNode(layerNode.Attributes["label"].Value); +// } +// } +// +// initNode("基础图层"); +// initNode("其他"); +// } + +// private void FrmLayerControl_Load(object sender, EventArgs e) +// { +// +// initTreeView(); +// try +// { +// XmlDocument doc = new XmlDocument(); +// doc.Load(Application.StartupPath + "\\双屏设置.xml"); +// XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// +// initTreeNode(Params); +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// +// RefreshLayerAndTerrainTree(); +// } + private void FrmLayerControl_Load(object sender, EventArgs e) { layerTree1.Nodes.Clear(); layerTree2.Nodes.Clear(); - - //加载layertree2 - initLayerTree(out layerManagerNode1, "图层管理"); - layerTree1.Nodes.Add(layerManagerNode1); - initLayerTree(out terrainManagerNode1, "地形管理"); - layerTree1.Nodes.Add(terrainManagerNode1); - - initLayerTree(out layerManagerNode, "图层管理"); - layerTree2.Nodes.Add(layerManagerNode); - initLayerTree(out terrainManagerNode, "地形管理"); - layerTree2.Nodes.Add(terrainManagerNode); + TreeUtils.InitLayerTree(globeControl1, layerTree1, "实测数据"); + TreeUtils.InitLayerTree(globeControl2, layerTree2, "施工数据"); } - private void initNode(string nodeName) - { - TreeNode nodeGroupElse1 = new TreeNode(); - nodeGroupElse1.Text = nodeName; - layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); + #region wxl重构树形结构代码 - TreeNode nodeGroupElse = new TreeNode(); - nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; - layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); - } + /// + /// 构造tree,最多解析三层,可放在工具类中 - private void initTreeNode(XmlNodeList Params) - { - foreach (XmlNode paramsNode in Params) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - initNode(layerNode.Attributes["label"].Value); - } - } + /// 所属地球 + /// 要加载的树 + /// 数据来源,实测数据/施工数据/规划数据/红线数据,为空则展示全部 +// private void initTree(GSOGlobeControl gsoGlobeControl,TreeView treeView, string viewDatasrc) +// { +// treeView.Nodes.Clear(); +// LayerConfig layerConfig = Utility.layerConfig; +// List datasrcs = layerConfig.datasrcs; +// foreach (DataSrc datasrc in datasrcs) +// { +// if (viewDatasrc != null && !viewDatasrc.Trim().Equals("") && !datasrc.label.Equals(viewDatasrc)) continue; +// TreeNode rootNode = treeView.Nodes.Add(datasrc.label); +// List layerTypes = datasrc.layertypes; +// foreach (LayerType layerType in layerTypes) +// { +// TreeNode secNode = rootNode.Nodes.Add(layerType.label); +// List layers = layerType.layers; +// foreach (Layer layer in layers) +// { +// GSOLayer gsoLayer = gsoGlobeControl.Globe.Layers.GetLayerByCaption(layer.layer); +// if (gsoLayer == null) continue;//将不存在的去除 +// TreeNode node = new TreeNode(); +// node.Tag = gsoLayer; +// node.Text = layer.label; +// node.Checked = gsoLayer.Visible; +// if (gsoLayer.Visible) +// { +// secNode.Checked = true; +// rootNode.Checked = true; +// } +// secNode.Nodes.Add(node); +// } +// } +// } +// } - initNode("基础图层"); - initNode("其他"); - } + #endregion - private void FrmLayerControl_Load(object sender, EventArgs e) - { - initTreeView(); - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(Application.StartupPath + "\\双屏设置.xml"); - XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, +// TreeView layerTree) +// { +// try +// { +// for (int i = 0; i < nLayerCount; i++) +// { +// GSOLayer layer = globcontrol.Globe.Layers[i]; +// if (layer == null) continue; +// string layerName = layer.Name; +// TreeNode node = new TreeNode(); +// node.Tag = layer; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = layer.Caption; +// node.Checked = layer.Visible; +// +// bool isContains = false; +// for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) +// { +// if (!layerName.Contains("fttp:")) +// { +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || +// layerName.Contains("施工") || +// layerName.Contains("规划")) continue; +// break; +// case "layerTree2": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[j].Nodes.Add(node); +// isContains = true; +// break; +// } +// else +// { +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); +// isContains = true; +// break; +// } +// } +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || +// layerName.Contains("标注") || +// isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || +// layerName.Contains("景观") || layerName.Contains("红线")) +// continue; +// break; +// case "layerTree2": +// if (isContains != false || layerName.Contains("tempLgdData2")) +// continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); +// } +// +// for (int i = 0; i < nTerrainCount; i++) +// { +// GSOTerrain terrain = globcontrol.Globe.Terrains[i]; +// if (terrain == null) continue; +// TreeNode node = new TreeNode(); +// node.Tag = terrain; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = terrain.Caption; +// node.Checked = terrain.Visible; +// switch (layerTree.Name) +// { +// case "layerTree1": +// terrainManagerNode1.Nodes.Add(node); +// break; +// case "layerTree2": +// terrainManagerNode.Nodes.Add(node); +// break; +// default: +// break; +// } +// } +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// } - initTreeNode(Params); - } - catch (Exception ex) - { - LogError.PublishError(ex); - } +// private void initTreeNodeCheckedStatus(TreeView layerTreeView) +// { +// //节点选中状态控制 +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// if (node.Checked != true) continue; +// layerTreeView.Nodes[0].Checked = true; +// break; +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOTerrain layer = childNode.Tag as GSOTerrain; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// } - RefreshLayerAndTerrainTree(); - } - - private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, - TreeView layerTree) - { - try - { - for (int i = 0; i < nLayerCount; i++) - { - GSOLayer layer = globcontrol.Globe.Layers[i]; - if (layer == null) continue; - string layerName = layer.Name; - TreeNode node = new TreeNode(); - node.Tag = layer; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = layer.Caption; - node.Checked = layer.Visible; - - bool isContains = false; - for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) - { - if (!layerName.Contains("fttp:")) - { - switch (layerTree.Name) - { - case "layerTree1": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || - layerName.Contains("施工") || - layerName.Contains("规划")) continue; - break; - case "layerTree2": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[j].Nodes.Add(node); - isContains = true; - break; - } - else - { - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); - isContains = true; - break; - } - } - switch (layerTree.Name) - { - case "layerTree1": - if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || - layerName.Contains("标注") || - isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || - layerName.Contains("景观") || layerName.Contains("红线")) - continue; - break; - case "layerTree2": - if (isContains != false || layerName.Contains("tempLgdData2")) - continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); - } - - for (int i = 0; i < nTerrainCount; i++) - { - GSOTerrain terrain = globcontrol.Globe.Terrains[i]; - if (terrain == null) continue; - TreeNode node = new TreeNode(); - node.Tag = terrain; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = terrain.Caption; - node.Checked = terrain.Visible; - switch (layerTree.Name) - { - case "layerTree1": - terrainManagerNode1.Nodes.Add(node); - break; - case "layerTree2": - terrainManagerNode.Nodes.Add(node); - break; - default: - break; - } - } - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - - private void initTreeNodeCheckedStatus(TreeView layerTreeView) - { - //节点选中状态控制 - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - if (node.Checked != true) continue; - layerTreeView.Nodes[0].Checked = true; - break; - } - - foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOTerrain layer = childNode.Tag as GSOTerrain; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - } - - void exPandTreeNode() - { - layerManagerNode1.Expand(); - terrainManagerNode1.Expand(); - layerManagerNode.Expand(); - terrainManagerNode.Expand(); - } +// void exPandTreeNode() +// { +// layerManagerNode1.Expand(); +// terrainManagerNode1.Expand(); +// layerManagerNode.Expand(); +// terrainManagerNode.Expand(); +// } /// /// 刷新节点树 /// - private void RefreshLayerAndTerrainTree() - { - int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 - int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 - addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); - initTreeNodeCheckedStatus(layerTree1); - - int nLayerCount = globeControl2.Globe.Layers.Count; - int nTerrainCount = globeControl2.Globe.Terrains.Count; - addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); - initTreeNodeCheckedStatus(layerTree2); - - // 展开 - exPandTreeNode(); - } +// private void RefreshLayerAndTerrainTree() +// { +// int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 +// int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 +// addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); +// initTreeNodeCheckedStatus(layerTree1); +// +// int nLayerCount = globeControl2.Globe.Layers.Count; +// int nTerrainCount = globeControl2.Globe.Terrains.Count; +// addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); +// initTreeNodeCheckedStatus(layerTree2); +// +// // 展开 +// exPandTreeNode(); +// } /// /// 节点树复选框选中状态改变事件处理 @@ -289,144 +314,132 @@ { if (e.Action != TreeViewAction.Unknown) { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } + TreeUtils.TreeNodeCheckedChange(globeControl2,e.Node); + } + } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree2(e.Node, e.Node.Checked); + private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) + { + if (e.Action != TreeViewAction.Unknown) + { + TreeUtils.TreeNodeCheckedChange(globeControl1, e.Node); } } + + +// private void layerTree2_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree2(e.Node, e.Node.Checked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree1(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree1(childNode, isChecked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree2(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree2(childNode, isChecked); +// } +// } /// /// 节点树选中状态改变事件 /// /// /// - private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) - { - if (e.Action != TreeViewAction.Unknown) - { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } +// private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree1(e.Node, e.Node.Checked); +// } +// } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree1(e.Node, e.Node.Checked); - } - } - /// - /// 改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 - /// - /// - private void CheckParentNode(TreeNode curNode) - { - bool bChecked = false; - - if (curNode.Parent != null) - { - foreach (TreeNode node in curNode.Parent.Nodes) - { - if (node.Checked) - { - bChecked = true; - break; - } - } - if (bChecked) - { - curNode.Parent.Checked = true; - CheckParentNode(curNode.Parent); - } - else - { - curNode.Parent.Checked = false; - CheckParentNode(curNode.Parent); - } - } - } } } diff --git a/FrmMetadata.cs b/FrmMetadata.cs index 4d0d5cb..bb7c46c 100644 --- a/FrmMetadata.cs +++ b/FrmMetadata.cs @@ -12,12 +12,8 @@ { public partial class FrmMetadata : Office2007Form { - List pipelineLayerNames = new List();//线图层名称 - List workwellLayerNames = new List();//工井图层名称 - List valueLayerNames = new List();//阀门图层名称 - List instrumenLayerNames = new List();//附属物图层名称 - string filename = Utility.filename; - DataSet dataSet = new DataSet(); + + bool selectedLayer; public FrmMetadata() @@ -25,308 +21,33 @@ InitializeComponent(); loadTreeView(layerTree); } - private void FrmMetadata_Load(object sender, EventArgs e) - { - //this.ntLblC.Text = "nn"; - // loadTreeView(layerTree); - } private void loadTreeView(TreeView tv)//构建图层树 { - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - //tv.ShowPlusMinus = false; - - //tv.Nodes.Clear(); - tv.ShowLines = true; - // tv.ImageList = imageList1; - tv.CheckBoxes = false; - #region 三级 - - //foreach (XmlNode paramsNode in Params1) //layers - //{ - // foreach (XmlNode layerNode in paramsNode) //layer - // { - // TreeNode nodelayer = new TreeNode(); - // string layerName = layerNode.Attributes["label"].Value; - // nodelayer.Text = layerName; - - // if (layerNode.HasChildNodes != false) - // { - // tv.Nodes.Add(nodelayer); - // foreach (XmlNode layerchildNode in layerNode) //layerchild - // { - // if (layerchildNode.Name == "layerchild") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["type"].Value; - // string layerchildName = layerchildNode.Attributes["label"].Value; - // if (layerType == "locaserver") - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - - // } - // else - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // if (layerchildNode.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = boollayer; - // nodelayer.Nodes.Add(nodelayerchild); - // } - // } - // else if (layerchildNode.Name == "layertype") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["label"].Value; - // nodelayerchild.Text = layerType; - // nodelayerchild.Tag = layerType; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - // if (layerchildNode.HasChildNodes == true) - // { - // foreach (XmlNode childNodeLayer in layerchildNode) - // { - // TreeNode nodelayerchild1 = new TreeNode(); - // string layerName1 = childNodeLayer.Attributes["layer"].Value; - // string layerchildName = childNodeLayer.Attributes["label"].Value; - // string layerType1 = childNodeLayer.Attributes["type"].Value; - // if (childNodeLayer.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild1.Text = layerchildName; - // nodelayerchild1.Tag = layerType1 + "|" + layerName1; - // nodelayerchild1.Checked = boollayer; - // nodelayerchild.Nodes.Add(nodelayerchild1); - // } - // } - // } - - // } - // } - // else - // { - // tv.Nodes.Add(nodelayer); - // } - // } - - //} - - #endregion - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - TreeNode nodelayer = new TreeNode(); - string layerName = layerNode.Attributes["label"].Value; - nodelayer.Text = layerName; - - if (layerNode.HasChildNodes) - { - tv.Nodes.Add(nodelayer); - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - if (layerchildNode.Name == "layerchild") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["type"].Value; - string layerchildName = layerchildNode.Attributes["label"].Value; - if (layerType == "locaserver") - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - - } - else - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - if (layerchildNode.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - //nodelayerchild.Checked = boollayer; - nodelayer.Nodes.Add(nodelayerchild); - } - } - else if (layerchildNode.Name == "layertype") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["label"].Value; - nodelayerchild.Text = layerType; - nodelayerchild.Tag = layerType; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode) - { - if (childNodeLayer.HasChildNodes) - { - TreeNode nodelayerchild2 = new TreeNode(); - string layer = childNodeLayer.Attributes["label"].Value; - nodelayerchild2.Text = layer; - nodelayerchild2.Tag = layer; - nodelayerchild2.Checked = true; - nodelayerchild.Nodes.Add(nodelayerchild2); - foreach (XmlNode n in childNodeLayer) - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = n.Attributes["layer"].Value; - string layerchildName = n.Attributes["label"].Value; - string layerType1 = n.Attributes["type"].Value; - if (n.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (n.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (n.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (n.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild2.Nodes.Add(nodelayerchild1); - - } - } - else - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = childNodeLayer.Attributes["layer"].Value; - string layerchildName = childNodeLayer.Attributes["label"].Value; - string layerType1 = childNodeLayer.Attributes["type"].Value; - if (childNodeLayer.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild.Nodes.Add(nodelayerchild1); - - } - } - } - } - - } - } - else - { - tv.Nodes.Add(nodelayer); - } - } - - } - if (tv.Nodes.Count > 0) - { - //tv.Nodes[0].Expand(); - if (tv.Nodes.Count > 0) - { - foreach (TreeNode node in tv.Nodes) - { - //node.Expand(); - } - } - } - //tv.ExpandAll(); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } + //tv.ShowPlusMinus = false; + //tv.Nodes.Clear(); + // tv.ImageList = imageList1; + tv.ShowLines = true; + tv.CheckBoxes = false; + TreeUtils.InitLayerTree(null, tv, null); } - + /// + /// 点击父节点则展开,点击子节点则编辑元数据 + /// + /// + /// private void layerTree_AfterSelect(object sender, TreeViewEventArgs e) { - String layername = layerTree.SelectedNode.Text; - if (layerTree.SelectedNode.GetNodeCount(true) == 0) { - searchLayerInfo(layername); - - selectedLayer = true; - clearBtn.Hide(); - completeBtn.Hide(); + String layername = e.Node.Text; + if (e.Node.GetNodeCount(true) != 0) + { //点击父节点,则展开 + e.Node.Expand(); + return; } + searchLayerInfo(layername); + selectedLayer = true; + clearBtn.Hide(); + completeBtn.Hide(); } //查询元数据 private void searchLayerInfo(String layername) { @@ -335,8 +56,6 @@ + " casic_metadatalayer where casic_metadatacontent.\"LAYERID\" = casic_metadatalayer.\"LAYERID\" and casic_metadatalayer.\"LAYERNAME\"='" + layername+"'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; - if (table != null && table.Rows.Count > 0) { groupBox1.Text = layername; @@ -400,8 +119,6 @@ //判断此时layerTree有没有选中的图层 if (selectedLayer)//有选中的图层,获得其名 { - string name = layerTree.SelectedNode.Text; - OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "支持格式(*.xml)|*.xml|XML数据(*.xml)|"; dlg.Multiselect = true; @@ -419,31 +136,24 @@ //读入元数据 private void AddXMLMDdata(string strFilePath) { - try - { - dataSet.Clear(); //清空数据集中的内容 - dataSet.ReadXml(strFilePath); //读取XML文件中的内容 + DataSet dataSet = new DataSet(); + dataSet.ReadXml(strFilePath); //读取XML文件中的内容 - //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); - string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); - string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); - string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); - string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); + //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); + string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); + string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); + string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); + string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); - //this.titleLbl.Text = attrtitle; - consLblC.Text = attrcons; - descLblC.Text = attrdesc; - authorLblC.Text = attrauthor; - ntLblC.Text = attrnt; - //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); + //this.titleLbl.Text = attrtitle; + consLblC.Text = attrcons; + descLblC.Text = attrdesc; + authorLblC.Text = attrauthor; + ntLblC.Text = attrnt; + //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); - completeBtn.Visible = true; - //this.clearBtn.Visible = true; - } - catch (Exception e) - { - - } + completeBtn.Visible = true; + //this.clearBtn.Visible = true; } //新建/编辑元数据 private void editBtn_Click(object sender, EventArgs e) @@ -509,11 +219,7 @@ string sql = "select \"LAYERID\" from casic_metadatalayer where \"LAYERNAME\" = '" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - if (table != null && table.Rows.Count > 0)//已有该图层,属于编辑 - { - return false; - } - return true; + return table == null || table.Rows.Count <= 0; } //保存元数据 private void saveData(String method,String layername,String cons,String desc,String author,String nt) { @@ -539,17 +245,16 @@ string insertSQL = "insert into casic_metadatalayer values ('" + layerid + "','" + layername + "')";//+ string insertSQL2 = "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','" + desc + "','" + author + "','" + nt + "')"; // "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','"+desc+"','"+author+"','"+nt+"')"; - if ((OledbHelper.sqlExecuteNonQuery(insertSQL) > 0)&&(OledbHelper.sqlExecuteNonQuery(insertSQL2)>0)) - { - MessageBox.Show("保存元数据成功!"); + if ((OledbHelper.sqlExecuteNonQuery(insertSQL) <= 0) || + (OledbHelper.sqlExecuteNonQuery(insertSQL2) <= 0)) return; + MessageBox.Show("保存元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } else { //更新 string layeridSQL = "select layerid from casic_metadatalayer where LAYERNAME='"+layername+"'"; @@ -561,16 +266,14 @@ + "',casic_metadatacontent.MDAUTHOR ='" + author.Trim() + "',casic_metadatacontent.NT ='" + nt.Trim() + "' where casic_metadatacontent.LAYERID='" + layerid + "'"; - if (OledbHelper.sqlExecuteNonQuery(updateSQL) > 0) - { - MessageBox.Show("更新元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + if (OledbHelper.sqlExecuteNonQuery(updateSQL) <= 0) return; + MessageBox.Show("更新元数据成功!"); + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } } diff --git a/FrmMetadataStat.cs b/FrmMetadataStat.cs index cb19f84..c3c1359 100644 --- a/FrmMetadataStat.cs +++ b/FrmMetadataStat.cs @@ -2,16 +2,16 @@ using System.Collections; using System.Collections.Generic; using System.Data; +using System.Linq; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; -using System.Xml; using DevComponents.DotNetBar; namespace Cyberpipe { public partial class FrmMetadataStat : Office2007Form { - Dictionary dic = new Dictionary(); + public FrmMetadataStat() { InitializeComponent(); @@ -22,7 +22,7 @@ string sql = "select LAYERNAME from casic_metadataLayer where LAYERNAME like '%" + keywordsTxt.Text.Trim() + "%'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; + int num = 0; resultList.Clear(); consLblC.Text = ""; @@ -32,6 +32,7 @@ if (table != null && table.Rows.Count > 0) { + num = table.Rows.Count; for (int i = 0; i < num;i++ ) { resultList.Items.Add(table.Rows[i][0].ToString()); @@ -56,7 +57,8 @@ int metadataLayernum = statistMDLayer(); int nomdLayernum = layernum - metadataLayernum; //MessageBox.Show("共有多少层?" + layernum.ToString()+"=="+metadataLayernum.ToString()+"=="+nomdLayernum.ToString()); - dic.Clear(); +// dic.Clear(); + Dictionary dic = new Dictionary(); dic.Add("已建",metadataLayernum); dic.Add("未建", nomdLayernum); @@ -74,11 +76,9 @@ foreach (string key in dic.Keys) { - if (dic[key] != 0) - { - xlist.Add(key); - ylist.Add(dic[key]); - } + if (dic[key] == 0) continue; + xlist.Add(key); + ylist.Add(dic[key]); } chart1.Series[0].Points.DataBindXY(xlist, ylist); @@ -89,73 +89,15 @@ string sql = "select * from casic_metadataLayer"; DataTable table = OledbHelper.QueryTable(sql); - mdlayernum = table.Rows.Count; + if(table!=null)mdlayernum = table.Rows.Count; return mdlayernum; } //统计有多少个图层 - private int statistLayer() { - int layernum = 0; - - string filename = Utility.filename; - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - //MessageBox.Show(layerNode.Attributes["label"].Value); - - if (layerNode.HasChildNodes) - { - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - //MessageBox.Show(layerchildNode.Attributes["label"].Value); - if (layerchildNode.Name == "layerchild") - { - layernum++; - } - else if (layerchildNode.Name == "layertype") - { - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode)//layertype下的layerchild - { - //MessageBox.Show(childNodeLayer.Attributes["label"].Value); - if (childNodeLayer.HasChildNodes) - { - - foreach (XmlNode n in childNodeLayer) - { - layernum++; - } - } - else - { - - layernum++; - } - } - } - } - - } - } - } - - } - - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - return layernum; + private int statistLayer() + { + List datasrcs = Utility.layerConfig.datasrcs; + return datasrcs.SelectMany(datasrc => datasrc.layertypes).Sum(layerType => layerType.layers.Count); } //选择list @@ -174,7 +116,6 @@ + "join casic_metadatalayer on casic_metadatalayer.LAYERID = casic_metadatacontent.LAYERID " + "where casic_metadatalayer.LAYERNAME='" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; //MessageBox.Show(num.ToString()); if (table != null && table.Rows.Count > 0) { @@ -192,10 +133,5 @@ ntLblC.Text = ""; } } - - private void buttonX1_Click(object sender, EventArgs e) - { - drawChart(); - } } } diff --git a/FrmWait.Designer.cs b/FrmWait.Designer.cs index 99733ea..88f5a29 100644 --- a/FrmWait.Designer.cs +++ b/FrmWait.Designer.cs @@ -55,7 +55,6 @@ this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(0, 24); this.label1.TabIndex = 1; - this.label1.Click += new System.EventHandler(this.label1_Click); // // FrmWait // @@ -71,7 +70,7 @@ this.ShowIcon = false; this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; this.Text = "正在处理,请稍后..."; - this.Load += new System.EventHandler(this.FrmWait_Load); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmWait_FormClosing); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); diff --git a/FrmWait.cs b/FrmWait.cs index d3b7a48..d645ae4 100644 --- a/FrmWait.cs +++ b/FrmWait.cs @@ -32,27 +32,6 @@ frm = null; } - private void FrmWait_Load(object sender, EventArgs e) - { - - - } - - - private void labelX2_Click(object sender, EventArgs e) - { - - } - - private void progressBarX1_Click(object sender, EventArgs e) - { - - } - - private void label1_Click(object sender, EventArgs e) - { - - } } } diff --git a/FrmYJSHTC.cs b/FrmYJSHTC.cs index 3572371..27b7186 100644 --- a/FrmYJSHTC.cs +++ b/FrmYJSHTC.cs @@ -143,9 +143,7 @@ for (int i = ctl1.Globe.Layers.Count - 1; i >= 0; i--) { if (ctl1.Globe.Layers[i].Caption == str) - { ctl1.Globe.Layers.Remove(ctl1.Globe.Layers[i]); - } } foreach (TreeNode n in layerTree.Nodes) @@ -155,20 +153,15 @@ for (int i = 0; i < n.Nodes.Count; i++) { if (n.Nodes[i].Text == str) - { n.Nodes[i].Remove(); - } } } } string sql = "delete from casic_audit_result where SH_LAYER = '" + str + "'"; - OledbHelper.sqlExecuteNonQuery(sql); - } } - } } diff --git a/MainFrm.cs b/MainFrm.cs index bc962c4..29a3eb3 100644 --- a/MainFrm.cs +++ b/MainFrm.cs @@ -2,7 +2,6 @@ using System.Collections; using System.Collections.Generic; using System.Data; -using System.Data.OracleClient; using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; @@ -13,7 +12,6 @@ using System.Text; using System.Threading; using System.Windows.Forms; -using System.Xml; using Cyberpipe.Forms; using DevComponents.DotNetBar; using GeoScene.Data; @@ -28,10 +26,10 @@ { TreeNode layerManagerNode; bool m_bFullScreen; - + GSOGlobeControl globeControl1; GSOGlobeControl globeControl2; - private GSOHudButton legend;//定义图例 + private GSOHudButton legend; //定义图例 private GSOHudButton btnToolNone; private GSOHudButton btnToolSelect; ToolTip tooltip1; @@ -42,20 +40,20 @@ GSOBalloon featureTooltip2; GSOBalloonEx balloonEx2; - GSOLayer layerTemp; - GSOLayer layerTemp2; + GSOLayer layerTemp;//wxl注释,Globe1的临时图层 + GSOLayer layerTemp2;//wxl注释,Globe2的临时图层 FrmRedlineResult frmredResult = null; FrmMnModify frmModify; public bool frmRedlineResult = false; public bool boolfrmShResult; public bool boolfrmModify; - public static string m_CurrentQueryLayer;//定义当前查询的图层 + public static string m_CurrentQueryLayer; //定义当前查询的图层 //定位和闪烁初始化定义 private EnumDesignMode enumDesignMode; //模拟规划设计模式 - private string trackflag;//定义阀门查询个数 + private string trackflag; //定义阀门查询个数 //记录沿线飞行设置 //int m_nFlyMode = 2; @@ -67,7 +65,7 @@ Double m_dDigPitWidthAlongLine = 6; Boolean m_bDigPitByDepth = true; //选择管线 - int selectState;//wxl 注释,表示是否已经计算过净距等了,1已计算,0未计算 + int selectState; //wxl 注释,表示是否已经计算过净距等了,1已计算,0未计算 //private OracleConnection connBackup = null; //数据集合 @@ -89,8 +87,8 @@ //双屏对比 //bool zhanshi=false; Thread t = null; - private GSOHudButton legendSC;//定义图例 - private GSOHudButton legendSG;//定义图例 + private GSOHudButton legendSC; //定义图例 + private GSOHudButton legendSG; //定义图例 //管纵图 private GSOHudButton lendendGZ50; private GSOHudButton lendendGZ36; @@ -102,12 +100,13 @@ GSOGeoPoint3D bsqPT; - FrmYJSHTC frmSh;//一键审核窗口全局变量wxl - FrmWait frmWait;//一键审核等待窗口 + FrmYJSHTC frmSh; //一键审核窗口全局变量wxl + FrmWait frmWait; //一键审核等待窗口 //FrmWait frmWait2 = null;//文档操作等待窗口 float mouseDownX1, mouseDownY1; float mouseDownX2, mouseDownY2; + /// /// /// @@ -164,8 +163,9 @@ RigthMenuSet(); MenuSet(); - + } + /// /// 右屏中添加管纵图片 /// @@ -259,6 +259,7 @@ } #region 区域分析 + if (Utility.userRole.IndexOf("区域分析") < 0) { toolRightMenu.Items.Remove(区域分析ToolStripMenuItem); @@ -278,9 +279,11 @@ 区域分析ToolStripMenuItem.DropDownItems.Remove(无源淹没分析ToolStripMenuItem); } } + #endregion #region 视域分析 + if (Utility.userRole.IndexOf("视域分析") < 0) { toolRightMenu.Items.Remove(视域分析ToolStripMenuItem); @@ -300,9 +303,11 @@ 视域分析ToolStripMenuItem.DropDownItems.Remove(可视包络分析ToolStripMenuItem); } } + #endregion #region 开发分析 + if (Utility.userRole.IndexOf("开挖分析") < 0) { toolRightMenu.Items.Remove(开挖分析ToolStripMenuItem); @@ -334,9 +339,11 @@ 开挖分析ToolStripMenuItem.DropDownItems.Remove(删除隧道ToolStripMenuItem); } } + #endregion #region 拓扑分析 + if (Utility.userRole.IndexOf("拓扑分析") < 0) { toolRightMenu.Items.Remove(拓扑分析ToolStripMenuItem); @@ -372,9 +379,11 @@ 拓扑分析ToolStripMenuItem.DropDownItems.Remove(爆管分析ToolStripMenuItem); } } + #endregion #region 断面分析 + if (Utility.userRole.IndexOf("断面分析") < 0) { toolRightMenu.Items.Remove(断面分析ToolStripMenuItem); @@ -398,9 +407,11 @@ 断面分析ToolStripMenuItem.DropDownItems.Remove(基线剖面分析ToolStripMenuItem); } } + #endregion #region 绘制区域统计 + if (Utility.userRole.IndexOf("绘制区域统计") < 0) { toolRightMenu.Items.Remove(绘制区域统计ToolStripMenuItem); @@ -445,9 +456,11 @@ } } + #endregion #region 全区域统计 + if (Utility.userRole.IndexOf("全区域统计") < 0) { toolRightMenu.Items.Remove(全区域统计ToolStripMenuItem); @@ -492,9 +505,11 @@ } } + #endregion #region 查询 + if (Utility.userRole.IndexOf("查询") < 0) { toolRightMenu.Items.Remove(查询ToolStripMenuItem); @@ -542,9 +557,11 @@ 查询ToolStripMenuItem.DropDownItems.Remove(附属物查询ToolStripMenuItem); } } + #endregion #region 标注 + if (Utility.userRole.IndexOf("标注") < 0) { toolRightMenu.Items.Remove(标注ToolStripMenuItem); @@ -592,9 +609,11 @@ 标注ToolStripMenuItem.DropDownItems.Remove(标注管理ToolStripMenuItem); } } + #endregion #region 飞行 + if (Utility.userRole.IndexOf("飞行") < 0) { toolRightMenu.Items.Remove(飞行ToolStripMenuItem); @@ -618,9 +637,11 @@ 飞行ToolStripMenuItem.DropDownItems.Remove(绕眼睛飞行ToolStripMenuItem); } } + #endregion #region 编辑 + if (Utility.userRole.IndexOf("编辑") < 0) { toolRightMenu.Items.Remove(编辑ToolStripMenuItem); @@ -656,9 +677,11 @@ 编辑ToolStripMenuItem.DropDownItems.Remove(删除模型ToolStripMenuItem); } } + #endregion #region 量算 + if (Utility.userRole.IndexOf("量算") < 0) { toolRightMenu.Items.Remove(量算ToolStripMenuItem); @@ -694,6 +717,7 @@ 量算ToolStripMenuItem.DropDownItems.Remove(地表面积ToolStripMenuItem1); } } + #endregion } @@ -701,6 +725,7 @@ { #region 权限管理 + if (Utility.userRole.IndexOf("权限管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem2); @@ -734,9 +759,11 @@ } } + #endregion #region 基础工具 + if (Utility.userRole.IndexOf("基础工具") < 0) { ribbonControl1.Items.Remove(ribbonTabItem1); @@ -781,37 +808,47 @@ } } + #endregion #region 一键审核 + if (Utility.userRole.IndexOf("一键审核") < 0) { ribbonControl1.Items.Remove(ribbonTabItem11); } + #endregion #region 红线审核 + if (Utility.userRole.IndexOf("红线审核") < 0) { ribbonControl1.Items.Remove(ribbonTabItem6); } + #endregion #region 双屏对比 + if (Utility.userRole.IndexOf("双屏对比") < 0) { ribbonControl1.Items.Remove(ribbonTabItem9); } + #endregion #region 文档管理 + if (Utility.userRole.IndexOf("文档管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem4); } + #endregion #region 基础管理 + if (Utility.userRole.IndexOf("基础管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem14); @@ -841,6 +878,7 @@ } #region Fan Zhang 重构现有代码 + //初始化控件布局 private void initLayout() { @@ -848,37 +886,37 @@ double dsw = SW; if (SW > 1440) { - double myScreen = dsw / 1440; - buttonX1.Width = (int)(buttonX1.Width * myScreen); - buttonX2.Width = (int)(buttonX2.Width * myScreen); - buttonX4.Width = (int)(buttonX4.Width * myScreen); - buttonX5.Width = (int)(buttonX5.Width * myScreen); - buttonX6.Width = (int)(buttonX6.Width * myScreen); - buttonX7.Width = (int)(buttonX8.Width * myScreen); - buttonX8.Width = (int)(buttonX8.Width * myScreen); - buttonX9.Width = (int)(buttonX9.Width * myScreen); - buttonX12.Width = (int)(buttonX12.Width * myScreen); - buttonX14.Width = (int)(buttonX14.Width * myScreen); - buttonX15.Width = (int)(buttonX15.Width * myScreen); - buttonX16.Width = (int)(buttonX16.Width * myScreen); - buttonX17.Width = (int)(buttonX17.Width * myScreen); + double myScreen = dsw/1440; + buttonX1.Width = (int) (buttonX1.Width*myScreen); + buttonX2.Width = (int) (buttonX2.Width*myScreen); + buttonX4.Width = (int) (buttonX4.Width*myScreen); + buttonX5.Width = (int) (buttonX5.Width*myScreen); + buttonX6.Width = (int) (buttonX6.Width*myScreen); + buttonX7.Width = (int) (buttonX8.Width*myScreen); + buttonX8.Width = (int) (buttonX8.Width*myScreen); + buttonX9.Width = (int) (buttonX9.Width*myScreen); + buttonX12.Width = (int) (buttonX12.Width*myScreen); + buttonX14.Width = (int) (buttonX14.Width*myScreen); + buttonX15.Width = (int) (buttonX15.Width*myScreen); + buttonX16.Width = (int) (buttonX16.Width*myScreen); + buttonX17.Width = (int) (buttonX17.Width*myScreen); - labelX1.Width = (int)(labelX1.Width * myScreen); - labelX2.Width = (int)(labelX2.Width * myScreen); - labelX3.Width = (int)(labelX3.Width * myScreen); - labelX6.Width = (int)(labelX6.Width * myScreen); - labelX8.Width = (int)(labelX8.Width * myScreen); - labelX9.Width = (int)(labelX9.Width * myScreen); - labelX12.Width = (int)(labelX12.Width * myScreen); - labelX13.Width = (int)(labelX13.Width * myScreen); - labelX14.Width = (int)(labelX14.Width * myScreen); - labelX16.Width = (int)(labelX16.Width * myScreen); - labelX17.Width = (int)(labelX17.Width * myScreen); - labelX11.Width = (int)(labelX11.Width * myScreen); - labelX19.Width = (int)(labelX19.Width * myScreen); - labelX21.Width = (int)(labelX21.Width * myScreen); - labelX22.Width = (int)(labelX22.Width * myScreen); - labelX24.Width = (int)(labelX24.Width * myScreen); + labelX1.Width = (int) (labelX1.Width*myScreen); + labelX2.Width = (int) (labelX2.Width*myScreen); + labelX3.Width = (int) (labelX3.Width*myScreen); + labelX6.Width = (int) (labelX6.Width*myScreen); + labelX8.Width = (int) (labelX8.Width*myScreen); + labelX9.Width = (int) (labelX9.Width*myScreen); + labelX12.Width = (int) (labelX12.Width*myScreen); + labelX13.Width = (int) (labelX13.Width*myScreen); + labelX14.Width = (int) (labelX14.Width*myScreen); + labelX16.Width = (int) (labelX16.Width*myScreen); + labelX17.Width = (int) (labelX17.Width*myScreen); + labelX11.Width = (int) (labelX11.Width*myScreen); + labelX19.Width = (int) (labelX19.Width*myScreen); + labelX21.Width = (int) (labelX21.Width*myScreen); + labelX22.Width = (int) (labelX22.Width*myScreen); + labelX24.Width = (int) (labelX24.Width*myScreen); } sideBar1.Visible = false; sideBar1.ExpandedPanel = sideBarPanelItem3; @@ -899,7 +937,7 @@ splitContainer1.Panel2Collapsed = true; - buttonItem87.Checked = true;//默认地上模式 + buttonItem87.Checked = true; //默认地上模式 ribbonTabItem1.Select(); //初始化状态为浏览 sideBarPanelItem3.Visible = false; @@ -951,7 +989,7 @@ //图例 legend = new GSOHudButton(); - legend.SetImage(Application.StartupPath + "/Resource/图例P.jpg");//图例P + legend.SetImage(Application.StartupPath + "/Resource/图例P.jpg"); //图例P legend.SetOffset(0, 15); legend.MinOpaque = 1; legend.MaxOpaque = 1; @@ -1002,7 +1040,7 @@ globeControl1.Globe.UserBackgroundColor = Color.White; globeControl1.Globe.FlyAlongLineSpeed = m_dFlyAlongLineSpeed; globeControl1.Globe.FlyAlongLineRotateSpeed = m_dFlyAlongLineRotateSpeed; - globeControl1.Globe.FlyToPointSpeed = globeControl1.Globe.FlyToPointSpeed * 3; + globeControl1.Globe.FlyToPointSpeed = globeControl1.Globe.FlyToPointSpeed*3; globeControl1.Globe.EditSnapObject = true; globeControl1.Globe.IsReleaseMemOutOfView = true; globeControl1.Globe.ControlPanel.Visible = true; @@ -1021,18 +1059,22 @@ globeControl2.Globe.UserBackgroundColor = Color.White; globeControl2.Globe.FlyAlongLineSpeed = m_dFlyAlongLineSpeed; globeControl2.Globe.FlyAlongLineRotateSpeed = m_dFlyAlongLineRotateSpeed; - globeControl2.Globe.FlyToPointSpeed = globeControl2.Globe.FlyToPointSpeed * 3; + globeControl2.Globe.FlyToPointSpeed = globeControl2.Globe.FlyToPointSpeed*3; globeControl2.Globe.EditSnapObject = true; globeControl2.Globe.IsReleaseMemOutOfView = true; globeControl2.Globe.ControlPanel.Visible = false; - GSOSimplePolygonStyle3D trackingRectStyle = globeControl1.Globe.TrackRectTool.TrackingPolygonStyle as GSOSimplePolygonStyle3D; + GSOSimplePolygonStyle3D trackingRectStyle = + globeControl1.Globe.TrackRectTool.TrackingPolygonStyle as GSOSimplePolygonStyle3D; trackingRectStyle.FillColor = Color.FromArgb(0, 0, 0, 0); - GSOSimplePolygonStyle3D trackRectStyle = globeControl1.Globe.TrackRectTool.PolygonStyle as GSOSimplePolygonStyle3D; + GSOSimplePolygonStyle3D trackRectStyle = + globeControl1.Globe.TrackRectTool.PolygonStyle as GSOSimplePolygonStyle3D; trackRectStyle.FillColor = Color.FromArgb(0, 0, 0, 0); - GSOSimpleLineStyle3D trackRectLineStyle = globeControl1.Globe.TrackRectTool.PolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; + GSOSimpleLineStyle3D trackRectLineStyle = + globeControl1.Globe.TrackRectTool.PolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; trackRectLineStyle.LineType = EnumLineType.Solid; - GSOSimpleLineStyle3D trackRectLineStyle1 = globeControl1.Globe.TrackRectTool.TrackingPolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; + GSOSimpleLineStyle3D trackRectLineStyle1 = + globeControl1.Globe.TrackRectTool.TrackingPolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; trackRectLineStyle1.LineType = EnumLineType.Solid; trackRectLineStyle1.LineColor = Color.FromArgb(0, 174, 255); trackRectLineStyle1.LineWidth = 1; @@ -1107,7 +1149,7 @@ //加载两个地球数据 private void loadData() { - Thread t1 = new Thread(doLoadDataForGlobalControl1); + Thread t1 = new Thread(doLoadDataForGlobalControl); t1.IsBackground = true; t1.Start(); } @@ -1119,30 +1161,22 @@ globeControl1.Globe.ConnectServer(Utility.serverip, Utility.serverport, "", ""); //加载locaServer中的数据 globeControl2.Globe.ConnectServer(Utility.serverip, Utility.serverport, "", ""); //加载locaServer中的数据 //初始化TreeView - // 勾选实测图层 - foreach (TreeNode tn in layerTree.Nodes) - { - if (tn.Nodes.Count <= 0) continue; - if (tn.Text != "实测数据") continue; - tn.Checked = true; - foreach (TreeNode tnChild in tn.Nodes) - { - tnChild.Checked = true; - foreach (TreeNode tnGrandChild in tnChild.Nodes) - { - tnGrandChild.Checked = true; - } - } - } - } - private void doLoadDataForGlobalControl1() + initLayerTree(); + } + /// + /// 加载地球1、2的图层 + /// + private void doLoadDataForGlobalControl() { try { globeControl1.Globe.Layers.MoveDown(10000); //加载实测管线数据 - Utility.dataSource = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.DBServer.Trim() + "/" + Utility.dbdatabase.Trim(), "", "", Utility.userID, Utility.DBPassword); + Utility.dataSource = + globeControl1.Globe.DataManager.OpenOracleDataSource( + Utility.DBServer.Trim() + "/" + Utility.dbdatabase.Trim(), "", "", Utility.userID, + Utility.DBPassword); if (Utility.dataSource != null) { @@ -1160,7 +1194,9 @@ globeControl1.Globe.Layers.GetLayerByCaption("红线").Visible = false; //globleControl1中加载规划数据 - GSODataSource ghDS = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.ghdbip + "/" + Utility.ghdbname, "", "", Utility.ghdbuser, Utility.ghdbpwd); + GSODataSource ghDS = + globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.ghdbip + "/" + Utility.ghdbname, "", "", + Utility.ghdbuser, Utility.ghdbpwd); if (ghDS != null) { for (int j = 0; j < ghDS.DatasetCount; j++) @@ -1176,13 +1212,16 @@ } //globeControl1,globeControl2中加载施工数据 - GSODataSource sgDS = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.sgdbip + "/" + Utility.sgdbname, "", "", Utility.sgdbuser, Utility.sgdbpwd); + GSODataSource sgDS = + globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.sgdbip + "/" + Utility.sgdbname, "", "", + Utility.sgdbuser, Utility.sgdbpwd); if (sgDS != null) { for (int m = 0; m < sgDS.DatasetCount; m++) { GSODataset dataset = sgDS.GetDatasetAt(m); - if (dataset != null && !dataset.Caption.Contains("SH") && Utility.dictionaryNetLayerNameAndCaption.ContainsKey(dataset.Caption)) + if (dataset != null && !dataset.Caption.Contains("SH") && + Utility.dictionaryNetLayerNameAndCaption.ContainsKey(dataset.Caption)) { dataset.Caption = dataset.Name; globeControl1.Globe.Layers.Add(dataset); @@ -1196,12 +1235,12 @@ // LoadDataForGlobalControl ss = connectServer; // ss(); - + this.Invoke((EventHandler) delegate { connectServer(); }); - + } catch (Exception ex) @@ -1212,67 +1251,17 @@ private void initLayerTree() { + layerTree.Nodes.Clear(); //加载临时图层节点 layerManagerNode = new TreeNode(); layerManagerNode.ImageIndex = 0; layerManagerNode.SelectedImageIndex = 0; layerManagerNode.Checked = true; layerManagerNode.Text = "临时图层"; + layerManagerNode.Tag = layerTemp; layerTree.Nodes.Add(layerManagerNode); - XmlDocument doc = new XmlDocument(); - doc.Load(Utility.filename); - XmlNodeList xmlLayerNodes = doc.SelectNodes("//layer"); - - foreach (XmlNode xmlLayerNode in xmlLayerNodes) - { - - //TODO LIST:创建一级TreeNode(实测、规划、施工) - TreeNode nodelayer = new TreeNode(); - string layerName = xmlLayerNode.Attributes["label"].Value; - nodelayer.Text = layerName; - nodelayer.Checked = false; - layerTree.Nodes.Add(nodelayer); - - XmlNodeList xmlChildLayerNodes = xmlLayerNode.ChildNodes; - foreach (XmlNode xmlChildLayerNode in xmlChildLayerNodes) - { - //TODO LIST:创建二级TreeNode节点 - TreeNode secondLevelNode = new TreeNode(); - string layerType = xmlChildLayerNode.Attributes["label"].Value; - secondLevelNode.Text = layerType; - - if (xmlChildLayerNode.Attributes["type"] != null) - { //道路图层特殊处理 - string type = xmlChildLayerNode.Attributes["type"].Value; - secondLevelNode.Tag = type + "|" + layerType; - } - else - { - secondLevelNode.Tag = layerType; - } - secondLevelNode.Checked = false; - nodelayer.Nodes.Add(secondLevelNode); - - XmlNodeList xmlActitualLayerNodes = xmlChildLayerNode.ChildNodes; - - foreach (XmlNode xmlActitualLayerNode in xmlActitualLayerNodes) - { - //TODO LIST:创建三级图层节点 - TreeNode layerNode = new TreeNode(); - string actutallylayerType = xmlActitualLayerNode.Attributes["type"].Value; - string actutallylayerName = xmlActitualLayerNode.Attributes["layer"].Value; - string actutallyLabelName = xmlActitualLayerNode.Attributes["label"].Value; - - layerNode.Text = actutallyLabelName; - layerNode.Tag = layerType + "|" + actutallyLabelName; - layerNode.Checked = false; - secondLevelNode.Nodes.Add(layerNode); - } - - } - - } + TreeUtils.InitLayerTree(globeControl1, layerTree, null); } @@ -1298,7 +1287,8 @@ for (int i = 0; i < markerStrs.Length; i++) { if (!File.Exists(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd")) continue; - GSOLayer markerLayer = globeControl1.Globe.Layers.Add(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd"); + GSOLayer markerLayer = + globeControl1.Globe.Layers.Add(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd"); if (markerLayer == null) continue; TreeNode node1 = new TreeNode(); node1.Text = markerLayer.Caption; @@ -1312,9 +1302,11 @@ private void MainFrm_Load(object sender, EventArgs e) { + + layerTree.Nodes.Add("正在加载,请稍后……");//树状图加载在图层加载之后,故增加提示 initGlobalControl(); //initGlobalMap(); - initLayerTree(); +// initLayerTree(); initMarkerTree(); initLayout(); loadData(); @@ -1383,7 +1375,7 @@ tempnode.Checked = node.Checked ? feature.Visible : false; tempnode.Tag = feature; node.Nodes.Add(tempnode); - GSOFeatureFolder featureFolder = (GSOFeatureFolder)feature; + GSOFeatureFolder featureFolder = (GSOFeatureFolder) feature; VisitFeature3Ds(featureFolder.Features, tempnode); } else @@ -1444,7 +1436,7 @@ /// Boolean CheckDatasetGeoReference(GSODataset dataset, string strDataPath) { - + if (dataset.GeoReferenceType != EnumGeoReferenceType.Flat) return true; Boolean bSuccess = false; if (MessageBox.Show("数据没有空间参考信息,请设置空间参考信息!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) != @@ -1498,7 +1490,7 @@ dlg.Filter = "输出JPEG(*.jpg)|*.jpg|输出PNG(*.png)|*.png|输出BMP(*.bmp)|*.bmp|输出BMP(*.gif)|*.gif"; if (dlg.ShowDialog() == DialogResult.OK) { - string extension = Path.GetExtension(dlg.FileName);//扩展名 + string extension = Path.GetExtension(dlg.FileName); //扩展名 switch (extension) { case ".jpg": @@ -1520,6 +1512,7 @@ globeControl1.Globe.Action = EnumAction3D.ActionNull; globeControl1.Globe.MouseRoamingEnable = true; } + /// /// 定位正北正90度俯视 /// @@ -1548,7 +1541,6 @@ void globeControl1_HudControlMouseIntoEvent(object sender, HudControlMouseIntoEventArgs e) { - GSOHudButton btn = e.HudControl as GSOHudButton; tooltip1 = new ToolTip(); switch (e.HudControl.Name) { @@ -1573,163 +1565,46 @@ break; } } - /// - /// layerTree选中后事件处理 - /// - /// - /// + + #region wxl 重构树形结构代码 + private void layerTree_AfterCheck(object sender, TreeViewEventArgs e) { - if (e.Node.Tag != null) + if (e.Action != TreeViewAction.Unknown) { - if (e.Node.Tag.ToString().Contains("|")) - { - string nodeTag = e.Node.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(nodeTag); - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - if (e.Node.Tag is GSOFeature) - { - if (e.Node.Nodes.Count == 0) - { - GSOFeature feat = e.Node.Tag as GSOFeature; - feat.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - } - CheckControl(e); - } - /// - /// 树节点选中方法 - /// - /// - private void CheckControl(TreeViewEventArgs e) - { - if (e.Action == TreeViewAction.Unknown||e.Node == null || Convert.IsDBNull(e.Node)) return; - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - { - CheckAllChildNodes(e.Node, e.Node.Checked); - } - } - /// - /// 改变所有子节点的状态 - /// - /// - /// - private void CheckAllChildNodes(TreeNode pn, bool IsChecked) - { - foreach (TreeNode tn in pn.Nodes) - { - tn.Checked = IsChecked; - - if (tn.Nodes.Count > 0) - { - CheckAllChildNodes(tn, IsChecked); - } + TreeUtils.TreeNodeCheckedChange(globeControl1, e.Node); } } - //改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 - private void CheckParentNode(TreeNode curNode) - { - bool bChecked = false; - - if (curNode.Parent == null) return; - foreach (TreeNode node in curNode.Parent.Nodes) - { - if (node.Checked) - { - bChecked = true; - break; - } - } - - if (bChecked) - { - curNode.Parent.Checked = true; - CheckParentNode(curNode.Parent); - } - else - { - curNode.Parent.Checked = false; - CheckParentNode(curNode.Parent); - } - } - + #endregion private void layerTree_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (e.Button != MouseButtons.Right) return; layerTree.SelectedNode = e.Node; - if (e.Node.Tag == null) return; - if (e.Button == MouseButtons.Right && e.Node.Tag.ToString().Contains("|")) + if (e.Node.Tag == null || e.Node.Parent == null) return; //排除无图层节点和第一级节点 + + //来自locaserver的数据,直接返回就行了,目前只有一个180fd,暂时单独处理 + GSOLayer gsoLayer = e.Node.Tag as GSOLayer; + if (gsoLayer == null || gsoLayer.Caption.Equals(Utility.roadLayerName)) return; + if (e.Node.Parent.Text.Equals("临时图层") || e.Node.Parent.Text.Equals("我的地标")) { - - if (e.Node.Tag.ToString().Split('|')[0] == "locaserver") - { - - foreach (ToolStripItem item in layerNodeContexMenu.Items) - { - item.Visible = false; - } - return; - - } - - if (e.Node.Tag.ToString().Split('|')[0] == "new") - { - LayerEditableMenuItem.Enabled = true; - foreach (ToolStripItem item in layerNodeContexMenu.Items) - { - item.Visible = false; - } - //LayerSelectableMenuItem.Visible = true; - //LayerEditableMenuItem.Visible = true; - RemoveLayer.Visible = true; - RefreshLayerFeatureListMenuItem.Visible = true; - //SaveLayerMenuItem.Visible = true; - //LayerFlyMenuItem.Visible = true; - } - + //临时图层下的子节点应该展示的 + contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); + contextMenuStripDeleteLayerNode.Tag = e.Node; + } + else + { LayerSelectableMenuItem.Visible = true; LayerEditableMenuItem.Visible = true; SaveLayerMenuItem.Visible = true; LayerFlyMenuItem.Visible = true; 导出CADToolStripMenuItem1.Visible = true; - layerNodeContexMenu.Show(layerTree, e.X, e.Y); layerNodeContexMenu.Tag = e.Node; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(e.Node.Tag.ToString().Split('|')[1]); - if (layer != null) - { - LayerSelectableMenuItem.Checked = layer.Selectable; - LayerEditableMenuItem.Checked = layer.Editable; - } + LayerSelectableMenuItem.Checked = gsoLayer.Selectable; + LayerEditableMenuItem.Checked = gsoLayer.Editable; } - else - { - if (e.Node.Tag is GSOLayer && e.Node.Parent != null && e.Node.Parent.Text.Trim() == "临时图层") - { - contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); - contextMenuStripDeleteLayerNode.Tag = e.Node; - } - else if (e.Node.Tag is GSOFeature && e.Node.Parent != null && e.Node.Parent.Text.Trim() == "我的地标") - { - contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); - contextMenuStripDeleteLayerNode.Tag = e.Node; - } - } + } /// @@ -1740,75 +1615,61 @@ private void 删除ToolStripMenuItem2_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "临时图层") + if (node == null || node.Parent == null) return; + if (node.Parent.Text.Trim() == "临时图层") { - if (node.Tag is GSOLayer) - { - GSOLayer layer = node.Tag as GSOLayer; - - for (int i = globeControl1.Globe.Layers.Count - 1; i >= 0; i--) - { - if (globeControl1.Globe.Layers[i].Caption == layer.Caption) - { - globeControl1.Globe.Layers.Remove(globeControl1.Globe.Layers[i]); - } - } - - globeControl1.Globe.Refresh(); - - node.Remove(); - } - } - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "我的地标") + if (!(node.Tag is GSOLayer)) return; + GSOLayer layer = node.Tag as GSOLayer; + globeControl1.Globe.Layers.Remove(layer); + globeControl1.Globe.Refresh(); + node.Remove(); + }else if (node.Parent.Text.Trim() == "我的地标") { - if (node.Tag is GSOFeature) - { - GSOFeature f = node.Tag as GSOFeature; - f.Delete(); - globeControl1.Globe.Refresh(); - - node.Remove(); - } + if (!(node.Tag is GSOFeature)) return; + GSOFeature f = node.Tag as GSOFeature; + f.Delete(); + globeControl1.Globe.Refresh(); + node.Remove(); } + } private void 可编辑ToolStripMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "临时图层") - { - if (node.Tag is GSOLayer) - { - GSOLayer layer = node.Tag as GSOLayer; - - 可编辑ToolStripMenuItem.Checked = !可编辑ToolStripMenuItem.Checked; - layer.Editable = 可编辑ToolStripMenuItem.Checked; - } - } + if (node == null || + node.Parent == null || + node.Parent.Text.Trim() != "临时图层" || !(node.Tag is GSOLayer)) return; + GSOLayer layer = node.Tag as GSOLayer; + 可编辑ToolStripMenuItem.Checked = !可编辑ToolStripMenuItem.Checked; + layer.Editable = 可编辑ToolStripMenuItem.Checked; } private void 保存ToolStripMenuItem_Click(object sender, EventArgs e) { - //TreeNode node = layerNodeContexMenu.Tag as TreeNode; - TreeNode node = contextMenuStripDeleteLayerNode.Tag as TreeNode; - - Int32 nIndex = node.Index; - string layerCaption = node.Text;//.Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); +// TreeNode node = contextMenuStripDeleteLayerNode.Tag as TreeNode; + TreeNode node = layerTree.SelectedNode; + if (node == null||node.Tag==null) return; + GSOLayer layer = node.Tag as GSOLayer; + if (layer == null) return; layer.Dataset.Save(); } - + //TODO LIST: wxl? Tag更正 private void 定位ToolStripMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - - if (node == null) return; + if (node == null||node.Parent==null) return; if (node.Parent.Text.Trim() == "临时图层") { - GSOLayer lsLayer = globeControl1.Globe.Layers.GetLayerByCaption(node.Text); + GSOLayer lsLayer = node.Tag as GSOLayer; + if (lsLayer == null) + { + LogHelper.WriteLog(typeof(MainFrm),"要定位的临时图层不存在:"+node.Text); + return; + } double x = lsLayer.LatLonBounds.Center.X; double y = lsLayer.LatLonBounds.Center.Y; - if (x == 0 && y == 0) + if (x.Equals(0) && y.Equals(0)) { x = lsLayer.Bounds.Center.X; y = lsLayer.Bounds.Center.Y; @@ -1818,20 +1679,14 @@ } else { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); - + GSOLayer layer = node.Tag as GSOLayer; if (layer == null) return; - if (layer.Caption == "红线") + if (layer.Caption.Equals("红线")) { globeControl1.Globe.FlyToPosition(new GSOPoint3d(120.610963, 31.188121, 50), EnumAltitudeMode.Absolute, -4, 50, 1000); globeControl1.Globe.FlyToPointSpeed = 10000000; globeControl1.Globe.Action = EnumAction3D.SelectObject; - - GSOLayer redLayer = globeControl1.Globe.Layers.GetLayerByCaption("红线"); - if (redLayer != null) - { - redLayer.Visible = true; - } + layer.Visible = true; globeControl1.Refresh(); } else @@ -1842,55 +1697,28 @@ } } } - + //TODO LIST: wxl? Tag更正 private void layerTree_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) { - if (layerTree.SelectedNode == null) return; - if (layerTree.SelectedNode.Tag.ToString().Contains("|")) + TreeNode node = layerTree.SelectedNode; + if (node == null) return; + if (node.Tag is GSOLayer) { - string nodeTag = layerTree.SelectedNode.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(nodeTag); - if (layer != null) + GSOLayer layer = node.Tag as GSOLayer; + if (layer.GetAllFeatures().Length <= 0) return; + GSOFeature feature = layer.GetAt(0); + if (feature != null && feature.Geometry != null) { - if (layer.Caption == "红线") - { - globeControl1.Globe.FlyToPosition(new GSOPoint3d(120.610963, 31.188121, 50), EnumAltitudeMode.Absolute, -4, 50, 1000); - globeControl1.Globe.FlyToPointSpeed = 10000000; - globeControl1.Globe.Action = EnumAction3D.SelectObject; - - GSOLayer redLayer = globeControl1.Globe.Layers.GetLayerByCaption("红线"); - if (redLayer != null) - { - redLayer.Visible = true; - } - globeControl1.Refresh(); - } - else - { - double x = layer.LatLonBounds.Center.X; - double y = layer.LatLonBounds.Center.Y; - globeControl1.Globe.FlyToPosition(new GSOPoint3d(x, y, 0), EnumAltitudeMode.Absolute); - } + globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute);//, 0, 0, 1000); + } + else + { + globeControl1.Globe.FlyToFeature(feature); } } - if (layerTree.SelectedNode.Tag is GSOLayer) + else if (node.Tag is GSOFeature) { - GSOLayer layer = layerTree.SelectedNode.Tag as GSOLayer; - if (layer.GetAllFeatures().Length > 0) - { - GSOFeature feature = layer.GetAt(0); - if (feature != null && feature.Geometry != null) - { - globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute);//, 0, 0, 1000); - } - else - { - globeControl1.Globe.FlyToFeature(feature); - } - } - } else if (layerTree.SelectedNode.Tag is GSOFeature) - { - GSOFeature feature = layerTree.SelectedNode.Tag as GSOFeature; + GSOFeature feature = node.Tag as GSOFeature; if (feature.Geometry != null) { globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute, 0, 0, 10); @@ -2231,15 +2059,7 @@ int idx = dataGridViewX2.Rows.Add(); dataGridViewX2.Rows[idx].Tag = feat; dataGridViewX2.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX2.Rows[idx].Cells[1].Value = featureName; } } @@ -2261,15 +2081,7 @@ int idx = dataGridViewLineList.Rows.Add(); dataGridViewLineList.Rows[idx].Tag = feat; dataGridViewLineList.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewLineList.Rows[idx].Cells[1].Value = featureName; } } @@ -2291,15 +2103,7 @@ int idx = dataGridViewX8.Rows.Add(); dataGridViewX8.Rows[idx].Tag = feat; dataGridViewX8.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX8.Rows[idx].Cells[1].Value = featureName; } } @@ -2321,15 +2125,7 @@ int idx = dataGridViewX4.Rows.Add(); dataGridViewX4.Rows[idx].Tag = feat; dataGridViewX4.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX4.Rows[idx].Cells[1].Value = featureName; } @@ -2353,15 +2149,7 @@ int idx = dataGridViewX6.Rows.Add(); dataGridViewX6.Rows[idx].Tag = feat; dataGridViewX6.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX6.Rows[idx].Cells[1].Value = featureName; } } @@ -2736,77 +2524,104 @@ return str; } - //string filename = Utility.filename; - //List g1layername = new List(); - /// /// 获取目标图层 /// /// +// private GSOLayer TreeNodeFeatureLayer() +// { +// TreeNode featureAddPipeFitTreenode = GetDestLayerFeatureAddTreeNode(); +// GSOLayer featureAddLayer = globeControl1.Globe.Layers.GetLayerByCaption(featureAddPipeFitTreenode.Tag.ToString().Split('|')[1]); +// +// return featureAddLayer; +// } + //TODO LIST: wxl11? 待更正,Node的Tag现在都已经统一为gsolayer对象了 +// private TreeNode GetDestLayerFeatureAddTreeNode() +// { +// for (int i = 0; i < layerTree.Nodes.Count; i++) +// { +// TreeNode tempNode = layerTree.Nodes[i]; +// for (int j = 0; j < tempNode.Nodes.Count; j++) +// { +// TreeNode tempChildNode = tempNode.Nodes[j]; +// if (tempChildNode.Tag.ToString().Split('|').Length > 1) // Config配置文件配置的图层 +// {//本层节点Tag记录layer +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode; +// } +// } +// else //临时添加的本地图层 +// {//子层节点的Tag记录layer +// for (int m = 0; m < tempChildNode.Nodes.Count; m++) +// { +// TreeNode tempChildNode1 = tempChildNode.Nodes[m]; +// if (tempChildNode1.Tag.ToString().Split('|').Length > 1) +// { +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode1.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode1.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode1; +// } +// } +// else +// { +// for (int n = 0; n < tempChildNode1.Nodes.Count; n++) +// { +// TreeNode tempChildNode2 = tempChildNode1.Nodes[n]; +// if (tempChildNode2.Tag.ToString().Split('|').Length <= 1) continue; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode2.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode2.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode2; +// } +// } +// } +// } +// } +// } +// } +// return null; +// } private GSOLayer TreeNodeFeatureLayer() { TreeNode featureAddPipeFitTreenode = GetDestLayerFeatureAddTreeNode(); - GSOLayer featureAddLayer = globeControl1.Globe.Layers.GetLayerByCaption(featureAddPipeFitTreenode.Tag.ToString().Split('|')[1]); - - return featureAddLayer != null ? featureAddLayer : null; + if (featureAddPipeFitTreenode == null) return null; + GSOLayer featureAddLayer = featureAddPipeFitTreenode.Tag as GSOLayer; + return featureAddLayer; } - + //遍历最深三层找到目标node. private TreeNode GetDestLayerFeatureAddTreeNode() { - for (int i = 0; i < layerTree.Nodes.Count; i++) + + foreach (TreeNode layerTreeNode in layerTree.Nodes) { - TreeNode tempNode = layerTree.Nodes[i]; - for (int j = 0; j < tempNode.Nodes.Count; j++) + if (layerTreeNode.Tag == null && layerTreeNode.Nodes.Count > 0) { - TreeNode tempChildNode = tempNode.Nodes[j]; - if (tempChildNode.Tag.ToString().Split('|').Length > 1) // Config配置文件配置的图层 + foreach (TreeNode node in layerTreeNode.Nodes) { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode; - } + GSOLayer gsoLayer = node.Tag as GSOLayer; + if (gsoLayer != null && gsoLayer.IsDestLayerFeatureAdd()) return node; + } - else //临时添加的本地图层 - { - for (int m = 0; m < tempChildNode.Nodes.Count; m++) - { - TreeNode tempChildNode1 = tempChildNode.Nodes[m]; - if (tempChildNode1.Tag.ToString().Split('|').Length > 1) - { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode1.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode1.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode1; - } - } - else - { - for (int n = 0; n < tempChildNode1.Nodes.Count; n++) - { - TreeNode tempChildNode2 = tempChildNode1.Nodes[n]; - if (tempChildNode2.Tag.ToString().Split('|').Length <= 1) continue; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode2.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode2.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode2; - } - } - } - } - } + } + else + { + GSOLayer gsoLayer = layerTreeNode.Tag as GSOLayer; + if (gsoLayer != null && gsoLayer.IsDestLayerFeatureAdd()) return layerTreeNode; } } return null; @@ -3221,6 +3036,7 @@ } } } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 目标图层 菜单 /// @@ -3228,14 +3044,15 @@ /// private void FeatureAddLayerMenuItem_Click(object sender, EventArgs e) { - if (!FeatureAddLayerMenuItem.Checked) - { - TreeNode node = layerNodeContexMenu.Tag as TreeNode; - FeatureAddLayerMenuItem.Checked = true; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); - globeControl1.Globe.DestLayerFeatureAdd = layer; - } + if (FeatureAddLayerMenuItem.Checked) return; + TreeNode node = layerNodeContexMenu.Tag as TreeNode; + FeatureAddLayerMenuItem.Checked = true; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; + globeControl1.Globe.DestLayerFeatureAdd = layer; } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 可选择 菜单 /// @@ -3244,11 +3061,13 @@ private void LayerSelectableMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - Int32 nIndex = node.Index; - GSOLayer layer = globeControl1.Globe.Layers[nIndex]; +// GSOLayer layer = globeControl1.Globe.Layers[nIndex]; + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; LayerSelectableMenuItem.Checked = !LayerSelectableMenuItem.Checked; - layer.Selectable = LayerSelectableMenuItem.Checked; + if (layer != null) layer.Selectable = LayerSelectableMenuItem.Checked; } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 可编辑 菜单 /// @@ -3257,23 +3076,27 @@ private void LayerEditableMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; LayerEditableMenuItem.Checked = !LayerEditableMenuItem.Checked; - layer.Editable = LayerEditableMenuItem.Checked; + if (layer != null) layer.Editable = LayerEditableMenuItem.Checked; } /// /// 图层目录树 右键菜单中的 保存 菜单 /// /// /// + //TODO LIST: wxl? Tag更正 private void SaveLayerMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - Int32 nIndex = node.Index; - string layerCaption = node.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); - layer.Dataset.Save(); +// string layerCaption = node.Tag.ToString().Split('|')[1]; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; + if (layer != null) layer.Dataset.Save(); } #region wxl feature的公共方法 @@ -3455,7 +3278,6 @@ return; GSOFeatureLayer flayer = layer as GSOFeatureLayer; - GSOFeatureDataset fdataset = flayer.Dataset as GSOFeatureDataset; GSOFeatures feats = flayer.GetAllFeatures(); for (int i = 0; i < feats.Length; i++) { @@ -3480,7 +3302,6 @@ return; GSOFeatureLayer flayer = layer as GSOFeatureLayer; - GSOFeatureDataset fdataset = flayer.Dataset as GSOFeatureDataset; GSOFeatures feats = flayer.GetAllFeatures(); for (int i = 0; i < feats.Length; i++) { @@ -5508,7 +5329,6 @@ private void addNodeToLayerManagerNode(GSOLayer layer) { if (layer == null) return; - GSODataset dataset = layer.Dataset; CheckDatasetGeoReference(layer.Dataset, ""); TreeNode node = new TreeNode(); @@ -5527,43 +5347,24 @@ /// /// /// - public int getLabelName(GSOLayer layer) - { - int nid = -1; - if (layer.GetAllFeatures().Length > 0) - { - string id = layer.GetAllFeatures()[layer.GetAllFeatures().Length - 1].Name; +// public int getLabelName(GSOLayer layer) +// { +// int nid = -1; +// if (layer.GetAllFeatures().Length > 0) +// { +// string id = layer.GetAllFeatures()[layer.GetAllFeatures().Length - 1].Name; +// +// int.TryParse(id, out nid); +// } +// else +// { +// nid = 0; +// } +// return nid; +// } - int.TryParse(id, out nid); - } - else - { - nid = 0; - } - return nid; - } /// - /// 判断选中的对象是否为管线 - /// - /// 被选中管线 - /// 返回一根线 - private GSOFeature IsPipeLineOfSelectedObj() - { - GSOFeature resFeature = null; - if (globeControl1.Globe.SelObjectCount < 1) return null; - GSOLayer resLayer = null; - globeControl1.Globe.GetSelectObject(0, out resFeature, out resLayer); - if (resFeature == null) return null; - - GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; - if (line1 == null) return null; - GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; - if (pipeStyle1 == null) return null; - - return resFeature; - } - /// /// 图层节点树中 节点 右键单击事件处理 /// /// @@ -5615,13 +5416,15 @@ { TreeNode node = contextMenuStrip2.Tag as TreeNode; TreeNode parentNode = node.Parent; - Int32 nIndex = node.Index; if (parentNode.Text == "标注管理" || parentNode.Text == "传感器管理") { RefreshTreeNodeLayerFeatureList(node); } } + + #region wxl? VisitFeature3Ds的作用,重构后,是否对其有影响 + /// /// 给指定的图层节点添加代表feature对象的子节点 /// @@ -5636,6 +5439,9 @@ VisitFeature3Ds(layer.GetAllFeatures(), layerTreeNode); } } + + #endregion + /// /// 标注管理、传感器管理 图层目录树的右键菜单中的 移除所有 菜单 /// @@ -5660,53 +5466,11 @@ { if (e.Action != TreeViewAction.Unknown) { - CheckTreeNode(e.Node, e.Node.Checked); + //wxl优化标注管理树形结构 + TreeUtils.TreeNodeCheckedChange(globeControl1,e.Node); } } - /// - /// 改变指定节点对应的复选框的选中状态 - /// - /// - /// - private void CheckTreeNode(TreeNode node, Boolean bChecked) - { - CheckChildTreeNode(node, bChecked); - globeControl1.Globe.Refresh(); - } - /// - /// 改变指定节点的子节点对应的复选框的选中状态 - /// - /// - /// - private void CheckChildTreeNode(TreeNode node, Boolean bChecked) - { - if (node == null) - return; - if (node.Tag != null) - { - if (node.Tag.GetType() == typeof(GSOFeatureFolder) || node.Tag.GetType() == typeof(GSOFeature)) - ((GSOFeature)node.Tag).SetVisibleDirectly(bChecked); - else - { - GSOLayer curLayer = node.Tag as GSOLayer; - GSOTerrain curTerrain = node.Tag as GSOTerrain; - if (curLayer != null) - { - curLayer.Visible = bChecked; - } - else if (curTerrain != null) - { - curTerrain.Visible = bChecked; - } - } - } - // 递归处理子节点 - for (int i = 0; i < node.Nodes.Count; i++) - { - node.Nodes[i].Checked = bChecked; - CheckChildTreeNode(node.Nodes[i], bChecked); - } - } + /// /// 标注管理、传感器管理 目录树中的feature节点的右键菜单中的 删除 菜单 /// @@ -5984,7 +5748,7 @@ frmModify = new FrmMnModify(globeControl1, shlayername, shresultLists); - if (boolfrmModify != false) return; + if (boolfrmModify) return; frmModify.Owner = this; frmModify.Location = new Point(Width - frmModify.Width - 10, Height - frmModify.Height - 50); frmModify.Show(); @@ -6261,16 +6025,15 @@ globeControl1.Globe.ClearMeasure(); layerTemp.RemoveAllFeature(); - layerTemp2.RemoveAllFeature(); buttonItemLS5.Checked = false; dataGridViewX1.DataSource = null; panelOfTable.Visible = false; globeControl1.Globe.MemoryLayer.RemoveAllFeature(); + globeControl2.Globe.MemoryLayer.RemoveAllFeature(); globeControl1.Globe.ClearAnalysis(); - // 清除净距分析结果 buttonX2_Click(null, null); buttonX8_Click(null, null); @@ -6527,8 +6290,8 @@ GSOFeatures selectFeatures = new GSOFeatures(); for (int i = 0; i < globeControl1.Globe.SelObjectCount; i++) { - GSOFeature feature = null; - GSOLayer layer = null; + GSOFeature feature; + GSOLayer layer; globeControl1.Globe.GetSelectObject(i, out feature, out layer); if (feature != null && feature.Geometry != null && feature.Geometry.Type == EnumGeometryType.GeoPolyline3D) { @@ -6536,11 +6299,9 @@ } } List feats = SectionAnalysisTool.ZDMAnalysis(selectFeatures); - if (feats != null && feats.Count >= 1) - { - FrmProfileAnalysis frm = new FrmProfileAnalysis(globeControl1, feats); - frm.Show(this); - } + if (feats == null || feats.Count < 1) return; + FrmProfileAnalysis frm = new FrmProfileAnalysis(globeControl1, feats); + frm.Show(this); } /// /// 道路断面分析 @@ -7057,14 +6818,14 @@ /// private void buttonItemSZ1_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7075,17 +6836,17 @@ /// /// 管径标注 /// - GSOFeature radiusMarkerFeature; +// GSOFeature radiusMarkerFeature; private void buttonItemBZ2_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine==null||selLine[0].Count <= 1)//wxl增加为空判断,下面方法同理 + if (selLine == null || selLine[0].Count <= 1) //wxl增加为空判断,下面方法同理 { return; } @@ -7100,14 +6861,14 @@ /// private void buttonItemBZ3_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null||selLine[0].Count <= 1) { return; } @@ -7123,14 +6884,14 @@ /// private void buttonItemBZ4_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7140,7 +6901,7 @@ /// /// 距离标注 /// - bool distanceMarker; +// bool distanceMarker; private void buttonItemBZ5_Click(object sender, EventArgs e) { //日志记录 @@ -7148,7 +6909,7 @@ globeControl1.Globe.Action = EnumAction3D.TrackPolyline; //globeControl1.Globe.DistanceRuler.MeasureMode = EnumDistanceMeasureMode.HVSLineMeasure; - distanceMarker = true; +// distanceMarker = true; } /// /// 自定义标注 @@ -7187,14 +6948,14 @@ /// private void buttonItemBZ8_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7775,11 +7536,9 @@ if (frm.ShowDialog() == DialogResult.OK) { GSOLayer featureAddLayer = TreeNodeFeatureLayer(); - if (featureAddLayer != null) - { - FrmAddInstrument dlg = new FrmAddInstrument(globeControl1, featureAddLayer); - dlg.Show(this); - } + if (featureAddLayer == null) return; + FrmAddInstrument dlg = new FrmAddInstrument(globeControl1, featureAddLayer); + dlg.Show(this); } } /// @@ -7822,11 +7581,9 @@ frm.citySevenLineType); globeControl1.Tag = citySevenLine; GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(frm.citySevenLineType); - if (layer != null) - { - globeControl1.Globe.DestLayerFeatureAdd = layer; - layer.Editable = true; - } + if (layer == null) return; + globeControl1.Globe.DestLayerFeatureAdd = layer; + layer.Editable = true; } } #endregion @@ -7986,44 +7743,45 @@ LogManager.saveLog(Utility.userName, buttonItemBJ10_2.Text); List listVectorNames = new List(); - for (int i = 0; i < Utility.m_PipelineLayerNames.Count; i++) + foreach (string pipeline in Utility.m_PipelineLayerNames) { - if (!listVectorNames.Contains(Utility.m_PipelineLayerNames[i])) + if (!listVectorNames.Contains(pipeline)) { - listVectorNames.Add(Utility.m_PipelineLayerNames[i]); + listVectorNames.Add(pipeline); } } - for (int i = 0; i < Utility.valueLayerNames.Count; i++) + foreach (string valve in Utility.valueLayerNames) { - if (!listVectorNames.Contains(Utility.valueLayerNames[i])) + if (!listVectorNames.Contains(valve)) { - listVectorNames.Add(Utility.valueLayerNames[i]); + listVectorNames.Add(valve); } } - for (int i = 0; i < Utility.workwellLayerNames.Count; i++) + foreach (string workwell in Utility.workwellLayerNames) { - if (!listVectorNames.Contains(Utility.workwellLayerNames[i])) + if (!listVectorNames.Contains(workwell)) { - listVectorNames.Add(Utility.workwellLayerNames[i]); + listVectorNames.Add(workwell); } } - for (int i = 0; i < Utility.instrumenLayerNames.Count; i++) + foreach (string instrument in Utility.instrumenLayerNames) { - if (!listVectorNames.Contains(Utility.instrumenLayerNames[i])) + if (!listVectorNames.Contains(instrument)) { - listVectorNames.Add(Utility.instrumenLayerNames[i]); + listVectorNames.Add(instrument); } } - for (int i = 0; i < Utility.pipefittingLayerNames.Count; i++) + foreach (string pipefitting in Utility.pipefittingLayerNames) { - if (!listVectorNames.Contains(Utility.pipefittingLayerNames[i])) + if (!listVectorNames.Contains(pipefitting)) { - listVectorNames.Add(Utility.pipefittingLayerNames[i]); + listVectorNames.Add(pipefitting); } } FrmExportVector frm = new FrmExportVector(globeControl1, listVectorNames); frm.ShowDialog(); } + /// /// 删除模型 /// @@ -8032,27 +7790,25 @@ private void buttonItemBJ13_Click(object sender, EventArgs e) { LogManager.saveLog(Utility.userName, buttonItemBJ13.Text); - if (globeControl1.Globe.SelObjectCount > 0) - { - for (int i = 0; i < globeControl1.Globe.SelObjectCount; i++) - { - GSOFeature f = null; - GSOLayer layer = null; - globeControl1.Globe.GetSelectObject(i, out f, out layer); - if (f == null) continue; - f.Delete(); - if (layer != null) - globeControl1.Globe.AddToEditHistroy(layer, f, EnumEditType.Delete); - globeControl1.Refresh(); - - } - MessageBox.Show("删除成功!", "提示"); - } - else + var selObjCount = globeControl1.Globe.SelObjectCount; + if (selObjCount == 0) { MessageBox.Show("请选中要删除的模型!", "提示"); + return; } + for (int i = 0; i < selObjCount; i++) + { + GSOFeature f; + GSOLayer layer; + globeControl1.Globe.GetSelectObject(i, out f, out layer); + if (f == null) continue; + f.Delete(); + if (layer != null) + globeControl1.Globe.AddToEditHistroy(layer, f, EnumEditType.Delete); + globeControl1.Refresh(); + } + MessageBox.Show("删除成功!", "提示"); globeControl1.Globe.Action = EnumAction3D.ActionNull; } @@ -8118,6 +7874,7 @@ toolStripNumbers.Text = "红线审核 |共有:" + table.Rows.Count + "条"; toolStripDropDownButton3.Visible = true; } + /// /// 主窗体 下方的工具条中的 导出.xls文件 按钮事件处理 /// @@ -8127,24 +7884,28 @@ { if (dataGridViewX1.Rows.Count != 0) { - string strSaveFile = string.Empty; - SaveFileDialog savefiledialog = new SaveFileDialog(); - savefiledialog.Filter = "Excel文件|*.xls,*.xlsx"; - savefiledialog.AddExtension = true; - savefiledialog.FileName = "红线审核"; - if (savefiledialog.ShowDialog() == DialogResult.OK) - strSaveFile = savefiledialog.FileName; - else return; - - ExpEXCEL.ExpToExcel(dataGridViewX1, strSaveFile, "红线审核", lineStruct, featsList); - MessageBox.Show("导出成功!"); - } - else - { MessageBox.Show("表格内容为空!", "提示"); + return; } + string strSaveFile; + SaveFileDialog savefiledialog = new SaveFileDialog(); + savefiledialog.Filter = "Excel文件|*.xls,*.xlsx"; + savefiledialog.AddExtension = true; + savefiledialog.FileName = "红线审核"; + if (savefiledialog.ShowDialog() == DialogResult.OK) + strSaveFile = savefiledialog.FileName; + else return; + + ExpEXCEL.ExpToExcel(dataGridViewX1, strSaveFile, "红线审核", lineStruct, featsList); + MessageBox.Show("导出成功!"); + } + /// + /// 双屏对比的地面透明度设置 + /// + /// + /// private void sliderItem2_ValueChanged(object sender, EventArgs e) { LogManager.saveLog(Utility.userName, sliderItem2.Text); @@ -8155,7 +7916,7 @@ { layer.Opaque = 100 - sliderItem2.Value; } - layer = globeControl2.Globe.Layers.GetLayerByCaption("180fd");//("180fd"); + layer = globeControl2.Globe.Layers.GetLayerByCaption(Utility.roadLayerName);//("180fd"); if (layer != null) { layer.Opaque = 100 - sliderItem2.Value; @@ -8554,7 +8315,7 @@ LogManager.saveLog(Utility.userName, buttonItem8.Text); int width = Width; - FrmCompareFeature.ShowForm(globeControl1, globeControl2, layerTemp, layerTemp2, width); + FrmCompareFeature.ShowForm(globeControl1, globeControl2, width); } /// /// 红线审核导出图片 @@ -8690,7 +8451,6 @@ private void btn_role_resc_Click(object sender, EventArgs e) { - LogManager.saveLog(Utility.userName, btn_role_resc.Text); if (FrmRoleRescManager.IS_OPEN) return; @@ -8708,7 +8468,8 @@ frm.ShowDialog(); } } -//文档管理 操作 + + //文档管理 操作 private void btn_document_info_Click(object sender, EventArgs e) { @@ -8919,11 +8680,9 @@ } private void pictureBox1_Paint(object sender, PaintEventArgs e) - { - int Width = this.Width; + { string welcomeUser = "欢迎您:" + Utility.userName; - Graphics g = e.Graphics; - g.DrawString(welcomeUser, new Font("宋体", 12), new SolidBrush(Color.Black), Width - 180, 50); + e.Graphics.DrawString(welcomeUser, new Font("宋体", 12), new SolidBrush(Color.Black), Width - 180, 50); } } diff --git a/ClassDoubleScreenCompare.cs b/ClassDoubleScreenCompare.cs new file mode 100644 index 0000000..f2935da --- /dev/null +++ b/ClassDoubleScreenCompare.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using GeoScene.Globe; +using GeoScene.Data; +using GeoScene.Engine; +using System.Drawing; + +namespace Cyberpipe +{ + class ClassDoubleScreenCompare + { + public static GSOFeature getSameFeatureFromOtherGlobe(GSOFeature feature, + GSOGlobeControl globeControl1, GSOGlobeControl globeControl2,double bufferWidth,GSOGeoPolygon3D resPolygon) + { + GSOLayer layer; + GSOFeatures features = new GSOFeatures(); + + if (!feature.Dataset.Caption.StartsWith("施工")) + { + layer = feature.Dataset.Caption == "供电管线" + ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") + : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(feature, fs[i], globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + else + { + layer = feature.Dataset.Caption == "施工电力管线" + ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") + : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(fs[i], feature, globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + + return getMostSimilarFeatureFromFeatures(feature, features); + + } + + + private static GSOFeature getMostSimilarFeatureFromFeatures(GSOFeature feature, GSOFeatures features) + { + double maxLength = 0; + GSOFeature f = new GSOFeature(); + GSOGeoPolyline3D line = feature.Geometry as GSOGeoPolyline3D; + + if (features.Length == 0) return null; + if (features.Length == 1) + { + f = features[0]; + f.HighLight = true; + } + else + { + for (int m = 0; m < features.Length; m++) + { + GSOGeoPolyline3D tempSGLine = features[m].Geometry as GSOGeoPolyline3D; + + double tempLength = tempSGLine.GetSpaceLength(false, 6378137); + double lengthAbs = Math.Abs(tempLength - line.GetSpaceLength(false, 6378137)); + if (m == 0) + { + f = features[0]; + f.HighLight = true; + maxLength = lengthAbs; + } + else if (lengthAbs < maxLength) + { + f = features[m]; + f.HighLight = true; + maxLength = lengthAbs; + } + } + } + return f; + } + + private static bool isSameFeature(GSOFeature feature1, GSOFeature feature2, GSOLayer layer, double bufferWidth) + { + GSOGeoPolyline3D line = feature1.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = line.CreateBuffer(bufferWidth * 2, true, 5, true, false); + + if (bufferPolygon == null) return false; + + GSOFeatures featuresInLayer = layer.FindFeaturesInPolygon(bufferPolygon, true); + + if (featuresInLayer == null || featuresInLayer.Length <= 0) + return false; + + for (int i = 0; i < featuresInLayer.Length; i++) + { + if (featuresInLayer[i].Name == feature2.Name) + { + return true; + break; + } + } + return false; + } + + private static bool isSimilarFeature(GSOFeature srcFeature, GSOFeature dscFeature, + GSOGlobeControl globeControl1,GSOGlobeControl globeControl2,double bufferWidth) + { + GSOLayer dscLayer = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); + GSOLayer srcLayer = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); + + if (!isSameFeature(srcFeature, dscFeature, dscLayer, bufferWidth) + && !isSameFeature(dscFeature, srcFeature, srcLayer, bufferWidth)) + return false; + return true; + } + + public static void CalculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2, + out double horizonDistance, out double verticalDistance, GSOGlobeControl globeControl1, GSOGlobeControl globeControl2) + { + GSOPoint3d pntIntersect1 = new GSOPoint3d(); + GSOPoint3d pntIntersect2 = new GSOPoint3d(); + GSOPoint3d pntProIntersect1 = new GSOPoint3d(); + GSOPoint3d pntProIntersect2 = new GSOPoint3d(); + + verticalDistance = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, verticalDistance, true, "垂直", globeControl1, globeControl2); + + horizonDistance = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, horizonDistance, true, "水平", globeControl1, globeControl2); + + } + + private static GSOPoint3d LabelDistance(GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, + double distance, bool markerVisible, string label,GSOGlobeControl globeControl1,GSOGlobeControl globeControl2) + { + if (pntIntersect1 == null || pntIntersect2 == null) + return new GSOPoint3d(); + GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); + GSOPoint3ds point3ds = new GSOPoint3ds(); + point3ds.Add(pntIntersect1); + point3ds.Add(pntIntersect2); + disline.AddPart(point3ds); + + GSOGeoMarker dismarker = new GSOGeoMarker(); + GSOFeature marker = null; + GSOFeature line = null; + createLineStyle(out marker, out line, disline, pntIntersect1, pntIntersect2, distance, label, dismarker); + + line.Visible = marker.Visible = markerVisible; + globeControl1.Globe.MemoryLayer.AddFeature(line); + globeControl1.Globe.MemoryLayer.AddFeature(marker); + + globeControl2.Globe.MemoryLayer.AddFeature(line); + globeControl2.Globe.MemoryLayer.AddFeature(marker); + + return dismarker.Position; + } + + private static void createLineStyle(out GSOFeature marker, out GSOFeature line, GSOGeoPolyline3D disline, + GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) + { + GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 + style.LineColor = Color.Red; + style.LineWidth = 5; //设置线的宽度为5 + style.VertexVisible = true; //显示线的节点 + disline.Style = style; //把风格添加到线上 + disline.AltitudeMode = EnumAltitudeMode.Absolute; + line = new GSOFeature(); + line.Geometry = disline; + + dismarker.X = pntIntersect1.X; + dismarker.Y = pntIntersect1.Y; + dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; + dismarker.Text = label + distance.ToString("0.00") + "米"; + dismarker.AltitudeMode = EnumAltitudeMode.Absolute; + + GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); + GSOTextStyle styleText = new GSOTextStyle(); + styleText.IsSizeFixed = true; + styleText.ForeColor = Color.Red; + styleText.FontSize = 20; + styleMarker.TextStyle = styleText; + dismarker.Style = styleMarker; + + marker = new GSOFeature(); + marker.Geometry = dismarker; + } + + } +} diff --git a/Cyberpipe.csproj b/Cyberpipe.csproj index d8aa9c8..bcce54d 100644 --- a/Cyberpipe.csproj +++ b/Cyberpipe.csproj @@ -203,6 +203,7 @@ + @@ -1143,6 +1144,7 @@ SysRescInfoManager.cs + True True diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 123caf1..2c45db6 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -258,42 +258,25 @@ for (int i = 0; i < scLayer.GetAllFeatures().Length; i++) { GSOFeature scFeature = scLayer.GetAt(i); - if (scFeature.GetFieldAsString("所属道路") == road) + if (scFeature.GetFieldAsString("所属道路") != road) continue; + GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + + GSOFeature sgFeature = null; + GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); + + //**判断同一个Feature + if (sgFeatures.Length >= 1) { - GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); - GSOFeature sgFeature = null; - GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); - - //**判断同一个Feature - if (sgFeatures.Length >= 1) + if (sgFeature != null) { - sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); + GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; + double horizonDistance, verticalDistance; - if (sgFeature != null) - { - GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; - double horizonDistance, verticalDistance; - - CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); - GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); - } - else - { - scFeature.HighLight = true; - DataRow dr = dt.NewRow(); - dr[0] = scLayer.Caption; - dr[1] = scFeature.GetFieldAsString("编号"); - dr[2] = sgLayer.Caption; - dr[3] = "无"; - dr[4] = "无"; - dr[5] = "0.02"; - dr[6] = "无"; - dr[7] = "0.02"; - dr[8] = "未设计管段"; - dt.Rows.Add(dr); - } + CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); + GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); } else { @@ -311,6 +294,21 @@ dt.Rows.Add(dr); } } + else + { + scFeature.HighLight = true; + DataRow dr = dt.NewRow(); + dr[0] = scLayer.Caption; + dr[1] = scFeature.GetFieldAsString("编号"); + dr[2] = sgLayer.Caption; + dr[3] = "无"; + dr[4] = "无"; + dr[5] = "0.02"; + dr[6] = "无"; + dr[7] = "0.02"; + dr[8] = "未设计管段"; + dt.Rows.Add(dr); + } } } /// diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index 53946c0..fe32265 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -4,7 +4,7 @@ using GeoScene.Globe; namespace Cyberpipe -{ +{ //本类作用为:辅助GlobalControl上Feature的统计分析工具类 class FeatureStatisticsService { /// @@ -60,8 +60,8 @@ /// /// /// - /// - /// + /// + /// /// /// public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) @@ -74,6 +74,7 @@ for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; double length = line.GetSpaceLength(true, 6378137); totalLength += length; ncount += 1; @@ -114,7 +115,7 @@ for (int i = 0; i < feats.Length; i++) { double radius = feats[i].GetFieldAsDouble(fieldName); - if (radius >= min && radius <= max) + if (radius >= minValue && radius <= maxValue) { result.Add(feats[i]); } @@ -148,23 +149,22 @@ lstDiameter.Sort(); if (lstDiameter.Count > 0) { - for (int m = 0; m < lstDiameter.Count; m++) + foreach (float diameter in lstDiameter) { double totalLength = 0.00; int ncount = 0; for (int j = 0; j < feats.Length; j++) { - if (feats[j].GetFieldAsFloat("管径_毫米") == lstDiameter[m]) - { - GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } + if (Math.Abs(feats[j].GetFieldAsFloat("管径_毫米") - diameter) > 0.00001) continue; + GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = lstDiameter[m].ToString(); + featuresClass.groupFieldValue = diameter.ToString(); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -191,13 +191,13 @@ //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); - for (int j = 0; j < accessStrs.Length; j++) + foreach (string accssname in accessStrs) { - GSOFeatures feats = null; - int ncount = 0; + GSOFeatures feats; + int ncount; if (polygon == null) { - feats = flayer.GetFeatureByFieldValue("附属物名称", accessStrs[j], true); + feats = flayer.GetFeatureByFieldValue("附属物名称", accssname, true); ncount = feats.Length; } else @@ -207,14 +207,14 @@ //过滤 for (int n = 0; n < feats.Length; n++) { - if (feats[n].GetFieldAsString("附属物名称").Contains(accessStrs[j])) newfeats.Add(feats[n]); + if (feats[n].GetFieldAsString("附属物名称").Contains(accssname)) newfeats.Add(feats[n]); } ncount = newfeats.Length; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); - featuresClass.layerName = accessStrs[j]; + featuresClass.layerName = accssname; featuresClass.ncount = ncount; result.Add(featuresClass); @@ -303,6 +303,26 @@ if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); - } + } + + + /// + /// 获取globeControl上选中的管线,如果返回空则没有选中的管线 + /// + /// 地球引擎 + /// 返回一根线 + public static GSOFeature GetSelectedPipeline(GSOGlobeControl globeControl) + { + GSOFeature resFeature; + if (globeControl.Globe.SelObjectCount < 1) return null; + GSOLayer resLayer; + globeControl.Globe.GetSelectObject(0, out resFeature, out resLayer); + if (resFeature == null) return null; + + GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; + if (line1 == null) return null; + GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; + return pipeStyle1 == null ? null : resFeature; + } } } diff --git a/FrmCompareFeature.cs b/FrmCompareFeature.cs index a05e8e7..ac622c4 100644 --- a/FrmCompareFeature.cs +++ b/FrmCompareFeature.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Data; using System.Drawing; using System.Windows.Forms; @@ -11,26 +10,16 @@ { public partial class FrmCompareFeature : Office2007Form { - GSOFeature srcFeature; - GSOFeature dscFeature; - GSOGlobeControl globeControl1; - GSOGlobeControl globeControl2; - bool isSamePolyline; - - GSOLayer layerTemp; - GSOLayer layerTemp2; - GSOFeature new_feat; + private GSOFeature srcFeature, dscFeature; + private GSOGlobeControl globeControl1, globeControl2; GSOGeoPolygon3D resPolygon; - static FrmCompareFeature frm; - public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2, int width) + public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, int width) { if (frm == null) { - frm = new FrmCompareFeature(_globeControl1, _globeControl2, _layerTemp, _layerTemp2); - + frm = new FrmCompareFeature(_globeControl1, _globeControl2); frm.Location = new Point((width - frm.Width)/2, 50); frm.Show(_globeControl1.Parent); } @@ -41,8 +30,7 @@ } } - public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2) + public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2) { globeControl1 = _globeControl1; globeControl2 = _globeControl2; @@ -50,99 +38,35 @@ globeControl1.Globe.Action = EnumAction3D.SelectObject; globeControl2.Globe.Action = EnumAction3D.SelectObject; - layerTemp = _layerTemp; - layerTemp2 = _layerTemp2; globeControl1.MouseClick += globeControl1_MouseClick; globeControl2.MouseClick += globeControl2_MouseClick; } + private void invalParam() + { + if (srcFeature == null || dscFeature == null) + { + MessageBox.Show("请选择要对比的管段!", "提示"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) + { + MessageBox.Show("请选择同种类型图层!"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type || + srcFeature.Geometry.Type != EnumGeometryType.GeoPolyline3D) + return; + } + private void buttonAnalysis_Click(object sender, EventArgs e) { + invalParam(); + dataGridViewX1.DataSource = null; - - double bufferWidth = Convert.ToDouble(textBox1.Text); - - if (srcFeature == null || dscFeature == null) - MessageBox.Show("请选择要对比的管段!", "提示"); - else - { - if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) - MessageBox.Show("请选择同种类型图层!"); - else if (srcFeature.Geometry.Type == dscFeature.Geometry.Type && - srcFeature.Geometry.Type == EnumGeometryType.GeoPolyline3D) - { - lineLayerCompare(srcFeature, dscFeature, bufferWidth); - if (!isSamePolyline) - MessageBox.Show("实测管段与施工管段非同一条管段,请选择同一管段进行比较!", "提示"); - else - { - lineFeatureCompare(srcFeature, dscFeature); - globeControl1.Globe.Action = EnumAction3D.ActionNull; - globeControl2.Globe.Action = EnumAction3D.ActionNull; - } - } - else - MessageBox.Show("无法处理该类型图层!"); - } + lineFeatureCompare(srcFeature, dscFeature); } - - /// - /// 在容差范围内判断是否同一根管段 - /// - /// - /// - /// - /// - private bool lineLayerCompare(GSOFeature srcFeature, GSOFeature dscFeature, double bufferWidth) - { - isSamePolyline = false; - - GSOGeoPolyline3D srcLine = srcFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D srcBufferPolygon = srcLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer dsc = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); - - if (srcBufferPolygon != null) - { - GSOFeatures featuresInSrcLayer = dsc.FindFeaturesInPolygon(srcBufferPolygon, true); - - if (featuresInSrcLayer != null && featuresInSrcLayer.Length > 0) - { - for (int i = 0; i < featuresInSrcLayer.Length; i++) - { - if (featuresInSrcLayer[i].Name == dscFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D dscBufferPolygon = dscLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer src = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); - - if (dscBufferPolygon != null) - { - GSOFeatures featuresInDscLayer = src.FindFeaturesInPolygon(dscBufferPolygon, true); - - if (featuresInDscLayer != null && featuresInDscLayer.Length > 0) - { - for (int i = 0; i < featuresInDscLayer.Length; i++) - { - if (featuresInDscLayer[i].Name == srcFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - return isSamePolyline; - } - /// /// 分析两根管段的具体差异 /// @@ -156,8 +80,10 @@ GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; double dscLineLength = dscLine.GetSpaceLength(false, 6378137); - double horizonDistance = calculateDistance(srcLine, dscLine,false); - double verticalDistance = calculateDistance(srcLine, dscLine,true); + double horizonDistance, verticalDistance; + + ClassDoubleScreenCompare.CalculateDistance(srcLine, dscLine, out horizonDistance, + out verticalDistance,globeControl1,globeControl2); DataTable dt = new DataTable(); dt.Columns.Add("数据名称"); @@ -189,6 +115,98 @@ dt.Rows.Add(dscRow); dataGridViewX1.DataSource = dt; + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) + { + globeControl1.Globe.MemoryLayer.RemoveAllFeature(); + globeControl2.Globe.MemoryLayer.RemoveAllFeature(); + + GSOFeature new_feat = new GSOFeature(); + resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); + resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; + new_feat.Geometry = resPolygon; + + globeControl1.Globe.MemoryLayer.AddFeature(new_feat); + globeControl2.Globe.MemoryLayer.AddFeature(new_feat); + + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + public static void clearFeatureHighLight(GSOGlobeControl glb) + { + for (int i = 0; i < glb.Globe.Layers.Count; i++) + { + GSOLayer layer = glb.Globe.Layers[i]; + if (!(layer is GSOFeatureLayer)) continue; + GSOFeatures feats = layer.GetAllFeatures(); + for (int j = 0; j < feats.Length; j++) + { + feats[j].HighLight = false; + } + } + } + + void globeControl1_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl1.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl1.Globe.Action != EnumAction3D.SelectObject || + globeControl1.Globe.SelectedObject == null) + return; + GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + srcFeature = globeControl1.Globe.SelectedObject; + dscFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(srcFeature, + globeControl1,globeControl2,bufferWidth,resPolygon); + + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } + + void globeControl2_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl2.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl2.Globe.Action != EnumAction3D.SelectObject || + globeControl2.Globe.SelectedObject == null) + return; + + GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + dscFeature = globeControl2.Globe.SelectedObject; + srcFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(dscFeature, + globeControl1, globeControl2, bufferWidth, resPolygon); + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } private void FrmCompareFeature_FormClosing(object sender, FormClosingEventArgs e) @@ -198,322 +216,5 @@ frm = null; } - private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) - { - new_feat = new GSOFeature(); - resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); - resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; - new_feat.Geometry = resPolygon; - - layerTemp.AddFeature(new_feat); - layerTemp2.AddFeature(new_feat); - globeControl1.Refresh(); - globeControl2.Refresh(); - } - - private GSOLayer getSameLayer(GSOFeature feature) - { - GSOLayer layer = null; - if (!feature.Dataset.Caption.StartsWith("施工")) - { - layer = feature.Dataset.Caption == "供电管线" - ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") - : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); - } - else - { - layer = feature.Dataset.Caption == "施工电力管线" - ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") - : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); - } - - return layer; - } - - /// - /// 地球1中点击地球2中同步添加缓冲区 - /// - /// - /// - void globeControl1_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl1.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl1.Globe.Action == EnumAction3D.SelectObject && - globeControl1.Globe.SelectedObject != null) - { - GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - addPologyToGlobeControl(line, bufferWidth); - } - - srcFeature = globeControl1.Globe.SelectedObject; - GSOLayer layers = getSameLayer(srcFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = srcFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(srcFeature, features[i], Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - listFeatures.Add(features[i]); - } - calculate(out maxLength, out dscFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - /// - /// 地球2中点击地球1中同步添加缓冲区 - /// - /// - /// - void globeControl2_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl2.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl2.Globe.Action != EnumAction3D.SelectObject || - globeControl2.Globe.SelectedObject == null) - return; - else - { - GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - - addPologyToGlobeControl(line, bufferWidth); - } - - dscFeature = globeControl2.Globe.SelectedObject; - //双屏同时选中同一管段 - GSOLayer layers = getSameLayer(dscFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = dscFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(features[i], dscFeature, Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - { - listFeatures.Add(features[i]); - } - } - calculate(out maxLength, out srcFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - private void calculate(out double maxLength, out GSOFeature feature, GSOFeatures listFeatures, - GSOGeoPolyline3D scLine) - { - maxLength = 0; - feature=new GSOFeature(); - if (listFeatures.Length == 0) - feature = null; - else - { - if (listFeatures.Length == 1) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - } - else - { - for (int m = 0; m < listFeatures.Length; m++) - { - GSOGeoPolyline3D tempSGLine = listFeatures[m].Geometry as GSOGeoPolyline3D; - - double tempLength = tempSGLine.GetSpaceLength(false, 6378137); - double lengthAbs = Math.Abs(tempLength - scLine.GetSpaceLength(false, 6378137)); - if (m == 0) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - maxLength = lengthAbs; - } - else if (lengthAbs < maxLength) - { - feature = listFeatures[m]; - listFeatures[m].HighLight = true; - maxLength = lengthAbs; - } - } - } - } - } - - /// - /// 计算距离 - /// - /// - /// - /// - double calculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2,bool isVertical) - { - GSOPoint3d pntIntersect1 = new GSOPoint3d(); - GSOPoint3d pntIntersect2 = new GSOPoint3d(); - GSOPoint3d pntProIntersect1 = new GSOPoint3d(); - GSOPoint3d pntProIntersect2 = new GSOPoint3d(); - double dDist = 0; - if (isVertical) - { - dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "垂直"); - } - else - { - dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "水平"); - } - - return dDist; - } - - /// - /// 清除所有高亮Feature - /// - /// - private void clearFeatureHighLight(GSOGlobeControl glb1,GSOGlobeControl glb2) - { - layerTemp.RemoveAllFeature(); - layerTemp2.RemoveAllFeature(); - //清除gbl1中高亮 - for (int i = 0; i < glb1.Globe.Layers.Count; i++) - { - GSOLayer layer = glb1.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - //清除gbl2中高亮 - for (int i = 0; i < glb2.Globe.Layers.Count; i++) - { - GSOLayer layer = glb2.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - } - - /// - /// 添加标注 - /// - /// - /// - /// - /// - /// - /// - private GSOPoint3d LabelDistance(GSOLayer markerLayer, GSOLayer markerLayer2, - GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, bool markerVisible,string label) - { - if (pntIntersect1 == null || pntIntersect2 == null) - return new GSOPoint3d(); - GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); - GSOPoint3ds point3ds = new GSOPoint3ds(); - point3ds.Add(pntIntersect1); - point3ds.Add(pntIntersect2); - disline.AddPart(point3ds); - - GSOGeoMarker dismarker = new GSOGeoMarker(); - GSOFeature marker = null; - GSOFeature line = null; - createLineStyle(out marker, out line,disline, pntIntersect1, pntIntersect2, distance, label, dismarker); - - line.Visible = marker.Visible = markerVisible; - markerLayer.AddFeature(line); - markerLayer.AddFeature(marker); - - markerLayer2.AddFeature(line); - markerLayer2.AddFeature(marker); - - return dismarker.Position; - } - /// - /// 控制标注和字体的颜色 - /// - /// - /// - /// - /// - /// - /// - /// - /// - private void createLineStyle(out GSOFeature marker,out GSOFeature line,GSOGeoPolyline3D disline, - GSOPoint3d pntIntersect1,GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) - { - GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 - style.LineColor = Color.Red; - style.LineWidth = 5; //设置线的宽度为5 - style.VertexVisible = true; //显示线的节点 - disline.Style = style; //把风格添加到线上 - disline.AltitudeMode = EnumAltitudeMode.Absolute; - line=new GSOFeature(); - line.Geometry = disline; - - dismarker.X = pntIntersect1.X; - dismarker.Y = pntIntersect1.Y; - dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; - dismarker.Text = label + distance.ToString("0.00") + "米"; - dismarker.AltitudeMode = EnumAltitudeMode.Absolute; - - GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); - GSOTextStyle styleText = new GSOTextStyle(); - styleText.IsSizeFixed = true; - styleText.ForeColor = Color.Red; - styleText.FontSize = 20; - styleMarker.TextStyle = styleText; - dismarker.Style = styleMarker; - - marker=new GSOFeature(); - marker.Geometry = dismarker; - } - } } diff --git a/FrmHotFuncStat.cs b/FrmHotFuncStat.cs index 84131ef..f313b20 100644 --- a/FrmHotFuncStat.cs +++ b/FrmHotFuncStat.cs @@ -58,14 +58,11 @@ DataTable table = OledbHelper.QueryTable(sql); - if (table != null) + if (table == null) return; + for (int i = 0; i < table.Rows.Count; i++) { - for (int i = 0; i < table.Rows.Count; i++) - { - userLists.Items.Add(table.Rows[i][0].ToString()); - } + userLists.Items.Add(table.Rows[i][0].ToString()); } - } //统计结果 private void statBtn_Click(object sender, EventArgs e) diff --git a/FrmLayerControl.cs b/FrmLayerControl.cs index 8586041..8fbce97 100644 --- a/FrmLayerControl.cs +++ b/FrmLayerControl.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Windows.Forms; using DevComponents.DotNetBar; using GeoScene.Data; @@ -13,10 +14,10 @@ GSOGlobeControl globeControl1; GSOGlobeControl globeControl2; - TreeNode terrainManagerNode = null; - TreeNode layerManagerNode = null; - TreeNode terrainManagerNode1 = null; - TreeNode layerManagerNode1 = null; +// TreeNode terrainManagerNode = null; +// TreeNode layerManagerNode = null; +// TreeNode terrainManagerNode1 = null; +// TreeNode layerManagerNode1 = null; public FrmLayerControl(GSOGlobeControl ctl1,GSOGlobeControl ctl2) { @@ -25,14 +26,14 @@ globeControl2 = ctl2; } - private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) - { - treeNode=new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - } +// private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) +// { +// treeNode=new TreeNode(); +// treeNode.ImageIndex = 0; +// treeNode.SelectedImageIndex = 0; +// treeNode.Checked = false; +// treeNode.Text = strTreeNodeText; +// } // private void initTreeView() // { @@ -51,234 +52,258 @@ // layerTree2.Nodes.Add(terrainManagerNode); // } - #region wxl重构树形结构代码 + + - private TreeNode treeNode(string strTreeNodeText) - { - TreeNode treeNode = new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - return treeNode; - } -// private void appendToParent(TreeNodeCollection treeNodeCollection, ) - #endregion - private void initTreeView() +// private void initNode(string nodeName) +// { +// TreeNode nodeGroupElse1 = new TreeNode(); +// nodeGroupElse1.Text = nodeName; +// layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); +// +// TreeNode nodeGroupElse = new TreeNode(); +// nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; +// layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); +// } + +// private void initTreeNode(XmlNodeList Params) +// { +// foreach (XmlNode paramsNode in Params) //layers +// { +// foreach (XmlNode layerNode in paramsNode) //layer +// { +// initNode(layerNode.Attributes["label"].Value); +// } +// } +// +// initNode("基础图层"); +// initNode("其他"); +// } + +// private void FrmLayerControl_Load(object sender, EventArgs e) +// { +// +// initTreeView(); +// try +// { +// XmlDocument doc = new XmlDocument(); +// doc.Load(Application.StartupPath + "\\双屏设置.xml"); +// XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// +// initTreeNode(Params); +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// +// RefreshLayerAndTerrainTree(); +// } + private void FrmLayerControl_Load(object sender, EventArgs e) { layerTree1.Nodes.Clear(); layerTree2.Nodes.Clear(); - - //加载layertree2 - initLayerTree(out layerManagerNode1, "图层管理"); - layerTree1.Nodes.Add(layerManagerNode1); - initLayerTree(out terrainManagerNode1, "地形管理"); - layerTree1.Nodes.Add(terrainManagerNode1); - - initLayerTree(out layerManagerNode, "图层管理"); - layerTree2.Nodes.Add(layerManagerNode); - initLayerTree(out terrainManagerNode, "地形管理"); - layerTree2.Nodes.Add(terrainManagerNode); + TreeUtils.InitLayerTree(globeControl1, layerTree1, "实测数据"); + TreeUtils.InitLayerTree(globeControl2, layerTree2, "施工数据"); } - private void initNode(string nodeName) - { - TreeNode nodeGroupElse1 = new TreeNode(); - nodeGroupElse1.Text = nodeName; - layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); + #region wxl重构树形结构代码 - TreeNode nodeGroupElse = new TreeNode(); - nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; - layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); - } + /// + /// 构造tree,最多解析三层,可放在工具类中 - private void initTreeNode(XmlNodeList Params) - { - foreach (XmlNode paramsNode in Params) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - initNode(layerNode.Attributes["label"].Value); - } - } + /// 所属地球 + /// 要加载的树 + /// 数据来源,实测数据/施工数据/规划数据/红线数据,为空则展示全部 +// private void initTree(GSOGlobeControl gsoGlobeControl,TreeView treeView, string viewDatasrc) +// { +// treeView.Nodes.Clear(); +// LayerConfig layerConfig = Utility.layerConfig; +// List datasrcs = layerConfig.datasrcs; +// foreach (DataSrc datasrc in datasrcs) +// { +// if (viewDatasrc != null && !viewDatasrc.Trim().Equals("") && !datasrc.label.Equals(viewDatasrc)) continue; +// TreeNode rootNode = treeView.Nodes.Add(datasrc.label); +// List layerTypes = datasrc.layertypes; +// foreach (LayerType layerType in layerTypes) +// { +// TreeNode secNode = rootNode.Nodes.Add(layerType.label); +// List layers = layerType.layers; +// foreach (Layer layer in layers) +// { +// GSOLayer gsoLayer = gsoGlobeControl.Globe.Layers.GetLayerByCaption(layer.layer); +// if (gsoLayer == null) continue;//将不存在的去除 +// TreeNode node = new TreeNode(); +// node.Tag = gsoLayer; +// node.Text = layer.label; +// node.Checked = gsoLayer.Visible; +// if (gsoLayer.Visible) +// { +// secNode.Checked = true; +// rootNode.Checked = true; +// } +// secNode.Nodes.Add(node); +// } +// } +// } +// } - initNode("基础图层"); - initNode("其他"); - } + #endregion - private void FrmLayerControl_Load(object sender, EventArgs e) - { - initTreeView(); - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(Application.StartupPath + "\\双屏设置.xml"); - XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, +// TreeView layerTree) +// { +// try +// { +// for (int i = 0; i < nLayerCount; i++) +// { +// GSOLayer layer = globcontrol.Globe.Layers[i]; +// if (layer == null) continue; +// string layerName = layer.Name; +// TreeNode node = new TreeNode(); +// node.Tag = layer; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = layer.Caption; +// node.Checked = layer.Visible; +// +// bool isContains = false; +// for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) +// { +// if (!layerName.Contains("fttp:")) +// { +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || +// layerName.Contains("施工") || +// layerName.Contains("规划")) continue; +// break; +// case "layerTree2": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[j].Nodes.Add(node); +// isContains = true; +// break; +// } +// else +// { +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); +// isContains = true; +// break; +// } +// } +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || +// layerName.Contains("标注") || +// isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || +// layerName.Contains("景观") || layerName.Contains("红线")) +// continue; +// break; +// case "layerTree2": +// if (isContains != false || layerName.Contains("tempLgdData2")) +// continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); +// } +// +// for (int i = 0; i < nTerrainCount; i++) +// { +// GSOTerrain terrain = globcontrol.Globe.Terrains[i]; +// if (terrain == null) continue; +// TreeNode node = new TreeNode(); +// node.Tag = terrain; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = terrain.Caption; +// node.Checked = terrain.Visible; +// switch (layerTree.Name) +// { +// case "layerTree1": +// terrainManagerNode1.Nodes.Add(node); +// break; +// case "layerTree2": +// terrainManagerNode.Nodes.Add(node); +// break; +// default: +// break; +// } +// } +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// } - initTreeNode(Params); - } - catch (Exception ex) - { - LogError.PublishError(ex); - } +// private void initTreeNodeCheckedStatus(TreeView layerTreeView) +// { +// //节点选中状态控制 +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// if (node.Checked != true) continue; +// layerTreeView.Nodes[0].Checked = true; +// break; +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOTerrain layer = childNode.Tag as GSOTerrain; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// } - RefreshLayerAndTerrainTree(); - } - - private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, - TreeView layerTree) - { - try - { - for (int i = 0; i < nLayerCount; i++) - { - GSOLayer layer = globcontrol.Globe.Layers[i]; - if (layer == null) continue; - string layerName = layer.Name; - TreeNode node = new TreeNode(); - node.Tag = layer; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = layer.Caption; - node.Checked = layer.Visible; - - bool isContains = false; - for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) - { - if (!layerName.Contains("fttp:")) - { - switch (layerTree.Name) - { - case "layerTree1": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || - layerName.Contains("施工") || - layerName.Contains("规划")) continue; - break; - case "layerTree2": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[j].Nodes.Add(node); - isContains = true; - break; - } - else - { - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); - isContains = true; - break; - } - } - switch (layerTree.Name) - { - case "layerTree1": - if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || - layerName.Contains("标注") || - isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || - layerName.Contains("景观") || layerName.Contains("红线")) - continue; - break; - case "layerTree2": - if (isContains != false || layerName.Contains("tempLgdData2")) - continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); - } - - for (int i = 0; i < nTerrainCount; i++) - { - GSOTerrain terrain = globcontrol.Globe.Terrains[i]; - if (terrain == null) continue; - TreeNode node = new TreeNode(); - node.Tag = terrain; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = terrain.Caption; - node.Checked = terrain.Visible; - switch (layerTree.Name) - { - case "layerTree1": - terrainManagerNode1.Nodes.Add(node); - break; - case "layerTree2": - terrainManagerNode.Nodes.Add(node); - break; - default: - break; - } - } - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - - private void initTreeNodeCheckedStatus(TreeView layerTreeView) - { - //节点选中状态控制 - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - if (node.Checked != true) continue; - layerTreeView.Nodes[0].Checked = true; - break; - } - - foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOTerrain layer = childNode.Tag as GSOTerrain; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - } - - void exPandTreeNode() - { - layerManagerNode1.Expand(); - terrainManagerNode1.Expand(); - layerManagerNode.Expand(); - terrainManagerNode.Expand(); - } +// void exPandTreeNode() +// { +// layerManagerNode1.Expand(); +// terrainManagerNode1.Expand(); +// layerManagerNode.Expand(); +// terrainManagerNode.Expand(); +// } /// /// 刷新节点树 /// - private void RefreshLayerAndTerrainTree() - { - int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 - int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 - addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); - initTreeNodeCheckedStatus(layerTree1); - - int nLayerCount = globeControl2.Globe.Layers.Count; - int nTerrainCount = globeControl2.Globe.Terrains.Count; - addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); - initTreeNodeCheckedStatus(layerTree2); - - // 展开 - exPandTreeNode(); - } +// private void RefreshLayerAndTerrainTree() +// { +// int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 +// int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 +// addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); +// initTreeNodeCheckedStatus(layerTree1); +// +// int nLayerCount = globeControl2.Globe.Layers.Count; +// int nTerrainCount = globeControl2.Globe.Terrains.Count; +// addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); +// initTreeNodeCheckedStatus(layerTree2); +// +// // 展开 +// exPandTreeNode(); +// } /// /// 节点树复选框选中状态改变事件处理 @@ -289,144 +314,132 @@ { if (e.Action != TreeViewAction.Unknown) { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } + TreeUtils.TreeNodeCheckedChange(globeControl2,e.Node); + } + } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree2(e.Node, e.Node.Checked); + private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) + { + if (e.Action != TreeViewAction.Unknown) + { + TreeUtils.TreeNodeCheckedChange(globeControl1, e.Node); } } + + +// private void layerTree2_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree2(e.Node, e.Node.Checked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree1(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree1(childNode, isChecked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree2(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree2(childNode, isChecked); +// } +// } /// /// 节点树选中状态改变事件 /// /// /// - private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) - { - if (e.Action != TreeViewAction.Unknown) - { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } +// private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree1(e.Node, e.Node.Checked); +// } +// } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree1(e.Node, e.Node.Checked); - } - } - /// - /// 改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 - /// - /// - private void CheckParentNode(TreeNode curNode) - { - bool bChecked = false; - - if (curNode.Parent != null) - { - foreach (TreeNode node in curNode.Parent.Nodes) - { - if (node.Checked) - { - bChecked = true; - break; - } - } - if (bChecked) - { - curNode.Parent.Checked = true; - CheckParentNode(curNode.Parent); - } - else - { - curNode.Parent.Checked = false; - CheckParentNode(curNode.Parent); - } - } - } } } diff --git a/FrmMetadata.cs b/FrmMetadata.cs index 4d0d5cb..bb7c46c 100644 --- a/FrmMetadata.cs +++ b/FrmMetadata.cs @@ -12,12 +12,8 @@ { public partial class FrmMetadata : Office2007Form { - List pipelineLayerNames = new List();//线图层名称 - List workwellLayerNames = new List();//工井图层名称 - List valueLayerNames = new List();//阀门图层名称 - List instrumenLayerNames = new List();//附属物图层名称 - string filename = Utility.filename; - DataSet dataSet = new DataSet(); + + bool selectedLayer; public FrmMetadata() @@ -25,308 +21,33 @@ InitializeComponent(); loadTreeView(layerTree); } - private void FrmMetadata_Load(object sender, EventArgs e) - { - //this.ntLblC.Text = "nn"; - // loadTreeView(layerTree); - } private void loadTreeView(TreeView tv)//构建图层树 { - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - //tv.ShowPlusMinus = false; - - //tv.Nodes.Clear(); - tv.ShowLines = true; - // tv.ImageList = imageList1; - tv.CheckBoxes = false; - #region 三级 - - //foreach (XmlNode paramsNode in Params1) //layers - //{ - // foreach (XmlNode layerNode in paramsNode) //layer - // { - // TreeNode nodelayer = new TreeNode(); - // string layerName = layerNode.Attributes["label"].Value; - // nodelayer.Text = layerName; - - // if (layerNode.HasChildNodes != false) - // { - // tv.Nodes.Add(nodelayer); - // foreach (XmlNode layerchildNode in layerNode) //layerchild - // { - // if (layerchildNode.Name == "layerchild") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["type"].Value; - // string layerchildName = layerchildNode.Attributes["label"].Value; - // if (layerType == "locaserver") - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - - // } - // else - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // if (layerchildNode.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = boollayer; - // nodelayer.Nodes.Add(nodelayerchild); - // } - // } - // else if (layerchildNode.Name == "layertype") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["label"].Value; - // nodelayerchild.Text = layerType; - // nodelayerchild.Tag = layerType; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - // if (layerchildNode.HasChildNodes == true) - // { - // foreach (XmlNode childNodeLayer in layerchildNode) - // { - // TreeNode nodelayerchild1 = new TreeNode(); - // string layerName1 = childNodeLayer.Attributes["layer"].Value; - // string layerchildName = childNodeLayer.Attributes["label"].Value; - // string layerType1 = childNodeLayer.Attributes["type"].Value; - // if (childNodeLayer.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild1.Text = layerchildName; - // nodelayerchild1.Tag = layerType1 + "|" + layerName1; - // nodelayerchild1.Checked = boollayer; - // nodelayerchild.Nodes.Add(nodelayerchild1); - // } - // } - // } - - // } - // } - // else - // { - // tv.Nodes.Add(nodelayer); - // } - // } - - //} - - #endregion - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - TreeNode nodelayer = new TreeNode(); - string layerName = layerNode.Attributes["label"].Value; - nodelayer.Text = layerName; - - if (layerNode.HasChildNodes) - { - tv.Nodes.Add(nodelayer); - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - if (layerchildNode.Name == "layerchild") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["type"].Value; - string layerchildName = layerchildNode.Attributes["label"].Value; - if (layerType == "locaserver") - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - - } - else - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - if (layerchildNode.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - //nodelayerchild.Checked = boollayer; - nodelayer.Nodes.Add(nodelayerchild); - } - } - else if (layerchildNode.Name == "layertype") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["label"].Value; - nodelayerchild.Text = layerType; - nodelayerchild.Tag = layerType; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode) - { - if (childNodeLayer.HasChildNodes) - { - TreeNode nodelayerchild2 = new TreeNode(); - string layer = childNodeLayer.Attributes["label"].Value; - nodelayerchild2.Text = layer; - nodelayerchild2.Tag = layer; - nodelayerchild2.Checked = true; - nodelayerchild.Nodes.Add(nodelayerchild2); - foreach (XmlNode n in childNodeLayer) - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = n.Attributes["layer"].Value; - string layerchildName = n.Attributes["label"].Value; - string layerType1 = n.Attributes["type"].Value; - if (n.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (n.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (n.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (n.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild2.Nodes.Add(nodelayerchild1); - - } - } - else - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = childNodeLayer.Attributes["layer"].Value; - string layerchildName = childNodeLayer.Attributes["label"].Value; - string layerType1 = childNodeLayer.Attributes["type"].Value; - if (childNodeLayer.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild.Nodes.Add(nodelayerchild1); - - } - } - } - } - - } - } - else - { - tv.Nodes.Add(nodelayer); - } - } - - } - if (tv.Nodes.Count > 0) - { - //tv.Nodes[0].Expand(); - if (tv.Nodes.Count > 0) - { - foreach (TreeNode node in tv.Nodes) - { - //node.Expand(); - } - } - } - //tv.ExpandAll(); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } + //tv.ShowPlusMinus = false; + //tv.Nodes.Clear(); + // tv.ImageList = imageList1; + tv.ShowLines = true; + tv.CheckBoxes = false; + TreeUtils.InitLayerTree(null, tv, null); } - + /// + /// 点击父节点则展开,点击子节点则编辑元数据 + /// + /// + /// private void layerTree_AfterSelect(object sender, TreeViewEventArgs e) { - String layername = layerTree.SelectedNode.Text; - if (layerTree.SelectedNode.GetNodeCount(true) == 0) { - searchLayerInfo(layername); - - selectedLayer = true; - clearBtn.Hide(); - completeBtn.Hide(); + String layername = e.Node.Text; + if (e.Node.GetNodeCount(true) != 0) + { //点击父节点,则展开 + e.Node.Expand(); + return; } + searchLayerInfo(layername); + selectedLayer = true; + clearBtn.Hide(); + completeBtn.Hide(); } //查询元数据 private void searchLayerInfo(String layername) { @@ -335,8 +56,6 @@ + " casic_metadatalayer where casic_metadatacontent.\"LAYERID\" = casic_metadatalayer.\"LAYERID\" and casic_metadatalayer.\"LAYERNAME\"='" + layername+"'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; - if (table != null && table.Rows.Count > 0) { groupBox1.Text = layername; @@ -400,8 +119,6 @@ //判断此时layerTree有没有选中的图层 if (selectedLayer)//有选中的图层,获得其名 { - string name = layerTree.SelectedNode.Text; - OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "支持格式(*.xml)|*.xml|XML数据(*.xml)|"; dlg.Multiselect = true; @@ -419,31 +136,24 @@ //读入元数据 private void AddXMLMDdata(string strFilePath) { - try - { - dataSet.Clear(); //清空数据集中的内容 - dataSet.ReadXml(strFilePath); //读取XML文件中的内容 + DataSet dataSet = new DataSet(); + dataSet.ReadXml(strFilePath); //读取XML文件中的内容 - //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); - string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); - string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); - string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); - string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); + //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); + string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); + string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); + string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); + string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); - //this.titleLbl.Text = attrtitle; - consLblC.Text = attrcons; - descLblC.Text = attrdesc; - authorLblC.Text = attrauthor; - ntLblC.Text = attrnt; - //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); + //this.titleLbl.Text = attrtitle; + consLblC.Text = attrcons; + descLblC.Text = attrdesc; + authorLblC.Text = attrauthor; + ntLblC.Text = attrnt; + //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); - completeBtn.Visible = true; - //this.clearBtn.Visible = true; - } - catch (Exception e) - { - - } + completeBtn.Visible = true; + //this.clearBtn.Visible = true; } //新建/编辑元数据 private void editBtn_Click(object sender, EventArgs e) @@ -509,11 +219,7 @@ string sql = "select \"LAYERID\" from casic_metadatalayer where \"LAYERNAME\" = '" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - if (table != null && table.Rows.Count > 0)//已有该图层,属于编辑 - { - return false; - } - return true; + return table == null || table.Rows.Count <= 0; } //保存元数据 private void saveData(String method,String layername,String cons,String desc,String author,String nt) { @@ -539,17 +245,16 @@ string insertSQL = "insert into casic_metadatalayer values ('" + layerid + "','" + layername + "')";//+ string insertSQL2 = "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','" + desc + "','" + author + "','" + nt + "')"; // "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','"+desc+"','"+author+"','"+nt+"')"; - if ((OledbHelper.sqlExecuteNonQuery(insertSQL) > 0)&&(OledbHelper.sqlExecuteNonQuery(insertSQL2)>0)) - { - MessageBox.Show("保存元数据成功!"); + if ((OledbHelper.sqlExecuteNonQuery(insertSQL) <= 0) || + (OledbHelper.sqlExecuteNonQuery(insertSQL2) <= 0)) return; + MessageBox.Show("保存元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } else { //更新 string layeridSQL = "select layerid from casic_metadatalayer where LAYERNAME='"+layername+"'"; @@ -561,16 +266,14 @@ + "',casic_metadatacontent.MDAUTHOR ='" + author.Trim() + "',casic_metadatacontent.NT ='" + nt.Trim() + "' where casic_metadatacontent.LAYERID='" + layerid + "'"; - if (OledbHelper.sqlExecuteNonQuery(updateSQL) > 0) - { - MessageBox.Show("更新元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + if (OledbHelper.sqlExecuteNonQuery(updateSQL) <= 0) return; + MessageBox.Show("更新元数据成功!"); + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } } diff --git a/FrmMetadataStat.cs b/FrmMetadataStat.cs index cb19f84..c3c1359 100644 --- a/FrmMetadataStat.cs +++ b/FrmMetadataStat.cs @@ -2,16 +2,16 @@ using System.Collections; using System.Collections.Generic; using System.Data; +using System.Linq; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; -using System.Xml; using DevComponents.DotNetBar; namespace Cyberpipe { public partial class FrmMetadataStat : Office2007Form { - Dictionary dic = new Dictionary(); + public FrmMetadataStat() { InitializeComponent(); @@ -22,7 +22,7 @@ string sql = "select LAYERNAME from casic_metadataLayer where LAYERNAME like '%" + keywordsTxt.Text.Trim() + "%'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; + int num = 0; resultList.Clear(); consLblC.Text = ""; @@ -32,6 +32,7 @@ if (table != null && table.Rows.Count > 0) { + num = table.Rows.Count; for (int i = 0; i < num;i++ ) { resultList.Items.Add(table.Rows[i][0].ToString()); @@ -56,7 +57,8 @@ int metadataLayernum = statistMDLayer(); int nomdLayernum = layernum - metadataLayernum; //MessageBox.Show("共有多少层?" + layernum.ToString()+"=="+metadataLayernum.ToString()+"=="+nomdLayernum.ToString()); - dic.Clear(); +// dic.Clear(); + Dictionary dic = new Dictionary(); dic.Add("已建",metadataLayernum); dic.Add("未建", nomdLayernum); @@ -74,11 +76,9 @@ foreach (string key in dic.Keys) { - if (dic[key] != 0) - { - xlist.Add(key); - ylist.Add(dic[key]); - } + if (dic[key] == 0) continue; + xlist.Add(key); + ylist.Add(dic[key]); } chart1.Series[0].Points.DataBindXY(xlist, ylist); @@ -89,73 +89,15 @@ string sql = "select * from casic_metadataLayer"; DataTable table = OledbHelper.QueryTable(sql); - mdlayernum = table.Rows.Count; + if(table!=null)mdlayernum = table.Rows.Count; return mdlayernum; } //统计有多少个图层 - private int statistLayer() { - int layernum = 0; - - string filename = Utility.filename; - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - //MessageBox.Show(layerNode.Attributes["label"].Value); - - if (layerNode.HasChildNodes) - { - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - //MessageBox.Show(layerchildNode.Attributes["label"].Value); - if (layerchildNode.Name == "layerchild") - { - layernum++; - } - else if (layerchildNode.Name == "layertype") - { - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode)//layertype下的layerchild - { - //MessageBox.Show(childNodeLayer.Attributes["label"].Value); - if (childNodeLayer.HasChildNodes) - { - - foreach (XmlNode n in childNodeLayer) - { - layernum++; - } - } - else - { - - layernum++; - } - } - } - } - - } - } - } - - } - - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - return layernum; + private int statistLayer() + { + List datasrcs = Utility.layerConfig.datasrcs; + return datasrcs.SelectMany(datasrc => datasrc.layertypes).Sum(layerType => layerType.layers.Count); } //选择list @@ -174,7 +116,6 @@ + "join casic_metadatalayer on casic_metadatalayer.LAYERID = casic_metadatacontent.LAYERID " + "where casic_metadatalayer.LAYERNAME='" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; //MessageBox.Show(num.ToString()); if (table != null && table.Rows.Count > 0) { @@ -192,10 +133,5 @@ ntLblC.Text = ""; } } - - private void buttonX1_Click(object sender, EventArgs e) - { - drawChart(); - } } } diff --git a/FrmWait.Designer.cs b/FrmWait.Designer.cs index 99733ea..88f5a29 100644 --- a/FrmWait.Designer.cs +++ b/FrmWait.Designer.cs @@ -55,7 +55,6 @@ this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(0, 24); this.label1.TabIndex = 1; - this.label1.Click += new System.EventHandler(this.label1_Click); // // FrmWait // @@ -71,7 +70,7 @@ this.ShowIcon = false; this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; this.Text = "正在处理,请稍后..."; - this.Load += new System.EventHandler(this.FrmWait_Load); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmWait_FormClosing); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); diff --git a/FrmWait.cs b/FrmWait.cs index d3b7a48..d645ae4 100644 --- a/FrmWait.cs +++ b/FrmWait.cs @@ -32,27 +32,6 @@ frm = null; } - private void FrmWait_Load(object sender, EventArgs e) - { - - - } - - - private void labelX2_Click(object sender, EventArgs e) - { - - } - - private void progressBarX1_Click(object sender, EventArgs e) - { - - } - - private void label1_Click(object sender, EventArgs e) - { - - } } } diff --git a/FrmYJSHTC.cs b/FrmYJSHTC.cs index 3572371..27b7186 100644 --- a/FrmYJSHTC.cs +++ b/FrmYJSHTC.cs @@ -143,9 +143,7 @@ for (int i = ctl1.Globe.Layers.Count - 1; i >= 0; i--) { if (ctl1.Globe.Layers[i].Caption == str) - { ctl1.Globe.Layers.Remove(ctl1.Globe.Layers[i]); - } } foreach (TreeNode n in layerTree.Nodes) @@ -155,20 +153,15 @@ for (int i = 0; i < n.Nodes.Count; i++) { if (n.Nodes[i].Text == str) - { n.Nodes[i].Remove(); - } } } } string sql = "delete from casic_audit_result where SH_LAYER = '" + str + "'"; - OledbHelper.sqlExecuteNonQuery(sql); - } } - } } diff --git a/MainFrm.cs b/MainFrm.cs index bc962c4..29a3eb3 100644 --- a/MainFrm.cs +++ b/MainFrm.cs @@ -2,7 +2,6 @@ using System.Collections; using System.Collections.Generic; using System.Data; -using System.Data.OracleClient; using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; @@ -13,7 +12,6 @@ using System.Text; using System.Threading; using System.Windows.Forms; -using System.Xml; using Cyberpipe.Forms; using DevComponents.DotNetBar; using GeoScene.Data; @@ -28,10 +26,10 @@ { TreeNode layerManagerNode; bool m_bFullScreen; - + GSOGlobeControl globeControl1; GSOGlobeControl globeControl2; - private GSOHudButton legend;//定义图例 + private GSOHudButton legend; //定义图例 private GSOHudButton btnToolNone; private GSOHudButton btnToolSelect; ToolTip tooltip1; @@ -42,20 +40,20 @@ GSOBalloon featureTooltip2; GSOBalloonEx balloonEx2; - GSOLayer layerTemp; - GSOLayer layerTemp2; + GSOLayer layerTemp;//wxl注释,Globe1的临时图层 + GSOLayer layerTemp2;//wxl注释,Globe2的临时图层 FrmRedlineResult frmredResult = null; FrmMnModify frmModify; public bool frmRedlineResult = false; public bool boolfrmShResult; public bool boolfrmModify; - public static string m_CurrentQueryLayer;//定义当前查询的图层 + public static string m_CurrentQueryLayer; //定义当前查询的图层 //定位和闪烁初始化定义 private EnumDesignMode enumDesignMode; //模拟规划设计模式 - private string trackflag;//定义阀门查询个数 + private string trackflag; //定义阀门查询个数 //记录沿线飞行设置 //int m_nFlyMode = 2; @@ -67,7 +65,7 @@ Double m_dDigPitWidthAlongLine = 6; Boolean m_bDigPitByDepth = true; //选择管线 - int selectState;//wxl 注释,表示是否已经计算过净距等了,1已计算,0未计算 + int selectState; //wxl 注释,表示是否已经计算过净距等了,1已计算,0未计算 //private OracleConnection connBackup = null; //数据集合 @@ -89,8 +87,8 @@ //双屏对比 //bool zhanshi=false; Thread t = null; - private GSOHudButton legendSC;//定义图例 - private GSOHudButton legendSG;//定义图例 + private GSOHudButton legendSC; //定义图例 + private GSOHudButton legendSG; //定义图例 //管纵图 private GSOHudButton lendendGZ50; private GSOHudButton lendendGZ36; @@ -102,12 +100,13 @@ GSOGeoPoint3D bsqPT; - FrmYJSHTC frmSh;//一键审核窗口全局变量wxl - FrmWait frmWait;//一键审核等待窗口 + FrmYJSHTC frmSh; //一键审核窗口全局变量wxl + FrmWait frmWait; //一键审核等待窗口 //FrmWait frmWait2 = null;//文档操作等待窗口 float mouseDownX1, mouseDownY1; float mouseDownX2, mouseDownY2; + /// /// /// @@ -164,8 +163,9 @@ RigthMenuSet(); MenuSet(); - + } + /// /// 右屏中添加管纵图片 /// @@ -259,6 +259,7 @@ } #region 区域分析 + if (Utility.userRole.IndexOf("区域分析") < 0) { toolRightMenu.Items.Remove(区域分析ToolStripMenuItem); @@ -278,9 +279,11 @@ 区域分析ToolStripMenuItem.DropDownItems.Remove(无源淹没分析ToolStripMenuItem); } } + #endregion #region 视域分析 + if (Utility.userRole.IndexOf("视域分析") < 0) { toolRightMenu.Items.Remove(视域分析ToolStripMenuItem); @@ -300,9 +303,11 @@ 视域分析ToolStripMenuItem.DropDownItems.Remove(可视包络分析ToolStripMenuItem); } } + #endregion #region 开发分析 + if (Utility.userRole.IndexOf("开挖分析") < 0) { toolRightMenu.Items.Remove(开挖分析ToolStripMenuItem); @@ -334,9 +339,11 @@ 开挖分析ToolStripMenuItem.DropDownItems.Remove(删除隧道ToolStripMenuItem); } } + #endregion #region 拓扑分析 + if (Utility.userRole.IndexOf("拓扑分析") < 0) { toolRightMenu.Items.Remove(拓扑分析ToolStripMenuItem); @@ -372,9 +379,11 @@ 拓扑分析ToolStripMenuItem.DropDownItems.Remove(爆管分析ToolStripMenuItem); } } + #endregion #region 断面分析 + if (Utility.userRole.IndexOf("断面分析") < 0) { toolRightMenu.Items.Remove(断面分析ToolStripMenuItem); @@ -398,9 +407,11 @@ 断面分析ToolStripMenuItem.DropDownItems.Remove(基线剖面分析ToolStripMenuItem); } } + #endregion #region 绘制区域统计 + if (Utility.userRole.IndexOf("绘制区域统计") < 0) { toolRightMenu.Items.Remove(绘制区域统计ToolStripMenuItem); @@ -445,9 +456,11 @@ } } + #endregion #region 全区域统计 + if (Utility.userRole.IndexOf("全区域统计") < 0) { toolRightMenu.Items.Remove(全区域统计ToolStripMenuItem); @@ -492,9 +505,11 @@ } } + #endregion #region 查询 + if (Utility.userRole.IndexOf("查询") < 0) { toolRightMenu.Items.Remove(查询ToolStripMenuItem); @@ -542,9 +557,11 @@ 查询ToolStripMenuItem.DropDownItems.Remove(附属物查询ToolStripMenuItem); } } + #endregion #region 标注 + if (Utility.userRole.IndexOf("标注") < 0) { toolRightMenu.Items.Remove(标注ToolStripMenuItem); @@ -592,9 +609,11 @@ 标注ToolStripMenuItem.DropDownItems.Remove(标注管理ToolStripMenuItem); } } + #endregion #region 飞行 + if (Utility.userRole.IndexOf("飞行") < 0) { toolRightMenu.Items.Remove(飞行ToolStripMenuItem); @@ -618,9 +637,11 @@ 飞行ToolStripMenuItem.DropDownItems.Remove(绕眼睛飞行ToolStripMenuItem); } } + #endregion #region 编辑 + if (Utility.userRole.IndexOf("编辑") < 0) { toolRightMenu.Items.Remove(编辑ToolStripMenuItem); @@ -656,9 +677,11 @@ 编辑ToolStripMenuItem.DropDownItems.Remove(删除模型ToolStripMenuItem); } } + #endregion #region 量算 + if (Utility.userRole.IndexOf("量算") < 0) { toolRightMenu.Items.Remove(量算ToolStripMenuItem); @@ -694,6 +717,7 @@ 量算ToolStripMenuItem.DropDownItems.Remove(地表面积ToolStripMenuItem1); } } + #endregion } @@ -701,6 +725,7 @@ { #region 权限管理 + if (Utility.userRole.IndexOf("权限管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem2); @@ -734,9 +759,11 @@ } } + #endregion #region 基础工具 + if (Utility.userRole.IndexOf("基础工具") < 0) { ribbonControl1.Items.Remove(ribbonTabItem1); @@ -781,37 +808,47 @@ } } + #endregion #region 一键审核 + if (Utility.userRole.IndexOf("一键审核") < 0) { ribbonControl1.Items.Remove(ribbonTabItem11); } + #endregion #region 红线审核 + if (Utility.userRole.IndexOf("红线审核") < 0) { ribbonControl1.Items.Remove(ribbonTabItem6); } + #endregion #region 双屏对比 + if (Utility.userRole.IndexOf("双屏对比") < 0) { ribbonControl1.Items.Remove(ribbonTabItem9); } + #endregion #region 文档管理 + if (Utility.userRole.IndexOf("文档管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem4); } + #endregion #region 基础管理 + if (Utility.userRole.IndexOf("基础管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem14); @@ -841,6 +878,7 @@ } #region Fan Zhang 重构现有代码 + //初始化控件布局 private void initLayout() { @@ -848,37 +886,37 @@ double dsw = SW; if (SW > 1440) { - double myScreen = dsw / 1440; - buttonX1.Width = (int)(buttonX1.Width * myScreen); - buttonX2.Width = (int)(buttonX2.Width * myScreen); - buttonX4.Width = (int)(buttonX4.Width * myScreen); - buttonX5.Width = (int)(buttonX5.Width * myScreen); - buttonX6.Width = (int)(buttonX6.Width * myScreen); - buttonX7.Width = (int)(buttonX8.Width * myScreen); - buttonX8.Width = (int)(buttonX8.Width * myScreen); - buttonX9.Width = (int)(buttonX9.Width * myScreen); - buttonX12.Width = (int)(buttonX12.Width * myScreen); - buttonX14.Width = (int)(buttonX14.Width * myScreen); - buttonX15.Width = (int)(buttonX15.Width * myScreen); - buttonX16.Width = (int)(buttonX16.Width * myScreen); - buttonX17.Width = (int)(buttonX17.Width * myScreen); + double myScreen = dsw/1440; + buttonX1.Width = (int) (buttonX1.Width*myScreen); + buttonX2.Width = (int) (buttonX2.Width*myScreen); + buttonX4.Width = (int) (buttonX4.Width*myScreen); + buttonX5.Width = (int) (buttonX5.Width*myScreen); + buttonX6.Width = (int) (buttonX6.Width*myScreen); + buttonX7.Width = (int) (buttonX8.Width*myScreen); + buttonX8.Width = (int) (buttonX8.Width*myScreen); + buttonX9.Width = (int) (buttonX9.Width*myScreen); + buttonX12.Width = (int) (buttonX12.Width*myScreen); + buttonX14.Width = (int) (buttonX14.Width*myScreen); + buttonX15.Width = (int) (buttonX15.Width*myScreen); + buttonX16.Width = (int) (buttonX16.Width*myScreen); + buttonX17.Width = (int) (buttonX17.Width*myScreen); - labelX1.Width = (int)(labelX1.Width * myScreen); - labelX2.Width = (int)(labelX2.Width * myScreen); - labelX3.Width = (int)(labelX3.Width * myScreen); - labelX6.Width = (int)(labelX6.Width * myScreen); - labelX8.Width = (int)(labelX8.Width * myScreen); - labelX9.Width = (int)(labelX9.Width * myScreen); - labelX12.Width = (int)(labelX12.Width * myScreen); - labelX13.Width = (int)(labelX13.Width * myScreen); - labelX14.Width = (int)(labelX14.Width * myScreen); - labelX16.Width = (int)(labelX16.Width * myScreen); - labelX17.Width = (int)(labelX17.Width * myScreen); - labelX11.Width = (int)(labelX11.Width * myScreen); - labelX19.Width = (int)(labelX19.Width * myScreen); - labelX21.Width = (int)(labelX21.Width * myScreen); - labelX22.Width = (int)(labelX22.Width * myScreen); - labelX24.Width = (int)(labelX24.Width * myScreen); + labelX1.Width = (int) (labelX1.Width*myScreen); + labelX2.Width = (int) (labelX2.Width*myScreen); + labelX3.Width = (int) (labelX3.Width*myScreen); + labelX6.Width = (int) (labelX6.Width*myScreen); + labelX8.Width = (int) (labelX8.Width*myScreen); + labelX9.Width = (int) (labelX9.Width*myScreen); + labelX12.Width = (int) (labelX12.Width*myScreen); + labelX13.Width = (int) (labelX13.Width*myScreen); + labelX14.Width = (int) (labelX14.Width*myScreen); + labelX16.Width = (int) (labelX16.Width*myScreen); + labelX17.Width = (int) (labelX17.Width*myScreen); + labelX11.Width = (int) (labelX11.Width*myScreen); + labelX19.Width = (int) (labelX19.Width*myScreen); + labelX21.Width = (int) (labelX21.Width*myScreen); + labelX22.Width = (int) (labelX22.Width*myScreen); + labelX24.Width = (int) (labelX24.Width*myScreen); } sideBar1.Visible = false; sideBar1.ExpandedPanel = sideBarPanelItem3; @@ -899,7 +937,7 @@ splitContainer1.Panel2Collapsed = true; - buttonItem87.Checked = true;//默认地上模式 + buttonItem87.Checked = true; //默认地上模式 ribbonTabItem1.Select(); //初始化状态为浏览 sideBarPanelItem3.Visible = false; @@ -951,7 +989,7 @@ //图例 legend = new GSOHudButton(); - legend.SetImage(Application.StartupPath + "/Resource/图例P.jpg");//图例P + legend.SetImage(Application.StartupPath + "/Resource/图例P.jpg"); //图例P legend.SetOffset(0, 15); legend.MinOpaque = 1; legend.MaxOpaque = 1; @@ -1002,7 +1040,7 @@ globeControl1.Globe.UserBackgroundColor = Color.White; globeControl1.Globe.FlyAlongLineSpeed = m_dFlyAlongLineSpeed; globeControl1.Globe.FlyAlongLineRotateSpeed = m_dFlyAlongLineRotateSpeed; - globeControl1.Globe.FlyToPointSpeed = globeControl1.Globe.FlyToPointSpeed * 3; + globeControl1.Globe.FlyToPointSpeed = globeControl1.Globe.FlyToPointSpeed*3; globeControl1.Globe.EditSnapObject = true; globeControl1.Globe.IsReleaseMemOutOfView = true; globeControl1.Globe.ControlPanel.Visible = true; @@ -1021,18 +1059,22 @@ globeControl2.Globe.UserBackgroundColor = Color.White; globeControl2.Globe.FlyAlongLineSpeed = m_dFlyAlongLineSpeed; globeControl2.Globe.FlyAlongLineRotateSpeed = m_dFlyAlongLineRotateSpeed; - globeControl2.Globe.FlyToPointSpeed = globeControl2.Globe.FlyToPointSpeed * 3; + globeControl2.Globe.FlyToPointSpeed = globeControl2.Globe.FlyToPointSpeed*3; globeControl2.Globe.EditSnapObject = true; globeControl2.Globe.IsReleaseMemOutOfView = true; globeControl2.Globe.ControlPanel.Visible = false; - GSOSimplePolygonStyle3D trackingRectStyle = globeControl1.Globe.TrackRectTool.TrackingPolygonStyle as GSOSimplePolygonStyle3D; + GSOSimplePolygonStyle3D trackingRectStyle = + globeControl1.Globe.TrackRectTool.TrackingPolygonStyle as GSOSimplePolygonStyle3D; trackingRectStyle.FillColor = Color.FromArgb(0, 0, 0, 0); - GSOSimplePolygonStyle3D trackRectStyle = globeControl1.Globe.TrackRectTool.PolygonStyle as GSOSimplePolygonStyle3D; + GSOSimplePolygonStyle3D trackRectStyle = + globeControl1.Globe.TrackRectTool.PolygonStyle as GSOSimplePolygonStyle3D; trackRectStyle.FillColor = Color.FromArgb(0, 0, 0, 0); - GSOSimpleLineStyle3D trackRectLineStyle = globeControl1.Globe.TrackRectTool.PolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; + GSOSimpleLineStyle3D trackRectLineStyle = + globeControl1.Globe.TrackRectTool.PolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; trackRectLineStyle.LineType = EnumLineType.Solid; - GSOSimpleLineStyle3D trackRectLineStyle1 = globeControl1.Globe.TrackRectTool.TrackingPolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; + GSOSimpleLineStyle3D trackRectLineStyle1 = + globeControl1.Globe.TrackRectTool.TrackingPolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; trackRectLineStyle1.LineType = EnumLineType.Solid; trackRectLineStyle1.LineColor = Color.FromArgb(0, 174, 255); trackRectLineStyle1.LineWidth = 1; @@ -1107,7 +1149,7 @@ //加载两个地球数据 private void loadData() { - Thread t1 = new Thread(doLoadDataForGlobalControl1); + Thread t1 = new Thread(doLoadDataForGlobalControl); t1.IsBackground = true; t1.Start(); } @@ -1119,30 +1161,22 @@ globeControl1.Globe.ConnectServer(Utility.serverip, Utility.serverport, "", ""); //加载locaServer中的数据 globeControl2.Globe.ConnectServer(Utility.serverip, Utility.serverport, "", ""); //加载locaServer中的数据 //初始化TreeView - // 勾选实测图层 - foreach (TreeNode tn in layerTree.Nodes) - { - if (tn.Nodes.Count <= 0) continue; - if (tn.Text != "实测数据") continue; - tn.Checked = true; - foreach (TreeNode tnChild in tn.Nodes) - { - tnChild.Checked = true; - foreach (TreeNode tnGrandChild in tnChild.Nodes) - { - tnGrandChild.Checked = true; - } - } - } - } - private void doLoadDataForGlobalControl1() + initLayerTree(); + } + /// + /// 加载地球1、2的图层 + /// + private void doLoadDataForGlobalControl() { try { globeControl1.Globe.Layers.MoveDown(10000); //加载实测管线数据 - Utility.dataSource = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.DBServer.Trim() + "/" + Utility.dbdatabase.Trim(), "", "", Utility.userID, Utility.DBPassword); + Utility.dataSource = + globeControl1.Globe.DataManager.OpenOracleDataSource( + Utility.DBServer.Trim() + "/" + Utility.dbdatabase.Trim(), "", "", Utility.userID, + Utility.DBPassword); if (Utility.dataSource != null) { @@ -1160,7 +1194,9 @@ globeControl1.Globe.Layers.GetLayerByCaption("红线").Visible = false; //globleControl1中加载规划数据 - GSODataSource ghDS = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.ghdbip + "/" + Utility.ghdbname, "", "", Utility.ghdbuser, Utility.ghdbpwd); + GSODataSource ghDS = + globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.ghdbip + "/" + Utility.ghdbname, "", "", + Utility.ghdbuser, Utility.ghdbpwd); if (ghDS != null) { for (int j = 0; j < ghDS.DatasetCount; j++) @@ -1176,13 +1212,16 @@ } //globeControl1,globeControl2中加载施工数据 - GSODataSource sgDS = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.sgdbip + "/" + Utility.sgdbname, "", "", Utility.sgdbuser, Utility.sgdbpwd); + GSODataSource sgDS = + globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.sgdbip + "/" + Utility.sgdbname, "", "", + Utility.sgdbuser, Utility.sgdbpwd); if (sgDS != null) { for (int m = 0; m < sgDS.DatasetCount; m++) { GSODataset dataset = sgDS.GetDatasetAt(m); - if (dataset != null && !dataset.Caption.Contains("SH") && Utility.dictionaryNetLayerNameAndCaption.ContainsKey(dataset.Caption)) + if (dataset != null && !dataset.Caption.Contains("SH") && + Utility.dictionaryNetLayerNameAndCaption.ContainsKey(dataset.Caption)) { dataset.Caption = dataset.Name; globeControl1.Globe.Layers.Add(dataset); @@ -1196,12 +1235,12 @@ // LoadDataForGlobalControl ss = connectServer; // ss(); - + this.Invoke((EventHandler) delegate { connectServer(); }); - + } catch (Exception ex) @@ -1212,67 +1251,17 @@ private void initLayerTree() { + layerTree.Nodes.Clear(); //加载临时图层节点 layerManagerNode = new TreeNode(); layerManagerNode.ImageIndex = 0; layerManagerNode.SelectedImageIndex = 0; layerManagerNode.Checked = true; layerManagerNode.Text = "临时图层"; + layerManagerNode.Tag = layerTemp; layerTree.Nodes.Add(layerManagerNode); - XmlDocument doc = new XmlDocument(); - doc.Load(Utility.filename); - XmlNodeList xmlLayerNodes = doc.SelectNodes("//layer"); - - foreach (XmlNode xmlLayerNode in xmlLayerNodes) - { - - //TODO LIST:创建一级TreeNode(实测、规划、施工) - TreeNode nodelayer = new TreeNode(); - string layerName = xmlLayerNode.Attributes["label"].Value; - nodelayer.Text = layerName; - nodelayer.Checked = false; - layerTree.Nodes.Add(nodelayer); - - XmlNodeList xmlChildLayerNodes = xmlLayerNode.ChildNodes; - foreach (XmlNode xmlChildLayerNode in xmlChildLayerNodes) - { - //TODO LIST:创建二级TreeNode节点 - TreeNode secondLevelNode = new TreeNode(); - string layerType = xmlChildLayerNode.Attributes["label"].Value; - secondLevelNode.Text = layerType; - - if (xmlChildLayerNode.Attributes["type"] != null) - { //道路图层特殊处理 - string type = xmlChildLayerNode.Attributes["type"].Value; - secondLevelNode.Tag = type + "|" + layerType; - } - else - { - secondLevelNode.Tag = layerType; - } - secondLevelNode.Checked = false; - nodelayer.Nodes.Add(secondLevelNode); - - XmlNodeList xmlActitualLayerNodes = xmlChildLayerNode.ChildNodes; - - foreach (XmlNode xmlActitualLayerNode in xmlActitualLayerNodes) - { - //TODO LIST:创建三级图层节点 - TreeNode layerNode = new TreeNode(); - string actutallylayerType = xmlActitualLayerNode.Attributes["type"].Value; - string actutallylayerName = xmlActitualLayerNode.Attributes["layer"].Value; - string actutallyLabelName = xmlActitualLayerNode.Attributes["label"].Value; - - layerNode.Text = actutallyLabelName; - layerNode.Tag = layerType + "|" + actutallyLabelName; - layerNode.Checked = false; - secondLevelNode.Nodes.Add(layerNode); - } - - } - - } + TreeUtils.InitLayerTree(globeControl1, layerTree, null); } @@ -1298,7 +1287,8 @@ for (int i = 0; i < markerStrs.Length; i++) { if (!File.Exists(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd")) continue; - GSOLayer markerLayer = globeControl1.Globe.Layers.Add(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd"); + GSOLayer markerLayer = + globeControl1.Globe.Layers.Add(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd"); if (markerLayer == null) continue; TreeNode node1 = new TreeNode(); node1.Text = markerLayer.Caption; @@ -1312,9 +1302,11 @@ private void MainFrm_Load(object sender, EventArgs e) { + + layerTree.Nodes.Add("正在加载,请稍后……");//树状图加载在图层加载之后,故增加提示 initGlobalControl(); //initGlobalMap(); - initLayerTree(); +// initLayerTree(); initMarkerTree(); initLayout(); loadData(); @@ -1383,7 +1375,7 @@ tempnode.Checked = node.Checked ? feature.Visible : false; tempnode.Tag = feature; node.Nodes.Add(tempnode); - GSOFeatureFolder featureFolder = (GSOFeatureFolder)feature; + GSOFeatureFolder featureFolder = (GSOFeatureFolder) feature; VisitFeature3Ds(featureFolder.Features, tempnode); } else @@ -1444,7 +1436,7 @@ /// Boolean CheckDatasetGeoReference(GSODataset dataset, string strDataPath) { - + if (dataset.GeoReferenceType != EnumGeoReferenceType.Flat) return true; Boolean bSuccess = false; if (MessageBox.Show("数据没有空间参考信息,请设置空间参考信息!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) != @@ -1498,7 +1490,7 @@ dlg.Filter = "输出JPEG(*.jpg)|*.jpg|输出PNG(*.png)|*.png|输出BMP(*.bmp)|*.bmp|输出BMP(*.gif)|*.gif"; if (dlg.ShowDialog() == DialogResult.OK) { - string extension = Path.GetExtension(dlg.FileName);//扩展名 + string extension = Path.GetExtension(dlg.FileName); //扩展名 switch (extension) { case ".jpg": @@ -1520,6 +1512,7 @@ globeControl1.Globe.Action = EnumAction3D.ActionNull; globeControl1.Globe.MouseRoamingEnable = true; } + /// /// 定位正北正90度俯视 /// @@ -1548,7 +1541,6 @@ void globeControl1_HudControlMouseIntoEvent(object sender, HudControlMouseIntoEventArgs e) { - GSOHudButton btn = e.HudControl as GSOHudButton; tooltip1 = new ToolTip(); switch (e.HudControl.Name) { @@ -1573,163 +1565,46 @@ break; } } - /// - /// layerTree选中后事件处理 - /// - /// - /// + + #region wxl 重构树形结构代码 + private void layerTree_AfterCheck(object sender, TreeViewEventArgs e) { - if (e.Node.Tag != null) + if (e.Action != TreeViewAction.Unknown) { - if (e.Node.Tag.ToString().Contains("|")) - { - string nodeTag = e.Node.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(nodeTag); - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - if (e.Node.Tag is GSOFeature) - { - if (e.Node.Nodes.Count == 0) - { - GSOFeature feat = e.Node.Tag as GSOFeature; - feat.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - } - CheckControl(e); - } - /// - /// 树节点选中方法 - /// - /// - private void CheckControl(TreeViewEventArgs e) - { - if (e.Action == TreeViewAction.Unknown||e.Node == null || Convert.IsDBNull(e.Node)) return; - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - { - CheckAllChildNodes(e.Node, e.Node.Checked); - } - } - /// - /// 改变所有子节点的状态 - /// - /// - /// - private void CheckAllChildNodes(TreeNode pn, bool IsChecked) - { - foreach (TreeNode tn in pn.Nodes) - { - tn.Checked = IsChecked; - - if (tn.Nodes.Count > 0) - { - CheckAllChildNodes(tn, IsChecked); - } + TreeUtils.TreeNodeCheckedChange(globeControl1, e.Node); } } - //改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 - private void CheckParentNode(TreeNode curNode) - { - bool bChecked = false; - - if (curNode.Parent == null) return; - foreach (TreeNode node in curNode.Parent.Nodes) - { - if (node.Checked) - { - bChecked = true; - break; - } - } - - if (bChecked) - { - curNode.Parent.Checked = true; - CheckParentNode(curNode.Parent); - } - else - { - curNode.Parent.Checked = false; - CheckParentNode(curNode.Parent); - } - } - + #endregion private void layerTree_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (e.Button != MouseButtons.Right) return; layerTree.SelectedNode = e.Node; - if (e.Node.Tag == null) return; - if (e.Button == MouseButtons.Right && e.Node.Tag.ToString().Contains("|")) + if (e.Node.Tag == null || e.Node.Parent == null) return; //排除无图层节点和第一级节点 + + //来自locaserver的数据,直接返回就行了,目前只有一个180fd,暂时单独处理 + GSOLayer gsoLayer = e.Node.Tag as GSOLayer; + if (gsoLayer == null || gsoLayer.Caption.Equals(Utility.roadLayerName)) return; + if (e.Node.Parent.Text.Equals("临时图层") || e.Node.Parent.Text.Equals("我的地标")) { - - if (e.Node.Tag.ToString().Split('|')[0] == "locaserver") - { - - foreach (ToolStripItem item in layerNodeContexMenu.Items) - { - item.Visible = false; - } - return; - - } - - if (e.Node.Tag.ToString().Split('|')[0] == "new") - { - LayerEditableMenuItem.Enabled = true; - foreach (ToolStripItem item in layerNodeContexMenu.Items) - { - item.Visible = false; - } - //LayerSelectableMenuItem.Visible = true; - //LayerEditableMenuItem.Visible = true; - RemoveLayer.Visible = true; - RefreshLayerFeatureListMenuItem.Visible = true; - //SaveLayerMenuItem.Visible = true; - //LayerFlyMenuItem.Visible = true; - } - + //临时图层下的子节点应该展示的 + contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); + contextMenuStripDeleteLayerNode.Tag = e.Node; + } + else + { LayerSelectableMenuItem.Visible = true; LayerEditableMenuItem.Visible = true; SaveLayerMenuItem.Visible = true; LayerFlyMenuItem.Visible = true; 导出CADToolStripMenuItem1.Visible = true; - layerNodeContexMenu.Show(layerTree, e.X, e.Y); layerNodeContexMenu.Tag = e.Node; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(e.Node.Tag.ToString().Split('|')[1]); - if (layer != null) - { - LayerSelectableMenuItem.Checked = layer.Selectable; - LayerEditableMenuItem.Checked = layer.Editable; - } + LayerSelectableMenuItem.Checked = gsoLayer.Selectable; + LayerEditableMenuItem.Checked = gsoLayer.Editable; } - else - { - if (e.Node.Tag is GSOLayer && e.Node.Parent != null && e.Node.Parent.Text.Trim() == "临时图层") - { - contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); - contextMenuStripDeleteLayerNode.Tag = e.Node; - } - else if (e.Node.Tag is GSOFeature && e.Node.Parent != null && e.Node.Parent.Text.Trim() == "我的地标") - { - contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); - contextMenuStripDeleteLayerNode.Tag = e.Node; - } - } + } /// @@ -1740,75 +1615,61 @@ private void 删除ToolStripMenuItem2_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "临时图层") + if (node == null || node.Parent == null) return; + if (node.Parent.Text.Trim() == "临时图层") { - if (node.Tag is GSOLayer) - { - GSOLayer layer = node.Tag as GSOLayer; - - for (int i = globeControl1.Globe.Layers.Count - 1; i >= 0; i--) - { - if (globeControl1.Globe.Layers[i].Caption == layer.Caption) - { - globeControl1.Globe.Layers.Remove(globeControl1.Globe.Layers[i]); - } - } - - globeControl1.Globe.Refresh(); - - node.Remove(); - } - } - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "我的地标") + if (!(node.Tag is GSOLayer)) return; + GSOLayer layer = node.Tag as GSOLayer; + globeControl1.Globe.Layers.Remove(layer); + globeControl1.Globe.Refresh(); + node.Remove(); + }else if (node.Parent.Text.Trim() == "我的地标") { - if (node.Tag is GSOFeature) - { - GSOFeature f = node.Tag as GSOFeature; - f.Delete(); - globeControl1.Globe.Refresh(); - - node.Remove(); - } + if (!(node.Tag is GSOFeature)) return; + GSOFeature f = node.Tag as GSOFeature; + f.Delete(); + globeControl1.Globe.Refresh(); + node.Remove(); } + } private void 可编辑ToolStripMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "临时图层") - { - if (node.Tag is GSOLayer) - { - GSOLayer layer = node.Tag as GSOLayer; - - 可编辑ToolStripMenuItem.Checked = !可编辑ToolStripMenuItem.Checked; - layer.Editable = 可编辑ToolStripMenuItem.Checked; - } - } + if (node == null || + node.Parent == null || + node.Parent.Text.Trim() != "临时图层" || !(node.Tag is GSOLayer)) return; + GSOLayer layer = node.Tag as GSOLayer; + 可编辑ToolStripMenuItem.Checked = !可编辑ToolStripMenuItem.Checked; + layer.Editable = 可编辑ToolStripMenuItem.Checked; } private void 保存ToolStripMenuItem_Click(object sender, EventArgs e) { - //TreeNode node = layerNodeContexMenu.Tag as TreeNode; - TreeNode node = contextMenuStripDeleteLayerNode.Tag as TreeNode; - - Int32 nIndex = node.Index; - string layerCaption = node.Text;//.Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); +// TreeNode node = contextMenuStripDeleteLayerNode.Tag as TreeNode; + TreeNode node = layerTree.SelectedNode; + if (node == null||node.Tag==null) return; + GSOLayer layer = node.Tag as GSOLayer; + if (layer == null) return; layer.Dataset.Save(); } - + //TODO LIST: wxl? Tag更正 private void 定位ToolStripMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - - if (node == null) return; + if (node == null||node.Parent==null) return; if (node.Parent.Text.Trim() == "临时图层") { - GSOLayer lsLayer = globeControl1.Globe.Layers.GetLayerByCaption(node.Text); + GSOLayer lsLayer = node.Tag as GSOLayer; + if (lsLayer == null) + { + LogHelper.WriteLog(typeof(MainFrm),"要定位的临时图层不存在:"+node.Text); + return; + } double x = lsLayer.LatLonBounds.Center.X; double y = lsLayer.LatLonBounds.Center.Y; - if (x == 0 && y == 0) + if (x.Equals(0) && y.Equals(0)) { x = lsLayer.Bounds.Center.X; y = lsLayer.Bounds.Center.Y; @@ -1818,20 +1679,14 @@ } else { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); - + GSOLayer layer = node.Tag as GSOLayer; if (layer == null) return; - if (layer.Caption == "红线") + if (layer.Caption.Equals("红线")) { globeControl1.Globe.FlyToPosition(new GSOPoint3d(120.610963, 31.188121, 50), EnumAltitudeMode.Absolute, -4, 50, 1000); globeControl1.Globe.FlyToPointSpeed = 10000000; globeControl1.Globe.Action = EnumAction3D.SelectObject; - - GSOLayer redLayer = globeControl1.Globe.Layers.GetLayerByCaption("红线"); - if (redLayer != null) - { - redLayer.Visible = true; - } + layer.Visible = true; globeControl1.Refresh(); } else @@ -1842,55 +1697,28 @@ } } } - + //TODO LIST: wxl? Tag更正 private void layerTree_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) { - if (layerTree.SelectedNode == null) return; - if (layerTree.SelectedNode.Tag.ToString().Contains("|")) + TreeNode node = layerTree.SelectedNode; + if (node == null) return; + if (node.Tag is GSOLayer) { - string nodeTag = layerTree.SelectedNode.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(nodeTag); - if (layer != null) + GSOLayer layer = node.Tag as GSOLayer; + if (layer.GetAllFeatures().Length <= 0) return; + GSOFeature feature = layer.GetAt(0); + if (feature != null && feature.Geometry != null) { - if (layer.Caption == "红线") - { - globeControl1.Globe.FlyToPosition(new GSOPoint3d(120.610963, 31.188121, 50), EnumAltitudeMode.Absolute, -4, 50, 1000); - globeControl1.Globe.FlyToPointSpeed = 10000000; - globeControl1.Globe.Action = EnumAction3D.SelectObject; - - GSOLayer redLayer = globeControl1.Globe.Layers.GetLayerByCaption("红线"); - if (redLayer != null) - { - redLayer.Visible = true; - } - globeControl1.Refresh(); - } - else - { - double x = layer.LatLonBounds.Center.X; - double y = layer.LatLonBounds.Center.Y; - globeControl1.Globe.FlyToPosition(new GSOPoint3d(x, y, 0), EnumAltitudeMode.Absolute); - } + globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute);//, 0, 0, 1000); + } + else + { + globeControl1.Globe.FlyToFeature(feature); } } - if (layerTree.SelectedNode.Tag is GSOLayer) + else if (node.Tag is GSOFeature) { - GSOLayer layer = layerTree.SelectedNode.Tag as GSOLayer; - if (layer.GetAllFeatures().Length > 0) - { - GSOFeature feature = layer.GetAt(0); - if (feature != null && feature.Geometry != null) - { - globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute);//, 0, 0, 1000); - } - else - { - globeControl1.Globe.FlyToFeature(feature); - } - } - } else if (layerTree.SelectedNode.Tag is GSOFeature) - { - GSOFeature feature = layerTree.SelectedNode.Tag as GSOFeature; + GSOFeature feature = node.Tag as GSOFeature; if (feature.Geometry != null) { globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute, 0, 0, 10); @@ -2231,15 +2059,7 @@ int idx = dataGridViewX2.Rows.Add(); dataGridViewX2.Rows[idx].Tag = feat; dataGridViewX2.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX2.Rows[idx].Cells[1].Value = featureName; } } @@ -2261,15 +2081,7 @@ int idx = dataGridViewLineList.Rows.Add(); dataGridViewLineList.Rows[idx].Tag = feat; dataGridViewLineList.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewLineList.Rows[idx].Cells[1].Value = featureName; } } @@ -2291,15 +2103,7 @@ int idx = dataGridViewX8.Rows.Add(); dataGridViewX8.Rows[idx].Tag = feat; dataGridViewX8.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX8.Rows[idx].Cells[1].Value = featureName; } } @@ -2321,15 +2125,7 @@ int idx = dataGridViewX4.Rows.Add(); dataGridViewX4.Rows[idx].Tag = feat; dataGridViewX4.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX4.Rows[idx].Cells[1].Value = featureName; } @@ -2353,15 +2149,7 @@ int idx = dataGridViewX6.Rows.Add(); dataGridViewX6.Rows[idx].Tag = feat; dataGridViewX6.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX6.Rows[idx].Cells[1].Value = featureName; } } @@ -2736,77 +2524,104 @@ return str; } - //string filename = Utility.filename; - //List g1layername = new List(); - /// /// 获取目标图层 /// /// +// private GSOLayer TreeNodeFeatureLayer() +// { +// TreeNode featureAddPipeFitTreenode = GetDestLayerFeatureAddTreeNode(); +// GSOLayer featureAddLayer = globeControl1.Globe.Layers.GetLayerByCaption(featureAddPipeFitTreenode.Tag.ToString().Split('|')[1]); +// +// return featureAddLayer; +// } + //TODO LIST: wxl11? 待更正,Node的Tag现在都已经统一为gsolayer对象了 +// private TreeNode GetDestLayerFeatureAddTreeNode() +// { +// for (int i = 0; i < layerTree.Nodes.Count; i++) +// { +// TreeNode tempNode = layerTree.Nodes[i]; +// for (int j = 0; j < tempNode.Nodes.Count; j++) +// { +// TreeNode tempChildNode = tempNode.Nodes[j]; +// if (tempChildNode.Tag.ToString().Split('|').Length > 1) // Config配置文件配置的图层 +// {//本层节点Tag记录layer +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode; +// } +// } +// else //临时添加的本地图层 +// {//子层节点的Tag记录layer +// for (int m = 0; m < tempChildNode.Nodes.Count; m++) +// { +// TreeNode tempChildNode1 = tempChildNode.Nodes[m]; +// if (tempChildNode1.Tag.ToString().Split('|').Length > 1) +// { +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode1.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode1.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode1; +// } +// } +// else +// { +// for (int n = 0; n < tempChildNode1.Nodes.Count; n++) +// { +// TreeNode tempChildNode2 = tempChildNode1.Nodes[n]; +// if (tempChildNode2.Tag.ToString().Split('|').Length <= 1) continue; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode2.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode2.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode2; +// } +// } +// } +// } +// } +// } +// } +// return null; +// } private GSOLayer TreeNodeFeatureLayer() { TreeNode featureAddPipeFitTreenode = GetDestLayerFeatureAddTreeNode(); - GSOLayer featureAddLayer = globeControl1.Globe.Layers.GetLayerByCaption(featureAddPipeFitTreenode.Tag.ToString().Split('|')[1]); - - return featureAddLayer != null ? featureAddLayer : null; + if (featureAddPipeFitTreenode == null) return null; + GSOLayer featureAddLayer = featureAddPipeFitTreenode.Tag as GSOLayer; + return featureAddLayer; } - + //遍历最深三层找到目标node. private TreeNode GetDestLayerFeatureAddTreeNode() { - for (int i = 0; i < layerTree.Nodes.Count; i++) + + foreach (TreeNode layerTreeNode in layerTree.Nodes) { - TreeNode tempNode = layerTree.Nodes[i]; - for (int j = 0; j < tempNode.Nodes.Count; j++) + if (layerTreeNode.Tag == null && layerTreeNode.Nodes.Count > 0) { - TreeNode tempChildNode = tempNode.Nodes[j]; - if (tempChildNode.Tag.ToString().Split('|').Length > 1) // Config配置文件配置的图层 + foreach (TreeNode node in layerTreeNode.Nodes) { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode; - } + GSOLayer gsoLayer = node.Tag as GSOLayer; + if (gsoLayer != null && gsoLayer.IsDestLayerFeatureAdd()) return node; + } - else //临时添加的本地图层 - { - for (int m = 0; m < tempChildNode.Nodes.Count; m++) - { - TreeNode tempChildNode1 = tempChildNode.Nodes[m]; - if (tempChildNode1.Tag.ToString().Split('|').Length > 1) - { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode1.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode1.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode1; - } - } - else - { - for (int n = 0; n < tempChildNode1.Nodes.Count; n++) - { - TreeNode tempChildNode2 = tempChildNode1.Nodes[n]; - if (tempChildNode2.Tag.ToString().Split('|').Length <= 1) continue; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode2.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode2.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode2; - } - } - } - } - } + } + else + { + GSOLayer gsoLayer = layerTreeNode.Tag as GSOLayer; + if (gsoLayer != null && gsoLayer.IsDestLayerFeatureAdd()) return layerTreeNode; } } return null; @@ -3221,6 +3036,7 @@ } } } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 目标图层 菜单 /// @@ -3228,14 +3044,15 @@ /// private void FeatureAddLayerMenuItem_Click(object sender, EventArgs e) { - if (!FeatureAddLayerMenuItem.Checked) - { - TreeNode node = layerNodeContexMenu.Tag as TreeNode; - FeatureAddLayerMenuItem.Checked = true; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); - globeControl1.Globe.DestLayerFeatureAdd = layer; - } + if (FeatureAddLayerMenuItem.Checked) return; + TreeNode node = layerNodeContexMenu.Tag as TreeNode; + FeatureAddLayerMenuItem.Checked = true; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; + globeControl1.Globe.DestLayerFeatureAdd = layer; } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 可选择 菜单 /// @@ -3244,11 +3061,13 @@ private void LayerSelectableMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - Int32 nIndex = node.Index; - GSOLayer layer = globeControl1.Globe.Layers[nIndex]; +// GSOLayer layer = globeControl1.Globe.Layers[nIndex]; + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; LayerSelectableMenuItem.Checked = !LayerSelectableMenuItem.Checked; - layer.Selectable = LayerSelectableMenuItem.Checked; + if (layer != null) layer.Selectable = LayerSelectableMenuItem.Checked; } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 可编辑 菜单 /// @@ -3257,23 +3076,27 @@ private void LayerEditableMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; LayerEditableMenuItem.Checked = !LayerEditableMenuItem.Checked; - layer.Editable = LayerEditableMenuItem.Checked; + if (layer != null) layer.Editable = LayerEditableMenuItem.Checked; } /// /// 图层目录树 右键菜单中的 保存 菜单 /// /// /// + //TODO LIST: wxl? Tag更正 private void SaveLayerMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - Int32 nIndex = node.Index; - string layerCaption = node.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); - layer.Dataset.Save(); +// string layerCaption = node.Tag.ToString().Split('|')[1]; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; + if (layer != null) layer.Dataset.Save(); } #region wxl feature的公共方法 @@ -3455,7 +3278,6 @@ return; GSOFeatureLayer flayer = layer as GSOFeatureLayer; - GSOFeatureDataset fdataset = flayer.Dataset as GSOFeatureDataset; GSOFeatures feats = flayer.GetAllFeatures(); for (int i = 0; i < feats.Length; i++) { @@ -3480,7 +3302,6 @@ return; GSOFeatureLayer flayer = layer as GSOFeatureLayer; - GSOFeatureDataset fdataset = flayer.Dataset as GSOFeatureDataset; GSOFeatures feats = flayer.GetAllFeatures(); for (int i = 0; i < feats.Length; i++) { @@ -5508,7 +5329,6 @@ private void addNodeToLayerManagerNode(GSOLayer layer) { if (layer == null) return; - GSODataset dataset = layer.Dataset; CheckDatasetGeoReference(layer.Dataset, ""); TreeNode node = new TreeNode(); @@ -5527,43 +5347,24 @@ /// /// /// - public int getLabelName(GSOLayer layer) - { - int nid = -1; - if (layer.GetAllFeatures().Length > 0) - { - string id = layer.GetAllFeatures()[layer.GetAllFeatures().Length - 1].Name; +// public int getLabelName(GSOLayer layer) +// { +// int nid = -1; +// if (layer.GetAllFeatures().Length > 0) +// { +// string id = layer.GetAllFeatures()[layer.GetAllFeatures().Length - 1].Name; +// +// int.TryParse(id, out nid); +// } +// else +// { +// nid = 0; +// } +// return nid; +// } - int.TryParse(id, out nid); - } - else - { - nid = 0; - } - return nid; - } /// - /// 判断选中的对象是否为管线 - /// - /// 被选中管线 - /// 返回一根线 - private GSOFeature IsPipeLineOfSelectedObj() - { - GSOFeature resFeature = null; - if (globeControl1.Globe.SelObjectCount < 1) return null; - GSOLayer resLayer = null; - globeControl1.Globe.GetSelectObject(0, out resFeature, out resLayer); - if (resFeature == null) return null; - - GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; - if (line1 == null) return null; - GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; - if (pipeStyle1 == null) return null; - - return resFeature; - } - /// /// 图层节点树中 节点 右键单击事件处理 /// /// @@ -5615,13 +5416,15 @@ { TreeNode node = contextMenuStrip2.Tag as TreeNode; TreeNode parentNode = node.Parent; - Int32 nIndex = node.Index; if (parentNode.Text == "标注管理" || parentNode.Text == "传感器管理") { RefreshTreeNodeLayerFeatureList(node); } } + + #region wxl? VisitFeature3Ds的作用,重构后,是否对其有影响 + /// /// 给指定的图层节点添加代表feature对象的子节点 /// @@ -5636,6 +5439,9 @@ VisitFeature3Ds(layer.GetAllFeatures(), layerTreeNode); } } + + #endregion + /// /// 标注管理、传感器管理 图层目录树的右键菜单中的 移除所有 菜单 /// @@ -5660,53 +5466,11 @@ { if (e.Action != TreeViewAction.Unknown) { - CheckTreeNode(e.Node, e.Node.Checked); + //wxl优化标注管理树形结构 + TreeUtils.TreeNodeCheckedChange(globeControl1,e.Node); } } - /// - /// 改变指定节点对应的复选框的选中状态 - /// - /// - /// - private void CheckTreeNode(TreeNode node, Boolean bChecked) - { - CheckChildTreeNode(node, bChecked); - globeControl1.Globe.Refresh(); - } - /// - /// 改变指定节点的子节点对应的复选框的选中状态 - /// - /// - /// - private void CheckChildTreeNode(TreeNode node, Boolean bChecked) - { - if (node == null) - return; - if (node.Tag != null) - { - if (node.Tag.GetType() == typeof(GSOFeatureFolder) || node.Tag.GetType() == typeof(GSOFeature)) - ((GSOFeature)node.Tag).SetVisibleDirectly(bChecked); - else - { - GSOLayer curLayer = node.Tag as GSOLayer; - GSOTerrain curTerrain = node.Tag as GSOTerrain; - if (curLayer != null) - { - curLayer.Visible = bChecked; - } - else if (curTerrain != null) - { - curTerrain.Visible = bChecked; - } - } - } - // 递归处理子节点 - for (int i = 0; i < node.Nodes.Count; i++) - { - node.Nodes[i].Checked = bChecked; - CheckChildTreeNode(node.Nodes[i], bChecked); - } - } + /// /// 标注管理、传感器管理 目录树中的feature节点的右键菜单中的 删除 菜单 /// @@ -5984,7 +5748,7 @@ frmModify = new FrmMnModify(globeControl1, shlayername, shresultLists); - if (boolfrmModify != false) return; + if (boolfrmModify) return; frmModify.Owner = this; frmModify.Location = new Point(Width - frmModify.Width - 10, Height - frmModify.Height - 50); frmModify.Show(); @@ -6261,16 +6025,15 @@ globeControl1.Globe.ClearMeasure(); layerTemp.RemoveAllFeature(); - layerTemp2.RemoveAllFeature(); buttonItemLS5.Checked = false; dataGridViewX1.DataSource = null; panelOfTable.Visible = false; globeControl1.Globe.MemoryLayer.RemoveAllFeature(); + globeControl2.Globe.MemoryLayer.RemoveAllFeature(); globeControl1.Globe.ClearAnalysis(); - // 清除净距分析结果 buttonX2_Click(null, null); buttonX8_Click(null, null); @@ -6527,8 +6290,8 @@ GSOFeatures selectFeatures = new GSOFeatures(); for (int i = 0; i < globeControl1.Globe.SelObjectCount; i++) { - GSOFeature feature = null; - GSOLayer layer = null; + GSOFeature feature; + GSOLayer layer; globeControl1.Globe.GetSelectObject(i, out feature, out layer); if (feature != null && feature.Geometry != null && feature.Geometry.Type == EnumGeometryType.GeoPolyline3D) { @@ -6536,11 +6299,9 @@ } } List feats = SectionAnalysisTool.ZDMAnalysis(selectFeatures); - if (feats != null && feats.Count >= 1) - { - FrmProfileAnalysis frm = new FrmProfileAnalysis(globeControl1, feats); - frm.Show(this); - } + if (feats == null || feats.Count < 1) return; + FrmProfileAnalysis frm = new FrmProfileAnalysis(globeControl1, feats); + frm.Show(this); } /// /// 道路断面分析 @@ -7057,14 +6818,14 @@ /// private void buttonItemSZ1_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7075,17 +6836,17 @@ /// /// 管径标注 /// - GSOFeature radiusMarkerFeature; +// GSOFeature radiusMarkerFeature; private void buttonItemBZ2_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine==null||selLine[0].Count <= 1)//wxl增加为空判断,下面方法同理 + if (selLine == null || selLine[0].Count <= 1) //wxl增加为空判断,下面方法同理 { return; } @@ -7100,14 +6861,14 @@ /// private void buttonItemBZ3_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null||selLine[0].Count <= 1) { return; } @@ -7123,14 +6884,14 @@ /// private void buttonItemBZ4_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7140,7 +6901,7 @@ /// /// 距离标注 /// - bool distanceMarker; +// bool distanceMarker; private void buttonItemBZ5_Click(object sender, EventArgs e) { //日志记录 @@ -7148,7 +6909,7 @@ globeControl1.Globe.Action = EnumAction3D.TrackPolyline; //globeControl1.Globe.DistanceRuler.MeasureMode = EnumDistanceMeasureMode.HVSLineMeasure; - distanceMarker = true; +// distanceMarker = true; } /// /// 自定义标注 @@ -7187,14 +6948,14 @@ /// private void buttonItemBZ8_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7775,11 +7536,9 @@ if (frm.ShowDialog() == DialogResult.OK) { GSOLayer featureAddLayer = TreeNodeFeatureLayer(); - if (featureAddLayer != null) - { - FrmAddInstrument dlg = new FrmAddInstrument(globeControl1, featureAddLayer); - dlg.Show(this); - } + if (featureAddLayer == null) return; + FrmAddInstrument dlg = new FrmAddInstrument(globeControl1, featureAddLayer); + dlg.Show(this); } } /// @@ -7822,11 +7581,9 @@ frm.citySevenLineType); globeControl1.Tag = citySevenLine; GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(frm.citySevenLineType); - if (layer != null) - { - globeControl1.Globe.DestLayerFeatureAdd = layer; - layer.Editable = true; - } + if (layer == null) return; + globeControl1.Globe.DestLayerFeatureAdd = layer; + layer.Editable = true; } } #endregion @@ -7986,44 +7743,45 @@ LogManager.saveLog(Utility.userName, buttonItemBJ10_2.Text); List listVectorNames = new List(); - for (int i = 0; i < Utility.m_PipelineLayerNames.Count; i++) + foreach (string pipeline in Utility.m_PipelineLayerNames) { - if (!listVectorNames.Contains(Utility.m_PipelineLayerNames[i])) + if (!listVectorNames.Contains(pipeline)) { - listVectorNames.Add(Utility.m_PipelineLayerNames[i]); + listVectorNames.Add(pipeline); } } - for (int i = 0; i < Utility.valueLayerNames.Count; i++) + foreach (string valve in Utility.valueLayerNames) { - if (!listVectorNames.Contains(Utility.valueLayerNames[i])) + if (!listVectorNames.Contains(valve)) { - listVectorNames.Add(Utility.valueLayerNames[i]); + listVectorNames.Add(valve); } } - for (int i = 0; i < Utility.workwellLayerNames.Count; i++) + foreach (string workwell in Utility.workwellLayerNames) { - if (!listVectorNames.Contains(Utility.workwellLayerNames[i])) + if (!listVectorNames.Contains(workwell)) { - listVectorNames.Add(Utility.workwellLayerNames[i]); + listVectorNames.Add(workwell); } } - for (int i = 0; i < Utility.instrumenLayerNames.Count; i++) + foreach (string instrument in Utility.instrumenLayerNames) { - if (!listVectorNames.Contains(Utility.instrumenLayerNames[i])) + if (!listVectorNames.Contains(instrument)) { - listVectorNames.Add(Utility.instrumenLayerNames[i]); + listVectorNames.Add(instrument); } } - for (int i = 0; i < Utility.pipefittingLayerNames.Count; i++) + foreach (string pipefitting in Utility.pipefittingLayerNames) { - if (!listVectorNames.Contains(Utility.pipefittingLayerNames[i])) + if (!listVectorNames.Contains(pipefitting)) { - listVectorNames.Add(Utility.pipefittingLayerNames[i]); + listVectorNames.Add(pipefitting); } } FrmExportVector frm = new FrmExportVector(globeControl1, listVectorNames); frm.ShowDialog(); } + /// /// 删除模型 /// @@ -8032,27 +7790,25 @@ private void buttonItemBJ13_Click(object sender, EventArgs e) { LogManager.saveLog(Utility.userName, buttonItemBJ13.Text); - if (globeControl1.Globe.SelObjectCount > 0) - { - for (int i = 0; i < globeControl1.Globe.SelObjectCount; i++) - { - GSOFeature f = null; - GSOLayer layer = null; - globeControl1.Globe.GetSelectObject(i, out f, out layer); - if (f == null) continue; - f.Delete(); - if (layer != null) - globeControl1.Globe.AddToEditHistroy(layer, f, EnumEditType.Delete); - globeControl1.Refresh(); - - } - MessageBox.Show("删除成功!", "提示"); - } - else + var selObjCount = globeControl1.Globe.SelObjectCount; + if (selObjCount == 0) { MessageBox.Show("请选中要删除的模型!", "提示"); + return; } + for (int i = 0; i < selObjCount; i++) + { + GSOFeature f; + GSOLayer layer; + globeControl1.Globe.GetSelectObject(i, out f, out layer); + if (f == null) continue; + f.Delete(); + if (layer != null) + globeControl1.Globe.AddToEditHistroy(layer, f, EnumEditType.Delete); + globeControl1.Refresh(); + } + MessageBox.Show("删除成功!", "提示"); globeControl1.Globe.Action = EnumAction3D.ActionNull; } @@ -8118,6 +7874,7 @@ toolStripNumbers.Text = "红线审核 |共有:" + table.Rows.Count + "条"; toolStripDropDownButton3.Visible = true; } + /// /// 主窗体 下方的工具条中的 导出.xls文件 按钮事件处理 /// @@ -8127,24 +7884,28 @@ { if (dataGridViewX1.Rows.Count != 0) { - string strSaveFile = string.Empty; - SaveFileDialog savefiledialog = new SaveFileDialog(); - savefiledialog.Filter = "Excel文件|*.xls,*.xlsx"; - savefiledialog.AddExtension = true; - savefiledialog.FileName = "红线审核"; - if (savefiledialog.ShowDialog() == DialogResult.OK) - strSaveFile = savefiledialog.FileName; - else return; - - ExpEXCEL.ExpToExcel(dataGridViewX1, strSaveFile, "红线审核", lineStruct, featsList); - MessageBox.Show("导出成功!"); - } - else - { MessageBox.Show("表格内容为空!", "提示"); + return; } + string strSaveFile; + SaveFileDialog savefiledialog = new SaveFileDialog(); + savefiledialog.Filter = "Excel文件|*.xls,*.xlsx"; + savefiledialog.AddExtension = true; + savefiledialog.FileName = "红线审核"; + if (savefiledialog.ShowDialog() == DialogResult.OK) + strSaveFile = savefiledialog.FileName; + else return; + + ExpEXCEL.ExpToExcel(dataGridViewX1, strSaveFile, "红线审核", lineStruct, featsList); + MessageBox.Show("导出成功!"); + } + /// + /// 双屏对比的地面透明度设置 + /// + /// + /// private void sliderItem2_ValueChanged(object sender, EventArgs e) { LogManager.saveLog(Utility.userName, sliderItem2.Text); @@ -8155,7 +7916,7 @@ { layer.Opaque = 100 - sliderItem2.Value; } - layer = globeControl2.Globe.Layers.GetLayerByCaption("180fd");//("180fd"); + layer = globeControl2.Globe.Layers.GetLayerByCaption(Utility.roadLayerName);//("180fd"); if (layer != null) { layer.Opaque = 100 - sliderItem2.Value; @@ -8554,7 +8315,7 @@ LogManager.saveLog(Utility.userName, buttonItem8.Text); int width = Width; - FrmCompareFeature.ShowForm(globeControl1, globeControl2, layerTemp, layerTemp2, width); + FrmCompareFeature.ShowForm(globeControl1, globeControl2, width); } /// /// 红线审核导出图片 @@ -8690,7 +8451,6 @@ private void btn_role_resc_Click(object sender, EventArgs e) { - LogManager.saveLog(Utility.userName, btn_role_resc.Text); if (FrmRoleRescManager.IS_OPEN) return; @@ -8708,7 +8468,8 @@ frm.ShowDialog(); } } -//文档管理 操作 + + //文档管理 操作 private void btn_document_info_Click(object sender, EventArgs e) { @@ -8919,11 +8680,9 @@ } private void pictureBox1_Paint(object sender, PaintEventArgs e) - { - int Width = this.Width; + { string welcomeUser = "欢迎您:" + Utility.userName; - Graphics g = e.Graphics; - g.DrawString(welcomeUser, new Font("宋体", 12), new SolidBrush(Color.Black), Width - 180, 50); + e.Graphics.DrawString(welcomeUser, new Font("宋体", 12), new SolidBrush(Color.Black), Width - 180, 50); } } diff --git a/MainFrm.designer.cs b/MainFrm.designer.cs index a9b8c6f..5d74670 100644 --- a/MainFrm.designer.cs +++ b/MainFrm.designer.cs @@ -244,42 +244,6 @@ this.保存ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.定位ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.ribbonControl1 = new DevComponents.DotNetBar.RibbonControl(); - this.ribbonPanel6 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar6 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItemSPSZ = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem8 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemLocation = new DevComponents.DotNetBar.ButtonItem(); - this.sliderItem2 = new DevComponents.DotNetBar.SliderItem(); - this.buttonItemGBJC = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonPanel4 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar1 = new DevComponents.DotNetBar.RibbonBar(); - this.btn_document_info = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonPanel12 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar18 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItem133 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem132 = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonBar13 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItem127 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem128 = new DevComponents.DotNetBar.ButtonItem(); - this.sliderItem1 = new DevComponents.DotNetBar.SliderItem(); - this.buttonItem134 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem130 = new DevComponents.DotNetBar.ButtonItem(); - this.btn_check_history = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonPanel5 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar2 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItemHX1 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemHX2 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemDCTP = new DevComponents.DotNetBar.ButtonItem(); - this.sliderItem3 = new DevComponents.DotNetBar.SliderItem(); - this.ribbonPanel2 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar3 = new DevComponents.DotNetBar.RibbonBar(); - this.btn_user_info = new DevComponents.DotNetBar.ButtonItem(); - this.btn_role_info = new DevComponents.DotNetBar.ButtonItem(); - this.btn_resc_info = new DevComponents.DotNetBar.ButtonItem(); - this.btn_role_resc = new DevComponents.DotNetBar.ButtonItem(); - this.btn_user_role = new DevComponents.DotNetBar.ButtonItem(); - this.btn_password_edit = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemPasswordReset = new DevComponents.DotNetBar.ButtonItem(); this.ribbonPanel15 = new DevComponents.DotNetBar.RibbonPanel(); this.ribbonBar20 = new DevComponents.DotNetBar.RibbonBar(); this.buttonItemSH = new DevComponents.DotNetBar.ButtonItem(); @@ -448,6 +412,42 @@ this.buttonItemBZ9 = new DevComponents.DotNetBar.ButtonItem(); this.buttonItemBZ10 = new DevComponents.DotNetBar.ButtonItem(); this.buttonItemBZ11 = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel6 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar6 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItemSPSZ = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem8 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemLocation = new DevComponents.DotNetBar.ButtonItem(); + this.sliderItem2 = new DevComponents.DotNetBar.SliderItem(); + this.buttonItemGBJC = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel4 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar1 = new DevComponents.DotNetBar.RibbonBar(); + this.btn_document_info = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel12 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar18 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItem133 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem132 = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonBar13 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItem127 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem128 = new DevComponents.DotNetBar.ButtonItem(); + this.sliderItem1 = new DevComponents.DotNetBar.SliderItem(); + this.buttonItem134 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem130 = new DevComponents.DotNetBar.ButtonItem(); + this.btn_check_history = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel5 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar2 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItemHX1 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemHX2 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemDCTP = new DevComponents.DotNetBar.ButtonItem(); + this.sliderItem3 = new DevComponents.DotNetBar.SliderItem(); + this.ribbonPanel2 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar3 = new DevComponents.DotNetBar.RibbonBar(); + this.btn_user_info = new DevComponents.DotNetBar.ButtonItem(); + this.btn_role_info = new DevComponents.DotNetBar.ButtonItem(); + this.btn_resc_info = new DevComponents.DotNetBar.ButtonItem(); + this.btn_role_resc = new DevComponents.DotNetBar.ButtonItem(); + this.btn_user_role = new DevComponents.DotNetBar.ButtonItem(); + this.btn_password_edit = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemPasswordReset = new DevComponents.DotNetBar.ButtonItem(); this.ribbonPanel1 = new DevComponents.DotNetBar.RibbonPanel(); this.ribbonBar21 = new DevComponents.DotNetBar.RibbonBar(); this.buttonItem87 = new DevComponents.DotNetBar.ButtonItem(); @@ -652,12 +652,12 @@ this.contextMenuStrip3.SuspendLayout(); this.contextMenuStripDeleteLayerNode.SuspendLayout(); this.ribbonControl1.SuspendLayout(); + this.ribbonPanel15.SuspendLayout(); this.ribbonPanel6.SuspendLayout(); this.ribbonPanel4.SuspendLayout(); this.ribbonPanel12.SuspendLayout(); this.ribbonPanel5.SuspendLayout(); this.ribbonPanel2.SuspendLayout(); - this.ribbonPanel15.SuspendLayout(); this.ribbonPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); this.panelOfTable.SuspendLayout(); @@ -2283,12 +2283,12 @@ // this.ribbonControl1.BackgroundStyle.Class = ""; this.ribbonControl1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonControl1.Controls.Add(this.ribbonPanel15); + this.ribbonControl1.Controls.Add(this.ribbonPanel2); this.ribbonControl1.Controls.Add(this.ribbonPanel6); this.ribbonControl1.Controls.Add(this.ribbonPanel4); this.ribbonControl1.Controls.Add(this.ribbonPanel12); this.ribbonControl1.Controls.Add(this.ribbonPanel5); - this.ribbonControl1.Controls.Add(this.ribbonPanel2); - this.ribbonControl1.Controls.Add(this.ribbonPanel15); this.ribbonControl1.Controls.Add(this.ribbonPanel1); this.ribbonControl1.Dock = System.Windows.Forms.DockStyle.Top; this.ribbonControl1.ImeMode = System.Windows.Forms.ImeMode.NoControl; @@ -2331,595 +2331,6 @@ this.ribbonControl1.Text = "ribbonControl1"; this.ribbonControl1.UseCustomizeDialog = false; // - // ribbonPanel6 - // - this.ribbonPanel6.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel6.Controls.Add(this.ribbonBar6); - this.ribbonPanel6.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel6.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel6.Name = "ribbonPanel6"; - this.ribbonPanel6.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel6.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel6.Style.Class = ""; - this.ribbonPanel6.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel6.StyleMouseDown.Class = ""; - this.ribbonPanel6.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel6.StyleMouseOver.Class = ""; - this.ribbonPanel6.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel6.TabIndex = 38; - // - // ribbonBar6 - // - this.ribbonBar6.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar6.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar6.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar6.BackgroundStyle.Class = ""; - this.ribbonBar6.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar6.ContainerControlProcessDialogKey = true; - this.ribbonBar6.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar6.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItemSPSZ, - this.buttonItem8, - this.buttonItemLocation, - this.sliderItem2, - this.buttonItemGBJC}); - this.ribbonBar6.Location = new System.Drawing.Point(3, 0); - this.ribbonBar6.Name = "ribbonBar6"; - this.ribbonBar6.Size = new System.Drawing.Size(427, 59); - this.ribbonBar6.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar6.TabIndex = 0; - // - // - // - this.ribbonBar6.TitleStyle.Class = ""; - this.ribbonBar6.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar6.TitleStyleMouseOver.Class = ""; - this.ribbonBar6.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar6.TitleVisible = false; - // - // buttonItemSPSZ - // - this.buttonItemSPSZ.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemSPSZ.Image"))); - this.buttonItemSPSZ.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemSPSZ.Name = "buttonItemSPSZ"; - this.buttonItemSPSZ.SubItemsExpandWidth = 14; - this.buttonItemSPSZ.Text = "双屏设置"; - this.buttonItemSPSZ.Click += new System.EventHandler(this.buttonItemSPSZ_Click); - // - // buttonItem8 - // - this.buttonItem8.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem8.Image"))); - this.buttonItem8.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem8.Name = "buttonItem8"; - this.buttonItem8.SubItemsExpandWidth = 14; - this.buttonItem8.Text = "双屏分析"; - this.buttonItem8.Click += new System.EventHandler(this.buttonItem8_Click); - // - // buttonItemLocation - // - this.buttonItemLocation.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemLocation.Image"))); - this.buttonItemLocation.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemLocation.Name = "buttonItemLocation"; - this.buttonItemLocation.SubItemsExpandWidth = 14; - this.buttonItemLocation.Text = "快速定位"; - this.buttonItemLocation.Click += new System.EventHandler(this.buttonItemLocation_Click); - // - // sliderItem2 - // - this.sliderItem2.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; - this.sliderItem2.LabelWidth = 50; - this.sliderItem2.Name = "sliderItem2"; - this.sliderItem2.Text = "地面透明度"; - this.sliderItem2.TextColor = System.Drawing.Color.Black; - this.sliderItem2.Value = 0; - this.sliderItem2.ValueChanged += new System.EventHandler(this.sliderItem2_ValueChanged); - // - // buttonItemGBJC - // - this.buttonItemGBJC.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemGBJC.Image"))); - this.buttonItemGBJC.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemGBJC.Name = "buttonItemGBJC"; - this.buttonItemGBJC.SubItemsExpandWidth = 14; - this.buttonItemGBJC.Text = "国标检测"; - this.buttonItemGBJC.Click += new System.EventHandler(this.buttonItemGBJC_Click); - // - // ribbonPanel4 - // - this.ribbonPanel4.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel4.Controls.Add(this.ribbonBar1); - this.ribbonPanel4.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel4.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel4.Name = "ribbonPanel4"; - this.ribbonPanel4.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel4.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel4.Style.Class = ""; - this.ribbonPanel4.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel4.StyleMouseDown.Class = ""; - this.ribbonPanel4.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel4.StyleMouseOver.Class = ""; - this.ribbonPanel4.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel4.TabIndex = 36; - this.ribbonPanel4.Visible = false; - // - // ribbonBar1 - // - this.ribbonBar1.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar1.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar1.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar1.BackgroundStyle.Class = ""; - this.ribbonBar1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar1.ContainerControlProcessDialogKey = true; - this.ribbonBar1.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar1.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.btn_document_info}); - this.ribbonBar1.Location = new System.Drawing.Point(3, 0); - this.ribbonBar1.Name = "ribbonBar1"; - this.ribbonBar1.Size = new System.Drawing.Size(88, 59); - this.ribbonBar1.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar1.TabIndex = 0; - // - // - // - this.ribbonBar1.TitleStyle.Class = ""; - this.ribbonBar1.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar1.TitleStyleMouseOver.Class = ""; - this.ribbonBar1.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar1.TitleVisible = false; - // - // btn_document_info - // - this.btn_document_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_document_info.Image"))); - this.btn_document_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_document_info.Name = "btn_document_info"; - this.btn_document_info.SubItemsExpandWidth = 14; - this.btn_document_info.Text = "文档管理"; - this.btn_document_info.Click += new System.EventHandler(this.btn_document_info_Click); - // - // ribbonPanel12 - // - this.ribbonPanel12.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel12.Controls.Add(this.ribbonBar18); - this.ribbonPanel12.Controls.Add(this.ribbonBar13); - this.ribbonPanel12.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel12.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel12.Name = "ribbonPanel12"; - this.ribbonPanel12.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel12.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel12.Style.Class = ""; - this.ribbonPanel12.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel12.StyleMouseDown.Class = ""; - this.ribbonPanel12.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel12.StyleMouseOver.Class = ""; - this.ribbonPanel12.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel12.TabIndex = 34; - this.ribbonPanel12.Visible = false; - // - // ribbonBar18 - // - this.ribbonBar18.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar18.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar18.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar18.BackgroundStyle.Class = ""; - this.ribbonBar18.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar18.ContainerControlProcessDialogKey = true; - this.ribbonBar18.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar18.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItem133, - this.buttonItem132}); - this.ribbonBar18.Location = new System.Drawing.Point(508, 0); - this.ribbonBar18.Name = "ribbonBar18"; - this.ribbonBar18.Size = new System.Drawing.Size(171, 59); - this.ribbonBar18.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar18.TabIndex = 1; - // - // - // - this.ribbonBar18.TitleStyle.Class = ""; - this.ribbonBar18.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar18.TitleStyleMouseOver.Class = ""; - this.ribbonBar18.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar18.TitleVisible = false; - // - // buttonItem133 - // - this.buttonItem133.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem133.Image"))); - this.buttonItem133.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem133.Name = "buttonItem133"; - this.buttonItem133.SubItemsExpandWidth = 14; - this.buttonItem133.Text = "审核入库"; - this.buttonItem133.Click += new System.EventHandler(this.buttonItem133_Click_1); - // - // buttonItem132 - // - this.buttonItem132.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem132.Image"))); - this.buttonItem132.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem132.Name = "buttonItem132"; - this.buttonItem132.SubItemsExpandWidth = 14; - this.buttonItem132.Text = "已审核的图层"; - this.buttonItem132.Visible = false; - this.buttonItem132.Click += new System.EventHandler(this.buttonItem132_Click_1); - // - // ribbonBar13 - // - this.ribbonBar13.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar13.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar13.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar13.BackgroundStyle.Class = ""; - this.ribbonBar13.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar13.ContainerControlProcessDialogKey = true; - this.ribbonBar13.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar13.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItem127, - this.buttonItem128, - this.sliderItem1, - this.buttonItem134, - this.buttonItem130, - this.btn_check_history}); - this.ribbonBar13.Location = new System.Drawing.Point(3, 0); - this.ribbonBar13.Name = "ribbonBar13"; - this.ribbonBar13.Size = new System.Drawing.Size(505, 59); - this.ribbonBar13.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar13.TabIndex = 0; - // - // - // - this.ribbonBar13.TitleStyle.Class = ""; - this.ribbonBar13.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar13.TitleStyleMouseOver.Class = ""; - this.ribbonBar13.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar13.TitleVisible = false; - // - // buttonItem127 - // - this.buttonItem127.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem127.Image"))); - this.buttonItem127.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem127.Name = "buttonItem127"; - this.buttonItem127.SubItemsExpandWidth = 14; - this.buttonItem127.Text = "打开数据"; - this.buttonItem127.Click += new System.EventHandler(this.buttonItem127_Click_2); - // - // buttonItem128 - // - this.buttonItem128.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem128.Image"))); - this.buttonItem128.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem128.Name = "buttonItem128"; - this.buttonItem128.SubItemsExpandWidth = 14; - this.buttonItem128.Text = "一键审核"; - this.buttonItem128.Click += new System.EventHandler(this.buttonItem128_Click); - // - // sliderItem1 - // - this.sliderItem1.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; - this.sliderItem1.LabelWidth = 50; - this.sliderItem1.Name = "sliderItem1"; - this.sliderItem1.Text = "地面透明度"; - this.sliderItem1.TextColor = System.Drawing.Color.Black; - this.sliderItem1.Value = 0; - this.sliderItem1.ValueChanged += new System.EventHandler(this.sliderItem1_ValueChanged); - // - // buttonItem134 - // - this.buttonItem134.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem134.Image"))); - this.buttonItem134.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem134.Name = "buttonItem134"; - this.buttonItem134.SubItemsExpandWidth = 14; - this.buttonItem134.Text = "模拟设计修改"; - this.buttonItem134.Click += new System.EventHandler(this.buttonItem134_Click_1); - // - // buttonItem130 - // - this.buttonItem130.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem130.Image"))); - this.buttonItem130.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem130.Name = "buttonItem130"; - this.buttonItem130.SubItemsExpandWidth = 14; - this.buttonItem130.Text = "导出审核图"; - this.buttonItem130.Click += new System.EventHandler(this.buttonItem130_Click_1); - // - // btn_check_history - // - this.btn_check_history.Image = ((System.Drawing.Image)(resources.GetObject("btn_check_history.Image"))); - this.btn_check_history.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_check_history.Name = "btn_check_history"; - this.btn_check_history.SubItemsExpandWidth = 14; - this.btn_check_history.Text = "审核历史"; - this.btn_check_history.Click += new System.EventHandler(this.btn_check_history_Click); - // - // ribbonPanel5 - // - this.ribbonPanel5.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel5.Controls.Add(this.ribbonBar2); - this.ribbonPanel5.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel5.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel5.Name = "ribbonPanel5"; - this.ribbonPanel5.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel5.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel5.Style.Class = ""; - this.ribbonPanel5.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel5.StyleMouseDown.Class = ""; - this.ribbonPanel5.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel5.StyleMouseOver.Class = ""; - this.ribbonPanel5.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel5.TabIndex = 37; - this.ribbonPanel5.Visible = false; - // - // ribbonBar2 - // - this.ribbonBar2.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar2.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar2.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar2.BackgroundStyle.Class = ""; - this.ribbonBar2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar2.ContainerControlProcessDialogKey = true; - this.ribbonBar2.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar2.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItemHX1, - this.buttonItemHX2, - this.buttonItemDCTP, - this.sliderItem3}); - this.ribbonBar2.Location = new System.Drawing.Point(3, 0); - this.ribbonBar2.Name = "ribbonBar2"; - this.ribbonBar2.Size = new System.Drawing.Size(350, 59); - this.ribbonBar2.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar2.TabIndex = 0; - // - // - // - this.ribbonBar2.TitleStyle.Class = ""; - this.ribbonBar2.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar2.TitleStyleMouseOver.Class = ""; - this.ribbonBar2.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar2.TitleVisible = false; - // - // buttonItemHX1 - // - this.buttonItemHX1.AutoExpandOnClick = true; - this.buttonItemHX1.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX1.Image"))); - this.buttonItemHX1.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemHX1.Name = "buttonItemHX1"; - this.buttonItemHX1.SubItemsExpandWidth = 14; - this.buttonItemHX1.Text = "导入红线"; - this.buttonItemHX1.Click += new System.EventHandler(this.buttonItemHX1_Click); - // - // buttonItemHX2 - // - this.buttonItemHX2.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX2.Image"))); - this.buttonItemHX2.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemHX2.Name = "buttonItemHX2"; - this.buttonItemHX2.SubItemsExpandWidth = 14; - this.buttonItemHX2.Text = "红线审核"; - this.buttonItemHX2.Click += new System.EventHandler(this.buttonItemHX2_Click); - // - // buttonItemDCTP - // - this.buttonItemDCTP.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemDCTP.Image"))); - this.buttonItemDCTP.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemDCTP.Name = "buttonItemDCTP"; - this.buttonItemDCTP.SubItemsExpandWidth = 14; - this.buttonItemDCTP.Text = "导出图片"; - this.buttonItemDCTP.Click += new System.EventHandler(this.buttonItemDCTP_Click); - // - // sliderItem3 - // - this.sliderItem3.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; - this.sliderItem3.LabelWidth = 50; - this.sliderItem3.Name = "sliderItem3"; - this.sliderItem3.Text = "地面透明度"; - this.sliderItem3.TextColor = System.Drawing.Color.Black; - this.sliderItem3.Value = 0; - this.sliderItem3.ValueChanged += new System.EventHandler(this.sliderItem3_ValueChanged); - // - // ribbonPanel2 - // - this.ribbonPanel2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel2.Controls.Add(this.ribbonBar3); - this.ribbonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel2.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel2.Name = "ribbonPanel2"; - this.ribbonPanel2.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel2.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel2.Style.Class = ""; - this.ribbonPanel2.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel2.StyleMouseDown.Class = ""; - this.ribbonPanel2.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel2.StyleMouseOver.Class = ""; - this.ribbonPanel2.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel2.TabIndex = 39; - this.ribbonPanel2.Visible = false; - // - // ribbonBar3 - // - this.ribbonBar3.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar3.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar3.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar3.BackgroundStyle.Class = ""; - this.ribbonBar3.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar3.ContainerControlProcessDialogKey = true; - this.ribbonBar3.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar3.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.btn_user_info, - this.btn_role_info, - this.btn_resc_info, - this.btn_role_resc, - this.btn_user_role, - this.btn_password_edit, - this.buttonItemPasswordReset}); - this.ribbonBar3.Location = new System.Drawing.Point(3, 0); - this.ribbonBar3.Name = "ribbonBar3"; - this.ribbonBar3.Size = new System.Drawing.Size(551, 59); - this.ribbonBar3.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar3.TabIndex = 1; - // - // - // - this.ribbonBar3.TitleStyle.Class = ""; - this.ribbonBar3.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar3.TitleStyleMouseOver.Class = ""; - this.ribbonBar3.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar3.TitleVisible = false; - // - // btn_user_info - // - this.btn_user_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_info.Image"))); - this.btn_user_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_user_info.Name = "btn_user_info"; - this.btn_user_info.SubItemsExpandWidth = 14; - this.btn_user_info.Text = "用户管理"; - this.btn_user_info.Click += new System.EventHandler(this.btn_user_info_Click); - // - // btn_role_info - // - this.btn_role_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_info.Image"))); - this.btn_role_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_role_info.Name = "btn_role_info"; - this.btn_role_info.SubItemsExpandWidth = 14; - this.btn_role_info.Text = "角色管理"; - this.btn_role_info.Click += new System.EventHandler(this.btn_role_info_Click); - // - // btn_resc_info - // - this.btn_resc_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_resc_info.Image"))); - this.btn_resc_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_resc_info.Name = "btn_resc_info"; - this.btn_resc_info.SubItemsExpandWidth = 14; - this.btn_resc_info.Text = "资源管理"; - this.btn_resc_info.Visible = false; - this.btn_resc_info.Click += new System.EventHandler(this.btn_resc_info_Click); - // - // btn_role_resc - // - this.btn_role_resc.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_resc.Image"))); - this.btn_role_resc.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_role_resc.Name = "btn_role_resc"; - this.btn_role_resc.SubItemsExpandWidth = 14; - this.btn_role_resc.Text = "角色授权"; - this.btn_role_resc.Click += new System.EventHandler(this.btn_role_resc_Click); - // - // btn_user_role - // - this.btn_user_role.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_role.Image"))); - this.btn_user_role.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_user_role.Name = "btn_user_role"; - this.btn_user_role.SubItemsExpandWidth = 14; - this.btn_user_role.Text = "用户授权"; - this.btn_user_role.Click += new System.EventHandler(this.btn_user_role_Click); - // - // btn_password_edit - // - this.btn_password_edit.Image = ((System.Drawing.Image)(resources.GetObject("btn_password_edit.Image"))); - this.btn_password_edit.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_password_edit.Name = "btn_password_edit"; - this.btn_password_edit.SubItemsExpandWidth = 14; - this.btn_password_edit.Text = "密码修改"; - this.btn_password_edit.Click += new System.EventHandler(this.btn_password_edit_Click); - // - // buttonItemPasswordReset - // - this.buttonItemPasswordReset.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemPasswordReset.Image"))); - this.buttonItemPasswordReset.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemPasswordReset.Name = "buttonItemPasswordReset"; - this.buttonItemPasswordReset.SubItemsExpandWidth = 14; - this.buttonItemPasswordReset.Text = "重置密码"; - this.buttonItemPasswordReset.Click += new System.EventHandler(this.buttonItemPasswordReset_Click); - // // ribbonPanel15 // this.ribbonPanel15.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; @@ -2945,7 +2356,6 @@ this.ribbonPanel15.StyleMouseOver.Class = ""; this.ribbonPanel15.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; this.ribbonPanel15.TabIndex = 35; - this.ribbonPanel15.Visible = false; // // ribbonBar20 // @@ -4286,6 +3696,596 @@ this.buttonItemBZ11.Text = "标注管理"; this.buttonItemBZ11.Click += new System.EventHandler(this.buttonItemBZ11_Click); // + // ribbonPanel6 + // + this.ribbonPanel6.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel6.Controls.Add(this.ribbonBar6); + this.ribbonPanel6.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel6.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel6.Name = "ribbonPanel6"; + this.ribbonPanel6.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel6.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel6.Style.Class = ""; + this.ribbonPanel6.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel6.StyleMouseDown.Class = ""; + this.ribbonPanel6.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel6.StyleMouseOver.Class = ""; + this.ribbonPanel6.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel6.TabIndex = 38; + this.ribbonPanel6.Visible = false; + // + // ribbonBar6 + // + this.ribbonBar6.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar6.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar6.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar6.BackgroundStyle.Class = ""; + this.ribbonBar6.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar6.ContainerControlProcessDialogKey = true; + this.ribbonBar6.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar6.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItemSPSZ, + this.buttonItem8, + this.buttonItemLocation, + this.sliderItem2, + this.buttonItemGBJC}); + this.ribbonBar6.Location = new System.Drawing.Point(3, 0); + this.ribbonBar6.Name = "ribbonBar6"; + this.ribbonBar6.Size = new System.Drawing.Size(427, 59); + this.ribbonBar6.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar6.TabIndex = 0; + // + // + // + this.ribbonBar6.TitleStyle.Class = ""; + this.ribbonBar6.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar6.TitleStyleMouseOver.Class = ""; + this.ribbonBar6.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar6.TitleVisible = false; + // + // buttonItemSPSZ + // + this.buttonItemSPSZ.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemSPSZ.Image"))); + this.buttonItemSPSZ.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemSPSZ.Name = "buttonItemSPSZ"; + this.buttonItemSPSZ.SubItemsExpandWidth = 14; + this.buttonItemSPSZ.Text = "双屏设置"; + this.buttonItemSPSZ.Click += new System.EventHandler(this.buttonItemSPSZ_Click); + // + // buttonItem8 + // + this.buttonItem8.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem8.Image"))); + this.buttonItem8.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem8.Name = "buttonItem8"; + this.buttonItem8.SubItemsExpandWidth = 14; + this.buttonItem8.Text = "双屏分析"; + this.buttonItem8.Click += new System.EventHandler(this.buttonItem8_Click); + // + // buttonItemLocation + // + this.buttonItemLocation.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemLocation.Image"))); + this.buttonItemLocation.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemLocation.Name = "buttonItemLocation"; + this.buttonItemLocation.SubItemsExpandWidth = 14; + this.buttonItemLocation.Text = "快速定位"; + this.buttonItemLocation.Click += new System.EventHandler(this.buttonItemLocation_Click); + // + // sliderItem2 + // + this.sliderItem2.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; + this.sliderItem2.LabelWidth = 50; + this.sliderItem2.Name = "sliderItem2"; + this.sliderItem2.Text = "地面透明度"; + this.sliderItem2.TextColor = System.Drawing.Color.Black; + this.sliderItem2.Value = 0; + this.sliderItem2.ValueChanged += new System.EventHandler(this.sliderItem2_ValueChanged); + // + // buttonItemGBJC + // + this.buttonItemGBJC.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemGBJC.Image"))); + this.buttonItemGBJC.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemGBJC.Name = "buttonItemGBJC"; + this.buttonItemGBJC.SubItemsExpandWidth = 14; + this.buttonItemGBJC.Text = "国标检测"; + this.buttonItemGBJC.Click += new System.EventHandler(this.buttonItemGBJC_Click); + // + // ribbonPanel4 + // + this.ribbonPanel4.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel4.Controls.Add(this.ribbonBar1); + this.ribbonPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel4.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel4.Name = "ribbonPanel4"; + this.ribbonPanel4.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel4.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel4.Style.Class = ""; + this.ribbonPanel4.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel4.StyleMouseDown.Class = ""; + this.ribbonPanel4.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel4.StyleMouseOver.Class = ""; + this.ribbonPanel4.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel4.TabIndex = 36; + this.ribbonPanel4.Visible = false; + // + // ribbonBar1 + // + this.ribbonBar1.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar1.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar1.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar1.BackgroundStyle.Class = ""; + this.ribbonBar1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar1.ContainerControlProcessDialogKey = true; + this.ribbonBar1.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar1.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.btn_document_info}); + this.ribbonBar1.Location = new System.Drawing.Point(3, 0); + this.ribbonBar1.Name = "ribbonBar1"; + this.ribbonBar1.Size = new System.Drawing.Size(88, 59); + this.ribbonBar1.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar1.TabIndex = 0; + // + // + // + this.ribbonBar1.TitleStyle.Class = ""; + this.ribbonBar1.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar1.TitleStyleMouseOver.Class = ""; + this.ribbonBar1.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar1.TitleVisible = false; + // + // btn_document_info + // + this.btn_document_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_document_info.Image"))); + this.btn_document_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_document_info.Name = "btn_document_info"; + this.btn_document_info.SubItemsExpandWidth = 14; + this.btn_document_info.Text = "文档管理"; + this.btn_document_info.Click += new System.EventHandler(this.btn_document_info_Click); + // + // ribbonPanel12 + // + this.ribbonPanel12.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel12.Controls.Add(this.ribbonBar18); + this.ribbonPanel12.Controls.Add(this.ribbonBar13); + this.ribbonPanel12.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel12.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel12.Name = "ribbonPanel12"; + this.ribbonPanel12.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel12.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel12.Style.Class = ""; + this.ribbonPanel12.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel12.StyleMouseDown.Class = ""; + this.ribbonPanel12.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel12.StyleMouseOver.Class = ""; + this.ribbonPanel12.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel12.TabIndex = 34; + this.ribbonPanel12.Visible = false; + // + // ribbonBar18 + // + this.ribbonBar18.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar18.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar18.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar18.BackgroundStyle.Class = ""; + this.ribbonBar18.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar18.ContainerControlProcessDialogKey = true; + this.ribbonBar18.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar18.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItem133, + this.buttonItem132}); + this.ribbonBar18.Location = new System.Drawing.Point(508, 0); + this.ribbonBar18.Name = "ribbonBar18"; + this.ribbonBar18.Size = new System.Drawing.Size(171, 59); + this.ribbonBar18.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar18.TabIndex = 1; + // + // + // + this.ribbonBar18.TitleStyle.Class = ""; + this.ribbonBar18.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar18.TitleStyleMouseOver.Class = ""; + this.ribbonBar18.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar18.TitleVisible = false; + // + // buttonItem133 + // + this.buttonItem133.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem133.Image"))); + this.buttonItem133.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem133.Name = "buttonItem133"; + this.buttonItem133.SubItemsExpandWidth = 14; + this.buttonItem133.Text = "审核入库"; + this.buttonItem133.Click += new System.EventHandler(this.buttonItem133_Click_1); + // + // buttonItem132 + // + this.buttonItem132.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem132.Image"))); + this.buttonItem132.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem132.Name = "buttonItem132"; + this.buttonItem132.SubItemsExpandWidth = 14; + this.buttonItem132.Text = "已审核的图层"; + this.buttonItem132.Visible = false; + this.buttonItem132.Click += new System.EventHandler(this.buttonItem132_Click_1); + // + // ribbonBar13 + // + this.ribbonBar13.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar13.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar13.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar13.BackgroundStyle.Class = ""; + this.ribbonBar13.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar13.ContainerControlProcessDialogKey = true; + this.ribbonBar13.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar13.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItem127, + this.buttonItem128, + this.sliderItem1, + this.buttonItem134, + this.buttonItem130, + this.btn_check_history}); + this.ribbonBar13.Location = new System.Drawing.Point(3, 0); + this.ribbonBar13.Name = "ribbonBar13"; + this.ribbonBar13.Size = new System.Drawing.Size(505, 59); + this.ribbonBar13.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar13.TabIndex = 0; + // + // + // + this.ribbonBar13.TitleStyle.Class = ""; + this.ribbonBar13.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar13.TitleStyleMouseOver.Class = ""; + this.ribbonBar13.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar13.TitleVisible = false; + // + // buttonItem127 + // + this.buttonItem127.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem127.Image"))); + this.buttonItem127.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem127.Name = "buttonItem127"; + this.buttonItem127.SubItemsExpandWidth = 14; + this.buttonItem127.Text = "打开数据"; + this.buttonItem127.Click += new System.EventHandler(this.buttonItem127_Click_2); + // + // buttonItem128 + // + this.buttonItem128.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem128.Image"))); + this.buttonItem128.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem128.Name = "buttonItem128"; + this.buttonItem128.SubItemsExpandWidth = 14; + this.buttonItem128.Text = "一键审核"; + this.buttonItem128.Click += new System.EventHandler(this.buttonItem128_Click); + // + // sliderItem1 + // + this.sliderItem1.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; + this.sliderItem1.LabelWidth = 50; + this.sliderItem1.Name = "sliderItem1"; + this.sliderItem1.Text = "地面透明度"; + this.sliderItem1.TextColor = System.Drawing.Color.Black; + this.sliderItem1.Value = 0; + this.sliderItem1.ValueChanged += new System.EventHandler(this.sliderItem1_ValueChanged); + // + // buttonItem134 + // + this.buttonItem134.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem134.Image"))); + this.buttonItem134.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem134.Name = "buttonItem134"; + this.buttonItem134.SubItemsExpandWidth = 14; + this.buttonItem134.Text = "模拟设计修改"; + this.buttonItem134.Click += new System.EventHandler(this.buttonItem134_Click_1); + // + // buttonItem130 + // + this.buttonItem130.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem130.Image"))); + this.buttonItem130.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem130.Name = "buttonItem130"; + this.buttonItem130.SubItemsExpandWidth = 14; + this.buttonItem130.Text = "导出审核图"; + this.buttonItem130.Click += new System.EventHandler(this.buttonItem130_Click_1); + // + // btn_check_history + // + this.btn_check_history.Image = ((System.Drawing.Image)(resources.GetObject("btn_check_history.Image"))); + this.btn_check_history.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_check_history.Name = "btn_check_history"; + this.btn_check_history.SubItemsExpandWidth = 14; + this.btn_check_history.Text = "审核历史"; + this.btn_check_history.Click += new System.EventHandler(this.btn_check_history_Click); + // + // ribbonPanel5 + // + this.ribbonPanel5.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel5.Controls.Add(this.ribbonBar2); + this.ribbonPanel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel5.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel5.Name = "ribbonPanel5"; + this.ribbonPanel5.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel5.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel5.Style.Class = ""; + this.ribbonPanel5.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel5.StyleMouseDown.Class = ""; + this.ribbonPanel5.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel5.StyleMouseOver.Class = ""; + this.ribbonPanel5.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel5.TabIndex = 37; + this.ribbonPanel5.Visible = false; + // + // ribbonBar2 + // + this.ribbonBar2.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar2.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar2.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar2.BackgroundStyle.Class = ""; + this.ribbonBar2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar2.ContainerControlProcessDialogKey = true; + this.ribbonBar2.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar2.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItemHX1, + this.buttonItemHX2, + this.buttonItemDCTP, + this.sliderItem3}); + this.ribbonBar2.Location = new System.Drawing.Point(3, 0); + this.ribbonBar2.Name = "ribbonBar2"; + this.ribbonBar2.Size = new System.Drawing.Size(350, 59); + this.ribbonBar2.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar2.TabIndex = 0; + // + // + // + this.ribbonBar2.TitleStyle.Class = ""; + this.ribbonBar2.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar2.TitleStyleMouseOver.Class = ""; + this.ribbonBar2.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar2.TitleVisible = false; + // + // buttonItemHX1 + // + this.buttonItemHX1.AutoExpandOnClick = true; + this.buttonItemHX1.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX1.Image"))); + this.buttonItemHX1.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemHX1.Name = "buttonItemHX1"; + this.buttonItemHX1.SubItemsExpandWidth = 14; + this.buttonItemHX1.Text = "导入红线"; + this.buttonItemHX1.Click += new System.EventHandler(this.buttonItemHX1_Click); + // + // buttonItemHX2 + // + this.buttonItemHX2.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX2.Image"))); + this.buttonItemHX2.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemHX2.Name = "buttonItemHX2"; + this.buttonItemHX2.SubItemsExpandWidth = 14; + this.buttonItemHX2.Text = "红线审核"; + this.buttonItemHX2.Click += new System.EventHandler(this.buttonItemHX2_Click); + // + // buttonItemDCTP + // + this.buttonItemDCTP.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemDCTP.Image"))); + this.buttonItemDCTP.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemDCTP.Name = "buttonItemDCTP"; + this.buttonItemDCTP.SubItemsExpandWidth = 14; + this.buttonItemDCTP.Text = "导出图片"; + this.buttonItemDCTP.Click += new System.EventHandler(this.buttonItemDCTP_Click); + // + // sliderItem3 + // + this.sliderItem3.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; + this.sliderItem3.LabelWidth = 50; + this.sliderItem3.Name = "sliderItem3"; + this.sliderItem3.Text = "地面透明度"; + this.sliderItem3.TextColor = System.Drawing.Color.Black; + this.sliderItem3.Value = 0; + this.sliderItem3.ValueChanged += new System.EventHandler(this.sliderItem3_ValueChanged); + // + // ribbonPanel2 + // + this.ribbonPanel2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel2.Controls.Add(this.ribbonBar3); + this.ribbonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel2.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel2.Name = "ribbonPanel2"; + this.ribbonPanel2.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel2.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel2.Style.Class = ""; + this.ribbonPanel2.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel2.StyleMouseDown.Class = ""; + this.ribbonPanel2.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel2.StyleMouseOver.Class = ""; + this.ribbonPanel2.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel2.TabIndex = 39; + this.ribbonPanel2.Visible = false; + // + // ribbonBar3 + // + this.ribbonBar3.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar3.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar3.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar3.BackgroundStyle.Class = ""; + this.ribbonBar3.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar3.ContainerControlProcessDialogKey = true; + this.ribbonBar3.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar3.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.btn_user_info, + this.btn_role_info, + this.btn_resc_info, + this.btn_role_resc, + this.btn_user_role, + this.btn_password_edit, + this.buttonItemPasswordReset}); + this.ribbonBar3.Location = new System.Drawing.Point(3, 0); + this.ribbonBar3.Name = "ribbonBar3"; + this.ribbonBar3.Size = new System.Drawing.Size(551, 59); + this.ribbonBar3.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar3.TabIndex = 1; + // + // + // + this.ribbonBar3.TitleStyle.Class = ""; + this.ribbonBar3.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar3.TitleStyleMouseOver.Class = ""; + this.ribbonBar3.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar3.TitleVisible = false; + // + // btn_user_info + // + this.btn_user_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_info.Image"))); + this.btn_user_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_user_info.Name = "btn_user_info"; + this.btn_user_info.SubItemsExpandWidth = 14; + this.btn_user_info.Text = "用户管理"; + this.btn_user_info.Click += new System.EventHandler(this.btn_user_info_Click); + // + // btn_role_info + // + this.btn_role_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_info.Image"))); + this.btn_role_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_role_info.Name = "btn_role_info"; + this.btn_role_info.SubItemsExpandWidth = 14; + this.btn_role_info.Text = "角色管理"; + this.btn_role_info.Click += new System.EventHandler(this.btn_role_info_Click); + // + // btn_resc_info + // + this.btn_resc_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_resc_info.Image"))); + this.btn_resc_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_resc_info.Name = "btn_resc_info"; + this.btn_resc_info.SubItemsExpandWidth = 14; + this.btn_resc_info.Text = "资源管理"; + this.btn_resc_info.Visible = false; + this.btn_resc_info.Click += new System.EventHandler(this.btn_resc_info_Click); + // + // btn_role_resc + // + this.btn_role_resc.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_resc.Image"))); + this.btn_role_resc.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_role_resc.Name = "btn_role_resc"; + this.btn_role_resc.SubItemsExpandWidth = 14; + this.btn_role_resc.Text = "角色授权"; + this.btn_role_resc.Click += new System.EventHandler(this.btn_role_resc_Click); + // + // btn_user_role + // + this.btn_user_role.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_role.Image"))); + this.btn_user_role.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_user_role.Name = "btn_user_role"; + this.btn_user_role.SubItemsExpandWidth = 14; + this.btn_user_role.Text = "用户授权"; + this.btn_user_role.Click += new System.EventHandler(this.btn_user_role_Click); + // + // btn_password_edit + // + this.btn_password_edit.Image = ((System.Drawing.Image)(resources.GetObject("btn_password_edit.Image"))); + this.btn_password_edit.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_password_edit.Name = "btn_password_edit"; + this.btn_password_edit.SubItemsExpandWidth = 14; + this.btn_password_edit.Text = "密码修改"; + this.btn_password_edit.Click += new System.EventHandler(this.btn_password_edit_Click); + // + // buttonItemPasswordReset + // + this.buttonItemPasswordReset.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemPasswordReset.Image"))); + this.buttonItemPasswordReset.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemPasswordReset.Name = "buttonItemPasswordReset"; + this.buttonItemPasswordReset.SubItemsExpandWidth = 14; + this.buttonItemPasswordReset.Text = "重置密码"; + this.buttonItemPasswordReset.Click += new System.EventHandler(this.buttonItemPasswordReset_Click); + // // ribbonPanel1 // this.ribbonPanel1.AutoSize = true; @@ -4465,7 +4465,6 @@ // ribbonTabItem9 // this.ribbonTabItem9.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.ImageAndText; - this.ribbonTabItem9.Checked = true; this.ribbonTabItem9.HoverImage = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem9.HoverImage"))); this.ribbonTabItem9.Image = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem9.Image"))); this.ribbonTabItem9.Name = "ribbonTabItem9"; @@ -4486,6 +4485,7 @@ // ribbonTabItem14 // this.ribbonTabItem14.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.ImageAndText; + this.ribbonTabItem14.Checked = true; this.ribbonTabItem14.HoverImage = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem14.HoverImage"))); this.ribbonTabItem14.Image = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem14.Image"))); this.ribbonTabItem14.Name = "ribbonTabItem14"; @@ -5480,7 +5480,7 @@ this.dataGridViewX2.ReadOnly = true; this.dataGridViewX2.RowHeadersVisible = false; this.dataGridViewX2.RowTemplate.Height = 23; - this.dataGridViewX2.Size = new System.Drawing.Size(23359, 92); + this.dataGridViewX2.Size = new System.Drawing.Size(23953, 92); this.dataGridViewX2.TabIndex = 11; // // dataGridViewTextBoxColumn10 @@ -5574,7 +5574,7 @@ this.dataGridViewX3.ReadOnly = true; this.dataGridViewX3.RowHeadersVisible = false; this.dataGridViewX3.RowTemplate.Height = 23; - this.dataGridViewX3.Size = new System.Drawing.Size(23358, 127); + this.dataGridViewX3.Size = new System.Drawing.Size(23952, 127); this.dataGridViewX3.TabIndex = 5; this.dataGridViewX3.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.dataGridViewX3_MouseDoubleClick); // @@ -5832,7 +5832,7 @@ this.dataGridViewX8.ReadOnly = true; this.dataGridViewX8.RowHeadersVisible = false; this.dataGridViewX8.RowTemplate.Height = 23; - this.dataGridViewX8.Size = new System.Drawing.Size(133, 92); + this.dataGridViewX8.Size = new System.Drawing.Size(99, 92); this.dataGridViewX8.TabIndex = 11; // // dataGridViewTextBoxColumn12 @@ -5927,7 +5927,7 @@ this.dataGridViewX9.ReadOnly = true; this.dataGridViewX9.RowHeadersVisible = false; this.dataGridViewX9.RowTemplate.Height = 23; - this.dataGridViewX9.Size = new System.Drawing.Size(132, 127); + this.dataGridViewX9.Size = new System.Drawing.Size(98, 127); this.dataGridViewX9.TabIndex = 5; this.dataGridViewX9.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.dataGridViewX9_MouseDoubleClick); // @@ -6791,12 +6791,12 @@ this.contextMenuStripDeleteLayerNode.ResumeLayout(false); this.ribbonControl1.ResumeLayout(false); this.ribbonControl1.PerformLayout(); + this.ribbonPanel15.ResumeLayout(false); this.ribbonPanel6.ResumeLayout(false); this.ribbonPanel4.ResumeLayout(false); this.ribbonPanel12.ResumeLayout(false); this.ribbonPanel5.ResumeLayout(false); this.ribbonPanel2.ResumeLayout(false); - this.ribbonPanel15.ResumeLayout(false); this.ribbonPanel1.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.panelOfTable.ResumeLayout(false); diff --git a/ClassDoubleScreenCompare.cs b/ClassDoubleScreenCompare.cs new file mode 100644 index 0000000..f2935da --- /dev/null +++ b/ClassDoubleScreenCompare.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using GeoScene.Globe; +using GeoScene.Data; +using GeoScene.Engine; +using System.Drawing; + +namespace Cyberpipe +{ + class ClassDoubleScreenCompare + { + public static GSOFeature getSameFeatureFromOtherGlobe(GSOFeature feature, + GSOGlobeControl globeControl1, GSOGlobeControl globeControl2,double bufferWidth,GSOGeoPolygon3D resPolygon) + { + GSOLayer layer; + GSOFeatures features = new GSOFeatures(); + + if (!feature.Dataset.Caption.StartsWith("施工")) + { + layer = feature.Dataset.Caption == "供电管线" + ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") + : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(feature, fs[i], globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + else + { + layer = feature.Dataset.Caption == "施工电力管线" + ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") + : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(fs[i], feature, globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + + return getMostSimilarFeatureFromFeatures(feature, features); + + } + + + private static GSOFeature getMostSimilarFeatureFromFeatures(GSOFeature feature, GSOFeatures features) + { + double maxLength = 0; + GSOFeature f = new GSOFeature(); + GSOGeoPolyline3D line = feature.Geometry as GSOGeoPolyline3D; + + if (features.Length == 0) return null; + if (features.Length == 1) + { + f = features[0]; + f.HighLight = true; + } + else + { + for (int m = 0; m < features.Length; m++) + { + GSOGeoPolyline3D tempSGLine = features[m].Geometry as GSOGeoPolyline3D; + + double tempLength = tempSGLine.GetSpaceLength(false, 6378137); + double lengthAbs = Math.Abs(tempLength - line.GetSpaceLength(false, 6378137)); + if (m == 0) + { + f = features[0]; + f.HighLight = true; + maxLength = lengthAbs; + } + else if (lengthAbs < maxLength) + { + f = features[m]; + f.HighLight = true; + maxLength = lengthAbs; + } + } + } + return f; + } + + private static bool isSameFeature(GSOFeature feature1, GSOFeature feature2, GSOLayer layer, double bufferWidth) + { + GSOGeoPolyline3D line = feature1.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = line.CreateBuffer(bufferWidth * 2, true, 5, true, false); + + if (bufferPolygon == null) return false; + + GSOFeatures featuresInLayer = layer.FindFeaturesInPolygon(bufferPolygon, true); + + if (featuresInLayer == null || featuresInLayer.Length <= 0) + return false; + + for (int i = 0; i < featuresInLayer.Length; i++) + { + if (featuresInLayer[i].Name == feature2.Name) + { + return true; + break; + } + } + return false; + } + + private static bool isSimilarFeature(GSOFeature srcFeature, GSOFeature dscFeature, + GSOGlobeControl globeControl1,GSOGlobeControl globeControl2,double bufferWidth) + { + GSOLayer dscLayer = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); + GSOLayer srcLayer = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); + + if (!isSameFeature(srcFeature, dscFeature, dscLayer, bufferWidth) + && !isSameFeature(dscFeature, srcFeature, srcLayer, bufferWidth)) + return false; + return true; + } + + public static void CalculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2, + out double horizonDistance, out double verticalDistance, GSOGlobeControl globeControl1, GSOGlobeControl globeControl2) + { + GSOPoint3d pntIntersect1 = new GSOPoint3d(); + GSOPoint3d pntIntersect2 = new GSOPoint3d(); + GSOPoint3d pntProIntersect1 = new GSOPoint3d(); + GSOPoint3d pntProIntersect2 = new GSOPoint3d(); + + verticalDistance = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, verticalDistance, true, "垂直", globeControl1, globeControl2); + + horizonDistance = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, horizonDistance, true, "水平", globeControl1, globeControl2); + + } + + private static GSOPoint3d LabelDistance(GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, + double distance, bool markerVisible, string label,GSOGlobeControl globeControl1,GSOGlobeControl globeControl2) + { + if (pntIntersect1 == null || pntIntersect2 == null) + return new GSOPoint3d(); + GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); + GSOPoint3ds point3ds = new GSOPoint3ds(); + point3ds.Add(pntIntersect1); + point3ds.Add(pntIntersect2); + disline.AddPart(point3ds); + + GSOGeoMarker dismarker = new GSOGeoMarker(); + GSOFeature marker = null; + GSOFeature line = null; + createLineStyle(out marker, out line, disline, pntIntersect1, pntIntersect2, distance, label, dismarker); + + line.Visible = marker.Visible = markerVisible; + globeControl1.Globe.MemoryLayer.AddFeature(line); + globeControl1.Globe.MemoryLayer.AddFeature(marker); + + globeControl2.Globe.MemoryLayer.AddFeature(line); + globeControl2.Globe.MemoryLayer.AddFeature(marker); + + return dismarker.Position; + } + + private static void createLineStyle(out GSOFeature marker, out GSOFeature line, GSOGeoPolyline3D disline, + GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) + { + GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 + style.LineColor = Color.Red; + style.LineWidth = 5; //设置线的宽度为5 + style.VertexVisible = true; //显示线的节点 + disline.Style = style; //把风格添加到线上 + disline.AltitudeMode = EnumAltitudeMode.Absolute; + line = new GSOFeature(); + line.Geometry = disline; + + dismarker.X = pntIntersect1.X; + dismarker.Y = pntIntersect1.Y; + dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; + dismarker.Text = label + distance.ToString("0.00") + "米"; + dismarker.AltitudeMode = EnumAltitudeMode.Absolute; + + GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); + GSOTextStyle styleText = new GSOTextStyle(); + styleText.IsSizeFixed = true; + styleText.ForeColor = Color.Red; + styleText.FontSize = 20; + styleMarker.TextStyle = styleText; + dismarker.Style = styleMarker; + + marker = new GSOFeature(); + marker.Geometry = dismarker; + } + + } +} diff --git a/Cyberpipe.csproj b/Cyberpipe.csproj index d8aa9c8..bcce54d 100644 --- a/Cyberpipe.csproj +++ b/Cyberpipe.csproj @@ -203,6 +203,7 @@ + @@ -1143,6 +1144,7 @@ SysRescInfoManager.cs + True True diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 123caf1..2c45db6 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -258,42 +258,25 @@ for (int i = 0; i < scLayer.GetAllFeatures().Length; i++) { GSOFeature scFeature = scLayer.GetAt(i); - if (scFeature.GetFieldAsString("所属道路") == road) + if (scFeature.GetFieldAsString("所属道路") != road) continue; + GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + + GSOFeature sgFeature = null; + GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); + + //**判断同一个Feature + if (sgFeatures.Length >= 1) { - GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); - GSOFeature sgFeature = null; - GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); - - //**判断同一个Feature - if (sgFeatures.Length >= 1) + if (sgFeature != null) { - sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); + GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; + double horizonDistance, verticalDistance; - if (sgFeature != null) - { - GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; - double horizonDistance, verticalDistance; - - CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); - GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); - } - else - { - scFeature.HighLight = true; - DataRow dr = dt.NewRow(); - dr[0] = scLayer.Caption; - dr[1] = scFeature.GetFieldAsString("编号"); - dr[2] = sgLayer.Caption; - dr[3] = "无"; - dr[4] = "无"; - dr[5] = "0.02"; - dr[6] = "无"; - dr[7] = "0.02"; - dr[8] = "未设计管段"; - dt.Rows.Add(dr); - } + CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); + GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); } else { @@ -311,6 +294,21 @@ dt.Rows.Add(dr); } } + else + { + scFeature.HighLight = true; + DataRow dr = dt.NewRow(); + dr[0] = scLayer.Caption; + dr[1] = scFeature.GetFieldAsString("编号"); + dr[2] = sgLayer.Caption; + dr[3] = "无"; + dr[4] = "无"; + dr[5] = "0.02"; + dr[6] = "无"; + dr[7] = "0.02"; + dr[8] = "未设计管段"; + dt.Rows.Add(dr); + } } } /// diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index 53946c0..fe32265 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -4,7 +4,7 @@ using GeoScene.Globe; namespace Cyberpipe -{ +{ //本类作用为:辅助GlobalControl上Feature的统计分析工具类 class FeatureStatisticsService { /// @@ -60,8 +60,8 @@ /// /// /// - /// - /// + /// + /// /// /// public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) @@ -74,6 +74,7 @@ for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; double length = line.GetSpaceLength(true, 6378137); totalLength += length; ncount += 1; @@ -114,7 +115,7 @@ for (int i = 0; i < feats.Length; i++) { double radius = feats[i].GetFieldAsDouble(fieldName); - if (radius >= min && radius <= max) + if (radius >= minValue && radius <= maxValue) { result.Add(feats[i]); } @@ -148,23 +149,22 @@ lstDiameter.Sort(); if (lstDiameter.Count > 0) { - for (int m = 0; m < lstDiameter.Count; m++) + foreach (float diameter in lstDiameter) { double totalLength = 0.00; int ncount = 0; for (int j = 0; j < feats.Length; j++) { - if (feats[j].GetFieldAsFloat("管径_毫米") == lstDiameter[m]) - { - GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } + if (Math.Abs(feats[j].GetFieldAsFloat("管径_毫米") - diameter) > 0.00001) continue; + GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = lstDiameter[m].ToString(); + featuresClass.groupFieldValue = diameter.ToString(); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -191,13 +191,13 @@ //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); - for (int j = 0; j < accessStrs.Length; j++) + foreach (string accssname in accessStrs) { - GSOFeatures feats = null; - int ncount = 0; + GSOFeatures feats; + int ncount; if (polygon == null) { - feats = flayer.GetFeatureByFieldValue("附属物名称", accessStrs[j], true); + feats = flayer.GetFeatureByFieldValue("附属物名称", accssname, true); ncount = feats.Length; } else @@ -207,14 +207,14 @@ //过滤 for (int n = 0; n < feats.Length; n++) { - if (feats[n].GetFieldAsString("附属物名称").Contains(accessStrs[j])) newfeats.Add(feats[n]); + if (feats[n].GetFieldAsString("附属物名称").Contains(accssname)) newfeats.Add(feats[n]); } ncount = newfeats.Length; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); - featuresClass.layerName = accessStrs[j]; + featuresClass.layerName = accssname; featuresClass.ncount = ncount; result.Add(featuresClass); @@ -303,6 +303,26 @@ if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); - } + } + + + /// + /// 获取globeControl上选中的管线,如果返回空则没有选中的管线 + /// + /// 地球引擎 + /// 返回一根线 + public static GSOFeature GetSelectedPipeline(GSOGlobeControl globeControl) + { + GSOFeature resFeature; + if (globeControl.Globe.SelObjectCount < 1) return null; + GSOLayer resLayer; + globeControl.Globe.GetSelectObject(0, out resFeature, out resLayer); + if (resFeature == null) return null; + + GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; + if (line1 == null) return null; + GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; + return pipeStyle1 == null ? null : resFeature; + } } } diff --git a/FrmCompareFeature.cs b/FrmCompareFeature.cs index a05e8e7..ac622c4 100644 --- a/FrmCompareFeature.cs +++ b/FrmCompareFeature.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Data; using System.Drawing; using System.Windows.Forms; @@ -11,26 +10,16 @@ { public partial class FrmCompareFeature : Office2007Form { - GSOFeature srcFeature; - GSOFeature dscFeature; - GSOGlobeControl globeControl1; - GSOGlobeControl globeControl2; - bool isSamePolyline; - - GSOLayer layerTemp; - GSOLayer layerTemp2; - GSOFeature new_feat; + private GSOFeature srcFeature, dscFeature; + private GSOGlobeControl globeControl1, globeControl2; GSOGeoPolygon3D resPolygon; - static FrmCompareFeature frm; - public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2, int width) + public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, int width) { if (frm == null) { - frm = new FrmCompareFeature(_globeControl1, _globeControl2, _layerTemp, _layerTemp2); - + frm = new FrmCompareFeature(_globeControl1, _globeControl2); frm.Location = new Point((width - frm.Width)/2, 50); frm.Show(_globeControl1.Parent); } @@ -41,8 +30,7 @@ } } - public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2) + public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2) { globeControl1 = _globeControl1; globeControl2 = _globeControl2; @@ -50,99 +38,35 @@ globeControl1.Globe.Action = EnumAction3D.SelectObject; globeControl2.Globe.Action = EnumAction3D.SelectObject; - layerTemp = _layerTemp; - layerTemp2 = _layerTemp2; globeControl1.MouseClick += globeControl1_MouseClick; globeControl2.MouseClick += globeControl2_MouseClick; } + private void invalParam() + { + if (srcFeature == null || dscFeature == null) + { + MessageBox.Show("请选择要对比的管段!", "提示"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) + { + MessageBox.Show("请选择同种类型图层!"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type || + srcFeature.Geometry.Type != EnumGeometryType.GeoPolyline3D) + return; + } + private void buttonAnalysis_Click(object sender, EventArgs e) { + invalParam(); + dataGridViewX1.DataSource = null; - - double bufferWidth = Convert.ToDouble(textBox1.Text); - - if (srcFeature == null || dscFeature == null) - MessageBox.Show("请选择要对比的管段!", "提示"); - else - { - if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) - MessageBox.Show("请选择同种类型图层!"); - else if (srcFeature.Geometry.Type == dscFeature.Geometry.Type && - srcFeature.Geometry.Type == EnumGeometryType.GeoPolyline3D) - { - lineLayerCompare(srcFeature, dscFeature, bufferWidth); - if (!isSamePolyline) - MessageBox.Show("实测管段与施工管段非同一条管段,请选择同一管段进行比较!", "提示"); - else - { - lineFeatureCompare(srcFeature, dscFeature); - globeControl1.Globe.Action = EnumAction3D.ActionNull; - globeControl2.Globe.Action = EnumAction3D.ActionNull; - } - } - else - MessageBox.Show("无法处理该类型图层!"); - } + lineFeatureCompare(srcFeature, dscFeature); } - - /// - /// 在容差范围内判断是否同一根管段 - /// - /// - /// - /// - /// - private bool lineLayerCompare(GSOFeature srcFeature, GSOFeature dscFeature, double bufferWidth) - { - isSamePolyline = false; - - GSOGeoPolyline3D srcLine = srcFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D srcBufferPolygon = srcLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer dsc = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); - - if (srcBufferPolygon != null) - { - GSOFeatures featuresInSrcLayer = dsc.FindFeaturesInPolygon(srcBufferPolygon, true); - - if (featuresInSrcLayer != null && featuresInSrcLayer.Length > 0) - { - for (int i = 0; i < featuresInSrcLayer.Length; i++) - { - if (featuresInSrcLayer[i].Name == dscFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D dscBufferPolygon = dscLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer src = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); - - if (dscBufferPolygon != null) - { - GSOFeatures featuresInDscLayer = src.FindFeaturesInPolygon(dscBufferPolygon, true); - - if (featuresInDscLayer != null && featuresInDscLayer.Length > 0) - { - for (int i = 0; i < featuresInDscLayer.Length; i++) - { - if (featuresInDscLayer[i].Name == srcFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - return isSamePolyline; - } - /// /// 分析两根管段的具体差异 /// @@ -156,8 +80,10 @@ GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; double dscLineLength = dscLine.GetSpaceLength(false, 6378137); - double horizonDistance = calculateDistance(srcLine, dscLine,false); - double verticalDistance = calculateDistance(srcLine, dscLine,true); + double horizonDistance, verticalDistance; + + ClassDoubleScreenCompare.CalculateDistance(srcLine, dscLine, out horizonDistance, + out verticalDistance,globeControl1,globeControl2); DataTable dt = new DataTable(); dt.Columns.Add("数据名称"); @@ -189,6 +115,98 @@ dt.Rows.Add(dscRow); dataGridViewX1.DataSource = dt; + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) + { + globeControl1.Globe.MemoryLayer.RemoveAllFeature(); + globeControl2.Globe.MemoryLayer.RemoveAllFeature(); + + GSOFeature new_feat = new GSOFeature(); + resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); + resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; + new_feat.Geometry = resPolygon; + + globeControl1.Globe.MemoryLayer.AddFeature(new_feat); + globeControl2.Globe.MemoryLayer.AddFeature(new_feat); + + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + public static void clearFeatureHighLight(GSOGlobeControl glb) + { + for (int i = 0; i < glb.Globe.Layers.Count; i++) + { + GSOLayer layer = glb.Globe.Layers[i]; + if (!(layer is GSOFeatureLayer)) continue; + GSOFeatures feats = layer.GetAllFeatures(); + for (int j = 0; j < feats.Length; j++) + { + feats[j].HighLight = false; + } + } + } + + void globeControl1_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl1.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl1.Globe.Action != EnumAction3D.SelectObject || + globeControl1.Globe.SelectedObject == null) + return; + GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + srcFeature = globeControl1.Globe.SelectedObject; + dscFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(srcFeature, + globeControl1,globeControl2,bufferWidth,resPolygon); + + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } + + void globeControl2_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl2.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl2.Globe.Action != EnumAction3D.SelectObject || + globeControl2.Globe.SelectedObject == null) + return; + + GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + dscFeature = globeControl2.Globe.SelectedObject; + srcFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(dscFeature, + globeControl1, globeControl2, bufferWidth, resPolygon); + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } private void FrmCompareFeature_FormClosing(object sender, FormClosingEventArgs e) @@ -198,322 +216,5 @@ frm = null; } - private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) - { - new_feat = new GSOFeature(); - resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); - resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; - new_feat.Geometry = resPolygon; - - layerTemp.AddFeature(new_feat); - layerTemp2.AddFeature(new_feat); - globeControl1.Refresh(); - globeControl2.Refresh(); - } - - private GSOLayer getSameLayer(GSOFeature feature) - { - GSOLayer layer = null; - if (!feature.Dataset.Caption.StartsWith("施工")) - { - layer = feature.Dataset.Caption == "供电管线" - ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") - : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); - } - else - { - layer = feature.Dataset.Caption == "施工电力管线" - ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") - : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); - } - - return layer; - } - - /// - /// 地球1中点击地球2中同步添加缓冲区 - /// - /// - /// - void globeControl1_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl1.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl1.Globe.Action == EnumAction3D.SelectObject && - globeControl1.Globe.SelectedObject != null) - { - GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - addPologyToGlobeControl(line, bufferWidth); - } - - srcFeature = globeControl1.Globe.SelectedObject; - GSOLayer layers = getSameLayer(srcFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = srcFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(srcFeature, features[i], Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - listFeatures.Add(features[i]); - } - calculate(out maxLength, out dscFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - /// - /// 地球2中点击地球1中同步添加缓冲区 - /// - /// - /// - void globeControl2_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl2.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl2.Globe.Action != EnumAction3D.SelectObject || - globeControl2.Globe.SelectedObject == null) - return; - else - { - GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - - addPologyToGlobeControl(line, bufferWidth); - } - - dscFeature = globeControl2.Globe.SelectedObject; - //双屏同时选中同一管段 - GSOLayer layers = getSameLayer(dscFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = dscFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(features[i], dscFeature, Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - { - listFeatures.Add(features[i]); - } - } - calculate(out maxLength, out srcFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - private void calculate(out double maxLength, out GSOFeature feature, GSOFeatures listFeatures, - GSOGeoPolyline3D scLine) - { - maxLength = 0; - feature=new GSOFeature(); - if (listFeatures.Length == 0) - feature = null; - else - { - if (listFeatures.Length == 1) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - } - else - { - for (int m = 0; m < listFeatures.Length; m++) - { - GSOGeoPolyline3D tempSGLine = listFeatures[m].Geometry as GSOGeoPolyline3D; - - double tempLength = tempSGLine.GetSpaceLength(false, 6378137); - double lengthAbs = Math.Abs(tempLength - scLine.GetSpaceLength(false, 6378137)); - if (m == 0) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - maxLength = lengthAbs; - } - else if (lengthAbs < maxLength) - { - feature = listFeatures[m]; - listFeatures[m].HighLight = true; - maxLength = lengthAbs; - } - } - } - } - } - - /// - /// 计算距离 - /// - /// - /// - /// - double calculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2,bool isVertical) - { - GSOPoint3d pntIntersect1 = new GSOPoint3d(); - GSOPoint3d pntIntersect2 = new GSOPoint3d(); - GSOPoint3d pntProIntersect1 = new GSOPoint3d(); - GSOPoint3d pntProIntersect2 = new GSOPoint3d(); - double dDist = 0; - if (isVertical) - { - dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "垂直"); - } - else - { - dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "水平"); - } - - return dDist; - } - - /// - /// 清除所有高亮Feature - /// - /// - private void clearFeatureHighLight(GSOGlobeControl glb1,GSOGlobeControl glb2) - { - layerTemp.RemoveAllFeature(); - layerTemp2.RemoveAllFeature(); - //清除gbl1中高亮 - for (int i = 0; i < glb1.Globe.Layers.Count; i++) - { - GSOLayer layer = glb1.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - //清除gbl2中高亮 - for (int i = 0; i < glb2.Globe.Layers.Count; i++) - { - GSOLayer layer = glb2.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - } - - /// - /// 添加标注 - /// - /// - /// - /// - /// - /// - /// - private GSOPoint3d LabelDistance(GSOLayer markerLayer, GSOLayer markerLayer2, - GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, bool markerVisible,string label) - { - if (pntIntersect1 == null || pntIntersect2 == null) - return new GSOPoint3d(); - GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); - GSOPoint3ds point3ds = new GSOPoint3ds(); - point3ds.Add(pntIntersect1); - point3ds.Add(pntIntersect2); - disline.AddPart(point3ds); - - GSOGeoMarker dismarker = new GSOGeoMarker(); - GSOFeature marker = null; - GSOFeature line = null; - createLineStyle(out marker, out line,disline, pntIntersect1, pntIntersect2, distance, label, dismarker); - - line.Visible = marker.Visible = markerVisible; - markerLayer.AddFeature(line); - markerLayer.AddFeature(marker); - - markerLayer2.AddFeature(line); - markerLayer2.AddFeature(marker); - - return dismarker.Position; - } - /// - /// 控制标注和字体的颜色 - /// - /// - /// - /// - /// - /// - /// - /// - /// - private void createLineStyle(out GSOFeature marker,out GSOFeature line,GSOGeoPolyline3D disline, - GSOPoint3d pntIntersect1,GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) - { - GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 - style.LineColor = Color.Red; - style.LineWidth = 5; //设置线的宽度为5 - style.VertexVisible = true; //显示线的节点 - disline.Style = style; //把风格添加到线上 - disline.AltitudeMode = EnumAltitudeMode.Absolute; - line=new GSOFeature(); - line.Geometry = disline; - - dismarker.X = pntIntersect1.X; - dismarker.Y = pntIntersect1.Y; - dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; - dismarker.Text = label + distance.ToString("0.00") + "米"; - dismarker.AltitudeMode = EnumAltitudeMode.Absolute; - - GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); - GSOTextStyle styleText = new GSOTextStyle(); - styleText.IsSizeFixed = true; - styleText.ForeColor = Color.Red; - styleText.FontSize = 20; - styleMarker.TextStyle = styleText; - dismarker.Style = styleMarker; - - marker=new GSOFeature(); - marker.Geometry = dismarker; - } - } } diff --git a/FrmHotFuncStat.cs b/FrmHotFuncStat.cs index 84131ef..f313b20 100644 --- a/FrmHotFuncStat.cs +++ b/FrmHotFuncStat.cs @@ -58,14 +58,11 @@ DataTable table = OledbHelper.QueryTable(sql); - if (table != null) + if (table == null) return; + for (int i = 0; i < table.Rows.Count; i++) { - for (int i = 0; i < table.Rows.Count; i++) - { - userLists.Items.Add(table.Rows[i][0].ToString()); - } + userLists.Items.Add(table.Rows[i][0].ToString()); } - } //统计结果 private void statBtn_Click(object sender, EventArgs e) diff --git a/FrmLayerControl.cs b/FrmLayerControl.cs index 8586041..8fbce97 100644 --- a/FrmLayerControl.cs +++ b/FrmLayerControl.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Windows.Forms; using DevComponents.DotNetBar; using GeoScene.Data; @@ -13,10 +14,10 @@ GSOGlobeControl globeControl1; GSOGlobeControl globeControl2; - TreeNode terrainManagerNode = null; - TreeNode layerManagerNode = null; - TreeNode terrainManagerNode1 = null; - TreeNode layerManagerNode1 = null; +// TreeNode terrainManagerNode = null; +// TreeNode layerManagerNode = null; +// TreeNode terrainManagerNode1 = null; +// TreeNode layerManagerNode1 = null; public FrmLayerControl(GSOGlobeControl ctl1,GSOGlobeControl ctl2) { @@ -25,14 +26,14 @@ globeControl2 = ctl2; } - private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) - { - treeNode=new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - } +// private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) +// { +// treeNode=new TreeNode(); +// treeNode.ImageIndex = 0; +// treeNode.SelectedImageIndex = 0; +// treeNode.Checked = false; +// treeNode.Text = strTreeNodeText; +// } // private void initTreeView() // { @@ -51,234 +52,258 @@ // layerTree2.Nodes.Add(terrainManagerNode); // } - #region wxl重构树形结构代码 + + - private TreeNode treeNode(string strTreeNodeText) - { - TreeNode treeNode = new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - return treeNode; - } -// private void appendToParent(TreeNodeCollection treeNodeCollection, ) - #endregion - private void initTreeView() +// private void initNode(string nodeName) +// { +// TreeNode nodeGroupElse1 = new TreeNode(); +// nodeGroupElse1.Text = nodeName; +// layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); +// +// TreeNode nodeGroupElse = new TreeNode(); +// nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; +// layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); +// } + +// private void initTreeNode(XmlNodeList Params) +// { +// foreach (XmlNode paramsNode in Params) //layers +// { +// foreach (XmlNode layerNode in paramsNode) //layer +// { +// initNode(layerNode.Attributes["label"].Value); +// } +// } +// +// initNode("基础图层"); +// initNode("其他"); +// } + +// private void FrmLayerControl_Load(object sender, EventArgs e) +// { +// +// initTreeView(); +// try +// { +// XmlDocument doc = new XmlDocument(); +// doc.Load(Application.StartupPath + "\\双屏设置.xml"); +// XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// +// initTreeNode(Params); +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// +// RefreshLayerAndTerrainTree(); +// } + private void FrmLayerControl_Load(object sender, EventArgs e) { layerTree1.Nodes.Clear(); layerTree2.Nodes.Clear(); - - //加载layertree2 - initLayerTree(out layerManagerNode1, "图层管理"); - layerTree1.Nodes.Add(layerManagerNode1); - initLayerTree(out terrainManagerNode1, "地形管理"); - layerTree1.Nodes.Add(terrainManagerNode1); - - initLayerTree(out layerManagerNode, "图层管理"); - layerTree2.Nodes.Add(layerManagerNode); - initLayerTree(out terrainManagerNode, "地形管理"); - layerTree2.Nodes.Add(terrainManagerNode); + TreeUtils.InitLayerTree(globeControl1, layerTree1, "实测数据"); + TreeUtils.InitLayerTree(globeControl2, layerTree2, "施工数据"); } - private void initNode(string nodeName) - { - TreeNode nodeGroupElse1 = new TreeNode(); - nodeGroupElse1.Text = nodeName; - layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); + #region wxl重构树形结构代码 - TreeNode nodeGroupElse = new TreeNode(); - nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; - layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); - } + /// + /// 构造tree,最多解析三层,可放在工具类中 - private void initTreeNode(XmlNodeList Params) - { - foreach (XmlNode paramsNode in Params) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - initNode(layerNode.Attributes["label"].Value); - } - } + /// 所属地球 + /// 要加载的树 + /// 数据来源,实测数据/施工数据/规划数据/红线数据,为空则展示全部 +// private void initTree(GSOGlobeControl gsoGlobeControl,TreeView treeView, string viewDatasrc) +// { +// treeView.Nodes.Clear(); +// LayerConfig layerConfig = Utility.layerConfig; +// List datasrcs = layerConfig.datasrcs; +// foreach (DataSrc datasrc in datasrcs) +// { +// if (viewDatasrc != null && !viewDatasrc.Trim().Equals("") && !datasrc.label.Equals(viewDatasrc)) continue; +// TreeNode rootNode = treeView.Nodes.Add(datasrc.label); +// List layerTypes = datasrc.layertypes; +// foreach (LayerType layerType in layerTypes) +// { +// TreeNode secNode = rootNode.Nodes.Add(layerType.label); +// List layers = layerType.layers; +// foreach (Layer layer in layers) +// { +// GSOLayer gsoLayer = gsoGlobeControl.Globe.Layers.GetLayerByCaption(layer.layer); +// if (gsoLayer == null) continue;//将不存在的去除 +// TreeNode node = new TreeNode(); +// node.Tag = gsoLayer; +// node.Text = layer.label; +// node.Checked = gsoLayer.Visible; +// if (gsoLayer.Visible) +// { +// secNode.Checked = true; +// rootNode.Checked = true; +// } +// secNode.Nodes.Add(node); +// } +// } +// } +// } - initNode("基础图层"); - initNode("其他"); - } + #endregion - private void FrmLayerControl_Load(object sender, EventArgs e) - { - initTreeView(); - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(Application.StartupPath + "\\双屏设置.xml"); - XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, +// TreeView layerTree) +// { +// try +// { +// for (int i = 0; i < nLayerCount; i++) +// { +// GSOLayer layer = globcontrol.Globe.Layers[i]; +// if (layer == null) continue; +// string layerName = layer.Name; +// TreeNode node = new TreeNode(); +// node.Tag = layer; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = layer.Caption; +// node.Checked = layer.Visible; +// +// bool isContains = false; +// for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) +// { +// if (!layerName.Contains("fttp:")) +// { +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || +// layerName.Contains("施工") || +// layerName.Contains("规划")) continue; +// break; +// case "layerTree2": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[j].Nodes.Add(node); +// isContains = true; +// break; +// } +// else +// { +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); +// isContains = true; +// break; +// } +// } +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || +// layerName.Contains("标注") || +// isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || +// layerName.Contains("景观") || layerName.Contains("红线")) +// continue; +// break; +// case "layerTree2": +// if (isContains != false || layerName.Contains("tempLgdData2")) +// continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); +// } +// +// for (int i = 0; i < nTerrainCount; i++) +// { +// GSOTerrain terrain = globcontrol.Globe.Terrains[i]; +// if (terrain == null) continue; +// TreeNode node = new TreeNode(); +// node.Tag = terrain; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = terrain.Caption; +// node.Checked = terrain.Visible; +// switch (layerTree.Name) +// { +// case "layerTree1": +// terrainManagerNode1.Nodes.Add(node); +// break; +// case "layerTree2": +// terrainManagerNode.Nodes.Add(node); +// break; +// default: +// break; +// } +// } +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// } - initTreeNode(Params); - } - catch (Exception ex) - { - LogError.PublishError(ex); - } +// private void initTreeNodeCheckedStatus(TreeView layerTreeView) +// { +// //节点选中状态控制 +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// if (node.Checked != true) continue; +// layerTreeView.Nodes[0].Checked = true; +// break; +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOTerrain layer = childNode.Tag as GSOTerrain; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// } - RefreshLayerAndTerrainTree(); - } - - private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, - TreeView layerTree) - { - try - { - for (int i = 0; i < nLayerCount; i++) - { - GSOLayer layer = globcontrol.Globe.Layers[i]; - if (layer == null) continue; - string layerName = layer.Name; - TreeNode node = new TreeNode(); - node.Tag = layer; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = layer.Caption; - node.Checked = layer.Visible; - - bool isContains = false; - for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) - { - if (!layerName.Contains("fttp:")) - { - switch (layerTree.Name) - { - case "layerTree1": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || - layerName.Contains("施工") || - layerName.Contains("规划")) continue; - break; - case "layerTree2": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[j].Nodes.Add(node); - isContains = true; - break; - } - else - { - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); - isContains = true; - break; - } - } - switch (layerTree.Name) - { - case "layerTree1": - if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || - layerName.Contains("标注") || - isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || - layerName.Contains("景观") || layerName.Contains("红线")) - continue; - break; - case "layerTree2": - if (isContains != false || layerName.Contains("tempLgdData2")) - continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); - } - - for (int i = 0; i < nTerrainCount; i++) - { - GSOTerrain terrain = globcontrol.Globe.Terrains[i]; - if (terrain == null) continue; - TreeNode node = new TreeNode(); - node.Tag = terrain; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = terrain.Caption; - node.Checked = terrain.Visible; - switch (layerTree.Name) - { - case "layerTree1": - terrainManagerNode1.Nodes.Add(node); - break; - case "layerTree2": - terrainManagerNode.Nodes.Add(node); - break; - default: - break; - } - } - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - - private void initTreeNodeCheckedStatus(TreeView layerTreeView) - { - //节点选中状态控制 - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - if (node.Checked != true) continue; - layerTreeView.Nodes[0].Checked = true; - break; - } - - foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOTerrain layer = childNode.Tag as GSOTerrain; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - } - - void exPandTreeNode() - { - layerManagerNode1.Expand(); - terrainManagerNode1.Expand(); - layerManagerNode.Expand(); - terrainManagerNode.Expand(); - } +// void exPandTreeNode() +// { +// layerManagerNode1.Expand(); +// terrainManagerNode1.Expand(); +// layerManagerNode.Expand(); +// terrainManagerNode.Expand(); +// } /// /// 刷新节点树 /// - private void RefreshLayerAndTerrainTree() - { - int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 - int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 - addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); - initTreeNodeCheckedStatus(layerTree1); - - int nLayerCount = globeControl2.Globe.Layers.Count; - int nTerrainCount = globeControl2.Globe.Terrains.Count; - addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); - initTreeNodeCheckedStatus(layerTree2); - - // 展开 - exPandTreeNode(); - } +// private void RefreshLayerAndTerrainTree() +// { +// int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 +// int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 +// addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); +// initTreeNodeCheckedStatus(layerTree1); +// +// int nLayerCount = globeControl2.Globe.Layers.Count; +// int nTerrainCount = globeControl2.Globe.Terrains.Count; +// addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); +// initTreeNodeCheckedStatus(layerTree2); +// +// // 展开 +// exPandTreeNode(); +// } /// /// 节点树复选框选中状态改变事件处理 @@ -289,144 +314,132 @@ { if (e.Action != TreeViewAction.Unknown) { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } + TreeUtils.TreeNodeCheckedChange(globeControl2,e.Node); + } + } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree2(e.Node, e.Node.Checked); + private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) + { + if (e.Action != TreeViewAction.Unknown) + { + TreeUtils.TreeNodeCheckedChange(globeControl1, e.Node); } } + + +// private void layerTree2_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree2(e.Node, e.Node.Checked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree1(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree1(childNode, isChecked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree2(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree2(childNode, isChecked); +// } +// } /// /// 节点树选中状态改变事件 /// /// /// - private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) - { - if (e.Action != TreeViewAction.Unknown) - { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } +// private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree1(e.Node, e.Node.Checked); +// } +// } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree1(e.Node, e.Node.Checked); - } - } - /// - /// 改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 - /// - /// - private void CheckParentNode(TreeNode curNode) - { - bool bChecked = false; - - if (curNode.Parent != null) - { - foreach (TreeNode node in curNode.Parent.Nodes) - { - if (node.Checked) - { - bChecked = true; - break; - } - } - if (bChecked) - { - curNode.Parent.Checked = true; - CheckParentNode(curNode.Parent); - } - else - { - curNode.Parent.Checked = false; - CheckParentNode(curNode.Parent); - } - } - } } } diff --git a/FrmMetadata.cs b/FrmMetadata.cs index 4d0d5cb..bb7c46c 100644 --- a/FrmMetadata.cs +++ b/FrmMetadata.cs @@ -12,12 +12,8 @@ { public partial class FrmMetadata : Office2007Form { - List pipelineLayerNames = new List();//线图层名称 - List workwellLayerNames = new List();//工井图层名称 - List valueLayerNames = new List();//阀门图层名称 - List instrumenLayerNames = new List();//附属物图层名称 - string filename = Utility.filename; - DataSet dataSet = new DataSet(); + + bool selectedLayer; public FrmMetadata() @@ -25,308 +21,33 @@ InitializeComponent(); loadTreeView(layerTree); } - private void FrmMetadata_Load(object sender, EventArgs e) - { - //this.ntLblC.Text = "nn"; - // loadTreeView(layerTree); - } private void loadTreeView(TreeView tv)//构建图层树 { - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - //tv.ShowPlusMinus = false; - - //tv.Nodes.Clear(); - tv.ShowLines = true; - // tv.ImageList = imageList1; - tv.CheckBoxes = false; - #region 三级 - - //foreach (XmlNode paramsNode in Params1) //layers - //{ - // foreach (XmlNode layerNode in paramsNode) //layer - // { - // TreeNode nodelayer = new TreeNode(); - // string layerName = layerNode.Attributes["label"].Value; - // nodelayer.Text = layerName; - - // if (layerNode.HasChildNodes != false) - // { - // tv.Nodes.Add(nodelayer); - // foreach (XmlNode layerchildNode in layerNode) //layerchild - // { - // if (layerchildNode.Name == "layerchild") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["type"].Value; - // string layerchildName = layerchildNode.Attributes["label"].Value; - // if (layerType == "locaserver") - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - - // } - // else - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // if (layerchildNode.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = boollayer; - // nodelayer.Nodes.Add(nodelayerchild); - // } - // } - // else if (layerchildNode.Name == "layertype") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["label"].Value; - // nodelayerchild.Text = layerType; - // nodelayerchild.Tag = layerType; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - // if (layerchildNode.HasChildNodes == true) - // { - // foreach (XmlNode childNodeLayer in layerchildNode) - // { - // TreeNode nodelayerchild1 = new TreeNode(); - // string layerName1 = childNodeLayer.Attributes["layer"].Value; - // string layerchildName = childNodeLayer.Attributes["label"].Value; - // string layerType1 = childNodeLayer.Attributes["type"].Value; - // if (childNodeLayer.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild1.Text = layerchildName; - // nodelayerchild1.Tag = layerType1 + "|" + layerName1; - // nodelayerchild1.Checked = boollayer; - // nodelayerchild.Nodes.Add(nodelayerchild1); - // } - // } - // } - - // } - // } - // else - // { - // tv.Nodes.Add(nodelayer); - // } - // } - - //} - - #endregion - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - TreeNode nodelayer = new TreeNode(); - string layerName = layerNode.Attributes["label"].Value; - nodelayer.Text = layerName; - - if (layerNode.HasChildNodes) - { - tv.Nodes.Add(nodelayer); - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - if (layerchildNode.Name == "layerchild") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["type"].Value; - string layerchildName = layerchildNode.Attributes["label"].Value; - if (layerType == "locaserver") - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - - } - else - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - if (layerchildNode.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - //nodelayerchild.Checked = boollayer; - nodelayer.Nodes.Add(nodelayerchild); - } - } - else if (layerchildNode.Name == "layertype") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["label"].Value; - nodelayerchild.Text = layerType; - nodelayerchild.Tag = layerType; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode) - { - if (childNodeLayer.HasChildNodes) - { - TreeNode nodelayerchild2 = new TreeNode(); - string layer = childNodeLayer.Attributes["label"].Value; - nodelayerchild2.Text = layer; - nodelayerchild2.Tag = layer; - nodelayerchild2.Checked = true; - nodelayerchild.Nodes.Add(nodelayerchild2); - foreach (XmlNode n in childNodeLayer) - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = n.Attributes["layer"].Value; - string layerchildName = n.Attributes["label"].Value; - string layerType1 = n.Attributes["type"].Value; - if (n.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (n.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (n.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (n.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild2.Nodes.Add(nodelayerchild1); - - } - } - else - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = childNodeLayer.Attributes["layer"].Value; - string layerchildName = childNodeLayer.Attributes["label"].Value; - string layerType1 = childNodeLayer.Attributes["type"].Value; - if (childNodeLayer.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild.Nodes.Add(nodelayerchild1); - - } - } - } - } - - } - } - else - { - tv.Nodes.Add(nodelayer); - } - } - - } - if (tv.Nodes.Count > 0) - { - //tv.Nodes[0].Expand(); - if (tv.Nodes.Count > 0) - { - foreach (TreeNode node in tv.Nodes) - { - //node.Expand(); - } - } - } - //tv.ExpandAll(); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } + //tv.ShowPlusMinus = false; + //tv.Nodes.Clear(); + // tv.ImageList = imageList1; + tv.ShowLines = true; + tv.CheckBoxes = false; + TreeUtils.InitLayerTree(null, tv, null); } - + /// + /// 点击父节点则展开,点击子节点则编辑元数据 + /// + /// + /// private void layerTree_AfterSelect(object sender, TreeViewEventArgs e) { - String layername = layerTree.SelectedNode.Text; - if (layerTree.SelectedNode.GetNodeCount(true) == 0) { - searchLayerInfo(layername); - - selectedLayer = true; - clearBtn.Hide(); - completeBtn.Hide(); + String layername = e.Node.Text; + if (e.Node.GetNodeCount(true) != 0) + { //点击父节点,则展开 + e.Node.Expand(); + return; } + searchLayerInfo(layername); + selectedLayer = true; + clearBtn.Hide(); + completeBtn.Hide(); } //查询元数据 private void searchLayerInfo(String layername) { @@ -335,8 +56,6 @@ + " casic_metadatalayer where casic_metadatacontent.\"LAYERID\" = casic_metadatalayer.\"LAYERID\" and casic_metadatalayer.\"LAYERNAME\"='" + layername+"'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; - if (table != null && table.Rows.Count > 0) { groupBox1.Text = layername; @@ -400,8 +119,6 @@ //判断此时layerTree有没有选中的图层 if (selectedLayer)//有选中的图层,获得其名 { - string name = layerTree.SelectedNode.Text; - OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "支持格式(*.xml)|*.xml|XML数据(*.xml)|"; dlg.Multiselect = true; @@ -419,31 +136,24 @@ //读入元数据 private void AddXMLMDdata(string strFilePath) { - try - { - dataSet.Clear(); //清空数据集中的内容 - dataSet.ReadXml(strFilePath); //读取XML文件中的内容 + DataSet dataSet = new DataSet(); + dataSet.ReadXml(strFilePath); //读取XML文件中的内容 - //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); - string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); - string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); - string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); - string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); + //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); + string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); + string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); + string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); + string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); - //this.titleLbl.Text = attrtitle; - consLblC.Text = attrcons; - descLblC.Text = attrdesc; - authorLblC.Text = attrauthor; - ntLblC.Text = attrnt; - //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); + //this.titleLbl.Text = attrtitle; + consLblC.Text = attrcons; + descLblC.Text = attrdesc; + authorLblC.Text = attrauthor; + ntLblC.Text = attrnt; + //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); - completeBtn.Visible = true; - //this.clearBtn.Visible = true; - } - catch (Exception e) - { - - } + completeBtn.Visible = true; + //this.clearBtn.Visible = true; } //新建/编辑元数据 private void editBtn_Click(object sender, EventArgs e) @@ -509,11 +219,7 @@ string sql = "select \"LAYERID\" from casic_metadatalayer where \"LAYERNAME\" = '" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - if (table != null && table.Rows.Count > 0)//已有该图层,属于编辑 - { - return false; - } - return true; + return table == null || table.Rows.Count <= 0; } //保存元数据 private void saveData(String method,String layername,String cons,String desc,String author,String nt) { @@ -539,17 +245,16 @@ string insertSQL = "insert into casic_metadatalayer values ('" + layerid + "','" + layername + "')";//+ string insertSQL2 = "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','" + desc + "','" + author + "','" + nt + "')"; // "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','"+desc+"','"+author+"','"+nt+"')"; - if ((OledbHelper.sqlExecuteNonQuery(insertSQL) > 0)&&(OledbHelper.sqlExecuteNonQuery(insertSQL2)>0)) - { - MessageBox.Show("保存元数据成功!"); + if ((OledbHelper.sqlExecuteNonQuery(insertSQL) <= 0) || + (OledbHelper.sqlExecuteNonQuery(insertSQL2) <= 0)) return; + MessageBox.Show("保存元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } else { //更新 string layeridSQL = "select layerid from casic_metadatalayer where LAYERNAME='"+layername+"'"; @@ -561,16 +266,14 @@ + "',casic_metadatacontent.MDAUTHOR ='" + author.Trim() + "',casic_metadatacontent.NT ='" + nt.Trim() + "' where casic_metadatacontent.LAYERID='" + layerid + "'"; - if (OledbHelper.sqlExecuteNonQuery(updateSQL) > 0) - { - MessageBox.Show("更新元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + if (OledbHelper.sqlExecuteNonQuery(updateSQL) <= 0) return; + MessageBox.Show("更新元数据成功!"); + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } } diff --git a/FrmMetadataStat.cs b/FrmMetadataStat.cs index cb19f84..c3c1359 100644 --- a/FrmMetadataStat.cs +++ b/FrmMetadataStat.cs @@ -2,16 +2,16 @@ using System.Collections; using System.Collections.Generic; using System.Data; +using System.Linq; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; -using System.Xml; using DevComponents.DotNetBar; namespace Cyberpipe { public partial class FrmMetadataStat : Office2007Form { - Dictionary dic = new Dictionary(); + public FrmMetadataStat() { InitializeComponent(); @@ -22,7 +22,7 @@ string sql = "select LAYERNAME from casic_metadataLayer where LAYERNAME like '%" + keywordsTxt.Text.Trim() + "%'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; + int num = 0; resultList.Clear(); consLblC.Text = ""; @@ -32,6 +32,7 @@ if (table != null && table.Rows.Count > 0) { + num = table.Rows.Count; for (int i = 0; i < num;i++ ) { resultList.Items.Add(table.Rows[i][0].ToString()); @@ -56,7 +57,8 @@ int metadataLayernum = statistMDLayer(); int nomdLayernum = layernum - metadataLayernum; //MessageBox.Show("共有多少层?" + layernum.ToString()+"=="+metadataLayernum.ToString()+"=="+nomdLayernum.ToString()); - dic.Clear(); +// dic.Clear(); + Dictionary dic = new Dictionary(); dic.Add("已建",metadataLayernum); dic.Add("未建", nomdLayernum); @@ -74,11 +76,9 @@ foreach (string key in dic.Keys) { - if (dic[key] != 0) - { - xlist.Add(key); - ylist.Add(dic[key]); - } + if (dic[key] == 0) continue; + xlist.Add(key); + ylist.Add(dic[key]); } chart1.Series[0].Points.DataBindXY(xlist, ylist); @@ -89,73 +89,15 @@ string sql = "select * from casic_metadataLayer"; DataTable table = OledbHelper.QueryTable(sql); - mdlayernum = table.Rows.Count; + if(table!=null)mdlayernum = table.Rows.Count; return mdlayernum; } //统计有多少个图层 - private int statistLayer() { - int layernum = 0; - - string filename = Utility.filename; - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - //MessageBox.Show(layerNode.Attributes["label"].Value); - - if (layerNode.HasChildNodes) - { - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - //MessageBox.Show(layerchildNode.Attributes["label"].Value); - if (layerchildNode.Name == "layerchild") - { - layernum++; - } - else if (layerchildNode.Name == "layertype") - { - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode)//layertype下的layerchild - { - //MessageBox.Show(childNodeLayer.Attributes["label"].Value); - if (childNodeLayer.HasChildNodes) - { - - foreach (XmlNode n in childNodeLayer) - { - layernum++; - } - } - else - { - - layernum++; - } - } - } - } - - } - } - } - - } - - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - return layernum; + private int statistLayer() + { + List datasrcs = Utility.layerConfig.datasrcs; + return datasrcs.SelectMany(datasrc => datasrc.layertypes).Sum(layerType => layerType.layers.Count); } //选择list @@ -174,7 +116,6 @@ + "join casic_metadatalayer on casic_metadatalayer.LAYERID = casic_metadatacontent.LAYERID " + "where casic_metadatalayer.LAYERNAME='" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; //MessageBox.Show(num.ToString()); if (table != null && table.Rows.Count > 0) { @@ -192,10 +133,5 @@ ntLblC.Text = ""; } } - - private void buttonX1_Click(object sender, EventArgs e) - { - drawChart(); - } } } diff --git a/FrmWait.Designer.cs b/FrmWait.Designer.cs index 99733ea..88f5a29 100644 --- a/FrmWait.Designer.cs +++ b/FrmWait.Designer.cs @@ -55,7 +55,6 @@ this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(0, 24); this.label1.TabIndex = 1; - this.label1.Click += new System.EventHandler(this.label1_Click); // // FrmWait // @@ -71,7 +70,7 @@ this.ShowIcon = false; this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; this.Text = "正在处理,请稍后..."; - this.Load += new System.EventHandler(this.FrmWait_Load); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmWait_FormClosing); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); diff --git a/FrmWait.cs b/FrmWait.cs index d3b7a48..d645ae4 100644 --- a/FrmWait.cs +++ b/FrmWait.cs @@ -32,27 +32,6 @@ frm = null; } - private void FrmWait_Load(object sender, EventArgs e) - { - - - } - - - private void labelX2_Click(object sender, EventArgs e) - { - - } - - private void progressBarX1_Click(object sender, EventArgs e) - { - - } - - private void label1_Click(object sender, EventArgs e) - { - - } } } diff --git a/FrmYJSHTC.cs b/FrmYJSHTC.cs index 3572371..27b7186 100644 --- a/FrmYJSHTC.cs +++ b/FrmYJSHTC.cs @@ -143,9 +143,7 @@ for (int i = ctl1.Globe.Layers.Count - 1; i >= 0; i--) { if (ctl1.Globe.Layers[i].Caption == str) - { ctl1.Globe.Layers.Remove(ctl1.Globe.Layers[i]); - } } foreach (TreeNode n in layerTree.Nodes) @@ -155,20 +153,15 @@ for (int i = 0; i < n.Nodes.Count; i++) { if (n.Nodes[i].Text == str) - { n.Nodes[i].Remove(); - } } } } string sql = "delete from casic_audit_result where SH_LAYER = '" + str + "'"; - OledbHelper.sqlExecuteNonQuery(sql); - } } - } } diff --git a/MainFrm.cs b/MainFrm.cs index bc962c4..29a3eb3 100644 --- a/MainFrm.cs +++ b/MainFrm.cs @@ -2,7 +2,6 @@ using System.Collections; using System.Collections.Generic; using System.Data; -using System.Data.OracleClient; using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; @@ -13,7 +12,6 @@ using System.Text; using System.Threading; using System.Windows.Forms; -using System.Xml; using Cyberpipe.Forms; using DevComponents.DotNetBar; using GeoScene.Data; @@ -28,10 +26,10 @@ { TreeNode layerManagerNode; bool m_bFullScreen; - + GSOGlobeControl globeControl1; GSOGlobeControl globeControl2; - private GSOHudButton legend;//定义图例 + private GSOHudButton legend; //定义图例 private GSOHudButton btnToolNone; private GSOHudButton btnToolSelect; ToolTip tooltip1; @@ -42,20 +40,20 @@ GSOBalloon featureTooltip2; GSOBalloonEx balloonEx2; - GSOLayer layerTemp; - GSOLayer layerTemp2; + GSOLayer layerTemp;//wxl注释,Globe1的临时图层 + GSOLayer layerTemp2;//wxl注释,Globe2的临时图层 FrmRedlineResult frmredResult = null; FrmMnModify frmModify; public bool frmRedlineResult = false; public bool boolfrmShResult; public bool boolfrmModify; - public static string m_CurrentQueryLayer;//定义当前查询的图层 + public static string m_CurrentQueryLayer; //定义当前查询的图层 //定位和闪烁初始化定义 private EnumDesignMode enumDesignMode; //模拟规划设计模式 - private string trackflag;//定义阀门查询个数 + private string trackflag; //定义阀门查询个数 //记录沿线飞行设置 //int m_nFlyMode = 2; @@ -67,7 +65,7 @@ Double m_dDigPitWidthAlongLine = 6; Boolean m_bDigPitByDepth = true; //选择管线 - int selectState;//wxl 注释,表示是否已经计算过净距等了,1已计算,0未计算 + int selectState; //wxl 注释,表示是否已经计算过净距等了,1已计算,0未计算 //private OracleConnection connBackup = null; //数据集合 @@ -89,8 +87,8 @@ //双屏对比 //bool zhanshi=false; Thread t = null; - private GSOHudButton legendSC;//定义图例 - private GSOHudButton legendSG;//定义图例 + private GSOHudButton legendSC; //定义图例 + private GSOHudButton legendSG; //定义图例 //管纵图 private GSOHudButton lendendGZ50; private GSOHudButton lendendGZ36; @@ -102,12 +100,13 @@ GSOGeoPoint3D bsqPT; - FrmYJSHTC frmSh;//一键审核窗口全局变量wxl - FrmWait frmWait;//一键审核等待窗口 + FrmYJSHTC frmSh; //一键审核窗口全局变量wxl + FrmWait frmWait; //一键审核等待窗口 //FrmWait frmWait2 = null;//文档操作等待窗口 float mouseDownX1, mouseDownY1; float mouseDownX2, mouseDownY2; + /// /// /// @@ -164,8 +163,9 @@ RigthMenuSet(); MenuSet(); - + } + /// /// 右屏中添加管纵图片 /// @@ -259,6 +259,7 @@ } #region 区域分析 + if (Utility.userRole.IndexOf("区域分析") < 0) { toolRightMenu.Items.Remove(区域分析ToolStripMenuItem); @@ -278,9 +279,11 @@ 区域分析ToolStripMenuItem.DropDownItems.Remove(无源淹没分析ToolStripMenuItem); } } + #endregion #region 视域分析 + if (Utility.userRole.IndexOf("视域分析") < 0) { toolRightMenu.Items.Remove(视域分析ToolStripMenuItem); @@ -300,9 +303,11 @@ 视域分析ToolStripMenuItem.DropDownItems.Remove(可视包络分析ToolStripMenuItem); } } + #endregion #region 开发分析 + if (Utility.userRole.IndexOf("开挖分析") < 0) { toolRightMenu.Items.Remove(开挖分析ToolStripMenuItem); @@ -334,9 +339,11 @@ 开挖分析ToolStripMenuItem.DropDownItems.Remove(删除隧道ToolStripMenuItem); } } + #endregion #region 拓扑分析 + if (Utility.userRole.IndexOf("拓扑分析") < 0) { toolRightMenu.Items.Remove(拓扑分析ToolStripMenuItem); @@ -372,9 +379,11 @@ 拓扑分析ToolStripMenuItem.DropDownItems.Remove(爆管分析ToolStripMenuItem); } } + #endregion #region 断面分析 + if (Utility.userRole.IndexOf("断面分析") < 0) { toolRightMenu.Items.Remove(断面分析ToolStripMenuItem); @@ -398,9 +407,11 @@ 断面分析ToolStripMenuItem.DropDownItems.Remove(基线剖面分析ToolStripMenuItem); } } + #endregion #region 绘制区域统计 + if (Utility.userRole.IndexOf("绘制区域统计") < 0) { toolRightMenu.Items.Remove(绘制区域统计ToolStripMenuItem); @@ -445,9 +456,11 @@ } } + #endregion #region 全区域统计 + if (Utility.userRole.IndexOf("全区域统计") < 0) { toolRightMenu.Items.Remove(全区域统计ToolStripMenuItem); @@ -492,9 +505,11 @@ } } + #endregion #region 查询 + if (Utility.userRole.IndexOf("查询") < 0) { toolRightMenu.Items.Remove(查询ToolStripMenuItem); @@ -542,9 +557,11 @@ 查询ToolStripMenuItem.DropDownItems.Remove(附属物查询ToolStripMenuItem); } } + #endregion #region 标注 + if (Utility.userRole.IndexOf("标注") < 0) { toolRightMenu.Items.Remove(标注ToolStripMenuItem); @@ -592,9 +609,11 @@ 标注ToolStripMenuItem.DropDownItems.Remove(标注管理ToolStripMenuItem); } } + #endregion #region 飞行 + if (Utility.userRole.IndexOf("飞行") < 0) { toolRightMenu.Items.Remove(飞行ToolStripMenuItem); @@ -618,9 +637,11 @@ 飞行ToolStripMenuItem.DropDownItems.Remove(绕眼睛飞行ToolStripMenuItem); } } + #endregion #region 编辑 + if (Utility.userRole.IndexOf("编辑") < 0) { toolRightMenu.Items.Remove(编辑ToolStripMenuItem); @@ -656,9 +677,11 @@ 编辑ToolStripMenuItem.DropDownItems.Remove(删除模型ToolStripMenuItem); } } + #endregion #region 量算 + if (Utility.userRole.IndexOf("量算") < 0) { toolRightMenu.Items.Remove(量算ToolStripMenuItem); @@ -694,6 +717,7 @@ 量算ToolStripMenuItem.DropDownItems.Remove(地表面积ToolStripMenuItem1); } } + #endregion } @@ -701,6 +725,7 @@ { #region 权限管理 + if (Utility.userRole.IndexOf("权限管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem2); @@ -734,9 +759,11 @@ } } + #endregion #region 基础工具 + if (Utility.userRole.IndexOf("基础工具") < 0) { ribbonControl1.Items.Remove(ribbonTabItem1); @@ -781,37 +808,47 @@ } } + #endregion #region 一键审核 + if (Utility.userRole.IndexOf("一键审核") < 0) { ribbonControl1.Items.Remove(ribbonTabItem11); } + #endregion #region 红线审核 + if (Utility.userRole.IndexOf("红线审核") < 0) { ribbonControl1.Items.Remove(ribbonTabItem6); } + #endregion #region 双屏对比 + if (Utility.userRole.IndexOf("双屏对比") < 0) { ribbonControl1.Items.Remove(ribbonTabItem9); } + #endregion #region 文档管理 + if (Utility.userRole.IndexOf("文档管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem4); } + #endregion #region 基础管理 + if (Utility.userRole.IndexOf("基础管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem14); @@ -841,6 +878,7 @@ } #region Fan Zhang 重构现有代码 + //初始化控件布局 private void initLayout() { @@ -848,37 +886,37 @@ double dsw = SW; if (SW > 1440) { - double myScreen = dsw / 1440; - buttonX1.Width = (int)(buttonX1.Width * myScreen); - buttonX2.Width = (int)(buttonX2.Width * myScreen); - buttonX4.Width = (int)(buttonX4.Width * myScreen); - buttonX5.Width = (int)(buttonX5.Width * myScreen); - buttonX6.Width = (int)(buttonX6.Width * myScreen); - buttonX7.Width = (int)(buttonX8.Width * myScreen); - buttonX8.Width = (int)(buttonX8.Width * myScreen); - buttonX9.Width = (int)(buttonX9.Width * myScreen); - buttonX12.Width = (int)(buttonX12.Width * myScreen); - buttonX14.Width = (int)(buttonX14.Width * myScreen); - buttonX15.Width = (int)(buttonX15.Width * myScreen); - buttonX16.Width = (int)(buttonX16.Width * myScreen); - buttonX17.Width = (int)(buttonX17.Width * myScreen); + double myScreen = dsw/1440; + buttonX1.Width = (int) (buttonX1.Width*myScreen); + buttonX2.Width = (int) (buttonX2.Width*myScreen); + buttonX4.Width = (int) (buttonX4.Width*myScreen); + buttonX5.Width = (int) (buttonX5.Width*myScreen); + buttonX6.Width = (int) (buttonX6.Width*myScreen); + buttonX7.Width = (int) (buttonX8.Width*myScreen); + buttonX8.Width = (int) (buttonX8.Width*myScreen); + buttonX9.Width = (int) (buttonX9.Width*myScreen); + buttonX12.Width = (int) (buttonX12.Width*myScreen); + buttonX14.Width = (int) (buttonX14.Width*myScreen); + buttonX15.Width = (int) (buttonX15.Width*myScreen); + buttonX16.Width = (int) (buttonX16.Width*myScreen); + buttonX17.Width = (int) (buttonX17.Width*myScreen); - labelX1.Width = (int)(labelX1.Width * myScreen); - labelX2.Width = (int)(labelX2.Width * myScreen); - labelX3.Width = (int)(labelX3.Width * myScreen); - labelX6.Width = (int)(labelX6.Width * myScreen); - labelX8.Width = (int)(labelX8.Width * myScreen); - labelX9.Width = (int)(labelX9.Width * myScreen); - labelX12.Width = (int)(labelX12.Width * myScreen); - labelX13.Width = (int)(labelX13.Width * myScreen); - labelX14.Width = (int)(labelX14.Width * myScreen); - labelX16.Width = (int)(labelX16.Width * myScreen); - labelX17.Width = (int)(labelX17.Width * myScreen); - labelX11.Width = (int)(labelX11.Width * myScreen); - labelX19.Width = (int)(labelX19.Width * myScreen); - labelX21.Width = (int)(labelX21.Width * myScreen); - labelX22.Width = (int)(labelX22.Width * myScreen); - labelX24.Width = (int)(labelX24.Width * myScreen); + labelX1.Width = (int) (labelX1.Width*myScreen); + labelX2.Width = (int) (labelX2.Width*myScreen); + labelX3.Width = (int) (labelX3.Width*myScreen); + labelX6.Width = (int) (labelX6.Width*myScreen); + labelX8.Width = (int) (labelX8.Width*myScreen); + labelX9.Width = (int) (labelX9.Width*myScreen); + labelX12.Width = (int) (labelX12.Width*myScreen); + labelX13.Width = (int) (labelX13.Width*myScreen); + labelX14.Width = (int) (labelX14.Width*myScreen); + labelX16.Width = (int) (labelX16.Width*myScreen); + labelX17.Width = (int) (labelX17.Width*myScreen); + labelX11.Width = (int) (labelX11.Width*myScreen); + labelX19.Width = (int) (labelX19.Width*myScreen); + labelX21.Width = (int) (labelX21.Width*myScreen); + labelX22.Width = (int) (labelX22.Width*myScreen); + labelX24.Width = (int) (labelX24.Width*myScreen); } sideBar1.Visible = false; sideBar1.ExpandedPanel = sideBarPanelItem3; @@ -899,7 +937,7 @@ splitContainer1.Panel2Collapsed = true; - buttonItem87.Checked = true;//默认地上模式 + buttonItem87.Checked = true; //默认地上模式 ribbonTabItem1.Select(); //初始化状态为浏览 sideBarPanelItem3.Visible = false; @@ -951,7 +989,7 @@ //图例 legend = new GSOHudButton(); - legend.SetImage(Application.StartupPath + "/Resource/图例P.jpg");//图例P + legend.SetImage(Application.StartupPath + "/Resource/图例P.jpg"); //图例P legend.SetOffset(0, 15); legend.MinOpaque = 1; legend.MaxOpaque = 1; @@ -1002,7 +1040,7 @@ globeControl1.Globe.UserBackgroundColor = Color.White; globeControl1.Globe.FlyAlongLineSpeed = m_dFlyAlongLineSpeed; globeControl1.Globe.FlyAlongLineRotateSpeed = m_dFlyAlongLineRotateSpeed; - globeControl1.Globe.FlyToPointSpeed = globeControl1.Globe.FlyToPointSpeed * 3; + globeControl1.Globe.FlyToPointSpeed = globeControl1.Globe.FlyToPointSpeed*3; globeControl1.Globe.EditSnapObject = true; globeControl1.Globe.IsReleaseMemOutOfView = true; globeControl1.Globe.ControlPanel.Visible = true; @@ -1021,18 +1059,22 @@ globeControl2.Globe.UserBackgroundColor = Color.White; globeControl2.Globe.FlyAlongLineSpeed = m_dFlyAlongLineSpeed; globeControl2.Globe.FlyAlongLineRotateSpeed = m_dFlyAlongLineRotateSpeed; - globeControl2.Globe.FlyToPointSpeed = globeControl2.Globe.FlyToPointSpeed * 3; + globeControl2.Globe.FlyToPointSpeed = globeControl2.Globe.FlyToPointSpeed*3; globeControl2.Globe.EditSnapObject = true; globeControl2.Globe.IsReleaseMemOutOfView = true; globeControl2.Globe.ControlPanel.Visible = false; - GSOSimplePolygonStyle3D trackingRectStyle = globeControl1.Globe.TrackRectTool.TrackingPolygonStyle as GSOSimplePolygonStyle3D; + GSOSimplePolygonStyle3D trackingRectStyle = + globeControl1.Globe.TrackRectTool.TrackingPolygonStyle as GSOSimplePolygonStyle3D; trackingRectStyle.FillColor = Color.FromArgb(0, 0, 0, 0); - GSOSimplePolygonStyle3D trackRectStyle = globeControl1.Globe.TrackRectTool.PolygonStyle as GSOSimplePolygonStyle3D; + GSOSimplePolygonStyle3D trackRectStyle = + globeControl1.Globe.TrackRectTool.PolygonStyle as GSOSimplePolygonStyle3D; trackRectStyle.FillColor = Color.FromArgb(0, 0, 0, 0); - GSOSimpleLineStyle3D trackRectLineStyle = globeControl1.Globe.TrackRectTool.PolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; + GSOSimpleLineStyle3D trackRectLineStyle = + globeControl1.Globe.TrackRectTool.PolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; trackRectLineStyle.LineType = EnumLineType.Solid; - GSOSimpleLineStyle3D trackRectLineStyle1 = globeControl1.Globe.TrackRectTool.TrackingPolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; + GSOSimpleLineStyle3D trackRectLineStyle1 = + globeControl1.Globe.TrackRectTool.TrackingPolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; trackRectLineStyle1.LineType = EnumLineType.Solid; trackRectLineStyle1.LineColor = Color.FromArgb(0, 174, 255); trackRectLineStyle1.LineWidth = 1; @@ -1107,7 +1149,7 @@ //加载两个地球数据 private void loadData() { - Thread t1 = new Thread(doLoadDataForGlobalControl1); + Thread t1 = new Thread(doLoadDataForGlobalControl); t1.IsBackground = true; t1.Start(); } @@ -1119,30 +1161,22 @@ globeControl1.Globe.ConnectServer(Utility.serverip, Utility.serverport, "", ""); //加载locaServer中的数据 globeControl2.Globe.ConnectServer(Utility.serverip, Utility.serverport, "", ""); //加载locaServer中的数据 //初始化TreeView - // 勾选实测图层 - foreach (TreeNode tn in layerTree.Nodes) - { - if (tn.Nodes.Count <= 0) continue; - if (tn.Text != "实测数据") continue; - tn.Checked = true; - foreach (TreeNode tnChild in tn.Nodes) - { - tnChild.Checked = true; - foreach (TreeNode tnGrandChild in tnChild.Nodes) - { - tnGrandChild.Checked = true; - } - } - } - } - private void doLoadDataForGlobalControl1() + initLayerTree(); + } + /// + /// 加载地球1、2的图层 + /// + private void doLoadDataForGlobalControl() { try { globeControl1.Globe.Layers.MoveDown(10000); //加载实测管线数据 - Utility.dataSource = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.DBServer.Trim() + "/" + Utility.dbdatabase.Trim(), "", "", Utility.userID, Utility.DBPassword); + Utility.dataSource = + globeControl1.Globe.DataManager.OpenOracleDataSource( + Utility.DBServer.Trim() + "/" + Utility.dbdatabase.Trim(), "", "", Utility.userID, + Utility.DBPassword); if (Utility.dataSource != null) { @@ -1160,7 +1194,9 @@ globeControl1.Globe.Layers.GetLayerByCaption("红线").Visible = false; //globleControl1中加载规划数据 - GSODataSource ghDS = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.ghdbip + "/" + Utility.ghdbname, "", "", Utility.ghdbuser, Utility.ghdbpwd); + GSODataSource ghDS = + globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.ghdbip + "/" + Utility.ghdbname, "", "", + Utility.ghdbuser, Utility.ghdbpwd); if (ghDS != null) { for (int j = 0; j < ghDS.DatasetCount; j++) @@ -1176,13 +1212,16 @@ } //globeControl1,globeControl2中加载施工数据 - GSODataSource sgDS = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.sgdbip + "/" + Utility.sgdbname, "", "", Utility.sgdbuser, Utility.sgdbpwd); + GSODataSource sgDS = + globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.sgdbip + "/" + Utility.sgdbname, "", "", + Utility.sgdbuser, Utility.sgdbpwd); if (sgDS != null) { for (int m = 0; m < sgDS.DatasetCount; m++) { GSODataset dataset = sgDS.GetDatasetAt(m); - if (dataset != null && !dataset.Caption.Contains("SH") && Utility.dictionaryNetLayerNameAndCaption.ContainsKey(dataset.Caption)) + if (dataset != null && !dataset.Caption.Contains("SH") && + Utility.dictionaryNetLayerNameAndCaption.ContainsKey(dataset.Caption)) { dataset.Caption = dataset.Name; globeControl1.Globe.Layers.Add(dataset); @@ -1196,12 +1235,12 @@ // LoadDataForGlobalControl ss = connectServer; // ss(); - + this.Invoke((EventHandler) delegate { connectServer(); }); - + } catch (Exception ex) @@ -1212,67 +1251,17 @@ private void initLayerTree() { + layerTree.Nodes.Clear(); //加载临时图层节点 layerManagerNode = new TreeNode(); layerManagerNode.ImageIndex = 0; layerManagerNode.SelectedImageIndex = 0; layerManagerNode.Checked = true; layerManagerNode.Text = "临时图层"; + layerManagerNode.Tag = layerTemp; layerTree.Nodes.Add(layerManagerNode); - XmlDocument doc = new XmlDocument(); - doc.Load(Utility.filename); - XmlNodeList xmlLayerNodes = doc.SelectNodes("//layer"); - - foreach (XmlNode xmlLayerNode in xmlLayerNodes) - { - - //TODO LIST:创建一级TreeNode(实测、规划、施工) - TreeNode nodelayer = new TreeNode(); - string layerName = xmlLayerNode.Attributes["label"].Value; - nodelayer.Text = layerName; - nodelayer.Checked = false; - layerTree.Nodes.Add(nodelayer); - - XmlNodeList xmlChildLayerNodes = xmlLayerNode.ChildNodes; - foreach (XmlNode xmlChildLayerNode in xmlChildLayerNodes) - { - //TODO LIST:创建二级TreeNode节点 - TreeNode secondLevelNode = new TreeNode(); - string layerType = xmlChildLayerNode.Attributes["label"].Value; - secondLevelNode.Text = layerType; - - if (xmlChildLayerNode.Attributes["type"] != null) - { //道路图层特殊处理 - string type = xmlChildLayerNode.Attributes["type"].Value; - secondLevelNode.Tag = type + "|" + layerType; - } - else - { - secondLevelNode.Tag = layerType; - } - secondLevelNode.Checked = false; - nodelayer.Nodes.Add(secondLevelNode); - - XmlNodeList xmlActitualLayerNodes = xmlChildLayerNode.ChildNodes; - - foreach (XmlNode xmlActitualLayerNode in xmlActitualLayerNodes) - { - //TODO LIST:创建三级图层节点 - TreeNode layerNode = new TreeNode(); - string actutallylayerType = xmlActitualLayerNode.Attributes["type"].Value; - string actutallylayerName = xmlActitualLayerNode.Attributes["layer"].Value; - string actutallyLabelName = xmlActitualLayerNode.Attributes["label"].Value; - - layerNode.Text = actutallyLabelName; - layerNode.Tag = layerType + "|" + actutallyLabelName; - layerNode.Checked = false; - secondLevelNode.Nodes.Add(layerNode); - } - - } - - } + TreeUtils.InitLayerTree(globeControl1, layerTree, null); } @@ -1298,7 +1287,8 @@ for (int i = 0; i < markerStrs.Length; i++) { if (!File.Exists(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd")) continue; - GSOLayer markerLayer = globeControl1.Globe.Layers.Add(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd"); + GSOLayer markerLayer = + globeControl1.Globe.Layers.Add(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd"); if (markerLayer == null) continue; TreeNode node1 = new TreeNode(); node1.Text = markerLayer.Caption; @@ -1312,9 +1302,11 @@ private void MainFrm_Load(object sender, EventArgs e) { + + layerTree.Nodes.Add("正在加载,请稍后……");//树状图加载在图层加载之后,故增加提示 initGlobalControl(); //initGlobalMap(); - initLayerTree(); +// initLayerTree(); initMarkerTree(); initLayout(); loadData(); @@ -1383,7 +1375,7 @@ tempnode.Checked = node.Checked ? feature.Visible : false; tempnode.Tag = feature; node.Nodes.Add(tempnode); - GSOFeatureFolder featureFolder = (GSOFeatureFolder)feature; + GSOFeatureFolder featureFolder = (GSOFeatureFolder) feature; VisitFeature3Ds(featureFolder.Features, tempnode); } else @@ -1444,7 +1436,7 @@ /// Boolean CheckDatasetGeoReference(GSODataset dataset, string strDataPath) { - + if (dataset.GeoReferenceType != EnumGeoReferenceType.Flat) return true; Boolean bSuccess = false; if (MessageBox.Show("数据没有空间参考信息,请设置空间参考信息!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) != @@ -1498,7 +1490,7 @@ dlg.Filter = "输出JPEG(*.jpg)|*.jpg|输出PNG(*.png)|*.png|输出BMP(*.bmp)|*.bmp|输出BMP(*.gif)|*.gif"; if (dlg.ShowDialog() == DialogResult.OK) { - string extension = Path.GetExtension(dlg.FileName);//扩展名 + string extension = Path.GetExtension(dlg.FileName); //扩展名 switch (extension) { case ".jpg": @@ -1520,6 +1512,7 @@ globeControl1.Globe.Action = EnumAction3D.ActionNull; globeControl1.Globe.MouseRoamingEnable = true; } + /// /// 定位正北正90度俯视 /// @@ -1548,7 +1541,6 @@ void globeControl1_HudControlMouseIntoEvent(object sender, HudControlMouseIntoEventArgs e) { - GSOHudButton btn = e.HudControl as GSOHudButton; tooltip1 = new ToolTip(); switch (e.HudControl.Name) { @@ -1573,163 +1565,46 @@ break; } } - /// - /// layerTree选中后事件处理 - /// - /// - /// + + #region wxl 重构树形结构代码 + private void layerTree_AfterCheck(object sender, TreeViewEventArgs e) { - if (e.Node.Tag != null) + if (e.Action != TreeViewAction.Unknown) { - if (e.Node.Tag.ToString().Contains("|")) - { - string nodeTag = e.Node.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(nodeTag); - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - if (e.Node.Tag is GSOFeature) - { - if (e.Node.Nodes.Count == 0) - { - GSOFeature feat = e.Node.Tag as GSOFeature; - feat.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - } - CheckControl(e); - } - /// - /// 树节点选中方法 - /// - /// - private void CheckControl(TreeViewEventArgs e) - { - if (e.Action == TreeViewAction.Unknown||e.Node == null || Convert.IsDBNull(e.Node)) return; - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - { - CheckAllChildNodes(e.Node, e.Node.Checked); - } - } - /// - /// 改变所有子节点的状态 - /// - /// - /// - private void CheckAllChildNodes(TreeNode pn, bool IsChecked) - { - foreach (TreeNode tn in pn.Nodes) - { - tn.Checked = IsChecked; - - if (tn.Nodes.Count > 0) - { - CheckAllChildNodes(tn, IsChecked); - } + TreeUtils.TreeNodeCheckedChange(globeControl1, e.Node); } } - //改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 - private void CheckParentNode(TreeNode curNode) - { - bool bChecked = false; - - if (curNode.Parent == null) return; - foreach (TreeNode node in curNode.Parent.Nodes) - { - if (node.Checked) - { - bChecked = true; - break; - } - } - - if (bChecked) - { - curNode.Parent.Checked = true; - CheckParentNode(curNode.Parent); - } - else - { - curNode.Parent.Checked = false; - CheckParentNode(curNode.Parent); - } - } - + #endregion private void layerTree_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (e.Button != MouseButtons.Right) return; layerTree.SelectedNode = e.Node; - if (e.Node.Tag == null) return; - if (e.Button == MouseButtons.Right && e.Node.Tag.ToString().Contains("|")) + if (e.Node.Tag == null || e.Node.Parent == null) return; //排除无图层节点和第一级节点 + + //来自locaserver的数据,直接返回就行了,目前只有一个180fd,暂时单独处理 + GSOLayer gsoLayer = e.Node.Tag as GSOLayer; + if (gsoLayer == null || gsoLayer.Caption.Equals(Utility.roadLayerName)) return; + if (e.Node.Parent.Text.Equals("临时图层") || e.Node.Parent.Text.Equals("我的地标")) { - - if (e.Node.Tag.ToString().Split('|')[0] == "locaserver") - { - - foreach (ToolStripItem item in layerNodeContexMenu.Items) - { - item.Visible = false; - } - return; - - } - - if (e.Node.Tag.ToString().Split('|')[0] == "new") - { - LayerEditableMenuItem.Enabled = true; - foreach (ToolStripItem item in layerNodeContexMenu.Items) - { - item.Visible = false; - } - //LayerSelectableMenuItem.Visible = true; - //LayerEditableMenuItem.Visible = true; - RemoveLayer.Visible = true; - RefreshLayerFeatureListMenuItem.Visible = true; - //SaveLayerMenuItem.Visible = true; - //LayerFlyMenuItem.Visible = true; - } - + //临时图层下的子节点应该展示的 + contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); + contextMenuStripDeleteLayerNode.Tag = e.Node; + } + else + { LayerSelectableMenuItem.Visible = true; LayerEditableMenuItem.Visible = true; SaveLayerMenuItem.Visible = true; LayerFlyMenuItem.Visible = true; 导出CADToolStripMenuItem1.Visible = true; - layerNodeContexMenu.Show(layerTree, e.X, e.Y); layerNodeContexMenu.Tag = e.Node; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(e.Node.Tag.ToString().Split('|')[1]); - if (layer != null) - { - LayerSelectableMenuItem.Checked = layer.Selectable; - LayerEditableMenuItem.Checked = layer.Editable; - } + LayerSelectableMenuItem.Checked = gsoLayer.Selectable; + LayerEditableMenuItem.Checked = gsoLayer.Editable; } - else - { - if (e.Node.Tag is GSOLayer && e.Node.Parent != null && e.Node.Parent.Text.Trim() == "临时图层") - { - contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); - contextMenuStripDeleteLayerNode.Tag = e.Node; - } - else if (e.Node.Tag is GSOFeature && e.Node.Parent != null && e.Node.Parent.Text.Trim() == "我的地标") - { - contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); - contextMenuStripDeleteLayerNode.Tag = e.Node; - } - } + } /// @@ -1740,75 +1615,61 @@ private void 删除ToolStripMenuItem2_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "临时图层") + if (node == null || node.Parent == null) return; + if (node.Parent.Text.Trim() == "临时图层") { - if (node.Tag is GSOLayer) - { - GSOLayer layer = node.Tag as GSOLayer; - - for (int i = globeControl1.Globe.Layers.Count - 1; i >= 0; i--) - { - if (globeControl1.Globe.Layers[i].Caption == layer.Caption) - { - globeControl1.Globe.Layers.Remove(globeControl1.Globe.Layers[i]); - } - } - - globeControl1.Globe.Refresh(); - - node.Remove(); - } - } - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "我的地标") + if (!(node.Tag is GSOLayer)) return; + GSOLayer layer = node.Tag as GSOLayer; + globeControl1.Globe.Layers.Remove(layer); + globeControl1.Globe.Refresh(); + node.Remove(); + }else if (node.Parent.Text.Trim() == "我的地标") { - if (node.Tag is GSOFeature) - { - GSOFeature f = node.Tag as GSOFeature; - f.Delete(); - globeControl1.Globe.Refresh(); - - node.Remove(); - } + if (!(node.Tag is GSOFeature)) return; + GSOFeature f = node.Tag as GSOFeature; + f.Delete(); + globeControl1.Globe.Refresh(); + node.Remove(); } + } private void 可编辑ToolStripMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "临时图层") - { - if (node.Tag is GSOLayer) - { - GSOLayer layer = node.Tag as GSOLayer; - - 可编辑ToolStripMenuItem.Checked = !可编辑ToolStripMenuItem.Checked; - layer.Editable = 可编辑ToolStripMenuItem.Checked; - } - } + if (node == null || + node.Parent == null || + node.Parent.Text.Trim() != "临时图层" || !(node.Tag is GSOLayer)) return; + GSOLayer layer = node.Tag as GSOLayer; + 可编辑ToolStripMenuItem.Checked = !可编辑ToolStripMenuItem.Checked; + layer.Editable = 可编辑ToolStripMenuItem.Checked; } private void 保存ToolStripMenuItem_Click(object sender, EventArgs e) { - //TreeNode node = layerNodeContexMenu.Tag as TreeNode; - TreeNode node = contextMenuStripDeleteLayerNode.Tag as TreeNode; - - Int32 nIndex = node.Index; - string layerCaption = node.Text;//.Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); +// TreeNode node = contextMenuStripDeleteLayerNode.Tag as TreeNode; + TreeNode node = layerTree.SelectedNode; + if (node == null||node.Tag==null) return; + GSOLayer layer = node.Tag as GSOLayer; + if (layer == null) return; layer.Dataset.Save(); } - + //TODO LIST: wxl? Tag更正 private void 定位ToolStripMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - - if (node == null) return; + if (node == null||node.Parent==null) return; if (node.Parent.Text.Trim() == "临时图层") { - GSOLayer lsLayer = globeControl1.Globe.Layers.GetLayerByCaption(node.Text); + GSOLayer lsLayer = node.Tag as GSOLayer; + if (lsLayer == null) + { + LogHelper.WriteLog(typeof(MainFrm),"要定位的临时图层不存在:"+node.Text); + return; + } double x = lsLayer.LatLonBounds.Center.X; double y = lsLayer.LatLonBounds.Center.Y; - if (x == 0 && y == 0) + if (x.Equals(0) && y.Equals(0)) { x = lsLayer.Bounds.Center.X; y = lsLayer.Bounds.Center.Y; @@ -1818,20 +1679,14 @@ } else { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); - + GSOLayer layer = node.Tag as GSOLayer; if (layer == null) return; - if (layer.Caption == "红线") + if (layer.Caption.Equals("红线")) { globeControl1.Globe.FlyToPosition(new GSOPoint3d(120.610963, 31.188121, 50), EnumAltitudeMode.Absolute, -4, 50, 1000); globeControl1.Globe.FlyToPointSpeed = 10000000; globeControl1.Globe.Action = EnumAction3D.SelectObject; - - GSOLayer redLayer = globeControl1.Globe.Layers.GetLayerByCaption("红线"); - if (redLayer != null) - { - redLayer.Visible = true; - } + layer.Visible = true; globeControl1.Refresh(); } else @@ -1842,55 +1697,28 @@ } } } - + //TODO LIST: wxl? Tag更正 private void layerTree_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) { - if (layerTree.SelectedNode == null) return; - if (layerTree.SelectedNode.Tag.ToString().Contains("|")) + TreeNode node = layerTree.SelectedNode; + if (node == null) return; + if (node.Tag is GSOLayer) { - string nodeTag = layerTree.SelectedNode.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(nodeTag); - if (layer != null) + GSOLayer layer = node.Tag as GSOLayer; + if (layer.GetAllFeatures().Length <= 0) return; + GSOFeature feature = layer.GetAt(0); + if (feature != null && feature.Geometry != null) { - if (layer.Caption == "红线") - { - globeControl1.Globe.FlyToPosition(new GSOPoint3d(120.610963, 31.188121, 50), EnumAltitudeMode.Absolute, -4, 50, 1000); - globeControl1.Globe.FlyToPointSpeed = 10000000; - globeControl1.Globe.Action = EnumAction3D.SelectObject; - - GSOLayer redLayer = globeControl1.Globe.Layers.GetLayerByCaption("红线"); - if (redLayer != null) - { - redLayer.Visible = true; - } - globeControl1.Refresh(); - } - else - { - double x = layer.LatLonBounds.Center.X; - double y = layer.LatLonBounds.Center.Y; - globeControl1.Globe.FlyToPosition(new GSOPoint3d(x, y, 0), EnumAltitudeMode.Absolute); - } + globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute);//, 0, 0, 1000); + } + else + { + globeControl1.Globe.FlyToFeature(feature); } } - if (layerTree.SelectedNode.Tag is GSOLayer) + else if (node.Tag is GSOFeature) { - GSOLayer layer = layerTree.SelectedNode.Tag as GSOLayer; - if (layer.GetAllFeatures().Length > 0) - { - GSOFeature feature = layer.GetAt(0); - if (feature != null && feature.Geometry != null) - { - globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute);//, 0, 0, 1000); - } - else - { - globeControl1.Globe.FlyToFeature(feature); - } - } - } else if (layerTree.SelectedNode.Tag is GSOFeature) - { - GSOFeature feature = layerTree.SelectedNode.Tag as GSOFeature; + GSOFeature feature = node.Tag as GSOFeature; if (feature.Geometry != null) { globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute, 0, 0, 10); @@ -2231,15 +2059,7 @@ int idx = dataGridViewX2.Rows.Add(); dataGridViewX2.Rows[idx].Tag = feat; dataGridViewX2.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX2.Rows[idx].Cells[1].Value = featureName; } } @@ -2261,15 +2081,7 @@ int idx = dataGridViewLineList.Rows.Add(); dataGridViewLineList.Rows[idx].Tag = feat; dataGridViewLineList.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewLineList.Rows[idx].Cells[1].Value = featureName; } } @@ -2291,15 +2103,7 @@ int idx = dataGridViewX8.Rows.Add(); dataGridViewX8.Rows[idx].Tag = feat; dataGridViewX8.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX8.Rows[idx].Cells[1].Value = featureName; } } @@ -2321,15 +2125,7 @@ int idx = dataGridViewX4.Rows.Add(); dataGridViewX4.Rows[idx].Tag = feat; dataGridViewX4.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX4.Rows[idx].Cells[1].Value = featureName; } @@ -2353,15 +2149,7 @@ int idx = dataGridViewX6.Rows.Add(); dataGridViewX6.Rows[idx].Tag = feat; dataGridViewX6.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX6.Rows[idx].Cells[1].Value = featureName; } } @@ -2736,77 +2524,104 @@ return str; } - //string filename = Utility.filename; - //List g1layername = new List(); - /// /// 获取目标图层 /// /// +// private GSOLayer TreeNodeFeatureLayer() +// { +// TreeNode featureAddPipeFitTreenode = GetDestLayerFeatureAddTreeNode(); +// GSOLayer featureAddLayer = globeControl1.Globe.Layers.GetLayerByCaption(featureAddPipeFitTreenode.Tag.ToString().Split('|')[1]); +// +// return featureAddLayer; +// } + //TODO LIST: wxl11? 待更正,Node的Tag现在都已经统一为gsolayer对象了 +// private TreeNode GetDestLayerFeatureAddTreeNode() +// { +// for (int i = 0; i < layerTree.Nodes.Count; i++) +// { +// TreeNode tempNode = layerTree.Nodes[i]; +// for (int j = 0; j < tempNode.Nodes.Count; j++) +// { +// TreeNode tempChildNode = tempNode.Nodes[j]; +// if (tempChildNode.Tag.ToString().Split('|').Length > 1) // Config配置文件配置的图层 +// {//本层节点Tag记录layer +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode; +// } +// } +// else //临时添加的本地图层 +// {//子层节点的Tag记录layer +// for (int m = 0; m < tempChildNode.Nodes.Count; m++) +// { +// TreeNode tempChildNode1 = tempChildNode.Nodes[m]; +// if (tempChildNode1.Tag.ToString().Split('|').Length > 1) +// { +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode1.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode1.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode1; +// } +// } +// else +// { +// for (int n = 0; n < tempChildNode1.Nodes.Count; n++) +// { +// TreeNode tempChildNode2 = tempChildNode1.Nodes[n]; +// if (tempChildNode2.Tag.ToString().Split('|').Length <= 1) continue; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode2.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode2.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode2; +// } +// } +// } +// } +// } +// } +// } +// return null; +// } private GSOLayer TreeNodeFeatureLayer() { TreeNode featureAddPipeFitTreenode = GetDestLayerFeatureAddTreeNode(); - GSOLayer featureAddLayer = globeControl1.Globe.Layers.GetLayerByCaption(featureAddPipeFitTreenode.Tag.ToString().Split('|')[1]); - - return featureAddLayer != null ? featureAddLayer : null; + if (featureAddPipeFitTreenode == null) return null; + GSOLayer featureAddLayer = featureAddPipeFitTreenode.Tag as GSOLayer; + return featureAddLayer; } - + //遍历最深三层找到目标node. private TreeNode GetDestLayerFeatureAddTreeNode() { - for (int i = 0; i < layerTree.Nodes.Count; i++) + + foreach (TreeNode layerTreeNode in layerTree.Nodes) { - TreeNode tempNode = layerTree.Nodes[i]; - for (int j = 0; j < tempNode.Nodes.Count; j++) + if (layerTreeNode.Tag == null && layerTreeNode.Nodes.Count > 0) { - TreeNode tempChildNode = tempNode.Nodes[j]; - if (tempChildNode.Tag.ToString().Split('|').Length > 1) // Config配置文件配置的图层 + foreach (TreeNode node in layerTreeNode.Nodes) { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode; - } + GSOLayer gsoLayer = node.Tag as GSOLayer; + if (gsoLayer != null && gsoLayer.IsDestLayerFeatureAdd()) return node; + } - else //临时添加的本地图层 - { - for (int m = 0; m < tempChildNode.Nodes.Count; m++) - { - TreeNode tempChildNode1 = tempChildNode.Nodes[m]; - if (tempChildNode1.Tag.ToString().Split('|').Length > 1) - { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode1.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode1.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode1; - } - } - else - { - for (int n = 0; n < tempChildNode1.Nodes.Count; n++) - { - TreeNode tempChildNode2 = tempChildNode1.Nodes[n]; - if (tempChildNode2.Tag.ToString().Split('|').Length <= 1) continue; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode2.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode2.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode2; - } - } - } - } - } + } + else + { + GSOLayer gsoLayer = layerTreeNode.Tag as GSOLayer; + if (gsoLayer != null && gsoLayer.IsDestLayerFeatureAdd()) return layerTreeNode; } } return null; @@ -3221,6 +3036,7 @@ } } } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 目标图层 菜单 /// @@ -3228,14 +3044,15 @@ /// private void FeatureAddLayerMenuItem_Click(object sender, EventArgs e) { - if (!FeatureAddLayerMenuItem.Checked) - { - TreeNode node = layerNodeContexMenu.Tag as TreeNode; - FeatureAddLayerMenuItem.Checked = true; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); - globeControl1.Globe.DestLayerFeatureAdd = layer; - } + if (FeatureAddLayerMenuItem.Checked) return; + TreeNode node = layerNodeContexMenu.Tag as TreeNode; + FeatureAddLayerMenuItem.Checked = true; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; + globeControl1.Globe.DestLayerFeatureAdd = layer; } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 可选择 菜单 /// @@ -3244,11 +3061,13 @@ private void LayerSelectableMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - Int32 nIndex = node.Index; - GSOLayer layer = globeControl1.Globe.Layers[nIndex]; +// GSOLayer layer = globeControl1.Globe.Layers[nIndex]; + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; LayerSelectableMenuItem.Checked = !LayerSelectableMenuItem.Checked; - layer.Selectable = LayerSelectableMenuItem.Checked; + if (layer != null) layer.Selectable = LayerSelectableMenuItem.Checked; } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 可编辑 菜单 /// @@ -3257,23 +3076,27 @@ private void LayerEditableMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; LayerEditableMenuItem.Checked = !LayerEditableMenuItem.Checked; - layer.Editable = LayerEditableMenuItem.Checked; + if (layer != null) layer.Editable = LayerEditableMenuItem.Checked; } /// /// 图层目录树 右键菜单中的 保存 菜单 /// /// /// + //TODO LIST: wxl? Tag更正 private void SaveLayerMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - Int32 nIndex = node.Index; - string layerCaption = node.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); - layer.Dataset.Save(); +// string layerCaption = node.Tag.ToString().Split('|')[1]; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; + if (layer != null) layer.Dataset.Save(); } #region wxl feature的公共方法 @@ -3455,7 +3278,6 @@ return; GSOFeatureLayer flayer = layer as GSOFeatureLayer; - GSOFeatureDataset fdataset = flayer.Dataset as GSOFeatureDataset; GSOFeatures feats = flayer.GetAllFeatures(); for (int i = 0; i < feats.Length; i++) { @@ -3480,7 +3302,6 @@ return; GSOFeatureLayer flayer = layer as GSOFeatureLayer; - GSOFeatureDataset fdataset = flayer.Dataset as GSOFeatureDataset; GSOFeatures feats = flayer.GetAllFeatures(); for (int i = 0; i < feats.Length; i++) { @@ -5508,7 +5329,6 @@ private void addNodeToLayerManagerNode(GSOLayer layer) { if (layer == null) return; - GSODataset dataset = layer.Dataset; CheckDatasetGeoReference(layer.Dataset, ""); TreeNode node = new TreeNode(); @@ -5527,43 +5347,24 @@ /// /// /// - public int getLabelName(GSOLayer layer) - { - int nid = -1; - if (layer.GetAllFeatures().Length > 0) - { - string id = layer.GetAllFeatures()[layer.GetAllFeatures().Length - 1].Name; +// public int getLabelName(GSOLayer layer) +// { +// int nid = -1; +// if (layer.GetAllFeatures().Length > 0) +// { +// string id = layer.GetAllFeatures()[layer.GetAllFeatures().Length - 1].Name; +// +// int.TryParse(id, out nid); +// } +// else +// { +// nid = 0; +// } +// return nid; +// } - int.TryParse(id, out nid); - } - else - { - nid = 0; - } - return nid; - } /// - /// 判断选中的对象是否为管线 - /// - /// 被选中管线 - /// 返回一根线 - private GSOFeature IsPipeLineOfSelectedObj() - { - GSOFeature resFeature = null; - if (globeControl1.Globe.SelObjectCount < 1) return null; - GSOLayer resLayer = null; - globeControl1.Globe.GetSelectObject(0, out resFeature, out resLayer); - if (resFeature == null) return null; - - GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; - if (line1 == null) return null; - GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; - if (pipeStyle1 == null) return null; - - return resFeature; - } - /// /// 图层节点树中 节点 右键单击事件处理 /// /// @@ -5615,13 +5416,15 @@ { TreeNode node = contextMenuStrip2.Tag as TreeNode; TreeNode parentNode = node.Parent; - Int32 nIndex = node.Index; if (parentNode.Text == "标注管理" || parentNode.Text == "传感器管理") { RefreshTreeNodeLayerFeatureList(node); } } + + #region wxl? VisitFeature3Ds的作用,重构后,是否对其有影响 + /// /// 给指定的图层节点添加代表feature对象的子节点 /// @@ -5636,6 +5439,9 @@ VisitFeature3Ds(layer.GetAllFeatures(), layerTreeNode); } } + + #endregion + /// /// 标注管理、传感器管理 图层目录树的右键菜单中的 移除所有 菜单 /// @@ -5660,53 +5466,11 @@ { if (e.Action != TreeViewAction.Unknown) { - CheckTreeNode(e.Node, e.Node.Checked); + //wxl优化标注管理树形结构 + TreeUtils.TreeNodeCheckedChange(globeControl1,e.Node); } } - /// - /// 改变指定节点对应的复选框的选中状态 - /// - /// - /// - private void CheckTreeNode(TreeNode node, Boolean bChecked) - { - CheckChildTreeNode(node, bChecked); - globeControl1.Globe.Refresh(); - } - /// - /// 改变指定节点的子节点对应的复选框的选中状态 - /// - /// - /// - private void CheckChildTreeNode(TreeNode node, Boolean bChecked) - { - if (node == null) - return; - if (node.Tag != null) - { - if (node.Tag.GetType() == typeof(GSOFeatureFolder) || node.Tag.GetType() == typeof(GSOFeature)) - ((GSOFeature)node.Tag).SetVisibleDirectly(bChecked); - else - { - GSOLayer curLayer = node.Tag as GSOLayer; - GSOTerrain curTerrain = node.Tag as GSOTerrain; - if (curLayer != null) - { - curLayer.Visible = bChecked; - } - else if (curTerrain != null) - { - curTerrain.Visible = bChecked; - } - } - } - // 递归处理子节点 - for (int i = 0; i < node.Nodes.Count; i++) - { - node.Nodes[i].Checked = bChecked; - CheckChildTreeNode(node.Nodes[i], bChecked); - } - } + /// /// 标注管理、传感器管理 目录树中的feature节点的右键菜单中的 删除 菜单 /// @@ -5984,7 +5748,7 @@ frmModify = new FrmMnModify(globeControl1, shlayername, shresultLists); - if (boolfrmModify != false) return; + if (boolfrmModify) return; frmModify.Owner = this; frmModify.Location = new Point(Width - frmModify.Width - 10, Height - frmModify.Height - 50); frmModify.Show(); @@ -6261,16 +6025,15 @@ globeControl1.Globe.ClearMeasure(); layerTemp.RemoveAllFeature(); - layerTemp2.RemoveAllFeature(); buttonItemLS5.Checked = false; dataGridViewX1.DataSource = null; panelOfTable.Visible = false; globeControl1.Globe.MemoryLayer.RemoveAllFeature(); + globeControl2.Globe.MemoryLayer.RemoveAllFeature(); globeControl1.Globe.ClearAnalysis(); - // 清除净距分析结果 buttonX2_Click(null, null); buttonX8_Click(null, null); @@ -6527,8 +6290,8 @@ GSOFeatures selectFeatures = new GSOFeatures(); for (int i = 0; i < globeControl1.Globe.SelObjectCount; i++) { - GSOFeature feature = null; - GSOLayer layer = null; + GSOFeature feature; + GSOLayer layer; globeControl1.Globe.GetSelectObject(i, out feature, out layer); if (feature != null && feature.Geometry != null && feature.Geometry.Type == EnumGeometryType.GeoPolyline3D) { @@ -6536,11 +6299,9 @@ } } List feats = SectionAnalysisTool.ZDMAnalysis(selectFeatures); - if (feats != null && feats.Count >= 1) - { - FrmProfileAnalysis frm = new FrmProfileAnalysis(globeControl1, feats); - frm.Show(this); - } + if (feats == null || feats.Count < 1) return; + FrmProfileAnalysis frm = new FrmProfileAnalysis(globeControl1, feats); + frm.Show(this); } /// /// 道路断面分析 @@ -7057,14 +6818,14 @@ /// private void buttonItemSZ1_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7075,17 +6836,17 @@ /// /// 管径标注 /// - GSOFeature radiusMarkerFeature; +// GSOFeature radiusMarkerFeature; private void buttonItemBZ2_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine==null||selLine[0].Count <= 1)//wxl增加为空判断,下面方法同理 + if (selLine == null || selLine[0].Count <= 1) //wxl增加为空判断,下面方法同理 { return; } @@ -7100,14 +6861,14 @@ /// private void buttonItemBZ3_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null||selLine[0].Count <= 1) { return; } @@ -7123,14 +6884,14 @@ /// private void buttonItemBZ4_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7140,7 +6901,7 @@ /// /// 距离标注 /// - bool distanceMarker; +// bool distanceMarker; private void buttonItemBZ5_Click(object sender, EventArgs e) { //日志记录 @@ -7148,7 +6909,7 @@ globeControl1.Globe.Action = EnumAction3D.TrackPolyline; //globeControl1.Globe.DistanceRuler.MeasureMode = EnumDistanceMeasureMode.HVSLineMeasure; - distanceMarker = true; +// distanceMarker = true; } /// /// 自定义标注 @@ -7187,14 +6948,14 @@ /// private void buttonItemBZ8_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7775,11 +7536,9 @@ if (frm.ShowDialog() == DialogResult.OK) { GSOLayer featureAddLayer = TreeNodeFeatureLayer(); - if (featureAddLayer != null) - { - FrmAddInstrument dlg = new FrmAddInstrument(globeControl1, featureAddLayer); - dlg.Show(this); - } + if (featureAddLayer == null) return; + FrmAddInstrument dlg = new FrmAddInstrument(globeControl1, featureAddLayer); + dlg.Show(this); } } /// @@ -7822,11 +7581,9 @@ frm.citySevenLineType); globeControl1.Tag = citySevenLine; GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(frm.citySevenLineType); - if (layer != null) - { - globeControl1.Globe.DestLayerFeatureAdd = layer; - layer.Editable = true; - } + if (layer == null) return; + globeControl1.Globe.DestLayerFeatureAdd = layer; + layer.Editable = true; } } #endregion @@ -7986,44 +7743,45 @@ LogManager.saveLog(Utility.userName, buttonItemBJ10_2.Text); List listVectorNames = new List(); - for (int i = 0; i < Utility.m_PipelineLayerNames.Count; i++) + foreach (string pipeline in Utility.m_PipelineLayerNames) { - if (!listVectorNames.Contains(Utility.m_PipelineLayerNames[i])) + if (!listVectorNames.Contains(pipeline)) { - listVectorNames.Add(Utility.m_PipelineLayerNames[i]); + listVectorNames.Add(pipeline); } } - for (int i = 0; i < Utility.valueLayerNames.Count; i++) + foreach (string valve in Utility.valueLayerNames) { - if (!listVectorNames.Contains(Utility.valueLayerNames[i])) + if (!listVectorNames.Contains(valve)) { - listVectorNames.Add(Utility.valueLayerNames[i]); + listVectorNames.Add(valve); } } - for (int i = 0; i < Utility.workwellLayerNames.Count; i++) + foreach (string workwell in Utility.workwellLayerNames) { - if (!listVectorNames.Contains(Utility.workwellLayerNames[i])) + if (!listVectorNames.Contains(workwell)) { - listVectorNames.Add(Utility.workwellLayerNames[i]); + listVectorNames.Add(workwell); } } - for (int i = 0; i < Utility.instrumenLayerNames.Count; i++) + foreach (string instrument in Utility.instrumenLayerNames) { - if (!listVectorNames.Contains(Utility.instrumenLayerNames[i])) + if (!listVectorNames.Contains(instrument)) { - listVectorNames.Add(Utility.instrumenLayerNames[i]); + listVectorNames.Add(instrument); } } - for (int i = 0; i < Utility.pipefittingLayerNames.Count; i++) + foreach (string pipefitting in Utility.pipefittingLayerNames) { - if (!listVectorNames.Contains(Utility.pipefittingLayerNames[i])) + if (!listVectorNames.Contains(pipefitting)) { - listVectorNames.Add(Utility.pipefittingLayerNames[i]); + listVectorNames.Add(pipefitting); } } FrmExportVector frm = new FrmExportVector(globeControl1, listVectorNames); frm.ShowDialog(); } + /// /// 删除模型 /// @@ -8032,27 +7790,25 @@ private void buttonItemBJ13_Click(object sender, EventArgs e) { LogManager.saveLog(Utility.userName, buttonItemBJ13.Text); - if (globeControl1.Globe.SelObjectCount > 0) - { - for (int i = 0; i < globeControl1.Globe.SelObjectCount; i++) - { - GSOFeature f = null; - GSOLayer layer = null; - globeControl1.Globe.GetSelectObject(i, out f, out layer); - if (f == null) continue; - f.Delete(); - if (layer != null) - globeControl1.Globe.AddToEditHistroy(layer, f, EnumEditType.Delete); - globeControl1.Refresh(); - - } - MessageBox.Show("删除成功!", "提示"); - } - else + var selObjCount = globeControl1.Globe.SelObjectCount; + if (selObjCount == 0) { MessageBox.Show("请选中要删除的模型!", "提示"); + return; } + for (int i = 0; i < selObjCount; i++) + { + GSOFeature f; + GSOLayer layer; + globeControl1.Globe.GetSelectObject(i, out f, out layer); + if (f == null) continue; + f.Delete(); + if (layer != null) + globeControl1.Globe.AddToEditHistroy(layer, f, EnumEditType.Delete); + globeControl1.Refresh(); + } + MessageBox.Show("删除成功!", "提示"); globeControl1.Globe.Action = EnumAction3D.ActionNull; } @@ -8118,6 +7874,7 @@ toolStripNumbers.Text = "红线审核 |共有:" + table.Rows.Count + "条"; toolStripDropDownButton3.Visible = true; } + /// /// 主窗体 下方的工具条中的 导出.xls文件 按钮事件处理 /// @@ -8127,24 +7884,28 @@ { if (dataGridViewX1.Rows.Count != 0) { - string strSaveFile = string.Empty; - SaveFileDialog savefiledialog = new SaveFileDialog(); - savefiledialog.Filter = "Excel文件|*.xls,*.xlsx"; - savefiledialog.AddExtension = true; - savefiledialog.FileName = "红线审核"; - if (savefiledialog.ShowDialog() == DialogResult.OK) - strSaveFile = savefiledialog.FileName; - else return; - - ExpEXCEL.ExpToExcel(dataGridViewX1, strSaveFile, "红线审核", lineStruct, featsList); - MessageBox.Show("导出成功!"); - } - else - { MessageBox.Show("表格内容为空!", "提示"); + return; } + string strSaveFile; + SaveFileDialog savefiledialog = new SaveFileDialog(); + savefiledialog.Filter = "Excel文件|*.xls,*.xlsx"; + savefiledialog.AddExtension = true; + savefiledialog.FileName = "红线审核"; + if (savefiledialog.ShowDialog() == DialogResult.OK) + strSaveFile = savefiledialog.FileName; + else return; + + ExpEXCEL.ExpToExcel(dataGridViewX1, strSaveFile, "红线审核", lineStruct, featsList); + MessageBox.Show("导出成功!"); + } + /// + /// 双屏对比的地面透明度设置 + /// + /// + /// private void sliderItem2_ValueChanged(object sender, EventArgs e) { LogManager.saveLog(Utility.userName, sliderItem2.Text); @@ -8155,7 +7916,7 @@ { layer.Opaque = 100 - sliderItem2.Value; } - layer = globeControl2.Globe.Layers.GetLayerByCaption("180fd");//("180fd"); + layer = globeControl2.Globe.Layers.GetLayerByCaption(Utility.roadLayerName);//("180fd"); if (layer != null) { layer.Opaque = 100 - sliderItem2.Value; @@ -8554,7 +8315,7 @@ LogManager.saveLog(Utility.userName, buttonItem8.Text); int width = Width; - FrmCompareFeature.ShowForm(globeControl1, globeControl2, layerTemp, layerTemp2, width); + FrmCompareFeature.ShowForm(globeControl1, globeControl2, width); } /// /// 红线审核导出图片 @@ -8690,7 +8451,6 @@ private void btn_role_resc_Click(object sender, EventArgs e) { - LogManager.saveLog(Utility.userName, btn_role_resc.Text); if (FrmRoleRescManager.IS_OPEN) return; @@ -8708,7 +8468,8 @@ frm.ShowDialog(); } } -//文档管理 操作 + + //文档管理 操作 private void btn_document_info_Click(object sender, EventArgs e) { @@ -8919,11 +8680,9 @@ } private void pictureBox1_Paint(object sender, PaintEventArgs e) - { - int Width = this.Width; + { string welcomeUser = "欢迎您:" + Utility.userName; - Graphics g = e.Graphics; - g.DrawString(welcomeUser, new Font("宋体", 12), new SolidBrush(Color.Black), Width - 180, 50); + e.Graphics.DrawString(welcomeUser, new Font("宋体", 12), new SolidBrush(Color.Black), Width - 180, 50); } } diff --git a/MainFrm.designer.cs b/MainFrm.designer.cs index a9b8c6f..5d74670 100644 --- a/MainFrm.designer.cs +++ b/MainFrm.designer.cs @@ -244,42 +244,6 @@ this.保存ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.定位ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.ribbonControl1 = new DevComponents.DotNetBar.RibbonControl(); - this.ribbonPanel6 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar6 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItemSPSZ = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem8 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemLocation = new DevComponents.DotNetBar.ButtonItem(); - this.sliderItem2 = new DevComponents.DotNetBar.SliderItem(); - this.buttonItemGBJC = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonPanel4 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar1 = new DevComponents.DotNetBar.RibbonBar(); - this.btn_document_info = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonPanel12 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar18 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItem133 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem132 = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonBar13 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItem127 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem128 = new DevComponents.DotNetBar.ButtonItem(); - this.sliderItem1 = new DevComponents.DotNetBar.SliderItem(); - this.buttonItem134 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem130 = new DevComponents.DotNetBar.ButtonItem(); - this.btn_check_history = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonPanel5 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar2 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItemHX1 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemHX2 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemDCTP = new DevComponents.DotNetBar.ButtonItem(); - this.sliderItem3 = new DevComponents.DotNetBar.SliderItem(); - this.ribbonPanel2 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar3 = new DevComponents.DotNetBar.RibbonBar(); - this.btn_user_info = new DevComponents.DotNetBar.ButtonItem(); - this.btn_role_info = new DevComponents.DotNetBar.ButtonItem(); - this.btn_resc_info = new DevComponents.DotNetBar.ButtonItem(); - this.btn_role_resc = new DevComponents.DotNetBar.ButtonItem(); - this.btn_user_role = new DevComponents.DotNetBar.ButtonItem(); - this.btn_password_edit = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemPasswordReset = new DevComponents.DotNetBar.ButtonItem(); this.ribbonPanel15 = new DevComponents.DotNetBar.RibbonPanel(); this.ribbonBar20 = new DevComponents.DotNetBar.RibbonBar(); this.buttonItemSH = new DevComponents.DotNetBar.ButtonItem(); @@ -448,6 +412,42 @@ this.buttonItemBZ9 = new DevComponents.DotNetBar.ButtonItem(); this.buttonItemBZ10 = new DevComponents.DotNetBar.ButtonItem(); this.buttonItemBZ11 = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel6 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar6 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItemSPSZ = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem8 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemLocation = new DevComponents.DotNetBar.ButtonItem(); + this.sliderItem2 = new DevComponents.DotNetBar.SliderItem(); + this.buttonItemGBJC = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel4 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar1 = new DevComponents.DotNetBar.RibbonBar(); + this.btn_document_info = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel12 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar18 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItem133 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem132 = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonBar13 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItem127 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem128 = new DevComponents.DotNetBar.ButtonItem(); + this.sliderItem1 = new DevComponents.DotNetBar.SliderItem(); + this.buttonItem134 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem130 = new DevComponents.DotNetBar.ButtonItem(); + this.btn_check_history = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel5 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar2 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItemHX1 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemHX2 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemDCTP = new DevComponents.DotNetBar.ButtonItem(); + this.sliderItem3 = new DevComponents.DotNetBar.SliderItem(); + this.ribbonPanel2 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar3 = new DevComponents.DotNetBar.RibbonBar(); + this.btn_user_info = new DevComponents.DotNetBar.ButtonItem(); + this.btn_role_info = new DevComponents.DotNetBar.ButtonItem(); + this.btn_resc_info = new DevComponents.DotNetBar.ButtonItem(); + this.btn_role_resc = new DevComponents.DotNetBar.ButtonItem(); + this.btn_user_role = new DevComponents.DotNetBar.ButtonItem(); + this.btn_password_edit = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemPasswordReset = new DevComponents.DotNetBar.ButtonItem(); this.ribbonPanel1 = new DevComponents.DotNetBar.RibbonPanel(); this.ribbonBar21 = new DevComponents.DotNetBar.RibbonBar(); this.buttonItem87 = new DevComponents.DotNetBar.ButtonItem(); @@ -652,12 +652,12 @@ this.contextMenuStrip3.SuspendLayout(); this.contextMenuStripDeleteLayerNode.SuspendLayout(); this.ribbonControl1.SuspendLayout(); + this.ribbonPanel15.SuspendLayout(); this.ribbonPanel6.SuspendLayout(); this.ribbonPanel4.SuspendLayout(); this.ribbonPanel12.SuspendLayout(); this.ribbonPanel5.SuspendLayout(); this.ribbonPanel2.SuspendLayout(); - this.ribbonPanel15.SuspendLayout(); this.ribbonPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); this.panelOfTable.SuspendLayout(); @@ -2283,12 +2283,12 @@ // this.ribbonControl1.BackgroundStyle.Class = ""; this.ribbonControl1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonControl1.Controls.Add(this.ribbonPanel15); + this.ribbonControl1.Controls.Add(this.ribbonPanel2); this.ribbonControl1.Controls.Add(this.ribbonPanel6); this.ribbonControl1.Controls.Add(this.ribbonPanel4); this.ribbonControl1.Controls.Add(this.ribbonPanel12); this.ribbonControl1.Controls.Add(this.ribbonPanel5); - this.ribbonControl1.Controls.Add(this.ribbonPanel2); - this.ribbonControl1.Controls.Add(this.ribbonPanel15); this.ribbonControl1.Controls.Add(this.ribbonPanel1); this.ribbonControl1.Dock = System.Windows.Forms.DockStyle.Top; this.ribbonControl1.ImeMode = System.Windows.Forms.ImeMode.NoControl; @@ -2331,595 +2331,6 @@ this.ribbonControl1.Text = "ribbonControl1"; this.ribbonControl1.UseCustomizeDialog = false; // - // ribbonPanel6 - // - this.ribbonPanel6.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel6.Controls.Add(this.ribbonBar6); - this.ribbonPanel6.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel6.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel6.Name = "ribbonPanel6"; - this.ribbonPanel6.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel6.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel6.Style.Class = ""; - this.ribbonPanel6.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel6.StyleMouseDown.Class = ""; - this.ribbonPanel6.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel6.StyleMouseOver.Class = ""; - this.ribbonPanel6.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel6.TabIndex = 38; - // - // ribbonBar6 - // - this.ribbonBar6.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar6.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar6.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar6.BackgroundStyle.Class = ""; - this.ribbonBar6.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar6.ContainerControlProcessDialogKey = true; - this.ribbonBar6.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar6.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItemSPSZ, - this.buttonItem8, - this.buttonItemLocation, - this.sliderItem2, - this.buttonItemGBJC}); - this.ribbonBar6.Location = new System.Drawing.Point(3, 0); - this.ribbonBar6.Name = "ribbonBar6"; - this.ribbonBar6.Size = new System.Drawing.Size(427, 59); - this.ribbonBar6.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar6.TabIndex = 0; - // - // - // - this.ribbonBar6.TitleStyle.Class = ""; - this.ribbonBar6.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar6.TitleStyleMouseOver.Class = ""; - this.ribbonBar6.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar6.TitleVisible = false; - // - // buttonItemSPSZ - // - this.buttonItemSPSZ.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemSPSZ.Image"))); - this.buttonItemSPSZ.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemSPSZ.Name = "buttonItemSPSZ"; - this.buttonItemSPSZ.SubItemsExpandWidth = 14; - this.buttonItemSPSZ.Text = "双屏设置"; - this.buttonItemSPSZ.Click += new System.EventHandler(this.buttonItemSPSZ_Click); - // - // buttonItem8 - // - this.buttonItem8.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem8.Image"))); - this.buttonItem8.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem8.Name = "buttonItem8"; - this.buttonItem8.SubItemsExpandWidth = 14; - this.buttonItem8.Text = "双屏分析"; - this.buttonItem8.Click += new System.EventHandler(this.buttonItem8_Click); - // - // buttonItemLocation - // - this.buttonItemLocation.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemLocation.Image"))); - this.buttonItemLocation.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemLocation.Name = "buttonItemLocation"; - this.buttonItemLocation.SubItemsExpandWidth = 14; - this.buttonItemLocation.Text = "快速定位"; - this.buttonItemLocation.Click += new System.EventHandler(this.buttonItemLocation_Click); - // - // sliderItem2 - // - this.sliderItem2.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; - this.sliderItem2.LabelWidth = 50; - this.sliderItem2.Name = "sliderItem2"; - this.sliderItem2.Text = "地面透明度"; - this.sliderItem2.TextColor = System.Drawing.Color.Black; - this.sliderItem2.Value = 0; - this.sliderItem2.ValueChanged += new System.EventHandler(this.sliderItem2_ValueChanged); - // - // buttonItemGBJC - // - this.buttonItemGBJC.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemGBJC.Image"))); - this.buttonItemGBJC.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemGBJC.Name = "buttonItemGBJC"; - this.buttonItemGBJC.SubItemsExpandWidth = 14; - this.buttonItemGBJC.Text = "国标检测"; - this.buttonItemGBJC.Click += new System.EventHandler(this.buttonItemGBJC_Click); - // - // ribbonPanel4 - // - this.ribbonPanel4.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel4.Controls.Add(this.ribbonBar1); - this.ribbonPanel4.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel4.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel4.Name = "ribbonPanel4"; - this.ribbonPanel4.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel4.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel4.Style.Class = ""; - this.ribbonPanel4.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel4.StyleMouseDown.Class = ""; - this.ribbonPanel4.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel4.StyleMouseOver.Class = ""; - this.ribbonPanel4.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel4.TabIndex = 36; - this.ribbonPanel4.Visible = false; - // - // ribbonBar1 - // - this.ribbonBar1.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar1.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar1.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar1.BackgroundStyle.Class = ""; - this.ribbonBar1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar1.ContainerControlProcessDialogKey = true; - this.ribbonBar1.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar1.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.btn_document_info}); - this.ribbonBar1.Location = new System.Drawing.Point(3, 0); - this.ribbonBar1.Name = "ribbonBar1"; - this.ribbonBar1.Size = new System.Drawing.Size(88, 59); - this.ribbonBar1.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar1.TabIndex = 0; - // - // - // - this.ribbonBar1.TitleStyle.Class = ""; - this.ribbonBar1.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar1.TitleStyleMouseOver.Class = ""; - this.ribbonBar1.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar1.TitleVisible = false; - // - // btn_document_info - // - this.btn_document_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_document_info.Image"))); - this.btn_document_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_document_info.Name = "btn_document_info"; - this.btn_document_info.SubItemsExpandWidth = 14; - this.btn_document_info.Text = "文档管理"; - this.btn_document_info.Click += new System.EventHandler(this.btn_document_info_Click); - // - // ribbonPanel12 - // - this.ribbonPanel12.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel12.Controls.Add(this.ribbonBar18); - this.ribbonPanel12.Controls.Add(this.ribbonBar13); - this.ribbonPanel12.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel12.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel12.Name = "ribbonPanel12"; - this.ribbonPanel12.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel12.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel12.Style.Class = ""; - this.ribbonPanel12.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel12.StyleMouseDown.Class = ""; - this.ribbonPanel12.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel12.StyleMouseOver.Class = ""; - this.ribbonPanel12.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel12.TabIndex = 34; - this.ribbonPanel12.Visible = false; - // - // ribbonBar18 - // - this.ribbonBar18.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar18.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar18.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar18.BackgroundStyle.Class = ""; - this.ribbonBar18.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar18.ContainerControlProcessDialogKey = true; - this.ribbonBar18.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar18.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItem133, - this.buttonItem132}); - this.ribbonBar18.Location = new System.Drawing.Point(508, 0); - this.ribbonBar18.Name = "ribbonBar18"; - this.ribbonBar18.Size = new System.Drawing.Size(171, 59); - this.ribbonBar18.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar18.TabIndex = 1; - // - // - // - this.ribbonBar18.TitleStyle.Class = ""; - this.ribbonBar18.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar18.TitleStyleMouseOver.Class = ""; - this.ribbonBar18.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar18.TitleVisible = false; - // - // buttonItem133 - // - this.buttonItem133.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem133.Image"))); - this.buttonItem133.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem133.Name = "buttonItem133"; - this.buttonItem133.SubItemsExpandWidth = 14; - this.buttonItem133.Text = "审核入库"; - this.buttonItem133.Click += new System.EventHandler(this.buttonItem133_Click_1); - // - // buttonItem132 - // - this.buttonItem132.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem132.Image"))); - this.buttonItem132.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem132.Name = "buttonItem132"; - this.buttonItem132.SubItemsExpandWidth = 14; - this.buttonItem132.Text = "已审核的图层"; - this.buttonItem132.Visible = false; - this.buttonItem132.Click += new System.EventHandler(this.buttonItem132_Click_1); - // - // ribbonBar13 - // - this.ribbonBar13.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar13.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar13.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar13.BackgroundStyle.Class = ""; - this.ribbonBar13.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar13.ContainerControlProcessDialogKey = true; - this.ribbonBar13.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar13.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItem127, - this.buttonItem128, - this.sliderItem1, - this.buttonItem134, - this.buttonItem130, - this.btn_check_history}); - this.ribbonBar13.Location = new System.Drawing.Point(3, 0); - this.ribbonBar13.Name = "ribbonBar13"; - this.ribbonBar13.Size = new System.Drawing.Size(505, 59); - this.ribbonBar13.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar13.TabIndex = 0; - // - // - // - this.ribbonBar13.TitleStyle.Class = ""; - this.ribbonBar13.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar13.TitleStyleMouseOver.Class = ""; - this.ribbonBar13.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar13.TitleVisible = false; - // - // buttonItem127 - // - this.buttonItem127.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem127.Image"))); - this.buttonItem127.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem127.Name = "buttonItem127"; - this.buttonItem127.SubItemsExpandWidth = 14; - this.buttonItem127.Text = "打开数据"; - this.buttonItem127.Click += new System.EventHandler(this.buttonItem127_Click_2); - // - // buttonItem128 - // - this.buttonItem128.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem128.Image"))); - this.buttonItem128.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem128.Name = "buttonItem128"; - this.buttonItem128.SubItemsExpandWidth = 14; - this.buttonItem128.Text = "一键审核"; - this.buttonItem128.Click += new System.EventHandler(this.buttonItem128_Click); - // - // sliderItem1 - // - this.sliderItem1.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; - this.sliderItem1.LabelWidth = 50; - this.sliderItem1.Name = "sliderItem1"; - this.sliderItem1.Text = "地面透明度"; - this.sliderItem1.TextColor = System.Drawing.Color.Black; - this.sliderItem1.Value = 0; - this.sliderItem1.ValueChanged += new System.EventHandler(this.sliderItem1_ValueChanged); - // - // buttonItem134 - // - this.buttonItem134.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem134.Image"))); - this.buttonItem134.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem134.Name = "buttonItem134"; - this.buttonItem134.SubItemsExpandWidth = 14; - this.buttonItem134.Text = "模拟设计修改"; - this.buttonItem134.Click += new System.EventHandler(this.buttonItem134_Click_1); - // - // buttonItem130 - // - this.buttonItem130.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem130.Image"))); - this.buttonItem130.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem130.Name = "buttonItem130"; - this.buttonItem130.SubItemsExpandWidth = 14; - this.buttonItem130.Text = "导出审核图"; - this.buttonItem130.Click += new System.EventHandler(this.buttonItem130_Click_1); - // - // btn_check_history - // - this.btn_check_history.Image = ((System.Drawing.Image)(resources.GetObject("btn_check_history.Image"))); - this.btn_check_history.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_check_history.Name = "btn_check_history"; - this.btn_check_history.SubItemsExpandWidth = 14; - this.btn_check_history.Text = "审核历史"; - this.btn_check_history.Click += new System.EventHandler(this.btn_check_history_Click); - // - // ribbonPanel5 - // - this.ribbonPanel5.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel5.Controls.Add(this.ribbonBar2); - this.ribbonPanel5.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel5.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel5.Name = "ribbonPanel5"; - this.ribbonPanel5.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel5.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel5.Style.Class = ""; - this.ribbonPanel5.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel5.StyleMouseDown.Class = ""; - this.ribbonPanel5.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel5.StyleMouseOver.Class = ""; - this.ribbonPanel5.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel5.TabIndex = 37; - this.ribbonPanel5.Visible = false; - // - // ribbonBar2 - // - this.ribbonBar2.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar2.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar2.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar2.BackgroundStyle.Class = ""; - this.ribbonBar2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar2.ContainerControlProcessDialogKey = true; - this.ribbonBar2.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar2.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItemHX1, - this.buttonItemHX2, - this.buttonItemDCTP, - this.sliderItem3}); - this.ribbonBar2.Location = new System.Drawing.Point(3, 0); - this.ribbonBar2.Name = "ribbonBar2"; - this.ribbonBar2.Size = new System.Drawing.Size(350, 59); - this.ribbonBar2.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar2.TabIndex = 0; - // - // - // - this.ribbonBar2.TitleStyle.Class = ""; - this.ribbonBar2.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar2.TitleStyleMouseOver.Class = ""; - this.ribbonBar2.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar2.TitleVisible = false; - // - // buttonItemHX1 - // - this.buttonItemHX1.AutoExpandOnClick = true; - this.buttonItemHX1.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX1.Image"))); - this.buttonItemHX1.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemHX1.Name = "buttonItemHX1"; - this.buttonItemHX1.SubItemsExpandWidth = 14; - this.buttonItemHX1.Text = "导入红线"; - this.buttonItemHX1.Click += new System.EventHandler(this.buttonItemHX1_Click); - // - // buttonItemHX2 - // - this.buttonItemHX2.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX2.Image"))); - this.buttonItemHX2.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemHX2.Name = "buttonItemHX2"; - this.buttonItemHX2.SubItemsExpandWidth = 14; - this.buttonItemHX2.Text = "红线审核"; - this.buttonItemHX2.Click += new System.EventHandler(this.buttonItemHX2_Click); - // - // buttonItemDCTP - // - this.buttonItemDCTP.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemDCTP.Image"))); - this.buttonItemDCTP.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemDCTP.Name = "buttonItemDCTP"; - this.buttonItemDCTP.SubItemsExpandWidth = 14; - this.buttonItemDCTP.Text = "导出图片"; - this.buttonItemDCTP.Click += new System.EventHandler(this.buttonItemDCTP_Click); - // - // sliderItem3 - // - this.sliderItem3.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; - this.sliderItem3.LabelWidth = 50; - this.sliderItem3.Name = "sliderItem3"; - this.sliderItem3.Text = "地面透明度"; - this.sliderItem3.TextColor = System.Drawing.Color.Black; - this.sliderItem3.Value = 0; - this.sliderItem3.ValueChanged += new System.EventHandler(this.sliderItem3_ValueChanged); - // - // ribbonPanel2 - // - this.ribbonPanel2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel2.Controls.Add(this.ribbonBar3); - this.ribbonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel2.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel2.Name = "ribbonPanel2"; - this.ribbonPanel2.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel2.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel2.Style.Class = ""; - this.ribbonPanel2.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel2.StyleMouseDown.Class = ""; - this.ribbonPanel2.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel2.StyleMouseOver.Class = ""; - this.ribbonPanel2.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel2.TabIndex = 39; - this.ribbonPanel2.Visible = false; - // - // ribbonBar3 - // - this.ribbonBar3.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar3.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar3.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar3.BackgroundStyle.Class = ""; - this.ribbonBar3.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar3.ContainerControlProcessDialogKey = true; - this.ribbonBar3.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar3.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.btn_user_info, - this.btn_role_info, - this.btn_resc_info, - this.btn_role_resc, - this.btn_user_role, - this.btn_password_edit, - this.buttonItemPasswordReset}); - this.ribbonBar3.Location = new System.Drawing.Point(3, 0); - this.ribbonBar3.Name = "ribbonBar3"; - this.ribbonBar3.Size = new System.Drawing.Size(551, 59); - this.ribbonBar3.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar3.TabIndex = 1; - // - // - // - this.ribbonBar3.TitleStyle.Class = ""; - this.ribbonBar3.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar3.TitleStyleMouseOver.Class = ""; - this.ribbonBar3.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar3.TitleVisible = false; - // - // btn_user_info - // - this.btn_user_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_info.Image"))); - this.btn_user_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_user_info.Name = "btn_user_info"; - this.btn_user_info.SubItemsExpandWidth = 14; - this.btn_user_info.Text = "用户管理"; - this.btn_user_info.Click += new System.EventHandler(this.btn_user_info_Click); - // - // btn_role_info - // - this.btn_role_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_info.Image"))); - this.btn_role_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_role_info.Name = "btn_role_info"; - this.btn_role_info.SubItemsExpandWidth = 14; - this.btn_role_info.Text = "角色管理"; - this.btn_role_info.Click += new System.EventHandler(this.btn_role_info_Click); - // - // btn_resc_info - // - this.btn_resc_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_resc_info.Image"))); - this.btn_resc_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_resc_info.Name = "btn_resc_info"; - this.btn_resc_info.SubItemsExpandWidth = 14; - this.btn_resc_info.Text = "资源管理"; - this.btn_resc_info.Visible = false; - this.btn_resc_info.Click += new System.EventHandler(this.btn_resc_info_Click); - // - // btn_role_resc - // - this.btn_role_resc.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_resc.Image"))); - this.btn_role_resc.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_role_resc.Name = "btn_role_resc"; - this.btn_role_resc.SubItemsExpandWidth = 14; - this.btn_role_resc.Text = "角色授权"; - this.btn_role_resc.Click += new System.EventHandler(this.btn_role_resc_Click); - // - // btn_user_role - // - this.btn_user_role.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_role.Image"))); - this.btn_user_role.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_user_role.Name = "btn_user_role"; - this.btn_user_role.SubItemsExpandWidth = 14; - this.btn_user_role.Text = "用户授权"; - this.btn_user_role.Click += new System.EventHandler(this.btn_user_role_Click); - // - // btn_password_edit - // - this.btn_password_edit.Image = ((System.Drawing.Image)(resources.GetObject("btn_password_edit.Image"))); - this.btn_password_edit.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_password_edit.Name = "btn_password_edit"; - this.btn_password_edit.SubItemsExpandWidth = 14; - this.btn_password_edit.Text = "密码修改"; - this.btn_password_edit.Click += new System.EventHandler(this.btn_password_edit_Click); - // - // buttonItemPasswordReset - // - this.buttonItemPasswordReset.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemPasswordReset.Image"))); - this.buttonItemPasswordReset.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemPasswordReset.Name = "buttonItemPasswordReset"; - this.buttonItemPasswordReset.SubItemsExpandWidth = 14; - this.buttonItemPasswordReset.Text = "重置密码"; - this.buttonItemPasswordReset.Click += new System.EventHandler(this.buttonItemPasswordReset_Click); - // // ribbonPanel15 // this.ribbonPanel15.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; @@ -2945,7 +2356,6 @@ this.ribbonPanel15.StyleMouseOver.Class = ""; this.ribbonPanel15.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; this.ribbonPanel15.TabIndex = 35; - this.ribbonPanel15.Visible = false; // // ribbonBar20 // @@ -4286,6 +3696,596 @@ this.buttonItemBZ11.Text = "标注管理"; this.buttonItemBZ11.Click += new System.EventHandler(this.buttonItemBZ11_Click); // + // ribbonPanel6 + // + this.ribbonPanel6.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel6.Controls.Add(this.ribbonBar6); + this.ribbonPanel6.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel6.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel6.Name = "ribbonPanel6"; + this.ribbonPanel6.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel6.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel6.Style.Class = ""; + this.ribbonPanel6.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel6.StyleMouseDown.Class = ""; + this.ribbonPanel6.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel6.StyleMouseOver.Class = ""; + this.ribbonPanel6.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel6.TabIndex = 38; + this.ribbonPanel6.Visible = false; + // + // ribbonBar6 + // + this.ribbonBar6.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar6.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar6.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar6.BackgroundStyle.Class = ""; + this.ribbonBar6.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar6.ContainerControlProcessDialogKey = true; + this.ribbonBar6.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar6.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItemSPSZ, + this.buttonItem8, + this.buttonItemLocation, + this.sliderItem2, + this.buttonItemGBJC}); + this.ribbonBar6.Location = new System.Drawing.Point(3, 0); + this.ribbonBar6.Name = "ribbonBar6"; + this.ribbonBar6.Size = new System.Drawing.Size(427, 59); + this.ribbonBar6.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar6.TabIndex = 0; + // + // + // + this.ribbonBar6.TitleStyle.Class = ""; + this.ribbonBar6.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar6.TitleStyleMouseOver.Class = ""; + this.ribbonBar6.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar6.TitleVisible = false; + // + // buttonItemSPSZ + // + this.buttonItemSPSZ.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemSPSZ.Image"))); + this.buttonItemSPSZ.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemSPSZ.Name = "buttonItemSPSZ"; + this.buttonItemSPSZ.SubItemsExpandWidth = 14; + this.buttonItemSPSZ.Text = "双屏设置"; + this.buttonItemSPSZ.Click += new System.EventHandler(this.buttonItemSPSZ_Click); + // + // buttonItem8 + // + this.buttonItem8.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem8.Image"))); + this.buttonItem8.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem8.Name = "buttonItem8"; + this.buttonItem8.SubItemsExpandWidth = 14; + this.buttonItem8.Text = "双屏分析"; + this.buttonItem8.Click += new System.EventHandler(this.buttonItem8_Click); + // + // buttonItemLocation + // + this.buttonItemLocation.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemLocation.Image"))); + this.buttonItemLocation.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemLocation.Name = "buttonItemLocation"; + this.buttonItemLocation.SubItemsExpandWidth = 14; + this.buttonItemLocation.Text = "快速定位"; + this.buttonItemLocation.Click += new System.EventHandler(this.buttonItemLocation_Click); + // + // sliderItem2 + // + this.sliderItem2.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; + this.sliderItem2.LabelWidth = 50; + this.sliderItem2.Name = "sliderItem2"; + this.sliderItem2.Text = "地面透明度"; + this.sliderItem2.TextColor = System.Drawing.Color.Black; + this.sliderItem2.Value = 0; + this.sliderItem2.ValueChanged += new System.EventHandler(this.sliderItem2_ValueChanged); + // + // buttonItemGBJC + // + this.buttonItemGBJC.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemGBJC.Image"))); + this.buttonItemGBJC.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemGBJC.Name = "buttonItemGBJC"; + this.buttonItemGBJC.SubItemsExpandWidth = 14; + this.buttonItemGBJC.Text = "国标检测"; + this.buttonItemGBJC.Click += new System.EventHandler(this.buttonItemGBJC_Click); + // + // ribbonPanel4 + // + this.ribbonPanel4.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel4.Controls.Add(this.ribbonBar1); + this.ribbonPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel4.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel4.Name = "ribbonPanel4"; + this.ribbonPanel4.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel4.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel4.Style.Class = ""; + this.ribbonPanel4.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel4.StyleMouseDown.Class = ""; + this.ribbonPanel4.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel4.StyleMouseOver.Class = ""; + this.ribbonPanel4.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel4.TabIndex = 36; + this.ribbonPanel4.Visible = false; + // + // ribbonBar1 + // + this.ribbonBar1.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar1.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar1.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar1.BackgroundStyle.Class = ""; + this.ribbonBar1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar1.ContainerControlProcessDialogKey = true; + this.ribbonBar1.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar1.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.btn_document_info}); + this.ribbonBar1.Location = new System.Drawing.Point(3, 0); + this.ribbonBar1.Name = "ribbonBar1"; + this.ribbonBar1.Size = new System.Drawing.Size(88, 59); + this.ribbonBar1.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar1.TabIndex = 0; + // + // + // + this.ribbonBar1.TitleStyle.Class = ""; + this.ribbonBar1.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar1.TitleStyleMouseOver.Class = ""; + this.ribbonBar1.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar1.TitleVisible = false; + // + // btn_document_info + // + this.btn_document_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_document_info.Image"))); + this.btn_document_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_document_info.Name = "btn_document_info"; + this.btn_document_info.SubItemsExpandWidth = 14; + this.btn_document_info.Text = "文档管理"; + this.btn_document_info.Click += new System.EventHandler(this.btn_document_info_Click); + // + // ribbonPanel12 + // + this.ribbonPanel12.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel12.Controls.Add(this.ribbonBar18); + this.ribbonPanel12.Controls.Add(this.ribbonBar13); + this.ribbonPanel12.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel12.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel12.Name = "ribbonPanel12"; + this.ribbonPanel12.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel12.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel12.Style.Class = ""; + this.ribbonPanel12.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel12.StyleMouseDown.Class = ""; + this.ribbonPanel12.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel12.StyleMouseOver.Class = ""; + this.ribbonPanel12.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel12.TabIndex = 34; + this.ribbonPanel12.Visible = false; + // + // ribbonBar18 + // + this.ribbonBar18.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar18.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar18.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar18.BackgroundStyle.Class = ""; + this.ribbonBar18.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar18.ContainerControlProcessDialogKey = true; + this.ribbonBar18.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar18.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItem133, + this.buttonItem132}); + this.ribbonBar18.Location = new System.Drawing.Point(508, 0); + this.ribbonBar18.Name = "ribbonBar18"; + this.ribbonBar18.Size = new System.Drawing.Size(171, 59); + this.ribbonBar18.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar18.TabIndex = 1; + // + // + // + this.ribbonBar18.TitleStyle.Class = ""; + this.ribbonBar18.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar18.TitleStyleMouseOver.Class = ""; + this.ribbonBar18.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar18.TitleVisible = false; + // + // buttonItem133 + // + this.buttonItem133.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem133.Image"))); + this.buttonItem133.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem133.Name = "buttonItem133"; + this.buttonItem133.SubItemsExpandWidth = 14; + this.buttonItem133.Text = "审核入库"; + this.buttonItem133.Click += new System.EventHandler(this.buttonItem133_Click_1); + // + // buttonItem132 + // + this.buttonItem132.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem132.Image"))); + this.buttonItem132.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem132.Name = "buttonItem132"; + this.buttonItem132.SubItemsExpandWidth = 14; + this.buttonItem132.Text = "已审核的图层"; + this.buttonItem132.Visible = false; + this.buttonItem132.Click += new System.EventHandler(this.buttonItem132_Click_1); + // + // ribbonBar13 + // + this.ribbonBar13.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar13.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar13.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar13.BackgroundStyle.Class = ""; + this.ribbonBar13.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar13.ContainerControlProcessDialogKey = true; + this.ribbonBar13.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar13.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItem127, + this.buttonItem128, + this.sliderItem1, + this.buttonItem134, + this.buttonItem130, + this.btn_check_history}); + this.ribbonBar13.Location = new System.Drawing.Point(3, 0); + this.ribbonBar13.Name = "ribbonBar13"; + this.ribbonBar13.Size = new System.Drawing.Size(505, 59); + this.ribbonBar13.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar13.TabIndex = 0; + // + // + // + this.ribbonBar13.TitleStyle.Class = ""; + this.ribbonBar13.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar13.TitleStyleMouseOver.Class = ""; + this.ribbonBar13.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar13.TitleVisible = false; + // + // buttonItem127 + // + this.buttonItem127.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem127.Image"))); + this.buttonItem127.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem127.Name = "buttonItem127"; + this.buttonItem127.SubItemsExpandWidth = 14; + this.buttonItem127.Text = "打开数据"; + this.buttonItem127.Click += new System.EventHandler(this.buttonItem127_Click_2); + // + // buttonItem128 + // + this.buttonItem128.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem128.Image"))); + this.buttonItem128.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem128.Name = "buttonItem128"; + this.buttonItem128.SubItemsExpandWidth = 14; + this.buttonItem128.Text = "一键审核"; + this.buttonItem128.Click += new System.EventHandler(this.buttonItem128_Click); + // + // sliderItem1 + // + this.sliderItem1.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; + this.sliderItem1.LabelWidth = 50; + this.sliderItem1.Name = "sliderItem1"; + this.sliderItem1.Text = "地面透明度"; + this.sliderItem1.TextColor = System.Drawing.Color.Black; + this.sliderItem1.Value = 0; + this.sliderItem1.ValueChanged += new System.EventHandler(this.sliderItem1_ValueChanged); + // + // buttonItem134 + // + this.buttonItem134.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem134.Image"))); + this.buttonItem134.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem134.Name = "buttonItem134"; + this.buttonItem134.SubItemsExpandWidth = 14; + this.buttonItem134.Text = "模拟设计修改"; + this.buttonItem134.Click += new System.EventHandler(this.buttonItem134_Click_1); + // + // buttonItem130 + // + this.buttonItem130.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem130.Image"))); + this.buttonItem130.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem130.Name = "buttonItem130"; + this.buttonItem130.SubItemsExpandWidth = 14; + this.buttonItem130.Text = "导出审核图"; + this.buttonItem130.Click += new System.EventHandler(this.buttonItem130_Click_1); + // + // btn_check_history + // + this.btn_check_history.Image = ((System.Drawing.Image)(resources.GetObject("btn_check_history.Image"))); + this.btn_check_history.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_check_history.Name = "btn_check_history"; + this.btn_check_history.SubItemsExpandWidth = 14; + this.btn_check_history.Text = "审核历史"; + this.btn_check_history.Click += new System.EventHandler(this.btn_check_history_Click); + // + // ribbonPanel5 + // + this.ribbonPanel5.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel5.Controls.Add(this.ribbonBar2); + this.ribbonPanel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel5.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel5.Name = "ribbonPanel5"; + this.ribbonPanel5.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel5.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel5.Style.Class = ""; + this.ribbonPanel5.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel5.StyleMouseDown.Class = ""; + this.ribbonPanel5.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel5.StyleMouseOver.Class = ""; + this.ribbonPanel5.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel5.TabIndex = 37; + this.ribbonPanel5.Visible = false; + // + // ribbonBar2 + // + this.ribbonBar2.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar2.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar2.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar2.BackgroundStyle.Class = ""; + this.ribbonBar2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar2.ContainerControlProcessDialogKey = true; + this.ribbonBar2.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar2.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItemHX1, + this.buttonItemHX2, + this.buttonItemDCTP, + this.sliderItem3}); + this.ribbonBar2.Location = new System.Drawing.Point(3, 0); + this.ribbonBar2.Name = "ribbonBar2"; + this.ribbonBar2.Size = new System.Drawing.Size(350, 59); + this.ribbonBar2.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar2.TabIndex = 0; + // + // + // + this.ribbonBar2.TitleStyle.Class = ""; + this.ribbonBar2.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar2.TitleStyleMouseOver.Class = ""; + this.ribbonBar2.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar2.TitleVisible = false; + // + // buttonItemHX1 + // + this.buttonItemHX1.AutoExpandOnClick = true; + this.buttonItemHX1.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX1.Image"))); + this.buttonItemHX1.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemHX1.Name = "buttonItemHX1"; + this.buttonItemHX1.SubItemsExpandWidth = 14; + this.buttonItemHX1.Text = "导入红线"; + this.buttonItemHX1.Click += new System.EventHandler(this.buttonItemHX1_Click); + // + // buttonItemHX2 + // + this.buttonItemHX2.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX2.Image"))); + this.buttonItemHX2.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemHX2.Name = "buttonItemHX2"; + this.buttonItemHX2.SubItemsExpandWidth = 14; + this.buttonItemHX2.Text = "红线审核"; + this.buttonItemHX2.Click += new System.EventHandler(this.buttonItemHX2_Click); + // + // buttonItemDCTP + // + this.buttonItemDCTP.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemDCTP.Image"))); + this.buttonItemDCTP.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemDCTP.Name = "buttonItemDCTP"; + this.buttonItemDCTP.SubItemsExpandWidth = 14; + this.buttonItemDCTP.Text = "导出图片"; + this.buttonItemDCTP.Click += new System.EventHandler(this.buttonItemDCTP_Click); + // + // sliderItem3 + // + this.sliderItem3.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; + this.sliderItem3.LabelWidth = 50; + this.sliderItem3.Name = "sliderItem3"; + this.sliderItem3.Text = "地面透明度"; + this.sliderItem3.TextColor = System.Drawing.Color.Black; + this.sliderItem3.Value = 0; + this.sliderItem3.ValueChanged += new System.EventHandler(this.sliderItem3_ValueChanged); + // + // ribbonPanel2 + // + this.ribbonPanel2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel2.Controls.Add(this.ribbonBar3); + this.ribbonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel2.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel2.Name = "ribbonPanel2"; + this.ribbonPanel2.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel2.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel2.Style.Class = ""; + this.ribbonPanel2.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel2.StyleMouseDown.Class = ""; + this.ribbonPanel2.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel2.StyleMouseOver.Class = ""; + this.ribbonPanel2.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel2.TabIndex = 39; + this.ribbonPanel2.Visible = false; + // + // ribbonBar3 + // + this.ribbonBar3.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar3.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar3.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar3.BackgroundStyle.Class = ""; + this.ribbonBar3.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar3.ContainerControlProcessDialogKey = true; + this.ribbonBar3.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar3.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.btn_user_info, + this.btn_role_info, + this.btn_resc_info, + this.btn_role_resc, + this.btn_user_role, + this.btn_password_edit, + this.buttonItemPasswordReset}); + this.ribbonBar3.Location = new System.Drawing.Point(3, 0); + this.ribbonBar3.Name = "ribbonBar3"; + this.ribbonBar3.Size = new System.Drawing.Size(551, 59); + this.ribbonBar3.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar3.TabIndex = 1; + // + // + // + this.ribbonBar3.TitleStyle.Class = ""; + this.ribbonBar3.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar3.TitleStyleMouseOver.Class = ""; + this.ribbonBar3.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar3.TitleVisible = false; + // + // btn_user_info + // + this.btn_user_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_info.Image"))); + this.btn_user_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_user_info.Name = "btn_user_info"; + this.btn_user_info.SubItemsExpandWidth = 14; + this.btn_user_info.Text = "用户管理"; + this.btn_user_info.Click += new System.EventHandler(this.btn_user_info_Click); + // + // btn_role_info + // + this.btn_role_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_info.Image"))); + this.btn_role_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_role_info.Name = "btn_role_info"; + this.btn_role_info.SubItemsExpandWidth = 14; + this.btn_role_info.Text = "角色管理"; + this.btn_role_info.Click += new System.EventHandler(this.btn_role_info_Click); + // + // btn_resc_info + // + this.btn_resc_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_resc_info.Image"))); + this.btn_resc_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_resc_info.Name = "btn_resc_info"; + this.btn_resc_info.SubItemsExpandWidth = 14; + this.btn_resc_info.Text = "资源管理"; + this.btn_resc_info.Visible = false; + this.btn_resc_info.Click += new System.EventHandler(this.btn_resc_info_Click); + // + // btn_role_resc + // + this.btn_role_resc.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_resc.Image"))); + this.btn_role_resc.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_role_resc.Name = "btn_role_resc"; + this.btn_role_resc.SubItemsExpandWidth = 14; + this.btn_role_resc.Text = "角色授权"; + this.btn_role_resc.Click += new System.EventHandler(this.btn_role_resc_Click); + // + // btn_user_role + // + this.btn_user_role.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_role.Image"))); + this.btn_user_role.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_user_role.Name = "btn_user_role"; + this.btn_user_role.SubItemsExpandWidth = 14; + this.btn_user_role.Text = "用户授权"; + this.btn_user_role.Click += new System.EventHandler(this.btn_user_role_Click); + // + // btn_password_edit + // + this.btn_password_edit.Image = ((System.Drawing.Image)(resources.GetObject("btn_password_edit.Image"))); + this.btn_password_edit.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_password_edit.Name = "btn_password_edit"; + this.btn_password_edit.SubItemsExpandWidth = 14; + this.btn_password_edit.Text = "密码修改"; + this.btn_password_edit.Click += new System.EventHandler(this.btn_password_edit_Click); + // + // buttonItemPasswordReset + // + this.buttonItemPasswordReset.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemPasswordReset.Image"))); + this.buttonItemPasswordReset.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemPasswordReset.Name = "buttonItemPasswordReset"; + this.buttonItemPasswordReset.SubItemsExpandWidth = 14; + this.buttonItemPasswordReset.Text = "重置密码"; + this.buttonItemPasswordReset.Click += new System.EventHandler(this.buttonItemPasswordReset_Click); + // // ribbonPanel1 // this.ribbonPanel1.AutoSize = true; @@ -4465,7 +4465,6 @@ // ribbonTabItem9 // this.ribbonTabItem9.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.ImageAndText; - this.ribbonTabItem9.Checked = true; this.ribbonTabItem9.HoverImage = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem9.HoverImage"))); this.ribbonTabItem9.Image = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem9.Image"))); this.ribbonTabItem9.Name = "ribbonTabItem9"; @@ -4486,6 +4485,7 @@ // ribbonTabItem14 // this.ribbonTabItem14.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.ImageAndText; + this.ribbonTabItem14.Checked = true; this.ribbonTabItem14.HoverImage = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem14.HoverImage"))); this.ribbonTabItem14.Image = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem14.Image"))); this.ribbonTabItem14.Name = "ribbonTabItem14"; @@ -5480,7 +5480,7 @@ this.dataGridViewX2.ReadOnly = true; this.dataGridViewX2.RowHeadersVisible = false; this.dataGridViewX2.RowTemplate.Height = 23; - this.dataGridViewX2.Size = new System.Drawing.Size(23359, 92); + this.dataGridViewX2.Size = new System.Drawing.Size(23953, 92); this.dataGridViewX2.TabIndex = 11; // // dataGridViewTextBoxColumn10 @@ -5574,7 +5574,7 @@ this.dataGridViewX3.ReadOnly = true; this.dataGridViewX3.RowHeadersVisible = false; this.dataGridViewX3.RowTemplate.Height = 23; - this.dataGridViewX3.Size = new System.Drawing.Size(23358, 127); + this.dataGridViewX3.Size = new System.Drawing.Size(23952, 127); this.dataGridViewX3.TabIndex = 5; this.dataGridViewX3.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.dataGridViewX3_MouseDoubleClick); // @@ -5832,7 +5832,7 @@ this.dataGridViewX8.ReadOnly = true; this.dataGridViewX8.RowHeadersVisible = false; this.dataGridViewX8.RowTemplate.Height = 23; - this.dataGridViewX8.Size = new System.Drawing.Size(133, 92); + this.dataGridViewX8.Size = new System.Drawing.Size(99, 92); this.dataGridViewX8.TabIndex = 11; // // dataGridViewTextBoxColumn12 @@ -5927,7 +5927,7 @@ this.dataGridViewX9.ReadOnly = true; this.dataGridViewX9.RowHeadersVisible = false; this.dataGridViewX9.RowTemplate.Height = 23; - this.dataGridViewX9.Size = new System.Drawing.Size(132, 127); + this.dataGridViewX9.Size = new System.Drawing.Size(98, 127); this.dataGridViewX9.TabIndex = 5; this.dataGridViewX9.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.dataGridViewX9_MouseDoubleClick); // @@ -6791,12 +6791,12 @@ this.contextMenuStripDeleteLayerNode.ResumeLayout(false); this.ribbonControl1.ResumeLayout(false); this.ribbonControl1.PerformLayout(); + this.ribbonPanel15.ResumeLayout(false); this.ribbonPanel6.ResumeLayout(false); this.ribbonPanel4.ResumeLayout(false); this.ribbonPanel12.ResumeLayout(false); this.ribbonPanel5.ResumeLayout(false); this.ribbonPanel2.ResumeLayout(false); - this.ribbonPanel15.ResumeLayout(false); this.ribbonPanel1.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.panelOfTable.ResumeLayout(false); diff --git a/MainFrm.resx b/MainFrm.resx index b408d34..6b9ae78 100644 --- a/MainFrm.resx +++ b/MainFrm.resx @@ -351,804 +351,6 @@ 766, 54 - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlDMzFEOUI4NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 - NEI4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlDMzFEOUI3NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 - NEI4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDk5Mzk2NTZBRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz73sIMwAAADIElEQVRIS7WVa0iTYRTH56Uiysvm3TkvpLl5DRIvQYWVWl+6 - iNEVg0yhQqloQZHkLT+Y0YdAs75IpEUhzERZoZhsRpZlS7soblotsRwoxhqWeTrnYZtv+u7NsB74cZ5z - zv89/z17HzYRAPxXeIv/EpFXcOyi4BvKhfehv4FvKBfeh+ayqIUDlIgBgT8whpRYoT2fhgvNVJKBQT9s - hB8/QZDPpnEIjEhg0J5Pw4Vm0mwygG9T06BSqQQhTUhUMoRGpyxYT7OZwfhXC6jVakFIYzNYqN5uMGKa - BI1GIwhpghXJaJJi13d0dEB2bj74hsWzSDlXbzfQG02g0+kEIU2wIomdovzKdVifngnFFytBeb4cLN+n - WaSc6hfKKqB/eHTWoHfwExgMBkFII5MnQUD4WlAWloO26wVs35MDmifPmQFFyqlO/aKKqlmDp31DYDKZ - BCGNTJ4IPqHx8LJvACbNUw7p6e2HuJQMNIhhBuaHj3vBYrEI0tb1BoIiE9kJ9h7Oh7EJM+g/jEJuwVlY - s24ri5RTnfo5BedAIoueIYPumvomuHzjzm9cq2uCq7UNUH2rEarr7kNd0yP26Y+eKoSWtk4wfpmAg7kn - ITY5DUorq1g8cOQEqze3aplOEhRtJoMcL1mMTixV9IgD5a/tSBVDYql8AKOBQLEJtTP08gY/jjFiktKg - 5FIV21Ok3NazvmR2AvrFkCAJyGYk1comZAuHDM/AyLvHThfBveZ26NOPwI59eey7LsbhFCmnOvVJ5+Ef - rrYZLEU8EZ85+HLwW7ZCLMVTFWdkHoLut+/hgbYHaE9XN31XNsupTrWV3jKVs+uS3cyAD0cLe331jW3Q - qRt0CPUlQVHDKI+fN9iGo4W90uNnyuA2vvRtWTlQgxeg/dk7FimnOvU9/CNqUe47b7ANRwt7AfjpKvAK - Gt18Qur35ymhRfsKKLr5hN7EyzDq7humWrrcfSfKxbz/QlwcLDck1snZJdUzYHUDmk57+K1qdXJyzsL6 - RmQD9ZmObygXB8sVIRO6fXQB4hC6eRQppzr1XXmHclnAckFomLc1Um5dItEvhZ97MQXP9N0AAAAASUVO - RK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhDMTdBQjRENEFBRTExRTQ4QjQyODY0MDNBNTJE - NzNCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhDMTdBQjRDNEFBRTExRTQ4QjQyODY0MDNBNTJE - NzNCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NUQyMjc4QTlBQjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4eHsDfAAAB00lEQVRIS7XVWytEURQH8HniTTNHLs0NCXNcXjTN5dH9g/gM - 3jx590QhFDJS0gyTGmpqaqJIMW4hzlAoOaWISS7LWifntI3ddnTGrl92e/57/We/DBsA/CvuYSHZSr0t - lvCGsriX/oI3lMW9lM/SwgF9SEHwizs08IX2vAyLZvZRgXJ+cQWv7yB0q96Ds86voT0vw6KZNJsK4Pnl - DWKxmBBlqhpDUN0UNp2n2VrB/WMOEomEEGX0ArN5o+BGfYB0Oi1EGa8cwpKw6bxRcH6lQiaTEaKMVw5q - rzCbNwr2z65BURQhynh8Qe0VZvNGwdZBFlRVFaKMxxfQXmE2rxc8rW3sQy6XE0puHoG7IaC9YnV9j5th - pbZPqOCDCrbH5uIwOD7/zWgkDkNTizAyuwQjkWWIxFNQWduqmVxI/MiPz6/A8HTUuDMTTYLkbrqhgt5S - T3PG4ZJ3HE7focElZx0u3yn+VQiG1ZLymmm7s74f88f42S6bl9zyJZ6d6Xckd+Mt5ieogH4xJORHHajt - SzvqZPSgECpHZSiA2DztuxBlad+NgnpBEbIjusiiYboKRF+kGFHegUR5ImkFv7G0eAPzWVq8gfksLd5/ - oULiHhYS97BwwPYJlSCUgVubViQAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJEMDQyOEZBNEFEMjExRTRBN0MxRDBCNzJGRUND - MDEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJEMDQyOEY5NEFEMjExRTRBN0MxRDBCNzJGRUND - MDEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkRDRkI1RDVEMTRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz59jfe3AAAEbUlEQVRIS8WTeUybZRzHF48/pnFOuQRajkFLgQFb5iRLNJr4 - l/EPgsniUI4xZDAY1zyxwApsMJyIME61rByl3DfoYGBrgbWUY06FcZSCha4rQ8jYxkqPr2/fvkv8o2Sg - S/wkT970eb6/T5/39z7Prv8dt/Oql4mR4HZJ3ccoXFxhVCzB9DT9JueJdSq6c1wzVZFupepVzxu34XVj - CaEDi1jX6hF8ZQoeokl4iBVwzV9YdU1XRlIl28eVo8phCdXwGltEeOUsro6psaHVwcSDh5volc4iOO8X - 7KuVwb1hEi7J8myq9PEQO//I85oafr0KtEpUpNSETm+AwWDAvfv3YTQaybnm/t/AyO6Ga+UonJOnIijF - 1hA9tWI2qle9RxcI+RIpmZpTIfBULhIyyqHVahHPKcN70TmYnFFCp9OhqXcc9KwW0DOHVl3YU1aUyjJu - F1SpfhO3EM6bMMsVt+D8Zhz2HIpC4oU6bG5uIu4cD3tfTwAjIBNypQYbGxsISquBU34PaDHiVEplGXee - SuIjVaBv3Lz7gJg8vHg4FlZvc+ATVoLipiHsD8qCXWAO7IPK8MG5FjLXKboOeoYADkldUkplGWb7vOb4 - 4BzxIXXQE/1m59WDXdgBvxPfwz6UC4eQUth/WIBDZ2qQXj+K7IYRImeE5s5fOFrcDPvPapcJzVNmmwVY - VxWG9U09uau1tTVymPpc0iYFLew7OEUJ4BwtALfvJpl5xMrKCu6s3cUrn5YbCM1us80CrJZZVWjXr7j3 - 4CE0y8v4IrcaH+cK4Bv+DRyPl8ApphYuia3wZ3eCUzOA1PIfcVuzjHnlIgK/vgy7mHzTG+w12yzA5E53 - edYPo1c2i/X1dQTEfwvbwDQ4hhXg8OcN4P48Df+UTrgkNIAeW4Hg3Hbo9Xq0iGSgs4ls5CUhoXnObLOA - S8pkhG/bdZzgDZJnffT3GXieLAA9XgB2/RjZjuQqMWhxfBw824H55XWyhcfy+HDNqoB1SH4Codn6G7iw - p3d78EaVPlXX0CaZgkqlgly1gpCiK0htHCH/IL6oFcEF3ZjT3CUvXqv0DzDSS0FPq1a/8EbYS5Rqa+if - SAJ8KoeNR7gitEsnoVQqSbGOkJmYX1ggxaY70SabwIGMUrjn8I3WIXnBRPnWu/8nDnE9Sd7cAaP/ZSES - 6/rRKJRArpiHXC7HzekZNIukiCyrhW9mGZgXa4w2kUVnibJnzdXbxP5URzyDO4QjxGl5i9uNpMZeKP5U - IrywAq9yCnGAOGGMonbYxpVnEPGdyR9BO/MTj8kfgXeNFPt5IngVtoF1kQ9WcTs8qgfgmNreQMS21xZL - 0E6Ln6ef75tg8sfgXT8O77oReAkkYNXJ4PRV/4ztyfo9VPTf4xjdf9CpQKzdxxuGe6UMbhXEmc8V6mze - r3qNivx3HGN7UmglQ6CVDMIxXwybo5UcaunJQD8te9rhyx4JrWwItlGNUut3y5+hlp4cDhFCpl14k9jq - nR+Y1NTjIe7NlmMnWKoHsOtvjWYcKpheqFQAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERTg4QTFENEQyMjExRTRBODEyODk0M0RBMTc5 - Qjg3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERTg4QTFDNEQyMjExRTRBODEyODk0M0RBMTc5 - Qjg3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjJGOUEyRDEyMTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6wJF34AAACl0lEQVRIS62Vy08TURSH73/QhQtXVnBhxEcMiUkhbEg0hB1R - Q1i68C8wIW5cEqMLN7ho2Ji4YiEhWq0prYUhfULbadN3obTaChobtZEUsFY9nnPS6WM6HYowyZf87j33 - nG/amaai9geOBYA+4pTxihmBE8DcTQB4J8em/9IwSQyagmrtL+z9rMFmvnhkKvtV7tcVHPz6DVsftulA - AckdhUg8zf19eoLKAd597iMLMItewfOxUDTN/bqCH3tVSG8VWIBZ9AoJApEk9+sKvu/uQ2IjzwJkGtH8 - OrTwy3Hu77vIAnV9mgWlcgWiqRwLjAMmkOMbPbNTKnN/JJntqJGEBZ++7oKcyLLgLN4JrU8Cms2C4pcy - BKKZumCI18temQ/8DzSLZlBmQX7nG/jCKdpgAa0driCtY5iFHuqHSjNoFtaags1iCdzBBG+QgNY2aZ0F - mIUe6osENAtrTUEq/7kDq9PHAszU5yYoq9f1i9cUSCD5ozxDEeTsrhAoONwyxLLb8MrhYQFmZYCHsnpd - v3hNgQROb5hnKIK29944MAThTBEWbS4WYBZ6qC/sKSy5ZJ6BGUQg8b4Bbhjod4AZXlhXWdBa10LrIVul - AM9ggS+aa6AIMMO8ZYUO0KeyIOMtZyaQpXpNi4LFucYzMINwhbMNcMNw5oIJMMNKIA0LNg88mZuH/ssj - dPgBMnN+cBRmny1wrRtSMMMzWCCFMg0UAeY2Fh0+GL5xG8Zu3oHXUrCj3g0WONdTbeBm21/o1N17gPtg - 98Xh3VoS3qzKMDI22agfglnY/Uld8NDc/ZlZwAwvl4Ngun6LGh8rdfVDViNs3rguOOzq6XOD8PDpc7g2 - OkHDH7XWtYa2It66Y4eCQ8cRfpvUNa2hTUD8A6JMaBvCyTdJAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERjY3MEZENEQyMzExRTRCNDlGQUMwMzk0OTAw - Qzc4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERjY3MEZDNEQyMzExRTRCNDlGQUMwMzk0OTAw - Qzc4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjhGOUEyRDEyMTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6GKmpFAAAC+UlEQVRIS63T20vTYRzH8Yforj/Ei24UiSgKIygKi8oyxZQo - cvNYeXaesmzqPGu2POd0ulSsnIdaurTSTJ3O6UxTPGya5vCQx5AuPn39RbHop7nZxQt+z3ie93e/Z4w1 - p7nsCoBt8R6yBF/UHPv+Wb0rfFFzm99CRIwEW1gnqXzxTXxRc0ydctm4OlID2sxrw6iCtiwItC+A2P/D - frLnjwGNSZdMq6N1WOvLwFpP4l/WdRlY6Jaio9Ab7QXba8sVoDHZGdT8PYS9THDqMGnLsKpNw0qXGCua - BO55VZdNQ6U/DRRibVCGb+N1pH5bukoRqHmDHOIG1N8/X2F4I8WyNhtf2+9hqSsZxqZ4upbb6HsSZLHO - Im90ym6hNVcIaktYTexZyUelGEvaHMy/jcFiZxo0xX5Y7ivGcn8JkVmA9uvlWBmqwpJeAWovs+poR99O - eRgWtQWYVUdgrj0FH+i+F3XF3NoappZYGJrEoLaOVYpOOTY/FGJB+xjTqnDMtMTTAC/Ma/Ix/TLUKl9e - x0JfFQpql7PykBP7lWIXzPeUYLIhHCPKCLr/AMy2ZsKoDLTKdNNdvM8TgNpRTBZwfJ885CTmaIChPhwa - mS+GnkdhqjEWY9X+VplqvIMXEhdQ24mZeuSs0N/BNNWWj4k6EdSZHhhXxWH0aSCGFd4c4Tk7zk7XBlUM - FKLToK4Nm+0qYnneRzqGGiSYaIiiyZdhVCdgqFSIwRJPjucZW85O1pvnRmvDkO9zFNTdy2Y6HjGp4HCF - 5kk4xhoiURd/EROv4tBfeM0qAyUC9Mp9QM0+7o829T6LZV0/mNycS6+nFKFWfAGj9ZHozfGwil7miZYH - 7qCmghsw+S6VpV894KuUuKFbfhNNqa749CwY3dm0toK+VABl3HlQM5obYHybwFLc7W1y/Y5BlX6FfgNn - DNcEY0DhZZX+MiGKbh0DNR24AYYWMSfJzc6GZBApwS5skIzNODcg0dV2V36FtsJ7yBJ8UXO8hyzBFzXH - ++H/A/YDv9/V87iOlrYAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 - RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL - ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH - s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW - uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx - xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd - iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ - qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW - GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE - NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n - KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw - qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI - HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq - wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q - 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA3MTZBNTkzNEEwMjExRTRBQjdERDhBQkEzMDEx - MzZEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA3MTZBNTkyNEEwMjExRTRBQjdERDhBQkEzMDEx - MzZEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTgxNjM4Q0YwMTRBRTQxMTk2M0JC - NEQ0MzNCOUIxQzgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - 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 - 0HWhD93n++Dbua+fK9NvoTM5+Udx5mye9NjgCZNf0HEnpN5U5RbPa9+0bdfQ+0eOPzp5ppvG96JfjFkM - nXR/vOP0ePOu/deyCuf8JVSorJny7HQdvR9MTCUm+fUYgyehazLBVCCd8ttpJbQANtO3cDjWbO9werzd - ruK5F9Ld3p7YBEdHCE/WMi0s0jf5mefm0e+ZCsXEf85i/98XsP4NaTpxka74X+IAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJBREU3RDk2NEFCMDExRTQ4OUM5QjZFOENGQzJF - MDk1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJBREU3RDk1NEFCMDExRTQ4OUM5QjZFOENGQzJF - MDk1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MEM5Mzk2NTZBRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz52g1XsAAADeUlEQVRIS62Va0hTYRiAXzVNoQs6oUCttJu3aqatrLxr2k0n - W6bLLlLSxTKCKLoQQUg3IbLMflSgBRGRP7JSSzGnWalYdpnV1MQu1tBWWklqvr3fp2dsOytSfOFh3/l2 - eJ7tnDMGkkmzGCqigsARhPlUQqCi8nEd9v7GEYP5mFcI4K/e/hGHeQ2B7p4+1HV8Nf6Kw4a5GGxtCHzv - 7sU2nR4lbr4/AUBFKIeD4GKYBL79+IX6rm622U8nSgnX4SC4GCaBL50/OXwTwIUY1ohcQkCn/84ZDLBP - I5p16TBl7XYIoaXVwI54RC4h8LG9k/OvQPIOmEZUJW2F+XRoPbBrOiKXEGj9rOdYCqi2gxXhnLQNIo6f - n9tEa7ViI79PoojIJQSaP3RwjAOJaSAjjhL3N+9zrD+W499UVJnSeeVmWDvtlcWlgCedZnK5RC4h8KZV - x2FryQSYmrAVjh/MnP46/57yS7VmZ9+zxr1Yr92NtQ1pWFmfiBevL9QpUqE0JhHcyWuImLsMAU1zG4et - V6yHC1l5oe+evNmD1ZoteL9OgaW1K7GkRoF3H8ZigTocb5bFY8bZWbpoFVwh7yiCR8xdhsAz7XuOh9QD - D2R6twyIEzG/JApz88N7z+T5d+VcDezKL43Ea4UxeCjTqyNUDpUBYeBFXjvjgOAyCdS9asXDJ3NQFj3u - 7eWCyG/FjxR45OyMr6s3S1qCYqE8RA654Uq4dOiUV/v+E9P0i1ZA9Zwg8COnA2HyDZiLYRw4dyAjC50n - z8awBBvNbbWyZ+8x10+By+GONARCbe1gDBPJloCvfKODluQ10mD+qDK5LWFyD6pfvOUYBzydXL0v2I+V - rI9Mhud5BQE9i+RQPt2P30BBYrM4HmYSNf5REGS0b5CzYdKq+iaOITA44wmPiLXwaFfGhDbZMkinYxNJ - 8CpwXxgHobQcPbhv8XegrtNyzAPsOtqHJUPeml1jm/1jYDkdM5G5hB3bDL6KhknLal9xzAN8gpMgVZHm - oKUAuwx29H420c9O/l9KHms4bC0KLFCAY6CSHr+VoHJy88lWbEjHoqoXWPzw5ZCxGKCxkslBLo22L1+6 - ahPeUj/FwgfPh8zpSzfQ0cWrwVKAjfXcWFjjPm9isWSSbx/7JEPF0cWzcYzE7dTfAmysfSLB2z0Awm1H - 8ycnjrD4N/kX4gEg8A9sAFSe4VuPvgAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkEzN0Y5NjgxNEE5MDExRTRBMzU1RUM1MkVEQTU3 - REQxIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkEzN0Y5NjgwNEE5MDExRTRBMzU1RUM1MkVEQTU3 - REQxIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MUU1QUVCQUI4RjRBRTQxMUI2QTlC - RjEwMkVGQzEyNEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4Oz1B+AAABO0lEQVRIS7WUP0sDQRDFt0snIcEiklhGJLH3k6bNp0ifYCUo - KWwMIRCx0EYxEEL+IOPO4SxzczN7d7gGfuzd7Hszd9nHOQD4V9RiStRiStQi0b68GXkgwkjzcdQigU1O - 32CC+9IjUYsENvjY7EySDHhev5skGXA3X5r8aYA3lx0wET1otYgmNMcOku+jXtMg4QJFJMb1a7uPmjUd - rVzHDfDy9pmJaZViCe5rPq7hYpgvXjPw2hNtTqBOevk+F8L0YRGQQosyHxfSf0jUegPLZwkrNedYfi6o - 9Y2RWP6cACPHYnf4XauQablfHYAxo6jt9sfwRGWgVvrVASKmdd7g2OoN4P5pVYhqbgCPmnPuzHPtua1C - s9OHyeyxEFU+IJcCb2p4zj3dKjQvrsat3jD4CwNCIcEv14/fpAfcDwXsled4Tu6+AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlGMEQ1RDBCNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 - MzBCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlGMEQ1RDBBNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 - MzBCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzFDMDRERTRENjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6zemTaAAABh0lEQVRIS7WUvUoDQRSFEwiBKPEHsRAkb+ArWIsv4CNYCSKI - jRD8a1S0m9QhdTobG5uARZogBJSkiLASFJJChQiRcJ2z2bnMZtbxCnrhY3YO556z1aSI6F9JFP+SRBEs - FFaUhoSopAyQKGIBi58jEuErcQSAhY/hyP5DL8Y7mQMcAcD8Phh+u2Tzk9cRAMz914G4wOd1BABzt/cm - LvB5HQHA3On2xQU+ryMAmB8en8UFPq8jAJjvWk/iAp/XEQDM9WZHXODzOgKAudZoiwt8XkcAMN/U78Ml - CcY7mQMcAWhz+FRc3zZFREXypwKYEiG/e+ykc1WYVRrCGUk8nGUHsyic6nKeetUK4dTESjjLDjZUlqaV - hiS8lEsh0Z1LTFYs2FBazFFwcUzB+YE+T8bffD+i4LRIwSV0jdZaO5vhHXtRPmfFgg1n81mlIQnt/W1q - bKyH34dz2XKUz1mxYBaFU5zJUG1tlXDu5TMcjuEsO5hF4exOpZWGtnLpWDiGs+xgFv9gxlmU+gIVyyIX - YCSg/AAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - 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 - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVGNUQ0RjNENEQyRDExRTRBQ0ZFOEVGNkU4Rjcw - RkEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVGNUQ0RjNDNEQyRDExRTRBQ0ZFOEVGNkU4Rjcw - RkEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzUxNUY0MjEyRDRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz7jldwbAAAEyklEQVRIS6WWDUzUdRjHoeXWVktIc74MLREMUxBQV4RYkBmL - SBwSoZIFCgULlOJFDJDxqkiAqGgoiIQ6jaFLB1EqUaC8iMgdL8cJB3fHwR13HO8Hh3x7fn+pwN01nM/2 - 2X77Pb/n+33+v/3/95zBbGOVnZM58QHhRKwgnp9KPXuQ2CtJ6ScOjGo0fcMjI93llVX55us3rqbUc49P - zDLyw9auL4iw5l+IsMY//BRujcygdcg+ug83rpzCsVhf3C6+hHg/W+R++985BtU3pey1cCCpOYQhJzo9 - 8kPX1tZcDoS0Jp2jrCgWmakhOJMVA4GwBd1KNSQ9veiUdeNifjqyMsJxveD7f8+z2rPBlg0kNZ9gJjMj - L8RqQlSegIbLX6CuYAcOBm9FHe8B2rt70SZTgNfehTphJ+paCaEYjSIJkmP24PaPnrhfsBP8okCcCbZ8 - RFLmxIuc6PTICV5Dh4IxNqSEemAA6adzwBdJ8VeDEL/XNqGkmo/iKh4HW5fWNCL7QiEqq2sw3N+Dijwf - nPx6FUjKkpjLiU6P7MDVqL/gj8nJSY4bpbcQnZyK8EOJCI2Ox3dRcY+JjkNYTAIi4w4j7+JlKBQKjI+P - 42qqJ9J832AGawkjTnR6ZPm/iXvn9+ARiWsnJjCu1YLeGshJQCKVolMs5hBLJOiSydAjl0OpUmFweBhj - ZJAfuxVJ3ub6DTJ9LVCd40Pij6AZ01IRoWVGumE5dmZEM45RjRbnolwR72Wm3yDt85W4e2o3FVLnGg1G - xsYwSvDEdxB03gEa6vJwSopOhkZHkRPhgkPbTfUbpOwwR+XxXdT9OM79EQ/lgBLNkjpsz1iMP5t/oU7H - dIoz+oeGcTbUGVHblus3SPJYgfI0LxLSIPmaL4LyHOB5bClK6gswNDLKoUucoezvx+n9W3Dg49f0G8S5 - LUfZEU8MkpC8T43YQi8UVp3kutOFenAIvep+dClUkClVOPXNZoQ6L9NvEE3uN+PdMUBvRXevCgqVmjob - gGpgEH1PwPZYTq7soy9bDolcgRNfOWL/ZhP9BpEfLsVvMW70kQ1C2qMgEyVnUiUoQ2CuPZTUra7rYYi6 - ZDi+910EvbdEv0GYkwlKIj+BijrL+jUKbdJO1LZWwD19EUrrr0Cu6tMpzhCKJcj40gEB9ov1G4RsWoLi - UBe6V7r/n70RkPMOPDJMcLXqLPc0DF3ijBaRCOneG+H31kL9BkF2i3B9nzN1qoagQ4yDlzxQUE6/lHRd - XfLeGbA9cbccwk4JHggegi8UIc3LDj7rFug3CNiwENcCt6CH3ojm9g7qqoN79HZpF9rpjjumYGu2x3I8 - 4UNU85pwv0WAox5vY7f1/xj42SxAkf/7kCmUuNfUiho+FTa3gtfaRh22o6lNxMHWbI/lKut5uFVdh7sN - jTiybQN2rpmv18DQ1+rViUJfRwia+bjXLEB1YxNqyai+VUiditDY1sHB1myP5e408FFR34Cb5WVIdLXF - Zxbz2DywJYw51WkxZ9eqebxUFyvk7rDHD24bkOhig4RZEM/4yAZhm1Ziq6lRG2mxscmm2owwdF72suOn - ZkZCTzNjuJsaYdtT4vr63E4L4xcCSYv9IXiJU30i2BxlzmzkWRHsLp8GVsNqp2aygcHfZtZtYIryU78A - AAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkUzNzJDMjE3NEFENjExRTRCNjE0OEVEQzI4MEM0 - RTZDIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkUzNzJDMjE2NEFENjExRTRCNjE0OEVEQzI4MEM0 - RTZDIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI3NUQ0QkNENDRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6PyaLfAAADMElEQVRIS6VUXUiTYRT+vi3Tzd+ps23+3KRigtiPkolEQReG - UYTkhWatpWlWGkRdddfdSPImqUAJjSIT00oxLJIk0cR+tFSyzDJtgaMkDEPkdM7ZPvm2vS6jBx6es3Pe - 8zzvtm+TohLS/ov+AACStLgEQuJyLRJWYK1yzh/+FgCoQrpnfM4fOGBhcUlIMkEVkma4H4i1y2kFcMD8 - wqKQZILKZqTqmlTAWrfvMjhgbv63Dwm0hLWQohn1eNEbzrlfPiTQAtZCKjP1GXdAIC+r4XD+9CGBFrDm - RVJ1re6pZ0GyHHMvIawauYVNCFPfvvuQQAtYC6meKXU0amNsaGN/ZR60xIf9aIgN3cpGE9OzZCZ85nEm - pGiWlLABmuJCnUOXrNB7chdct4TUo32ANDbp4NuielDpqWfePdaPX6GrohSK4uLhlCEo96YlZLbOFHzH - oJXjMSBcGn4/zQGovEDqXXtzeTb+BTrKj0J3+Q54djYP7EZdTU2MPjFSK8eieQR9QtLg6GcOQPWgqKeQ - ZyOfoK30CDw+lg2Ot3Z4VLoNqo269mCNHIa2WjYn9A1PcAAqU6m9VV3TF9psOwwPS3JgZugCdNoyocwU - jU+RlImWBpezGz0vxzkA1YOiHvPFO7Ca1kGHLQtmXp2HdutmqN+/F6JiU+h3kOpyVeHJwBgHoLIpqajm - 189HoaG4CNqsGTA1UAWth9Lg6r490PygGyLjUikgzuWqQlffCAegelDdUwLqigqhpXgjTPYeh+bCFCg2 - RkEk3vxuVz/P0c43oLP3DQegLhspNalSFxiNcLswHT48LYNbBUlQk7ebzenmyhm08w1o7xmiAP6hRZiT - 70eYkzpctUuJWdHmwWs74+F1Uz7cyE+E4ohQB5mHm9a3GywpTXzektyKduIAIsKI3ISkL4rIdYle05C9 - VrZVBmvtl7eboUyv7V4jSQdwRn8FdI72iErtCUxnIuifkJ5hUqUOq9Jr7OeCNU6bTpNVqtMcDJSldOwn - KnOk+jypJ5QANRWc0cs5SEelXr54QidfwVYAMoiHq4W/gNM6OaNCJ+diaUIqN/43+Atwg27t+9ZXBUn6 - A2MdqQeVc5pWAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjUzQzNGNDI5NEQyQzExRTQ4QkE1QUNCMEVDRDZF - MDVEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjUzQzNGNDI4NEQyQzExRTQ4QkE1QUNCMEVDRDZF - MDVEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI1NUY4OTYyQTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6IsaOmAAADF0lEQVQ4T62U/UuTURTH+0nICqRI1ERMMyNQe8N0ChqBwQhN - yvwhEgJjVCqJ/qCibZo6tzQ339h6Nre5prapUzc1XzItX1ilzuWMLLVAen+xf6DTuTxjdxsFVj58ebjc - c+7nnud7z3228DbpIaDFH/CfoqCn72DIDvNfPDM2KAqyr8PcJxqY+QBTb8kkjocXQTsKigGwfqYJHqIg - 1OxHGHvlWPx4hXB1YyA3g4CBhqst+piEnrDA3rA95vBAY1x8d7lq/DVZwm5PQZNvoKYdypSgHgbVEIh1 - cLOZzOCbSSsyRQRba6uWtcpVLbPcwlglInNUCJNWWKqABqMLCGvGlfpJELaQ/V1Vd1lujAhe0chtUrH5 - ZExnmJ85MdomEa+qZMbIEF2BHGunILSjdZwYgTt4gJqjjj0Rltml1Zq9AeL0Mn71Wn2mtDU80MIvsFTw - O+KPIoWC8BNYRIUaqrRQroJKjQOk9N+xLBF2pXJFKfnsDGYa8gS6xOO2whyMuoHaHpGzZ/pBM0IMrtXD - nT4HqNHXe0lYoogMFeQP4jbSDkCPTUyXmnNoPutSo+9WN5DEQDyeWCWnhqm4p7Oimt3b54rzmmKPVHKz - 0Xg0AU1pz87VJp+yXOfd9t3mBmLXsGrsJhSsDtF4iOWxKdpzyQNnuRW7vEUp13obFG05OVUBPtO5V1Sn - k5q4SX8ENfWA6C7xHsP981Bb2sf38ZKd4JhSuXUJHPHhg/WJnAeZFw0Xzt/w8erRtLmBnB/CSmaC599I - 2PYVRl+CXigu3R9SfCC0Pf1MZ1oqvqvjogX7gtRFJfb1n24g7GblfQcFP2fkBYm5anxqQcbLKgzyK/Df - WRTkV5+RMTg84ZrgAOHo4ZIDVNdJw67CpsVLZ5gifj97Typlq2ZFQXj8LKh5EHpnaIar8N+Al5l9Y9Vs - T7OiIAzjqaMsa6QJnBkeWvgOHdPkAuIV67PSeQpCYYZplsZ+KyyWLRyFF8D553EDbURY770J0rrYJbda - SYE4iWb9NcgpRKDrOMAWwYP6d5BTaC52zyaAWDlAm/DweL8AX9zXukfxHsIAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - 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 - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjYzQTM5NEY4Mjg0OUU0MTE5NDBEQTc4ODZEQzk5 - N0NGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJGRTU5OEQ1NDlEQjExRTRBRUVDOTkyMjQ5NzEw - REUwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJGRTU5OEQ0NDlEQjExRTRBRUVDOTkyMjQ5NzEw - REUwIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTY0MkI1RjlEQTQ5RTQxMUE0QzNB - MjdEOTJBQzc3QkMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjNBMzk0RjgyODQ5RTQxMTk0MERB - Nzg4NkRDOTk3Q0YiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6B5sF9AAACe0lEQVRIS7WVb2jMcRzHL7UHanF/Mts5prE/1li3kAfu5Ak7 - 5IHNobBkSC2UIuGJkrrSWRvTmHQWK8U1T8jqUtYwkZpaGjV/Js6to5YwfXze39+fu/v23f36hXe9us+f - 7/v9rd/dr3MQ0X/F4Zm3+K9QhWajNNlBFZqN0mQHS6lMdrCUyqSgimllUsy4XmOmp+QRDllQWbygjjq6 - uimZStOX8a+ixox3pXrM1JLCDAqYJmY7c669M0bff07mcLbtEl9QE8k6V6BH5ooXMsHZZX7ae+AY7W45 - SrPm19LbsSR9m/iRA2bYGefggVePzUgKBzeu9sQpmZ4QcG/WMtk7eLjv0WMz0kOz+TX6MUXvP6cFeNbD - bz6YvQFm2Bk9PPByZO6jksLB5KvRTzTyLikIrG2ktsvXzd4g2hGjYP1ms4eHvb850qkl65LCQW/ntVs0 - 9HpMcPx0K1X4V1Ff/3NzhnphbVDsjBk8Lm/VE44s0ZJ1KS4Ie8uXUvPBE7Tn0ElCzTMqrV5BO/cfEaDG - TD5X6PFFONLygsTF7jj1vxihyPkYNTS1iFrFxm37KHIhJmp43L7qZxzp0pJ1SeHhQGgLJQaH6fb9R1QX - 2EB3Ek9FryLe95j8K9eLT/TB0FZcskOP1iRdkIh23aR7Ay9pzaZddKY9Jup8nIpeoXXhZlHD655b85Bj - p2npLOmCML+dD/iTZhaX3+UvbRB1PpzeygFnSUUvatecRUMzisoOc+x0LZ3FixxYhQyK1cxyZhkTYhqY - RgnM6hmcwVl4ljDI0KS4AC+Kmyli8Jv2MF7GNwXY4QzOwgNv5mWTL7CLpVQmO1hKZbKDpVR/1P8OcvwB - lh7gOXXZq9sAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkNDMTJDMTRENEFDOTExRTRCRDk4ODBFRTFERTlG - MzY1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkNDMTJDMTRDNEFDOTExRTRCRDk4ODBFRTFERTlG - MzY1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjYwQjFGREZDNjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4rRYZ8AAACEElEQVRIS2MQltOlCP///x8vxqqJFIzNUGSMVRMpmCDApokU - TBBg04SEpwHxfwJ4GtQo7ACoABfODY3N+P/773+82C88GWRJBtQ4TIBmKAyziCsa/L98/c5/37Ck/3Wt - fVixT2ji//OXr/8XU9T/zy0kzQo1EhVgMRyEm0uqW//vP3Lqv5Cs9ml+CZVp/OLKs/nFleYgY0EZzQt7 - Dh7/n1/eCFLXBjUSFWAxXENZ1/r/g6evgK5P/l/d1IMXe4ck/L//+MV/RW2r/0IyWppQYxEAiwWT+qfN - /7/7wHGQq84BXT9FQEq9S1Bas0VQWqMVFWu2ANWc2LbnyP/eKfNA6qdDjUUANMN9Tex8/j999eG/LzDy - yuo7icIeQfH/n7x8/x+kV0hGOwBqNASgWbBt+frt/7cCXQRko2Cg9xfCXA5io8uv37bv//J124G+0NkF - NJYRYjoQACWR8f97T99gxSA5oHIpECZCHTvIbDCAGgy34MaDF1ixo08k3LWO3hEY8jC9IBporBDEdCAA - CqBYcPnOU4ow1AKQTyEA3YKz1x9RhKEWyEBMBwJ0C05cvocVl9R3o2BsakCYoAWHz9+mCBO0YP/pGzhx - flUHGGOTg2GCFuw+cY0iTNCCHceuUIQJWUBMBYMX80uo7gQai9MCkJAoENsDcQiZGKQXZAYEYLEAlM1B - CkCuIAeD9EKLCgYGAMLPWmGxemtkAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY2MzBBRkRDNEFDOTExRTQ5Q0JEQkU0NDNBNTYy - QTY5IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY2MzBBRkRCNEFDOTExRTQ5Q0JEQkU0NDNBNTYy - QTY5IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjgwQjFGREZDNjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6+q/BOAAABR0lEQVRIS7WVTUvDQBCGe/PoQQQP4s2jv8E/4W/rXxEFQRAp - olCwfjRUJWK1ltJgNJh+6Toz7OCSzrIZFwce2LDzvs8hkDSMMf/K7wFmbWunCRgFTQp6RhKY+ZephSvh - Du7hoWf3AgPT+XcteLcqcUcUlNMFYYNLuPeVXZK4IwqKckZMZgsveO/u8jNKqMiOKHgrJrWQdqsSUTDO - Pwm7LBK6pzIYUTDMPoi8KGvB+4wVrGCfKHge5VFYwTr2iYLHQUbgWYObg6pN7BMFd/0RMczeVXAuKOim - r1EEBVf3LwSeNbg5qPIL2skTkQ7GKjgXFJzfpFEEBa3LBwLPGtwcVPkFJ+0ekcAL08C5oOD4IokiKDg6 - uyXwrMHNQZVfcNi6Jjq9vgrOBQX7p50oQgLtT3+J1Y3tA6iSBXbwS7gL7P0RzNqvqWn8AE4SSnpUkJk6 - AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFGMTBBQzY2NEFDQTExRTRBQTYyQjA5QjRFNjBF - MzcyIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFGMTBBQzY1NEFDQTExRTRBQTYyQjA5QjRFNjBF - MzcyIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6M0EzRTc1RjdDOTRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - 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 - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjg2NjBEMzE2NEFGRTExRTQ4NTY1QzE4RjMzMkM0 - NEY4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjg2NjBEMzE1NEFGRTExRTQ4NTY1QzE4RjMzMkM0 - NEY4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTU5NUNEQTdGQTRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz5BZhOvAAAD9ElEQVRIS7WWe0xbZRiH95+T6DQxcc7NLfrHTBaR4NyFmDAy - ljFwwERGpmRxxmyY6QbqgogDhqluOpFLlm6AFslGRVlXKISVS7tByzgUOF1vtLUtLVBogQ4YsLoN9ec5 - 3+xXyIiJWdrkyfed9/u979PLSdsVz6wPfyQA/Cehf3DPQsiBECHkBVj4CyGBn00E9xb+DglU4L/35xIM - 7j78qCpAlVqAg6KNkOtqMTPnx9TcLOzjFty5u4CJWR9u++/AM+NBh7WRnM3/cX/JHCqY899fwu35u/BN - z2HM60NcURjB7hwmNX4/PjmNWzPzZL/v3FPIEK9DQskTNOudmML0rD8oiD0d9hAutxej4z6yZ3pZaA0D - ZO8c8dDM8d9egtSxGxetMTiri8Ih8XpS79cZ4fZOBgVu7y2YrINg9QOIPvU4QcPqyWp1DJM6vwbOUivW - QGSMgdi8E7mqSGQqIpAoXE3OmuRtuKHRwjU6HhQMe6dgG/LA4hhBVM5KJJatJmsPa8TNARup8xm+1tnd - R9bkc88hicsllnGrcC2p1Te1QKliYLQ6SZ4KhriLYe80oaa9Ghk/JEMkqYJS3Q0DF3a4J7D9s1V4s2QN - Nmc+hviTLyOvIgv55SeQe/4YUgu3QlRXjbbrN6A12TDoniSzqMDh9lEszjEoGQbF4u/wa+tlmOxu2Ecm - 0dglR86FjxEteBZx2Zsgab4KhaoH17lXJFO04nKLDCrus+L7A7OowOLyUsxODwy2EaTm78BrWU/io6KD - YE126KxDaFDKEZ4Rhg8E+1HbKAOjNZP6TYsL0mtNaFYrUCmrAGu2YWBwLCgw2Ecf4qeGakRmPo203D1Q - dPWjz8TdBGYX0guSIK5vgLyDQa/BDr3NTdAYrYg68iI2HliJiitV6DM6ggLWwt0p/8J9PeFMsRDnJSLE - H38DsXEJSEhKAaOzod88hMjXt+KTz/PQ2WtCLyfl8wE2RbyKkyWFqJLUQdqu4ASvPBBojE4KH9wVtxel - v5Tj5zopuU5MSQOjt6NG0swJtmHtCxtwrUePHsMDQaA3J/9rfJpTgDY1CwWjDwq6dHYK37BzdwJqZe3I - E3yP9ENHsG//u+TsvcNH8dXZMryVlo4ioYjmA73ZnCA7T4BO1gqV1hp8izr6f6fwDafOlKLgdAlidsXj - 29JKJHOCFrWOnAXga4F8gIjN21Df1k1nUYFSY6bwwUvSVjy/bgN2cILKmnokvf0O8r8pRvr7H5JMcwdL - zvkcn1/cvxgqaGVMFL6BX6Nj9+BLQREuXLyCvSkHEB65BcXll2ju8LETyPqikOaXgwqudhlCQkAQ8p/M - R2K5fxKLWbbp/7Dc0CBY8Q+pPmOq0VkzzQAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjIxNUQ2NkYyNEQyRDExRTQ5N0NDRjdBNTBDQjc0 - MUY3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjIxNUQ2NkYxNEQyRDExRTQ5N0NDRjdBNTBDQjc0 - MUY3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkU1NUY4OTYyQTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4lOJsMAAADqUlEQVRIS6WTf0hVdxjGj2beulPvD52aU6Np6tKBhUWsYjIH - prDYSlZjNPsjlUnkMmSx6eJqS/u5zXGtoKKEMaEt2lpZ20RX01Bjad31A8UakdZ0SyrLJfHueU7H0zl6 - U8QXPvCe933e5/3e8z1XCY5+dVKIyJh4HZoI48bQE5kU44a3ISM45TxQCTxgQIM5a/M0m+eHN1OC4TfB - 96mZ78reg9+I50qn3HvwSIU5a+xBcwyka3ajY3DoySgwUJ44P02O/vSz4HlMfqitk7mLlnLRNs3SHAOD - QzoQOYF7de4Gud17V1DTuf/wP7nScUOFubF3559+4QxngUOzfhr9DwZV0AgHVZ99/oXcvf9IUNPZd6hG - 5qS8Ic7IOb2EOWtGDWdKtuzmkj300uwVpa9/gOZTae6qqBQ8myjb4RZbeEyjJcBROt0W6rLaw4unBYYU - 2mfMrmNvpJ4ewdFJe+Hnry7o7rvHBV+v/7hUkJtoab8qobOSZarlhfX2iLhjS5d/IBkrsvlLDmPJEvao - GTlXsKmMS9zqApjnZWatkeu3+uSvnn9NlO2skqCwl2tt4bH7N7l26nXmzqgkFxZVUWOcIfSiZ3BU0odc - 0Hay/px03Px7FOuKXBIUOms/zDwn6pr0OnOcsN0ZlVhEjXFmGHpCc0n9BenvZMulzlvyZ1ePiZLySsG7 - /hYn3VpYXKHXmdtnxLmx4CtqjDOEXunLs3F3sS7lwrWbCoT71hYUC3ITJxta1TsIDImOh+ZA2rL3hdjC - Yhr8pwdlsUfNyLkceEFThxt4TWnxXFf8rTab46WEmo8+KRc8m9jwaQXed2I1Trw4IDgqx2oPK8EFb4T+ - KHsj9fSA+Rkf3ynvYUGi0tjWybv2DXBGxjsiEo7kF5XJ7xc6BHWdzdv3yOzk1/lOu3BxN5izZtRwJr+o - VDX3s1jz4ZkCHErD+WsqiCn4xuPsEfHfvbUqV2rPtgnqOvWtV6Xm+G8qzI09ajmjmvtPy4PXQhBCT+XX - 5ss6CD/wIl5H9SspaVLhrhbUx4QaavG1/YLZVWABPTQvRTnV5DGhNZyBITPz8cqaU1KXSeHmXXLgyGn5 - seEPFeassYfDXLTawr7EzNsgmbOax9M4cfbiKBC+IBDEYjgXn9spfKrduIPHBHkPXke9JcBZCs1KkEqt - NsPZZ4H/gVcQPsAC+HMTwCKQAXhSwpw19qihljPm8GZuBDG8yAZCQYQGc9a8Gw+HN9OJMG54G5oIY4ei - /A9dc78cqtG90gAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 - RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL - ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH - s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW - uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx - xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd - iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ - qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW - GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE - NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n - KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw - qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI - HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq - wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q - 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 @@ -4803,6 +4005,804 @@ ++H/A/YDv9/V87iOlrYAAAAASUVORK5CYII= + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjYzQTM5NEY4Mjg0OUU0MTE5NDBEQTc4ODZEQzk5 + N0NGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJGRTU5OEQ1NDlEQjExRTRBRUVDOTkyMjQ5NzEw + REUwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJGRTU5OEQ0NDlEQjExRTRBRUVDOTkyMjQ5NzEw + REUwIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTY0MkI1RjlEQTQ5RTQxMUE0QzNB + MjdEOTJBQzc3QkMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjNBMzk0RjgyODQ5RTQxMTk0MERB + Nzg4NkRDOTk3Q0YiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6B5sF9AAACe0lEQVRIS7WVb2jMcRzHL7UHanF/Mts5prE/1li3kAfu5Ak7 + 5IHNobBkSC2UIuGJkrrSWRvTmHQWK8U1T8jqUtYwkZpaGjV/Js6to5YwfXze39+fu/v23f36hXe9us+f + 7/v9rd/dr3MQ0X/F4Zm3+K9QhWajNNlBFZqN0mQHS6lMdrCUyqSgimllUsy4XmOmp+QRDllQWbygjjq6 + uimZStOX8a+ixox3pXrM1JLCDAqYJmY7c669M0bff07mcLbtEl9QE8k6V6BH5ooXMsHZZX7ae+AY7W45 + SrPm19LbsSR9m/iRA2bYGefggVePzUgKBzeu9sQpmZ4QcG/WMtk7eLjv0WMz0kOz+TX6MUXvP6cFeNbD + bz6YvQFm2Bk9PPByZO6jksLB5KvRTzTyLikIrG2ktsvXzd4g2hGjYP1ms4eHvb850qkl65LCQW/ntVs0 + 9HpMcPx0K1X4V1Ff/3NzhnphbVDsjBk8Lm/VE44s0ZJ1KS4Ie8uXUvPBE7Tn0ElCzTMqrV5BO/cfEaDG + TD5X6PFFONLygsTF7jj1vxihyPkYNTS1iFrFxm37KHIhJmp43L7qZxzp0pJ1SeHhQGgLJQaH6fb9R1QX + 2EB3Ek9FryLe95j8K9eLT/TB0FZcskOP1iRdkIh23aR7Ay9pzaZddKY9Jup8nIpeoXXhZlHD655b85Bj + p2npLOmCML+dD/iTZhaX3+UvbRB1PpzeygFnSUUvatecRUMzisoOc+x0LZ3FixxYhQyK1cxyZhkTYhqY + RgnM6hmcwVl4ljDI0KS4AC+Kmyli8Jv2MF7GNwXY4QzOwgNv5mWTL7CLpVQmO1hKZbKDpVR/1P8OcvwB + lh7gOXXZq9sAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkNDMTJDMTRENEFDOTExRTRCRDk4ODBFRTFERTlG + MzY1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkNDMTJDMTRDNEFDOTExRTRCRDk4ODBFRTFERTlG + MzY1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjYwQjFGREZDNjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4rRYZ8AAACEElEQVRIS2MQltOlCP///x8vxqqJFIzNUGSMVRMpmCDApokU + TBBg04SEpwHxfwJ4GtQo7ACoABfODY3N+P/773+82C88GWRJBtQ4TIBmKAyziCsa/L98/c5/37Ck/3Wt + fVixT2ji//OXr/8XU9T/zy0kzQo1EhVgMRyEm0uqW//vP3Lqv5Cs9ml+CZVp/OLKs/nFleYgY0EZzQt7 + Dh7/n1/eCFLXBjUSFWAxXENZ1/r/g6evgK5P/l/d1IMXe4ck/L//+MV/RW2r/0IyWppQYxEAiwWT+qfN + /7/7wHGQq84BXT9FQEq9S1Bas0VQWqMVFWu2ANWc2LbnyP/eKfNA6qdDjUUANMN9Tex8/j999eG/LzDy + yuo7icIeQfH/n7x8/x+kV0hGOwBqNASgWbBt+frt/7cCXQRko2Cg9xfCXA5io8uv37bv//J124G+0NkF + NJYRYjoQACWR8f97T99gxSA5oHIpECZCHTvIbDCAGgy34MaDF1ixo08k3LWO3hEY8jC9IBporBDEdCAA + CqBYcPnOU4ow1AKQTyEA3YKz1x9RhKEWyEBMBwJ0C05cvocVl9R3o2BsakCYoAWHz9+mCBO0YP/pGzhx + flUHGGOTg2GCFuw+cY0iTNCCHceuUIQJWUBMBYMX80uo7gQai9MCkJAoENsDcQiZGKQXZAYEYLEAlM1B + CkCuIAeD9EKLCgYGAMLPWmGxemtkAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY2MzBBRkRDNEFDOTExRTQ5Q0JEQkU0NDNBNTYy + QTY5IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY2MzBBRkRCNEFDOTExRTQ5Q0JEQkU0NDNBNTYy + QTY5IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjgwQjFGREZDNjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6+q/BOAAABR0lEQVRIS7WVTUvDQBCGe/PoQQQP4s2jv8E/4W/rXxEFQRAp + olCwfjRUJWK1ltJgNJh+6Toz7OCSzrIZFwce2LDzvs8hkDSMMf/K7wFmbWunCRgFTQp6RhKY+ZephSvh + Du7hoWf3AgPT+XcteLcqcUcUlNMFYYNLuPeVXZK4IwqKckZMZgsveO/u8jNKqMiOKHgrJrWQdqsSUTDO + Pwm7LBK6pzIYUTDMPoi8KGvB+4wVrGCfKHge5VFYwTr2iYLHQUbgWYObg6pN7BMFd/0RMczeVXAuKOim + r1EEBVf3LwSeNbg5qPIL2skTkQ7GKjgXFJzfpFEEBa3LBwLPGtwcVPkFJ+0ekcAL08C5oOD4IokiKDg6 + uyXwrMHNQZVfcNi6Jjq9vgrOBQX7p50oQgLtT3+J1Y3tA6iSBXbwS7gL7P0RzNqvqWn8AE4SSnpUkJk6 + AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFGMTBBQzY2NEFDQTExRTRBQTYyQjA5QjRFNjBF + MzcyIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFGMTBBQzY1NEFDQTExRTRBQTYyQjA5QjRFNjBF + MzcyIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6M0EzRTc1RjdDOTRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + 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 + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjg2NjBEMzE2NEFGRTExRTQ4NTY1QzE4RjMzMkM0 + NEY4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjg2NjBEMzE1NEFGRTExRTQ4NTY1QzE4RjMzMkM0 + NEY4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTU5NUNEQTdGQTRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz5BZhOvAAAD9ElEQVRIS7WWe0xbZRiH95+T6DQxcc7NLfrHTBaR4NyFmDAy + ljFwwERGpmRxxmyY6QbqgogDhqluOpFLlm6AFslGRVlXKISVS7tByzgUOF1vtLUtLVBogQ4YsLoN9ec5 + 3+xXyIiJWdrkyfed9/u979PLSdsVz6wPfyQA/Cehf3DPQsiBECHkBVj4CyGBn00E9xb+DglU4L/35xIM + 7j78qCpAlVqAg6KNkOtqMTPnx9TcLOzjFty5u4CJWR9u++/AM+NBh7WRnM3/cX/JHCqY899fwu35u/BN + z2HM60NcURjB7hwmNX4/PjmNWzPzZL/v3FPIEK9DQskTNOudmML0rD8oiD0d9hAutxej4z6yZ3pZaA0D + ZO8c8dDM8d9egtSxGxetMTiri8Ih8XpS79cZ4fZOBgVu7y2YrINg9QOIPvU4QcPqyWp1DJM6vwbOUivW + QGSMgdi8E7mqSGQqIpAoXE3OmuRtuKHRwjU6HhQMe6dgG/LA4hhBVM5KJJatJmsPa8TNARup8xm+1tnd + R9bkc88hicsllnGrcC2p1Te1QKliYLQ6SZ4KhriLYe80oaa9Ghk/JEMkqYJS3Q0DF3a4J7D9s1V4s2QN + Nmc+hviTLyOvIgv55SeQe/4YUgu3QlRXjbbrN6A12TDoniSzqMDh9lEszjEoGQbF4u/wa+tlmOxu2Ecm + 0dglR86FjxEteBZx2Zsgab4KhaoH17lXJFO04nKLDCrus+L7A7OowOLyUsxODwy2EaTm78BrWU/io6KD + YE126KxDaFDKEZ4Rhg8E+1HbKAOjNZP6TYsL0mtNaFYrUCmrAGu2YWBwLCgw2Ecf4qeGakRmPo203D1Q + dPWjz8TdBGYX0guSIK5vgLyDQa/BDr3NTdAYrYg68iI2HliJiitV6DM6ggLWwt0p/8J9PeFMsRDnJSLE + H38DsXEJSEhKAaOzod88hMjXt+KTz/PQ2WtCLyfl8wE2RbyKkyWFqJLUQdqu4ASvPBBojE4KH9wVtxel + v5Tj5zopuU5MSQOjt6NG0swJtmHtCxtwrUePHsMDQaA3J/9rfJpTgDY1CwWjDwq6dHYK37BzdwJqZe3I + E3yP9ENHsG//u+TsvcNH8dXZMryVlo4ioYjmA73ZnCA7T4BO1gqV1hp8izr6f6fwDafOlKLgdAlidsXj + 29JKJHOCFrWOnAXga4F8gIjN21Df1k1nUYFSY6bwwUvSVjy/bgN2cILKmnokvf0O8r8pRvr7H5JMcwdL + zvkcn1/cvxgqaGVMFL6BX6Nj9+BLQREuXLyCvSkHEB65BcXll2ju8LETyPqikOaXgwqudhlCQkAQ8p/M + R2K5fxKLWbbp/7Dc0CBY8Q+pPmOq0VkzzQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjIxNUQ2NkYyNEQyRDExRTQ5N0NDRjdBNTBDQjc0 + MUY3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjIxNUQ2NkYxNEQyRDExRTQ5N0NDRjdBNTBDQjc0 + MUY3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkU1NUY4OTYyQTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4lOJsMAAADqUlEQVRIS6WTf0hVdxjGj2beulPvD52aU6Np6tKBhUWsYjIH + prDYSlZjNPsjlUnkMmSx6eJqS/u5zXGtoKKEMaEt2lpZ20RX01Bjad31A8UakdZ0SyrLJfHueU7H0zl6 + U8QXPvCe933e5/3e8z1XCY5+dVKIyJh4HZoI48bQE5kU44a3ISM45TxQCTxgQIM5a/M0m+eHN1OC4TfB + 96mZ78reg9+I50qn3HvwSIU5a+xBcwyka3ajY3DoySgwUJ44P02O/vSz4HlMfqitk7mLlnLRNs3SHAOD + QzoQOYF7de4Gud17V1DTuf/wP7nScUOFubF3559+4QxngUOzfhr9DwZV0AgHVZ99/oXcvf9IUNPZd6hG + 5qS8Ic7IOb2EOWtGDWdKtuzmkj300uwVpa9/gOZTae6qqBQ8myjb4RZbeEyjJcBROt0W6rLaw4unBYYU + 2mfMrmNvpJ4ewdFJe+Hnry7o7rvHBV+v/7hUkJtoab8qobOSZarlhfX2iLhjS5d/IBkrsvlLDmPJEvao + GTlXsKmMS9zqApjnZWatkeu3+uSvnn9NlO2skqCwl2tt4bH7N7l26nXmzqgkFxZVUWOcIfSiZ3BU0odc + 0Hay/px03Px7FOuKXBIUOms/zDwn6pr0OnOcsN0ZlVhEjXFmGHpCc0n9BenvZMulzlvyZ1ePiZLySsG7 + /hYn3VpYXKHXmdtnxLmx4CtqjDOEXunLs3F3sS7lwrWbCoT71hYUC3ITJxta1TsIDImOh+ZA2rL3hdjC + Yhr8pwdlsUfNyLkceEFThxt4TWnxXFf8rTab46WEmo8+KRc8m9jwaQXed2I1Trw4IDgqx2oPK8EFb4T+ + KHsj9fSA+Rkf3ynvYUGi0tjWybv2DXBGxjsiEo7kF5XJ7xc6BHWdzdv3yOzk1/lOu3BxN5izZtRwJr+o + VDX3s1jz4ZkCHErD+WsqiCn4xuPsEfHfvbUqV2rPtgnqOvWtV6Xm+G8qzI09ajmjmvtPy4PXQhBCT+XX + 5ss6CD/wIl5H9SspaVLhrhbUx4QaavG1/YLZVWABPTQvRTnV5DGhNZyBITPz8cqaU1KXSeHmXXLgyGn5 + seEPFeassYfDXLTawr7EzNsgmbOax9M4cfbiKBC+IBDEYjgXn9spfKrduIPHBHkPXke9JcBZCs1KkEqt + NsPZZ4H/gVcQPsAC+HMTwCKQAXhSwpw19qihljPm8GZuBDG8yAZCQYQGc9a8Gw+HN9OJMG54G5oIY4ei + /A9dc78cqtG90gAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 + RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL + ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH + s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW + uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx + xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd + iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ + qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW + GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE + NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n + KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw + qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI + HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq + wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q + 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlDMzFEOUI4NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 + NEI4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlDMzFEOUI3NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 + NEI4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDk5Mzk2NTZBRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz73sIMwAAADIElEQVRIS7WVa0iTYRTH56Uiysvm3TkvpLl5DRIvQYWVWl+6 + iNEVg0yhQqloQZHkLT+Y0YdAs75IpEUhzERZoZhsRpZlS7soblotsRwoxhqWeTrnYZtv+u7NsB74cZ5z + zv89/z17HzYRAPxXeIv/EpFXcOyi4BvKhfehv4FvKBfeh+ayqIUDlIgBgT8whpRYoT2fhgvNVJKBQT9s + hB8/QZDPpnEIjEhg0J5Pw4Vm0mwygG9T06BSqQQhTUhUMoRGpyxYT7OZwfhXC6jVakFIYzNYqN5uMGKa + BI1GIwhpghXJaJJi13d0dEB2bj74hsWzSDlXbzfQG02g0+kEIU2wIomdovzKdVifngnFFytBeb4cLN+n + WaSc6hfKKqB/eHTWoHfwExgMBkFII5MnQUD4WlAWloO26wVs35MDmifPmQFFyqlO/aKKqlmDp31DYDKZ + BCGNTJ4IPqHx8LJvACbNUw7p6e2HuJQMNIhhBuaHj3vBYrEI0tb1BoIiE9kJ9h7Oh7EJM+g/jEJuwVlY + s24ri5RTnfo5BedAIoueIYPumvomuHzjzm9cq2uCq7UNUH2rEarr7kNd0yP26Y+eKoSWtk4wfpmAg7kn + ITY5DUorq1g8cOQEqze3aplOEhRtJoMcL1mMTixV9IgD5a/tSBVDYql8AKOBQLEJtTP08gY/jjFiktKg + 5FIV21Ok3NazvmR2AvrFkCAJyGYk1comZAuHDM/AyLvHThfBveZ26NOPwI59eey7LsbhFCmnOvVJ5+Ef + rrYZLEU8EZ85+HLwW7ZCLMVTFWdkHoLut+/hgbYHaE9XN31XNsupTrWV3jKVs+uS3cyAD0cLe331jW3Q + qRt0CPUlQVHDKI+fN9iGo4W90uNnyuA2vvRtWTlQgxeg/dk7FimnOvU9/CNqUe47b7ANRwt7AfjpKvAK + Gt18Qur35ymhRfsKKLr5hN7EyzDq7humWrrcfSfKxbz/QlwcLDck1snZJdUzYHUDmk57+K1qdXJyzsL6 + RmQD9ZmObygXB8sVIRO6fXQB4hC6eRQppzr1XXmHclnAckFomLc1Um5dItEvhZ97MQXP9N0AAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhDMTdBQjRENEFBRTExRTQ4QjQyODY0MDNBNTJE + NzNCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhDMTdBQjRDNEFBRTExRTQ4QjQyODY0MDNBNTJE + NzNCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NUQyMjc4QTlBQjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4eHsDfAAAB00lEQVRIS7XVWytEURQH8HniTTNHLs0NCXNcXjTN5dH9g/gM + 3jx590QhFDJS0gyTGmpqaqJIMW4hzlAoOaWISS7LWifntI3ddnTGrl92e/57/We/DBsA/CvuYSHZSr0t + lvCGsriX/oI3lMW9lM/SwgF9SEHwizs08IX2vAyLZvZRgXJ+cQWv7yB0q96Ds86voT0vw6KZNJsK4Pnl + DWKxmBBlqhpDUN0UNp2n2VrB/WMOEomEEGX0ArN5o+BGfYB0Oi1EGa8cwpKw6bxRcH6lQiaTEaKMVw5q + rzCbNwr2z65BURQhynh8Qe0VZvNGwdZBFlRVFaKMxxfQXmE2rxc8rW3sQy6XE0puHoG7IaC9YnV9j5th + pbZPqOCDCrbH5uIwOD7/zWgkDkNTizAyuwQjkWWIxFNQWduqmVxI/MiPz6/A8HTUuDMTTYLkbrqhgt5S + T3PG4ZJ3HE7focElZx0u3yn+VQiG1ZLymmm7s74f88f42S6bl9zyJZ6d6Xckd+Mt5ieogH4xJORHHajt + SzvqZPSgECpHZSiA2DztuxBlad+NgnpBEbIjusiiYboKRF+kGFHegUR5ImkFv7G0eAPzWVq8gfksLd5/ + oULiHhYS97BwwPYJlSCUgVubViQAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJEMDQyOEZBNEFEMjExRTRBN0MxRDBCNzJGRUND + MDEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJEMDQyOEY5NEFEMjExRTRBN0MxRDBCNzJGRUND + MDEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkRDRkI1RDVEMTRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz59jfe3AAAEbUlEQVRIS8WTeUybZRzHF48/pnFOuQRajkFLgQFb5iRLNJr4 + l/EPgsniUI4xZDAY1zyxwApsMJyIME61rByl3DfoYGBrgbWUY06FcZSCha4rQ8jYxkqPr2/fvkv8o2Sg + S/wkT970eb6/T5/39z7Prv8dt/Oql4mR4HZJ3ccoXFxhVCzB9DT9JueJdSq6c1wzVZFupepVzxu34XVj + CaEDi1jX6hF8ZQoeokl4iBVwzV9YdU1XRlIl28eVo8phCdXwGltEeOUsro6psaHVwcSDh5volc4iOO8X + 7KuVwb1hEi7J8myq9PEQO//I85oafr0KtEpUpNSETm+AwWDAvfv3YTQaybnm/t/AyO6Ga+UonJOnIijF + 1hA9tWI2qle9RxcI+RIpmZpTIfBULhIyyqHVahHPKcN70TmYnFFCp9OhqXcc9KwW0DOHVl3YU1aUyjJu + F1SpfhO3EM6bMMsVt+D8Zhz2HIpC4oU6bG5uIu4cD3tfTwAjIBNypQYbGxsISquBU34PaDHiVEplGXee + SuIjVaBv3Lz7gJg8vHg4FlZvc+ATVoLipiHsD8qCXWAO7IPK8MG5FjLXKboOeoYADkldUkplGWb7vOb4 + 4BzxIXXQE/1m59WDXdgBvxPfwz6UC4eQUth/WIBDZ2qQXj+K7IYRImeE5s5fOFrcDPvPapcJzVNmmwVY + VxWG9U09uau1tTVymPpc0iYFLew7OEUJ4BwtALfvJpl5xMrKCu6s3cUrn5YbCM1us80CrJZZVWjXr7j3 + 4CE0y8v4IrcaH+cK4Bv+DRyPl8ApphYuia3wZ3eCUzOA1PIfcVuzjHnlIgK/vgy7mHzTG+w12yzA5E53 + edYPo1c2i/X1dQTEfwvbwDQ4hhXg8OcN4P48Df+UTrgkNIAeW4Hg3Hbo9Xq0iGSgs4ls5CUhoXnObLOA + S8pkhG/bdZzgDZJnffT3GXieLAA9XgB2/RjZjuQqMWhxfBw824H55XWyhcfy+HDNqoB1SH4Codn6G7iw + p3d78EaVPlXX0CaZgkqlgly1gpCiK0htHCH/IL6oFcEF3ZjT3CUvXqv0DzDSS0FPq1a/8EbYS5Rqa+if + SAJ8KoeNR7gitEsnoVQqSbGOkJmYX1ggxaY70SabwIGMUrjn8I3WIXnBRPnWu/8nDnE9Sd7cAaP/ZSES + 6/rRKJRArpiHXC7HzekZNIukiCyrhW9mGZgXa4w2kUVnibJnzdXbxP5URzyDO4QjxGl5i9uNpMZeKP5U + IrywAq9yCnGAOGGMonbYxpVnEPGdyR9BO/MTj8kfgXeNFPt5IngVtoF1kQ9WcTs8qgfgmNreQMS21xZL + 0E6Ln6ef75tg8sfgXT8O77oReAkkYNXJ4PRV/4ztyfo9VPTf4xjdf9CpQKzdxxuGe6UMbhXEmc8V6mze + r3qNivx3HGN7UmglQ6CVDMIxXwybo5UcaunJQD8te9rhyx4JrWwItlGNUut3y5+hlp4cDhFCpl14k9jq + nR+Y1NTjIe7NlmMnWKoHsOtvjWYcKpheqFQAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERTg4QTFENEQyMjExRTRBODEyODk0M0RBMTc5 + Qjg3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERTg4QTFDNEQyMjExRTRBODEyODk0M0RBMTc5 + Qjg3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjJGOUEyRDEyMTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6wJF34AAACl0lEQVRIS62Vy08TURSH73/QhQtXVnBhxEcMiUkhbEg0hB1R + Q1i68C8wIW5cEqMLN7ho2Ji4YiEhWq0prYUhfULbadN3obTaChobtZEUsFY9nnPS6WM6HYowyZf87j33 + nG/amaai9geOBYA+4pTxihmBE8DcTQB4J8em/9IwSQyagmrtL+z9rMFmvnhkKvtV7tcVHPz6DVsftulA + AckdhUg8zf19eoLKAd597iMLMItewfOxUDTN/bqCH3tVSG8VWIBZ9AoJApEk9+sKvu/uQ2IjzwJkGtH8 + OrTwy3Hu77vIAnV9mgWlcgWiqRwLjAMmkOMbPbNTKnN/JJntqJGEBZ++7oKcyLLgLN4JrU8Cms2C4pcy + BKKZumCI18temQ/8DzSLZlBmQX7nG/jCKdpgAa0driCtY5iFHuqHSjNoFtaags1iCdzBBG+QgNY2aZ0F + mIUe6osENAtrTUEq/7kDq9PHAszU5yYoq9f1i9cUSCD5ozxDEeTsrhAoONwyxLLb8MrhYQFmZYCHsnpd + v3hNgQROb5hnKIK29944MAThTBEWbS4WYBZ6qC/sKSy5ZJ6BGUQg8b4Bbhjod4AZXlhXWdBa10LrIVul + AM9ggS+aa6AIMMO8ZYUO0KeyIOMtZyaQpXpNi4LFucYzMINwhbMNcMNw5oIJMMNKIA0LNg88mZuH/ssj + dPgBMnN+cBRmny1wrRtSMMMzWCCFMg0UAeY2Fh0+GL5xG8Zu3oHXUrCj3g0WONdTbeBm21/o1N17gPtg + 98Xh3VoS3qzKMDI22agfglnY/Uld8NDc/ZlZwAwvl4Ngun6LGh8rdfVDViNs3rguOOzq6XOD8PDpc7g2 + OkHDH7XWtYa2It66Y4eCQ8cRfpvUNa2hTUD8A6JMaBvCyTdJAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERjY3MEZENEQyMzExRTRCNDlGQUMwMzk0OTAw + Qzc4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERjY3MEZDNEQyMzExRTRCNDlGQUMwMzk0OTAw + Qzc4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjhGOUEyRDEyMTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6GKmpFAAAC+UlEQVRIS63T20vTYRzH8Yforj/Ei24UiSgKIygKi8oyxZQo + cvNYeXaesmzqPGu2POd0ulSsnIdaurTSTJ3O6UxTPGya5vCQx5AuPn39RbHop7nZxQt+z3ie93e/Z4w1 + p7nsCoBt8R6yBF/UHPv+Wb0rfFFzm99CRIwEW1gnqXzxTXxRc0ydctm4OlID2sxrw6iCtiwItC+A2P/D + frLnjwGNSZdMq6N1WOvLwFpP4l/WdRlY6Jaio9Ab7QXba8sVoDHZGdT8PYS9THDqMGnLsKpNw0qXGCua + BO55VZdNQ6U/DRRibVCGb+N1pH5bukoRqHmDHOIG1N8/X2F4I8WyNhtf2+9hqSsZxqZ4upbb6HsSZLHO + Im90ym6hNVcIaktYTexZyUelGEvaHMy/jcFiZxo0xX5Y7ivGcn8JkVmA9uvlWBmqwpJeAWovs+poR99O + eRgWtQWYVUdgrj0FH+i+F3XF3NoappZYGJrEoLaOVYpOOTY/FGJB+xjTqnDMtMTTAC/Ma/Ix/TLUKl9e + x0JfFQpql7PykBP7lWIXzPeUYLIhHCPKCLr/AMy2ZsKoDLTKdNNdvM8TgNpRTBZwfJ885CTmaIChPhwa + mS+GnkdhqjEWY9X+VplqvIMXEhdQ24mZeuSs0N/BNNWWj4k6EdSZHhhXxWH0aSCGFd4c4Tk7zk7XBlUM + FKLToK4Nm+0qYnneRzqGGiSYaIiiyZdhVCdgqFSIwRJPjucZW85O1pvnRmvDkO9zFNTdy2Y6HjGp4HCF + 5kk4xhoiURd/EROv4tBfeM0qAyUC9Mp9QM0+7o829T6LZV0/mNycS6+nFKFWfAGj9ZHozfGwil7miZYH + 7qCmghsw+S6VpV894KuUuKFbfhNNqa749CwY3dm0toK+VABl3HlQM5obYHybwFLc7W1y/Y5BlX6FfgNn + DNcEY0DhZZX+MiGKbh0DNR24AYYWMSfJzc6GZBApwS5skIzNODcg0dV2V36FtsJ7yBJ8UXO8hyzBFzXH + ++H/A/YDv9/V87iOlrYAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 + RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL + ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH + s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW + uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx + xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd + iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ + qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW + GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE + NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n + KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw + qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI + HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq + wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q + 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA3MTZBNTkzNEEwMjExRTRBQjdERDhBQkEzMDEx + MzZEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA3MTZBNTkyNEEwMjExRTRBQjdERDhBQkEzMDEx + MzZEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTgxNjM4Q0YwMTRBRTQxMTk2M0JC + NEQ0MzNCOUIxQzgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + 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 + 0HWhD93n++Dbua+fK9NvoTM5+Udx5mye9NjgCZNf0HEnpN5U5RbPa9+0bdfQ+0eOPzp5ppvG96JfjFkM + nXR/vOP0ePOu/deyCuf8JVSorJny7HQdvR9MTCUm+fUYgyehazLBVCCd8ttpJbQANtO3cDjWbO9werzd + ruK5F9Ld3p7YBEdHCE/WMi0s0jf5mefm0e+ZCsXEf85i/98XsP4NaTpxka74X+IAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJBREU3RDk2NEFCMDExRTQ4OUM5QjZFOENGQzJF + MDk1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJBREU3RDk1NEFCMDExRTQ4OUM5QjZFOENGQzJF + MDk1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MEM5Mzk2NTZBRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz52g1XsAAADeUlEQVRIS62Va0hTYRiAXzVNoQs6oUCttJu3aqatrLxr2k0n + W6bLLlLSxTKCKLoQQUg3IbLMflSgBRGRP7JSSzGnWalYdpnV1MQu1tBWWklqvr3fp2dsOytSfOFh3/l2 + eJ7tnDMGkkmzGCqigsARhPlUQqCi8nEd9v7GEYP5mFcI4K/e/hGHeQ2B7p4+1HV8Nf6Kw4a5GGxtCHzv + 7sU2nR4lbr4/AUBFKIeD4GKYBL79+IX6rm622U8nSgnX4SC4GCaBL50/OXwTwIUY1ohcQkCn/84ZDLBP + I5p16TBl7XYIoaXVwI54RC4h8LG9k/OvQPIOmEZUJW2F+XRoPbBrOiKXEGj9rOdYCqi2gxXhnLQNIo6f + n9tEa7ViI79PoojIJQSaP3RwjAOJaSAjjhL3N+9zrD+W499UVJnSeeVmWDvtlcWlgCedZnK5RC4h8KZV + x2FryQSYmrAVjh/MnP46/57yS7VmZ9+zxr1Yr92NtQ1pWFmfiBevL9QpUqE0JhHcyWuImLsMAU1zG4et + V6yHC1l5oe+evNmD1ZoteL9OgaW1K7GkRoF3H8ZigTocb5bFY8bZWbpoFVwh7yiCR8xdhsAz7XuOh9QD + D2R6twyIEzG/JApz88N7z+T5d+VcDezKL43Ea4UxeCjTqyNUDpUBYeBFXjvjgOAyCdS9asXDJ3NQFj3u + 7eWCyG/FjxR45OyMr6s3S1qCYqE8RA654Uq4dOiUV/v+E9P0i1ZA9Zwg8COnA2HyDZiLYRw4dyAjC50n + z8awBBvNbbWyZ+8x10+By+GONARCbe1gDBPJloCvfKODluQ10mD+qDK5LWFyD6pfvOUYBzydXL0v2I+V + rI9Mhud5BQE9i+RQPt2P30BBYrM4HmYSNf5REGS0b5CzYdKq+iaOITA44wmPiLXwaFfGhDbZMkinYxNJ + 8CpwXxgHobQcPbhv8XegrtNyzAPsOtqHJUPeml1jm/1jYDkdM5G5hB3bDL6KhknLal9xzAN8gpMgVZHm + oKUAuwx29H420c9O/l9KHms4bC0KLFCAY6CSHr+VoHJy88lWbEjHoqoXWPzw5ZCxGKCxkslBLo22L1+6 + ahPeUj/FwgfPh8zpSzfQ0cWrwVKAjfXcWFjjPm9isWSSbx/7JEPF0cWzcYzE7dTfAmysfSLB2z0Awm1H + 8ycnjrD4N/kX4gEg8A9sAFSe4VuPvgAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkEzN0Y5NjgxNEE5MDExRTRBMzU1RUM1MkVEQTU3 + REQxIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkEzN0Y5NjgwNEE5MDExRTRBMzU1RUM1MkVEQTU3 + REQxIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MUU1QUVCQUI4RjRBRTQxMUI2QTlC + RjEwMkVGQzEyNEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4Oz1B+AAABO0lEQVRIS7WUP0sDQRDFt0snIcEiklhGJLH3k6bNp0ifYCUo + KWwMIRCx0EYxEEL+IOPO4SxzczN7d7gGfuzd7Hszd9nHOQD4V9RiStRiStQi0b68GXkgwkjzcdQigU1O + 32CC+9IjUYsENvjY7EySDHhev5skGXA3X5r8aYA3lx0wET1otYgmNMcOku+jXtMg4QJFJMb1a7uPmjUd + rVzHDfDy9pmJaZViCe5rPq7hYpgvXjPw2hNtTqBOevk+F8L0YRGQQosyHxfSf0jUegPLZwkrNedYfi6o + 9Y2RWP6cACPHYnf4XauQablfHYAxo6jt9sfwRGWgVvrVASKmdd7g2OoN4P5pVYhqbgCPmnPuzHPtua1C + s9OHyeyxEFU+IJcCb2p4zj3dKjQvrsat3jD4CwNCIcEv14/fpAfcDwXsled4Tu6+AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlGMEQ1RDBCNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 + MzBCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlGMEQ1RDBBNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 + MzBCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzFDMDRERTRENjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6zemTaAAABh0lEQVRIS7WUvUoDQRSFEwiBKPEHsRAkb+ArWIsv4CNYCSKI + jRD8a1S0m9QhdTobG5uARZogBJSkiLASFJJChQiRcJ2z2bnMZtbxCnrhY3YO556z1aSI6F9JFP+SRBEs + FFaUhoSopAyQKGIBi58jEuErcQSAhY/hyP5DL8Y7mQMcAcD8Phh+u2Tzk9cRAMz914G4wOd1BABzt/cm + LvB5HQHA3On2xQU+ryMAmB8en8UFPq8jAJjvWk/iAp/XEQDM9WZHXODzOgKAudZoiwt8XkcAMN/U78Ml + CcY7mQMcAWhz+FRc3zZFREXypwKYEiG/e+ykc1WYVRrCGUk8nGUHsyic6nKeetUK4dTESjjLDjZUlqaV + hiS8lEsh0Z1LTFYs2FBazFFwcUzB+YE+T8bffD+i4LRIwSV0jdZaO5vhHXtRPmfFgg1n81mlIQnt/W1q + bKyH34dz2XKUz1mxYBaFU5zJUG1tlXDu5TMcjuEsO5hF4exOpZWGtnLpWDiGs+xgFv9gxlmU+gIVyyIX + YCSg/AAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + 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 + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVGNUQ0RjNENEQyRDExRTRBQ0ZFOEVGNkU4Rjcw + RkEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVGNUQ0RjNDNEQyRDExRTRBQ0ZFOEVGNkU4Rjcw + RkEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzUxNUY0MjEyRDRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz7jldwbAAAEyklEQVRIS6WWDUzUdRjHoeXWVktIc74MLREMUxBQV4RYkBmL + SBwSoZIFCgULlOJFDJDxqkiAqGgoiIQ6jaFLB1EqUaC8iMgdL8cJB3fHwR13HO8Hh3x7fn+pwN01nM/2 + 2X77Pb/n+33+v/3/95zBbGOVnZM58QHhRKwgnp9KPXuQ2CtJ6ScOjGo0fcMjI93llVX55us3rqbUc49P + zDLyw9auL4iw5l+IsMY//BRujcygdcg+ug83rpzCsVhf3C6+hHg/W+R++985BtU3pey1cCCpOYQhJzo9 + 8kPX1tZcDoS0Jp2jrCgWmakhOJMVA4GwBd1KNSQ9veiUdeNifjqyMsJxveD7f8+z2rPBlg0kNZ9gJjMj + L8RqQlSegIbLX6CuYAcOBm9FHe8B2rt70SZTgNfehTphJ+paCaEYjSIJkmP24PaPnrhfsBP8okCcCbZ8 + RFLmxIuc6PTICV5Dh4IxNqSEemAA6adzwBdJ8VeDEL/XNqGkmo/iKh4HW5fWNCL7QiEqq2sw3N+Dijwf + nPx6FUjKkpjLiU6P7MDVqL/gj8nJSY4bpbcQnZyK8EOJCI2Ox3dRcY+JjkNYTAIi4w4j7+JlKBQKjI+P + 42qqJ9J832AGawkjTnR6ZPm/iXvn9+ARiWsnJjCu1YLeGshJQCKVolMs5hBLJOiSydAjl0OpUmFweBhj + ZJAfuxVJ3ub6DTJ9LVCd40Pij6AZ01IRoWVGumE5dmZEM45RjRbnolwR72Wm3yDt85W4e2o3FVLnGg1G + xsYwSvDEdxB03gEa6vJwSopOhkZHkRPhgkPbTfUbpOwwR+XxXdT9OM79EQ/lgBLNkjpsz1iMP5t/oU7H + dIoz+oeGcTbUGVHblus3SPJYgfI0LxLSIPmaL4LyHOB5bClK6gswNDLKoUucoezvx+n9W3Dg49f0G8S5 + LUfZEU8MkpC8T43YQi8UVp3kutOFenAIvep+dClUkClVOPXNZoQ6L9NvEE3uN+PdMUBvRXevCgqVmjob + gGpgEH1PwPZYTq7soy9bDolcgRNfOWL/ZhP9BpEfLsVvMW70kQ1C2qMgEyVnUiUoQ2CuPZTUra7rYYi6 + ZDi+910EvbdEv0GYkwlKIj+BijrL+jUKbdJO1LZWwD19EUrrr0Cu6tMpzhCKJcj40gEB9ov1G4RsWoLi + UBe6V7r/n70RkPMOPDJMcLXqLPc0DF3ijBaRCOneG+H31kL9BkF2i3B9nzN1qoagQ4yDlzxQUE6/lHRd + XfLeGbA9cbccwk4JHggegi8UIc3LDj7rFug3CNiwENcCt6CH3ojm9g7qqoN79HZpF9rpjjumYGu2x3I8 + 4UNU85pwv0WAox5vY7f1/xj42SxAkf/7kCmUuNfUiho+FTa3gtfaRh22o6lNxMHWbI/lKut5uFVdh7sN + jTiybQN2rpmv18DQ1+rViUJfRwia+bjXLEB1YxNqyai+VUiditDY1sHB1myP5e408FFR34Cb5WVIdLXF + Zxbz2DywJYw51WkxZ9eqebxUFyvk7rDHD24bkOhig4RZEM/4yAZhm1Ziq6lRG2mxscmm2owwdF72suOn + ZkZCTzNjuJsaYdtT4vr63E4L4xcCSYv9IXiJU30i2BxlzmzkWRHsLp8GVsNqp2aygcHfZtZtYIryU78A + AAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkUzNzJDMjE3NEFENjExRTRCNjE0OEVEQzI4MEM0 + RTZDIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkUzNzJDMjE2NEFENjExRTRCNjE0OEVEQzI4MEM0 + RTZDIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI3NUQ0QkNENDRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6PyaLfAAADMElEQVRIS6VUXUiTYRT+vi3Tzd+ps23+3KRigtiPkolEQReG + UYTkhWatpWlWGkRdddfdSPImqUAJjSIT00oxLJIk0cR+tFSyzDJtgaMkDEPkdM7ZPvm2vS6jBx6es3Pe + 8zzvtm+TohLS/ov+AACStLgEQuJyLRJWYK1yzh/+FgCoQrpnfM4fOGBhcUlIMkEVkma4H4i1y2kFcMD8 + wqKQZILKZqTqmlTAWrfvMjhgbv63Dwm0hLWQohn1eNEbzrlfPiTQAtZCKjP1GXdAIC+r4XD+9CGBFrDm + RVJ1re6pZ0GyHHMvIawauYVNCFPfvvuQQAtYC6meKXU0amNsaGN/ZR60xIf9aIgN3cpGE9OzZCZ85nEm + pGiWlLABmuJCnUOXrNB7chdct4TUo32ANDbp4NuielDpqWfePdaPX6GrohSK4uLhlCEo96YlZLbOFHzH + oJXjMSBcGn4/zQGovEDqXXtzeTb+BTrKj0J3+Q54djYP7EZdTU2MPjFSK8eieQR9QtLg6GcOQPWgqKeQ + ZyOfoK30CDw+lg2Ot3Z4VLoNqo269mCNHIa2WjYn9A1PcAAqU6m9VV3TF9psOwwPS3JgZugCdNoyocwU + jU+RlImWBpezGz0vxzkA1YOiHvPFO7Ca1kGHLQtmXp2HdutmqN+/F6JiU+h3kOpyVeHJwBgHoLIpqajm + 189HoaG4CNqsGTA1UAWth9Lg6r490PygGyLjUikgzuWqQlffCAegelDdUwLqigqhpXgjTPYeh+bCFCg2 + RkEk3vxuVz/P0c43oLP3DQegLhspNalSFxiNcLswHT48LYNbBUlQk7ebzenmyhm08w1o7xmiAP6hRZiT + 70eYkzpctUuJWdHmwWs74+F1Uz7cyE+E4ohQB5mHm9a3GywpTXzektyKduIAIsKI3ISkL4rIdYle05C9 + VrZVBmvtl7eboUyv7V4jSQdwRn8FdI72iErtCUxnIuifkJ5hUqUOq9Jr7OeCNU6bTpNVqtMcDJSldOwn + KnOk+jypJ5QANRWc0cs5SEelXr54QidfwVYAMoiHq4W/gNM6OaNCJ+diaUIqN/43+Atwg27t+9ZXBUn6 + A2MdqQeVc5pWAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjUzQzNGNDI5NEQyQzExRTQ4QkE1QUNCMEVDRDZF + MDVEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjUzQzNGNDI4NEQyQzExRTQ4QkE1QUNCMEVDRDZF + MDVEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI1NUY4OTYyQTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6IsaOmAAADF0lEQVQ4T62U/UuTURTH+0nICqRI1ERMMyNQe8N0ChqBwQhN + yvwhEgJjVCqJ/qCibZo6tzQ339h6Nre5prapUzc1XzItX1ilzuWMLLVAen+xf6DTuTxjdxsFVj58ebjc + c+7nnud7z3228DbpIaDFH/CfoqCn72DIDvNfPDM2KAqyr8PcJxqY+QBTb8kkjocXQTsKigGwfqYJHqIg + 1OxHGHvlWPx4hXB1YyA3g4CBhqst+piEnrDA3rA95vBAY1x8d7lq/DVZwm5PQZNvoKYdypSgHgbVEIh1 + cLOZzOCbSSsyRQRba6uWtcpVLbPcwlglInNUCJNWWKqABqMLCGvGlfpJELaQ/V1Vd1lujAhe0chtUrH5 + ZExnmJ85MdomEa+qZMbIEF2BHGunILSjdZwYgTt4gJqjjj0Rltml1Zq9AeL0Mn71Wn2mtDU80MIvsFTw + O+KPIoWC8BNYRIUaqrRQroJKjQOk9N+xLBF2pXJFKfnsDGYa8gS6xOO2whyMuoHaHpGzZ/pBM0IMrtXD + nT4HqNHXe0lYoogMFeQP4jbSDkCPTUyXmnNoPutSo+9WN5DEQDyeWCWnhqm4p7Oimt3b54rzmmKPVHKz + 0Xg0AU1pz87VJp+yXOfd9t3mBmLXsGrsJhSsDtF4iOWxKdpzyQNnuRW7vEUp13obFG05OVUBPtO5V1Sn + k5q4SX8ENfWA6C7xHsP981Bb2sf38ZKd4JhSuXUJHPHhg/WJnAeZFw0Xzt/w8erRtLmBnB/CSmaC599I + 2PYVRl+CXigu3R9SfCC0Pf1MZ1oqvqvjogX7gtRFJfb1n24g7GblfQcFP2fkBYm5anxqQcbLKgzyK/Df + WRTkV5+RMTg84ZrgAOHo4ZIDVNdJw67CpsVLZ5gifj97Typlq2ZFQXj8LKh5EHpnaIar8N+Al5l9Y9Vs + T7OiIAzjqaMsa6QJnBkeWvgOHdPkAuIV67PSeQpCYYZplsZ+KyyWLRyFF8D553EDbURY770J0rrYJbda + SYE4iWb9NcgpRKDrOMAWwYP6d5BTaC52zyaAWDlAm/DweL8AX9zXukfxHsIAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + 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 diff --git a/ClassDoubleScreenCompare.cs b/ClassDoubleScreenCompare.cs new file mode 100644 index 0000000..f2935da --- /dev/null +++ b/ClassDoubleScreenCompare.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using GeoScene.Globe; +using GeoScene.Data; +using GeoScene.Engine; +using System.Drawing; + +namespace Cyberpipe +{ + class ClassDoubleScreenCompare + { + public static GSOFeature getSameFeatureFromOtherGlobe(GSOFeature feature, + GSOGlobeControl globeControl1, GSOGlobeControl globeControl2,double bufferWidth,GSOGeoPolygon3D resPolygon) + { + GSOLayer layer; + GSOFeatures features = new GSOFeatures(); + + if (!feature.Dataset.Caption.StartsWith("施工")) + { + layer = feature.Dataset.Caption == "供电管线" + ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") + : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(feature, fs[i], globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + else + { + layer = feature.Dataset.Caption == "施工电力管线" + ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") + : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(fs[i], feature, globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + + return getMostSimilarFeatureFromFeatures(feature, features); + + } + + + private static GSOFeature getMostSimilarFeatureFromFeatures(GSOFeature feature, GSOFeatures features) + { + double maxLength = 0; + GSOFeature f = new GSOFeature(); + GSOGeoPolyline3D line = feature.Geometry as GSOGeoPolyline3D; + + if (features.Length == 0) return null; + if (features.Length == 1) + { + f = features[0]; + f.HighLight = true; + } + else + { + for (int m = 0; m < features.Length; m++) + { + GSOGeoPolyline3D tempSGLine = features[m].Geometry as GSOGeoPolyline3D; + + double tempLength = tempSGLine.GetSpaceLength(false, 6378137); + double lengthAbs = Math.Abs(tempLength - line.GetSpaceLength(false, 6378137)); + if (m == 0) + { + f = features[0]; + f.HighLight = true; + maxLength = lengthAbs; + } + else if (lengthAbs < maxLength) + { + f = features[m]; + f.HighLight = true; + maxLength = lengthAbs; + } + } + } + return f; + } + + private static bool isSameFeature(GSOFeature feature1, GSOFeature feature2, GSOLayer layer, double bufferWidth) + { + GSOGeoPolyline3D line = feature1.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = line.CreateBuffer(bufferWidth * 2, true, 5, true, false); + + if (bufferPolygon == null) return false; + + GSOFeatures featuresInLayer = layer.FindFeaturesInPolygon(bufferPolygon, true); + + if (featuresInLayer == null || featuresInLayer.Length <= 0) + return false; + + for (int i = 0; i < featuresInLayer.Length; i++) + { + if (featuresInLayer[i].Name == feature2.Name) + { + return true; + break; + } + } + return false; + } + + private static bool isSimilarFeature(GSOFeature srcFeature, GSOFeature dscFeature, + GSOGlobeControl globeControl1,GSOGlobeControl globeControl2,double bufferWidth) + { + GSOLayer dscLayer = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); + GSOLayer srcLayer = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); + + if (!isSameFeature(srcFeature, dscFeature, dscLayer, bufferWidth) + && !isSameFeature(dscFeature, srcFeature, srcLayer, bufferWidth)) + return false; + return true; + } + + public static void CalculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2, + out double horizonDistance, out double verticalDistance, GSOGlobeControl globeControl1, GSOGlobeControl globeControl2) + { + GSOPoint3d pntIntersect1 = new GSOPoint3d(); + GSOPoint3d pntIntersect2 = new GSOPoint3d(); + GSOPoint3d pntProIntersect1 = new GSOPoint3d(); + GSOPoint3d pntProIntersect2 = new GSOPoint3d(); + + verticalDistance = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, verticalDistance, true, "垂直", globeControl1, globeControl2); + + horizonDistance = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, horizonDistance, true, "水平", globeControl1, globeControl2); + + } + + private static GSOPoint3d LabelDistance(GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, + double distance, bool markerVisible, string label,GSOGlobeControl globeControl1,GSOGlobeControl globeControl2) + { + if (pntIntersect1 == null || pntIntersect2 == null) + return new GSOPoint3d(); + GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); + GSOPoint3ds point3ds = new GSOPoint3ds(); + point3ds.Add(pntIntersect1); + point3ds.Add(pntIntersect2); + disline.AddPart(point3ds); + + GSOGeoMarker dismarker = new GSOGeoMarker(); + GSOFeature marker = null; + GSOFeature line = null; + createLineStyle(out marker, out line, disline, pntIntersect1, pntIntersect2, distance, label, dismarker); + + line.Visible = marker.Visible = markerVisible; + globeControl1.Globe.MemoryLayer.AddFeature(line); + globeControl1.Globe.MemoryLayer.AddFeature(marker); + + globeControl2.Globe.MemoryLayer.AddFeature(line); + globeControl2.Globe.MemoryLayer.AddFeature(marker); + + return dismarker.Position; + } + + private static void createLineStyle(out GSOFeature marker, out GSOFeature line, GSOGeoPolyline3D disline, + GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) + { + GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 + style.LineColor = Color.Red; + style.LineWidth = 5; //设置线的宽度为5 + style.VertexVisible = true; //显示线的节点 + disline.Style = style; //把风格添加到线上 + disline.AltitudeMode = EnumAltitudeMode.Absolute; + line = new GSOFeature(); + line.Geometry = disline; + + dismarker.X = pntIntersect1.X; + dismarker.Y = pntIntersect1.Y; + dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; + dismarker.Text = label + distance.ToString("0.00") + "米"; + dismarker.AltitudeMode = EnumAltitudeMode.Absolute; + + GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); + GSOTextStyle styleText = new GSOTextStyle(); + styleText.IsSizeFixed = true; + styleText.ForeColor = Color.Red; + styleText.FontSize = 20; + styleMarker.TextStyle = styleText; + dismarker.Style = styleMarker; + + marker = new GSOFeature(); + marker.Geometry = dismarker; + } + + } +} diff --git a/Cyberpipe.csproj b/Cyberpipe.csproj index d8aa9c8..bcce54d 100644 --- a/Cyberpipe.csproj +++ b/Cyberpipe.csproj @@ -203,6 +203,7 @@ + @@ -1143,6 +1144,7 @@ SysRescInfoManager.cs + True True diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 123caf1..2c45db6 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -258,42 +258,25 @@ for (int i = 0; i < scLayer.GetAllFeatures().Length; i++) { GSOFeature scFeature = scLayer.GetAt(i); - if (scFeature.GetFieldAsString("所属道路") == road) + if (scFeature.GetFieldAsString("所属道路") != road) continue; + GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + + GSOFeature sgFeature = null; + GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); + + //**判断同一个Feature + if (sgFeatures.Length >= 1) { - GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); - GSOFeature sgFeature = null; - GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); - - //**判断同一个Feature - if (sgFeatures.Length >= 1) + if (sgFeature != null) { - sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); + GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; + double horizonDistance, verticalDistance; - if (sgFeature != null) - { - GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; - double horizonDistance, verticalDistance; - - CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); - GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); - } - else - { - scFeature.HighLight = true; - DataRow dr = dt.NewRow(); - dr[0] = scLayer.Caption; - dr[1] = scFeature.GetFieldAsString("编号"); - dr[2] = sgLayer.Caption; - dr[3] = "无"; - dr[4] = "无"; - dr[5] = "0.02"; - dr[6] = "无"; - dr[7] = "0.02"; - dr[8] = "未设计管段"; - dt.Rows.Add(dr); - } + CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); + GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); } else { @@ -311,6 +294,21 @@ dt.Rows.Add(dr); } } + else + { + scFeature.HighLight = true; + DataRow dr = dt.NewRow(); + dr[0] = scLayer.Caption; + dr[1] = scFeature.GetFieldAsString("编号"); + dr[2] = sgLayer.Caption; + dr[3] = "无"; + dr[4] = "无"; + dr[5] = "0.02"; + dr[6] = "无"; + dr[7] = "0.02"; + dr[8] = "未设计管段"; + dt.Rows.Add(dr); + } } } /// diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index 53946c0..fe32265 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -4,7 +4,7 @@ using GeoScene.Globe; namespace Cyberpipe -{ +{ //本类作用为:辅助GlobalControl上Feature的统计分析工具类 class FeatureStatisticsService { /// @@ -60,8 +60,8 @@ /// /// /// - /// - /// + /// + /// /// /// public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) @@ -74,6 +74,7 @@ for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; double length = line.GetSpaceLength(true, 6378137); totalLength += length; ncount += 1; @@ -114,7 +115,7 @@ for (int i = 0; i < feats.Length; i++) { double radius = feats[i].GetFieldAsDouble(fieldName); - if (radius >= min && radius <= max) + if (radius >= minValue && radius <= maxValue) { result.Add(feats[i]); } @@ -148,23 +149,22 @@ lstDiameter.Sort(); if (lstDiameter.Count > 0) { - for (int m = 0; m < lstDiameter.Count; m++) + foreach (float diameter in lstDiameter) { double totalLength = 0.00; int ncount = 0; for (int j = 0; j < feats.Length; j++) { - if (feats[j].GetFieldAsFloat("管径_毫米") == lstDiameter[m]) - { - GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } + if (Math.Abs(feats[j].GetFieldAsFloat("管径_毫米") - diameter) > 0.00001) continue; + GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = lstDiameter[m].ToString(); + featuresClass.groupFieldValue = diameter.ToString(); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -191,13 +191,13 @@ //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); - for (int j = 0; j < accessStrs.Length; j++) + foreach (string accssname in accessStrs) { - GSOFeatures feats = null; - int ncount = 0; + GSOFeatures feats; + int ncount; if (polygon == null) { - feats = flayer.GetFeatureByFieldValue("附属物名称", accessStrs[j], true); + feats = flayer.GetFeatureByFieldValue("附属物名称", accssname, true); ncount = feats.Length; } else @@ -207,14 +207,14 @@ //过滤 for (int n = 0; n < feats.Length; n++) { - if (feats[n].GetFieldAsString("附属物名称").Contains(accessStrs[j])) newfeats.Add(feats[n]); + if (feats[n].GetFieldAsString("附属物名称").Contains(accssname)) newfeats.Add(feats[n]); } ncount = newfeats.Length; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); - featuresClass.layerName = accessStrs[j]; + featuresClass.layerName = accssname; featuresClass.ncount = ncount; result.Add(featuresClass); @@ -303,6 +303,26 @@ if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); - } + } + + + /// + /// 获取globeControl上选中的管线,如果返回空则没有选中的管线 + /// + /// 地球引擎 + /// 返回一根线 + public static GSOFeature GetSelectedPipeline(GSOGlobeControl globeControl) + { + GSOFeature resFeature; + if (globeControl.Globe.SelObjectCount < 1) return null; + GSOLayer resLayer; + globeControl.Globe.GetSelectObject(0, out resFeature, out resLayer); + if (resFeature == null) return null; + + GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; + if (line1 == null) return null; + GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; + return pipeStyle1 == null ? null : resFeature; + } } } diff --git a/FrmCompareFeature.cs b/FrmCompareFeature.cs index a05e8e7..ac622c4 100644 --- a/FrmCompareFeature.cs +++ b/FrmCompareFeature.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Data; using System.Drawing; using System.Windows.Forms; @@ -11,26 +10,16 @@ { public partial class FrmCompareFeature : Office2007Form { - GSOFeature srcFeature; - GSOFeature dscFeature; - GSOGlobeControl globeControl1; - GSOGlobeControl globeControl2; - bool isSamePolyline; - - GSOLayer layerTemp; - GSOLayer layerTemp2; - GSOFeature new_feat; + private GSOFeature srcFeature, dscFeature; + private GSOGlobeControl globeControl1, globeControl2; GSOGeoPolygon3D resPolygon; - static FrmCompareFeature frm; - public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2, int width) + public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, int width) { if (frm == null) { - frm = new FrmCompareFeature(_globeControl1, _globeControl2, _layerTemp, _layerTemp2); - + frm = new FrmCompareFeature(_globeControl1, _globeControl2); frm.Location = new Point((width - frm.Width)/2, 50); frm.Show(_globeControl1.Parent); } @@ -41,8 +30,7 @@ } } - public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2) + public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2) { globeControl1 = _globeControl1; globeControl2 = _globeControl2; @@ -50,99 +38,35 @@ globeControl1.Globe.Action = EnumAction3D.SelectObject; globeControl2.Globe.Action = EnumAction3D.SelectObject; - layerTemp = _layerTemp; - layerTemp2 = _layerTemp2; globeControl1.MouseClick += globeControl1_MouseClick; globeControl2.MouseClick += globeControl2_MouseClick; } + private void invalParam() + { + if (srcFeature == null || dscFeature == null) + { + MessageBox.Show("请选择要对比的管段!", "提示"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) + { + MessageBox.Show("请选择同种类型图层!"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type || + srcFeature.Geometry.Type != EnumGeometryType.GeoPolyline3D) + return; + } + private void buttonAnalysis_Click(object sender, EventArgs e) { + invalParam(); + dataGridViewX1.DataSource = null; - - double bufferWidth = Convert.ToDouble(textBox1.Text); - - if (srcFeature == null || dscFeature == null) - MessageBox.Show("请选择要对比的管段!", "提示"); - else - { - if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) - MessageBox.Show("请选择同种类型图层!"); - else if (srcFeature.Geometry.Type == dscFeature.Geometry.Type && - srcFeature.Geometry.Type == EnumGeometryType.GeoPolyline3D) - { - lineLayerCompare(srcFeature, dscFeature, bufferWidth); - if (!isSamePolyline) - MessageBox.Show("实测管段与施工管段非同一条管段,请选择同一管段进行比较!", "提示"); - else - { - lineFeatureCompare(srcFeature, dscFeature); - globeControl1.Globe.Action = EnumAction3D.ActionNull; - globeControl2.Globe.Action = EnumAction3D.ActionNull; - } - } - else - MessageBox.Show("无法处理该类型图层!"); - } + lineFeatureCompare(srcFeature, dscFeature); } - - /// - /// 在容差范围内判断是否同一根管段 - /// - /// - /// - /// - /// - private bool lineLayerCompare(GSOFeature srcFeature, GSOFeature dscFeature, double bufferWidth) - { - isSamePolyline = false; - - GSOGeoPolyline3D srcLine = srcFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D srcBufferPolygon = srcLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer dsc = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); - - if (srcBufferPolygon != null) - { - GSOFeatures featuresInSrcLayer = dsc.FindFeaturesInPolygon(srcBufferPolygon, true); - - if (featuresInSrcLayer != null && featuresInSrcLayer.Length > 0) - { - for (int i = 0; i < featuresInSrcLayer.Length; i++) - { - if (featuresInSrcLayer[i].Name == dscFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D dscBufferPolygon = dscLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer src = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); - - if (dscBufferPolygon != null) - { - GSOFeatures featuresInDscLayer = src.FindFeaturesInPolygon(dscBufferPolygon, true); - - if (featuresInDscLayer != null && featuresInDscLayer.Length > 0) - { - for (int i = 0; i < featuresInDscLayer.Length; i++) - { - if (featuresInDscLayer[i].Name == srcFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - return isSamePolyline; - } - /// /// 分析两根管段的具体差异 /// @@ -156,8 +80,10 @@ GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; double dscLineLength = dscLine.GetSpaceLength(false, 6378137); - double horizonDistance = calculateDistance(srcLine, dscLine,false); - double verticalDistance = calculateDistance(srcLine, dscLine,true); + double horizonDistance, verticalDistance; + + ClassDoubleScreenCompare.CalculateDistance(srcLine, dscLine, out horizonDistance, + out verticalDistance,globeControl1,globeControl2); DataTable dt = new DataTable(); dt.Columns.Add("数据名称"); @@ -189,6 +115,98 @@ dt.Rows.Add(dscRow); dataGridViewX1.DataSource = dt; + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) + { + globeControl1.Globe.MemoryLayer.RemoveAllFeature(); + globeControl2.Globe.MemoryLayer.RemoveAllFeature(); + + GSOFeature new_feat = new GSOFeature(); + resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); + resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; + new_feat.Geometry = resPolygon; + + globeControl1.Globe.MemoryLayer.AddFeature(new_feat); + globeControl2.Globe.MemoryLayer.AddFeature(new_feat); + + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + public static void clearFeatureHighLight(GSOGlobeControl glb) + { + for (int i = 0; i < glb.Globe.Layers.Count; i++) + { + GSOLayer layer = glb.Globe.Layers[i]; + if (!(layer is GSOFeatureLayer)) continue; + GSOFeatures feats = layer.GetAllFeatures(); + for (int j = 0; j < feats.Length; j++) + { + feats[j].HighLight = false; + } + } + } + + void globeControl1_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl1.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl1.Globe.Action != EnumAction3D.SelectObject || + globeControl1.Globe.SelectedObject == null) + return; + GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + srcFeature = globeControl1.Globe.SelectedObject; + dscFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(srcFeature, + globeControl1,globeControl2,bufferWidth,resPolygon); + + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } + + void globeControl2_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl2.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl2.Globe.Action != EnumAction3D.SelectObject || + globeControl2.Globe.SelectedObject == null) + return; + + GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + dscFeature = globeControl2.Globe.SelectedObject; + srcFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(dscFeature, + globeControl1, globeControl2, bufferWidth, resPolygon); + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } private void FrmCompareFeature_FormClosing(object sender, FormClosingEventArgs e) @@ -198,322 +216,5 @@ frm = null; } - private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) - { - new_feat = new GSOFeature(); - resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); - resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; - new_feat.Geometry = resPolygon; - - layerTemp.AddFeature(new_feat); - layerTemp2.AddFeature(new_feat); - globeControl1.Refresh(); - globeControl2.Refresh(); - } - - private GSOLayer getSameLayer(GSOFeature feature) - { - GSOLayer layer = null; - if (!feature.Dataset.Caption.StartsWith("施工")) - { - layer = feature.Dataset.Caption == "供电管线" - ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") - : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); - } - else - { - layer = feature.Dataset.Caption == "施工电力管线" - ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") - : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); - } - - return layer; - } - - /// - /// 地球1中点击地球2中同步添加缓冲区 - /// - /// - /// - void globeControl1_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl1.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl1.Globe.Action == EnumAction3D.SelectObject && - globeControl1.Globe.SelectedObject != null) - { - GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - addPologyToGlobeControl(line, bufferWidth); - } - - srcFeature = globeControl1.Globe.SelectedObject; - GSOLayer layers = getSameLayer(srcFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = srcFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(srcFeature, features[i], Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - listFeatures.Add(features[i]); - } - calculate(out maxLength, out dscFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - /// - /// 地球2中点击地球1中同步添加缓冲区 - /// - /// - /// - void globeControl2_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl2.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl2.Globe.Action != EnumAction3D.SelectObject || - globeControl2.Globe.SelectedObject == null) - return; - else - { - GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - - addPologyToGlobeControl(line, bufferWidth); - } - - dscFeature = globeControl2.Globe.SelectedObject; - //双屏同时选中同一管段 - GSOLayer layers = getSameLayer(dscFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = dscFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(features[i], dscFeature, Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - { - listFeatures.Add(features[i]); - } - } - calculate(out maxLength, out srcFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - private void calculate(out double maxLength, out GSOFeature feature, GSOFeatures listFeatures, - GSOGeoPolyline3D scLine) - { - maxLength = 0; - feature=new GSOFeature(); - if (listFeatures.Length == 0) - feature = null; - else - { - if (listFeatures.Length == 1) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - } - else - { - for (int m = 0; m < listFeatures.Length; m++) - { - GSOGeoPolyline3D tempSGLine = listFeatures[m].Geometry as GSOGeoPolyline3D; - - double tempLength = tempSGLine.GetSpaceLength(false, 6378137); - double lengthAbs = Math.Abs(tempLength - scLine.GetSpaceLength(false, 6378137)); - if (m == 0) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - maxLength = lengthAbs; - } - else if (lengthAbs < maxLength) - { - feature = listFeatures[m]; - listFeatures[m].HighLight = true; - maxLength = lengthAbs; - } - } - } - } - } - - /// - /// 计算距离 - /// - /// - /// - /// - double calculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2,bool isVertical) - { - GSOPoint3d pntIntersect1 = new GSOPoint3d(); - GSOPoint3d pntIntersect2 = new GSOPoint3d(); - GSOPoint3d pntProIntersect1 = new GSOPoint3d(); - GSOPoint3d pntProIntersect2 = new GSOPoint3d(); - double dDist = 0; - if (isVertical) - { - dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "垂直"); - } - else - { - dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "水平"); - } - - return dDist; - } - - /// - /// 清除所有高亮Feature - /// - /// - private void clearFeatureHighLight(GSOGlobeControl glb1,GSOGlobeControl glb2) - { - layerTemp.RemoveAllFeature(); - layerTemp2.RemoveAllFeature(); - //清除gbl1中高亮 - for (int i = 0; i < glb1.Globe.Layers.Count; i++) - { - GSOLayer layer = glb1.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - //清除gbl2中高亮 - for (int i = 0; i < glb2.Globe.Layers.Count; i++) - { - GSOLayer layer = glb2.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - } - - /// - /// 添加标注 - /// - /// - /// - /// - /// - /// - /// - private GSOPoint3d LabelDistance(GSOLayer markerLayer, GSOLayer markerLayer2, - GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, bool markerVisible,string label) - { - if (pntIntersect1 == null || pntIntersect2 == null) - return new GSOPoint3d(); - GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); - GSOPoint3ds point3ds = new GSOPoint3ds(); - point3ds.Add(pntIntersect1); - point3ds.Add(pntIntersect2); - disline.AddPart(point3ds); - - GSOGeoMarker dismarker = new GSOGeoMarker(); - GSOFeature marker = null; - GSOFeature line = null; - createLineStyle(out marker, out line,disline, pntIntersect1, pntIntersect2, distance, label, dismarker); - - line.Visible = marker.Visible = markerVisible; - markerLayer.AddFeature(line); - markerLayer.AddFeature(marker); - - markerLayer2.AddFeature(line); - markerLayer2.AddFeature(marker); - - return dismarker.Position; - } - /// - /// 控制标注和字体的颜色 - /// - /// - /// - /// - /// - /// - /// - /// - /// - private void createLineStyle(out GSOFeature marker,out GSOFeature line,GSOGeoPolyline3D disline, - GSOPoint3d pntIntersect1,GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) - { - GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 - style.LineColor = Color.Red; - style.LineWidth = 5; //设置线的宽度为5 - style.VertexVisible = true; //显示线的节点 - disline.Style = style; //把风格添加到线上 - disline.AltitudeMode = EnumAltitudeMode.Absolute; - line=new GSOFeature(); - line.Geometry = disline; - - dismarker.X = pntIntersect1.X; - dismarker.Y = pntIntersect1.Y; - dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; - dismarker.Text = label + distance.ToString("0.00") + "米"; - dismarker.AltitudeMode = EnumAltitudeMode.Absolute; - - GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); - GSOTextStyle styleText = new GSOTextStyle(); - styleText.IsSizeFixed = true; - styleText.ForeColor = Color.Red; - styleText.FontSize = 20; - styleMarker.TextStyle = styleText; - dismarker.Style = styleMarker; - - marker=new GSOFeature(); - marker.Geometry = dismarker; - } - } } diff --git a/FrmHotFuncStat.cs b/FrmHotFuncStat.cs index 84131ef..f313b20 100644 --- a/FrmHotFuncStat.cs +++ b/FrmHotFuncStat.cs @@ -58,14 +58,11 @@ DataTable table = OledbHelper.QueryTable(sql); - if (table != null) + if (table == null) return; + for (int i = 0; i < table.Rows.Count; i++) { - for (int i = 0; i < table.Rows.Count; i++) - { - userLists.Items.Add(table.Rows[i][0].ToString()); - } + userLists.Items.Add(table.Rows[i][0].ToString()); } - } //统计结果 private void statBtn_Click(object sender, EventArgs e) diff --git a/FrmLayerControl.cs b/FrmLayerControl.cs index 8586041..8fbce97 100644 --- a/FrmLayerControl.cs +++ b/FrmLayerControl.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Windows.Forms; using DevComponents.DotNetBar; using GeoScene.Data; @@ -13,10 +14,10 @@ GSOGlobeControl globeControl1; GSOGlobeControl globeControl2; - TreeNode terrainManagerNode = null; - TreeNode layerManagerNode = null; - TreeNode terrainManagerNode1 = null; - TreeNode layerManagerNode1 = null; +// TreeNode terrainManagerNode = null; +// TreeNode layerManagerNode = null; +// TreeNode terrainManagerNode1 = null; +// TreeNode layerManagerNode1 = null; public FrmLayerControl(GSOGlobeControl ctl1,GSOGlobeControl ctl2) { @@ -25,14 +26,14 @@ globeControl2 = ctl2; } - private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) - { - treeNode=new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - } +// private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) +// { +// treeNode=new TreeNode(); +// treeNode.ImageIndex = 0; +// treeNode.SelectedImageIndex = 0; +// treeNode.Checked = false; +// treeNode.Text = strTreeNodeText; +// } // private void initTreeView() // { @@ -51,234 +52,258 @@ // layerTree2.Nodes.Add(terrainManagerNode); // } - #region wxl重构树形结构代码 + + - private TreeNode treeNode(string strTreeNodeText) - { - TreeNode treeNode = new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - return treeNode; - } -// private void appendToParent(TreeNodeCollection treeNodeCollection, ) - #endregion - private void initTreeView() +// private void initNode(string nodeName) +// { +// TreeNode nodeGroupElse1 = new TreeNode(); +// nodeGroupElse1.Text = nodeName; +// layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); +// +// TreeNode nodeGroupElse = new TreeNode(); +// nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; +// layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); +// } + +// private void initTreeNode(XmlNodeList Params) +// { +// foreach (XmlNode paramsNode in Params) //layers +// { +// foreach (XmlNode layerNode in paramsNode) //layer +// { +// initNode(layerNode.Attributes["label"].Value); +// } +// } +// +// initNode("基础图层"); +// initNode("其他"); +// } + +// private void FrmLayerControl_Load(object sender, EventArgs e) +// { +// +// initTreeView(); +// try +// { +// XmlDocument doc = new XmlDocument(); +// doc.Load(Application.StartupPath + "\\双屏设置.xml"); +// XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// +// initTreeNode(Params); +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// +// RefreshLayerAndTerrainTree(); +// } + private void FrmLayerControl_Load(object sender, EventArgs e) { layerTree1.Nodes.Clear(); layerTree2.Nodes.Clear(); - - //加载layertree2 - initLayerTree(out layerManagerNode1, "图层管理"); - layerTree1.Nodes.Add(layerManagerNode1); - initLayerTree(out terrainManagerNode1, "地形管理"); - layerTree1.Nodes.Add(terrainManagerNode1); - - initLayerTree(out layerManagerNode, "图层管理"); - layerTree2.Nodes.Add(layerManagerNode); - initLayerTree(out terrainManagerNode, "地形管理"); - layerTree2.Nodes.Add(terrainManagerNode); + TreeUtils.InitLayerTree(globeControl1, layerTree1, "实测数据"); + TreeUtils.InitLayerTree(globeControl2, layerTree2, "施工数据"); } - private void initNode(string nodeName) - { - TreeNode nodeGroupElse1 = new TreeNode(); - nodeGroupElse1.Text = nodeName; - layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); + #region wxl重构树形结构代码 - TreeNode nodeGroupElse = new TreeNode(); - nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; - layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); - } + /// + /// 构造tree,最多解析三层,可放在工具类中 - private void initTreeNode(XmlNodeList Params) - { - foreach (XmlNode paramsNode in Params) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - initNode(layerNode.Attributes["label"].Value); - } - } + /// 所属地球 + /// 要加载的树 + /// 数据来源,实测数据/施工数据/规划数据/红线数据,为空则展示全部 +// private void initTree(GSOGlobeControl gsoGlobeControl,TreeView treeView, string viewDatasrc) +// { +// treeView.Nodes.Clear(); +// LayerConfig layerConfig = Utility.layerConfig; +// List datasrcs = layerConfig.datasrcs; +// foreach (DataSrc datasrc in datasrcs) +// { +// if (viewDatasrc != null && !viewDatasrc.Trim().Equals("") && !datasrc.label.Equals(viewDatasrc)) continue; +// TreeNode rootNode = treeView.Nodes.Add(datasrc.label); +// List layerTypes = datasrc.layertypes; +// foreach (LayerType layerType in layerTypes) +// { +// TreeNode secNode = rootNode.Nodes.Add(layerType.label); +// List layers = layerType.layers; +// foreach (Layer layer in layers) +// { +// GSOLayer gsoLayer = gsoGlobeControl.Globe.Layers.GetLayerByCaption(layer.layer); +// if (gsoLayer == null) continue;//将不存在的去除 +// TreeNode node = new TreeNode(); +// node.Tag = gsoLayer; +// node.Text = layer.label; +// node.Checked = gsoLayer.Visible; +// if (gsoLayer.Visible) +// { +// secNode.Checked = true; +// rootNode.Checked = true; +// } +// secNode.Nodes.Add(node); +// } +// } +// } +// } - initNode("基础图层"); - initNode("其他"); - } + #endregion - private void FrmLayerControl_Load(object sender, EventArgs e) - { - initTreeView(); - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(Application.StartupPath + "\\双屏设置.xml"); - XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, +// TreeView layerTree) +// { +// try +// { +// for (int i = 0; i < nLayerCount; i++) +// { +// GSOLayer layer = globcontrol.Globe.Layers[i]; +// if (layer == null) continue; +// string layerName = layer.Name; +// TreeNode node = new TreeNode(); +// node.Tag = layer; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = layer.Caption; +// node.Checked = layer.Visible; +// +// bool isContains = false; +// for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) +// { +// if (!layerName.Contains("fttp:")) +// { +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || +// layerName.Contains("施工") || +// layerName.Contains("规划")) continue; +// break; +// case "layerTree2": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[j].Nodes.Add(node); +// isContains = true; +// break; +// } +// else +// { +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); +// isContains = true; +// break; +// } +// } +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || +// layerName.Contains("标注") || +// isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || +// layerName.Contains("景观") || layerName.Contains("红线")) +// continue; +// break; +// case "layerTree2": +// if (isContains != false || layerName.Contains("tempLgdData2")) +// continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); +// } +// +// for (int i = 0; i < nTerrainCount; i++) +// { +// GSOTerrain terrain = globcontrol.Globe.Terrains[i]; +// if (terrain == null) continue; +// TreeNode node = new TreeNode(); +// node.Tag = terrain; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = terrain.Caption; +// node.Checked = terrain.Visible; +// switch (layerTree.Name) +// { +// case "layerTree1": +// terrainManagerNode1.Nodes.Add(node); +// break; +// case "layerTree2": +// terrainManagerNode.Nodes.Add(node); +// break; +// default: +// break; +// } +// } +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// } - initTreeNode(Params); - } - catch (Exception ex) - { - LogError.PublishError(ex); - } +// private void initTreeNodeCheckedStatus(TreeView layerTreeView) +// { +// //节点选中状态控制 +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// if (node.Checked != true) continue; +// layerTreeView.Nodes[0].Checked = true; +// break; +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOTerrain layer = childNode.Tag as GSOTerrain; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// } - RefreshLayerAndTerrainTree(); - } - - private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, - TreeView layerTree) - { - try - { - for (int i = 0; i < nLayerCount; i++) - { - GSOLayer layer = globcontrol.Globe.Layers[i]; - if (layer == null) continue; - string layerName = layer.Name; - TreeNode node = new TreeNode(); - node.Tag = layer; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = layer.Caption; - node.Checked = layer.Visible; - - bool isContains = false; - for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) - { - if (!layerName.Contains("fttp:")) - { - switch (layerTree.Name) - { - case "layerTree1": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || - layerName.Contains("施工") || - layerName.Contains("规划")) continue; - break; - case "layerTree2": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[j].Nodes.Add(node); - isContains = true; - break; - } - else - { - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); - isContains = true; - break; - } - } - switch (layerTree.Name) - { - case "layerTree1": - if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || - layerName.Contains("标注") || - isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || - layerName.Contains("景观") || layerName.Contains("红线")) - continue; - break; - case "layerTree2": - if (isContains != false || layerName.Contains("tempLgdData2")) - continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); - } - - for (int i = 0; i < nTerrainCount; i++) - { - GSOTerrain terrain = globcontrol.Globe.Terrains[i]; - if (terrain == null) continue; - TreeNode node = new TreeNode(); - node.Tag = terrain; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = terrain.Caption; - node.Checked = terrain.Visible; - switch (layerTree.Name) - { - case "layerTree1": - terrainManagerNode1.Nodes.Add(node); - break; - case "layerTree2": - terrainManagerNode.Nodes.Add(node); - break; - default: - break; - } - } - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - - private void initTreeNodeCheckedStatus(TreeView layerTreeView) - { - //节点选中状态控制 - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - if (node.Checked != true) continue; - layerTreeView.Nodes[0].Checked = true; - break; - } - - foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOTerrain layer = childNode.Tag as GSOTerrain; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - } - - void exPandTreeNode() - { - layerManagerNode1.Expand(); - terrainManagerNode1.Expand(); - layerManagerNode.Expand(); - terrainManagerNode.Expand(); - } +// void exPandTreeNode() +// { +// layerManagerNode1.Expand(); +// terrainManagerNode1.Expand(); +// layerManagerNode.Expand(); +// terrainManagerNode.Expand(); +// } /// /// 刷新节点树 /// - private void RefreshLayerAndTerrainTree() - { - int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 - int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 - addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); - initTreeNodeCheckedStatus(layerTree1); - - int nLayerCount = globeControl2.Globe.Layers.Count; - int nTerrainCount = globeControl2.Globe.Terrains.Count; - addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); - initTreeNodeCheckedStatus(layerTree2); - - // 展开 - exPandTreeNode(); - } +// private void RefreshLayerAndTerrainTree() +// { +// int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 +// int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 +// addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); +// initTreeNodeCheckedStatus(layerTree1); +// +// int nLayerCount = globeControl2.Globe.Layers.Count; +// int nTerrainCount = globeControl2.Globe.Terrains.Count; +// addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); +// initTreeNodeCheckedStatus(layerTree2); +// +// // 展开 +// exPandTreeNode(); +// } /// /// 节点树复选框选中状态改变事件处理 @@ -289,144 +314,132 @@ { if (e.Action != TreeViewAction.Unknown) { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } + TreeUtils.TreeNodeCheckedChange(globeControl2,e.Node); + } + } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree2(e.Node, e.Node.Checked); + private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) + { + if (e.Action != TreeViewAction.Unknown) + { + TreeUtils.TreeNodeCheckedChange(globeControl1, e.Node); } } + + +// private void layerTree2_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree2(e.Node, e.Node.Checked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree1(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree1(childNode, isChecked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree2(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree2(childNode, isChecked); +// } +// } /// /// 节点树选中状态改变事件 /// /// /// - private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) - { - if (e.Action != TreeViewAction.Unknown) - { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } +// private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree1(e.Node, e.Node.Checked); +// } +// } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree1(e.Node, e.Node.Checked); - } - } - /// - /// 改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 - /// - /// - private void CheckParentNode(TreeNode curNode) - { - bool bChecked = false; - - if (curNode.Parent != null) - { - foreach (TreeNode node in curNode.Parent.Nodes) - { - if (node.Checked) - { - bChecked = true; - break; - } - } - if (bChecked) - { - curNode.Parent.Checked = true; - CheckParentNode(curNode.Parent); - } - else - { - curNode.Parent.Checked = false; - CheckParentNode(curNode.Parent); - } - } - } } } diff --git a/FrmMetadata.cs b/FrmMetadata.cs index 4d0d5cb..bb7c46c 100644 --- a/FrmMetadata.cs +++ b/FrmMetadata.cs @@ -12,12 +12,8 @@ { public partial class FrmMetadata : Office2007Form { - List pipelineLayerNames = new List();//线图层名称 - List workwellLayerNames = new List();//工井图层名称 - List valueLayerNames = new List();//阀门图层名称 - List instrumenLayerNames = new List();//附属物图层名称 - string filename = Utility.filename; - DataSet dataSet = new DataSet(); + + bool selectedLayer; public FrmMetadata() @@ -25,308 +21,33 @@ InitializeComponent(); loadTreeView(layerTree); } - private void FrmMetadata_Load(object sender, EventArgs e) - { - //this.ntLblC.Text = "nn"; - // loadTreeView(layerTree); - } private void loadTreeView(TreeView tv)//构建图层树 { - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - //tv.ShowPlusMinus = false; - - //tv.Nodes.Clear(); - tv.ShowLines = true; - // tv.ImageList = imageList1; - tv.CheckBoxes = false; - #region 三级 - - //foreach (XmlNode paramsNode in Params1) //layers - //{ - // foreach (XmlNode layerNode in paramsNode) //layer - // { - // TreeNode nodelayer = new TreeNode(); - // string layerName = layerNode.Attributes["label"].Value; - // nodelayer.Text = layerName; - - // if (layerNode.HasChildNodes != false) - // { - // tv.Nodes.Add(nodelayer); - // foreach (XmlNode layerchildNode in layerNode) //layerchild - // { - // if (layerchildNode.Name == "layerchild") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["type"].Value; - // string layerchildName = layerchildNode.Attributes["label"].Value; - // if (layerType == "locaserver") - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - - // } - // else - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // if (layerchildNode.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = boollayer; - // nodelayer.Nodes.Add(nodelayerchild); - // } - // } - // else if (layerchildNode.Name == "layertype") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["label"].Value; - // nodelayerchild.Text = layerType; - // nodelayerchild.Tag = layerType; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - // if (layerchildNode.HasChildNodes == true) - // { - // foreach (XmlNode childNodeLayer in layerchildNode) - // { - // TreeNode nodelayerchild1 = new TreeNode(); - // string layerName1 = childNodeLayer.Attributes["layer"].Value; - // string layerchildName = childNodeLayer.Attributes["label"].Value; - // string layerType1 = childNodeLayer.Attributes["type"].Value; - // if (childNodeLayer.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild1.Text = layerchildName; - // nodelayerchild1.Tag = layerType1 + "|" + layerName1; - // nodelayerchild1.Checked = boollayer; - // nodelayerchild.Nodes.Add(nodelayerchild1); - // } - // } - // } - - // } - // } - // else - // { - // tv.Nodes.Add(nodelayer); - // } - // } - - //} - - #endregion - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - TreeNode nodelayer = new TreeNode(); - string layerName = layerNode.Attributes["label"].Value; - nodelayer.Text = layerName; - - if (layerNode.HasChildNodes) - { - tv.Nodes.Add(nodelayer); - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - if (layerchildNode.Name == "layerchild") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["type"].Value; - string layerchildName = layerchildNode.Attributes["label"].Value; - if (layerType == "locaserver") - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - - } - else - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - if (layerchildNode.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - //nodelayerchild.Checked = boollayer; - nodelayer.Nodes.Add(nodelayerchild); - } - } - else if (layerchildNode.Name == "layertype") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["label"].Value; - nodelayerchild.Text = layerType; - nodelayerchild.Tag = layerType; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode) - { - if (childNodeLayer.HasChildNodes) - { - TreeNode nodelayerchild2 = new TreeNode(); - string layer = childNodeLayer.Attributes["label"].Value; - nodelayerchild2.Text = layer; - nodelayerchild2.Tag = layer; - nodelayerchild2.Checked = true; - nodelayerchild.Nodes.Add(nodelayerchild2); - foreach (XmlNode n in childNodeLayer) - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = n.Attributes["layer"].Value; - string layerchildName = n.Attributes["label"].Value; - string layerType1 = n.Attributes["type"].Value; - if (n.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (n.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (n.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (n.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild2.Nodes.Add(nodelayerchild1); - - } - } - else - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = childNodeLayer.Attributes["layer"].Value; - string layerchildName = childNodeLayer.Attributes["label"].Value; - string layerType1 = childNodeLayer.Attributes["type"].Value; - if (childNodeLayer.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild.Nodes.Add(nodelayerchild1); - - } - } - } - } - - } - } - else - { - tv.Nodes.Add(nodelayer); - } - } - - } - if (tv.Nodes.Count > 0) - { - //tv.Nodes[0].Expand(); - if (tv.Nodes.Count > 0) - { - foreach (TreeNode node in tv.Nodes) - { - //node.Expand(); - } - } - } - //tv.ExpandAll(); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } + //tv.ShowPlusMinus = false; + //tv.Nodes.Clear(); + // tv.ImageList = imageList1; + tv.ShowLines = true; + tv.CheckBoxes = false; + TreeUtils.InitLayerTree(null, tv, null); } - + /// + /// 点击父节点则展开,点击子节点则编辑元数据 + /// + /// + /// private void layerTree_AfterSelect(object sender, TreeViewEventArgs e) { - String layername = layerTree.SelectedNode.Text; - if (layerTree.SelectedNode.GetNodeCount(true) == 0) { - searchLayerInfo(layername); - - selectedLayer = true; - clearBtn.Hide(); - completeBtn.Hide(); + String layername = e.Node.Text; + if (e.Node.GetNodeCount(true) != 0) + { //点击父节点,则展开 + e.Node.Expand(); + return; } + searchLayerInfo(layername); + selectedLayer = true; + clearBtn.Hide(); + completeBtn.Hide(); } //查询元数据 private void searchLayerInfo(String layername) { @@ -335,8 +56,6 @@ + " casic_metadatalayer where casic_metadatacontent.\"LAYERID\" = casic_metadatalayer.\"LAYERID\" and casic_metadatalayer.\"LAYERNAME\"='" + layername+"'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; - if (table != null && table.Rows.Count > 0) { groupBox1.Text = layername; @@ -400,8 +119,6 @@ //判断此时layerTree有没有选中的图层 if (selectedLayer)//有选中的图层,获得其名 { - string name = layerTree.SelectedNode.Text; - OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "支持格式(*.xml)|*.xml|XML数据(*.xml)|"; dlg.Multiselect = true; @@ -419,31 +136,24 @@ //读入元数据 private void AddXMLMDdata(string strFilePath) { - try - { - dataSet.Clear(); //清空数据集中的内容 - dataSet.ReadXml(strFilePath); //读取XML文件中的内容 + DataSet dataSet = new DataSet(); + dataSet.ReadXml(strFilePath); //读取XML文件中的内容 - //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); - string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); - string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); - string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); - string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); + //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); + string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); + string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); + string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); + string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); - //this.titleLbl.Text = attrtitle; - consLblC.Text = attrcons; - descLblC.Text = attrdesc; - authorLblC.Text = attrauthor; - ntLblC.Text = attrnt; - //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); + //this.titleLbl.Text = attrtitle; + consLblC.Text = attrcons; + descLblC.Text = attrdesc; + authorLblC.Text = attrauthor; + ntLblC.Text = attrnt; + //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); - completeBtn.Visible = true; - //this.clearBtn.Visible = true; - } - catch (Exception e) - { - - } + completeBtn.Visible = true; + //this.clearBtn.Visible = true; } //新建/编辑元数据 private void editBtn_Click(object sender, EventArgs e) @@ -509,11 +219,7 @@ string sql = "select \"LAYERID\" from casic_metadatalayer where \"LAYERNAME\" = '" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - if (table != null && table.Rows.Count > 0)//已有该图层,属于编辑 - { - return false; - } - return true; + return table == null || table.Rows.Count <= 0; } //保存元数据 private void saveData(String method,String layername,String cons,String desc,String author,String nt) { @@ -539,17 +245,16 @@ string insertSQL = "insert into casic_metadatalayer values ('" + layerid + "','" + layername + "')";//+ string insertSQL2 = "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','" + desc + "','" + author + "','" + nt + "')"; // "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','"+desc+"','"+author+"','"+nt+"')"; - if ((OledbHelper.sqlExecuteNonQuery(insertSQL) > 0)&&(OledbHelper.sqlExecuteNonQuery(insertSQL2)>0)) - { - MessageBox.Show("保存元数据成功!"); + if ((OledbHelper.sqlExecuteNonQuery(insertSQL) <= 0) || + (OledbHelper.sqlExecuteNonQuery(insertSQL2) <= 0)) return; + MessageBox.Show("保存元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } else { //更新 string layeridSQL = "select layerid from casic_metadatalayer where LAYERNAME='"+layername+"'"; @@ -561,16 +266,14 @@ + "',casic_metadatacontent.MDAUTHOR ='" + author.Trim() + "',casic_metadatacontent.NT ='" + nt.Trim() + "' where casic_metadatacontent.LAYERID='" + layerid + "'"; - if (OledbHelper.sqlExecuteNonQuery(updateSQL) > 0) - { - MessageBox.Show("更新元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + if (OledbHelper.sqlExecuteNonQuery(updateSQL) <= 0) return; + MessageBox.Show("更新元数据成功!"); + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } } diff --git a/FrmMetadataStat.cs b/FrmMetadataStat.cs index cb19f84..c3c1359 100644 --- a/FrmMetadataStat.cs +++ b/FrmMetadataStat.cs @@ -2,16 +2,16 @@ using System.Collections; using System.Collections.Generic; using System.Data; +using System.Linq; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; -using System.Xml; using DevComponents.DotNetBar; namespace Cyberpipe { public partial class FrmMetadataStat : Office2007Form { - Dictionary dic = new Dictionary(); + public FrmMetadataStat() { InitializeComponent(); @@ -22,7 +22,7 @@ string sql = "select LAYERNAME from casic_metadataLayer where LAYERNAME like '%" + keywordsTxt.Text.Trim() + "%'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; + int num = 0; resultList.Clear(); consLblC.Text = ""; @@ -32,6 +32,7 @@ if (table != null && table.Rows.Count > 0) { + num = table.Rows.Count; for (int i = 0; i < num;i++ ) { resultList.Items.Add(table.Rows[i][0].ToString()); @@ -56,7 +57,8 @@ int metadataLayernum = statistMDLayer(); int nomdLayernum = layernum - metadataLayernum; //MessageBox.Show("共有多少层?" + layernum.ToString()+"=="+metadataLayernum.ToString()+"=="+nomdLayernum.ToString()); - dic.Clear(); +// dic.Clear(); + Dictionary dic = new Dictionary(); dic.Add("已建",metadataLayernum); dic.Add("未建", nomdLayernum); @@ -74,11 +76,9 @@ foreach (string key in dic.Keys) { - if (dic[key] != 0) - { - xlist.Add(key); - ylist.Add(dic[key]); - } + if (dic[key] == 0) continue; + xlist.Add(key); + ylist.Add(dic[key]); } chart1.Series[0].Points.DataBindXY(xlist, ylist); @@ -89,73 +89,15 @@ string sql = "select * from casic_metadataLayer"; DataTable table = OledbHelper.QueryTable(sql); - mdlayernum = table.Rows.Count; + if(table!=null)mdlayernum = table.Rows.Count; return mdlayernum; } //统计有多少个图层 - private int statistLayer() { - int layernum = 0; - - string filename = Utility.filename; - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - //MessageBox.Show(layerNode.Attributes["label"].Value); - - if (layerNode.HasChildNodes) - { - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - //MessageBox.Show(layerchildNode.Attributes["label"].Value); - if (layerchildNode.Name == "layerchild") - { - layernum++; - } - else if (layerchildNode.Name == "layertype") - { - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode)//layertype下的layerchild - { - //MessageBox.Show(childNodeLayer.Attributes["label"].Value); - if (childNodeLayer.HasChildNodes) - { - - foreach (XmlNode n in childNodeLayer) - { - layernum++; - } - } - else - { - - layernum++; - } - } - } - } - - } - } - } - - } - - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - return layernum; + private int statistLayer() + { + List datasrcs = Utility.layerConfig.datasrcs; + return datasrcs.SelectMany(datasrc => datasrc.layertypes).Sum(layerType => layerType.layers.Count); } //选择list @@ -174,7 +116,6 @@ + "join casic_metadatalayer on casic_metadatalayer.LAYERID = casic_metadatacontent.LAYERID " + "where casic_metadatalayer.LAYERNAME='" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; //MessageBox.Show(num.ToString()); if (table != null && table.Rows.Count > 0) { @@ -192,10 +133,5 @@ ntLblC.Text = ""; } } - - private void buttonX1_Click(object sender, EventArgs e) - { - drawChart(); - } } } diff --git a/FrmWait.Designer.cs b/FrmWait.Designer.cs index 99733ea..88f5a29 100644 --- a/FrmWait.Designer.cs +++ b/FrmWait.Designer.cs @@ -55,7 +55,6 @@ this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(0, 24); this.label1.TabIndex = 1; - this.label1.Click += new System.EventHandler(this.label1_Click); // // FrmWait // @@ -71,7 +70,7 @@ this.ShowIcon = false; this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; this.Text = "正在处理,请稍后..."; - this.Load += new System.EventHandler(this.FrmWait_Load); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmWait_FormClosing); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); diff --git a/FrmWait.cs b/FrmWait.cs index d3b7a48..d645ae4 100644 --- a/FrmWait.cs +++ b/FrmWait.cs @@ -32,27 +32,6 @@ frm = null; } - private void FrmWait_Load(object sender, EventArgs e) - { - - - } - - - private void labelX2_Click(object sender, EventArgs e) - { - - } - - private void progressBarX1_Click(object sender, EventArgs e) - { - - } - - private void label1_Click(object sender, EventArgs e) - { - - } } } diff --git a/FrmYJSHTC.cs b/FrmYJSHTC.cs index 3572371..27b7186 100644 --- a/FrmYJSHTC.cs +++ b/FrmYJSHTC.cs @@ -143,9 +143,7 @@ for (int i = ctl1.Globe.Layers.Count - 1; i >= 0; i--) { if (ctl1.Globe.Layers[i].Caption == str) - { ctl1.Globe.Layers.Remove(ctl1.Globe.Layers[i]); - } } foreach (TreeNode n in layerTree.Nodes) @@ -155,20 +153,15 @@ for (int i = 0; i < n.Nodes.Count; i++) { if (n.Nodes[i].Text == str) - { n.Nodes[i].Remove(); - } } } } string sql = "delete from casic_audit_result where SH_LAYER = '" + str + "'"; - OledbHelper.sqlExecuteNonQuery(sql); - } } - } } diff --git a/MainFrm.cs b/MainFrm.cs index bc962c4..29a3eb3 100644 --- a/MainFrm.cs +++ b/MainFrm.cs @@ -2,7 +2,6 @@ using System.Collections; using System.Collections.Generic; using System.Data; -using System.Data.OracleClient; using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; @@ -13,7 +12,6 @@ using System.Text; using System.Threading; using System.Windows.Forms; -using System.Xml; using Cyberpipe.Forms; using DevComponents.DotNetBar; using GeoScene.Data; @@ -28,10 +26,10 @@ { TreeNode layerManagerNode; bool m_bFullScreen; - + GSOGlobeControl globeControl1; GSOGlobeControl globeControl2; - private GSOHudButton legend;//定义图例 + private GSOHudButton legend; //定义图例 private GSOHudButton btnToolNone; private GSOHudButton btnToolSelect; ToolTip tooltip1; @@ -42,20 +40,20 @@ GSOBalloon featureTooltip2; GSOBalloonEx balloonEx2; - GSOLayer layerTemp; - GSOLayer layerTemp2; + GSOLayer layerTemp;//wxl注释,Globe1的临时图层 + GSOLayer layerTemp2;//wxl注释,Globe2的临时图层 FrmRedlineResult frmredResult = null; FrmMnModify frmModify; public bool frmRedlineResult = false; public bool boolfrmShResult; public bool boolfrmModify; - public static string m_CurrentQueryLayer;//定义当前查询的图层 + public static string m_CurrentQueryLayer; //定义当前查询的图层 //定位和闪烁初始化定义 private EnumDesignMode enumDesignMode; //模拟规划设计模式 - private string trackflag;//定义阀门查询个数 + private string trackflag; //定义阀门查询个数 //记录沿线飞行设置 //int m_nFlyMode = 2; @@ -67,7 +65,7 @@ Double m_dDigPitWidthAlongLine = 6; Boolean m_bDigPitByDepth = true; //选择管线 - int selectState;//wxl 注释,表示是否已经计算过净距等了,1已计算,0未计算 + int selectState; //wxl 注释,表示是否已经计算过净距等了,1已计算,0未计算 //private OracleConnection connBackup = null; //数据集合 @@ -89,8 +87,8 @@ //双屏对比 //bool zhanshi=false; Thread t = null; - private GSOHudButton legendSC;//定义图例 - private GSOHudButton legendSG;//定义图例 + private GSOHudButton legendSC; //定义图例 + private GSOHudButton legendSG; //定义图例 //管纵图 private GSOHudButton lendendGZ50; private GSOHudButton lendendGZ36; @@ -102,12 +100,13 @@ GSOGeoPoint3D bsqPT; - FrmYJSHTC frmSh;//一键审核窗口全局变量wxl - FrmWait frmWait;//一键审核等待窗口 + FrmYJSHTC frmSh; //一键审核窗口全局变量wxl + FrmWait frmWait; //一键审核等待窗口 //FrmWait frmWait2 = null;//文档操作等待窗口 float mouseDownX1, mouseDownY1; float mouseDownX2, mouseDownY2; + /// /// /// @@ -164,8 +163,9 @@ RigthMenuSet(); MenuSet(); - + } + /// /// 右屏中添加管纵图片 /// @@ -259,6 +259,7 @@ } #region 区域分析 + if (Utility.userRole.IndexOf("区域分析") < 0) { toolRightMenu.Items.Remove(区域分析ToolStripMenuItem); @@ -278,9 +279,11 @@ 区域分析ToolStripMenuItem.DropDownItems.Remove(无源淹没分析ToolStripMenuItem); } } + #endregion #region 视域分析 + if (Utility.userRole.IndexOf("视域分析") < 0) { toolRightMenu.Items.Remove(视域分析ToolStripMenuItem); @@ -300,9 +303,11 @@ 视域分析ToolStripMenuItem.DropDownItems.Remove(可视包络分析ToolStripMenuItem); } } + #endregion #region 开发分析 + if (Utility.userRole.IndexOf("开挖分析") < 0) { toolRightMenu.Items.Remove(开挖分析ToolStripMenuItem); @@ -334,9 +339,11 @@ 开挖分析ToolStripMenuItem.DropDownItems.Remove(删除隧道ToolStripMenuItem); } } + #endregion #region 拓扑分析 + if (Utility.userRole.IndexOf("拓扑分析") < 0) { toolRightMenu.Items.Remove(拓扑分析ToolStripMenuItem); @@ -372,9 +379,11 @@ 拓扑分析ToolStripMenuItem.DropDownItems.Remove(爆管分析ToolStripMenuItem); } } + #endregion #region 断面分析 + if (Utility.userRole.IndexOf("断面分析") < 0) { toolRightMenu.Items.Remove(断面分析ToolStripMenuItem); @@ -398,9 +407,11 @@ 断面分析ToolStripMenuItem.DropDownItems.Remove(基线剖面分析ToolStripMenuItem); } } + #endregion #region 绘制区域统计 + if (Utility.userRole.IndexOf("绘制区域统计") < 0) { toolRightMenu.Items.Remove(绘制区域统计ToolStripMenuItem); @@ -445,9 +456,11 @@ } } + #endregion #region 全区域统计 + if (Utility.userRole.IndexOf("全区域统计") < 0) { toolRightMenu.Items.Remove(全区域统计ToolStripMenuItem); @@ -492,9 +505,11 @@ } } + #endregion #region 查询 + if (Utility.userRole.IndexOf("查询") < 0) { toolRightMenu.Items.Remove(查询ToolStripMenuItem); @@ -542,9 +557,11 @@ 查询ToolStripMenuItem.DropDownItems.Remove(附属物查询ToolStripMenuItem); } } + #endregion #region 标注 + if (Utility.userRole.IndexOf("标注") < 0) { toolRightMenu.Items.Remove(标注ToolStripMenuItem); @@ -592,9 +609,11 @@ 标注ToolStripMenuItem.DropDownItems.Remove(标注管理ToolStripMenuItem); } } + #endregion #region 飞行 + if (Utility.userRole.IndexOf("飞行") < 0) { toolRightMenu.Items.Remove(飞行ToolStripMenuItem); @@ -618,9 +637,11 @@ 飞行ToolStripMenuItem.DropDownItems.Remove(绕眼睛飞行ToolStripMenuItem); } } + #endregion #region 编辑 + if (Utility.userRole.IndexOf("编辑") < 0) { toolRightMenu.Items.Remove(编辑ToolStripMenuItem); @@ -656,9 +677,11 @@ 编辑ToolStripMenuItem.DropDownItems.Remove(删除模型ToolStripMenuItem); } } + #endregion #region 量算 + if (Utility.userRole.IndexOf("量算") < 0) { toolRightMenu.Items.Remove(量算ToolStripMenuItem); @@ -694,6 +717,7 @@ 量算ToolStripMenuItem.DropDownItems.Remove(地表面积ToolStripMenuItem1); } } + #endregion } @@ -701,6 +725,7 @@ { #region 权限管理 + if (Utility.userRole.IndexOf("权限管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem2); @@ -734,9 +759,11 @@ } } + #endregion #region 基础工具 + if (Utility.userRole.IndexOf("基础工具") < 0) { ribbonControl1.Items.Remove(ribbonTabItem1); @@ -781,37 +808,47 @@ } } + #endregion #region 一键审核 + if (Utility.userRole.IndexOf("一键审核") < 0) { ribbonControl1.Items.Remove(ribbonTabItem11); } + #endregion #region 红线审核 + if (Utility.userRole.IndexOf("红线审核") < 0) { ribbonControl1.Items.Remove(ribbonTabItem6); } + #endregion #region 双屏对比 + if (Utility.userRole.IndexOf("双屏对比") < 0) { ribbonControl1.Items.Remove(ribbonTabItem9); } + #endregion #region 文档管理 + if (Utility.userRole.IndexOf("文档管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem4); } + #endregion #region 基础管理 + if (Utility.userRole.IndexOf("基础管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem14); @@ -841,6 +878,7 @@ } #region Fan Zhang 重构现有代码 + //初始化控件布局 private void initLayout() { @@ -848,37 +886,37 @@ double dsw = SW; if (SW > 1440) { - double myScreen = dsw / 1440; - buttonX1.Width = (int)(buttonX1.Width * myScreen); - buttonX2.Width = (int)(buttonX2.Width * myScreen); - buttonX4.Width = (int)(buttonX4.Width * myScreen); - buttonX5.Width = (int)(buttonX5.Width * myScreen); - buttonX6.Width = (int)(buttonX6.Width * myScreen); - buttonX7.Width = (int)(buttonX8.Width * myScreen); - buttonX8.Width = (int)(buttonX8.Width * myScreen); - buttonX9.Width = (int)(buttonX9.Width * myScreen); - buttonX12.Width = (int)(buttonX12.Width * myScreen); - buttonX14.Width = (int)(buttonX14.Width * myScreen); - buttonX15.Width = (int)(buttonX15.Width * myScreen); - buttonX16.Width = (int)(buttonX16.Width * myScreen); - buttonX17.Width = (int)(buttonX17.Width * myScreen); + double myScreen = dsw/1440; + buttonX1.Width = (int) (buttonX1.Width*myScreen); + buttonX2.Width = (int) (buttonX2.Width*myScreen); + buttonX4.Width = (int) (buttonX4.Width*myScreen); + buttonX5.Width = (int) (buttonX5.Width*myScreen); + buttonX6.Width = (int) (buttonX6.Width*myScreen); + buttonX7.Width = (int) (buttonX8.Width*myScreen); + buttonX8.Width = (int) (buttonX8.Width*myScreen); + buttonX9.Width = (int) (buttonX9.Width*myScreen); + buttonX12.Width = (int) (buttonX12.Width*myScreen); + buttonX14.Width = (int) (buttonX14.Width*myScreen); + buttonX15.Width = (int) (buttonX15.Width*myScreen); + buttonX16.Width = (int) (buttonX16.Width*myScreen); + buttonX17.Width = (int) (buttonX17.Width*myScreen); - labelX1.Width = (int)(labelX1.Width * myScreen); - labelX2.Width = (int)(labelX2.Width * myScreen); - labelX3.Width = (int)(labelX3.Width * myScreen); - labelX6.Width = (int)(labelX6.Width * myScreen); - labelX8.Width = (int)(labelX8.Width * myScreen); - labelX9.Width = (int)(labelX9.Width * myScreen); - labelX12.Width = (int)(labelX12.Width * myScreen); - labelX13.Width = (int)(labelX13.Width * myScreen); - labelX14.Width = (int)(labelX14.Width * myScreen); - labelX16.Width = (int)(labelX16.Width * myScreen); - labelX17.Width = (int)(labelX17.Width * myScreen); - labelX11.Width = (int)(labelX11.Width * myScreen); - labelX19.Width = (int)(labelX19.Width * myScreen); - labelX21.Width = (int)(labelX21.Width * myScreen); - labelX22.Width = (int)(labelX22.Width * myScreen); - labelX24.Width = (int)(labelX24.Width * myScreen); + labelX1.Width = (int) (labelX1.Width*myScreen); + labelX2.Width = (int) (labelX2.Width*myScreen); + labelX3.Width = (int) (labelX3.Width*myScreen); + labelX6.Width = (int) (labelX6.Width*myScreen); + labelX8.Width = (int) (labelX8.Width*myScreen); + labelX9.Width = (int) (labelX9.Width*myScreen); + labelX12.Width = (int) (labelX12.Width*myScreen); + labelX13.Width = (int) (labelX13.Width*myScreen); + labelX14.Width = (int) (labelX14.Width*myScreen); + labelX16.Width = (int) (labelX16.Width*myScreen); + labelX17.Width = (int) (labelX17.Width*myScreen); + labelX11.Width = (int) (labelX11.Width*myScreen); + labelX19.Width = (int) (labelX19.Width*myScreen); + labelX21.Width = (int) (labelX21.Width*myScreen); + labelX22.Width = (int) (labelX22.Width*myScreen); + labelX24.Width = (int) (labelX24.Width*myScreen); } sideBar1.Visible = false; sideBar1.ExpandedPanel = sideBarPanelItem3; @@ -899,7 +937,7 @@ splitContainer1.Panel2Collapsed = true; - buttonItem87.Checked = true;//默认地上模式 + buttonItem87.Checked = true; //默认地上模式 ribbonTabItem1.Select(); //初始化状态为浏览 sideBarPanelItem3.Visible = false; @@ -951,7 +989,7 @@ //图例 legend = new GSOHudButton(); - legend.SetImage(Application.StartupPath + "/Resource/图例P.jpg");//图例P + legend.SetImage(Application.StartupPath + "/Resource/图例P.jpg"); //图例P legend.SetOffset(0, 15); legend.MinOpaque = 1; legend.MaxOpaque = 1; @@ -1002,7 +1040,7 @@ globeControl1.Globe.UserBackgroundColor = Color.White; globeControl1.Globe.FlyAlongLineSpeed = m_dFlyAlongLineSpeed; globeControl1.Globe.FlyAlongLineRotateSpeed = m_dFlyAlongLineRotateSpeed; - globeControl1.Globe.FlyToPointSpeed = globeControl1.Globe.FlyToPointSpeed * 3; + globeControl1.Globe.FlyToPointSpeed = globeControl1.Globe.FlyToPointSpeed*3; globeControl1.Globe.EditSnapObject = true; globeControl1.Globe.IsReleaseMemOutOfView = true; globeControl1.Globe.ControlPanel.Visible = true; @@ -1021,18 +1059,22 @@ globeControl2.Globe.UserBackgroundColor = Color.White; globeControl2.Globe.FlyAlongLineSpeed = m_dFlyAlongLineSpeed; globeControl2.Globe.FlyAlongLineRotateSpeed = m_dFlyAlongLineRotateSpeed; - globeControl2.Globe.FlyToPointSpeed = globeControl2.Globe.FlyToPointSpeed * 3; + globeControl2.Globe.FlyToPointSpeed = globeControl2.Globe.FlyToPointSpeed*3; globeControl2.Globe.EditSnapObject = true; globeControl2.Globe.IsReleaseMemOutOfView = true; globeControl2.Globe.ControlPanel.Visible = false; - GSOSimplePolygonStyle3D trackingRectStyle = globeControl1.Globe.TrackRectTool.TrackingPolygonStyle as GSOSimplePolygonStyle3D; + GSOSimplePolygonStyle3D trackingRectStyle = + globeControl1.Globe.TrackRectTool.TrackingPolygonStyle as GSOSimplePolygonStyle3D; trackingRectStyle.FillColor = Color.FromArgb(0, 0, 0, 0); - GSOSimplePolygonStyle3D trackRectStyle = globeControl1.Globe.TrackRectTool.PolygonStyle as GSOSimplePolygonStyle3D; + GSOSimplePolygonStyle3D trackRectStyle = + globeControl1.Globe.TrackRectTool.PolygonStyle as GSOSimplePolygonStyle3D; trackRectStyle.FillColor = Color.FromArgb(0, 0, 0, 0); - GSOSimpleLineStyle3D trackRectLineStyle = globeControl1.Globe.TrackRectTool.PolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; + GSOSimpleLineStyle3D trackRectLineStyle = + globeControl1.Globe.TrackRectTool.PolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; trackRectLineStyle.LineType = EnumLineType.Solid; - GSOSimpleLineStyle3D trackRectLineStyle1 = globeControl1.Globe.TrackRectTool.TrackingPolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; + GSOSimpleLineStyle3D trackRectLineStyle1 = + globeControl1.Globe.TrackRectTool.TrackingPolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; trackRectLineStyle1.LineType = EnumLineType.Solid; trackRectLineStyle1.LineColor = Color.FromArgb(0, 174, 255); trackRectLineStyle1.LineWidth = 1; @@ -1107,7 +1149,7 @@ //加载两个地球数据 private void loadData() { - Thread t1 = new Thread(doLoadDataForGlobalControl1); + Thread t1 = new Thread(doLoadDataForGlobalControl); t1.IsBackground = true; t1.Start(); } @@ -1119,30 +1161,22 @@ globeControl1.Globe.ConnectServer(Utility.serverip, Utility.serverport, "", ""); //加载locaServer中的数据 globeControl2.Globe.ConnectServer(Utility.serverip, Utility.serverport, "", ""); //加载locaServer中的数据 //初始化TreeView - // 勾选实测图层 - foreach (TreeNode tn in layerTree.Nodes) - { - if (tn.Nodes.Count <= 0) continue; - if (tn.Text != "实测数据") continue; - tn.Checked = true; - foreach (TreeNode tnChild in tn.Nodes) - { - tnChild.Checked = true; - foreach (TreeNode tnGrandChild in tnChild.Nodes) - { - tnGrandChild.Checked = true; - } - } - } - } - private void doLoadDataForGlobalControl1() + initLayerTree(); + } + /// + /// 加载地球1、2的图层 + /// + private void doLoadDataForGlobalControl() { try { globeControl1.Globe.Layers.MoveDown(10000); //加载实测管线数据 - Utility.dataSource = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.DBServer.Trim() + "/" + Utility.dbdatabase.Trim(), "", "", Utility.userID, Utility.DBPassword); + Utility.dataSource = + globeControl1.Globe.DataManager.OpenOracleDataSource( + Utility.DBServer.Trim() + "/" + Utility.dbdatabase.Trim(), "", "", Utility.userID, + Utility.DBPassword); if (Utility.dataSource != null) { @@ -1160,7 +1194,9 @@ globeControl1.Globe.Layers.GetLayerByCaption("红线").Visible = false; //globleControl1中加载规划数据 - GSODataSource ghDS = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.ghdbip + "/" + Utility.ghdbname, "", "", Utility.ghdbuser, Utility.ghdbpwd); + GSODataSource ghDS = + globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.ghdbip + "/" + Utility.ghdbname, "", "", + Utility.ghdbuser, Utility.ghdbpwd); if (ghDS != null) { for (int j = 0; j < ghDS.DatasetCount; j++) @@ -1176,13 +1212,16 @@ } //globeControl1,globeControl2中加载施工数据 - GSODataSource sgDS = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.sgdbip + "/" + Utility.sgdbname, "", "", Utility.sgdbuser, Utility.sgdbpwd); + GSODataSource sgDS = + globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.sgdbip + "/" + Utility.sgdbname, "", "", + Utility.sgdbuser, Utility.sgdbpwd); if (sgDS != null) { for (int m = 0; m < sgDS.DatasetCount; m++) { GSODataset dataset = sgDS.GetDatasetAt(m); - if (dataset != null && !dataset.Caption.Contains("SH") && Utility.dictionaryNetLayerNameAndCaption.ContainsKey(dataset.Caption)) + if (dataset != null && !dataset.Caption.Contains("SH") && + Utility.dictionaryNetLayerNameAndCaption.ContainsKey(dataset.Caption)) { dataset.Caption = dataset.Name; globeControl1.Globe.Layers.Add(dataset); @@ -1196,12 +1235,12 @@ // LoadDataForGlobalControl ss = connectServer; // ss(); - + this.Invoke((EventHandler) delegate { connectServer(); }); - + } catch (Exception ex) @@ -1212,67 +1251,17 @@ private void initLayerTree() { + layerTree.Nodes.Clear(); //加载临时图层节点 layerManagerNode = new TreeNode(); layerManagerNode.ImageIndex = 0; layerManagerNode.SelectedImageIndex = 0; layerManagerNode.Checked = true; layerManagerNode.Text = "临时图层"; + layerManagerNode.Tag = layerTemp; layerTree.Nodes.Add(layerManagerNode); - XmlDocument doc = new XmlDocument(); - doc.Load(Utility.filename); - XmlNodeList xmlLayerNodes = doc.SelectNodes("//layer"); - - foreach (XmlNode xmlLayerNode in xmlLayerNodes) - { - - //TODO LIST:创建一级TreeNode(实测、规划、施工) - TreeNode nodelayer = new TreeNode(); - string layerName = xmlLayerNode.Attributes["label"].Value; - nodelayer.Text = layerName; - nodelayer.Checked = false; - layerTree.Nodes.Add(nodelayer); - - XmlNodeList xmlChildLayerNodes = xmlLayerNode.ChildNodes; - foreach (XmlNode xmlChildLayerNode in xmlChildLayerNodes) - { - //TODO LIST:创建二级TreeNode节点 - TreeNode secondLevelNode = new TreeNode(); - string layerType = xmlChildLayerNode.Attributes["label"].Value; - secondLevelNode.Text = layerType; - - if (xmlChildLayerNode.Attributes["type"] != null) - { //道路图层特殊处理 - string type = xmlChildLayerNode.Attributes["type"].Value; - secondLevelNode.Tag = type + "|" + layerType; - } - else - { - secondLevelNode.Tag = layerType; - } - secondLevelNode.Checked = false; - nodelayer.Nodes.Add(secondLevelNode); - - XmlNodeList xmlActitualLayerNodes = xmlChildLayerNode.ChildNodes; - - foreach (XmlNode xmlActitualLayerNode in xmlActitualLayerNodes) - { - //TODO LIST:创建三级图层节点 - TreeNode layerNode = new TreeNode(); - string actutallylayerType = xmlActitualLayerNode.Attributes["type"].Value; - string actutallylayerName = xmlActitualLayerNode.Attributes["layer"].Value; - string actutallyLabelName = xmlActitualLayerNode.Attributes["label"].Value; - - layerNode.Text = actutallyLabelName; - layerNode.Tag = layerType + "|" + actutallyLabelName; - layerNode.Checked = false; - secondLevelNode.Nodes.Add(layerNode); - } - - } - - } + TreeUtils.InitLayerTree(globeControl1, layerTree, null); } @@ -1298,7 +1287,8 @@ for (int i = 0; i < markerStrs.Length; i++) { if (!File.Exists(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd")) continue; - GSOLayer markerLayer = globeControl1.Globe.Layers.Add(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd"); + GSOLayer markerLayer = + globeControl1.Globe.Layers.Add(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd"); if (markerLayer == null) continue; TreeNode node1 = new TreeNode(); node1.Text = markerLayer.Caption; @@ -1312,9 +1302,11 @@ private void MainFrm_Load(object sender, EventArgs e) { + + layerTree.Nodes.Add("正在加载,请稍后……");//树状图加载在图层加载之后,故增加提示 initGlobalControl(); //initGlobalMap(); - initLayerTree(); +// initLayerTree(); initMarkerTree(); initLayout(); loadData(); @@ -1383,7 +1375,7 @@ tempnode.Checked = node.Checked ? feature.Visible : false; tempnode.Tag = feature; node.Nodes.Add(tempnode); - GSOFeatureFolder featureFolder = (GSOFeatureFolder)feature; + GSOFeatureFolder featureFolder = (GSOFeatureFolder) feature; VisitFeature3Ds(featureFolder.Features, tempnode); } else @@ -1444,7 +1436,7 @@ /// Boolean CheckDatasetGeoReference(GSODataset dataset, string strDataPath) { - + if (dataset.GeoReferenceType != EnumGeoReferenceType.Flat) return true; Boolean bSuccess = false; if (MessageBox.Show("数据没有空间参考信息,请设置空间参考信息!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) != @@ -1498,7 +1490,7 @@ dlg.Filter = "输出JPEG(*.jpg)|*.jpg|输出PNG(*.png)|*.png|输出BMP(*.bmp)|*.bmp|输出BMP(*.gif)|*.gif"; if (dlg.ShowDialog() == DialogResult.OK) { - string extension = Path.GetExtension(dlg.FileName);//扩展名 + string extension = Path.GetExtension(dlg.FileName); //扩展名 switch (extension) { case ".jpg": @@ -1520,6 +1512,7 @@ globeControl1.Globe.Action = EnumAction3D.ActionNull; globeControl1.Globe.MouseRoamingEnable = true; } + /// /// 定位正北正90度俯视 /// @@ -1548,7 +1541,6 @@ void globeControl1_HudControlMouseIntoEvent(object sender, HudControlMouseIntoEventArgs e) { - GSOHudButton btn = e.HudControl as GSOHudButton; tooltip1 = new ToolTip(); switch (e.HudControl.Name) { @@ -1573,163 +1565,46 @@ break; } } - /// - /// layerTree选中后事件处理 - /// - /// - /// + + #region wxl 重构树形结构代码 + private void layerTree_AfterCheck(object sender, TreeViewEventArgs e) { - if (e.Node.Tag != null) + if (e.Action != TreeViewAction.Unknown) { - if (e.Node.Tag.ToString().Contains("|")) - { - string nodeTag = e.Node.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(nodeTag); - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - if (e.Node.Tag is GSOFeature) - { - if (e.Node.Nodes.Count == 0) - { - GSOFeature feat = e.Node.Tag as GSOFeature; - feat.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - } - CheckControl(e); - } - /// - /// 树节点选中方法 - /// - /// - private void CheckControl(TreeViewEventArgs e) - { - if (e.Action == TreeViewAction.Unknown||e.Node == null || Convert.IsDBNull(e.Node)) return; - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - { - CheckAllChildNodes(e.Node, e.Node.Checked); - } - } - /// - /// 改变所有子节点的状态 - /// - /// - /// - private void CheckAllChildNodes(TreeNode pn, bool IsChecked) - { - foreach (TreeNode tn in pn.Nodes) - { - tn.Checked = IsChecked; - - if (tn.Nodes.Count > 0) - { - CheckAllChildNodes(tn, IsChecked); - } + TreeUtils.TreeNodeCheckedChange(globeControl1, e.Node); } } - //改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 - private void CheckParentNode(TreeNode curNode) - { - bool bChecked = false; - - if (curNode.Parent == null) return; - foreach (TreeNode node in curNode.Parent.Nodes) - { - if (node.Checked) - { - bChecked = true; - break; - } - } - - if (bChecked) - { - curNode.Parent.Checked = true; - CheckParentNode(curNode.Parent); - } - else - { - curNode.Parent.Checked = false; - CheckParentNode(curNode.Parent); - } - } - + #endregion private void layerTree_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (e.Button != MouseButtons.Right) return; layerTree.SelectedNode = e.Node; - if (e.Node.Tag == null) return; - if (e.Button == MouseButtons.Right && e.Node.Tag.ToString().Contains("|")) + if (e.Node.Tag == null || e.Node.Parent == null) return; //排除无图层节点和第一级节点 + + //来自locaserver的数据,直接返回就行了,目前只有一个180fd,暂时单独处理 + GSOLayer gsoLayer = e.Node.Tag as GSOLayer; + if (gsoLayer == null || gsoLayer.Caption.Equals(Utility.roadLayerName)) return; + if (e.Node.Parent.Text.Equals("临时图层") || e.Node.Parent.Text.Equals("我的地标")) { - - if (e.Node.Tag.ToString().Split('|')[0] == "locaserver") - { - - foreach (ToolStripItem item in layerNodeContexMenu.Items) - { - item.Visible = false; - } - return; - - } - - if (e.Node.Tag.ToString().Split('|')[0] == "new") - { - LayerEditableMenuItem.Enabled = true; - foreach (ToolStripItem item in layerNodeContexMenu.Items) - { - item.Visible = false; - } - //LayerSelectableMenuItem.Visible = true; - //LayerEditableMenuItem.Visible = true; - RemoveLayer.Visible = true; - RefreshLayerFeatureListMenuItem.Visible = true; - //SaveLayerMenuItem.Visible = true; - //LayerFlyMenuItem.Visible = true; - } - + //临时图层下的子节点应该展示的 + contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); + contextMenuStripDeleteLayerNode.Tag = e.Node; + } + else + { LayerSelectableMenuItem.Visible = true; LayerEditableMenuItem.Visible = true; SaveLayerMenuItem.Visible = true; LayerFlyMenuItem.Visible = true; 导出CADToolStripMenuItem1.Visible = true; - layerNodeContexMenu.Show(layerTree, e.X, e.Y); layerNodeContexMenu.Tag = e.Node; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(e.Node.Tag.ToString().Split('|')[1]); - if (layer != null) - { - LayerSelectableMenuItem.Checked = layer.Selectable; - LayerEditableMenuItem.Checked = layer.Editable; - } + LayerSelectableMenuItem.Checked = gsoLayer.Selectable; + LayerEditableMenuItem.Checked = gsoLayer.Editable; } - else - { - if (e.Node.Tag is GSOLayer && e.Node.Parent != null && e.Node.Parent.Text.Trim() == "临时图层") - { - contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); - contextMenuStripDeleteLayerNode.Tag = e.Node; - } - else if (e.Node.Tag is GSOFeature && e.Node.Parent != null && e.Node.Parent.Text.Trim() == "我的地标") - { - contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); - contextMenuStripDeleteLayerNode.Tag = e.Node; - } - } + } /// @@ -1740,75 +1615,61 @@ private void 删除ToolStripMenuItem2_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "临时图层") + if (node == null || node.Parent == null) return; + if (node.Parent.Text.Trim() == "临时图层") { - if (node.Tag is GSOLayer) - { - GSOLayer layer = node.Tag as GSOLayer; - - for (int i = globeControl1.Globe.Layers.Count - 1; i >= 0; i--) - { - if (globeControl1.Globe.Layers[i].Caption == layer.Caption) - { - globeControl1.Globe.Layers.Remove(globeControl1.Globe.Layers[i]); - } - } - - globeControl1.Globe.Refresh(); - - node.Remove(); - } - } - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "我的地标") + if (!(node.Tag is GSOLayer)) return; + GSOLayer layer = node.Tag as GSOLayer; + globeControl1.Globe.Layers.Remove(layer); + globeControl1.Globe.Refresh(); + node.Remove(); + }else if (node.Parent.Text.Trim() == "我的地标") { - if (node.Tag is GSOFeature) - { - GSOFeature f = node.Tag as GSOFeature; - f.Delete(); - globeControl1.Globe.Refresh(); - - node.Remove(); - } + if (!(node.Tag is GSOFeature)) return; + GSOFeature f = node.Tag as GSOFeature; + f.Delete(); + globeControl1.Globe.Refresh(); + node.Remove(); } + } private void 可编辑ToolStripMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "临时图层") - { - if (node.Tag is GSOLayer) - { - GSOLayer layer = node.Tag as GSOLayer; - - 可编辑ToolStripMenuItem.Checked = !可编辑ToolStripMenuItem.Checked; - layer.Editable = 可编辑ToolStripMenuItem.Checked; - } - } + if (node == null || + node.Parent == null || + node.Parent.Text.Trim() != "临时图层" || !(node.Tag is GSOLayer)) return; + GSOLayer layer = node.Tag as GSOLayer; + 可编辑ToolStripMenuItem.Checked = !可编辑ToolStripMenuItem.Checked; + layer.Editable = 可编辑ToolStripMenuItem.Checked; } private void 保存ToolStripMenuItem_Click(object sender, EventArgs e) { - //TreeNode node = layerNodeContexMenu.Tag as TreeNode; - TreeNode node = contextMenuStripDeleteLayerNode.Tag as TreeNode; - - Int32 nIndex = node.Index; - string layerCaption = node.Text;//.Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); +// TreeNode node = contextMenuStripDeleteLayerNode.Tag as TreeNode; + TreeNode node = layerTree.SelectedNode; + if (node == null||node.Tag==null) return; + GSOLayer layer = node.Tag as GSOLayer; + if (layer == null) return; layer.Dataset.Save(); } - + //TODO LIST: wxl? Tag更正 private void 定位ToolStripMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - - if (node == null) return; + if (node == null||node.Parent==null) return; if (node.Parent.Text.Trim() == "临时图层") { - GSOLayer lsLayer = globeControl1.Globe.Layers.GetLayerByCaption(node.Text); + GSOLayer lsLayer = node.Tag as GSOLayer; + if (lsLayer == null) + { + LogHelper.WriteLog(typeof(MainFrm),"要定位的临时图层不存在:"+node.Text); + return; + } double x = lsLayer.LatLonBounds.Center.X; double y = lsLayer.LatLonBounds.Center.Y; - if (x == 0 && y == 0) + if (x.Equals(0) && y.Equals(0)) { x = lsLayer.Bounds.Center.X; y = lsLayer.Bounds.Center.Y; @@ -1818,20 +1679,14 @@ } else { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); - + GSOLayer layer = node.Tag as GSOLayer; if (layer == null) return; - if (layer.Caption == "红线") + if (layer.Caption.Equals("红线")) { globeControl1.Globe.FlyToPosition(new GSOPoint3d(120.610963, 31.188121, 50), EnumAltitudeMode.Absolute, -4, 50, 1000); globeControl1.Globe.FlyToPointSpeed = 10000000; globeControl1.Globe.Action = EnumAction3D.SelectObject; - - GSOLayer redLayer = globeControl1.Globe.Layers.GetLayerByCaption("红线"); - if (redLayer != null) - { - redLayer.Visible = true; - } + layer.Visible = true; globeControl1.Refresh(); } else @@ -1842,55 +1697,28 @@ } } } - + //TODO LIST: wxl? Tag更正 private void layerTree_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) { - if (layerTree.SelectedNode == null) return; - if (layerTree.SelectedNode.Tag.ToString().Contains("|")) + TreeNode node = layerTree.SelectedNode; + if (node == null) return; + if (node.Tag is GSOLayer) { - string nodeTag = layerTree.SelectedNode.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(nodeTag); - if (layer != null) + GSOLayer layer = node.Tag as GSOLayer; + if (layer.GetAllFeatures().Length <= 0) return; + GSOFeature feature = layer.GetAt(0); + if (feature != null && feature.Geometry != null) { - if (layer.Caption == "红线") - { - globeControl1.Globe.FlyToPosition(new GSOPoint3d(120.610963, 31.188121, 50), EnumAltitudeMode.Absolute, -4, 50, 1000); - globeControl1.Globe.FlyToPointSpeed = 10000000; - globeControl1.Globe.Action = EnumAction3D.SelectObject; - - GSOLayer redLayer = globeControl1.Globe.Layers.GetLayerByCaption("红线"); - if (redLayer != null) - { - redLayer.Visible = true; - } - globeControl1.Refresh(); - } - else - { - double x = layer.LatLonBounds.Center.X; - double y = layer.LatLonBounds.Center.Y; - globeControl1.Globe.FlyToPosition(new GSOPoint3d(x, y, 0), EnumAltitudeMode.Absolute); - } + globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute);//, 0, 0, 1000); + } + else + { + globeControl1.Globe.FlyToFeature(feature); } } - if (layerTree.SelectedNode.Tag is GSOLayer) + else if (node.Tag is GSOFeature) { - GSOLayer layer = layerTree.SelectedNode.Tag as GSOLayer; - if (layer.GetAllFeatures().Length > 0) - { - GSOFeature feature = layer.GetAt(0); - if (feature != null && feature.Geometry != null) - { - globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute);//, 0, 0, 1000); - } - else - { - globeControl1.Globe.FlyToFeature(feature); - } - } - } else if (layerTree.SelectedNode.Tag is GSOFeature) - { - GSOFeature feature = layerTree.SelectedNode.Tag as GSOFeature; + GSOFeature feature = node.Tag as GSOFeature; if (feature.Geometry != null) { globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute, 0, 0, 10); @@ -2231,15 +2059,7 @@ int idx = dataGridViewX2.Rows.Add(); dataGridViewX2.Rows[idx].Tag = feat; dataGridViewX2.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX2.Rows[idx].Cells[1].Value = featureName; } } @@ -2261,15 +2081,7 @@ int idx = dataGridViewLineList.Rows.Add(); dataGridViewLineList.Rows[idx].Tag = feat; dataGridViewLineList.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewLineList.Rows[idx].Cells[1].Value = featureName; } } @@ -2291,15 +2103,7 @@ int idx = dataGridViewX8.Rows.Add(); dataGridViewX8.Rows[idx].Tag = feat; dataGridViewX8.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX8.Rows[idx].Cells[1].Value = featureName; } } @@ -2321,15 +2125,7 @@ int idx = dataGridViewX4.Rows.Add(); dataGridViewX4.Rows[idx].Tag = feat; dataGridViewX4.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX4.Rows[idx].Cells[1].Value = featureName; } @@ -2353,15 +2149,7 @@ int idx = dataGridViewX6.Rows.Add(); dataGridViewX6.Rows[idx].Tag = feat; dataGridViewX6.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX6.Rows[idx].Cells[1].Value = featureName; } } @@ -2736,77 +2524,104 @@ return str; } - //string filename = Utility.filename; - //List g1layername = new List(); - /// /// 获取目标图层 /// /// +// private GSOLayer TreeNodeFeatureLayer() +// { +// TreeNode featureAddPipeFitTreenode = GetDestLayerFeatureAddTreeNode(); +// GSOLayer featureAddLayer = globeControl1.Globe.Layers.GetLayerByCaption(featureAddPipeFitTreenode.Tag.ToString().Split('|')[1]); +// +// return featureAddLayer; +// } + //TODO LIST: wxl11? 待更正,Node的Tag现在都已经统一为gsolayer对象了 +// private TreeNode GetDestLayerFeatureAddTreeNode() +// { +// for (int i = 0; i < layerTree.Nodes.Count; i++) +// { +// TreeNode tempNode = layerTree.Nodes[i]; +// for (int j = 0; j < tempNode.Nodes.Count; j++) +// { +// TreeNode tempChildNode = tempNode.Nodes[j]; +// if (tempChildNode.Tag.ToString().Split('|').Length > 1) // Config配置文件配置的图层 +// {//本层节点Tag记录layer +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode; +// } +// } +// else //临时添加的本地图层 +// {//子层节点的Tag记录layer +// for (int m = 0; m < tempChildNode.Nodes.Count; m++) +// { +// TreeNode tempChildNode1 = tempChildNode.Nodes[m]; +// if (tempChildNode1.Tag.ToString().Split('|').Length > 1) +// { +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode1.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode1.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode1; +// } +// } +// else +// { +// for (int n = 0; n < tempChildNode1.Nodes.Count; n++) +// { +// TreeNode tempChildNode2 = tempChildNode1.Nodes[n]; +// if (tempChildNode2.Tag.ToString().Split('|').Length <= 1) continue; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode2.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode2.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode2; +// } +// } +// } +// } +// } +// } +// } +// return null; +// } private GSOLayer TreeNodeFeatureLayer() { TreeNode featureAddPipeFitTreenode = GetDestLayerFeatureAddTreeNode(); - GSOLayer featureAddLayer = globeControl1.Globe.Layers.GetLayerByCaption(featureAddPipeFitTreenode.Tag.ToString().Split('|')[1]); - - return featureAddLayer != null ? featureAddLayer : null; + if (featureAddPipeFitTreenode == null) return null; + GSOLayer featureAddLayer = featureAddPipeFitTreenode.Tag as GSOLayer; + return featureAddLayer; } - + //遍历最深三层找到目标node. private TreeNode GetDestLayerFeatureAddTreeNode() { - for (int i = 0; i < layerTree.Nodes.Count; i++) + + foreach (TreeNode layerTreeNode in layerTree.Nodes) { - TreeNode tempNode = layerTree.Nodes[i]; - for (int j = 0; j < tempNode.Nodes.Count; j++) + if (layerTreeNode.Tag == null && layerTreeNode.Nodes.Count > 0) { - TreeNode tempChildNode = tempNode.Nodes[j]; - if (tempChildNode.Tag.ToString().Split('|').Length > 1) // Config配置文件配置的图层 + foreach (TreeNode node in layerTreeNode.Nodes) { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode; - } + GSOLayer gsoLayer = node.Tag as GSOLayer; + if (gsoLayer != null && gsoLayer.IsDestLayerFeatureAdd()) return node; + } - else //临时添加的本地图层 - { - for (int m = 0; m < tempChildNode.Nodes.Count; m++) - { - TreeNode tempChildNode1 = tempChildNode.Nodes[m]; - if (tempChildNode1.Tag.ToString().Split('|').Length > 1) - { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode1.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode1.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode1; - } - } - else - { - for (int n = 0; n < tempChildNode1.Nodes.Count; n++) - { - TreeNode tempChildNode2 = tempChildNode1.Nodes[n]; - if (tempChildNode2.Tag.ToString().Split('|').Length <= 1) continue; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode2.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode2.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode2; - } - } - } - } - } + } + else + { + GSOLayer gsoLayer = layerTreeNode.Tag as GSOLayer; + if (gsoLayer != null && gsoLayer.IsDestLayerFeatureAdd()) return layerTreeNode; } } return null; @@ -3221,6 +3036,7 @@ } } } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 目标图层 菜单 /// @@ -3228,14 +3044,15 @@ /// private void FeatureAddLayerMenuItem_Click(object sender, EventArgs e) { - if (!FeatureAddLayerMenuItem.Checked) - { - TreeNode node = layerNodeContexMenu.Tag as TreeNode; - FeatureAddLayerMenuItem.Checked = true; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); - globeControl1.Globe.DestLayerFeatureAdd = layer; - } + if (FeatureAddLayerMenuItem.Checked) return; + TreeNode node = layerNodeContexMenu.Tag as TreeNode; + FeatureAddLayerMenuItem.Checked = true; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; + globeControl1.Globe.DestLayerFeatureAdd = layer; } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 可选择 菜单 /// @@ -3244,11 +3061,13 @@ private void LayerSelectableMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - Int32 nIndex = node.Index; - GSOLayer layer = globeControl1.Globe.Layers[nIndex]; +// GSOLayer layer = globeControl1.Globe.Layers[nIndex]; + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; LayerSelectableMenuItem.Checked = !LayerSelectableMenuItem.Checked; - layer.Selectable = LayerSelectableMenuItem.Checked; + if (layer != null) layer.Selectable = LayerSelectableMenuItem.Checked; } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 可编辑 菜单 /// @@ -3257,23 +3076,27 @@ private void LayerEditableMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; LayerEditableMenuItem.Checked = !LayerEditableMenuItem.Checked; - layer.Editable = LayerEditableMenuItem.Checked; + if (layer != null) layer.Editable = LayerEditableMenuItem.Checked; } /// /// 图层目录树 右键菜单中的 保存 菜单 /// /// /// + //TODO LIST: wxl? Tag更正 private void SaveLayerMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - Int32 nIndex = node.Index; - string layerCaption = node.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); - layer.Dataset.Save(); +// string layerCaption = node.Tag.ToString().Split('|')[1]; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; + if (layer != null) layer.Dataset.Save(); } #region wxl feature的公共方法 @@ -3455,7 +3278,6 @@ return; GSOFeatureLayer flayer = layer as GSOFeatureLayer; - GSOFeatureDataset fdataset = flayer.Dataset as GSOFeatureDataset; GSOFeatures feats = flayer.GetAllFeatures(); for (int i = 0; i < feats.Length; i++) { @@ -3480,7 +3302,6 @@ return; GSOFeatureLayer flayer = layer as GSOFeatureLayer; - GSOFeatureDataset fdataset = flayer.Dataset as GSOFeatureDataset; GSOFeatures feats = flayer.GetAllFeatures(); for (int i = 0; i < feats.Length; i++) { @@ -5508,7 +5329,6 @@ private void addNodeToLayerManagerNode(GSOLayer layer) { if (layer == null) return; - GSODataset dataset = layer.Dataset; CheckDatasetGeoReference(layer.Dataset, ""); TreeNode node = new TreeNode(); @@ -5527,43 +5347,24 @@ /// /// /// - public int getLabelName(GSOLayer layer) - { - int nid = -1; - if (layer.GetAllFeatures().Length > 0) - { - string id = layer.GetAllFeatures()[layer.GetAllFeatures().Length - 1].Name; +// public int getLabelName(GSOLayer layer) +// { +// int nid = -1; +// if (layer.GetAllFeatures().Length > 0) +// { +// string id = layer.GetAllFeatures()[layer.GetAllFeatures().Length - 1].Name; +// +// int.TryParse(id, out nid); +// } +// else +// { +// nid = 0; +// } +// return nid; +// } - int.TryParse(id, out nid); - } - else - { - nid = 0; - } - return nid; - } /// - /// 判断选中的对象是否为管线 - /// - /// 被选中管线 - /// 返回一根线 - private GSOFeature IsPipeLineOfSelectedObj() - { - GSOFeature resFeature = null; - if (globeControl1.Globe.SelObjectCount < 1) return null; - GSOLayer resLayer = null; - globeControl1.Globe.GetSelectObject(0, out resFeature, out resLayer); - if (resFeature == null) return null; - - GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; - if (line1 == null) return null; - GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; - if (pipeStyle1 == null) return null; - - return resFeature; - } - /// /// 图层节点树中 节点 右键单击事件处理 /// /// @@ -5615,13 +5416,15 @@ { TreeNode node = contextMenuStrip2.Tag as TreeNode; TreeNode parentNode = node.Parent; - Int32 nIndex = node.Index; if (parentNode.Text == "标注管理" || parentNode.Text == "传感器管理") { RefreshTreeNodeLayerFeatureList(node); } } + + #region wxl? VisitFeature3Ds的作用,重构后,是否对其有影响 + /// /// 给指定的图层节点添加代表feature对象的子节点 /// @@ -5636,6 +5439,9 @@ VisitFeature3Ds(layer.GetAllFeatures(), layerTreeNode); } } + + #endregion + /// /// 标注管理、传感器管理 图层目录树的右键菜单中的 移除所有 菜单 /// @@ -5660,53 +5466,11 @@ { if (e.Action != TreeViewAction.Unknown) { - CheckTreeNode(e.Node, e.Node.Checked); + //wxl优化标注管理树形结构 + TreeUtils.TreeNodeCheckedChange(globeControl1,e.Node); } } - /// - /// 改变指定节点对应的复选框的选中状态 - /// - /// - /// - private void CheckTreeNode(TreeNode node, Boolean bChecked) - { - CheckChildTreeNode(node, bChecked); - globeControl1.Globe.Refresh(); - } - /// - /// 改变指定节点的子节点对应的复选框的选中状态 - /// - /// - /// - private void CheckChildTreeNode(TreeNode node, Boolean bChecked) - { - if (node == null) - return; - if (node.Tag != null) - { - if (node.Tag.GetType() == typeof(GSOFeatureFolder) || node.Tag.GetType() == typeof(GSOFeature)) - ((GSOFeature)node.Tag).SetVisibleDirectly(bChecked); - else - { - GSOLayer curLayer = node.Tag as GSOLayer; - GSOTerrain curTerrain = node.Tag as GSOTerrain; - if (curLayer != null) - { - curLayer.Visible = bChecked; - } - else if (curTerrain != null) - { - curTerrain.Visible = bChecked; - } - } - } - // 递归处理子节点 - for (int i = 0; i < node.Nodes.Count; i++) - { - node.Nodes[i].Checked = bChecked; - CheckChildTreeNode(node.Nodes[i], bChecked); - } - } + /// /// 标注管理、传感器管理 目录树中的feature节点的右键菜单中的 删除 菜单 /// @@ -5984,7 +5748,7 @@ frmModify = new FrmMnModify(globeControl1, shlayername, shresultLists); - if (boolfrmModify != false) return; + if (boolfrmModify) return; frmModify.Owner = this; frmModify.Location = new Point(Width - frmModify.Width - 10, Height - frmModify.Height - 50); frmModify.Show(); @@ -6261,16 +6025,15 @@ globeControl1.Globe.ClearMeasure(); layerTemp.RemoveAllFeature(); - layerTemp2.RemoveAllFeature(); buttonItemLS5.Checked = false; dataGridViewX1.DataSource = null; panelOfTable.Visible = false; globeControl1.Globe.MemoryLayer.RemoveAllFeature(); + globeControl2.Globe.MemoryLayer.RemoveAllFeature(); globeControl1.Globe.ClearAnalysis(); - // 清除净距分析结果 buttonX2_Click(null, null); buttonX8_Click(null, null); @@ -6527,8 +6290,8 @@ GSOFeatures selectFeatures = new GSOFeatures(); for (int i = 0; i < globeControl1.Globe.SelObjectCount; i++) { - GSOFeature feature = null; - GSOLayer layer = null; + GSOFeature feature; + GSOLayer layer; globeControl1.Globe.GetSelectObject(i, out feature, out layer); if (feature != null && feature.Geometry != null && feature.Geometry.Type == EnumGeometryType.GeoPolyline3D) { @@ -6536,11 +6299,9 @@ } } List feats = SectionAnalysisTool.ZDMAnalysis(selectFeatures); - if (feats != null && feats.Count >= 1) - { - FrmProfileAnalysis frm = new FrmProfileAnalysis(globeControl1, feats); - frm.Show(this); - } + if (feats == null || feats.Count < 1) return; + FrmProfileAnalysis frm = new FrmProfileAnalysis(globeControl1, feats); + frm.Show(this); } /// /// 道路断面分析 @@ -7057,14 +6818,14 @@ /// private void buttonItemSZ1_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7075,17 +6836,17 @@ /// /// 管径标注 /// - GSOFeature radiusMarkerFeature; +// GSOFeature radiusMarkerFeature; private void buttonItemBZ2_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine==null||selLine[0].Count <= 1)//wxl增加为空判断,下面方法同理 + if (selLine == null || selLine[0].Count <= 1) //wxl增加为空判断,下面方法同理 { return; } @@ -7100,14 +6861,14 @@ /// private void buttonItemBZ3_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null||selLine[0].Count <= 1) { return; } @@ -7123,14 +6884,14 @@ /// private void buttonItemBZ4_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7140,7 +6901,7 @@ /// /// 距离标注 /// - bool distanceMarker; +// bool distanceMarker; private void buttonItemBZ5_Click(object sender, EventArgs e) { //日志记录 @@ -7148,7 +6909,7 @@ globeControl1.Globe.Action = EnumAction3D.TrackPolyline; //globeControl1.Globe.DistanceRuler.MeasureMode = EnumDistanceMeasureMode.HVSLineMeasure; - distanceMarker = true; +// distanceMarker = true; } /// /// 自定义标注 @@ -7187,14 +6948,14 @@ /// private void buttonItemBZ8_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7775,11 +7536,9 @@ if (frm.ShowDialog() == DialogResult.OK) { GSOLayer featureAddLayer = TreeNodeFeatureLayer(); - if (featureAddLayer != null) - { - FrmAddInstrument dlg = new FrmAddInstrument(globeControl1, featureAddLayer); - dlg.Show(this); - } + if (featureAddLayer == null) return; + FrmAddInstrument dlg = new FrmAddInstrument(globeControl1, featureAddLayer); + dlg.Show(this); } } /// @@ -7822,11 +7581,9 @@ frm.citySevenLineType); globeControl1.Tag = citySevenLine; GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(frm.citySevenLineType); - if (layer != null) - { - globeControl1.Globe.DestLayerFeatureAdd = layer; - layer.Editable = true; - } + if (layer == null) return; + globeControl1.Globe.DestLayerFeatureAdd = layer; + layer.Editable = true; } } #endregion @@ -7986,44 +7743,45 @@ LogManager.saveLog(Utility.userName, buttonItemBJ10_2.Text); List listVectorNames = new List(); - for (int i = 0; i < Utility.m_PipelineLayerNames.Count; i++) + foreach (string pipeline in Utility.m_PipelineLayerNames) { - if (!listVectorNames.Contains(Utility.m_PipelineLayerNames[i])) + if (!listVectorNames.Contains(pipeline)) { - listVectorNames.Add(Utility.m_PipelineLayerNames[i]); + listVectorNames.Add(pipeline); } } - for (int i = 0; i < Utility.valueLayerNames.Count; i++) + foreach (string valve in Utility.valueLayerNames) { - if (!listVectorNames.Contains(Utility.valueLayerNames[i])) + if (!listVectorNames.Contains(valve)) { - listVectorNames.Add(Utility.valueLayerNames[i]); + listVectorNames.Add(valve); } } - for (int i = 0; i < Utility.workwellLayerNames.Count; i++) + foreach (string workwell in Utility.workwellLayerNames) { - if (!listVectorNames.Contains(Utility.workwellLayerNames[i])) + if (!listVectorNames.Contains(workwell)) { - listVectorNames.Add(Utility.workwellLayerNames[i]); + listVectorNames.Add(workwell); } } - for (int i = 0; i < Utility.instrumenLayerNames.Count; i++) + foreach (string instrument in Utility.instrumenLayerNames) { - if (!listVectorNames.Contains(Utility.instrumenLayerNames[i])) + if (!listVectorNames.Contains(instrument)) { - listVectorNames.Add(Utility.instrumenLayerNames[i]); + listVectorNames.Add(instrument); } } - for (int i = 0; i < Utility.pipefittingLayerNames.Count; i++) + foreach (string pipefitting in Utility.pipefittingLayerNames) { - if (!listVectorNames.Contains(Utility.pipefittingLayerNames[i])) + if (!listVectorNames.Contains(pipefitting)) { - listVectorNames.Add(Utility.pipefittingLayerNames[i]); + listVectorNames.Add(pipefitting); } } FrmExportVector frm = new FrmExportVector(globeControl1, listVectorNames); frm.ShowDialog(); } + /// /// 删除模型 /// @@ -8032,27 +7790,25 @@ private void buttonItemBJ13_Click(object sender, EventArgs e) { LogManager.saveLog(Utility.userName, buttonItemBJ13.Text); - if (globeControl1.Globe.SelObjectCount > 0) - { - for (int i = 0; i < globeControl1.Globe.SelObjectCount; i++) - { - GSOFeature f = null; - GSOLayer layer = null; - globeControl1.Globe.GetSelectObject(i, out f, out layer); - if (f == null) continue; - f.Delete(); - if (layer != null) - globeControl1.Globe.AddToEditHistroy(layer, f, EnumEditType.Delete); - globeControl1.Refresh(); - - } - MessageBox.Show("删除成功!", "提示"); - } - else + var selObjCount = globeControl1.Globe.SelObjectCount; + if (selObjCount == 0) { MessageBox.Show("请选中要删除的模型!", "提示"); + return; } + for (int i = 0; i < selObjCount; i++) + { + GSOFeature f; + GSOLayer layer; + globeControl1.Globe.GetSelectObject(i, out f, out layer); + if (f == null) continue; + f.Delete(); + if (layer != null) + globeControl1.Globe.AddToEditHistroy(layer, f, EnumEditType.Delete); + globeControl1.Refresh(); + } + MessageBox.Show("删除成功!", "提示"); globeControl1.Globe.Action = EnumAction3D.ActionNull; } @@ -8118,6 +7874,7 @@ toolStripNumbers.Text = "红线审核 |共有:" + table.Rows.Count + "条"; toolStripDropDownButton3.Visible = true; } + /// /// 主窗体 下方的工具条中的 导出.xls文件 按钮事件处理 /// @@ -8127,24 +7884,28 @@ { if (dataGridViewX1.Rows.Count != 0) { - string strSaveFile = string.Empty; - SaveFileDialog savefiledialog = new SaveFileDialog(); - savefiledialog.Filter = "Excel文件|*.xls,*.xlsx"; - savefiledialog.AddExtension = true; - savefiledialog.FileName = "红线审核"; - if (savefiledialog.ShowDialog() == DialogResult.OK) - strSaveFile = savefiledialog.FileName; - else return; - - ExpEXCEL.ExpToExcel(dataGridViewX1, strSaveFile, "红线审核", lineStruct, featsList); - MessageBox.Show("导出成功!"); - } - else - { MessageBox.Show("表格内容为空!", "提示"); + return; } + string strSaveFile; + SaveFileDialog savefiledialog = new SaveFileDialog(); + savefiledialog.Filter = "Excel文件|*.xls,*.xlsx"; + savefiledialog.AddExtension = true; + savefiledialog.FileName = "红线审核"; + if (savefiledialog.ShowDialog() == DialogResult.OK) + strSaveFile = savefiledialog.FileName; + else return; + + ExpEXCEL.ExpToExcel(dataGridViewX1, strSaveFile, "红线审核", lineStruct, featsList); + MessageBox.Show("导出成功!"); + } + /// + /// 双屏对比的地面透明度设置 + /// + /// + /// private void sliderItem2_ValueChanged(object sender, EventArgs e) { LogManager.saveLog(Utility.userName, sliderItem2.Text); @@ -8155,7 +7916,7 @@ { layer.Opaque = 100 - sliderItem2.Value; } - layer = globeControl2.Globe.Layers.GetLayerByCaption("180fd");//("180fd"); + layer = globeControl2.Globe.Layers.GetLayerByCaption(Utility.roadLayerName);//("180fd"); if (layer != null) { layer.Opaque = 100 - sliderItem2.Value; @@ -8554,7 +8315,7 @@ LogManager.saveLog(Utility.userName, buttonItem8.Text); int width = Width; - FrmCompareFeature.ShowForm(globeControl1, globeControl2, layerTemp, layerTemp2, width); + FrmCompareFeature.ShowForm(globeControl1, globeControl2, width); } /// /// 红线审核导出图片 @@ -8690,7 +8451,6 @@ private void btn_role_resc_Click(object sender, EventArgs e) { - LogManager.saveLog(Utility.userName, btn_role_resc.Text); if (FrmRoleRescManager.IS_OPEN) return; @@ -8708,7 +8468,8 @@ frm.ShowDialog(); } } -//文档管理 操作 + + //文档管理 操作 private void btn_document_info_Click(object sender, EventArgs e) { @@ -8919,11 +8680,9 @@ } private void pictureBox1_Paint(object sender, PaintEventArgs e) - { - int Width = this.Width; + { string welcomeUser = "欢迎您:" + Utility.userName; - Graphics g = e.Graphics; - g.DrawString(welcomeUser, new Font("宋体", 12), new SolidBrush(Color.Black), Width - 180, 50); + e.Graphics.DrawString(welcomeUser, new Font("宋体", 12), new SolidBrush(Color.Black), Width - 180, 50); } } diff --git a/MainFrm.designer.cs b/MainFrm.designer.cs index a9b8c6f..5d74670 100644 --- a/MainFrm.designer.cs +++ b/MainFrm.designer.cs @@ -244,42 +244,6 @@ this.保存ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.定位ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.ribbonControl1 = new DevComponents.DotNetBar.RibbonControl(); - this.ribbonPanel6 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar6 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItemSPSZ = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem8 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemLocation = new DevComponents.DotNetBar.ButtonItem(); - this.sliderItem2 = new DevComponents.DotNetBar.SliderItem(); - this.buttonItemGBJC = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonPanel4 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar1 = new DevComponents.DotNetBar.RibbonBar(); - this.btn_document_info = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonPanel12 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar18 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItem133 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem132 = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonBar13 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItem127 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem128 = new DevComponents.DotNetBar.ButtonItem(); - this.sliderItem1 = new DevComponents.DotNetBar.SliderItem(); - this.buttonItem134 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem130 = new DevComponents.DotNetBar.ButtonItem(); - this.btn_check_history = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonPanel5 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar2 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItemHX1 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemHX2 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemDCTP = new DevComponents.DotNetBar.ButtonItem(); - this.sliderItem3 = new DevComponents.DotNetBar.SliderItem(); - this.ribbonPanel2 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar3 = new DevComponents.DotNetBar.RibbonBar(); - this.btn_user_info = new DevComponents.DotNetBar.ButtonItem(); - this.btn_role_info = new DevComponents.DotNetBar.ButtonItem(); - this.btn_resc_info = new DevComponents.DotNetBar.ButtonItem(); - this.btn_role_resc = new DevComponents.DotNetBar.ButtonItem(); - this.btn_user_role = new DevComponents.DotNetBar.ButtonItem(); - this.btn_password_edit = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemPasswordReset = new DevComponents.DotNetBar.ButtonItem(); this.ribbonPanel15 = new DevComponents.DotNetBar.RibbonPanel(); this.ribbonBar20 = new DevComponents.DotNetBar.RibbonBar(); this.buttonItemSH = new DevComponents.DotNetBar.ButtonItem(); @@ -448,6 +412,42 @@ this.buttonItemBZ9 = new DevComponents.DotNetBar.ButtonItem(); this.buttonItemBZ10 = new DevComponents.DotNetBar.ButtonItem(); this.buttonItemBZ11 = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel6 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar6 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItemSPSZ = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem8 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemLocation = new DevComponents.DotNetBar.ButtonItem(); + this.sliderItem2 = new DevComponents.DotNetBar.SliderItem(); + this.buttonItemGBJC = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel4 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar1 = new DevComponents.DotNetBar.RibbonBar(); + this.btn_document_info = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel12 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar18 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItem133 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem132 = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonBar13 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItem127 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem128 = new DevComponents.DotNetBar.ButtonItem(); + this.sliderItem1 = new DevComponents.DotNetBar.SliderItem(); + this.buttonItem134 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem130 = new DevComponents.DotNetBar.ButtonItem(); + this.btn_check_history = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel5 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar2 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItemHX1 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemHX2 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemDCTP = new DevComponents.DotNetBar.ButtonItem(); + this.sliderItem3 = new DevComponents.DotNetBar.SliderItem(); + this.ribbonPanel2 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar3 = new DevComponents.DotNetBar.RibbonBar(); + this.btn_user_info = new DevComponents.DotNetBar.ButtonItem(); + this.btn_role_info = new DevComponents.DotNetBar.ButtonItem(); + this.btn_resc_info = new DevComponents.DotNetBar.ButtonItem(); + this.btn_role_resc = new DevComponents.DotNetBar.ButtonItem(); + this.btn_user_role = new DevComponents.DotNetBar.ButtonItem(); + this.btn_password_edit = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemPasswordReset = new DevComponents.DotNetBar.ButtonItem(); this.ribbonPanel1 = new DevComponents.DotNetBar.RibbonPanel(); this.ribbonBar21 = new DevComponents.DotNetBar.RibbonBar(); this.buttonItem87 = new DevComponents.DotNetBar.ButtonItem(); @@ -652,12 +652,12 @@ this.contextMenuStrip3.SuspendLayout(); this.contextMenuStripDeleteLayerNode.SuspendLayout(); this.ribbonControl1.SuspendLayout(); + this.ribbonPanel15.SuspendLayout(); this.ribbonPanel6.SuspendLayout(); this.ribbonPanel4.SuspendLayout(); this.ribbonPanel12.SuspendLayout(); this.ribbonPanel5.SuspendLayout(); this.ribbonPanel2.SuspendLayout(); - this.ribbonPanel15.SuspendLayout(); this.ribbonPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); this.panelOfTable.SuspendLayout(); @@ -2283,12 +2283,12 @@ // this.ribbonControl1.BackgroundStyle.Class = ""; this.ribbonControl1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonControl1.Controls.Add(this.ribbonPanel15); + this.ribbonControl1.Controls.Add(this.ribbonPanel2); this.ribbonControl1.Controls.Add(this.ribbonPanel6); this.ribbonControl1.Controls.Add(this.ribbonPanel4); this.ribbonControl1.Controls.Add(this.ribbonPanel12); this.ribbonControl1.Controls.Add(this.ribbonPanel5); - this.ribbonControl1.Controls.Add(this.ribbonPanel2); - this.ribbonControl1.Controls.Add(this.ribbonPanel15); this.ribbonControl1.Controls.Add(this.ribbonPanel1); this.ribbonControl1.Dock = System.Windows.Forms.DockStyle.Top; this.ribbonControl1.ImeMode = System.Windows.Forms.ImeMode.NoControl; @@ -2331,595 +2331,6 @@ this.ribbonControl1.Text = "ribbonControl1"; this.ribbonControl1.UseCustomizeDialog = false; // - // ribbonPanel6 - // - this.ribbonPanel6.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel6.Controls.Add(this.ribbonBar6); - this.ribbonPanel6.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel6.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel6.Name = "ribbonPanel6"; - this.ribbonPanel6.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel6.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel6.Style.Class = ""; - this.ribbonPanel6.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel6.StyleMouseDown.Class = ""; - this.ribbonPanel6.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel6.StyleMouseOver.Class = ""; - this.ribbonPanel6.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel6.TabIndex = 38; - // - // ribbonBar6 - // - this.ribbonBar6.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar6.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar6.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar6.BackgroundStyle.Class = ""; - this.ribbonBar6.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar6.ContainerControlProcessDialogKey = true; - this.ribbonBar6.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar6.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItemSPSZ, - this.buttonItem8, - this.buttonItemLocation, - this.sliderItem2, - this.buttonItemGBJC}); - this.ribbonBar6.Location = new System.Drawing.Point(3, 0); - this.ribbonBar6.Name = "ribbonBar6"; - this.ribbonBar6.Size = new System.Drawing.Size(427, 59); - this.ribbonBar6.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar6.TabIndex = 0; - // - // - // - this.ribbonBar6.TitleStyle.Class = ""; - this.ribbonBar6.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar6.TitleStyleMouseOver.Class = ""; - this.ribbonBar6.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar6.TitleVisible = false; - // - // buttonItemSPSZ - // - this.buttonItemSPSZ.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemSPSZ.Image"))); - this.buttonItemSPSZ.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemSPSZ.Name = "buttonItemSPSZ"; - this.buttonItemSPSZ.SubItemsExpandWidth = 14; - this.buttonItemSPSZ.Text = "双屏设置"; - this.buttonItemSPSZ.Click += new System.EventHandler(this.buttonItemSPSZ_Click); - // - // buttonItem8 - // - this.buttonItem8.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem8.Image"))); - this.buttonItem8.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem8.Name = "buttonItem8"; - this.buttonItem8.SubItemsExpandWidth = 14; - this.buttonItem8.Text = "双屏分析"; - this.buttonItem8.Click += new System.EventHandler(this.buttonItem8_Click); - // - // buttonItemLocation - // - this.buttonItemLocation.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemLocation.Image"))); - this.buttonItemLocation.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemLocation.Name = "buttonItemLocation"; - this.buttonItemLocation.SubItemsExpandWidth = 14; - this.buttonItemLocation.Text = "快速定位"; - this.buttonItemLocation.Click += new System.EventHandler(this.buttonItemLocation_Click); - // - // sliderItem2 - // - this.sliderItem2.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; - this.sliderItem2.LabelWidth = 50; - this.sliderItem2.Name = "sliderItem2"; - this.sliderItem2.Text = "地面透明度"; - this.sliderItem2.TextColor = System.Drawing.Color.Black; - this.sliderItem2.Value = 0; - this.sliderItem2.ValueChanged += new System.EventHandler(this.sliderItem2_ValueChanged); - // - // buttonItemGBJC - // - this.buttonItemGBJC.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemGBJC.Image"))); - this.buttonItemGBJC.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemGBJC.Name = "buttonItemGBJC"; - this.buttonItemGBJC.SubItemsExpandWidth = 14; - this.buttonItemGBJC.Text = "国标检测"; - this.buttonItemGBJC.Click += new System.EventHandler(this.buttonItemGBJC_Click); - // - // ribbonPanel4 - // - this.ribbonPanel4.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel4.Controls.Add(this.ribbonBar1); - this.ribbonPanel4.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel4.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel4.Name = "ribbonPanel4"; - this.ribbonPanel4.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel4.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel4.Style.Class = ""; - this.ribbonPanel4.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel4.StyleMouseDown.Class = ""; - this.ribbonPanel4.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel4.StyleMouseOver.Class = ""; - this.ribbonPanel4.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel4.TabIndex = 36; - this.ribbonPanel4.Visible = false; - // - // ribbonBar1 - // - this.ribbonBar1.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar1.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar1.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar1.BackgroundStyle.Class = ""; - this.ribbonBar1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar1.ContainerControlProcessDialogKey = true; - this.ribbonBar1.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar1.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.btn_document_info}); - this.ribbonBar1.Location = new System.Drawing.Point(3, 0); - this.ribbonBar1.Name = "ribbonBar1"; - this.ribbonBar1.Size = new System.Drawing.Size(88, 59); - this.ribbonBar1.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar1.TabIndex = 0; - // - // - // - this.ribbonBar1.TitleStyle.Class = ""; - this.ribbonBar1.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar1.TitleStyleMouseOver.Class = ""; - this.ribbonBar1.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar1.TitleVisible = false; - // - // btn_document_info - // - this.btn_document_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_document_info.Image"))); - this.btn_document_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_document_info.Name = "btn_document_info"; - this.btn_document_info.SubItemsExpandWidth = 14; - this.btn_document_info.Text = "文档管理"; - this.btn_document_info.Click += new System.EventHandler(this.btn_document_info_Click); - // - // ribbonPanel12 - // - this.ribbonPanel12.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel12.Controls.Add(this.ribbonBar18); - this.ribbonPanel12.Controls.Add(this.ribbonBar13); - this.ribbonPanel12.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel12.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel12.Name = "ribbonPanel12"; - this.ribbonPanel12.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel12.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel12.Style.Class = ""; - this.ribbonPanel12.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel12.StyleMouseDown.Class = ""; - this.ribbonPanel12.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel12.StyleMouseOver.Class = ""; - this.ribbonPanel12.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel12.TabIndex = 34; - this.ribbonPanel12.Visible = false; - // - // ribbonBar18 - // - this.ribbonBar18.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar18.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar18.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar18.BackgroundStyle.Class = ""; - this.ribbonBar18.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar18.ContainerControlProcessDialogKey = true; - this.ribbonBar18.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar18.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItem133, - this.buttonItem132}); - this.ribbonBar18.Location = new System.Drawing.Point(508, 0); - this.ribbonBar18.Name = "ribbonBar18"; - this.ribbonBar18.Size = new System.Drawing.Size(171, 59); - this.ribbonBar18.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar18.TabIndex = 1; - // - // - // - this.ribbonBar18.TitleStyle.Class = ""; - this.ribbonBar18.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar18.TitleStyleMouseOver.Class = ""; - this.ribbonBar18.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar18.TitleVisible = false; - // - // buttonItem133 - // - this.buttonItem133.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem133.Image"))); - this.buttonItem133.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem133.Name = "buttonItem133"; - this.buttonItem133.SubItemsExpandWidth = 14; - this.buttonItem133.Text = "审核入库"; - this.buttonItem133.Click += new System.EventHandler(this.buttonItem133_Click_1); - // - // buttonItem132 - // - this.buttonItem132.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem132.Image"))); - this.buttonItem132.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem132.Name = "buttonItem132"; - this.buttonItem132.SubItemsExpandWidth = 14; - this.buttonItem132.Text = "已审核的图层"; - this.buttonItem132.Visible = false; - this.buttonItem132.Click += new System.EventHandler(this.buttonItem132_Click_1); - // - // ribbonBar13 - // - this.ribbonBar13.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar13.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar13.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar13.BackgroundStyle.Class = ""; - this.ribbonBar13.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar13.ContainerControlProcessDialogKey = true; - this.ribbonBar13.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar13.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItem127, - this.buttonItem128, - this.sliderItem1, - this.buttonItem134, - this.buttonItem130, - this.btn_check_history}); - this.ribbonBar13.Location = new System.Drawing.Point(3, 0); - this.ribbonBar13.Name = "ribbonBar13"; - this.ribbonBar13.Size = new System.Drawing.Size(505, 59); - this.ribbonBar13.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar13.TabIndex = 0; - // - // - // - this.ribbonBar13.TitleStyle.Class = ""; - this.ribbonBar13.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar13.TitleStyleMouseOver.Class = ""; - this.ribbonBar13.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar13.TitleVisible = false; - // - // buttonItem127 - // - this.buttonItem127.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem127.Image"))); - this.buttonItem127.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem127.Name = "buttonItem127"; - this.buttonItem127.SubItemsExpandWidth = 14; - this.buttonItem127.Text = "打开数据"; - this.buttonItem127.Click += new System.EventHandler(this.buttonItem127_Click_2); - // - // buttonItem128 - // - this.buttonItem128.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem128.Image"))); - this.buttonItem128.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem128.Name = "buttonItem128"; - this.buttonItem128.SubItemsExpandWidth = 14; - this.buttonItem128.Text = "一键审核"; - this.buttonItem128.Click += new System.EventHandler(this.buttonItem128_Click); - // - // sliderItem1 - // - this.sliderItem1.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; - this.sliderItem1.LabelWidth = 50; - this.sliderItem1.Name = "sliderItem1"; - this.sliderItem1.Text = "地面透明度"; - this.sliderItem1.TextColor = System.Drawing.Color.Black; - this.sliderItem1.Value = 0; - this.sliderItem1.ValueChanged += new System.EventHandler(this.sliderItem1_ValueChanged); - // - // buttonItem134 - // - this.buttonItem134.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem134.Image"))); - this.buttonItem134.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem134.Name = "buttonItem134"; - this.buttonItem134.SubItemsExpandWidth = 14; - this.buttonItem134.Text = "模拟设计修改"; - this.buttonItem134.Click += new System.EventHandler(this.buttonItem134_Click_1); - // - // buttonItem130 - // - this.buttonItem130.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem130.Image"))); - this.buttonItem130.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem130.Name = "buttonItem130"; - this.buttonItem130.SubItemsExpandWidth = 14; - this.buttonItem130.Text = "导出审核图"; - this.buttonItem130.Click += new System.EventHandler(this.buttonItem130_Click_1); - // - // btn_check_history - // - this.btn_check_history.Image = ((System.Drawing.Image)(resources.GetObject("btn_check_history.Image"))); - this.btn_check_history.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_check_history.Name = "btn_check_history"; - this.btn_check_history.SubItemsExpandWidth = 14; - this.btn_check_history.Text = "审核历史"; - this.btn_check_history.Click += new System.EventHandler(this.btn_check_history_Click); - // - // ribbonPanel5 - // - this.ribbonPanel5.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel5.Controls.Add(this.ribbonBar2); - this.ribbonPanel5.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel5.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel5.Name = "ribbonPanel5"; - this.ribbonPanel5.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel5.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel5.Style.Class = ""; - this.ribbonPanel5.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel5.StyleMouseDown.Class = ""; - this.ribbonPanel5.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel5.StyleMouseOver.Class = ""; - this.ribbonPanel5.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel5.TabIndex = 37; - this.ribbonPanel5.Visible = false; - // - // ribbonBar2 - // - this.ribbonBar2.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar2.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar2.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar2.BackgroundStyle.Class = ""; - this.ribbonBar2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar2.ContainerControlProcessDialogKey = true; - this.ribbonBar2.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar2.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItemHX1, - this.buttonItemHX2, - this.buttonItemDCTP, - this.sliderItem3}); - this.ribbonBar2.Location = new System.Drawing.Point(3, 0); - this.ribbonBar2.Name = "ribbonBar2"; - this.ribbonBar2.Size = new System.Drawing.Size(350, 59); - this.ribbonBar2.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar2.TabIndex = 0; - // - // - // - this.ribbonBar2.TitleStyle.Class = ""; - this.ribbonBar2.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar2.TitleStyleMouseOver.Class = ""; - this.ribbonBar2.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar2.TitleVisible = false; - // - // buttonItemHX1 - // - this.buttonItemHX1.AutoExpandOnClick = true; - this.buttonItemHX1.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX1.Image"))); - this.buttonItemHX1.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemHX1.Name = "buttonItemHX1"; - this.buttonItemHX1.SubItemsExpandWidth = 14; - this.buttonItemHX1.Text = "导入红线"; - this.buttonItemHX1.Click += new System.EventHandler(this.buttonItemHX1_Click); - // - // buttonItemHX2 - // - this.buttonItemHX2.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX2.Image"))); - this.buttonItemHX2.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemHX2.Name = "buttonItemHX2"; - this.buttonItemHX2.SubItemsExpandWidth = 14; - this.buttonItemHX2.Text = "红线审核"; - this.buttonItemHX2.Click += new System.EventHandler(this.buttonItemHX2_Click); - // - // buttonItemDCTP - // - this.buttonItemDCTP.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemDCTP.Image"))); - this.buttonItemDCTP.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemDCTP.Name = "buttonItemDCTP"; - this.buttonItemDCTP.SubItemsExpandWidth = 14; - this.buttonItemDCTP.Text = "导出图片"; - this.buttonItemDCTP.Click += new System.EventHandler(this.buttonItemDCTP_Click); - // - // sliderItem3 - // - this.sliderItem3.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; - this.sliderItem3.LabelWidth = 50; - this.sliderItem3.Name = "sliderItem3"; - this.sliderItem3.Text = "地面透明度"; - this.sliderItem3.TextColor = System.Drawing.Color.Black; - this.sliderItem3.Value = 0; - this.sliderItem3.ValueChanged += new System.EventHandler(this.sliderItem3_ValueChanged); - // - // ribbonPanel2 - // - this.ribbonPanel2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel2.Controls.Add(this.ribbonBar3); - this.ribbonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel2.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel2.Name = "ribbonPanel2"; - this.ribbonPanel2.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel2.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel2.Style.Class = ""; - this.ribbonPanel2.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel2.StyleMouseDown.Class = ""; - this.ribbonPanel2.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel2.StyleMouseOver.Class = ""; - this.ribbonPanel2.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel2.TabIndex = 39; - this.ribbonPanel2.Visible = false; - // - // ribbonBar3 - // - this.ribbonBar3.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar3.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar3.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar3.BackgroundStyle.Class = ""; - this.ribbonBar3.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar3.ContainerControlProcessDialogKey = true; - this.ribbonBar3.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar3.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.btn_user_info, - this.btn_role_info, - this.btn_resc_info, - this.btn_role_resc, - this.btn_user_role, - this.btn_password_edit, - this.buttonItemPasswordReset}); - this.ribbonBar3.Location = new System.Drawing.Point(3, 0); - this.ribbonBar3.Name = "ribbonBar3"; - this.ribbonBar3.Size = new System.Drawing.Size(551, 59); - this.ribbonBar3.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar3.TabIndex = 1; - // - // - // - this.ribbonBar3.TitleStyle.Class = ""; - this.ribbonBar3.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar3.TitleStyleMouseOver.Class = ""; - this.ribbonBar3.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar3.TitleVisible = false; - // - // btn_user_info - // - this.btn_user_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_info.Image"))); - this.btn_user_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_user_info.Name = "btn_user_info"; - this.btn_user_info.SubItemsExpandWidth = 14; - this.btn_user_info.Text = "用户管理"; - this.btn_user_info.Click += new System.EventHandler(this.btn_user_info_Click); - // - // btn_role_info - // - this.btn_role_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_info.Image"))); - this.btn_role_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_role_info.Name = "btn_role_info"; - this.btn_role_info.SubItemsExpandWidth = 14; - this.btn_role_info.Text = "角色管理"; - this.btn_role_info.Click += new System.EventHandler(this.btn_role_info_Click); - // - // btn_resc_info - // - this.btn_resc_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_resc_info.Image"))); - this.btn_resc_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_resc_info.Name = "btn_resc_info"; - this.btn_resc_info.SubItemsExpandWidth = 14; - this.btn_resc_info.Text = "资源管理"; - this.btn_resc_info.Visible = false; - this.btn_resc_info.Click += new System.EventHandler(this.btn_resc_info_Click); - // - // btn_role_resc - // - this.btn_role_resc.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_resc.Image"))); - this.btn_role_resc.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_role_resc.Name = "btn_role_resc"; - this.btn_role_resc.SubItemsExpandWidth = 14; - this.btn_role_resc.Text = "角色授权"; - this.btn_role_resc.Click += new System.EventHandler(this.btn_role_resc_Click); - // - // btn_user_role - // - this.btn_user_role.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_role.Image"))); - this.btn_user_role.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_user_role.Name = "btn_user_role"; - this.btn_user_role.SubItemsExpandWidth = 14; - this.btn_user_role.Text = "用户授权"; - this.btn_user_role.Click += new System.EventHandler(this.btn_user_role_Click); - // - // btn_password_edit - // - this.btn_password_edit.Image = ((System.Drawing.Image)(resources.GetObject("btn_password_edit.Image"))); - this.btn_password_edit.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_password_edit.Name = "btn_password_edit"; - this.btn_password_edit.SubItemsExpandWidth = 14; - this.btn_password_edit.Text = "密码修改"; - this.btn_password_edit.Click += new System.EventHandler(this.btn_password_edit_Click); - // - // buttonItemPasswordReset - // - this.buttonItemPasswordReset.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemPasswordReset.Image"))); - this.buttonItemPasswordReset.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemPasswordReset.Name = "buttonItemPasswordReset"; - this.buttonItemPasswordReset.SubItemsExpandWidth = 14; - this.buttonItemPasswordReset.Text = "重置密码"; - this.buttonItemPasswordReset.Click += new System.EventHandler(this.buttonItemPasswordReset_Click); - // // ribbonPanel15 // this.ribbonPanel15.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; @@ -2945,7 +2356,6 @@ this.ribbonPanel15.StyleMouseOver.Class = ""; this.ribbonPanel15.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; this.ribbonPanel15.TabIndex = 35; - this.ribbonPanel15.Visible = false; // // ribbonBar20 // @@ -4286,6 +3696,596 @@ this.buttonItemBZ11.Text = "标注管理"; this.buttonItemBZ11.Click += new System.EventHandler(this.buttonItemBZ11_Click); // + // ribbonPanel6 + // + this.ribbonPanel6.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel6.Controls.Add(this.ribbonBar6); + this.ribbonPanel6.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel6.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel6.Name = "ribbonPanel6"; + this.ribbonPanel6.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel6.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel6.Style.Class = ""; + this.ribbonPanel6.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel6.StyleMouseDown.Class = ""; + this.ribbonPanel6.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel6.StyleMouseOver.Class = ""; + this.ribbonPanel6.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel6.TabIndex = 38; + this.ribbonPanel6.Visible = false; + // + // ribbonBar6 + // + this.ribbonBar6.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar6.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar6.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar6.BackgroundStyle.Class = ""; + this.ribbonBar6.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar6.ContainerControlProcessDialogKey = true; + this.ribbonBar6.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar6.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItemSPSZ, + this.buttonItem8, + this.buttonItemLocation, + this.sliderItem2, + this.buttonItemGBJC}); + this.ribbonBar6.Location = new System.Drawing.Point(3, 0); + this.ribbonBar6.Name = "ribbonBar6"; + this.ribbonBar6.Size = new System.Drawing.Size(427, 59); + this.ribbonBar6.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar6.TabIndex = 0; + // + // + // + this.ribbonBar6.TitleStyle.Class = ""; + this.ribbonBar6.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar6.TitleStyleMouseOver.Class = ""; + this.ribbonBar6.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar6.TitleVisible = false; + // + // buttonItemSPSZ + // + this.buttonItemSPSZ.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemSPSZ.Image"))); + this.buttonItemSPSZ.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemSPSZ.Name = "buttonItemSPSZ"; + this.buttonItemSPSZ.SubItemsExpandWidth = 14; + this.buttonItemSPSZ.Text = "双屏设置"; + this.buttonItemSPSZ.Click += new System.EventHandler(this.buttonItemSPSZ_Click); + // + // buttonItem8 + // + this.buttonItem8.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem8.Image"))); + this.buttonItem8.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem8.Name = "buttonItem8"; + this.buttonItem8.SubItemsExpandWidth = 14; + this.buttonItem8.Text = "双屏分析"; + this.buttonItem8.Click += new System.EventHandler(this.buttonItem8_Click); + // + // buttonItemLocation + // + this.buttonItemLocation.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemLocation.Image"))); + this.buttonItemLocation.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemLocation.Name = "buttonItemLocation"; + this.buttonItemLocation.SubItemsExpandWidth = 14; + this.buttonItemLocation.Text = "快速定位"; + this.buttonItemLocation.Click += new System.EventHandler(this.buttonItemLocation_Click); + // + // sliderItem2 + // + this.sliderItem2.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; + this.sliderItem2.LabelWidth = 50; + this.sliderItem2.Name = "sliderItem2"; + this.sliderItem2.Text = "地面透明度"; + this.sliderItem2.TextColor = System.Drawing.Color.Black; + this.sliderItem2.Value = 0; + this.sliderItem2.ValueChanged += new System.EventHandler(this.sliderItem2_ValueChanged); + // + // buttonItemGBJC + // + this.buttonItemGBJC.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemGBJC.Image"))); + this.buttonItemGBJC.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemGBJC.Name = "buttonItemGBJC"; + this.buttonItemGBJC.SubItemsExpandWidth = 14; + this.buttonItemGBJC.Text = "国标检测"; + this.buttonItemGBJC.Click += new System.EventHandler(this.buttonItemGBJC_Click); + // + // ribbonPanel4 + // + this.ribbonPanel4.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel4.Controls.Add(this.ribbonBar1); + this.ribbonPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel4.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel4.Name = "ribbonPanel4"; + this.ribbonPanel4.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel4.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel4.Style.Class = ""; + this.ribbonPanel4.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel4.StyleMouseDown.Class = ""; + this.ribbonPanel4.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel4.StyleMouseOver.Class = ""; + this.ribbonPanel4.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel4.TabIndex = 36; + this.ribbonPanel4.Visible = false; + // + // ribbonBar1 + // + this.ribbonBar1.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar1.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar1.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar1.BackgroundStyle.Class = ""; + this.ribbonBar1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar1.ContainerControlProcessDialogKey = true; + this.ribbonBar1.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar1.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.btn_document_info}); + this.ribbonBar1.Location = new System.Drawing.Point(3, 0); + this.ribbonBar1.Name = "ribbonBar1"; + this.ribbonBar1.Size = new System.Drawing.Size(88, 59); + this.ribbonBar1.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar1.TabIndex = 0; + // + // + // + this.ribbonBar1.TitleStyle.Class = ""; + this.ribbonBar1.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar1.TitleStyleMouseOver.Class = ""; + this.ribbonBar1.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar1.TitleVisible = false; + // + // btn_document_info + // + this.btn_document_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_document_info.Image"))); + this.btn_document_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_document_info.Name = "btn_document_info"; + this.btn_document_info.SubItemsExpandWidth = 14; + this.btn_document_info.Text = "文档管理"; + this.btn_document_info.Click += new System.EventHandler(this.btn_document_info_Click); + // + // ribbonPanel12 + // + this.ribbonPanel12.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel12.Controls.Add(this.ribbonBar18); + this.ribbonPanel12.Controls.Add(this.ribbonBar13); + this.ribbonPanel12.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel12.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel12.Name = "ribbonPanel12"; + this.ribbonPanel12.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel12.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel12.Style.Class = ""; + this.ribbonPanel12.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel12.StyleMouseDown.Class = ""; + this.ribbonPanel12.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel12.StyleMouseOver.Class = ""; + this.ribbonPanel12.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel12.TabIndex = 34; + this.ribbonPanel12.Visible = false; + // + // ribbonBar18 + // + this.ribbonBar18.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar18.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar18.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar18.BackgroundStyle.Class = ""; + this.ribbonBar18.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar18.ContainerControlProcessDialogKey = true; + this.ribbonBar18.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar18.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItem133, + this.buttonItem132}); + this.ribbonBar18.Location = new System.Drawing.Point(508, 0); + this.ribbonBar18.Name = "ribbonBar18"; + this.ribbonBar18.Size = new System.Drawing.Size(171, 59); + this.ribbonBar18.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar18.TabIndex = 1; + // + // + // + this.ribbonBar18.TitleStyle.Class = ""; + this.ribbonBar18.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar18.TitleStyleMouseOver.Class = ""; + this.ribbonBar18.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar18.TitleVisible = false; + // + // buttonItem133 + // + this.buttonItem133.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem133.Image"))); + this.buttonItem133.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem133.Name = "buttonItem133"; + this.buttonItem133.SubItemsExpandWidth = 14; + this.buttonItem133.Text = "审核入库"; + this.buttonItem133.Click += new System.EventHandler(this.buttonItem133_Click_1); + // + // buttonItem132 + // + this.buttonItem132.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem132.Image"))); + this.buttonItem132.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem132.Name = "buttonItem132"; + this.buttonItem132.SubItemsExpandWidth = 14; + this.buttonItem132.Text = "已审核的图层"; + this.buttonItem132.Visible = false; + this.buttonItem132.Click += new System.EventHandler(this.buttonItem132_Click_1); + // + // ribbonBar13 + // + this.ribbonBar13.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar13.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar13.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar13.BackgroundStyle.Class = ""; + this.ribbonBar13.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar13.ContainerControlProcessDialogKey = true; + this.ribbonBar13.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar13.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItem127, + this.buttonItem128, + this.sliderItem1, + this.buttonItem134, + this.buttonItem130, + this.btn_check_history}); + this.ribbonBar13.Location = new System.Drawing.Point(3, 0); + this.ribbonBar13.Name = "ribbonBar13"; + this.ribbonBar13.Size = new System.Drawing.Size(505, 59); + this.ribbonBar13.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar13.TabIndex = 0; + // + // + // + this.ribbonBar13.TitleStyle.Class = ""; + this.ribbonBar13.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar13.TitleStyleMouseOver.Class = ""; + this.ribbonBar13.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar13.TitleVisible = false; + // + // buttonItem127 + // + this.buttonItem127.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem127.Image"))); + this.buttonItem127.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem127.Name = "buttonItem127"; + this.buttonItem127.SubItemsExpandWidth = 14; + this.buttonItem127.Text = "打开数据"; + this.buttonItem127.Click += new System.EventHandler(this.buttonItem127_Click_2); + // + // buttonItem128 + // + this.buttonItem128.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem128.Image"))); + this.buttonItem128.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem128.Name = "buttonItem128"; + this.buttonItem128.SubItemsExpandWidth = 14; + this.buttonItem128.Text = "一键审核"; + this.buttonItem128.Click += new System.EventHandler(this.buttonItem128_Click); + // + // sliderItem1 + // + this.sliderItem1.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; + this.sliderItem1.LabelWidth = 50; + this.sliderItem1.Name = "sliderItem1"; + this.sliderItem1.Text = "地面透明度"; + this.sliderItem1.TextColor = System.Drawing.Color.Black; + this.sliderItem1.Value = 0; + this.sliderItem1.ValueChanged += new System.EventHandler(this.sliderItem1_ValueChanged); + // + // buttonItem134 + // + this.buttonItem134.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem134.Image"))); + this.buttonItem134.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem134.Name = "buttonItem134"; + this.buttonItem134.SubItemsExpandWidth = 14; + this.buttonItem134.Text = "模拟设计修改"; + this.buttonItem134.Click += new System.EventHandler(this.buttonItem134_Click_1); + // + // buttonItem130 + // + this.buttonItem130.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem130.Image"))); + this.buttonItem130.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem130.Name = "buttonItem130"; + this.buttonItem130.SubItemsExpandWidth = 14; + this.buttonItem130.Text = "导出审核图"; + this.buttonItem130.Click += new System.EventHandler(this.buttonItem130_Click_1); + // + // btn_check_history + // + this.btn_check_history.Image = ((System.Drawing.Image)(resources.GetObject("btn_check_history.Image"))); + this.btn_check_history.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_check_history.Name = "btn_check_history"; + this.btn_check_history.SubItemsExpandWidth = 14; + this.btn_check_history.Text = "审核历史"; + this.btn_check_history.Click += new System.EventHandler(this.btn_check_history_Click); + // + // ribbonPanel5 + // + this.ribbonPanel5.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel5.Controls.Add(this.ribbonBar2); + this.ribbonPanel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel5.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel5.Name = "ribbonPanel5"; + this.ribbonPanel5.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel5.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel5.Style.Class = ""; + this.ribbonPanel5.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel5.StyleMouseDown.Class = ""; + this.ribbonPanel5.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel5.StyleMouseOver.Class = ""; + this.ribbonPanel5.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel5.TabIndex = 37; + this.ribbonPanel5.Visible = false; + // + // ribbonBar2 + // + this.ribbonBar2.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar2.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar2.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar2.BackgroundStyle.Class = ""; + this.ribbonBar2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar2.ContainerControlProcessDialogKey = true; + this.ribbonBar2.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar2.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItemHX1, + this.buttonItemHX2, + this.buttonItemDCTP, + this.sliderItem3}); + this.ribbonBar2.Location = new System.Drawing.Point(3, 0); + this.ribbonBar2.Name = "ribbonBar2"; + this.ribbonBar2.Size = new System.Drawing.Size(350, 59); + this.ribbonBar2.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar2.TabIndex = 0; + // + // + // + this.ribbonBar2.TitleStyle.Class = ""; + this.ribbonBar2.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar2.TitleStyleMouseOver.Class = ""; + this.ribbonBar2.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar2.TitleVisible = false; + // + // buttonItemHX1 + // + this.buttonItemHX1.AutoExpandOnClick = true; + this.buttonItemHX1.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX1.Image"))); + this.buttonItemHX1.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemHX1.Name = "buttonItemHX1"; + this.buttonItemHX1.SubItemsExpandWidth = 14; + this.buttonItemHX1.Text = "导入红线"; + this.buttonItemHX1.Click += new System.EventHandler(this.buttonItemHX1_Click); + // + // buttonItemHX2 + // + this.buttonItemHX2.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX2.Image"))); + this.buttonItemHX2.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemHX2.Name = "buttonItemHX2"; + this.buttonItemHX2.SubItemsExpandWidth = 14; + this.buttonItemHX2.Text = "红线审核"; + this.buttonItemHX2.Click += new System.EventHandler(this.buttonItemHX2_Click); + // + // buttonItemDCTP + // + this.buttonItemDCTP.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemDCTP.Image"))); + this.buttonItemDCTP.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemDCTP.Name = "buttonItemDCTP"; + this.buttonItemDCTP.SubItemsExpandWidth = 14; + this.buttonItemDCTP.Text = "导出图片"; + this.buttonItemDCTP.Click += new System.EventHandler(this.buttonItemDCTP_Click); + // + // sliderItem3 + // + this.sliderItem3.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; + this.sliderItem3.LabelWidth = 50; + this.sliderItem3.Name = "sliderItem3"; + this.sliderItem3.Text = "地面透明度"; + this.sliderItem3.TextColor = System.Drawing.Color.Black; + this.sliderItem3.Value = 0; + this.sliderItem3.ValueChanged += new System.EventHandler(this.sliderItem3_ValueChanged); + // + // ribbonPanel2 + // + this.ribbonPanel2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel2.Controls.Add(this.ribbonBar3); + this.ribbonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel2.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel2.Name = "ribbonPanel2"; + this.ribbonPanel2.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel2.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel2.Style.Class = ""; + this.ribbonPanel2.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel2.StyleMouseDown.Class = ""; + this.ribbonPanel2.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel2.StyleMouseOver.Class = ""; + this.ribbonPanel2.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel2.TabIndex = 39; + this.ribbonPanel2.Visible = false; + // + // ribbonBar3 + // + this.ribbonBar3.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar3.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar3.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar3.BackgroundStyle.Class = ""; + this.ribbonBar3.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar3.ContainerControlProcessDialogKey = true; + this.ribbonBar3.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar3.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.btn_user_info, + this.btn_role_info, + this.btn_resc_info, + this.btn_role_resc, + this.btn_user_role, + this.btn_password_edit, + this.buttonItemPasswordReset}); + this.ribbonBar3.Location = new System.Drawing.Point(3, 0); + this.ribbonBar3.Name = "ribbonBar3"; + this.ribbonBar3.Size = new System.Drawing.Size(551, 59); + this.ribbonBar3.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar3.TabIndex = 1; + // + // + // + this.ribbonBar3.TitleStyle.Class = ""; + this.ribbonBar3.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar3.TitleStyleMouseOver.Class = ""; + this.ribbonBar3.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar3.TitleVisible = false; + // + // btn_user_info + // + this.btn_user_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_info.Image"))); + this.btn_user_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_user_info.Name = "btn_user_info"; + this.btn_user_info.SubItemsExpandWidth = 14; + this.btn_user_info.Text = "用户管理"; + this.btn_user_info.Click += new System.EventHandler(this.btn_user_info_Click); + // + // btn_role_info + // + this.btn_role_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_info.Image"))); + this.btn_role_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_role_info.Name = "btn_role_info"; + this.btn_role_info.SubItemsExpandWidth = 14; + this.btn_role_info.Text = "角色管理"; + this.btn_role_info.Click += new System.EventHandler(this.btn_role_info_Click); + // + // btn_resc_info + // + this.btn_resc_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_resc_info.Image"))); + this.btn_resc_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_resc_info.Name = "btn_resc_info"; + this.btn_resc_info.SubItemsExpandWidth = 14; + this.btn_resc_info.Text = "资源管理"; + this.btn_resc_info.Visible = false; + this.btn_resc_info.Click += new System.EventHandler(this.btn_resc_info_Click); + // + // btn_role_resc + // + this.btn_role_resc.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_resc.Image"))); + this.btn_role_resc.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_role_resc.Name = "btn_role_resc"; + this.btn_role_resc.SubItemsExpandWidth = 14; + this.btn_role_resc.Text = "角色授权"; + this.btn_role_resc.Click += new System.EventHandler(this.btn_role_resc_Click); + // + // btn_user_role + // + this.btn_user_role.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_role.Image"))); + this.btn_user_role.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_user_role.Name = "btn_user_role"; + this.btn_user_role.SubItemsExpandWidth = 14; + this.btn_user_role.Text = "用户授权"; + this.btn_user_role.Click += new System.EventHandler(this.btn_user_role_Click); + // + // btn_password_edit + // + this.btn_password_edit.Image = ((System.Drawing.Image)(resources.GetObject("btn_password_edit.Image"))); + this.btn_password_edit.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_password_edit.Name = "btn_password_edit"; + this.btn_password_edit.SubItemsExpandWidth = 14; + this.btn_password_edit.Text = "密码修改"; + this.btn_password_edit.Click += new System.EventHandler(this.btn_password_edit_Click); + // + // buttonItemPasswordReset + // + this.buttonItemPasswordReset.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemPasswordReset.Image"))); + this.buttonItemPasswordReset.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemPasswordReset.Name = "buttonItemPasswordReset"; + this.buttonItemPasswordReset.SubItemsExpandWidth = 14; + this.buttonItemPasswordReset.Text = "重置密码"; + this.buttonItemPasswordReset.Click += new System.EventHandler(this.buttonItemPasswordReset_Click); + // // ribbonPanel1 // this.ribbonPanel1.AutoSize = true; @@ -4465,7 +4465,6 @@ // ribbonTabItem9 // this.ribbonTabItem9.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.ImageAndText; - this.ribbonTabItem9.Checked = true; this.ribbonTabItem9.HoverImage = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem9.HoverImage"))); this.ribbonTabItem9.Image = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem9.Image"))); this.ribbonTabItem9.Name = "ribbonTabItem9"; @@ -4486,6 +4485,7 @@ // ribbonTabItem14 // this.ribbonTabItem14.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.ImageAndText; + this.ribbonTabItem14.Checked = true; this.ribbonTabItem14.HoverImage = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem14.HoverImage"))); this.ribbonTabItem14.Image = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem14.Image"))); this.ribbonTabItem14.Name = "ribbonTabItem14"; @@ -5480,7 +5480,7 @@ this.dataGridViewX2.ReadOnly = true; this.dataGridViewX2.RowHeadersVisible = false; this.dataGridViewX2.RowTemplate.Height = 23; - this.dataGridViewX2.Size = new System.Drawing.Size(23359, 92); + this.dataGridViewX2.Size = new System.Drawing.Size(23953, 92); this.dataGridViewX2.TabIndex = 11; // // dataGridViewTextBoxColumn10 @@ -5574,7 +5574,7 @@ this.dataGridViewX3.ReadOnly = true; this.dataGridViewX3.RowHeadersVisible = false; this.dataGridViewX3.RowTemplate.Height = 23; - this.dataGridViewX3.Size = new System.Drawing.Size(23358, 127); + this.dataGridViewX3.Size = new System.Drawing.Size(23952, 127); this.dataGridViewX3.TabIndex = 5; this.dataGridViewX3.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.dataGridViewX3_MouseDoubleClick); // @@ -5832,7 +5832,7 @@ this.dataGridViewX8.ReadOnly = true; this.dataGridViewX8.RowHeadersVisible = false; this.dataGridViewX8.RowTemplate.Height = 23; - this.dataGridViewX8.Size = new System.Drawing.Size(133, 92); + this.dataGridViewX8.Size = new System.Drawing.Size(99, 92); this.dataGridViewX8.TabIndex = 11; // // dataGridViewTextBoxColumn12 @@ -5927,7 +5927,7 @@ this.dataGridViewX9.ReadOnly = true; this.dataGridViewX9.RowHeadersVisible = false; this.dataGridViewX9.RowTemplate.Height = 23; - this.dataGridViewX9.Size = new System.Drawing.Size(132, 127); + this.dataGridViewX9.Size = new System.Drawing.Size(98, 127); this.dataGridViewX9.TabIndex = 5; this.dataGridViewX9.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.dataGridViewX9_MouseDoubleClick); // @@ -6791,12 +6791,12 @@ this.contextMenuStripDeleteLayerNode.ResumeLayout(false); this.ribbonControl1.ResumeLayout(false); this.ribbonControl1.PerformLayout(); + this.ribbonPanel15.ResumeLayout(false); this.ribbonPanel6.ResumeLayout(false); this.ribbonPanel4.ResumeLayout(false); this.ribbonPanel12.ResumeLayout(false); this.ribbonPanel5.ResumeLayout(false); this.ribbonPanel2.ResumeLayout(false); - this.ribbonPanel15.ResumeLayout(false); this.ribbonPanel1.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.panelOfTable.ResumeLayout(false); diff --git a/MainFrm.resx b/MainFrm.resx index b408d34..6b9ae78 100644 --- a/MainFrm.resx +++ b/MainFrm.resx @@ -351,804 +351,6 @@ 766, 54 - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlDMzFEOUI4NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 - NEI4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlDMzFEOUI3NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 - NEI4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDk5Mzk2NTZBRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz73sIMwAAADIElEQVRIS7WVa0iTYRTH56Uiysvm3TkvpLl5DRIvQYWVWl+6 - iNEVg0yhQqloQZHkLT+Y0YdAs75IpEUhzERZoZhsRpZlS7soblotsRwoxhqWeTrnYZtv+u7NsB74cZ5z - zv89/z17HzYRAPxXeIv/EpFXcOyi4BvKhfehv4FvKBfeh+ayqIUDlIgBgT8whpRYoT2fhgvNVJKBQT9s - hB8/QZDPpnEIjEhg0J5Pw4Vm0mwygG9T06BSqQQhTUhUMoRGpyxYT7OZwfhXC6jVakFIYzNYqN5uMGKa - BI1GIwhpghXJaJJi13d0dEB2bj74hsWzSDlXbzfQG02g0+kEIU2wIomdovzKdVifngnFFytBeb4cLN+n - WaSc6hfKKqB/eHTWoHfwExgMBkFII5MnQUD4WlAWloO26wVs35MDmifPmQFFyqlO/aKKqlmDp31DYDKZ - BCGNTJ4IPqHx8LJvACbNUw7p6e2HuJQMNIhhBuaHj3vBYrEI0tb1BoIiE9kJ9h7Oh7EJM+g/jEJuwVlY - s24ri5RTnfo5BedAIoueIYPumvomuHzjzm9cq2uCq7UNUH2rEarr7kNd0yP26Y+eKoSWtk4wfpmAg7kn - ITY5DUorq1g8cOQEqze3aplOEhRtJoMcL1mMTixV9IgD5a/tSBVDYql8AKOBQLEJtTP08gY/jjFiktKg - 5FIV21Ok3NazvmR2AvrFkCAJyGYk1comZAuHDM/AyLvHThfBveZ26NOPwI59eey7LsbhFCmnOvVJ5+Ef - rrYZLEU8EZ85+HLwW7ZCLMVTFWdkHoLut+/hgbYHaE9XN31XNsupTrWV3jKVs+uS3cyAD0cLe331jW3Q - qRt0CPUlQVHDKI+fN9iGo4W90uNnyuA2vvRtWTlQgxeg/dk7FimnOvU9/CNqUe47b7ANRwt7AfjpKvAK - Gt18Qur35ymhRfsKKLr5hN7EyzDq7humWrrcfSfKxbz/QlwcLDck1snZJdUzYHUDmk57+K1qdXJyzsL6 - RmQD9ZmObygXB8sVIRO6fXQB4hC6eRQppzr1XXmHclnAckFomLc1Um5dItEvhZ97MQXP9N0AAAAASUVO - RK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhDMTdBQjRENEFBRTExRTQ4QjQyODY0MDNBNTJE - NzNCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhDMTdBQjRDNEFBRTExRTQ4QjQyODY0MDNBNTJE - NzNCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NUQyMjc4QTlBQjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4eHsDfAAAB00lEQVRIS7XVWytEURQH8HniTTNHLs0NCXNcXjTN5dH9g/gM - 3jx590QhFDJS0gyTGmpqaqJIMW4hzlAoOaWISS7LWifntI3ddnTGrl92e/57/We/DBsA/CvuYSHZSr0t - lvCGsriX/oI3lMW9lM/SwgF9SEHwizs08IX2vAyLZvZRgXJ+cQWv7yB0q96Ds86voT0vw6KZNJsK4Pnl - DWKxmBBlqhpDUN0UNp2n2VrB/WMOEomEEGX0ArN5o+BGfYB0Oi1EGa8cwpKw6bxRcH6lQiaTEaKMVw5q - rzCbNwr2z65BURQhynh8Qe0VZvNGwdZBFlRVFaKMxxfQXmE2rxc8rW3sQy6XE0puHoG7IaC9YnV9j5th - pbZPqOCDCrbH5uIwOD7/zWgkDkNTizAyuwQjkWWIxFNQWduqmVxI/MiPz6/A8HTUuDMTTYLkbrqhgt5S - T3PG4ZJ3HE7focElZx0u3yn+VQiG1ZLymmm7s74f88f42S6bl9zyJZ6d6Xckd+Mt5ieogH4xJORHHajt - SzvqZPSgECpHZSiA2DztuxBlad+NgnpBEbIjusiiYboKRF+kGFHegUR5ImkFv7G0eAPzWVq8gfksLd5/ - oULiHhYS97BwwPYJlSCUgVubViQAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJEMDQyOEZBNEFEMjExRTRBN0MxRDBCNzJGRUND - MDEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJEMDQyOEY5NEFEMjExRTRBN0MxRDBCNzJGRUND - MDEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkRDRkI1RDVEMTRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz59jfe3AAAEbUlEQVRIS8WTeUybZRzHF48/pnFOuQRajkFLgQFb5iRLNJr4 - l/EPgsniUI4xZDAY1zyxwApsMJyIME61rByl3DfoYGBrgbWUY06FcZSCha4rQ8jYxkqPr2/fvkv8o2Sg - S/wkT970eb6/T5/39z7Prv8dt/Oql4mR4HZJ3ccoXFxhVCzB9DT9JueJdSq6c1wzVZFupepVzxu34XVj - CaEDi1jX6hF8ZQoeokl4iBVwzV9YdU1XRlIl28eVo8phCdXwGltEeOUsro6psaHVwcSDh5volc4iOO8X - 7KuVwb1hEi7J8myq9PEQO//I85oafr0KtEpUpNSETm+AwWDAvfv3YTQaybnm/t/AyO6Ga+UonJOnIijF - 1hA9tWI2qle9RxcI+RIpmZpTIfBULhIyyqHVahHPKcN70TmYnFFCp9OhqXcc9KwW0DOHVl3YU1aUyjJu - F1SpfhO3EM6bMMsVt+D8Zhz2HIpC4oU6bG5uIu4cD3tfTwAjIBNypQYbGxsISquBU34PaDHiVEplGXee - SuIjVaBv3Lz7gJg8vHg4FlZvc+ATVoLipiHsD8qCXWAO7IPK8MG5FjLXKboOeoYADkldUkplGWb7vOb4 - 4BzxIXXQE/1m59WDXdgBvxPfwz6UC4eQUth/WIBDZ2qQXj+K7IYRImeE5s5fOFrcDPvPapcJzVNmmwVY - VxWG9U09uau1tTVymPpc0iYFLew7OEUJ4BwtALfvJpl5xMrKCu6s3cUrn5YbCM1us80CrJZZVWjXr7j3 - 4CE0y8v4IrcaH+cK4Bv+DRyPl8ApphYuia3wZ3eCUzOA1PIfcVuzjHnlIgK/vgy7mHzTG+w12yzA5E53 - edYPo1c2i/X1dQTEfwvbwDQ4hhXg8OcN4P48Df+UTrgkNIAeW4Hg3Hbo9Xq0iGSgs4ls5CUhoXnObLOA - S8pkhG/bdZzgDZJnffT3GXieLAA9XgB2/RjZjuQqMWhxfBw824H55XWyhcfy+HDNqoB1SH4Codn6G7iw - p3d78EaVPlXX0CaZgkqlgly1gpCiK0htHCH/IL6oFcEF3ZjT3CUvXqv0DzDSS0FPq1a/8EbYS5Rqa+if - SAJ8KoeNR7gitEsnoVQqSbGOkJmYX1ggxaY70SabwIGMUrjn8I3WIXnBRPnWu/8nDnE9Sd7cAaP/ZSES - 6/rRKJRArpiHXC7HzekZNIukiCyrhW9mGZgXa4w2kUVnibJnzdXbxP5URzyDO4QjxGl5i9uNpMZeKP5U - IrywAq9yCnGAOGGMonbYxpVnEPGdyR9BO/MTj8kfgXeNFPt5IngVtoF1kQ9WcTs8qgfgmNreQMS21xZL - 0E6Ln6ef75tg8sfgXT8O77oReAkkYNXJ4PRV/4ztyfo9VPTf4xjdf9CpQKzdxxuGe6UMbhXEmc8V6mze - r3qNivx3HGN7UmglQ6CVDMIxXwybo5UcaunJQD8te9rhyx4JrWwItlGNUut3y5+hlp4cDhFCpl14k9jq - nR+Y1NTjIe7NlmMnWKoHsOtvjWYcKpheqFQAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERTg4QTFENEQyMjExRTRBODEyODk0M0RBMTc5 - Qjg3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERTg4QTFDNEQyMjExRTRBODEyODk0M0RBMTc5 - Qjg3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjJGOUEyRDEyMTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6wJF34AAACl0lEQVRIS62Vy08TURSH73/QhQtXVnBhxEcMiUkhbEg0hB1R - Q1i68C8wIW5cEqMLN7ho2Ji4YiEhWq0prYUhfULbadN3obTaChobtZEUsFY9nnPS6WM6HYowyZf87j33 - nG/amaai9geOBYA+4pTxihmBE8DcTQB4J8em/9IwSQyagmrtL+z9rMFmvnhkKvtV7tcVHPz6DVsftulA - AckdhUg8zf19eoLKAd597iMLMItewfOxUDTN/bqCH3tVSG8VWIBZ9AoJApEk9+sKvu/uQ2IjzwJkGtH8 - OrTwy3Hu77vIAnV9mgWlcgWiqRwLjAMmkOMbPbNTKnN/JJntqJGEBZ++7oKcyLLgLN4JrU8Cms2C4pcy - BKKZumCI18temQ/8DzSLZlBmQX7nG/jCKdpgAa0driCtY5iFHuqHSjNoFtaags1iCdzBBG+QgNY2aZ0F - mIUe6osENAtrTUEq/7kDq9PHAszU5yYoq9f1i9cUSCD5ozxDEeTsrhAoONwyxLLb8MrhYQFmZYCHsnpd - v3hNgQROb5hnKIK29944MAThTBEWbS4WYBZ6qC/sKSy5ZJ6BGUQg8b4Bbhjod4AZXlhXWdBa10LrIVul - AM9ggS+aa6AIMMO8ZYUO0KeyIOMtZyaQpXpNi4LFucYzMINwhbMNcMNw5oIJMMNKIA0LNg88mZuH/ssj - dPgBMnN+cBRmny1wrRtSMMMzWCCFMg0UAeY2Fh0+GL5xG8Zu3oHXUrCj3g0WONdTbeBm21/o1N17gPtg - 98Xh3VoS3qzKMDI22agfglnY/Uld8NDc/ZlZwAwvl4Ngun6LGh8rdfVDViNs3rguOOzq6XOD8PDpc7g2 - OkHDH7XWtYa2It66Y4eCQ8cRfpvUNa2hTUD8A6JMaBvCyTdJAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERjY3MEZENEQyMzExRTRCNDlGQUMwMzk0OTAw - Qzc4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERjY3MEZDNEQyMzExRTRCNDlGQUMwMzk0OTAw - Qzc4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjhGOUEyRDEyMTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6GKmpFAAAC+UlEQVRIS63T20vTYRzH8Yforj/Ei24UiSgKIygKi8oyxZQo - cvNYeXaesmzqPGu2POd0ulSsnIdaurTSTJ3O6UxTPGya5vCQx5AuPn39RbHop7nZxQt+z3ie93e/Z4w1 - p7nsCoBt8R6yBF/UHPv+Wb0rfFFzm99CRIwEW1gnqXzxTXxRc0ydctm4OlID2sxrw6iCtiwItC+A2P/D - frLnjwGNSZdMq6N1WOvLwFpP4l/WdRlY6Jaio9Ab7QXba8sVoDHZGdT8PYS9THDqMGnLsKpNw0qXGCua - BO55VZdNQ6U/DRRibVCGb+N1pH5bukoRqHmDHOIG1N8/X2F4I8WyNhtf2+9hqSsZxqZ4upbb6HsSZLHO - Im90ym6hNVcIaktYTexZyUelGEvaHMy/jcFiZxo0xX5Y7ivGcn8JkVmA9uvlWBmqwpJeAWovs+poR99O - eRgWtQWYVUdgrj0FH+i+F3XF3NoappZYGJrEoLaOVYpOOTY/FGJB+xjTqnDMtMTTAC/Ma/Ix/TLUKl9e - x0JfFQpql7PykBP7lWIXzPeUYLIhHCPKCLr/AMy2ZsKoDLTKdNNdvM8TgNpRTBZwfJ885CTmaIChPhwa - mS+GnkdhqjEWY9X+VplqvIMXEhdQ24mZeuSs0N/BNNWWj4k6EdSZHhhXxWH0aSCGFd4c4Tk7zk7XBlUM - FKLToK4Nm+0qYnneRzqGGiSYaIiiyZdhVCdgqFSIwRJPjucZW85O1pvnRmvDkO9zFNTdy2Y6HjGp4HCF - 5kk4xhoiURd/EROv4tBfeM0qAyUC9Mp9QM0+7o829T6LZV0/mNycS6+nFKFWfAGj9ZHozfGwil7miZYH - 7qCmghsw+S6VpV894KuUuKFbfhNNqa749CwY3dm0toK+VABl3HlQM5obYHybwFLc7W1y/Y5BlX6FfgNn - DNcEY0DhZZX+MiGKbh0DNR24AYYWMSfJzc6GZBApwS5skIzNODcg0dV2V36FtsJ7yBJ8UXO8hyzBFzXH - ++H/A/YDv9/V87iOlrYAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 - RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL - ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH - s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW - uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx - xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd - iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ - qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW - GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE - NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n - KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw - qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI - HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq - wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q - 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA3MTZBNTkzNEEwMjExRTRBQjdERDhBQkEzMDEx - MzZEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA3MTZBNTkyNEEwMjExRTRBQjdERDhBQkEzMDEx - MzZEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTgxNjM4Q0YwMTRBRTQxMTk2M0JC - NEQ0MzNCOUIxQzgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - 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 - 0HWhD93n++Dbua+fK9NvoTM5+Udx5mye9NjgCZNf0HEnpN5U5RbPa9+0bdfQ+0eOPzp5ppvG96JfjFkM - nXR/vOP0ePOu/deyCuf8JVSorJny7HQdvR9MTCUm+fUYgyehazLBVCCd8ttpJbQANtO3cDjWbO9werzd - ruK5F9Ld3p7YBEdHCE/WMi0s0jf5mefm0e+ZCsXEf85i/98XsP4NaTpxka74X+IAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJBREU3RDk2NEFCMDExRTQ4OUM5QjZFOENGQzJF - MDk1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJBREU3RDk1NEFCMDExRTQ4OUM5QjZFOENGQzJF - MDk1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MEM5Mzk2NTZBRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz52g1XsAAADeUlEQVRIS62Va0hTYRiAXzVNoQs6oUCttJu3aqatrLxr2k0n - W6bLLlLSxTKCKLoQQUg3IbLMflSgBRGRP7JSSzGnWalYdpnV1MQu1tBWWklqvr3fp2dsOytSfOFh3/l2 - eJ7tnDMGkkmzGCqigsARhPlUQqCi8nEd9v7GEYP5mFcI4K/e/hGHeQ2B7p4+1HV8Nf6Kw4a5GGxtCHzv - 7sU2nR4lbr4/AUBFKIeD4GKYBL79+IX6rm622U8nSgnX4SC4GCaBL50/OXwTwIUY1ohcQkCn/84ZDLBP - I5p16TBl7XYIoaXVwI54RC4h8LG9k/OvQPIOmEZUJW2F+XRoPbBrOiKXEGj9rOdYCqi2gxXhnLQNIo6f - n9tEa7ViI79PoojIJQSaP3RwjAOJaSAjjhL3N+9zrD+W499UVJnSeeVmWDvtlcWlgCedZnK5RC4h8KZV - x2FryQSYmrAVjh/MnP46/57yS7VmZ9+zxr1Yr92NtQ1pWFmfiBevL9QpUqE0JhHcyWuImLsMAU1zG4et - V6yHC1l5oe+evNmD1ZoteL9OgaW1K7GkRoF3H8ZigTocb5bFY8bZWbpoFVwh7yiCR8xdhsAz7XuOh9QD - D2R6twyIEzG/JApz88N7z+T5d+VcDezKL43Ea4UxeCjTqyNUDpUBYeBFXjvjgOAyCdS9asXDJ3NQFj3u - 7eWCyG/FjxR45OyMr6s3S1qCYqE8RA654Uq4dOiUV/v+E9P0i1ZA9Zwg8COnA2HyDZiLYRw4dyAjC50n - z8awBBvNbbWyZ+8x10+By+GONARCbe1gDBPJloCvfKODluQ10mD+qDK5LWFyD6pfvOUYBzydXL0v2I+V - rI9Mhud5BQE9i+RQPt2P30BBYrM4HmYSNf5REGS0b5CzYdKq+iaOITA44wmPiLXwaFfGhDbZMkinYxNJ - 8CpwXxgHobQcPbhv8XegrtNyzAPsOtqHJUPeml1jm/1jYDkdM5G5hB3bDL6KhknLal9xzAN8gpMgVZHm - oKUAuwx29H420c9O/l9KHms4bC0KLFCAY6CSHr+VoHJy88lWbEjHoqoXWPzw5ZCxGKCxkslBLo22L1+6 - ahPeUj/FwgfPh8zpSzfQ0cWrwVKAjfXcWFjjPm9isWSSbx/7JEPF0cWzcYzE7dTfAmysfSLB2z0Awm1H - 8ycnjrD4N/kX4gEg8A9sAFSe4VuPvgAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkEzN0Y5NjgxNEE5MDExRTRBMzU1RUM1MkVEQTU3 - REQxIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkEzN0Y5NjgwNEE5MDExRTRBMzU1RUM1MkVEQTU3 - REQxIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MUU1QUVCQUI4RjRBRTQxMUI2QTlC - RjEwMkVGQzEyNEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4Oz1B+AAABO0lEQVRIS7WUP0sDQRDFt0snIcEiklhGJLH3k6bNp0ifYCUo - KWwMIRCx0EYxEEL+IOPO4SxzczN7d7gGfuzd7Hszd9nHOQD4V9RiStRiStQi0b68GXkgwkjzcdQigU1O - 32CC+9IjUYsENvjY7EySDHhev5skGXA3X5r8aYA3lx0wET1otYgmNMcOku+jXtMg4QJFJMb1a7uPmjUd - rVzHDfDy9pmJaZViCe5rPq7hYpgvXjPw2hNtTqBOevk+F8L0YRGQQosyHxfSf0jUegPLZwkrNedYfi6o - 9Y2RWP6cACPHYnf4XauQablfHYAxo6jt9sfwRGWgVvrVASKmdd7g2OoN4P5pVYhqbgCPmnPuzHPtua1C - s9OHyeyxEFU+IJcCb2p4zj3dKjQvrsat3jD4CwNCIcEv14/fpAfcDwXsled4Tu6+AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlGMEQ1RDBCNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 - MzBCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlGMEQ1RDBBNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 - MzBCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzFDMDRERTRENjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6zemTaAAABh0lEQVRIS7WUvUoDQRSFEwiBKPEHsRAkb+ArWIsv4CNYCSKI - jRD8a1S0m9QhdTobG5uARZogBJSkiLASFJJChQiRcJ2z2bnMZtbxCnrhY3YO556z1aSI6F9JFP+SRBEs - FFaUhoSopAyQKGIBi58jEuErcQSAhY/hyP5DL8Y7mQMcAcD8Phh+u2Tzk9cRAMz914G4wOd1BABzt/cm - LvB5HQHA3On2xQU+ryMAmB8en8UFPq8jAJjvWk/iAp/XEQDM9WZHXODzOgKAudZoiwt8XkcAMN/U78Ml - CcY7mQMcAWhz+FRc3zZFREXypwKYEiG/e+ykc1WYVRrCGUk8nGUHsyic6nKeetUK4dTESjjLDjZUlqaV - hiS8lEsh0Z1LTFYs2FBazFFwcUzB+YE+T8bffD+i4LRIwSV0jdZaO5vhHXtRPmfFgg1n81mlIQnt/W1q - bKyH34dz2XKUz1mxYBaFU5zJUG1tlXDu5TMcjuEsO5hF4exOpZWGtnLpWDiGs+xgFv9gxlmU+gIVyyIX - YCSg/AAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - 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 - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVGNUQ0RjNENEQyRDExRTRBQ0ZFOEVGNkU4Rjcw - RkEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVGNUQ0RjNDNEQyRDExRTRBQ0ZFOEVGNkU4Rjcw - RkEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzUxNUY0MjEyRDRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz7jldwbAAAEyklEQVRIS6WWDUzUdRjHoeXWVktIc74MLREMUxBQV4RYkBmL - SBwSoZIFCgULlOJFDJDxqkiAqGgoiIQ6jaFLB1EqUaC8iMgdL8cJB3fHwR13HO8Hh3x7fn+pwN01nM/2 - 2X77Pb/n+33+v/3/95zBbGOVnZM58QHhRKwgnp9KPXuQ2CtJ6ScOjGo0fcMjI93llVX55us3rqbUc49P - zDLyw9auL4iw5l+IsMY//BRujcygdcg+ug83rpzCsVhf3C6+hHg/W+R++985BtU3pey1cCCpOYQhJzo9 - 8kPX1tZcDoS0Jp2jrCgWmakhOJMVA4GwBd1KNSQ9veiUdeNifjqyMsJxveD7f8+z2rPBlg0kNZ9gJjMj - L8RqQlSegIbLX6CuYAcOBm9FHe8B2rt70SZTgNfehTphJ+paCaEYjSIJkmP24PaPnrhfsBP8okCcCbZ8 - RFLmxIuc6PTICV5Dh4IxNqSEemAA6adzwBdJ8VeDEL/XNqGkmo/iKh4HW5fWNCL7QiEqq2sw3N+Dijwf - nPx6FUjKkpjLiU6P7MDVqL/gj8nJSY4bpbcQnZyK8EOJCI2Ox3dRcY+JjkNYTAIi4w4j7+JlKBQKjI+P - 42qqJ9J832AGawkjTnR6ZPm/iXvn9+ARiWsnJjCu1YLeGshJQCKVolMs5hBLJOiSydAjl0OpUmFweBhj - ZJAfuxVJ3ub6DTJ9LVCd40Pij6AZ01IRoWVGumE5dmZEM45RjRbnolwR72Wm3yDt85W4e2o3FVLnGg1G - xsYwSvDEdxB03gEa6vJwSopOhkZHkRPhgkPbTfUbpOwwR+XxXdT9OM79EQ/lgBLNkjpsz1iMP5t/oU7H - dIoz+oeGcTbUGVHblus3SPJYgfI0LxLSIPmaL4LyHOB5bClK6gswNDLKoUucoezvx+n9W3Dg49f0G8S5 - LUfZEU8MkpC8T43YQi8UVp3kutOFenAIvep+dClUkClVOPXNZoQ6L9NvEE3uN+PdMUBvRXevCgqVmjob - gGpgEH1PwPZYTq7soy9bDolcgRNfOWL/ZhP9BpEfLsVvMW70kQ1C2qMgEyVnUiUoQ2CuPZTUra7rYYi6 - ZDi+910EvbdEv0GYkwlKIj+BijrL+jUKbdJO1LZWwD19EUrrr0Cu6tMpzhCKJcj40gEB9ov1G4RsWoLi - UBe6V7r/n70RkPMOPDJMcLXqLPc0DF3ijBaRCOneG+H31kL9BkF2i3B9nzN1qoagQ4yDlzxQUE6/lHRd - XfLeGbA9cbccwk4JHggegi8UIc3LDj7rFug3CNiwENcCt6CH3ojm9g7qqoN79HZpF9rpjjumYGu2x3I8 - 4UNU85pwv0WAox5vY7f1/xj42SxAkf/7kCmUuNfUiho+FTa3gtfaRh22o6lNxMHWbI/lKut5uFVdh7sN - jTiybQN2rpmv18DQ1+rViUJfRwia+bjXLEB1YxNqyai+VUiditDY1sHB1myP5e408FFR34Cb5WVIdLXF - Zxbz2DywJYw51WkxZ9eqebxUFyvk7rDHD24bkOhig4RZEM/4yAZhm1Ziq6lRG2mxscmm2owwdF72suOn - ZkZCTzNjuJsaYdtT4vr63E4L4xcCSYv9IXiJU30i2BxlzmzkWRHsLp8GVsNqp2aygcHfZtZtYIryU78A - AAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkUzNzJDMjE3NEFENjExRTRCNjE0OEVEQzI4MEM0 - RTZDIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkUzNzJDMjE2NEFENjExRTRCNjE0OEVEQzI4MEM0 - RTZDIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI3NUQ0QkNENDRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6PyaLfAAADMElEQVRIS6VUXUiTYRT+vi3Tzd+ps23+3KRigtiPkolEQReG - UYTkhWatpWlWGkRdddfdSPImqUAJjSIT00oxLJIk0cR+tFSyzDJtgaMkDEPkdM7ZPvm2vS6jBx6es3Pe - 8zzvtm+TohLS/ov+AACStLgEQuJyLRJWYK1yzh/+FgCoQrpnfM4fOGBhcUlIMkEVkma4H4i1y2kFcMD8 - wqKQZILKZqTqmlTAWrfvMjhgbv63Dwm0hLWQohn1eNEbzrlfPiTQAtZCKjP1GXdAIC+r4XD+9CGBFrDm - RVJ1re6pZ0GyHHMvIawauYVNCFPfvvuQQAtYC6meKXU0amNsaGN/ZR60xIf9aIgN3cpGE9OzZCZ85nEm - pGiWlLABmuJCnUOXrNB7chdct4TUo32ANDbp4NuielDpqWfePdaPX6GrohSK4uLhlCEo96YlZLbOFHzH - oJXjMSBcGn4/zQGovEDqXXtzeTb+BTrKj0J3+Q54djYP7EZdTU2MPjFSK8eieQR9QtLg6GcOQPWgqKeQ - ZyOfoK30CDw+lg2Ot3Z4VLoNqo269mCNHIa2WjYn9A1PcAAqU6m9VV3TF9psOwwPS3JgZugCdNoyocwU - jU+RlImWBpezGz0vxzkA1YOiHvPFO7Ca1kGHLQtmXp2HdutmqN+/F6JiU+h3kOpyVeHJwBgHoLIpqajm - 189HoaG4CNqsGTA1UAWth9Lg6r490PygGyLjUikgzuWqQlffCAegelDdUwLqigqhpXgjTPYeh+bCFCg2 - RkEk3vxuVz/P0c43oLP3DQegLhspNalSFxiNcLswHT48LYNbBUlQk7ebzenmyhm08w1o7xmiAP6hRZiT - 70eYkzpctUuJWdHmwWs74+F1Uz7cyE+E4ohQB5mHm9a3GywpTXzektyKduIAIsKI3ISkL4rIdYle05C9 - VrZVBmvtl7eboUyv7V4jSQdwRn8FdI72iErtCUxnIuifkJ5hUqUOq9Jr7OeCNU6bTpNVqtMcDJSldOwn - KnOk+jypJ5QANRWc0cs5SEelXr54QidfwVYAMoiHq4W/gNM6OaNCJ+diaUIqN/43+Atwg27t+9ZXBUn6 - A2MdqQeVc5pWAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjUzQzNGNDI5NEQyQzExRTQ4QkE1QUNCMEVDRDZF - MDVEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjUzQzNGNDI4NEQyQzExRTQ4QkE1QUNCMEVDRDZF - MDVEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI1NUY4OTYyQTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6IsaOmAAADF0lEQVQ4T62U/UuTURTH+0nICqRI1ERMMyNQe8N0ChqBwQhN - yvwhEgJjVCqJ/qCibZo6tzQ339h6Nre5prapUzc1XzItX1ilzuWMLLVAen+xf6DTuTxjdxsFVj58ebjc - c+7nnud7z3228DbpIaDFH/CfoqCn72DIDvNfPDM2KAqyr8PcJxqY+QBTb8kkjocXQTsKigGwfqYJHqIg - 1OxHGHvlWPx4hXB1YyA3g4CBhqst+piEnrDA3rA95vBAY1x8d7lq/DVZwm5PQZNvoKYdypSgHgbVEIh1 - cLOZzOCbSSsyRQRba6uWtcpVLbPcwlglInNUCJNWWKqABqMLCGvGlfpJELaQ/V1Vd1lujAhe0chtUrH5 - ZExnmJ85MdomEa+qZMbIEF2BHGunILSjdZwYgTt4gJqjjj0Rltml1Zq9AeL0Mn71Wn2mtDU80MIvsFTw - O+KPIoWC8BNYRIUaqrRQroJKjQOk9N+xLBF2pXJFKfnsDGYa8gS6xOO2whyMuoHaHpGzZ/pBM0IMrtXD - nT4HqNHXe0lYoogMFeQP4jbSDkCPTUyXmnNoPutSo+9WN5DEQDyeWCWnhqm4p7Oimt3b54rzmmKPVHKz - 0Xg0AU1pz87VJp+yXOfd9t3mBmLXsGrsJhSsDtF4iOWxKdpzyQNnuRW7vEUp13obFG05OVUBPtO5V1Sn - k5q4SX8ENfWA6C7xHsP981Bb2sf38ZKd4JhSuXUJHPHhg/WJnAeZFw0Xzt/w8erRtLmBnB/CSmaC599I - 2PYVRl+CXigu3R9SfCC0Pf1MZ1oqvqvjogX7gtRFJfb1n24g7GblfQcFP2fkBYm5anxqQcbLKgzyK/Df - WRTkV5+RMTg84ZrgAOHo4ZIDVNdJw67CpsVLZ5gifj97Typlq2ZFQXj8LKh5EHpnaIar8N+Al5l9Y9Vs - T7OiIAzjqaMsa6QJnBkeWvgOHdPkAuIV67PSeQpCYYZplsZ+KyyWLRyFF8D553EDbURY770J0rrYJbda - SYE4iWb9NcgpRKDrOMAWwYP6d5BTaC52zyaAWDlAm/DweL8AX9zXukfxHsIAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - 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 - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjYzQTM5NEY4Mjg0OUU0MTE5NDBEQTc4ODZEQzk5 - N0NGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJGRTU5OEQ1NDlEQjExRTRBRUVDOTkyMjQ5NzEw - REUwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJGRTU5OEQ0NDlEQjExRTRBRUVDOTkyMjQ5NzEw - REUwIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTY0MkI1RjlEQTQ5RTQxMUE0QzNB - MjdEOTJBQzc3QkMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjNBMzk0RjgyODQ5RTQxMTk0MERB - Nzg4NkRDOTk3Q0YiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6B5sF9AAACe0lEQVRIS7WVb2jMcRzHL7UHanF/Mts5prE/1li3kAfu5Ak7 - 5IHNobBkSC2UIuGJkrrSWRvTmHQWK8U1T8jqUtYwkZpaGjV/Js6to5YwfXze39+fu/v23f36hXe9us+f - 7/v9rd/dr3MQ0X/F4Zm3+K9QhWajNNlBFZqN0mQHS6lMdrCUyqSgimllUsy4XmOmp+QRDllQWbygjjq6 - uimZStOX8a+ixox3pXrM1JLCDAqYJmY7c669M0bff07mcLbtEl9QE8k6V6BH5ooXMsHZZX7ae+AY7W45 - SrPm19LbsSR9m/iRA2bYGefggVePzUgKBzeu9sQpmZ4QcG/WMtk7eLjv0WMz0kOz+TX6MUXvP6cFeNbD - bz6YvQFm2Bk9PPByZO6jksLB5KvRTzTyLikIrG2ktsvXzd4g2hGjYP1ms4eHvb850qkl65LCQW/ntVs0 - 9HpMcPx0K1X4V1Ff/3NzhnphbVDsjBk8Lm/VE44s0ZJ1KS4Ie8uXUvPBE7Tn0ElCzTMqrV5BO/cfEaDG - TD5X6PFFONLygsTF7jj1vxihyPkYNTS1iFrFxm37KHIhJmp43L7qZxzp0pJ1SeHhQGgLJQaH6fb9R1QX - 2EB3Ek9FryLe95j8K9eLT/TB0FZcskOP1iRdkIh23aR7Ay9pzaZddKY9Jup8nIpeoXXhZlHD655b85Bj - p2npLOmCML+dD/iTZhaX3+UvbRB1PpzeygFnSUUvatecRUMzisoOc+x0LZ3FixxYhQyK1cxyZhkTYhqY - RgnM6hmcwVl4ljDI0KS4AC+Kmyli8Jv2MF7GNwXY4QzOwgNv5mWTL7CLpVQmO1hKZbKDpVR/1P8OcvwB - lh7gOXXZq9sAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkNDMTJDMTRENEFDOTExRTRCRDk4ODBFRTFERTlG - MzY1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkNDMTJDMTRDNEFDOTExRTRCRDk4ODBFRTFERTlG - MzY1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjYwQjFGREZDNjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4rRYZ8AAACEElEQVRIS2MQltOlCP///x8vxqqJFIzNUGSMVRMpmCDApokU - TBBg04SEpwHxfwJ4GtQo7ACoABfODY3N+P/773+82C88GWRJBtQ4TIBmKAyziCsa/L98/c5/37Ck/3Wt - fVixT2ji//OXr/8XU9T/zy0kzQo1EhVgMRyEm0uqW//vP3Lqv5Cs9ml+CZVp/OLKs/nFleYgY0EZzQt7 - Dh7/n1/eCFLXBjUSFWAxXENZ1/r/g6evgK5P/l/d1IMXe4ck/L//+MV/RW2r/0IyWppQYxEAiwWT+qfN - /7/7wHGQq84BXT9FQEq9S1Bas0VQWqMVFWu2ANWc2LbnyP/eKfNA6qdDjUUANMN9Tex8/j999eG/LzDy - yuo7icIeQfH/n7x8/x+kV0hGOwBqNASgWbBt+frt/7cCXQRko2Cg9xfCXA5io8uv37bv//J124G+0NkF - NJYRYjoQACWR8f97T99gxSA5oHIpECZCHTvIbDCAGgy34MaDF1ixo08k3LWO3hEY8jC9IBporBDEdCAA - CqBYcPnOU4ow1AKQTyEA3YKz1x9RhKEWyEBMBwJ0C05cvocVl9R3o2BsakCYoAWHz9+mCBO0YP/pGzhx - flUHGGOTg2GCFuw+cY0iTNCCHceuUIQJWUBMBYMX80uo7gQai9MCkJAoENsDcQiZGKQXZAYEYLEAlM1B - CkCuIAeD9EKLCgYGAMLPWmGxemtkAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY2MzBBRkRDNEFDOTExRTQ5Q0JEQkU0NDNBNTYy - QTY5IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY2MzBBRkRCNEFDOTExRTQ5Q0JEQkU0NDNBNTYy - QTY5IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjgwQjFGREZDNjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6+q/BOAAABR0lEQVRIS7WVTUvDQBCGe/PoQQQP4s2jv8E/4W/rXxEFQRAp - olCwfjRUJWK1ltJgNJh+6Toz7OCSzrIZFwce2LDzvs8hkDSMMf/K7wFmbWunCRgFTQp6RhKY+ZephSvh - Du7hoWf3AgPT+XcteLcqcUcUlNMFYYNLuPeVXZK4IwqKckZMZgsveO/u8jNKqMiOKHgrJrWQdqsSUTDO - Pwm7LBK6pzIYUTDMPoi8KGvB+4wVrGCfKHge5VFYwTr2iYLHQUbgWYObg6pN7BMFd/0RMczeVXAuKOim - r1EEBVf3LwSeNbg5qPIL2skTkQ7GKjgXFJzfpFEEBa3LBwLPGtwcVPkFJ+0ekcAL08C5oOD4IokiKDg6 - uyXwrMHNQZVfcNi6Jjq9vgrOBQX7p50oQgLtT3+J1Y3tA6iSBXbwS7gL7P0RzNqvqWn8AE4SSnpUkJk6 - AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFGMTBBQzY2NEFDQTExRTRBQTYyQjA5QjRFNjBF - MzcyIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFGMTBBQzY1NEFDQTExRTRBQTYyQjA5QjRFNjBF - MzcyIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6M0EzRTc1RjdDOTRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - 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 - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjg2NjBEMzE2NEFGRTExRTQ4NTY1QzE4RjMzMkM0 - NEY4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjg2NjBEMzE1NEFGRTExRTQ4NTY1QzE4RjMzMkM0 - NEY4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTU5NUNEQTdGQTRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz5BZhOvAAAD9ElEQVRIS7WWe0xbZRiH95+T6DQxcc7NLfrHTBaR4NyFmDAy - ljFwwERGpmRxxmyY6QbqgogDhqluOpFLlm6AFslGRVlXKISVS7tByzgUOF1vtLUtLVBogQ4YsLoN9ec5 - 3+xXyIiJWdrkyfed9/u979PLSdsVz6wPfyQA/Cehf3DPQsiBECHkBVj4CyGBn00E9xb+DglU4L/35xIM - 7j78qCpAlVqAg6KNkOtqMTPnx9TcLOzjFty5u4CJWR9u++/AM+NBh7WRnM3/cX/JHCqY899fwu35u/BN - z2HM60NcURjB7hwmNX4/PjmNWzPzZL/v3FPIEK9DQskTNOudmML0rD8oiD0d9hAutxej4z6yZ3pZaA0D - ZO8c8dDM8d9egtSxGxetMTiri8Ih8XpS79cZ4fZOBgVu7y2YrINg9QOIPvU4QcPqyWp1DJM6vwbOUivW - QGSMgdi8E7mqSGQqIpAoXE3OmuRtuKHRwjU6HhQMe6dgG/LA4hhBVM5KJJatJmsPa8TNARup8xm+1tnd - R9bkc88hicsllnGrcC2p1Te1QKliYLQ6SZ4KhriLYe80oaa9Ghk/JEMkqYJS3Q0DF3a4J7D9s1V4s2QN - Nmc+hviTLyOvIgv55SeQe/4YUgu3QlRXjbbrN6A12TDoniSzqMDh9lEszjEoGQbF4u/wa+tlmOxu2Ecm - 0dglR86FjxEteBZx2Zsgab4KhaoH17lXJFO04nKLDCrus+L7A7OowOLyUsxODwy2EaTm78BrWU/io6KD - YE126KxDaFDKEZ4Rhg8E+1HbKAOjNZP6TYsL0mtNaFYrUCmrAGu2YWBwLCgw2Ecf4qeGakRmPo203D1Q - dPWjz8TdBGYX0guSIK5vgLyDQa/BDr3NTdAYrYg68iI2HliJiitV6DM6ggLWwt0p/8J9PeFMsRDnJSLE - H38DsXEJSEhKAaOzod88hMjXt+KTz/PQ2WtCLyfl8wE2RbyKkyWFqJLUQdqu4ASvPBBojE4KH9wVtxel - v5Tj5zopuU5MSQOjt6NG0swJtmHtCxtwrUePHsMDQaA3J/9rfJpTgDY1CwWjDwq6dHYK37BzdwJqZe3I - E3yP9ENHsG//u+TsvcNH8dXZMryVlo4ioYjmA73ZnCA7T4BO1gqV1hp8izr6f6fwDafOlKLgdAlidsXj - 29JKJHOCFrWOnAXga4F8gIjN21Df1k1nUYFSY6bwwUvSVjy/bgN2cILKmnokvf0O8r8pRvr7H5JMcwdL - zvkcn1/cvxgqaGVMFL6BX6Nj9+BLQREuXLyCvSkHEB65BcXll2ju8LETyPqikOaXgwqudhlCQkAQ8p/M - R2K5fxKLWbbp/7Dc0CBY8Q+pPmOq0VkzzQAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjIxNUQ2NkYyNEQyRDExRTQ5N0NDRjdBNTBDQjc0 - MUY3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjIxNUQ2NkYxNEQyRDExRTQ5N0NDRjdBNTBDQjc0 - MUY3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkU1NUY4OTYyQTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4lOJsMAAADqUlEQVRIS6WTf0hVdxjGj2beulPvD52aU6Np6tKBhUWsYjIH - prDYSlZjNPsjlUnkMmSx6eJqS/u5zXGtoKKEMaEt2lpZ20RX01Bjad31A8UakdZ0SyrLJfHueU7H0zl6 - U8QXPvCe933e5/3e8z1XCY5+dVKIyJh4HZoI48bQE5kU44a3ISM45TxQCTxgQIM5a/M0m+eHN1OC4TfB - 96mZ78reg9+I50qn3HvwSIU5a+xBcwyka3ajY3DoySgwUJ44P02O/vSz4HlMfqitk7mLlnLRNs3SHAOD - QzoQOYF7de4Gud17V1DTuf/wP7nScUOFubF3559+4QxngUOzfhr9DwZV0AgHVZ99/oXcvf9IUNPZd6hG - 5qS8Ic7IOb2EOWtGDWdKtuzmkj300uwVpa9/gOZTae6qqBQ8myjb4RZbeEyjJcBROt0W6rLaw4unBYYU - 2mfMrmNvpJ4ewdFJe+Hnry7o7rvHBV+v/7hUkJtoab8qobOSZarlhfX2iLhjS5d/IBkrsvlLDmPJEvao - GTlXsKmMS9zqApjnZWatkeu3+uSvnn9NlO2skqCwl2tt4bH7N7l26nXmzqgkFxZVUWOcIfSiZ3BU0odc - 0Hay/px03Px7FOuKXBIUOms/zDwn6pr0OnOcsN0ZlVhEjXFmGHpCc0n9BenvZMulzlvyZ1ePiZLySsG7 - /hYn3VpYXKHXmdtnxLmx4CtqjDOEXunLs3F3sS7lwrWbCoT71hYUC3ITJxta1TsIDImOh+ZA2rL3hdjC - Yhr8pwdlsUfNyLkceEFThxt4TWnxXFf8rTab46WEmo8+KRc8m9jwaQXed2I1Trw4IDgqx2oPK8EFb4T+ - KHsj9fSA+Rkf3ynvYUGi0tjWybv2DXBGxjsiEo7kF5XJ7xc6BHWdzdv3yOzk1/lOu3BxN5izZtRwJr+o - VDX3s1jz4ZkCHErD+WsqiCn4xuPsEfHfvbUqV2rPtgnqOvWtV6Xm+G8qzI09ajmjmvtPy4PXQhBCT+XX - 5ss6CD/wIl5H9SspaVLhrhbUx4QaavG1/YLZVWABPTQvRTnV5DGhNZyBITPz8cqaU1KXSeHmXXLgyGn5 - seEPFeassYfDXLTawr7EzNsgmbOax9M4cfbiKBC+IBDEYjgXn9spfKrduIPHBHkPXke9JcBZCs1KkEqt - NsPZZ4H/gVcQPsAC+HMTwCKQAXhSwpw19qihljPm8GZuBDG8yAZCQYQGc9a8Gw+HN9OJMG54G5oIY4ei - /A9dc78cqtG90gAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 - RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL - ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH - s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW - uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx - xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd - iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ - qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW - GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE - NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n - KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw - qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI - HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq - wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q - 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 @@ -4803,6 +4005,804 @@ ++H/A/YDv9/V87iOlrYAAAAASUVORK5CYII= + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjYzQTM5NEY4Mjg0OUU0MTE5NDBEQTc4ODZEQzk5 + N0NGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJGRTU5OEQ1NDlEQjExRTRBRUVDOTkyMjQ5NzEw + REUwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJGRTU5OEQ0NDlEQjExRTRBRUVDOTkyMjQ5NzEw + REUwIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTY0MkI1RjlEQTQ5RTQxMUE0QzNB + MjdEOTJBQzc3QkMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjNBMzk0RjgyODQ5RTQxMTk0MERB + Nzg4NkRDOTk3Q0YiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6B5sF9AAACe0lEQVRIS7WVb2jMcRzHL7UHanF/Mts5prE/1li3kAfu5Ak7 + 5IHNobBkSC2UIuGJkrrSWRvTmHQWK8U1T8jqUtYwkZpaGjV/Js6to5YwfXze39+fu/v23f36hXe9us+f + 7/v9rd/dr3MQ0X/F4Zm3+K9QhWajNNlBFZqN0mQHS6lMdrCUyqSgimllUsy4XmOmp+QRDllQWbygjjq6 + uimZStOX8a+ixox3pXrM1JLCDAqYJmY7c669M0bff07mcLbtEl9QE8k6V6BH5ooXMsHZZX7ae+AY7W45 + SrPm19LbsSR9m/iRA2bYGefggVePzUgKBzeu9sQpmZ4QcG/WMtk7eLjv0WMz0kOz+TX6MUXvP6cFeNbD + bz6YvQFm2Bk9PPByZO6jksLB5KvRTzTyLikIrG2ktsvXzd4g2hGjYP1ms4eHvb850qkl65LCQW/ntVs0 + 9HpMcPx0K1X4V1Ff/3NzhnphbVDsjBk8Lm/VE44s0ZJ1KS4Ie8uXUvPBE7Tn0ElCzTMqrV5BO/cfEaDG + TD5X6PFFONLygsTF7jj1vxihyPkYNTS1iFrFxm37KHIhJmp43L7qZxzp0pJ1SeHhQGgLJQaH6fb9R1QX + 2EB3Ek9FryLe95j8K9eLT/TB0FZcskOP1iRdkIh23aR7Ay9pzaZddKY9Jup8nIpeoXXhZlHD655b85Bj + p2npLOmCML+dD/iTZhaX3+UvbRB1PpzeygFnSUUvatecRUMzisoOc+x0LZ3FixxYhQyK1cxyZhkTYhqY + RgnM6hmcwVl4ljDI0KS4AC+Kmyli8Jv2MF7GNwXY4QzOwgNv5mWTL7CLpVQmO1hKZbKDpVR/1P8OcvwB + lh7gOXXZq9sAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkNDMTJDMTRENEFDOTExRTRCRDk4ODBFRTFERTlG + MzY1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkNDMTJDMTRDNEFDOTExRTRCRDk4ODBFRTFERTlG + MzY1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjYwQjFGREZDNjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4rRYZ8AAACEElEQVRIS2MQltOlCP///x8vxqqJFIzNUGSMVRMpmCDApokU + TBBg04SEpwHxfwJ4GtQo7ACoABfODY3N+P/773+82C88GWRJBtQ4TIBmKAyziCsa/L98/c5/37Ck/3Wt + fVixT2ji//OXr/8XU9T/zy0kzQo1EhVgMRyEm0uqW//vP3Lqv5Cs9ml+CZVp/OLKs/nFleYgY0EZzQt7 + Dh7/n1/eCFLXBjUSFWAxXENZ1/r/g6evgK5P/l/d1IMXe4ck/L//+MV/RW2r/0IyWppQYxEAiwWT+qfN + /7/7wHGQq84BXT9FQEq9S1Bas0VQWqMVFWu2ANWc2LbnyP/eKfNA6qdDjUUANMN9Tex8/j999eG/LzDy + yuo7icIeQfH/n7x8/x+kV0hGOwBqNASgWbBt+frt/7cCXQRko2Cg9xfCXA5io8uv37bv//J124G+0NkF + NJYRYjoQACWR8f97T99gxSA5oHIpECZCHTvIbDCAGgy34MaDF1ixo08k3LWO3hEY8jC9IBporBDEdCAA + CqBYcPnOU4ow1AKQTyEA3YKz1x9RhKEWyEBMBwJ0C05cvocVl9R3o2BsakCYoAWHz9+mCBO0YP/pGzhx + flUHGGOTg2GCFuw+cY0iTNCCHceuUIQJWUBMBYMX80uo7gQai9MCkJAoENsDcQiZGKQXZAYEYLEAlM1B + CkCuIAeD9EKLCgYGAMLPWmGxemtkAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY2MzBBRkRDNEFDOTExRTQ5Q0JEQkU0NDNBNTYy + QTY5IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY2MzBBRkRCNEFDOTExRTQ5Q0JEQkU0NDNBNTYy + QTY5IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjgwQjFGREZDNjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6+q/BOAAABR0lEQVRIS7WVTUvDQBCGe/PoQQQP4s2jv8E/4W/rXxEFQRAp + olCwfjRUJWK1ltJgNJh+6Toz7OCSzrIZFwce2LDzvs8hkDSMMf/K7wFmbWunCRgFTQp6RhKY+ZephSvh + Du7hoWf3AgPT+XcteLcqcUcUlNMFYYNLuPeVXZK4IwqKckZMZgsveO/u8jNKqMiOKHgrJrWQdqsSUTDO + Pwm7LBK6pzIYUTDMPoi8KGvB+4wVrGCfKHge5VFYwTr2iYLHQUbgWYObg6pN7BMFd/0RMczeVXAuKOim + r1EEBVf3LwSeNbg5qPIL2skTkQ7GKjgXFJzfpFEEBa3LBwLPGtwcVPkFJ+0ekcAL08C5oOD4IokiKDg6 + uyXwrMHNQZVfcNi6Jjq9vgrOBQX7p50oQgLtT3+J1Y3tA6iSBXbwS7gL7P0RzNqvqWn8AE4SSnpUkJk6 + AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFGMTBBQzY2NEFDQTExRTRBQTYyQjA5QjRFNjBF + MzcyIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFGMTBBQzY1NEFDQTExRTRBQTYyQjA5QjRFNjBF + MzcyIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6M0EzRTc1RjdDOTRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + 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 + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjg2NjBEMzE2NEFGRTExRTQ4NTY1QzE4RjMzMkM0 + NEY4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjg2NjBEMzE1NEFGRTExRTQ4NTY1QzE4RjMzMkM0 + NEY4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTU5NUNEQTdGQTRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz5BZhOvAAAD9ElEQVRIS7WWe0xbZRiH95+T6DQxcc7NLfrHTBaR4NyFmDAy + ljFwwERGpmRxxmyY6QbqgogDhqluOpFLlm6AFslGRVlXKISVS7tByzgUOF1vtLUtLVBogQ4YsLoN9ec5 + 3+xXyIiJWdrkyfed9/u979PLSdsVz6wPfyQA/Cehf3DPQsiBECHkBVj4CyGBn00E9xb+DglU4L/35xIM + 7j78qCpAlVqAg6KNkOtqMTPnx9TcLOzjFty5u4CJWR9u++/AM+NBh7WRnM3/cX/JHCqY899fwu35u/BN + z2HM60NcURjB7hwmNX4/PjmNWzPzZL/v3FPIEK9DQskTNOudmML0rD8oiD0d9hAutxej4z6yZ3pZaA0D + ZO8c8dDM8d9egtSxGxetMTiri8Ih8XpS79cZ4fZOBgVu7y2YrINg9QOIPvU4QcPqyWp1DJM6vwbOUivW + QGSMgdi8E7mqSGQqIpAoXE3OmuRtuKHRwjU6HhQMe6dgG/LA4hhBVM5KJJatJmsPa8TNARup8xm+1tnd + R9bkc88hicsllnGrcC2p1Te1QKliYLQ6SZ4KhriLYe80oaa9Ghk/JEMkqYJS3Q0DF3a4J7D9s1V4s2QN + Nmc+hviTLyOvIgv55SeQe/4YUgu3QlRXjbbrN6A12TDoniSzqMDh9lEszjEoGQbF4u/wa+tlmOxu2Ecm + 0dglR86FjxEteBZx2Zsgab4KhaoH17lXJFO04nKLDCrus+L7A7OowOLyUsxODwy2EaTm78BrWU/io6KD + YE126KxDaFDKEZ4Rhg8E+1HbKAOjNZP6TYsL0mtNaFYrUCmrAGu2YWBwLCgw2Ecf4qeGakRmPo203D1Q + dPWjz8TdBGYX0guSIK5vgLyDQa/BDr3NTdAYrYg68iI2HliJiitV6DM6ggLWwt0p/8J9PeFMsRDnJSLE + H38DsXEJSEhKAaOzod88hMjXt+KTz/PQ2WtCLyfl8wE2RbyKkyWFqJLUQdqu4ASvPBBojE4KH9wVtxel + v5Tj5zopuU5MSQOjt6NG0swJtmHtCxtwrUePHsMDQaA3J/9rfJpTgDY1CwWjDwq6dHYK37BzdwJqZe3I + E3yP9ENHsG//u+TsvcNH8dXZMryVlo4ioYjmA73ZnCA7T4BO1gqV1hp8izr6f6fwDafOlKLgdAlidsXj + 29JKJHOCFrWOnAXga4F8gIjN21Df1k1nUYFSY6bwwUvSVjy/bgN2cILKmnokvf0O8r8pRvr7H5JMcwdL + zvkcn1/cvxgqaGVMFL6BX6Nj9+BLQREuXLyCvSkHEB65BcXll2ju8LETyPqikOaXgwqudhlCQkAQ8p/M + R2K5fxKLWbbp/7Dc0CBY8Q+pPmOq0VkzzQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjIxNUQ2NkYyNEQyRDExRTQ5N0NDRjdBNTBDQjc0 + MUY3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjIxNUQ2NkYxNEQyRDExRTQ5N0NDRjdBNTBDQjc0 + MUY3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkU1NUY4OTYyQTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4lOJsMAAADqUlEQVRIS6WTf0hVdxjGj2beulPvD52aU6Np6tKBhUWsYjIH + prDYSlZjNPsjlUnkMmSx6eJqS/u5zXGtoKKEMaEt2lpZ20RX01Bjad31A8UakdZ0SyrLJfHueU7H0zl6 + U8QXPvCe933e5/3e8z1XCY5+dVKIyJh4HZoI48bQE5kU44a3ISM45TxQCTxgQIM5a/M0m+eHN1OC4TfB + 96mZ78reg9+I50qn3HvwSIU5a+xBcwyka3ajY3DoySgwUJ44P02O/vSz4HlMfqitk7mLlnLRNs3SHAOD + QzoQOYF7de4Gud17V1DTuf/wP7nScUOFubF3559+4QxngUOzfhr9DwZV0AgHVZ99/oXcvf9IUNPZd6hG + 5qS8Ic7IOb2EOWtGDWdKtuzmkj300uwVpa9/gOZTae6qqBQ8myjb4RZbeEyjJcBROt0W6rLaw4unBYYU + 2mfMrmNvpJ4ewdFJe+Hnry7o7rvHBV+v/7hUkJtoab8qobOSZarlhfX2iLhjS5d/IBkrsvlLDmPJEvao + GTlXsKmMS9zqApjnZWatkeu3+uSvnn9NlO2skqCwl2tt4bH7N7l26nXmzqgkFxZVUWOcIfSiZ3BU0odc + 0Hay/px03Px7FOuKXBIUOms/zDwn6pr0OnOcsN0ZlVhEjXFmGHpCc0n9BenvZMulzlvyZ1ePiZLySsG7 + /hYn3VpYXKHXmdtnxLmx4CtqjDOEXunLs3F3sS7lwrWbCoT71hYUC3ITJxta1TsIDImOh+ZA2rL3hdjC + Yhr8pwdlsUfNyLkceEFThxt4TWnxXFf8rTab46WEmo8+KRc8m9jwaQXed2I1Trw4IDgqx2oPK8EFb4T+ + KHsj9fSA+Rkf3ynvYUGi0tjWybv2DXBGxjsiEo7kF5XJ7xc6BHWdzdv3yOzk1/lOu3BxN5izZtRwJr+o + VDX3s1jz4ZkCHErD+WsqiCn4xuPsEfHfvbUqV2rPtgnqOvWtV6Xm+G8qzI09ajmjmvtPy4PXQhBCT+XX + 5ss6CD/wIl5H9SspaVLhrhbUx4QaavG1/YLZVWABPTQvRTnV5DGhNZyBITPz8cqaU1KXSeHmXXLgyGn5 + seEPFeassYfDXLTawr7EzNsgmbOax9M4cfbiKBC+IBDEYjgXn9spfKrduIPHBHkPXke9JcBZCs1KkEqt + NsPZZ4H/gVcQPsAC+HMTwCKQAXhSwpw19qihljPm8GZuBDG8yAZCQYQGc9a8Gw+HN9OJMG54G5oIY4ei + /A9dc78cqtG90gAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 + RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL + ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH + s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW + uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx + xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd + iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ + qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW + GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE + NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n + KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw + qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI + HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq + wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q + 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlDMzFEOUI4NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 + NEI4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlDMzFEOUI3NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 + NEI4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDk5Mzk2NTZBRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz73sIMwAAADIElEQVRIS7WVa0iTYRTH56Uiysvm3TkvpLl5DRIvQYWVWl+6 + iNEVg0yhQqloQZHkLT+Y0YdAs75IpEUhzERZoZhsRpZlS7soblotsRwoxhqWeTrnYZtv+u7NsB74cZ5z + zv89/z17HzYRAPxXeIv/EpFXcOyi4BvKhfehv4FvKBfeh+ayqIUDlIgBgT8whpRYoT2fhgvNVJKBQT9s + hB8/QZDPpnEIjEhg0J5Pw4Vm0mwygG9T06BSqQQhTUhUMoRGpyxYT7OZwfhXC6jVakFIYzNYqN5uMGKa + BI1GIwhpghXJaJJi13d0dEB2bj74hsWzSDlXbzfQG02g0+kEIU2wIomdovzKdVifngnFFytBeb4cLN+n + WaSc6hfKKqB/eHTWoHfwExgMBkFII5MnQUD4WlAWloO26wVs35MDmifPmQFFyqlO/aKKqlmDp31DYDKZ + BCGNTJ4IPqHx8LJvACbNUw7p6e2HuJQMNIhhBuaHj3vBYrEI0tb1BoIiE9kJ9h7Oh7EJM+g/jEJuwVlY + s24ri5RTnfo5BedAIoueIYPumvomuHzjzm9cq2uCq7UNUH2rEarr7kNd0yP26Y+eKoSWtk4wfpmAg7kn + ITY5DUorq1g8cOQEqze3aplOEhRtJoMcL1mMTixV9IgD5a/tSBVDYql8AKOBQLEJtTP08gY/jjFiktKg + 5FIV21Ok3NazvmR2AvrFkCAJyGYk1comZAuHDM/AyLvHThfBveZ26NOPwI59eey7LsbhFCmnOvVJ5+Ef + rrYZLEU8EZ85+HLwW7ZCLMVTFWdkHoLut+/hgbYHaE9XN31XNsupTrWV3jKVs+uS3cyAD0cLe331jW3Q + qRt0CPUlQVHDKI+fN9iGo4W90uNnyuA2vvRtWTlQgxeg/dk7FimnOvU9/CNqUe47b7ANRwt7AfjpKvAK + Gt18Qur35ymhRfsKKLr5hN7EyzDq7humWrrcfSfKxbz/QlwcLDck1snZJdUzYHUDmk57+K1qdXJyzsL6 + RmQD9ZmObygXB8sVIRO6fXQB4hC6eRQppzr1XXmHclnAckFomLc1Um5dItEvhZ97MQXP9N0AAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhDMTdBQjRENEFBRTExRTQ4QjQyODY0MDNBNTJE + NzNCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhDMTdBQjRDNEFBRTExRTQ4QjQyODY0MDNBNTJE + NzNCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NUQyMjc4QTlBQjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4eHsDfAAAB00lEQVRIS7XVWytEURQH8HniTTNHLs0NCXNcXjTN5dH9g/gM + 3jx590QhFDJS0gyTGmpqaqJIMW4hzlAoOaWISS7LWifntI3ddnTGrl92e/57/We/DBsA/CvuYSHZSr0t + lvCGsriX/oI3lMW9lM/SwgF9SEHwizs08IX2vAyLZvZRgXJ+cQWv7yB0q96Ds86voT0vw6KZNJsK4Pnl + DWKxmBBlqhpDUN0UNp2n2VrB/WMOEomEEGX0ArN5o+BGfYB0Oi1EGa8cwpKw6bxRcH6lQiaTEaKMVw5q + rzCbNwr2z65BURQhynh8Qe0VZvNGwdZBFlRVFaKMxxfQXmE2rxc8rW3sQy6XE0puHoG7IaC9YnV9j5th + pbZPqOCDCrbH5uIwOD7/zWgkDkNTizAyuwQjkWWIxFNQWduqmVxI/MiPz6/A8HTUuDMTTYLkbrqhgt5S + T3PG4ZJ3HE7focElZx0u3yn+VQiG1ZLymmm7s74f88f42S6bl9zyJZ6d6Xckd+Mt5ieogH4xJORHHajt + SzvqZPSgECpHZSiA2DztuxBlad+NgnpBEbIjusiiYboKRF+kGFHegUR5ImkFv7G0eAPzWVq8gfksLd5/ + oULiHhYS97BwwPYJlSCUgVubViQAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJEMDQyOEZBNEFEMjExRTRBN0MxRDBCNzJGRUND + MDEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJEMDQyOEY5NEFEMjExRTRBN0MxRDBCNzJGRUND + MDEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkRDRkI1RDVEMTRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz59jfe3AAAEbUlEQVRIS8WTeUybZRzHF48/pnFOuQRajkFLgQFb5iRLNJr4 + l/EPgsniUI4xZDAY1zyxwApsMJyIME61rByl3DfoYGBrgbWUY06FcZSCha4rQ8jYxkqPr2/fvkv8o2Sg + S/wkT970eb6/T5/39z7Prv8dt/Oql4mR4HZJ3ccoXFxhVCzB9DT9JueJdSq6c1wzVZFupepVzxu34XVj + CaEDi1jX6hF8ZQoeokl4iBVwzV9YdU1XRlIl28eVo8phCdXwGltEeOUsro6psaHVwcSDh5volc4iOO8X + 7KuVwb1hEi7J8myq9PEQO//I85oafr0KtEpUpNSETm+AwWDAvfv3YTQaybnm/t/AyO6Ga+UonJOnIijF + 1hA9tWI2qle9RxcI+RIpmZpTIfBULhIyyqHVahHPKcN70TmYnFFCp9OhqXcc9KwW0DOHVl3YU1aUyjJu + F1SpfhO3EM6bMMsVt+D8Zhz2HIpC4oU6bG5uIu4cD3tfTwAjIBNypQYbGxsISquBU34PaDHiVEplGXee + SuIjVaBv3Lz7gJg8vHg4FlZvc+ATVoLipiHsD8qCXWAO7IPK8MG5FjLXKboOeoYADkldUkplGWb7vOb4 + 4BzxIXXQE/1m59WDXdgBvxPfwz6UC4eQUth/WIBDZ2qQXj+K7IYRImeE5s5fOFrcDPvPapcJzVNmmwVY + VxWG9U09uau1tTVymPpc0iYFLew7OEUJ4BwtALfvJpl5xMrKCu6s3cUrn5YbCM1us80CrJZZVWjXr7j3 + 4CE0y8v4IrcaH+cK4Bv+DRyPl8ApphYuia3wZ3eCUzOA1PIfcVuzjHnlIgK/vgy7mHzTG+w12yzA5E53 + edYPo1c2i/X1dQTEfwvbwDQ4hhXg8OcN4P48Df+UTrgkNIAeW4Hg3Hbo9Xq0iGSgs4ls5CUhoXnObLOA + S8pkhG/bdZzgDZJnffT3GXieLAA9XgB2/RjZjuQqMWhxfBw824H55XWyhcfy+HDNqoB1SH4Codn6G7iw + p3d78EaVPlXX0CaZgkqlgly1gpCiK0htHCH/IL6oFcEF3ZjT3CUvXqv0DzDSS0FPq1a/8EbYS5Rqa+if + SAJ8KoeNR7gitEsnoVQqSbGOkJmYX1ggxaY70SabwIGMUrjn8I3WIXnBRPnWu/8nDnE9Sd7cAaP/ZSES + 6/rRKJRArpiHXC7HzekZNIukiCyrhW9mGZgXa4w2kUVnibJnzdXbxP5URzyDO4QjxGl5i9uNpMZeKP5U + IrywAq9yCnGAOGGMonbYxpVnEPGdyR9BO/MTj8kfgXeNFPt5IngVtoF1kQ9WcTs8qgfgmNreQMS21xZL + 0E6Ln6ef75tg8sfgXT8O77oReAkkYNXJ4PRV/4ztyfo9VPTf4xjdf9CpQKzdxxuGe6UMbhXEmc8V6mze + r3qNivx3HGN7UmglQ6CVDMIxXwybo5UcaunJQD8te9rhyx4JrWwItlGNUut3y5+hlp4cDhFCpl14k9jq + nR+Y1NTjIe7NlmMnWKoHsOtvjWYcKpheqFQAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERTg4QTFENEQyMjExRTRBODEyODk0M0RBMTc5 + Qjg3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERTg4QTFDNEQyMjExRTRBODEyODk0M0RBMTc5 + Qjg3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjJGOUEyRDEyMTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6wJF34AAACl0lEQVRIS62Vy08TURSH73/QhQtXVnBhxEcMiUkhbEg0hB1R + Q1i68C8wIW5cEqMLN7ho2Ji4YiEhWq0prYUhfULbadN3obTaChobtZEUsFY9nnPS6WM6HYowyZf87j33 + nG/amaai9geOBYA+4pTxihmBE8DcTQB4J8em/9IwSQyagmrtL+z9rMFmvnhkKvtV7tcVHPz6DVsftulA + AckdhUg8zf19eoLKAd597iMLMItewfOxUDTN/bqCH3tVSG8VWIBZ9AoJApEk9+sKvu/uQ2IjzwJkGtH8 + OrTwy3Hu77vIAnV9mgWlcgWiqRwLjAMmkOMbPbNTKnN/JJntqJGEBZ++7oKcyLLgLN4JrU8Cms2C4pcy + BKKZumCI18temQ/8DzSLZlBmQX7nG/jCKdpgAa0driCtY5iFHuqHSjNoFtaags1iCdzBBG+QgNY2aZ0F + mIUe6osENAtrTUEq/7kDq9PHAszU5yYoq9f1i9cUSCD5ozxDEeTsrhAoONwyxLLb8MrhYQFmZYCHsnpd + v3hNgQROb5hnKIK29944MAThTBEWbS4WYBZ6qC/sKSy5ZJ6BGUQg8b4Bbhjod4AZXlhXWdBa10LrIVul + AM9ggS+aa6AIMMO8ZYUO0KeyIOMtZyaQpXpNi4LFucYzMINwhbMNcMNw5oIJMMNKIA0LNg88mZuH/ssj + dPgBMnN+cBRmny1wrRtSMMMzWCCFMg0UAeY2Fh0+GL5xG8Zu3oHXUrCj3g0WONdTbeBm21/o1N17gPtg + 98Xh3VoS3qzKMDI22agfglnY/Uld8NDc/ZlZwAwvl4Ngun6LGh8rdfVDViNs3rguOOzq6XOD8PDpc7g2 + OkHDH7XWtYa2It66Y4eCQ8cRfpvUNa2hTUD8A6JMaBvCyTdJAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERjY3MEZENEQyMzExRTRCNDlGQUMwMzk0OTAw + Qzc4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERjY3MEZDNEQyMzExRTRCNDlGQUMwMzk0OTAw + Qzc4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjhGOUEyRDEyMTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6GKmpFAAAC+UlEQVRIS63T20vTYRzH8Yforj/Ei24UiSgKIygKi8oyxZQo + cvNYeXaesmzqPGu2POd0ulSsnIdaurTSTJ3O6UxTPGya5vCQx5AuPn39RbHop7nZxQt+z3ie93e/Z4w1 + p7nsCoBt8R6yBF/UHPv+Wb0rfFFzm99CRIwEW1gnqXzxTXxRc0ydctm4OlID2sxrw6iCtiwItC+A2P/D + frLnjwGNSZdMq6N1WOvLwFpP4l/WdRlY6Jaio9Ab7QXba8sVoDHZGdT8PYS9THDqMGnLsKpNw0qXGCua + BO55VZdNQ6U/DRRibVCGb+N1pH5bukoRqHmDHOIG1N8/X2F4I8WyNhtf2+9hqSsZxqZ4upbb6HsSZLHO + Im90ym6hNVcIaktYTexZyUelGEvaHMy/jcFiZxo0xX5Y7ivGcn8JkVmA9uvlWBmqwpJeAWovs+poR99O + eRgWtQWYVUdgrj0FH+i+F3XF3NoappZYGJrEoLaOVYpOOTY/FGJB+xjTqnDMtMTTAC/Ma/Ix/TLUKl9e + x0JfFQpql7PykBP7lWIXzPeUYLIhHCPKCLr/AMy2ZsKoDLTKdNNdvM8TgNpRTBZwfJ885CTmaIChPhwa + mS+GnkdhqjEWY9X+VplqvIMXEhdQ24mZeuSs0N/BNNWWj4k6EdSZHhhXxWH0aSCGFd4c4Tk7zk7XBlUM + FKLToK4Nm+0qYnneRzqGGiSYaIiiyZdhVCdgqFSIwRJPjucZW85O1pvnRmvDkO9zFNTdy2Y6HjGp4HCF + 5kk4xhoiURd/EROv4tBfeM0qAyUC9Mp9QM0+7o829T6LZV0/mNycS6+nFKFWfAGj9ZHozfGwil7miZYH + 7qCmghsw+S6VpV894KuUuKFbfhNNqa749CwY3dm0toK+VABl3HlQM5obYHybwFLc7W1y/Y5BlX6FfgNn + DNcEY0DhZZX+MiGKbh0DNR24AYYWMSfJzc6GZBApwS5skIzNODcg0dV2V36FtsJ7yBJ8UXO8hyzBFzXH + ++H/A/YDv9/V87iOlrYAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 + RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL + ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH + s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW + uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx + xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd + iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ + qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW + GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE + NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n + KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw + qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI + HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq + wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q + 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA3MTZBNTkzNEEwMjExRTRBQjdERDhBQkEzMDEx + MzZEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA3MTZBNTkyNEEwMjExRTRBQjdERDhBQkEzMDEx + MzZEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTgxNjM4Q0YwMTRBRTQxMTk2M0JC + NEQ0MzNCOUIxQzgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz7RblD4AAAHUklEQVRIS22WC1ST5xnHg7OerZvT9aydtdzJhVzIlSSEXAgJ + JAESIFyTcJPgBRXEincrnVhaQKug1Qhepk7trG1ltAWn1RbrhYsX0FmGpdQb01Y7bREq3U7/e76s89iz + fef8zvM975fv/3/ey/e+YQFgvXA17ifw1QkBkUoTm2LGpqbdtRf7rnz41d1710dHx0bHx78HE5mcaWee + 81XmLLZMJ/r5L3/9FIvFCmA0/8v/GJDo00TSWy1tO4Zvfzn0aHwcD0fHcKq7F/vfaYdvz9vYR/GTrl6M + jIxi7LtHuPPV18PvHTn+R150fOq00MjfkMmE/2tAws8Q2R2nu1q/oxdvDN/BqtqtUCcXw5C7APbZq+Es + f8UfmZxpZ55fu/l3jDwcxUenOlup567pEaJAMpn4EwMS/hXh6bl4qWN0bAx7D70PqcmNjPIaVL5xCEt9 + h7Hg9QOYV7sHpTV/wPy6vShbt8//nPndjv2H8c23I+g639sRqTLlPxfMmcaY+A1IOIDGMe3j013tTCVr + X2+GpXApZlbvRPm6AyipasKMFT54V+9Ayeqd/li4bAtcC9cht2Id3JUbkViwGIW+Zbj/4FscP3nmCFdu + yPnZxKcm+w3IUXjgndZ9D0Yewrf7LZjzFmNu7ZsoWulD3pJNcC9qgLN0LRwlL8HuXeWPTM60exY3InXW + y5C/4YF4fS5qDjXj7v0H2HPw3QPBkXINU/0EouDajVs3+z8bgkiXhrylW5G9oB45VB0jZs2vhCVvERI9 + C5HoJigyOdPOGCp8+VA1FkG1vhi8JSm4NDiA/quf3+IoDCUsmpSg6vrGxntf/wOVq+sQn7sQWWW1SJ1Z + BWteJUzZ8xGfNRfGzLmwFSxByowV/sjkxsxSCNalQvlaPrQNcxBT74X45RzM3FyF23e+xMrqus00POa4 + ox+d+vj6rdsQaVOQMbcG5pwFsHoWQZ9aAp3DC6NzDpKLliMhtwKmrPn+mFS4DPw6O8RVmZCuyYG6dgaU + NQVQvToD/BftuDZ8G4fbjnWwaHIL/vq3wVstbccg0KYi0VUBY0YpYlOKoLZ6/JhzyqFJyn+cqyxucGss + UKx1I2pVOqJWpkPyUhai1+T74S5MxsETbbSi+oaZOSj//Isbo5ubdiPKkIaYpDzo0ryQxzv9xNgYUffj + XGZMR0S1CfwlNkStSId4hROCyhQIFqVAscoF2cpscCuSUf/mdvQPDI4xBsuHrt/84fevNUCgSYacBNQW + F6Jik/xEm7Mg0dl/zG1gFxvBnZMA3jwL+GU2iF50+O8ZxJUZRDq485KwrHk9Phv64gfGYMmVgcHxqlc3 + gCM3kwhj4gQ/mqpUmiHR2yGMsfrvGXhGMsgygZNvAs+bCP4cGzheyr3xEC1wQFhmB2dWIpZvq8fl/oHv + ycBc1nmu797W7XsRLFCTiAkijRUcmQ4cqQ48hdGfs8WxYCu0YOt1iLDqEJ6qRWR+ItgeI8I9eoTn6yGY + ZQN/tg2hhXFo/NMedPb03meWqbu1/cMrZzrPY1qYCByJHlypniKJCFQIF6rBk8UhMtqIMIUGISolwuI1 + 4NqN4DjjEJquQWhGDNguA/UqHpHFFgRma9Dd24c/tx29yuIq4jR1jU0f9F7uh8WRjUCuDBFRJCA1gL5E + hEQqECJQIFxKIjFkbDCAbdIjLEGDYIsSwUlKBNmVYOeSoZuKyDXAXObGpwODWFPXcJQVyJVMpmGq7rpw + 6Z+79x/Cs0E8qpqpnF4SaxHElSAoUopgkQzBEiJahqAYOYL0cgQaiQQ5ItJoiJxacHKMmO5QYnfL2zjX + e/lfHJm+jjY8VgAvOi57o2/Xye4Ll+DMLcLzNFQRYg31JAYchR6hYiUCRVIESYhoQi1DoFaGELMabLsB + EQ6ar0wj9USNtIpiXP50ABu37OgK5itm+je758MFU3lK09qD734wdKLjNKK1JqpajiitDUKdFSIDrXlT + CkQmKwRmC4Q2ylNTIExPgjAzCWKXA2F2HRQ5iTjTcw6tbceGI6Ta+qcnT+X7DeiaEB4Vo6AJ39h65Phd + 2jpgtDkQKlFDbsmEJo02Myd9wU4XVFlEDpHngaaoENEFLoSnxEGf58DJs120VZ/+RqCO9/0uhGch3emP + Dxy6JoaLNYl07G3ad7Dlxidnz2FV9SsIEUYhRKaCxJoKdSZtap5iqN0FkGQ4EWrSIVQnxYq6tTjfdwXv + tR+7Q+JNL7BF2aQXREx50iCAmBTCV2hpTho2bNnZd+LkWaqqBw3btqOwtBSmNAeUFhPinQ7kzZ+NDc3b + 0HWhD93n++Dbua+fK9NvoTM5+Udx5mye9NjgCZNf0HEnpN5U5RbPa9+0bdfQ+0eOPzp5ppvG96JfjFkM + nXR/vOP0ePOu/deyCuf8JVSorJny7HQdvR9MTCUm+fUYgyehazLBVCCd8ttpJbQANtO3cDjWbO9werzd + ruK5F9Ld3p7YBEdHCE/WMi0s0jf5mefm0e+ZCsXEf85i/98XsP4NaTpxka74X+IAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJBREU3RDk2NEFCMDExRTQ4OUM5QjZFOENGQzJF + MDk1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJBREU3RDk1NEFCMDExRTQ4OUM5QjZFOENGQzJF + MDk1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MEM5Mzk2NTZBRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz52g1XsAAADeUlEQVRIS62Va0hTYRiAXzVNoQs6oUCttJu3aqatrLxr2k0n + W6bLLlLSxTKCKLoQQUg3IbLMflSgBRGRP7JSSzGnWalYdpnV1MQu1tBWWklqvr3fp2dsOytSfOFh3/l2 + eJ7tnDMGkkmzGCqigsARhPlUQqCi8nEd9v7GEYP5mFcI4K/e/hGHeQ2B7p4+1HV8Nf6Kw4a5GGxtCHzv + 7sU2nR4lbr4/AUBFKIeD4GKYBL79+IX6rm622U8nSgnX4SC4GCaBL50/OXwTwIUY1ohcQkCn/84ZDLBP + I5p16TBl7XYIoaXVwI54RC4h8LG9k/OvQPIOmEZUJW2F+XRoPbBrOiKXEGj9rOdYCqi2gxXhnLQNIo6f + n9tEa7ViI79PoojIJQSaP3RwjAOJaSAjjhL3N+9zrD+W499UVJnSeeVmWDvtlcWlgCedZnK5RC4h8KZV + x2FryQSYmrAVjh/MnP46/57yS7VmZ9+zxr1Yr92NtQ1pWFmfiBevL9QpUqE0JhHcyWuImLsMAU1zG4et + V6yHC1l5oe+evNmD1ZoteL9OgaW1K7GkRoF3H8ZigTocb5bFY8bZWbpoFVwh7yiCR8xdhsAz7XuOh9QD + D2R6twyIEzG/JApz88N7z+T5d+VcDezKL43Ea4UxeCjTqyNUDpUBYeBFXjvjgOAyCdS9asXDJ3NQFj3u + 7eWCyG/FjxR45OyMr6s3S1qCYqE8RA654Uq4dOiUV/v+E9P0i1ZA9Zwg8COnA2HyDZiLYRw4dyAjC50n + z8awBBvNbbWyZ+8x10+By+GONARCbe1gDBPJloCvfKODluQ10mD+qDK5LWFyD6pfvOUYBzydXL0v2I+V + rI9Mhud5BQE9i+RQPt2P30BBYrM4HmYSNf5REGS0b5CzYdKq+iaOITA44wmPiLXwaFfGhDbZMkinYxNJ + 8CpwXxgHobQcPbhv8XegrtNyzAPsOtqHJUPeml1jm/1jYDkdM5G5hB3bDL6KhknLal9xzAN8gpMgVZHm + oKUAuwx29H420c9O/l9KHms4bC0KLFCAY6CSHr+VoHJy88lWbEjHoqoXWPzw5ZCxGKCxkslBLo22L1+6 + ahPeUj/FwgfPh8zpSzfQ0cWrwVKAjfXcWFjjPm9isWSSbx/7JEPF0cWzcYzE7dTfAmysfSLB2z0Awm1H + 8ycnjrD4N/kX4gEg8A9sAFSe4VuPvgAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkEzN0Y5NjgxNEE5MDExRTRBMzU1RUM1MkVEQTU3 + REQxIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkEzN0Y5NjgwNEE5MDExRTRBMzU1RUM1MkVEQTU3 + REQxIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MUU1QUVCQUI4RjRBRTQxMUI2QTlC + RjEwMkVGQzEyNEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4Oz1B+AAABO0lEQVRIS7WUP0sDQRDFt0snIcEiklhGJLH3k6bNp0ifYCUo + KWwMIRCx0EYxEEL+IOPO4SxzczN7d7gGfuzd7Hszd9nHOQD4V9RiStRiStQi0b68GXkgwkjzcdQigU1O + 32CC+9IjUYsENvjY7EySDHhev5skGXA3X5r8aYA3lx0wET1otYgmNMcOku+jXtMg4QJFJMb1a7uPmjUd + rVzHDfDy9pmJaZViCe5rPq7hYpgvXjPw2hNtTqBOevk+F8L0YRGQQosyHxfSf0jUegPLZwkrNedYfi6o + 9Y2RWP6cACPHYnf4XauQablfHYAxo6jt9sfwRGWgVvrVASKmdd7g2OoN4P5pVYhqbgCPmnPuzHPtua1C + s9OHyeyxEFU+IJcCb2p4zj3dKjQvrsat3jD4CwNCIcEv14/fpAfcDwXsled4Tu6+AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlGMEQ1RDBCNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 + MzBCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlGMEQ1RDBBNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 + MzBCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzFDMDRERTRENjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6zemTaAAABh0lEQVRIS7WUvUoDQRSFEwiBKPEHsRAkb+ArWIsv4CNYCSKI + jRD8a1S0m9QhdTobG5uARZogBJSkiLASFJJChQiRcJ2z2bnMZtbxCnrhY3YO556z1aSI6F9JFP+SRBEs + FFaUhoSopAyQKGIBi58jEuErcQSAhY/hyP5DL8Y7mQMcAcD8Phh+u2Tzk9cRAMz914G4wOd1BABzt/cm + LvB5HQHA3On2xQU+ryMAmB8en8UFPq8jAJjvWk/iAp/XEQDM9WZHXODzOgKAudZoiwt8XkcAMN/U78Ml + CcY7mQMcAWhz+FRc3zZFREXypwKYEiG/e+ykc1WYVRrCGUk8nGUHsyic6nKeetUK4dTESjjLDjZUlqaV + hiS8lEsh0Z1LTFYs2FBazFFwcUzB+YE+T8bffD+i4LRIwSV0jdZaO5vhHXtRPmfFgg1n81mlIQnt/W1q + bKyH34dz2XKUz1mxYBaFU5zJUG1tlXDu5TMcjuEsO5hF4exOpZWGtnLpWDiGs+xgFv9gxlmU+gIVyyIX + YCSg/AAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + 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 + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVGNUQ0RjNENEQyRDExRTRBQ0ZFOEVGNkU4Rjcw + RkEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVGNUQ0RjNDNEQyRDExRTRBQ0ZFOEVGNkU4Rjcw + RkEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzUxNUY0MjEyRDRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz7jldwbAAAEyklEQVRIS6WWDUzUdRjHoeXWVktIc74MLREMUxBQV4RYkBmL + SBwSoZIFCgULlOJFDJDxqkiAqGgoiIQ6jaFLB1EqUaC8iMgdL8cJB3fHwR13HO8Hh3x7fn+pwN01nM/2 + 2X77Pb/n+33+v/3/95zBbGOVnZM58QHhRKwgnp9KPXuQ2CtJ6ScOjGo0fcMjI93llVX55us3rqbUc49P + zDLyw9auL4iw5l+IsMY//BRujcygdcg+ug83rpzCsVhf3C6+hHg/W+R++985BtU3pey1cCCpOYQhJzo9 + 8kPX1tZcDoS0Jp2jrCgWmakhOJMVA4GwBd1KNSQ9veiUdeNifjqyMsJxveD7f8+z2rPBlg0kNZ9gJjMj + L8RqQlSegIbLX6CuYAcOBm9FHe8B2rt70SZTgNfehTphJ+paCaEYjSIJkmP24PaPnrhfsBP8okCcCbZ8 + RFLmxIuc6PTICV5Dh4IxNqSEemAA6adzwBdJ8VeDEL/XNqGkmo/iKh4HW5fWNCL7QiEqq2sw3N+Dijwf + nPx6FUjKkpjLiU6P7MDVqL/gj8nJSY4bpbcQnZyK8EOJCI2Ox3dRcY+JjkNYTAIi4w4j7+JlKBQKjI+P + 42qqJ9J832AGawkjTnR6ZPm/iXvn9+ARiWsnJjCu1YLeGshJQCKVolMs5hBLJOiSydAjl0OpUmFweBhj + ZJAfuxVJ3ub6DTJ9LVCd40Pij6AZ01IRoWVGumE5dmZEM45RjRbnolwR72Wm3yDt85W4e2o3FVLnGg1G + xsYwSvDEdxB03gEa6vJwSopOhkZHkRPhgkPbTfUbpOwwR+XxXdT9OM79EQ/lgBLNkjpsz1iMP5t/oU7H + dIoz+oeGcTbUGVHblus3SPJYgfI0LxLSIPmaL4LyHOB5bClK6gswNDLKoUucoezvx+n9W3Dg49f0G8S5 + LUfZEU8MkpC8T43YQi8UVp3kutOFenAIvep+dClUkClVOPXNZoQ6L9NvEE3uN+PdMUBvRXevCgqVmjob + gGpgEH1PwPZYTq7soy9bDolcgRNfOWL/ZhP9BpEfLsVvMW70kQ1C2qMgEyVnUiUoQ2CuPZTUra7rYYi6 + ZDi+910EvbdEv0GYkwlKIj+BijrL+jUKbdJO1LZWwD19EUrrr0Cu6tMpzhCKJcj40gEB9ov1G4RsWoLi + UBe6V7r/n70RkPMOPDJMcLXqLPc0DF3ijBaRCOneG+H31kL9BkF2i3B9nzN1qoagQ4yDlzxQUE6/lHRd + XfLeGbA9cbccwk4JHggegi8UIc3LDj7rFug3CNiwENcCt6CH3ojm9g7qqoN79HZpF9rpjjumYGu2x3I8 + 4UNU85pwv0WAox5vY7f1/xj42SxAkf/7kCmUuNfUiho+FTa3gtfaRh22o6lNxMHWbI/lKut5uFVdh7sN + jTiybQN2rpmv18DQ1+rViUJfRwia+bjXLEB1YxNqyai+VUiditDY1sHB1myP5e408FFR34Cb5WVIdLXF + Zxbz2DywJYw51WkxZ9eqebxUFyvk7rDHD24bkOhig4RZEM/4yAZhm1Ziq6lRG2mxscmm2owwdF72suOn + ZkZCTzNjuJsaYdtT4vr63E4L4xcCSYv9IXiJU30i2BxlzmzkWRHsLp8GVsNqp2aygcHfZtZtYIryU78A + AAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkUzNzJDMjE3NEFENjExRTRCNjE0OEVEQzI4MEM0 + RTZDIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkUzNzJDMjE2NEFENjExRTRCNjE0OEVEQzI4MEM0 + RTZDIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI3NUQ0QkNENDRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6PyaLfAAADMElEQVRIS6VUXUiTYRT+vi3Tzd+ps23+3KRigtiPkolEQReG + UYTkhWatpWlWGkRdddfdSPImqUAJjSIT00oxLJIk0cR+tFSyzDJtgaMkDEPkdM7ZPvm2vS6jBx6es3Pe + 8zzvtm+TohLS/ov+AACStLgEQuJyLRJWYK1yzh/+FgCoQrpnfM4fOGBhcUlIMkEVkma4H4i1y2kFcMD8 + wqKQZILKZqTqmlTAWrfvMjhgbv63Dwm0hLWQohn1eNEbzrlfPiTQAtZCKjP1GXdAIC+r4XD+9CGBFrDm + RVJ1re6pZ0GyHHMvIawauYVNCFPfvvuQQAtYC6meKXU0amNsaGN/ZR60xIf9aIgN3cpGE9OzZCZ85nEm + pGiWlLABmuJCnUOXrNB7chdct4TUo32ANDbp4NuielDpqWfePdaPX6GrohSK4uLhlCEo96YlZLbOFHzH + oJXjMSBcGn4/zQGovEDqXXtzeTb+BTrKj0J3+Q54djYP7EZdTU2MPjFSK8eieQR9QtLg6GcOQPWgqKeQ + ZyOfoK30CDw+lg2Ot3Z4VLoNqo269mCNHIa2WjYn9A1PcAAqU6m9VV3TF9psOwwPS3JgZugCdNoyocwU + jU+RlImWBpezGz0vxzkA1YOiHvPFO7Ca1kGHLQtmXp2HdutmqN+/F6JiU+h3kOpyVeHJwBgHoLIpqajm + 189HoaG4CNqsGTA1UAWth9Lg6r490PygGyLjUikgzuWqQlffCAegelDdUwLqigqhpXgjTPYeh+bCFCg2 + RkEk3vxuVz/P0c43oLP3DQegLhspNalSFxiNcLswHT48LYNbBUlQk7ebzenmyhm08w1o7xmiAP6hRZiT + 70eYkzpctUuJWdHmwWs74+F1Uz7cyE+E4ohQB5mHm9a3GywpTXzektyKduIAIsKI3ISkL4rIdYle05C9 + VrZVBmvtl7eboUyv7V4jSQdwRn8FdI72iErtCUxnIuifkJ5hUqUOq9Jr7OeCNU6bTpNVqtMcDJSldOwn + KnOk+jypJ5QANRWc0cs5SEelXr54QidfwVYAMoiHq4W/gNM6OaNCJ+diaUIqN/43+Atwg27t+9ZXBUn6 + A2MdqQeVc5pWAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjUzQzNGNDI5NEQyQzExRTQ4QkE1QUNCMEVDRDZF + MDVEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjUzQzNGNDI4NEQyQzExRTQ4QkE1QUNCMEVDRDZF + MDVEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI1NUY4OTYyQTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6IsaOmAAADF0lEQVQ4T62U/UuTURTH+0nICqRI1ERMMyNQe8N0ChqBwQhN + yvwhEgJjVCqJ/qCibZo6tzQ339h6Nre5prapUzc1XzItX1ilzuWMLLVAen+xf6DTuTxjdxsFVj58ebjc + c+7nnud7z3228DbpIaDFH/CfoqCn72DIDvNfPDM2KAqyr8PcJxqY+QBTb8kkjocXQTsKigGwfqYJHqIg + 1OxHGHvlWPx4hXB1YyA3g4CBhqst+piEnrDA3rA95vBAY1x8d7lq/DVZwm5PQZNvoKYdypSgHgbVEIh1 + cLOZzOCbSSsyRQRba6uWtcpVLbPcwlglInNUCJNWWKqABqMLCGvGlfpJELaQ/V1Vd1lujAhe0chtUrH5 + ZExnmJ85MdomEa+qZMbIEF2BHGunILSjdZwYgTt4gJqjjj0Rltml1Zq9AeL0Mn71Wn2mtDU80MIvsFTw + O+KPIoWC8BNYRIUaqrRQroJKjQOk9N+xLBF2pXJFKfnsDGYa8gS6xOO2whyMuoHaHpGzZ/pBM0IMrtXD + nT4HqNHXe0lYoogMFeQP4jbSDkCPTUyXmnNoPutSo+9WN5DEQDyeWCWnhqm4p7Oimt3b54rzmmKPVHKz + 0Xg0AU1pz87VJp+yXOfd9t3mBmLXsGrsJhSsDtF4iOWxKdpzyQNnuRW7vEUp13obFG05OVUBPtO5V1Sn + k5q4SX8ENfWA6C7xHsP981Bb2sf38ZKd4JhSuXUJHPHhg/WJnAeZFw0Xzt/w8erRtLmBnB/CSmaC599I + 2PYVRl+CXigu3R9SfCC0Pf1MZ1oqvqvjogX7gtRFJfb1n24g7GblfQcFP2fkBYm5anxqQcbLKgzyK/Df + WRTkV5+RMTg84ZrgAOHo4ZIDVNdJw67CpsVLZ5gifj97Typlq2ZFQXj8LKh5EHpnaIar8N+Al5l9Y9Vs + T7OiIAzjqaMsa6QJnBkeWvgOHdPkAuIV67PSeQpCYYZplsZ+KyyWLRyFF8D553EDbURY770J0rrYJbda + SYE4iWb9NcgpRKDrOMAWwYP6d5BTaC52zyaAWDlAm/DweL8AX9zXukfxHsIAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6npMy1AAAGEUlEQVRIS7WVeVDUZRjHf7Ase8ECu+wl4LIXcqyyHC783AWW + 5QaRFTHkMi9SQvE+UhLzwk0BUcQSgQBBgcYDzStMSzOPcpqcmo5pmqk/+rOapqb+iG/PbzfFcSz/6pn5 + zPN739/7fp/nvZn/3TSLjj+XJy2/RaItPCT5vaBd8m1+q2Qku1lcrcvki+iXr7fFU6ZZeOx5KDU1b7jU + 1Z2bVPMPWNMbRXrXkWAc+ywVLbcS8fKwFjlu8VdpW0XzSc6f8PEIPzJ19dFnU3WEJdHL9P3X9O1nkdB8 + CQrX7i3mKn9zfqsUq29ZsPfjRBx5aMO2cTMy94gm7FuF7XyJTwDJTo5GVdHxNALVgsPd5Ceye+9g8b0f + UXbjB8RtH4Msd+MeXS7f6twjxbILZiy7pEHDtTBsvG7BqivTUXpsClLWCbtJNpDwBlGVH3ySIFV520eW + nedRcf0HVJGwbeRrOHs/h2n1CGRZDe7wND/W1hiI8sEYlJ4KRcVpJcrfVqByNBILhqLh3KeA+UXBOpL2 + jkRZduARPGXZ/vH4pnMou/gd7INfIPn4QyQc/RSOzk9hrBtEiKPerUn1Y5PXBaDojWlwdgUjr0+G/H4Z + cnpCUNJrQNZ+LeLrBD/LYnixFEDAKFz7vJQ0r49dO4zikS8x8/ADxLd9jIT2B5ix/z7SX78Pw+K3EJy2 + wq1M4rEz6sRwthgw82Ag2KNS2I5JPZ4rZx00ImGNHIZSfisFkDGhxbs5AkKLd/3kaLkDlgTjXrsNc/Md + mPfeQeyOD2HbcRu6yi4E2Wrd8ngeG71IBPtePWa4JUhsD0DykQAkHQqApUWCFLcGyZvDoZ/P/5oCTGXk + hU2MvGB7rbGmG47dd2Fa+x6iX/kAMa/eQvS2m4jaeAPspvcROb8TQexid3CcL2usFCJjnwE5nQYU9RhR + PGDC7D4TCrqMyDqkR9oePbRz/SZEKh8rI8vdyshyXhmzLD8DS/1VGOquwtgw7glkXH0Nhvp3kbL2GrSl + hyC11ril03xZfbkQKZuVsDeq4NihRtYuDbJ2auBoUsO2TQXrJiWMlWIExflWMiHOjRzfJy0bg776HCKX + vANd7WXol1/xeN3Si7A2XIXW1YbAxAq3UO0zPTSd1yG38bplLK//vxBrffKY4PQ1HH9aKk8jonQUUyvO + Qlt9HtqaCx4/tXIMyXWXMXXOAQTEv+D2zCvDhBBTCN1zCGOCZq3k+DXO1YcpRYOY4hpF2LzTCCs74/VE + 3IvnEVd1EhGFblBbWot6BKXWQZq64tlYa2+TuJwQM9KU5cRL35hyOxCe2w913hA0hcPQFI16KRzxEFtO + a1Q9htSVN5C+5S5x7x/uIm3DR7CvuomUReOImt1FU7nwEolHECImMGkJE5i46EJkejNM+X1QOPqhzBqC + KvskVDmnJuHKT/K4bgjKzBMItXcjJv84NOwWiKPndJK40TOCgPgaRmIur1dZ1yM6txvyWT0ITR+AImOQ + gg39N1ybDBJP60PorC5My3oTwQm18FdNryBxbq0EJL6AEUTYZBTkF0NGKyKdvZDb3qJOAxSIOqcP/jtp + JyC3D1BSvYgp6EN4aiNlP/cTEk4gFASPEUeXkWd8RaY5jcrEBkTn9UCT4Q3gzfBfRvJE9rrsfpicHSRe + NsFXmJeSXhTBXXY+jMjk8uArVkpExuKb6pkbYJ7L7Ria37xTUBeMeCkcncRTN0z/TyLKNYy4khNQJq2G + IMLBXdUWQkXwCYYR6md7IPP1k8WEC3UFDzSpG2BZeAZJtXQWFpyls3HOC50JzkdQnbFqDInLLiC2rBcq + 6xoSzzzP+NDVwDBaQkx4XzahNv8xZH48sVotCHeOUnnCWNJG18Q4UjddB7vlfbBbPwC7+YannLTyIrS5 + OyHU5v3hr07poL7JBHe4Jh8bzgQROY8h46IKCAVfbi73D3PcpfoJlX0VtEVN0JXsQlj2ZoRaaynj7N/8 + NfZLPLFmHrXnpiWSCCL8iMl32T/M6YGMq+R+covD7QADwfoIgqt4QVGtfvIZJ4lRv5CY4zypbjfjy+eE + M4l4gtuSwYSQ4DS4EZAew/wNiCYQJlvQU3cAAAAASUVORK5CYII= + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 diff --git a/TreeUtils.cs b/TreeUtils.cs new file mode 100644 index 0000000..571fa7c --- /dev/null +++ b/TreeUtils.cs @@ -0,0 +1,152 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using GeoScene.Data; +using GeoScene.Globe; + +namespace Cyberpipe +{ + public class TreeUtils + { + /// + /// 构造图层tree,最多解析三层,若地球存在,则只构造指定地球上图层已存在的树节点,若地球不存在,则构造全部 + /// + /// 所属地球 + /// 要加载的树 + /// 数据来源,实测数据/施工数据/规划数据/红线数据,为空则展示全部 + public static void InitLayerTree(GSOGlobeControl gsoGlobeControl, TreeView treeView, string viewDatasrc) + { +// treeView.Nodes.Clear(); + LayerConfig layerConfig = Utility.layerConfig;//layertree所在的配置文件 + List datasrcs = layerConfig.datasrcs; + foreach (DataSrc datasrc in datasrcs) + { + if (viewDatasrc != null && !viewDatasrc.Trim().Equals("") && !datasrc.label.Equals(viewDatasrc)) continue; + TreeNode rootNode = treeView.Nodes.Add(datasrc.label); + List layerTypes = datasrc.layertypes; + foreach (LayerType layerType in layerTypes) + { + TreeNode secNode = rootNode.Nodes.Add(layerType.label); + List layers = layerType.layers; + foreach (Layer layer in layers) + { + if (gsoGlobeControl == null) + { + TreeNode node = new TreeNode(); + node.Text = layer.label; + secNode.Nodes.Add(node); + + } + else + { + GSOLayer gsoLayer = gsoGlobeControl.Globe.Layers.GetLayerByCaption(layer.layer); + if (gsoLayer == null) continue;//将不存在的去除 + TreeNode node = new TreeNode(); + node.Tag = gsoLayer; + node.Text = layer.label; + node.Checked = gsoLayer.Visible; + if (gsoLayer.Visible) + { + secNode.Checked = true; + rootNode.Checked = true; + } + secNode.Nodes.Add(node); + } + + } + } + } + } + + + /// + /// TreeNode选中状态改变,对其子节点和父节点的选中状态做相应改变 + /// + /// + /// + public static void TreeNodeCheckedChange(GSOGlobeControl globeControl, TreeNode node) + { + if (node.Tag != null) + { + if (node.Tag is GSOLayer)//图层 + { + GSOLayer layer = node.Tag as GSOLayer; + layer.Visible = node.Checked; + globeControl.Globe.Refresh(); + } + else if (node.Tag is GSOTerrain)//地形 + { + GSOTerrain feat = node.Tag as GSOTerrain; + feat.Visible = node.Checked; + globeControl.Globe.Refresh(); + }else if (node.Tag is GSOFeature)//特征点 + { + GSOFeature feature = node.Tag as GSOFeature; + feature.Visible = node.Checked; + globeControl.Globe.Refresh(); + } + } + + CheckParentNode(node); + if (node.Nodes.Count > 0) + CheckChildrenNode(globeControl, node, node.Checked); + } + /// + /// 树形结构中,根据parentNode的选中状态,更改其子节点的选中状态 + /// + /// + /// + /// + public static void CheckChildrenNode(GSOGlobeControl globeControl, TreeNode parentNode, bool isChecked) + { + foreach (TreeNode childNode in parentNode.Nodes) + { + childNode.Checked = isChecked; + if (childNode.Tag is GSOLayer) + { + GSOLayer layer = childNode.Tag as GSOLayer; + layer.Visible = isChecked; + globeControl.Globe.Refresh(); + } + else if (childNode.Tag is GSOTerrain) + { + GSOTerrain feat = childNode.Tag as GSOTerrain; + feat.Visible = isChecked; + globeControl.Globe.Refresh(); + } + else if (childNode.Tag is GSOFeature) + { + GSOFeature feature = childNode.Tag as GSOFeature; + feature.Visible = childNode.Checked; + globeControl.Globe.Refresh(); + } + if (childNode.Nodes.Count > 0) + CheckChildrenNode(globeControl, childNode, isChecked); + } + } + + /// + /// 子节点则父节点:一选则选,全不选才不选 + /// 改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 + /// + /// 要检查的节点,更改其父节点状态 + public static void CheckParentNode(TreeNode curNode) + { + + if (curNode.Parent == null) return; + bool bChecked = false; + foreach (TreeNode node in curNode.Parent.Nodes) + { + if (!node.Checked) continue; + bChecked = true; + break; + } + curNode.Parent.Checked = bChecked; + CheckParentNode(curNode.Parent); + + } + + } +} diff --git a/ClassDoubleScreenCompare.cs b/ClassDoubleScreenCompare.cs new file mode 100644 index 0000000..f2935da --- /dev/null +++ b/ClassDoubleScreenCompare.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using GeoScene.Globe; +using GeoScene.Data; +using GeoScene.Engine; +using System.Drawing; + +namespace Cyberpipe +{ + class ClassDoubleScreenCompare + { + public static GSOFeature getSameFeatureFromOtherGlobe(GSOFeature feature, + GSOGlobeControl globeControl1, GSOGlobeControl globeControl2,double bufferWidth,GSOGeoPolygon3D resPolygon) + { + GSOLayer layer; + GSOFeatures features = new GSOFeatures(); + + if (!feature.Dataset.Caption.StartsWith("施工")) + { + layer = feature.Dataset.Caption == "供电管线" + ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") + : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(feature, fs[i], globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + else + { + layer = feature.Dataset.Caption == "施工电力管线" + ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") + : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(fs[i], feature, globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + + return getMostSimilarFeatureFromFeatures(feature, features); + + } + + + private static GSOFeature getMostSimilarFeatureFromFeatures(GSOFeature feature, GSOFeatures features) + { + double maxLength = 0; + GSOFeature f = new GSOFeature(); + GSOGeoPolyline3D line = feature.Geometry as GSOGeoPolyline3D; + + if (features.Length == 0) return null; + if (features.Length == 1) + { + f = features[0]; + f.HighLight = true; + } + else + { + for (int m = 0; m < features.Length; m++) + { + GSOGeoPolyline3D tempSGLine = features[m].Geometry as GSOGeoPolyline3D; + + double tempLength = tempSGLine.GetSpaceLength(false, 6378137); + double lengthAbs = Math.Abs(tempLength - line.GetSpaceLength(false, 6378137)); + if (m == 0) + { + f = features[0]; + f.HighLight = true; + maxLength = lengthAbs; + } + else if (lengthAbs < maxLength) + { + f = features[m]; + f.HighLight = true; + maxLength = lengthAbs; + } + } + } + return f; + } + + private static bool isSameFeature(GSOFeature feature1, GSOFeature feature2, GSOLayer layer, double bufferWidth) + { + GSOGeoPolyline3D line = feature1.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = line.CreateBuffer(bufferWidth * 2, true, 5, true, false); + + if (bufferPolygon == null) return false; + + GSOFeatures featuresInLayer = layer.FindFeaturesInPolygon(bufferPolygon, true); + + if (featuresInLayer == null || featuresInLayer.Length <= 0) + return false; + + for (int i = 0; i < featuresInLayer.Length; i++) + { + if (featuresInLayer[i].Name == feature2.Name) + { + return true; + break; + } + } + return false; + } + + private static bool isSimilarFeature(GSOFeature srcFeature, GSOFeature dscFeature, + GSOGlobeControl globeControl1,GSOGlobeControl globeControl2,double bufferWidth) + { + GSOLayer dscLayer = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); + GSOLayer srcLayer = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); + + if (!isSameFeature(srcFeature, dscFeature, dscLayer, bufferWidth) + && !isSameFeature(dscFeature, srcFeature, srcLayer, bufferWidth)) + return false; + return true; + } + + public static void CalculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2, + out double horizonDistance, out double verticalDistance, GSOGlobeControl globeControl1, GSOGlobeControl globeControl2) + { + GSOPoint3d pntIntersect1 = new GSOPoint3d(); + GSOPoint3d pntIntersect2 = new GSOPoint3d(); + GSOPoint3d pntProIntersect1 = new GSOPoint3d(); + GSOPoint3d pntProIntersect2 = new GSOPoint3d(); + + verticalDistance = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, verticalDistance, true, "垂直", globeControl1, globeControl2); + + horizonDistance = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, horizonDistance, true, "水平", globeControl1, globeControl2); + + } + + private static GSOPoint3d LabelDistance(GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, + double distance, bool markerVisible, string label,GSOGlobeControl globeControl1,GSOGlobeControl globeControl2) + { + if (pntIntersect1 == null || pntIntersect2 == null) + return new GSOPoint3d(); + GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); + GSOPoint3ds point3ds = new GSOPoint3ds(); + point3ds.Add(pntIntersect1); + point3ds.Add(pntIntersect2); + disline.AddPart(point3ds); + + GSOGeoMarker dismarker = new GSOGeoMarker(); + GSOFeature marker = null; + GSOFeature line = null; + createLineStyle(out marker, out line, disline, pntIntersect1, pntIntersect2, distance, label, dismarker); + + line.Visible = marker.Visible = markerVisible; + globeControl1.Globe.MemoryLayer.AddFeature(line); + globeControl1.Globe.MemoryLayer.AddFeature(marker); + + globeControl2.Globe.MemoryLayer.AddFeature(line); + globeControl2.Globe.MemoryLayer.AddFeature(marker); + + return dismarker.Position; + } + + private static void createLineStyle(out GSOFeature marker, out GSOFeature line, GSOGeoPolyline3D disline, + GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) + { + GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 + style.LineColor = Color.Red; + style.LineWidth = 5; //设置线的宽度为5 + style.VertexVisible = true; //显示线的节点 + disline.Style = style; //把风格添加到线上 + disline.AltitudeMode = EnumAltitudeMode.Absolute; + line = new GSOFeature(); + line.Geometry = disline; + + dismarker.X = pntIntersect1.X; + dismarker.Y = pntIntersect1.Y; + dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; + dismarker.Text = label + distance.ToString("0.00") + "米"; + dismarker.AltitudeMode = EnumAltitudeMode.Absolute; + + GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); + GSOTextStyle styleText = new GSOTextStyle(); + styleText.IsSizeFixed = true; + styleText.ForeColor = Color.Red; + styleText.FontSize = 20; + styleMarker.TextStyle = styleText; + dismarker.Style = styleMarker; + + marker = new GSOFeature(); + marker.Geometry = dismarker; + } + + } +} diff --git a/Cyberpipe.csproj b/Cyberpipe.csproj index d8aa9c8..bcce54d 100644 --- a/Cyberpipe.csproj +++ b/Cyberpipe.csproj @@ -203,6 +203,7 @@ + @@ -1143,6 +1144,7 @@ SysRescInfoManager.cs + True True diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 123caf1..2c45db6 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -258,42 +258,25 @@ for (int i = 0; i < scLayer.GetAllFeatures().Length; i++) { GSOFeature scFeature = scLayer.GetAt(i); - if (scFeature.GetFieldAsString("所属道路") == road) + if (scFeature.GetFieldAsString("所属道路") != road) continue; + GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + + GSOFeature sgFeature = null; + GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); + + //**判断同一个Feature + if (sgFeatures.Length >= 1) { - GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); - GSOFeature sgFeature = null; - GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); - - //**判断同一个Feature - if (sgFeatures.Length >= 1) + if (sgFeature != null) { - sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); + GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; + double horizonDistance, verticalDistance; - if (sgFeature != null) - { - GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; - double horizonDistance, verticalDistance; - - CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); - GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); - } - else - { - scFeature.HighLight = true; - DataRow dr = dt.NewRow(); - dr[0] = scLayer.Caption; - dr[1] = scFeature.GetFieldAsString("编号"); - dr[2] = sgLayer.Caption; - dr[3] = "无"; - dr[4] = "无"; - dr[5] = "0.02"; - dr[6] = "无"; - dr[7] = "0.02"; - dr[8] = "未设计管段"; - dt.Rows.Add(dr); - } + CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); + GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); } else { @@ -311,6 +294,21 @@ dt.Rows.Add(dr); } } + else + { + scFeature.HighLight = true; + DataRow dr = dt.NewRow(); + dr[0] = scLayer.Caption; + dr[1] = scFeature.GetFieldAsString("编号"); + dr[2] = sgLayer.Caption; + dr[3] = "无"; + dr[4] = "无"; + dr[5] = "0.02"; + dr[6] = "无"; + dr[7] = "0.02"; + dr[8] = "未设计管段"; + dt.Rows.Add(dr); + } } } /// diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index 53946c0..fe32265 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -4,7 +4,7 @@ using GeoScene.Globe; namespace Cyberpipe -{ +{ //本类作用为:辅助GlobalControl上Feature的统计分析工具类 class FeatureStatisticsService { /// @@ -60,8 +60,8 @@ /// /// /// - /// - /// + /// + /// /// /// public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) @@ -74,6 +74,7 @@ for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; double length = line.GetSpaceLength(true, 6378137); totalLength += length; ncount += 1; @@ -114,7 +115,7 @@ for (int i = 0; i < feats.Length; i++) { double radius = feats[i].GetFieldAsDouble(fieldName); - if (radius >= min && radius <= max) + if (radius >= minValue && radius <= maxValue) { result.Add(feats[i]); } @@ -148,23 +149,22 @@ lstDiameter.Sort(); if (lstDiameter.Count > 0) { - for (int m = 0; m < lstDiameter.Count; m++) + foreach (float diameter in lstDiameter) { double totalLength = 0.00; int ncount = 0; for (int j = 0; j < feats.Length; j++) { - if (feats[j].GetFieldAsFloat("管径_毫米") == lstDiameter[m]) - { - GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } + if (Math.Abs(feats[j].GetFieldAsFloat("管径_毫米") - diameter) > 0.00001) continue; + GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = lstDiameter[m].ToString(); + featuresClass.groupFieldValue = diameter.ToString(); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -191,13 +191,13 @@ //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); - for (int j = 0; j < accessStrs.Length; j++) + foreach (string accssname in accessStrs) { - GSOFeatures feats = null; - int ncount = 0; + GSOFeatures feats; + int ncount; if (polygon == null) { - feats = flayer.GetFeatureByFieldValue("附属物名称", accessStrs[j], true); + feats = flayer.GetFeatureByFieldValue("附属物名称", accssname, true); ncount = feats.Length; } else @@ -207,14 +207,14 @@ //过滤 for (int n = 0; n < feats.Length; n++) { - if (feats[n].GetFieldAsString("附属物名称").Contains(accessStrs[j])) newfeats.Add(feats[n]); + if (feats[n].GetFieldAsString("附属物名称").Contains(accssname)) newfeats.Add(feats[n]); } ncount = newfeats.Length; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); - featuresClass.layerName = accessStrs[j]; + featuresClass.layerName = accssname; featuresClass.ncount = ncount; result.Add(featuresClass); @@ -303,6 +303,26 @@ if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); - } + } + + + /// + /// 获取globeControl上选中的管线,如果返回空则没有选中的管线 + /// + /// 地球引擎 + /// 返回一根线 + public static GSOFeature GetSelectedPipeline(GSOGlobeControl globeControl) + { + GSOFeature resFeature; + if (globeControl.Globe.SelObjectCount < 1) return null; + GSOLayer resLayer; + globeControl.Globe.GetSelectObject(0, out resFeature, out resLayer); + if (resFeature == null) return null; + + GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; + if (line1 == null) return null; + GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; + return pipeStyle1 == null ? null : resFeature; + } } } diff --git a/FrmCompareFeature.cs b/FrmCompareFeature.cs index a05e8e7..ac622c4 100644 --- a/FrmCompareFeature.cs +++ b/FrmCompareFeature.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Data; using System.Drawing; using System.Windows.Forms; @@ -11,26 +10,16 @@ { public partial class FrmCompareFeature : Office2007Form { - GSOFeature srcFeature; - GSOFeature dscFeature; - GSOGlobeControl globeControl1; - GSOGlobeControl globeControl2; - bool isSamePolyline; - - GSOLayer layerTemp; - GSOLayer layerTemp2; - GSOFeature new_feat; + private GSOFeature srcFeature, dscFeature; + private GSOGlobeControl globeControl1, globeControl2; GSOGeoPolygon3D resPolygon; - static FrmCompareFeature frm; - public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2, int width) + public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, int width) { if (frm == null) { - frm = new FrmCompareFeature(_globeControl1, _globeControl2, _layerTemp, _layerTemp2); - + frm = new FrmCompareFeature(_globeControl1, _globeControl2); frm.Location = new Point((width - frm.Width)/2, 50); frm.Show(_globeControl1.Parent); } @@ -41,8 +30,7 @@ } } - public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2) + public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2) { globeControl1 = _globeControl1; globeControl2 = _globeControl2; @@ -50,99 +38,35 @@ globeControl1.Globe.Action = EnumAction3D.SelectObject; globeControl2.Globe.Action = EnumAction3D.SelectObject; - layerTemp = _layerTemp; - layerTemp2 = _layerTemp2; globeControl1.MouseClick += globeControl1_MouseClick; globeControl2.MouseClick += globeControl2_MouseClick; } + private void invalParam() + { + if (srcFeature == null || dscFeature == null) + { + MessageBox.Show("请选择要对比的管段!", "提示"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) + { + MessageBox.Show("请选择同种类型图层!"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type || + srcFeature.Geometry.Type != EnumGeometryType.GeoPolyline3D) + return; + } + private void buttonAnalysis_Click(object sender, EventArgs e) { + invalParam(); + dataGridViewX1.DataSource = null; - - double bufferWidth = Convert.ToDouble(textBox1.Text); - - if (srcFeature == null || dscFeature == null) - MessageBox.Show("请选择要对比的管段!", "提示"); - else - { - if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) - MessageBox.Show("请选择同种类型图层!"); - else if (srcFeature.Geometry.Type == dscFeature.Geometry.Type && - srcFeature.Geometry.Type == EnumGeometryType.GeoPolyline3D) - { - lineLayerCompare(srcFeature, dscFeature, bufferWidth); - if (!isSamePolyline) - MessageBox.Show("实测管段与施工管段非同一条管段,请选择同一管段进行比较!", "提示"); - else - { - lineFeatureCompare(srcFeature, dscFeature); - globeControl1.Globe.Action = EnumAction3D.ActionNull; - globeControl2.Globe.Action = EnumAction3D.ActionNull; - } - } - else - MessageBox.Show("无法处理该类型图层!"); - } + lineFeatureCompare(srcFeature, dscFeature); } - - /// - /// 在容差范围内判断是否同一根管段 - /// - /// - /// - /// - /// - private bool lineLayerCompare(GSOFeature srcFeature, GSOFeature dscFeature, double bufferWidth) - { - isSamePolyline = false; - - GSOGeoPolyline3D srcLine = srcFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D srcBufferPolygon = srcLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer dsc = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); - - if (srcBufferPolygon != null) - { - GSOFeatures featuresInSrcLayer = dsc.FindFeaturesInPolygon(srcBufferPolygon, true); - - if (featuresInSrcLayer != null && featuresInSrcLayer.Length > 0) - { - for (int i = 0; i < featuresInSrcLayer.Length; i++) - { - if (featuresInSrcLayer[i].Name == dscFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D dscBufferPolygon = dscLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer src = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); - - if (dscBufferPolygon != null) - { - GSOFeatures featuresInDscLayer = src.FindFeaturesInPolygon(dscBufferPolygon, true); - - if (featuresInDscLayer != null && featuresInDscLayer.Length > 0) - { - for (int i = 0; i < featuresInDscLayer.Length; i++) - { - if (featuresInDscLayer[i].Name == srcFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - return isSamePolyline; - } - /// /// 分析两根管段的具体差异 /// @@ -156,8 +80,10 @@ GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; double dscLineLength = dscLine.GetSpaceLength(false, 6378137); - double horizonDistance = calculateDistance(srcLine, dscLine,false); - double verticalDistance = calculateDistance(srcLine, dscLine,true); + double horizonDistance, verticalDistance; + + ClassDoubleScreenCompare.CalculateDistance(srcLine, dscLine, out horizonDistance, + out verticalDistance,globeControl1,globeControl2); DataTable dt = new DataTable(); dt.Columns.Add("数据名称"); @@ -189,6 +115,98 @@ dt.Rows.Add(dscRow); dataGridViewX1.DataSource = dt; + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) + { + globeControl1.Globe.MemoryLayer.RemoveAllFeature(); + globeControl2.Globe.MemoryLayer.RemoveAllFeature(); + + GSOFeature new_feat = new GSOFeature(); + resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); + resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; + new_feat.Geometry = resPolygon; + + globeControl1.Globe.MemoryLayer.AddFeature(new_feat); + globeControl2.Globe.MemoryLayer.AddFeature(new_feat); + + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + public static void clearFeatureHighLight(GSOGlobeControl glb) + { + for (int i = 0; i < glb.Globe.Layers.Count; i++) + { + GSOLayer layer = glb.Globe.Layers[i]; + if (!(layer is GSOFeatureLayer)) continue; + GSOFeatures feats = layer.GetAllFeatures(); + for (int j = 0; j < feats.Length; j++) + { + feats[j].HighLight = false; + } + } + } + + void globeControl1_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl1.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl1.Globe.Action != EnumAction3D.SelectObject || + globeControl1.Globe.SelectedObject == null) + return; + GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + srcFeature = globeControl1.Globe.SelectedObject; + dscFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(srcFeature, + globeControl1,globeControl2,bufferWidth,resPolygon); + + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } + + void globeControl2_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl2.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl2.Globe.Action != EnumAction3D.SelectObject || + globeControl2.Globe.SelectedObject == null) + return; + + GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + dscFeature = globeControl2.Globe.SelectedObject; + srcFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(dscFeature, + globeControl1, globeControl2, bufferWidth, resPolygon); + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } private void FrmCompareFeature_FormClosing(object sender, FormClosingEventArgs e) @@ -198,322 +216,5 @@ frm = null; } - private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) - { - new_feat = new GSOFeature(); - resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); - resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; - new_feat.Geometry = resPolygon; - - layerTemp.AddFeature(new_feat); - layerTemp2.AddFeature(new_feat); - globeControl1.Refresh(); - globeControl2.Refresh(); - } - - private GSOLayer getSameLayer(GSOFeature feature) - { - GSOLayer layer = null; - if (!feature.Dataset.Caption.StartsWith("施工")) - { - layer = feature.Dataset.Caption == "供电管线" - ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") - : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); - } - else - { - layer = feature.Dataset.Caption == "施工电力管线" - ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") - : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); - } - - return layer; - } - - /// - /// 地球1中点击地球2中同步添加缓冲区 - /// - /// - /// - void globeControl1_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl1.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl1.Globe.Action == EnumAction3D.SelectObject && - globeControl1.Globe.SelectedObject != null) - { - GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - addPologyToGlobeControl(line, bufferWidth); - } - - srcFeature = globeControl1.Globe.SelectedObject; - GSOLayer layers = getSameLayer(srcFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = srcFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(srcFeature, features[i], Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - listFeatures.Add(features[i]); - } - calculate(out maxLength, out dscFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - /// - /// 地球2中点击地球1中同步添加缓冲区 - /// - /// - /// - void globeControl2_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl2.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl2.Globe.Action != EnumAction3D.SelectObject || - globeControl2.Globe.SelectedObject == null) - return; - else - { - GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - - addPologyToGlobeControl(line, bufferWidth); - } - - dscFeature = globeControl2.Globe.SelectedObject; - //双屏同时选中同一管段 - GSOLayer layers = getSameLayer(dscFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = dscFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(features[i], dscFeature, Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - { - listFeatures.Add(features[i]); - } - } - calculate(out maxLength, out srcFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - private void calculate(out double maxLength, out GSOFeature feature, GSOFeatures listFeatures, - GSOGeoPolyline3D scLine) - { - maxLength = 0; - feature=new GSOFeature(); - if (listFeatures.Length == 0) - feature = null; - else - { - if (listFeatures.Length == 1) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - } - else - { - for (int m = 0; m < listFeatures.Length; m++) - { - GSOGeoPolyline3D tempSGLine = listFeatures[m].Geometry as GSOGeoPolyline3D; - - double tempLength = tempSGLine.GetSpaceLength(false, 6378137); - double lengthAbs = Math.Abs(tempLength - scLine.GetSpaceLength(false, 6378137)); - if (m == 0) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - maxLength = lengthAbs; - } - else if (lengthAbs < maxLength) - { - feature = listFeatures[m]; - listFeatures[m].HighLight = true; - maxLength = lengthAbs; - } - } - } - } - } - - /// - /// 计算距离 - /// - /// - /// - /// - double calculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2,bool isVertical) - { - GSOPoint3d pntIntersect1 = new GSOPoint3d(); - GSOPoint3d pntIntersect2 = new GSOPoint3d(); - GSOPoint3d pntProIntersect1 = new GSOPoint3d(); - GSOPoint3d pntProIntersect2 = new GSOPoint3d(); - double dDist = 0; - if (isVertical) - { - dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "垂直"); - } - else - { - dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "水平"); - } - - return dDist; - } - - /// - /// 清除所有高亮Feature - /// - /// - private void clearFeatureHighLight(GSOGlobeControl glb1,GSOGlobeControl glb2) - { - layerTemp.RemoveAllFeature(); - layerTemp2.RemoveAllFeature(); - //清除gbl1中高亮 - for (int i = 0; i < glb1.Globe.Layers.Count; i++) - { - GSOLayer layer = glb1.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - //清除gbl2中高亮 - for (int i = 0; i < glb2.Globe.Layers.Count; i++) - { - GSOLayer layer = glb2.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - } - - /// - /// 添加标注 - /// - /// - /// - /// - /// - /// - /// - private GSOPoint3d LabelDistance(GSOLayer markerLayer, GSOLayer markerLayer2, - GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, bool markerVisible,string label) - { - if (pntIntersect1 == null || pntIntersect2 == null) - return new GSOPoint3d(); - GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); - GSOPoint3ds point3ds = new GSOPoint3ds(); - point3ds.Add(pntIntersect1); - point3ds.Add(pntIntersect2); - disline.AddPart(point3ds); - - GSOGeoMarker dismarker = new GSOGeoMarker(); - GSOFeature marker = null; - GSOFeature line = null; - createLineStyle(out marker, out line,disline, pntIntersect1, pntIntersect2, distance, label, dismarker); - - line.Visible = marker.Visible = markerVisible; - markerLayer.AddFeature(line); - markerLayer.AddFeature(marker); - - markerLayer2.AddFeature(line); - markerLayer2.AddFeature(marker); - - return dismarker.Position; - } - /// - /// 控制标注和字体的颜色 - /// - /// - /// - /// - /// - /// - /// - /// - /// - private void createLineStyle(out GSOFeature marker,out GSOFeature line,GSOGeoPolyline3D disline, - GSOPoint3d pntIntersect1,GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) - { - GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 - style.LineColor = Color.Red; - style.LineWidth = 5; //设置线的宽度为5 - style.VertexVisible = true; //显示线的节点 - disline.Style = style; //把风格添加到线上 - disline.AltitudeMode = EnumAltitudeMode.Absolute; - line=new GSOFeature(); - line.Geometry = disline; - - dismarker.X = pntIntersect1.X; - dismarker.Y = pntIntersect1.Y; - dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; - dismarker.Text = label + distance.ToString("0.00") + "米"; - dismarker.AltitudeMode = EnumAltitudeMode.Absolute; - - GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); - GSOTextStyle styleText = new GSOTextStyle(); - styleText.IsSizeFixed = true; - styleText.ForeColor = Color.Red; - styleText.FontSize = 20; - styleMarker.TextStyle = styleText; - dismarker.Style = styleMarker; - - marker=new GSOFeature(); - marker.Geometry = dismarker; - } - } } diff --git a/FrmHotFuncStat.cs b/FrmHotFuncStat.cs index 84131ef..f313b20 100644 --- a/FrmHotFuncStat.cs +++ b/FrmHotFuncStat.cs @@ -58,14 +58,11 @@ DataTable table = OledbHelper.QueryTable(sql); - if (table != null) + if (table == null) return; + for (int i = 0; i < table.Rows.Count; i++) { - for (int i = 0; i < table.Rows.Count; i++) - { - userLists.Items.Add(table.Rows[i][0].ToString()); - } + userLists.Items.Add(table.Rows[i][0].ToString()); } - } //统计结果 private void statBtn_Click(object sender, EventArgs e) diff --git a/FrmLayerControl.cs b/FrmLayerControl.cs index 8586041..8fbce97 100644 --- a/FrmLayerControl.cs +++ b/FrmLayerControl.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Windows.Forms; using DevComponents.DotNetBar; using GeoScene.Data; @@ -13,10 +14,10 @@ GSOGlobeControl globeControl1; GSOGlobeControl globeControl2; - TreeNode terrainManagerNode = null; - TreeNode layerManagerNode = null; - TreeNode terrainManagerNode1 = null; - TreeNode layerManagerNode1 = null; +// TreeNode terrainManagerNode = null; +// TreeNode layerManagerNode = null; +// TreeNode terrainManagerNode1 = null; +// TreeNode layerManagerNode1 = null; public FrmLayerControl(GSOGlobeControl ctl1,GSOGlobeControl ctl2) { @@ -25,14 +26,14 @@ globeControl2 = ctl2; } - private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) - { - treeNode=new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - } +// private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) +// { +// treeNode=new TreeNode(); +// treeNode.ImageIndex = 0; +// treeNode.SelectedImageIndex = 0; +// treeNode.Checked = false; +// treeNode.Text = strTreeNodeText; +// } // private void initTreeView() // { @@ -51,234 +52,258 @@ // layerTree2.Nodes.Add(terrainManagerNode); // } - #region wxl重构树形结构代码 + + - private TreeNode treeNode(string strTreeNodeText) - { - TreeNode treeNode = new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - return treeNode; - } -// private void appendToParent(TreeNodeCollection treeNodeCollection, ) - #endregion - private void initTreeView() +// private void initNode(string nodeName) +// { +// TreeNode nodeGroupElse1 = new TreeNode(); +// nodeGroupElse1.Text = nodeName; +// layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); +// +// TreeNode nodeGroupElse = new TreeNode(); +// nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; +// layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); +// } + +// private void initTreeNode(XmlNodeList Params) +// { +// foreach (XmlNode paramsNode in Params) //layers +// { +// foreach (XmlNode layerNode in paramsNode) //layer +// { +// initNode(layerNode.Attributes["label"].Value); +// } +// } +// +// initNode("基础图层"); +// initNode("其他"); +// } + +// private void FrmLayerControl_Load(object sender, EventArgs e) +// { +// +// initTreeView(); +// try +// { +// XmlDocument doc = new XmlDocument(); +// doc.Load(Application.StartupPath + "\\双屏设置.xml"); +// XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// +// initTreeNode(Params); +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// +// RefreshLayerAndTerrainTree(); +// } + private void FrmLayerControl_Load(object sender, EventArgs e) { layerTree1.Nodes.Clear(); layerTree2.Nodes.Clear(); - - //加载layertree2 - initLayerTree(out layerManagerNode1, "图层管理"); - layerTree1.Nodes.Add(layerManagerNode1); - initLayerTree(out terrainManagerNode1, "地形管理"); - layerTree1.Nodes.Add(terrainManagerNode1); - - initLayerTree(out layerManagerNode, "图层管理"); - layerTree2.Nodes.Add(layerManagerNode); - initLayerTree(out terrainManagerNode, "地形管理"); - layerTree2.Nodes.Add(terrainManagerNode); + TreeUtils.InitLayerTree(globeControl1, layerTree1, "实测数据"); + TreeUtils.InitLayerTree(globeControl2, layerTree2, "施工数据"); } - private void initNode(string nodeName) - { - TreeNode nodeGroupElse1 = new TreeNode(); - nodeGroupElse1.Text = nodeName; - layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); + #region wxl重构树形结构代码 - TreeNode nodeGroupElse = new TreeNode(); - nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; - layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); - } + /// + /// 构造tree,最多解析三层,可放在工具类中 - private void initTreeNode(XmlNodeList Params) - { - foreach (XmlNode paramsNode in Params) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - initNode(layerNode.Attributes["label"].Value); - } - } + /// 所属地球 + /// 要加载的树 + /// 数据来源,实测数据/施工数据/规划数据/红线数据,为空则展示全部 +// private void initTree(GSOGlobeControl gsoGlobeControl,TreeView treeView, string viewDatasrc) +// { +// treeView.Nodes.Clear(); +// LayerConfig layerConfig = Utility.layerConfig; +// List datasrcs = layerConfig.datasrcs; +// foreach (DataSrc datasrc in datasrcs) +// { +// if (viewDatasrc != null && !viewDatasrc.Trim().Equals("") && !datasrc.label.Equals(viewDatasrc)) continue; +// TreeNode rootNode = treeView.Nodes.Add(datasrc.label); +// List layerTypes = datasrc.layertypes; +// foreach (LayerType layerType in layerTypes) +// { +// TreeNode secNode = rootNode.Nodes.Add(layerType.label); +// List layers = layerType.layers; +// foreach (Layer layer in layers) +// { +// GSOLayer gsoLayer = gsoGlobeControl.Globe.Layers.GetLayerByCaption(layer.layer); +// if (gsoLayer == null) continue;//将不存在的去除 +// TreeNode node = new TreeNode(); +// node.Tag = gsoLayer; +// node.Text = layer.label; +// node.Checked = gsoLayer.Visible; +// if (gsoLayer.Visible) +// { +// secNode.Checked = true; +// rootNode.Checked = true; +// } +// secNode.Nodes.Add(node); +// } +// } +// } +// } - initNode("基础图层"); - initNode("其他"); - } + #endregion - private void FrmLayerControl_Load(object sender, EventArgs e) - { - initTreeView(); - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(Application.StartupPath + "\\双屏设置.xml"); - XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, +// TreeView layerTree) +// { +// try +// { +// for (int i = 0; i < nLayerCount; i++) +// { +// GSOLayer layer = globcontrol.Globe.Layers[i]; +// if (layer == null) continue; +// string layerName = layer.Name; +// TreeNode node = new TreeNode(); +// node.Tag = layer; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = layer.Caption; +// node.Checked = layer.Visible; +// +// bool isContains = false; +// for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) +// { +// if (!layerName.Contains("fttp:")) +// { +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || +// layerName.Contains("施工") || +// layerName.Contains("规划")) continue; +// break; +// case "layerTree2": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[j].Nodes.Add(node); +// isContains = true; +// break; +// } +// else +// { +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); +// isContains = true; +// break; +// } +// } +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || +// layerName.Contains("标注") || +// isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || +// layerName.Contains("景观") || layerName.Contains("红线")) +// continue; +// break; +// case "layerTree2": +// if (isContains != false || layerName.Contains("tempLgdData2")) +// continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); +// } +// +// for (int i = 0; i < nTerrainCount; i++) +// { +// GSOTerrain terrain = globcontrol.Globe.Terrains[i]; +// if (terrain == null) continue; +// TreeNode node = new TreeNode(); +// node.Tag = terrain; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = terrain.Caption; +// node.Checked = terrain.Visible; +// switch (layerTree.Name) +// { +// case "layerTree1": +// terrainManagerNode1.Nodes.Add(node); +// break; +// case "layerTree2": +// terrainManagerNode.Nodes.Add(node); +// break; +// default: +// break; +// } +// } +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// } - initTreeNode(Params); - } - catch (Exception ex) - { - LogError.PublishError(ex); - } +// private void initTreeNodeCheckedStatus(TreeView layerTreeView) +// { +// //节点选中状态控制 +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// if (node.Checked != true) continue; +// layerTreeView.Nodes[0].Checked = true; +// break; +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOTerrain layer = childNode.Tag as GSOTerrain; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// } - RefreshLayerAndTerrainTree(); - } - - private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, - TreeView layerTree) - { - try - { - for (int i = 0; i < nLayerCount; i++) - { - GSOLayer layer = globcontrol.Globe.Layers[i]; - if (layer == null) continue; - string layerName = layer.Name; - TreeNode node = new TreeNode(); - node.Tag = layer; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = layer.Caption; - node.Checked = layer.Visible; - - bool isContains = false; - for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) - { - if (!layerName.Contains("fttp:")) - { - switch (layerTree.Name) - { - case "layerTree1": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || - layerName.Contains("施工") || - layerName.Contains("规划")) continue; - break; - case "layerTree2": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[j].Nodes.Add(node); - isContains = true; - break; - } - else - { - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); - isContains = true; - break; - } - } - switch (layerTree.Name) - { - case "layerTree1": - if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || - layerName.Contains("标注") || - isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || - layerName.Contains("景观") || layerName.Contains("红线")) - continue; - break; - case "layerTree2": - if (isContains != false || layerName.Contains("tempLgdData2")) - continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); - } - - for (int i = 0; i < nTerrainCount; i++) - { - GSOTerrain terrain = globcontrol.Globe.Terrains[i]; - if (terrain == null) continue; - TreeNode node = new TreeNode(); - node.Tag = terrain; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = terrain.Caption; - node.Checked = terrain.Visible; - switch (layerTree.Name) - { - case "layerTree1": - terrainManagerNode1.Nodes.Add(node); - break; - case "layerTree2": - terrainManagerNode.Nodes.Add(node); - break; - default: - break; - } - } - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - - private void initTreeNodeCheckedStatus(TreeView layerTreeView) - { - //节点选中状态控制 - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - if (node.Checked != true) continue; - layerTreeView.Nodes[0].Checked = true; - break; - } - - foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOTerrain layer = childNode.Tag as GSOTerrain; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - } - - void exPandTreeNode() - { - layerManagerNode1.Expand(); - terrainManagerNode1.Expand(); - layerManagerNode.Expand(); - terrainManagerNode.Expand(); - } +// void exPandTreeNode() +// { +// layerManagerNode1.Expand(); +// terrainManagerNode1.Expand(); +// layerManagerNode.Expand(); +// terrainManagerNode.Expand(); +// } /// /// 刷新节点树 /// - private void RefreshLayerAndTerrainTree() - { - int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 - int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 - addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); - initTreeNodeCheckedStatus(layerTree1); - - int nLayerCount = globeControl2.Globe.Layers.Count; - int nTerrainCount = globeControl2.Globe.Terrains.Count; - addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); - initTreeNodeCheckedStatus(layerTree2); - - // 展开 - exPandTreeNode(); - } +// private void RefreshLayerAndTerrainTree() +// { +// int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 +// int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 +// addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); +// initTreeNodeCheckedStatus(layerTree1); +// +// int nLayerCount = globeControl2.Globe.Layers.Count; +// int nTerrainCount = globeControl2.Globe.Terrains.Count; +// addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); +// initTreeNodeCheckedStatus(layerTree2); +// +// // 展开 +// exPandTreeNode(); +// } /// /// 节点树复选框选中状态改变事件处理 @@ -289,144 +314,132 @@ { if (e.Action != TreeViewAction.Unknown) { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } + TreeUtils.TreeNodeCheckedChange(globeControl2,e.Node); + } + } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree2(e.Node, e.Node.Checked); + private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) + { + if (e.Action != TreeViewAction.Unknown) + { + TreeUtils.TreeNodeCheckedChange(globeControl1, e.Node); } } + + +// private void layerTree2_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree2(e.Node, e.Node.Checked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree1(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree1(childNode, isChecked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree2(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree2(childNode, isChecked); +// } +// } /// /// 节点树选中状态改变事件 /// /// /// - private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) - { - if (e.Action != TreeViewAction.Unknown) - { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } +// private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree1(e.Node, e.Node.Checked); +// } +// } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree1(e.Node, e.Node.Checked); - } - } - /// - /// 改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 - /// - /// - private void CheckParentNode(TreeNode curNode) - { - bool bChecked = false; - - if (curNode.Parent != null) - { - foreach (TreeNode node in curNode.Parent.Nodes) - { - if (node.Checked) - { - bChecked = true; - break; - } - } - if (bChecked) - { - curNode.Parent.Checked = true; - CheckParentNode(curNode.Parent); - } - else - { - curNode.Parent.Checked = false; - CheckParentNode(curNode.Parent); - } - } - } } } diff --git a/FrmMetadata.cs b/FrmMetadata.cs index 4d0d5cb..bb7c46c 100644 --- a/FrmMetadata.cs +++ b/FrmMetadata.cs @@ -12,12 +12,8 @@ { public partial class FrmMetadata : Office2007Form { - List pipelineLayerNames = new List();//线图层名称 - List workwellLayerNames = new List();//工井图层名称 - List valueLayerNames = new List();//阀门图层名称 - List instrumenLayerNames = new List();//附属物图层名称 - string filename = Utility.filename; - DataSet dataSet = new DataSet(); + + bool selectedLayer; public FrmMetadata() @@ -25,308 +21,33 @@ InitializeComponent(); loadTreeView(layerTree); } - private void FrmMetadata_Load(object sender, EventArgs e) - { - //this.ntLblC.Text = "nn"; - // loadTreeView(layerTree); - } private void loadTreeView(TreeView tv)//构建图层树 { - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - //tv.ShowPlusMinus = false; - - //tv.Nodes.Clear(); - tv.ShowLines = true; - // tv.ImageList = imageList1; - tv.CheckBoxes = false; - #region 三级 - - //foreach (XmlNode paramsNode in Params1) //layers - //{ - // foreach (XmlNode layerNode in paramsNode) //layer - // { - // TreeNode nodelayer = new TreeNode(); - // string layerName = layerNode.Attributes["label"].Value; - // nodelayer.Text = layerName; - - // if (layerNode.HasChildNodes != false) - // { - // tv.Nodes.Add(nodelayer); - // foreach (XmlNode layerchildNode in layerNode) //layerchild - // { - // if (layerchildNode.Name == "layerchild") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["type"].Value; - // string layerchildName = layerchildNode.Attributes["label"].Value; - // if (layerType == "locaserver") - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - - // } - // else - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // if (layerchildNode.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = boollayer; - // nodelayer.Nodes.Add(nodelayerchild); - // } - // } - // else if (layerchildNode.Name == "layertype") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["label"].Value; - // nodelayerchild.Text = layerType; - // nodelayerchild.Tag = layerType; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - // if (layerchildNode.HasChildNodes == true) - // { - // foreach (XmlNode childNodeLayer in layerchildNode) - // { - // TreeNode nodelayerchild1 = new TreeNode(); - // string layerName1 = childNodeLayer.Attributes["layer"].Value; - // string layerchildName = childNodeLayer.Attributes["label"].Value; - // string layerType1 = childNodeLayer.Attributes["type"].Value; - // if (childNodeLayer.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild1.Text = layerchildName; - // nodelayerchild1.Tag = layerType1 + "|" + layerName1; - // nodelayerchild1.Checked = boollayer; - // nodelayerchild.Nodes.Add(nodelayerchild1); - // } - // } - // } - - // } - // } - // else - // { - // tv.Nodes.Add(nodelayer); - // } - // } - - //} - - #endregion - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - TreeNode nodelayer = new TreeNode(); - string layerName = layerNode.Attributes["label"].Value; - nodelayer.Text = layerName; - - if (layerNode.HasChildNodes) - { - tv.Nodes.Add(nodelayer); - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - if (layerchildNode.Name == "layerchild") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["type"].Value; - string layerchildName = layerchildNode.Attributes["label"].Value; - if (layerType == "locaserver") - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - - } - else - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - if (layerchildNode.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - //nodelayerchild.Checked = boollayer; - nodelayer.Nodes.Add(nodelayerchild); - } - } - else if (layerchildNode.Name == "layertype") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["label"].Value; - nodelayerchild.Text = layerType; - nodelayerchild.Tag = layerType; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode) - { - if (childNodeLayer.HasChildNodes) - { - TreeNode nodelayerchild2 = new TreeNode(); - string layer = childNodeLayer.Attributes["label"].Value; - nodelayerchild2.Text = layer; - nodelayerchild2.Tag = layer; - nodelayerchild2.Checked = true; - nodelayerchild.Nodes.Add(nodelayerchild2); - foreach (XmlNode n in childNodeLayer) - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = n.Attributes["layer"].Value; - string layerchildName = n.Attributes["label"].Value; - string layerType1 = n.Attributes["type"].Value; - if (n.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (n.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (n.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (n.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild2.Nodes.Add(nodelayerchild1); - - } - } - else - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = childNodeLayer.Attributes["layer"].Value; - string layerchildName = childNodeLayer.Attributes["label"].Value; - string layerType1 = childNodeLayer.Attributes["type"].Value; - if (childNodeLayer.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild.Nodes.Add(nodelayerchild1); - - } - } - } - } - - } - } - else - { - tv.Nodes.Add(nodelayer); - } - } - - } - if (tv.Nodes.Count > 0) - { - //tv.Nodes[0].Expand(); - if (tv.Nodes.Count > 0) - { - foreach (TreeNode node in tv.Nodes) - { - //node.Expand(); - } - } - } - //tv.ExpandAll(); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } + //tv.ShowPlusMinus = false; + //tv.Nodes.Clear(); + // tv.ImageList = imageList1; + tv.ShowLines = true; + tv.CheckBoxes = false; + TreeUtils.InitLayerTree(null, tv, null); } - + /// + /// 点击父节点则展开,点击子节点则编辑元数据 + /// + /// + /// private void layerTree_AfterSelect(object sender, TreeViewEventArgs e) { - String layername = layerTree.SelectedNode.Text; - if (layerTree.SelectedNode.GetNodeCount(true) == 0) { - searchLayerInfo(layername); - - selectedLayer = true; - clearBtn.Hide(); - completeBtn.Hide(); + String layername = e.Node.Text; + if (e.Node.GetNodeCount(true) != 0) + { //点击父节点,则展开 + e.Node.Expand(); + return; } + searchLayerInfo(layername); + selectedLayer = true; + clearBtn.Hide(); + completeBtn.Hide(); } //查询元数据 private void searchLayerInfo(String layername) { @@ -335,8 +56,6 @@ + " casic_metadatalayer where casic_metadatacontent.\"LAYERID\" = casic_metadatalayer.\"LAYERID\" and casic_metadatalayer.\"LAYERNAME\"='" + layername+"'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; - if (table != null && table.Rows.Count > 0) { groupBox1.Text = layername; @@ -400,8 +119,6 @@ //判断此时layerTree有没有选中的图层 if (selectedLayer)//有选中的图层,获得其名 { - string name = layerTree.SelectedNode.Text; - OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "支持格式(*.xml)|*.xml|XML数据(*.xml)|"; dlg.Multiselect = true; @@ -419,31 +136,24 @@ //读入元数据 private void AddXMLMDdata(string strFilePath) { - try - { - dataSet.Clear(); //清空数据集中的内容 - dataSet.ReadXml(strFilePath); //读取XML文件中的内容 + DataSet dataSet = new DataSet(); + dataSet.ReadXml(strFilePath); //读取XML文件中的内容 - //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); - string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); - string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); - string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); - string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); + //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); + string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); + string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); + string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); + string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); - //this.titleLbl.Text = attrtitle; - consLblC.Text = attrcons; - descLblC.Text = attrdesc; - authorLblC.Text = attrauthor; - ntLblC.Text = attrnt; - //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); + //this.titleLbl.Text = attrtitle; + consLblC.Text = attrcons; + descLblC.Text = attrdesc; + authorLblC.Text = attrauthor; + ntLblC.Text = attrnt; + //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); - completeBtn.Visible = true; - //this.clearBtn.Visible = true; - } - catch (Exception e) - { - - } + completeBtn.Visible = true; + //this.clearBtn.Visible = true; } //新建/编辑元数据 private void editBtn_Click(object sender, EventArgs e) @@ -509,11 +219,7 @@ string sql = "select \"LAYERID\" from casic_metadatalayer where \"LAYERNAME\" = '" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - if (table != null && table.Rows.Count > 0)//已有该图层,属于编辑 - { - return false; - } - return true; + return table == null || table.Rows.Count <= 0; } //保存元数据 private void saveData(String method,String layername,String cons,String desc,String author,String nt) { @@ -539,17 +245,16 @@ string insertSQL = "insert into casic_metadatalayer values ('" + layerid + "','" + layername + "')";//+ string insertSQL2 = "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','" + desc + "','" + author + "','" + nt + "')"; // "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','"+desc+"','"+author+"','"+nt+"')"; - if ((OledbHelper.sqlExecuteNonQuery(insertSQL) > 0)&&(OledbHelper.sqlExecuteNonQuery(insertSQL2)>0)) - { - MessageBox.Show("保存元数据成功!"); + if ((OledbHelper.sqlExecuteNonQuery(insertSQL) <= 0) || + (OledbHelper.sqlExecuteNonQuery(insertSQL2) <= 0)) return; + MessageBox.Show("保存元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } else { //更新 string layeridSQL = "select layerid from casic_metadatalayer where LAYERNAME='"+layername+"'"; @@ -561,16 +266,14 @@ + "',casic_metadatacontent.MDAUTHOR ='" + author.Trim() + "',casic_metadatacontent.NT ='" + nt.Trim() + "' where casic_metadatacontent.LAYERID='" + layerid + "'"; - if (OledbHelper.sqlExecuteNonQuery(updateSQL) > 0) - { - MessageBox.Show("更新元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + if (OledbHelper.sqlExecuteNonQuery(updateSQL) <= 0) return; + MessageBox.Show("更新元数据成功!"); + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } } diff --git a/FrmMetadataStat.cs b/FrmMetadataStat.cs index cb19f84..c3c1359 100644 --- a/FrmMetadataStat.cs +++ b/FrmMetadataStat.cs @@ -2,16 +2,16 @@ using System.Collections; using System.Collections.Generic; using System.Data; +using System.Linq; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; -using System.Xml; using DevComponents.DotNetBar; namespace Cyberpipe { public partial class FrmMetadataStat : Office2007Form { - Dictionary dic = new Dictionary(); + public FrmMetadataStat() { InitializeComponent(); @@ -22,7 +22,7 @@ string sql = "select LAYERNAME from casic_metadataLayer where LAYERNAME like '%" + keywordsTxt.Text.Trim() + "%'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; + int num = 0; resultList.Clear(); consLblC.Text = ""; @@ -32,6 +32,7 @@ if (table != null && table.Rows.Count > 0) { + num = table.Rows.Count; for (int i = 0; i < num;i++ ) { resultList.Items.Add(table.Rows[i][0].ToString()); @@ -56,7 +57,8 @@ int metadataLayernum = statistMDLayer(); int nomdLayernum = layernum - metadataLayernum; //MessageBox.Show("共有多少层?" + layernum.ToString()+"=="+metadataLayernum.ToString()+"=="+nomdLayernum.ToString()); - dic.Clear(); +// dic.Clear(); + Dictionary dic = new Dictionary(); dic.Add("已建",metadataLayernum); dic.Add("未建", nomdLayernum); @@ -74,11 +76,9 @@ foreach (string key in dic.Keys) { - if (dic[key] != 0) - { - xlist.Add(key); - ylist.Add(dic[key]); - } + if (dic[key] == 0) continue; + xlist.Add(key); + ylist.Add(dic[key]); } chart1.Series[0].Points.DataBindXY(xlist, ylist); @@ -89,73 +89,15 @@ string sql = "select * from casic_metadataLayer"; DataTable table = OledbHelper.QueryTable(sql); - mdlayernum = table.Rows.Count; + if(table!=null)mdlayernum = table.Rows.Count; return mdlayernum; } //统计有多少个图层 - private int statistLayer() { - int layernum = 0; - - string filename = Utility.filename; - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - //MessageBox.Show(layerNode.Attributes["label"].Value); - - if (layerNode.HasChildNodes) - { - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - //MessageBox.Show(layerchildNode.Attributes["label"].Value); - if (layerchildNode.Name == "layerchild") - { - layernum++; - } - else if (layerchildNode.Name == "layertype") - { - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode)//layertype下的layerchild - { - //MessageBox.Show(childNodeLayer.Attributes["label"].Value); - if (childNodeLayer.HasChildNodes) - { - - foreach (XmlNode n in childNodeLayer) - { - layernum++; - } - } - else - { - - layernum++; - } - } - } - } - - } - } - } - - } - - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - return layernum; + private int statistLayer() + { + List datasrcs = Utility.layerConfig.datasrcs; + return datasrcs.SelectMany(datasrc => datasrc.layertypes).Sum(layerType => layerType.layers.Count); } //选择list @@ -174,7 +116,6 @@ + "join casic_metadatalayer on casic_metadatalayer.LAYERID = casic_metadatacontent.LAYERID " + "where casic_metadatalayer.LAYERNAME='" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; //MessageBox.Show(num.ToString()); if (table != null && table.Rows.Count > 0) { @@ -192,10 +133,5 @@ ntLblC.Text = ""; } } - - private void buttonX1_Click(object sender, EventArgs e) - { - drawChart(); - } } } diff --git a/FrmWait.Designer.cs b/FrmWait.Designer.cs index 99733ea..88f5a29 100644 --- a/FrmWait.Designer.cs +++ b/FrmWait.Designer.cs @@ -55,7 +55,6 @@ this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(0, 24); this.label1.TabIndex = 1; - this.label1.Click += new System.EventHandler(this.label1_Click); // // FrmWait // @@ -71,7 +70,7 @@ this.ShowIcon = false; this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; this.Text = "正在处理,请稍后..."; - this.Load += new System.EventHandler(this.FrmWait_Load); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmWait_FormClosing); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); diff --git a/FrmWait.cs b/FrmWait.cs index d3b7a48..d645ae4 100644 --- a/FrmWait.cs +++ b/FrmWait.cs @@ -32,27 +32,6 @@ frm = null; } - private void FrmWait_Load(object sender, EventArgs e) - { - - - } - - - private void labelX2_Click(object sender, EventArgs e) - { - - } - - private void progressBarX1_Click(object sender, EventArgs e) - { - - } - - private void label1_Click(object sender, EventArgs e) - { - - } } } diff --git a/FrmYJSHTC.cs b/FrmYJSHTC.cs index 3572371..27b7186 100644 --- a/FrmYJSHTC.cs +++ b/FrmYJSHTC.cs @@ -143,9 +143,7 @@ for (int i = ctl1.Globe.Layers.Count - 1; i >= 0; i--) { if (ctl1.Globe.Layers[i].Caption == str) - { ctl1.Globe.Layers.Remove(ctl1.Globe.Layers[i]); - } } foreach (TreeNode n in layerTree.Nodes) @@ -155,20 +153,15 @@ for (int i = 0; i < n.Nodes.Count; i++) { if (n.Nodes[i].Text == str) - { n.Nodes[i].Remove(); - } } } } string sql = "delete from casic_audit_result where SH_LAYER = '" + str + "'"; - OledbHelper.sqlExecuteNonQuery(sql); - } } - } } diff --git a/MainFrm.cs b/MainFrm.cs index bc962c4..29a3eb3 100644 --- a/MainFrm.cs +++ b/MainFrm.cs @@ -2,7 +2,6 @@ using System.Collections; using System.Collections.Generic; using System.Data; -using System.Data.OracleClient; using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; @@ -13,7 +12,6 @@ using System.Text; using System.Threading; using System.Windows.Forms; -using System.Xml; using Cyberpipe.Forms; using DevComponents.DotNetBar; using GeoScene.Data; @@ -28,10 +26,10 @@ { TreeNode layerManagerNode; bool m_bFullScreen; - + GSOGlobeControl globeControl1; GSOGlobeControl globeControl2; - private GSOHudButton legend;//定义图例 + private GSOHudButton legend; //定义图例 private GSOHudButton btnToolNone; private GSOHudButton btnToolSelect; ToolTip tooltip1; @@ -42,20 +40,20 @@ GSOBalloon featureTooltip2; GSOBalloonEx balloonEx2; - GSOLayer layerTemp; - GSOLayer layerTemp2; + GSOLayer layerTemp;//wxl注释,Globe1的临时图层 + GSOLayer layerTemp2;//wxl注释,Globe2的临时图层 FrmRedlineResult frmredResult = null; FrmMnModify frmModify; public bool frmRedlineResult = false; public bool boolfrmShResult; public bool boolfrmModify; - public static string m_CurrentQueryLayer;//定义当前查询的图层 + public static string m_CurrentQueryLayer; //定义当前查询的图层 //定位和闪烁初始化定义 private EnumDesignMode enumDesignMode; //模拟规划设计模式 - private string trackflag;//定义阀门查询个数 + private string trackflag; //定义阀门查询个数 //记录沿线飞行设置 //int m_nFlyMode = 2; @@ -67,7 +65,7 @@ Double m_dDigPitWidthAlongLine = 6; Boolean m_bDigPitByDepth = true; //选择管线 - int selectState;//wxl 注释,表示是否已经计算过净距等了,1已计算,0未计算 + int selectState; //wxl 注释,表示是否已经计算过净距等了,1已计算,0未计算 //private OracleConnection connBackup = null; //数据集合 @@ -89,8 +87,8 @@ //双屏对比 //bool zhanshi=false; Thread t = null; - private GSOHudButton legendSC;//定义图例 - private GSOHudButton legendSG;//定义图例 + private GSOHudButton legendSC; //定义图例 + private GSOHudButton legendSG; //定义图例 //管纵图 private GSOHudButton lendendGZ50; private GSOHudButton lendendGZ36; @@ -102,12 +100,13 @@ GSOGeoPoint3D bsqPT; - FrmYJSHTC frmSh;//一键审核窗口全局变量wxl - FrmWait frmWait;//一键审核等待窗口 + FrmYJSHTC frmSh; //一键审核窗口全局变量wxl + FrmWait frmWait; //一键审核等待窗口 //FrmWait frmWait2 = null;//文档操作等待窗口 float mouseDownX1, mouseDownY1; float mouseDownX2, mouseDownY2; + /// /// /// @@ -164,8 +163,9 @@ RigthMenuSet(); MenuSet(); - + } + /// /// 右屏中添加管纵图片 /// @@ -259,6 +259,7 @@ } #region 区域分析 + if (Utility.userRole.IndexOf("区域分析") < 0) { toolRightMenu.Items.Remove(区域分析ToolStripMenuItem); @@ -278,9 +279,11 @@ 区域分析ToolStripMenuItem.DropDownItems.Remove(无源淹没分析ToolStripMenuItem); } } + #endregion #region 视域分析 + if (Utility.userRole.IndexOf("视域分析") < 0) { toolRightMenu.Items.Remove(视域分析ToolStripMenuItem); @@ -300,9 +303,11 @@ 视域分析ToolStripMenuItem.DropDownItems.Remove(可视包络分析ToolStripMenuItem); } } + #endregion #region 开发分析 + if (Utility.userRole.IndexOf("开挖分析") < 0) { toolRightMenu.Items.Remove(开挖分析ToolStripMenuItem); @@ -334,9 +339,11 @@ 开挖分析ToolStripMenuItem.DropDownItems.Remove(删除隧道ToolStripMenuItem); } } + #endregion #region 拓扑分析 + if (Utility.userRole.IndexOf("拓扑分析") < 0) { toolRightMenu.Items.Remove(拓扑分析ToolStripMenuItem); @@ -372,9 +379,11 @@ 拓扑分析ToolStripMenuItem.DropDownItems.Remove(爆管分析ToolStripMenuItem); } } + #endregion #region 断面分析 + if (Utility.userRole.IndexOf("断面分析") < 0) { toolRightMenu.Items.Remove(断面分析ToolStripMenuItem); @@ -398,9 +407,11 @@ 断面分析ToolStripMenuItem.DropDownItems.Remove(基线剖面分析ToolStripMenuItem); } } + #endregion #region 绘制区域统计 + if (Utility.userRole.IndexOf("绘制区域统计") < 0) { toolRightMenu.Items.Remove(绘制区域统计ToolStripMenuItem); @@ -445,9 +456,11 @@ } } + #endregion #region 全区域统计 + if (Utility.userRole.IndexOf("全区域统计") < 0) { toolRightMenu.Items.Remove(全区域统计ToolStripMenuItem); @@ -492,9 +505,11 @@ } } + #endregion #region 查询 + if (Utility.userRole.IndexOf("查询") < 0) { toolRightMenu.Items.Remove(查询ToolStripMenuItem); @@ -542,9 +557,11 @@ 查询ToolStripMenuItem.DropDownItems.Remove(附属物查询ToolStripMenuItem); } } + #endregion #region 标注 + if (Utility.userRole.IndexOf("标注") < 0) { toolRightMenu.Items.Remove(标注ToolStripMenuItem); @@ -592,9 +609,11 @@ 标注ToolStripMenuItem.DropDownItems.Remove(标注管理ToolStripMenuItem); } } + #endregion #region 飞行 + if (Utility.userRole.IndexOf("飞行") < 0) { toolRightMenu.Items.Remove(飞行ToolStripMenuItem); @@ -618,9 +637,11 @@ 飞行ToolStripMenuItem.DropDownItems.Remove(绕眼睛飞行ToolStripMenuItem); } } + #endregion #region 编辑 + if (Utility.userRole.IndexOf("编辑") < 0) { toolRightMenu.Items.Remove(编辑ToolStripMenuItem); @@ -656,9 +677,11 @@ 编辑ToolStripMenuItem.DropDownItems.Remove(删除模型ToolStripMenuItem); } } + #endregion #region 量算 + if (Utility.userRole.IndexOf("量算") < 0) { toolRightMenu.Items.Remove(量算ToolStripMenuItem); @@ -694,6 +717,7 @@ 量算ToolStripMenuItem.DropDownItems.Remove(地表面积ToolStripMenuItem1); } } + #endregion } @@ -701,6 +725,7 @@ { #region 权限管理 + if (Utility.userRole.IndexOf("权限管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem2); @@ -734,9 +759,11 @@ } } + #endregion #region 基础工具 + if (Utility.userRole.IndexOf("基础工具") < 0) { ribbonControl1.Items.Remove(ribbonTabItem1); @@ -781,37 +808,47 @@ } } + #endregion #region 一键审核 + if (Utility.userRole.IndexOf("一键审核") < 0) { ribbonControl1.Items.Remove(ribbonTabItem11); } + #endregion #region 红线审核 + if (Utility.userRole.IndexOf("红线审核") < 0) { ribbonControl1.Items.Remove(ribbonTabItem6); } + #endregion #region 双屏对比 + if (Utility.userRole.IndexOf("双屏对比") < 0) { ribbonControl1.Items.Remove(ribbonTabItem9); } + #endregion #region 文档管理 + if (Utility.userRole.IndexOf("文档管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem4); } + #endregion #region 基础管理 + if (Utility.userRole.IndexOf("基础管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem14); @@ -841,6 +878,7 @@ } #region Fan Zhang 重构现有代码 + //初始化控件布局 private void initLayout() { @@ -848,37 +886,37 @@ double dsw = SW; if (SW > 1440) { - double myScreen = dsw / 1440; - buttonX1.Width = (int)(buttonX1.Width * myScreen); - buttonX2.Width = (int)(buttonX2.Width * myScreen); - buttonX4.Width = (int)(buttonX4.Width * myScreen); - buttonX5.Width = (int)(buttonX5.Width * myScreen); - buttonX6.Width = (int)(buttonX6.Width * myScreen); - buttonX7.Width = (int)(buttonX8.Width * myScreen); - buttonX8.Width = (int)(buttonX8.Width * myScreen); - buttonX9.Width = (int)(buttonX9.Width * myScreen); - buttonX12.Width = (int)(buttonX12.Width * myScreen); - buttonX14.Width = (int)(buttonX14.Width * myScreen); - buttonX15.Width = (int)(buttonX15.Width * myScreen); - buttonX16.Width = (int)(buttonX16.Width * myScreen); - buttonX17.Width = (int)(buttonX17.Width * myScreen); + double myScreen = dsw/1440; + buttonX1.Width = (int) (buttonX1.Width*myScreen); + buttonX2.Width = (int) (buttonX2.Width*myScreen); + buttonX4.Width = (int) (buttonX4.Width*myScreen); + buttonX5.Width = (int) (buttonX5.Width*myScreen); + buttonX6.Width = (int) (buttonX6.Width*myScreen); + buttonX7.Width = (int) (buttonX8.Width*myScreen); + buttonX8.Width = (int) (buttonX8.Width*myScreen); + buttonX9.Width = (int) (buttonX9.Width*myScreen); + buttonX12.Width = (int) (buttonX12.Width*myScreen); + buttonX14.Width = (int) (buttonX14.Width*myScreen); + buttonX15.Width = (int) (buttonX15.Width*myScreen); + buttonX16.Width = (int) (buttonX16.Width*myScreen); + buttonX17.Width = (int) (buttonX17.Width*myScreen); - labelX1.Width = (int)(labelX1.Width * myScreen); - labelX2.Width = (int)(labelX2.Width * myScreen); - labelX3.Width = (int)(labelX3.Width * myScreen); - labelX6.Width = (int)(labelX6.Width * myScreen); - labelX8.Width = (int)(labelX8.Width * myScreen); - labelX9.Width = (int)(labelX9.Width * myScreen); - labelX12.Width = (int)(labelX12.Width * myScreen); - labelX13.Width = (int)(labelX13.Width * myScreen); - labelX14.Width = (int)(labelX14.Width * myScreen); - labelX16.Width = (int)(labelX16.Width * myScreen); - labelX17.Width = (int)(labelX17.Width * myScreen); - labelX11.Width = (int)(labelX11.Width * myScreen); - labelX19.Width = (int)(labelX19.Width * myScreen); - labelX21.Width = (int)(labelX21.Width * myScreen); - labelX22.Width = (int)(labelX22.Width * myScreen); - labelX24.Width = (int)(labelX24.Width * myScreen); + labelX1.Width = (int) (labelX1.Width*myScreen); + labelX2.Width = (int) (labelX2.Width*myScreen); + labelX3.Width = (int) (labelX3.Width*myScreen); + labelX6.Width = (int) (labelX6.Width*myScreen); + labelX8.Width = (int) (labelX8.Width*myScreen); + labelX9.Width = (int) (labelX9.Width*myScreen); + labelX12.Width = (int) (labelX12.Width*myScreen); + labelX13.Width = (int) (labelX13.Width*myScreen); + labelX14.Width = (int) (labelX14.Width*myScreen); + labelX16.Width = (int) (labelX16.Width*myScreen); + labelX17.Width = (int) (labelX17.Width*myScreen); + labelX11.Width = (int) (labelX11.Width*myScreen); + labelX19.Width = (int) (labelX19.Width*myScreen); + labelX21.Width = (int) (labelX21.Width*myScreen); + labelX22.Width = (int) (labelX22.Width*myScreen); + labelX24.Width = (int) (labelX24.Width*myScreen); } sideBar1.Visible = false; sideBar1.ExpandedPanel = sideBarPanelItem3; @@ -899,7 +937,7 @@ splitContainer1.Panel2Collapsed = true; - buttonItem87.Checked = true;//默认地上模式 + buttonItem87.Checked = true; //默认地上模式 ribbonTabItem1.Select(); //初始化状态为浏览 sideBarPanelItem3.Visible = false; @@ -951,7 +989,7 @@ //图例 legend = new GSOHudButton(); - legend.SetImage(Application.StartupPath + "/Resource/图例P.jpg");//图例P + legend.SetImage(Application.StartupPath + "/Resource/图例P.jpg"); //图例P legend.SetOffset(0, 15); legend.MinOpaque = 1; legend.MaxOpaque = 1; @@ -1002,7 +1040,7 @@ globeControl1.Globe.UserBackgroundColor = Color.White; globeControl1.Globe.FlyAlongLineSpeed = m_dFlyAlongLineSpeed; globeControl1.Globe.FlyAlongLineRotateSpeed = m_dFlyAlongLineRotateSpeed; - globeControl1.Globe.FlyToPointSpeed = globeControl1.Globe.FlyToPointSpeed * 3; + globeControl1.Globe.FlyToPointSpeed = globeControl1.Globe.FlyToPointSpeed*3; globeControl1.Globe.EditSnapObject = true; globeControl1.Globe.IsReleaseMemOutOfView = true; globeControl1.Globe.ControlPanel.Visible = true; @@ -1021,18 +1059,22 @@ globeControl2.Globe.UserBackgroundColor = Color.White; globeControl2.Globe.FlyAlongLineSpeed = m_dFlyAlongLineSpeed; globeControl2.Globe.FlyAlongLineRotateSpeed = m_dFlyAlongLineRotateSpeed; - globeControl2.Globe.FlyToPointSpeed = globeControl2.Globe.FlyToPointSpeed * 3; + globeControl2.Globe.FlyToPointSpeed = globeControl2.Globe.FlyToPointSpeed*3; globeControl2.Globe.EditSnapObject = true; globeControl2.Globe.IsReleaseMemOutOfView = true; globeControl2.Globe.ControlPanel.Visible = false; - GSOSimplePolygonStyle3D trackingRectStyle = globeControl1.Globe.TrackRectTool.TrackingPolygonStyle as GSOSimplePolygonStyle3D; + GSOSimplePolygonStyle3D trackingRectStyle = + globeControl1.Globe.TrackRectTool.TrackingPolygonStyle as GSOSimplePolygonStyle3D; trackingRectStyle.FillColor = Color.FromArgb(0, 0, 0, 0); - GSOSimplePolygonStyle3D trackRectStyle = globeControl1.Globe.TrackRectTool.PolygonStyle as GSOSimplePolygonStyle3D; + GSOSimplePolygonStyle3D trackRectStyle = + globeControl1.Globe.TrackRectTool.PolygonStyle as GSOSimplePolygonStyle3D; trackRectStyle.FillColor = Color.FromArgb(0, 0, 0, 0); - GSOSimpleLineStyle3D trackRectLineStyle = globeControl1.Globe.TrackRectTool.PolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; + GSOSimpleLineStyle3D trackRectLineStyle = + globeControl1.Globe.TrackRectTool.PolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; trackRectLineStyle.LineType = EnumLineType.Solid; - GSOSimpleLineStyle3D trackRectLineStyle1 = globeControl1.Globe.TrackRectTool.TrackingPolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; + GSOSimpleLineStyle3D trackRectLineStyle1 = + globeControl1.Globe.TrackRectTool.TrackingPolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; trackRectLineStyle1.LineType = EnumLineType.Solid; trackRectLineStyle1.LineColor = Color.FromArgb(0, 174, 255); trackRectLineStyle1.LineWidth = 1; @@ -1107,7 +1149,7 @@ //加载两个地球数据 private void loadData() { - Thread t1 = new Thread(doLoadDataForGlobalControl1); + Thread t1 = new Thread(doLoadDataForGlobalControl); t1.IsBackground = true; t1.Start(); } @@ -1119,30 +1161,22 @@ globeControl1.Globe.ConnectServer(Utility.serverip, Utility.serverport, "", ""); //加载locaServer中的数据 globeControl2.Globe.ConnectServer(Utility.serverip, Utility.serverport, "", ""); //加载locaServer中的数据 //初始化TreeView - // 勾选实测图层 - foreach (TreeNode tn in layerTree.Nodes) - { - if (tn.Nodes.Count <= 0) continue; - if (tn.Text != "实测数据") continue; - tn.Checked = true; - foreach (TreeNode tnChild in tn.Nodes) - { - tnChild.Checked = true; - foreach (TreeNode tnGrandChild in tnChild.Nodes) - { - tnGrandChild.Checked = true; - } - } - } - } - private void doLoadDataForGlobalControl1() + initLayerTree(); + } + /// + /// 加载地球1、2的图层 + /// + private void doLoadDataForGlobalControl() { try { globeControl1.Globe.Layers.MoveDown(10000); //加载实测管线数据 - Utility.dataSource = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.DBServer.Trim() + "/" + Utility.dbdatabase.Trim(), "", "", Utility.userID, Utility.DBPassword); + Utility.dataSource = + globeControl1.Globe.DataManager.OpenOracleDataSource( + Utility.DBServer.Trim() + "/" + Utility.dbdatabase.Trim(), "", "", Utility.userID, + Utility.DBPassword); if (Utility.dataSource != null) { @@ -1160,7 +1194,9 @@ globeControl1.Globe.Layers.GetLayerByCaption("红线").Visible = false; //globleControl1中加载规划数据 - GSODataSource ghDS = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.ghdbip + "/" + Utility.ghdbname, "", "", Utility.ghdbuser, Utility.ghdbpwd); + GSODataSource ghDS = + globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.ghdbip + "/" + Utility.ghdbname, "", "", + Utility.ghdbuser, Utility.ghdbpwd); if (ghDS != null) { for (int j = 0; j < ghDS.DatasetCount; j++) @@ -1176,13 +1212,16 @@ } //globeControl1,globeControl2中加载施工数据 - GSODataSource sgDS = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.sgdbip + "/" + Utility.sgdbname, "", "", Utility.sgdbuser, Utility.sgdbpwd); + GSODataSource sgDS = + globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.sgdbip + "/" + Utility.sgdbname, "", "", + Utility.sgdbuser, Utility.sgdbpwd); if (sgDS != null) { for (int m = 0; m < sgDS.DatasetCount; m++) { GSODataset dataset = sgDS.GetDatasetAt(m); - if (dataset != null && !dataset.Caption.Contains("SH") && Utility.dictionaryNetLayerNameAndCaption.ContainsKey(dataset.Caption)) + if (dataset != null && !dataset.Caption.Contains("SH") && + Utility.dictionaryNetLayerNameAndCaption.ContainsKey(dataset.Caption)) { dataset.Caption = dataset.Name; globeControl1.Globe.Layers.Add(dataset); @@ -1196,12 +1235,12 @@ // LoadDataForGlobalControl ss = connectServer; // ss(); - + this.Invoke((EventHandler) delegate { connectServer(); }); - + } catch (Exception ex) @@ -1212,67 +1251,17 @@ private void initLayerTree() { + layerTree.Nodes.Clear(); //加载临时图层节点 layerManagerNode = new TreeNode(); layerManagerNode.ImageIndex = 0; layerManagerNode.SelectedImageIndex = 0; layerManagerNode.Checked = true; layerManagerNode.Text = "临时图层"; + layerManagerNode.Tag = layerTemp; layerTree.Nodes.Add(layerManagerNode); - XmlDocument doc = new XmlDocument(); - doc.Load(Utility.filename); - XmlNodeList xmlLayerNodes = doc.SelectNodes("//layer"); - - foreach (XmlNode xmlLayerNode in xmlLayerNodes) - { - - //TODO LIST:创建一级TreeNode(实测、规划、施工) - TreeNode nodelayer = new TreeNode(); - string layerName = xmlLayerNode.Attributes["label"].Value; - nodelayer.Text = layerName; - nodelayer.Checked = false; - layerTree.Nodes.Add(nodelayer); - - XmlNodeList xmlChildLayerNodes = xmlLayerNode.ChildNodes; - foreach (XmlNode xmlChildLayerNode in xmlChildLayerNodes) - { - //TODO LIST:创建二级TreeNode节点 - TreeNode secondLevelNode = new TreeNode(); - string layerType = xmlChildLayerNode.Attributes["label"].Value; - secondLevelNode.Text = layerType; - - if (xmlChildLayerNode.Attributes["type"] != null) - { //道路图层特殊处理 - string type = xmlChildLayerNode.Attributes["type"].Value; - secondLevelNode.Tag = type + "|" + layerType; - } - else - { - secondLevelNode.Tag = layerType; - } - secondLevelNode.Checked = false; - nodelayer.Nodes.Add(secondLevelNode); - - XmlNodeList xmlActitualLayerNodes = xmlChildLayerNode.ChildNodes; - - foreach (XmlNode xmlActitualLayerNode in xmlActitualLayerNodes) - { - //TODO LIST:创建三级图层节点 - TreeNode layerNode = new TreeNode(); - string actutallylayerType = xmlActitualLayerNode.Attributes["type"].Value; - string actutallylayerName = xmlActitualLayerNode.Attributes["layer"].Value; - string actutallyLabelName = xmlActitualLayerNode.Attributes["label"].Value; - - layerNode.Text = actutallyLabelName; - layerNode.Tag = layerType + "|" + actutallyLabelName; - layerNode.Checked = false; - secondLevelNode.Nodes.Add(layerNode); - } - - } - - } + TreeUtils.InitLayerTree(globeControl1, layerTree, null); } @@ -1298,7 +1287,8 @@ for (int i = 0; i < markerStrs.Length; i++) { if (!File.Exists(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd")) continue; - GSOLayer markerLayer = globeControl1.Globe.Layers.Add(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd"); + GSOLayer markerLayer = + globeControl1.Globe.Layers.Add(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd"); if (markerLayer == null) continue; TreeNode node1 = new TreeNode(); node1.Text = markerLayer.Caption; @@ -1312,9 +1302,11 @@ private void MainFrm_Load(object sender, EventArgs e) { + + layerTree.Nodes.Add("正在加载,请稍后……");//树状图加载在图层加载之后,故增加提示 initGlobalControl(); //initGlobalMap(); - initLayerTree(); +// initLayerTree(); initMarkerTree(); initLayout(); loadData(); @@ -1383,7 +1375,7 @@ tempnode.Checked = node.Checked ? feature.Visible : false; tempnode.Tag = feature; node.Nodes.Add(tempnode); - GSOFeatureFolder featureFolder = (GSOFeatureFolder)feature; + GSOFeatureFolder featureFolder = (GSOFeatureFolder) feature; VisitFeature3Ds(featureFolder.Features, tempnode); } else @@ -1444,7 +1436,7 @@ /// Boolean CheckDatasetGeoReference(GSODataset dataset, string strDataPath) { - + if (dataset.GeoReferenceType != EnumGeoReferenceType.Flat) return true; Boolean bSuccess = false; if (MessageBox.Show("数据没有空间参考信息,请设置空间参考信息!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) != @@ -1498,7 +1490,7 @@ dlg.Filter = "输出JPEG(*.jpg)|*.jpg|输出PNG(*.png)|*.png|输出BMP(*.bmp)|*.bmp|输出BMP(*.gif)|*.gif"; if (dlg.ShowDialog() == DialogResult.OK) { - string extension = Path.GetExtension(dlg.FileName);//扩展名 + string extension = Path.GetExtension(dlg.FileName); //扩展名 switch (extension) { case ".jpg": @@ -1520,6 +1512,7 @@ globeControl1.Globe.Action = EnumAction3D.ActionNull; globeControl1.Globe.MouseRoamingEnable = true; } + /// /// 定位正北正90度俯视 /// @@ -1548,7 +1541,6 @@ void globeControl1_HudControlMouseIntoEvent(object sender, HudControlMouseIntoEventArgs e) { - GSOHudButton btn = e.HudControl as GSOHudButton; tooltip1 = new ToolTip(); switch (e.HudControl.Name) { @@ -1573,163 +1565,46 @@ break; } } - /// - /// layerTree选中后事件处理 - /// - /// - /// + + #region wxl 重构树形结构代码 + private void layerTree_AfterCheck(object sender, TreeViewEventArgs e) { - if (e.Node.Tag != null) + if (e.Action != TreeViewAction.Unknown) { - if (e.Node.Tag.ToString().Contains("|")) - { - string nodeTag = e.Node.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(nodeTag); - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - if (e.Node.Tag is GSOFeature) - { - if (e.Node.Nodes.Count == 0) - { - GSOFeature feat = e.Node.Tag as GSOFeature; - feat.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - } - CheckControl(e); - } - /// - /// 树节点选中方法 - /// - /// - private void CheckControl(TreeViewEventArgs e) - { - if (e.Action == TreeViewAction.Unknown||e.Node == null || Convert.IsDBNull(e.Node)) return; - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - { - CheckAllChildNodes(e.Node, e.Node.Checked); - } - } - /// - /// 改变所有子节点的状态 - /// - /// - /// - private void CheckAllChildNodes(TreeNode pn, bool IsChecked) - { - foreach (TreeNode tn in pn.Nodes) - { - tn.Checked = IsChecked; - - if (tn.Nodes.Count > 0) - { - CheckAllChildNodes(tn, IsChecked); - } + TreeUtils.TreeNodeCheckedChange(globeControl1, e.Node); } } - //改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 - private void CheckParentNode(TreeNode curNode) - { - bool bChecked = false; - - if (curNode.Parent == null) return; - foreach (TreeNode node in curNode.Parent.Nodes) - { - if (node.Checked) - { - bChecked = true; - break; - } - } - - if (bChecked) - { - curNode.Parent.Checked = true; - CheckParentNode(curNode.Parent); - } - else - { - curNode.Parent.Checked = false; - CheckParentNode(curNode.Parent); - } - } - + #endregion private void layerTree_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (e.Button != MouseButtons.Right) return; layerTree.SelectedNode = e.Node; - if (e.Node.Tag == null) return; - if (e.Button == MouseButtons.Right && e.Node.Tag.ToString().Contains("|")) + if (e.Node.Tag == null || e.Node.Parent == null) return; //排除无图层节点和第一级节点 + + //来自locaserver的数据,直接返回就行了,目前只有一个180fd,暂时单独处理 + GSOLayer gsoLayer = e.Node.Tag as GSOLayer; + if (gsoLayer == null || gsoLayer.Caption.Equals(Utility.roadLayerName)) return; + if (e.Node.Parent.Text.Equals("临时图层") || e.Node.Parent.Text.Equals("我的地标")) { - - if (e.Node.Tag.ToString().Split('|')[0] == "locaserver") - { - - foreach (ToolStripItem item in layerNodeContexMenu.Items) - { - item.Visible = false; - } - return; - - } - - if (e.Node.Tag.ToString().Split('|')[0] == "new") - { - LayerEditableMenuItem.Enabled = true; - foreach (ToolStripItem item in layerNodeContexMenu.Items) - { - item.Visible = false; - } - //LayerSelectableMenuItem.Visible = true; - //LayerEditableMenuItem.Visible = true; - RemoveLayer.Visible = true; - RefreshLayerFeatureListMenuItem.Visible = true; - //SaveLayerMenuItem.Visible = true; - //LayerFlyMenuItem.Visible = true; - } - + //临时图层下的子节点应该展示的 + contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); + contextMenuStripDeleteLayerNode.Tag = e.Node; + } + else + { LayerSelectableMenuItem.Visible = true; LayerEditableMenuItem.Visible = true; SaveLayerMenuItem.Visible = true; LayerFlyMenuItem.Visible = true; 导出CADToolStripMenuItem1.Visible = true; - layerNodeContexMenu.Show(layerTree, e.X, e.Y); layerNodeContexMenu.Tag = e.Node; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(e.Node.Tag.ToString().Split('|')[1]); - if (layer != null) - { - LayerSelectableMenuItem.Checked = layer.Selectable; - LayerEditableMenuItem.Checked = layer.Editable; - } + LayerSelectableMenuItem.Checked = gsoLayer.Selectable; + LayerEditableMenuItem.Checked = gsoLayer.Editable; } - else - { - if (e.Node.Tag is GSOLayer && e.Node.Parent != null && e.Node.Parent.Text.Trim() == "临时图层") - { - contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); - contextMenuStripDeleteLayerNode.Tag = e.Node; - } - else if (e.Node.Tag is GSOFeature && e.Node.Parent != null && e.Node.Parent.Text.Trim() == "我的地标") - { - contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); - contextMenuStripDeleteLayerNode.Tag = e.Node; - } - } + } /// @@ -1740,75 +1615,61 @@ private void 删除ToolStripMenuItem2_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "临时图层") + if (node == null || node.Parent == null) return; + if (node.Parent.Text.Trim() == "临时图层") { - if (node.Tag is GSOLayer) - { - GSOLayer layer = node.Tag as GSOLayer; - - for (int i = globeControl1.Globe.Layers.Count - 1; i >= 0; i--) - { - if (globeControl1.Globe.Layers[i].Caption == layer.Caption) - { - globeControl1.Globe.Layers.Remove(globeControl1.Globe.Layers[i]); - } - } - - globeControl1.Globe.Refresh(); - - node.Remove(); - } - } - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "我的地标") + if (!(node.Tag is GSOLayer)) return; + GSOLayer layer = node.Tag as GSOLayer; + globeControl1.Globe.Layers.Remove(layer); + globeControl1.Globe.Refresh(); + node.Remove(); + }else if (node.Parent.Text.Trim() == "我的地标") { - if (node.Tag is GSOFeature) - { - GSOFeature f = node.Tag as GSOFeature; - f.Delete(); - globeControl1.Globe.Refresh(); - - node.Remove(); - } + if (!(node.Tag is GSOFeature)) return; + GSOFeature f = node.Tag as GSOFeature; + f.Delete(); + globeControl1.Globe.Refresh(); + node.Remove(); } + } private void 可编辑ToolStripMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "临时图层") - { - if (node.Tag is GSOLayer) - { - GSOLayer layer = node.Tag as GSOLayer; - - 可编辑ToolStripMenuItem.Checked = !可编辑ToolStripMenuItem.Checked; - layer.Editable = 可编辑ToolStripMenuItem.Checked; - } - } + if (node == null || + node.Parent == null || + node.Parent.Text.Trim() != "临时图层" || !(node.Tag is GSOLayer)) return; + GSOLayer layer = node.Tag as GSOLayer; + 可编辑ToolStripMenuItem.Checked = !可编辑ToolStripMenuItem.Checked; + layer.Editable = 可编辑ToolStripMenuItem.Checked; } private void 保存ToolStripMenuItem_Click(object sender, EventArgs e) { - //TreeNode node = layerNodeContexMenu.Tag as TreeNode; - TreeNode node = contextMenuStripDeleteLayerNode.Tag as TreeNode; - - Int32 nIndex = node.Index; - string layerCaption = node.Text;//.Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); +// TreeNode node = contextMenuStripDeleteLayerNode.Tag as TreeNode; + TreeNode node = layerTree.SelectedNode; + if (node == null||node.Tag==null) return; + GSOLayer layer = node.Tag as GSOLayer; + if (layer == null) return; layer.Dataset.Save(); } - + //TODO LIST: wxl? Tag更正 private void 定位ToolStripMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - - if (node == null) return; + if (node == null||node.Parent==null) return; if (node.Parent.Text.Trim() == "临时图层") { - GSOLayer lsLayer = globeControl1.Globe.Layers.GetLayerByCaption(node.Text); + GSOLayer lsLayer = node.Tag as GSOLayer; + if (lsLayer == null) + { + LogHelper.WriteLog(typeof(MainFrm),"要定位的临时图层不存在:"+node.Text); + return; + } double x = lsLayer.LatLonBounds.Center.X; double y = lsLayer.LatLonBounds.Center.Y; - if (x == 0 && y == 0) + if (x.Equals(0) && y.Equals(0)) { x = lsLayer.Bounds.Center.X; y = lsLayer.Bounds.Center.Y; @@ -1818,20 +1679,14 @@ } else { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); - + GSOLayer layer = node.Tag as GSOLayer; if (layer == null) return; - if (layer.Caption == "红线") + if (layer.Caption.Equals("红线")) { globeControl1.Globe.FlyToPosition(new GSOPoint3d(120.610963, 31.188121, 50), EnumAltitudeMode.Absolute, -4, 50, 1000); globeControl1.Globe.FlyToPointSpeed = 10000000; globeControl1.Globe.Action = EnumAction3D.SelectObject; - - GSOLayer redLayer = globeControl1.Globe.Layers.GetLayerByCaption("红线"); - if (redLayer != null) - { - redLayer.Visible = true; - } + layer.Visible = true; globeControl1.Refresh(); } else @@ -1842,55 +1697,28 @@ } } } - + //TODO LIST: wxl? Tag更正 private void layerTree_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) { - if (layerTree.SelectedNode == null) return; - if (layerTree.SelectedNode.Tag.ToString().Contains("|")) + TreeNode node = layerTree.SelectedNode; + if (node == null) return; + if (node.Tag is GSOLayer) { - string nodeTag = layerTree.SelectedNode.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(nodeTag); - if (layer != null) + GSOLayer layer = node.Tag as GSOLayer; + if (layer.GetAllFeatures().Length <= 0) return; + GSOFeature feature = layer.GetAt(0); + if (feature != null && feature.Geometry != null) { - if (layer.Caption == "红线") - { - globeControl1.Globe.FlyToPosition(new GSOPoint3d(120.610963, 31.188121, 50), EnumAltitudeMode.Absolute, -4, 50, 1000); - globeControl1.Globe.FlyToPointSpeed = 10000000; - globeControl1.Globe.Action = EnumAction3D.SelectObject; - - GSOLayer redLayer = globeControl1.Globe.Layers.GetLayerByCaption("红线"); - if (redLayer != null) - { - redLayer.Visible = true; - } - globeControl1.Refresh(); - } - else - { - double x = layer.LatLonBounds.Center.X; - double y = layer.LatLonBounds.Center.Y; - globeControl1.Globe.FlyToPosition(new GSOPoint3d(x, y, 0), EnumAltitudeMode.Absolute); - } + globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute);//, 0, 0, 1000); + } + else + { + globeControl1.Globe.FlyToFeature(feature); } } - if (layerTree.SelectedNode.Tag is GSOLayer) + else if (node.Tag is GSOFeature) { - GSOLayer layer = layerTree.SelectedNode.Tag as GSOLayer; - if (layer.GetAllFeatures().Length > 0) - { - GSOFeature feature = layer.GetAt(0); - if (feature != null && feature.Geometry != null) - { - globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute);//, 0, 0, 1000); - } - else - { - globeControl1.Globe.FlyToFeature(feature); - } - } - } else if (layerTree.SelectedNode.Tag is GSOFeature) - { - GSOFeature feature = layerTree.SelectedNode.Tag as GSOFeature; + GSOFeature feature = node.Tag as GSOFeature; if (feature.Geometry != null) { globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute, 0, 0, 10); @@ -2231,15 +2059,7 @@ int idx = dataGridViewX2.Rows.Add(); dataGridViewX2.Rows[idx].Tag = feat; dataGridViewX2.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX2.Rows[idx].Cells[1].Value = featureName; } } @@ -2261,15 +2081,7 @@ int idx = dataGridViewLineList.Rows.Add(); dataGridViewLineList.Rows[idx].Tag = feat; dataGridViewLineList.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewLineList.Rows[idx].Cells[1].Value = featureName; } } @@ -2291,15 +2103,7 @@ int idx = dataGridViewX8.Rows.Add(); dataGridViewX8.Rows[idx].Tag = feat; dataGridViewX8.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX8.Rows[idx].Cells[1].Value = featureName; } } @@ -2321,15 +2125,7 @@ int idx = dataGridViewX4.Rows.Add(); dataGridViewX4.Rows[idx].Tag = feat; dataGridViewX4.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX4.Rows[idx].Cells[1].Value = featureName; } @@ -2353,15 +2149,7 @@ int idx = dataGridViewX6.Rows.Add(); dataGridViewX6.Rows[idx].Tag = feat; dataGridViewX6.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX6.Rows[idx].Cells[1].Value = featureName; } } @@ -2736,77 +2524,104 @@ return str; } - //string filename = Utility.filename; - //List g1layername = new List(); - /// /// 获取目标图层 /// /// +// private GSOLayer TreeNodeFeatureLayer() +// { +// TreeNode featureAddPipeFitTreenode = GetDestLayerFeatureAddTreeNode(); +// GSOLayer featureAddLayer = globeControl1.Globe.Layers.GetLayerByCaption(featureAddPipeFitTreenode.Tag.ToString().Split('|')[1]); +// +// return featureAddLayer; +// } + //TODO LIST: wxl11? 待更正,Node的Tag现在都已经统一为gsolayer对象了 +// private TreeNode GetDestLayerFeatureAddTreeNode() +// { +// for (int i = 0; i < layerTree.Nodes.Count; i++) +// { +// TreeNode tempNode = layerTree.Nodes[i]; +// for (int j = 0; j < tempNode.Nodes.Count; j++) +// { +// TreeNode tempChildNode = tempNode.Nodes[j]; +// if (tempChildNode.Tag.ToString().Split('|').Length > 1) // Config配置文件配置的图层 +// {//本层节点Tag记录layer +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode; +// } +// } +// else //临时添加的本地图层 +// {//子层节点的Tag记录layer +// for (int m = 0; m < tempChildNode.Nodes.Count; m++) +// { +// TreeNode tempChildNode1 = tempChildNode.Nodes[m]; +// if (tempChildNode1.Tag.ToString().Split('|').Length > 1) +// { +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode1.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode1.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode1; +// } +// } +// else +// { +// for (int n = 0; n < tempChildNode1.Nodes.Count; n++) +// { +// TreeNode tempChildNode2 = tempChildNode1.Nodes[n]; +// if (tempChildNode2.Tag.ToString().Split('|').Length <= 1) continue; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode2.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode2.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode2; +// } +// } +// } +// } +// } +// } +// } +// return null; +// } private GSOLayer TreeNodeFeatureLayer() { TreeNode featureAddPipeFitTreenode = GetDestLayerFeatureAddTreeNode(); - GSOLayer featureAddLayer = globeControl1.Globe.Layers.GetLayerByCaption(featureAddPipeFitTreenode.Tag.ToString().Split('|')[1]); - - return featureAddLayer != null ? featureAddLayer : null; + if (featureAddPipeFitTreenode == null) return null; + GSOLayer featureAddLayer = featureAddPipeFitTreenode.Tag as GSOLayer; + return featureAddLayer; } - + //遍历最深三层找到目标node. private TreeNode GetDestLayerFeatureAddTreeNode() { - for (int i = 0; i < layerTree.Nodes.Count; i++) + + foreach (TreeNode layerTreeNode in layerTree.Nodes) { - TreeNode tempNode = layerTree.Nodes[i]; - for (int j = 0; j < tempNode.Nodes.Count; j++) + if (layerTreeNode.Tag == null && layerTreeNode.Nodes.Count > 0) { - TreeNode tempChildNode = tempNode.Nodes[j]; - if (tempChildNode.Tag.ToString().Split('|').Length > 1) // Config配置文件配置的图层 + foreach (TreeNode node in layerTreeNode.Nodes) { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode; - } + GSOLayer gsoLayer = node.Tag as GSOLayer; + if (gsoLayer != null && gsoLayer.IsDestLayerFeatureAdd()) return node; + } - else //临时添加的本地图层 - { - for (int m = 0; m < tempChildNode.Nodes.Count; m++) - { - TreeNode tempChildNode1 = tempChildNode.Nodes[m]; - if (tempChildNode1.Tag.ToString().Split('|').Length > 1) - { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode1.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode1.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode1; - } - } - else - { - for (int n = 0; n < tempChildNode1.Nodes.Count; n++) - { - TreeNode tempChildNode2 = tempChildNode1.Nodes[n]; - if (tempChildNode2.Tag.ToString().Split('|').Length <= 1) continue; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode2.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode2.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode2; - } - } - } - } - } + } + else + { + GSOLayer gsoLayer = layerTreeNode.Tag as GSOLayer; + if (gsoLayer != null && gsoLayer.IsDestLayerFeatureAdd()) return layerTreeNode; } } return null; @@ -3221,6 +3036,7 @@ } } } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 目标图层 菜单 /// @@ -3228,14 +3044,15 @@ /// private void FeatureAddLayerMenuItem_Click(object sender, EventArgs e) { - if (!FeatureAddLayerMenuItem.Checked) - { - TreeNode node = layerNodeContexMenu.Tag as TreeNode; - FeatureAddLayerMenuItem.Checked = true; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); - globeControl1.Globe.DestLayerFeatureAdd = layer; - } + if (FeatureAddLayerMenuItem.Checked) return; + TreeNode node = layerNodeContexMenu.Tag as TreeNode; + FeatureAddLayerMenuItem.Checked = true; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; + globeControl1.Globe.DestLayerFeatureAdd = layer; } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 可选择 菜单 /// @@ -3244,11 +3061,13 @@ private void LayerSelectableMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - Int32 nIndex = node.Index; - GSOLayer layer = globeControl1.Globe.Layers[nIndex]; +// GSOLayer layer = globeControl1.Globe.Layers[nIndex]; + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; LayerSelectableMenuItem.Checked = !LayerSelectableMenuItem.Checked; - layer.Selectable = LayerSelectableMenuItem.Checked; + if (layer != null) layer.Selectable = LayerSelectableMenuItem.Checked; } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 可编辑 菜单 /// @@ -3257,23 +3076,27 @@ private void LayerEditableMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; LayerEditableMenuItem.Checked = !LayerEditableMenuItem.Checked; - layer.Editable = LayerEditableMenuItem.Checked; + if (layer != null) layer.Editable = LayerEditableMenuItem.Checked; } /// /// 图层目录树 右键菜单中的 保存 菜单 /// /// /// + //TODO LIST: wxl? Tag更正 private void SaveLayerMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - Int32 nIndex = node.Index; - string layerCaption = node.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); - layer.Dataset.Save(); +// string layerCaption = node.Tag.ToString().Split('|')[1]; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; + if (layer != null) layer.Dataset.Save(); } #region wxl feature的公共方法 @@ -3455,7 +3278,6 @@ return; GSOFeatureLayer flayer = layer as GSOFeatureLayer; - GSOFeatureDataset fdataset = flayer.Dataset as GSOFeatureDataset; GSOFeatures feats = flayer.GetAllFeatures(); for (int i = 0; i < feats.Length; i++) { @@ -3480,7 +3302,6 @@ return; GSOFeatureLayer flayer = layer as GSOFeatureLayer; - GSOFeatureDataset fdataset = flayer.Dataset as GSOFeatureDataset; GSOFeatures feats = flayer.GetAllFeatures(); for (int i = 0; i < feats.Length; i++) { @@ -5508,7 +5329,6 @@ private void addNodeToLayerManagerNode(GSOLayer layer) { if (layer == null) return; - GSODataset dataset = layer.Dataset; CheckDatasetGeoReference(layer.Dataset, ""); TreeNode node = new TreeNode(); @@ -5527,43 +5347,24 @@ /// /// /// - public int getLabelName(GSOLayer layer) - { - int nid = -1; - if (layer.GetAllFeatures().Length > 0) - { - string id = layer.GetAllFeatures()[layer.GetAllFeatures().Length - 1].Name; +// public int getLabelName(GSOLayer layer) +// { +// int nid = -1; +// if (layer.GetAllFeatures().Length > 0) +// { +// string id = layer.GetAllFeatures()[layer.GetAllFeatures().Length - 1].Name; +// +// int.TryParse(id, out nid); +// } +// else +// { +// nid = 0; +// } +// return nid; +// } - int.TryParse(id, out nid); - } - else - { - nid = 0; - } - return nid; - } /// - /// 判断选中的对象是否为管线 - /// - /// 被选中管线 - /// 返回一根线 - private GSOFeature IsPipeLineOfSelectedObj() - { - GSOFeature resFeature = null; - if (globeControl1.Globe.SelObjectCount < 1) return null; - GSOLayer resLayer = null; - globeControl1.Globe.GetSelectObject(0, out resFeature, out resLayer); - if (resFeature == null) return null; - - GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; - if (line1 == null) return null; - GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; - if (pipeStyle1 == null) return null; - - return resFeature; - } - /// /// 图层节点树中 节点 右键单击事件处理 /// /// @@ -5615,13 +5416,15 @@ { TreeNode node = contextMenuStrip2.Tag as TreeNode; TreeNode parentNode = node.Parent; - Int32 nIndex = node.Index; if (parentNode.Text == "标注管理" || parentNode.Text == "传感器管理") { RefreshTreeNodeLayerFeatureList(node); } } + + #region wxl? VisitFeature3Ds的作用,重构后,是否对其有影响 + /// /// 给指定的图层节点添加代表feature对象的子节点 /// @@ -5636,6 +5439,9 @@ VisitFeature3Ds(layer.GetAllFeatures(), layerTreeNode); } } + + #endregion + /// /// 标注管理、传感器管理 图层目录树的右键菜单中的 移除所有 菜单 /// @@ -5660,53 +5466,11 @@ { if (e.Action != TreeViewAction.Unknown) { - CheckTreeNode(e.Node, e.Node.Checked); + //wxl优化标注管理树形结构 + TreeUtils.TreeNodeCheckedChange(globeControl1,e.Node); } } - /// - /// 改变指定节点对应的复选框的选中状态 - /// - /// - /// - private void CheckTreeNode(TreeNode node, Boolean bChecked) - { - CheckChildTreeNode(node, bChecked); - globeControl1.Globe.Refresh(); - } - /// - /// 改变指定节点的子节点对应的复选框的选中状态 - /// - /// - /// - private void CheckChildTreeNode(TreeNode node, Boolean bChecked) - { - if (node == null) - return; - if (node.Tag != null) - { - if (node.Tag.GetType() == typeof(GSOFeatureFolder) || node.Tag.GetType() == typeof(GSOFeature)) - ((GSOFeature)node.Tag).SetVisibleDirectly(bChecked); - else - { - GSOLayer curLayer = node.Tag as GSOLayer; - GSOTerrain curTerrain = node.Tag as GSOTerrain; - if (curLayer != null) - { - curLayer.Visible = bChecked; - } - else if (curTerrain != null) - { - curTerrain.Visible = bChecked; - } - } - } - // 递归处理子节点 - for (int i = 0; i < node.Nodes.Count; i++) - { - node.Nodes[i].Checked = bChecked; - CheckChildTreeNode(node.Nodes[i], bChecked); - } - } + /// /// 标注管理、传感器管理 目录树中的feature节点的右键菜单中的 删除 菜单 /// @@ -5984,7 +5748,7 @@ frmModify = new FrmMnModify(globeControl1, shlayername, shresultLists); - if (boolfrmModify != false) return; + if (boolfrmModify) return; frmModify.Owner = this; frmModify.Location = new Point(Width - frmModify.Width - 10, Height - frmModify.Height - 50); frmModify.Show(); @@ -6261,16 +6025,15 @@ globeControl1.Globe.ClearMeasure(); layerTemp.RemoveAllFeature(); - layerTemp2.RemoveAllFeature(); buttonItemLS5.Checked = false; dataGridViewX1.DataSource = null; panelOfTable.Visible = false; globeControl1.Globe.MemoryLayer.RemoveAllFeature(); + globeControl2.Globe.MemoryLayer.RemoveAllFeature(); globeControl1.Globe.ClearAnalysis(); - // 清除净距分析结果 buttonX2_Click(null, null); buttonX8_Click(null, null); @@ -6527,8 +6290,8 @@ GSOFeatures selectFeatures = new GSOFeatures(); for (int i = 0; i < globeControl1.Globe.SelObjectCount; i++) { - GSOFeature feature = null; - GSOLayer layer = null; + GSOFeature feature; + GSOLayer layer; globeControl1.Globe.GetSelectObject(i, out feature, out layer); if (feature != null && feature.Geometry != null && feature.Geometry.Type == EnumGeometryType.GeoPolyline3D) { @@ -6536,11 +6299,9 @@ } } List feats = SectionAnalysisTool.ZDMAnalysis(selectFeatures); - if (feats != null && feats.Count >= 1) - { - FrmProfileAnalysis frm = new FrmProfileAnalysis(globeControl1, feats); - frm.Show(this); - } + if (feats == null || feats.Count < 1) return; + FrmProfileAnalysis frm = new FrmProfileAnalysis(globeControl1, feats); + frm.Show(this); } /// /// 道路断面分析 @@ -7057,14 +6818,14 @@ /// private void buttonItemSZ1_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7075,17 +6836,17 @@ /// /// 管径标注 /// - GSOFeature radiusMarkerFeature; +// GSOFeature radiusMarkerFeature; private void buttonItemBZ2_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine==null||selLine[0].Count <= 1)//wxl增加为空判断,下面方法同理 + if (selLine == null || selLine[0].Count <= 1) //wxl增加为空判断,下面方法同理 { return; } @@ -7100,14 +6861,14 @@ /// private void buttonItemBZ3_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null||selLine[0].Count <= 1) { return; } @@ -7123,14 +6884,14 @@ /// private void buttonItemBZ4_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7140,7 +6901,7 @@ /// /// 距离标注 /// - bool distanceMarker; +// bool distanceMarker; private void buttonItemBZ5_Click(object sender, EventArgs e) { //日志记录 @@ -7148,7 +6909,7 @@ globeControl1.Globe.Action = EnumAction3D.TrackPolyline; //globeControl1.Globe.DistanceRuler.MeasureMode = EnumDistanceMeasureMode.HVSLineMeasure; - distanceMarker = true; +// distanceMarker = true; } /// /// 自定义标注 @@ -7187,14 +6948,14 @@ /// private void buttonItemBZ8_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7775,11 +7536,9 @@ if (frm.ShowDialog() == DialogResult.OK) { GSOLayer featureAddLayer = TreeNodeFeatureLayer(); - if (featureAddLayer != null) - { - FrmAddInstrument dlg = new FrmAddInstrument(globeControl1, featureAddLayer); - dlg.Show(this); - } + if (featureAddLayer == null) return; + FrmAddInstrument dlg = new FrmAddInstrument(globeControl1, featureAddLayer); + dlg.Show(this); } } /// @@ -7822,11 +7581,9 @@ frm.citySevenLineType); globeControl1.Tag = citySevenLine; GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(frm.citySevenLineType); - if (layer != null) - { - globeControl1.Globe.DestLayerFeatureAdd = layer; - layer.Editable = true; - } + if (layer == null) return; + globeControl1.Globe.DestLayerFeatureAdd = layer; + layer.Editable = true; } } #endregion @@ -7986,44 +7743,45 @@ LogManager.saveLog(Utility.userName, buttonItemBJ10_2.Text); List listVectorNames = new List(); - for (int i = 0; i < Utility.m_PipelineLayerNames.Count; i++) + foreach (string pipeline in Utility.m_PipelineLayerNames) { - if (!listVectorNames.Contains(Utility.m_PipelineLayerNames[i])) + if (!listVectorNames.Contains(pipeline)) { - listVectorNames.Add(Utility.m_PipelineLayerNames[i]); + listVectorNames.Add(pipeline); } } - for (int i = 0; i < Utility.valueLayerNames.Count; i++) + foreach (string valve in Utility.valueLayerNames) { - if (!listVectorNames.Contains(Utility.valueLayerNames[i])) + if (!listVectorNames.Contains(valve)) { - listVectorNames.Add(Utility.valueLayerNames[i]); + listVectorNames.Add(valve); } } - for (int i = 0; i < Utility.workwellLayerNames.Count; i++) + foreach (string workwell in Utility.workwellLayerNames) { - if (!listVectorNames.Contains(Utility.workwellLayerNames[i])) + if (!listVectorNames.Contains(workwell)) { - listVectorNames.Add(Utility.workwellLayerNames[i]); + listVectorNames.Add(workwell); } } - for (int i = 0; i < Utility.instrumenLayerNames.Count; i++) + foreach (string instrument in Utility.instrumenLayerNames) { - if (!listVectorNames.Contains(Utility.instrumenLayerNames[i])) + if (!listVectorNames.Contains(instrument)) { - listVectorNames.Add(Utility.instrumenLayerNames[i]); + listVectorNames.Add(instrument); } } - for (int i = 0; i < Utility.pipefittingLayerNames.Count; i++) + foreach (string pipefitting in Utility.pipefittingLayerNames) { - if (!listVectorNames.Contains(Utility.pipefittingLayerNames[i])) + if (!listVectorNames.Contains(pipefitting)) { - listVectorNames.Add(Utility.pipefittingLayerNames[i]); + listVectorNames.Add(pipefitting); } } FrmExportVector frm = new FrmExportVector(globeControl1, listVectorNames); frm.ShowDialog(); } + /// /// 删除模型 /// @@ -8032,27 +7790,25 @@ private void buttonItemBJ13_Click(object sender, EventArgs e) { LogManager.saveLog(Utility.userName, buttonItemBJ13.Text); - if (globeControl1.Globe.SelObjectCount > 0) - { - for (int i = 0; i < globeControl1.Globe.SelObjectCount; i++) - { - GSOFeature f = null; - GSOLayer layer = null; - globeControl1.Globe.GetSelectObject(i, out f, out layer); - if (f == null) continue; - f.Delete(); - if (layer != null) - globeControl1.Globe.AddToEditHistroy(layer, f, EnumEditType.Delete); - globeControl1.Refresh(); - - } - MessageBox.Show("删除成功!", "提示"); - } - else + var selObjCount = globeControl1.Globe.SelObjectCount; + if (selObjCount == 0) { MessageBox.Show("请选中要删除的模型!", "提示"); + return; } + for (int i = 0; i < selObjCount; i++) + { + GSOFeature f; + GSOLayer layer; + globeControl1.Globe.GetSelectObject(i, out f, out layer); + if (f == null) continue; + f.Delete(); + if (layer != null) + globeControl1.Globe.AddToEditHistroy(layer, f, EnumEditType.Delete); + globeControl1.Refresh(); + } + MessageBox.Show("删除成功!", "提示"); globeControl1.Globe.Action = EnumAction3D.ActionNull; } @@ -8118,6 +7874,7 @@ toolStripNumbers.Text = "红线审核 |共有:" + table.Rows.Count + "条"; toolStripDropDownButton3.Visible = true; } + /// /// 主窗体 下方的工具条中的 导出.xls文件 按钮事件处理 /// @@ -8127,24 +7884,28 @@ { if (dataGridViewX1.Rows.Count != 0) { - string strSaveFile = string.Empty; - SaveFileDialog savefiledialog = new SaveFileDialog(); - savefiledialog.Filter = "Excel文件|*.xls,*.xlsx"; - savefiledialog.AddExtension = true; - savefiledialog.FileName = "红线审核"; - if (savefiledialog.ShowDialog() == DialogResult.OK) - strSaveFile = savefiledialog.FileName; - else return; - - ExpEXCEL.ExpToExcel(dataGridViewX1, strSaveFile, "红线审核", lineStruct, featsList); - MessageBox.Show("导出成功!"); - } - else - { MessageBox.Show("表格内容为空!", "提示"); + return; } + string strSaveFile; + SaveFileDialog savefiledialog = new SaveFileDialog(); + savefiledialog.Filter = "Excel文件|*.xls,*.xlsx"; + savefiledialog.AddExtension = true; + savefiledialog.FileName = "红线审核"; + if (savefiledialog.ShowDialog() == DialogResult.OK) + strSaveFile = savefiledialog.FileName; + else return; + + ExpEXCEL.ExpToExcel(dataGridViewX1, strSaveFile, "红线审核", lineStruct, featsList); + MessageBox.Show("导出成功!"); + } + /// + /// 双屏对比的地面透明度设置 + /// + /// + /// private void sliderItem2_ValueChanged(object sender, EventArgs e) { LogManager.saveLog(Utility.userName, sliderItem2.Text); @@ -8155,7 +7916,7 @@ { layer.Opaque = 100 - sliderItem2.Value; } - layer = globeControl2.Globe.Layers.GetLayerByCaption("180fd");//("180fd"); + layer = globeControl2.Globe.Layers.GetLayerByCaption(Utility.roadLayerName);//("180fd"); if (layer != null) { layer.Opaque = 100 - sliderItem2.Value; @@ -8554,7 +8315,7 @@ LogManager.saveLog(Utility.userName, buttonItem8.Text); int width = Width; - FrmCompareFeature.ShowForm(globeControl1, globeControl2, layerTemp, layerTemp2, width); + FrmCompareFeature.ShowForm(globeControl1, globeControl2, width); } /// /// 红线审核导出图片 @@ -8690,7 +8451,6 @@ private void btn_role_resc_Click(object sender, EventArgs e) { - LogManager.saveLog(Utility.userName, btn_role_resc.Text); if (FrmRoleRescManager.IS_OPEN) return; @@ -8708,7 +8468,8 @@ frm.ShowDialog(); } } -//文档管理 操作 + + //文档管理 操作 private void btn_document_info_Click(object sender, EventArgs e) { @@ -8919,11 +8680,9 @@ } private void pictureBox1_Paint(object sender, PaintEventArgs e) - { - int Width = this.Width; + { string welcomeUser = "欢迎您:" + Utility.userName; - Graphics g = e.Graphics; - g.DrawString(welcomeUser, new Font("宋体", 12), new SolidBrush(Color.Black), Width - 180, 50); + e.Graphics.DrawString(welcomeUser, new Font("宋体", 12), new SolidBrush(Color.Black), Width - 180, 50); } } diff --git a/MainFrm.designer.cs b/MainFrm.designer.cs index a9b8c6f..5d74670 100644 --- a/MainFrm.designer.cs +++ b/MainFrm.designer.cs @@ -244,42 +244,6 @@ this.保存ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.定位ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.ribbonControl1 = new DevComponents.DotNetBar.RibbonControl(); - this.ribbonPanel6 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar6 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItemSPSZ = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem8 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemLocation = new DevComponents.DotNetBar.ButtonItem(); - this.sliderItem2 = new DevComponents.DotNetBar.SliderItem(); - this.buttonItemGBJC = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonPanel4 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar1 = new DevComponents.DotNetBar.RibbonBar(); - this.btn_document_info = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonPanel12 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar18 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItem133 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem132 = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonBar13 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItem127 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem128 = new DevComponents.DotNetBar.ButtonItem(); - this.sliderItem1 = new DevComponents.DotNetBar.SliderItem(); - this.buttonItem134 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem130 = new DevComponents.DotNetBar.ButtonItem(); - this.btn_check_history = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonPanel5 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar2 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItemHX1 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemHX2 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemDCTP = new DevComponents.DotNetBar.ButtonItem(); - this.sliderItem3 = new DevComponents.DotNetBar.SliderItem(); - this.ribbonPanel2 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar3 = new DevComponents.DotNetBar.RibbonBar(); - this.btn_user_info = new DevComponents.DotNetBar.ButtonItem(); - this.btn_role_info = new DevComponents.DotNetBar.ButtonItem(); - this.btn_resc_info = new DevComponents.DotNetBar.ButtonItem(); - this.btn_role_resc = new DevComponents.DotNetBar.ButtonItem(); - this.btn_user_role = new DevComponents.DotNetBar.ButtonItem(); - this.btn_password_edit = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemPasswordReset = new DevComponents.DotNetBar.ButtonItem(); this.ribbonPanel15 = new DevComponents.DotNetBar.RibbonPanel(); this.ribbonBar20 = new DevComponents.DotNetBar.RibbonBar(); this.buttonItemSH = new DevComponents.DotNetBar.ButtonItem(); @@ -448,6 +412,42 @@ this.buttonItemBZ9 = new DevComponents.DotNetBar.ButtonItem(); this.buttonItemBZ10 = new DevComponents.DotNetBar.ButtonItem(); this.buttonItemBZ11 = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel6 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar6 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItemSPSZ = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem8 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemLocation = new DevComponents.DotNetBar.ButtonItem(); + this.sliderItem2 = new DevComponents.DotNetBar.SliderItem(); + this.buttonItemGBJC = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel4 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar1 = new DevComponents.DotNetBar.RibbonBar(); + this.btn_document_info = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel12 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar18 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItem133 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem132 = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonBar13 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItem127 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem128 = new DevComponents.DotNetBar.ButtonItem(); + this.sliderItem1 = new DevComponents.DotNetBar.SliderItem(); + this.buttonItem134 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem130 = new DevComponents.DotNetBar.ButtonItem(); + this.btn_check_history = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel5 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar2 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItemHX1 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemHX2 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemDCTP = new DevComponents.DotNetBar.ButtonItem(); + this.sliderItem3 = new DevComponents.DotNetBar.SliderItem(); + this.ribbonPanel2 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar3 = new DevComponents.DotNetBar.RibbonBar(); + this.btn_user_info = new DevComponents.DotNetBar.ButtonItem(); + this.btn_role_info = new DevComponents.DotNetBar.ButtonItem(); + this.btn_resc_info = new DevComponents.DotNetBar.ButtonItem(); + this.btn_role_resc = new DevComponents.DotNetBar.ButtonItem(); + this.btn_user_role = new DevComponents.DotNetBar.ButtonItem(); + this.btn_password_edit = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemPasswordReset = new DevComponents.DotNetBar.ButtonItem(); this.ribbonPanel1 = new DevComponents.DotNetBar.RibbonPanel(); this.ribbonBar21 = new DevComponents.DotNetBar.RibbonBar(); this.buttonItem87 = new DevComponents.DotNetBar.ButtonItem(); @@ -652,12 +652,12 @@ this.contextMenuStrip3.SuspendLayout(); this.contextMenuStripDeleteLayerNode.SuspendLayout(); this.ribbonControl1.SuspendLayout(); + this.ribbonPanel15.SuspendLayout(); this.ribbonPanel6.SuspendLayout(); this.ribbonPanel4.SuspendLayout(); this.ribbonPanel12.SuspendLayout(); this.ribbonPanel5.SuspendLayout(); this.ribbonPanel2.SuspendLayout(); - this.ribbonPanel15.SuspendLayout(); this.ribbonPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); this.panelOfTable.SuspendLayout(); @@ -2283,12 +2283,12 @@ // this.ribbonControl1.BackgroundStyle.Class = ""; this.ribbonControl1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonControl1.Controls.Add(this.ribbonPanel15); + this.ribbonControl1.Controls.Add(this.ribbonPanel2); this.ribbonControl1.Controls.Add(this.ribbonPanel6); this.ribbonControl1.Controls.Add(this.ribbonPanel4); this.ribbonControl1.Controls.Add(this.ribbonPanel12); this.ribbonControl1.Controls.Add(this.ribbonPanel5); - this.ribbonControl1.Controls.Add(this.ribbonPanel2); - this.ribbonControl1.Controls.Add(this.ribbonPanel15); this.ribbonControl1.Controls.Add(this.ribbonPanel1); this.ribbonControl1.Dock = System.Windows.Forms.DockStyle.Top; this.ribbonControl1.ImeMode = System.Windows.Forms.ImeMode.NoControl; @@ -2331,595 +2331,6 @@ this.ribbonControl1.Text = "ribbonControl1"; this.ribbonControl1.UseCustomizeDialog = false; // - // ribbonPanel6 - // - this.ribbonPanel6.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel6.Controls.Add(this.ribbonBar6); - this.ribbonPanel6.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel6.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel6.Name = "ribbonPanel6"; - this.ribbonPanel6.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel6.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel6.Style.Class = ""; - this.ribbonPanel6.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel6.StyleMouseDown.Class = ""; - this.ribbonPanel6.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel6.StyleMouseOver.Class = ""; - this.ribbonPanel6.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel6.TabIndex = 38; - // - // ribbonBar6 - // - this.ribbonBar6.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar6.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar6.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar6.BackgroundStyle.Class = ""; - this.ribbonBar6.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar6.ContainerControlProcessDialogKey = true; - this.ribbonBar6.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar6.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItemSPSZ, - this.buttonItem8, - this.buttonItemLocation, - this.sliderItem2, - this.buttonItemGBJC}); - this.ribbonBar6.Location = new System.Drawing.Point(3, 0); - this.ribbonBar6.Name = "ribbonBar6"; - this.ribbonBar6.Size = new System.Drawing.Size(427, 59); - this.ribbonBar6.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar6.TabIndex = 0; - // - // - // - this.ribbonBar6.TitleStyle.Class = ""; - this.ribbonBar6.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar6.TitleStyleMouseOver.Class = ""; - this.ribbonBar6.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar6.TitleVisible = false; - // - // buttonItemSPSZ - // - this.buttonItemSPSZ.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemSPSZ.Image"))); - this.buttonItemSPSZ.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemSPSZ.Name = "buttonItemSPSZ"; - this.buttonItemSPSZ.SubItemsExpandWidth = 14; - this.buttonItemSPSZ.Text = "双屏设置"; - this.buttonItemSPSZ.Click += new System.EventHandler(this.buttonItemSPSZ_Click); - // - // buttonItem8 - // - this.buttonItem8.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem8.Image"))); - this.buttonItem8.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem8.Name = "buttonItem8"; - this.buttonItem8.SubItemsExpandWidth = 14; - this.buttonItem8.Text = "双屏分析"; - this.buttonItem8.Click += new System.EventHandler(this.buttonItem8_Click); - // - // buttonItemLocation - // - this.buttonItemLocation.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemLocation.Image"))); - this.buttonItemLocation.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemLocation.Name = "buttonItemLocation"; - this.buttonItemLocation.SubItemsExpandWidth = 14; - this.buttonItemLocation.Text = "快速定位"; - this.buttonItemLocation.Click += new System.EventHandler(this.buttonItemLocation_Click); - // - // sliderItem2 - // - this.sliderItem2.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; - this.sliderItem2.LabelWidth = 50; - this.sliderItem2.Name = "sliderItem2"; - this.sliderItem2.Text = "地面透明度"; - this.sliderItem2.TextColor = System.Drawing.Color.Black; - this.sliderItem2.Value = 0; - this.sliderItem2.ValueChanged += new System.EventHandler(this.sliderItem2_ValueChanged); - // - // buttonItemGBJC - // - this.buttonItemGBJC.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemGBJC.Image"))); - this.buttonItemGBJC.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemGBJC.Name = "buttonItemGBJC"; - this.buttonItemGBJC.SubItemsExpandWidth = 14; - this.buttonItemGBJC.Text = "国标检测"; - this.buttonItemGBJC.Click += new System.EventHandler(this.buttonItemGBJC_Click); - // - // ribbonPanel4 - // - this.ribbonPanel4.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel4.Controls.Add(this.ribbonBar1); - this.ribbonPanel4.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel4.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel4.Name = "ribbonPanel4"; - this.ribbonPanel4.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel4.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel4.Style.Class = ""; - this.ribbonPanel4.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel4.StyleMouseDown.Class = ""; - this.ribbonPanel4.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel4.StyleMouseOver.Class = ""; - this.ribbonPanel4.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel4.TabIndex = 36; - this.ribbonPanel4.Visible = false; - // - // ribbonBar1 - // - this.ribbonBar1.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar1.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar1.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar1.BackgroundStyle.Class = ""; - this.ribbonBar1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar1.ContainerControlProcessDialogKey = true; - this.ribbonBar1.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar1.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.btn_document_info}); - this.ribbonBar1.Location = new System.Drawing.Point(3, 0); - this.ribbonBar1.Name = "ribbonBar1"; - this.ribbonBar1.Size = new System.Drawing.Size(88, 59); - this.ribbonBar1.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar1.TabIndex = 0; - // - // - // - this.ribbonBar1.TitleStyle.Class = ""; - this.ribbonBar1.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar1.TitleStyleMouseOver.Class = ""; - this.ribbonBar1.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar1.TitleVisible = false; - // - // btn_document_info - // - this.btn_document_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_document_info.Image"))); - this.btn_document_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_document_info.Name = "btn_document_info"; - this.btn_document_info.SubItemsExpandWidth = 14; - this.btn_document_info.Text = "文档管理"; - this.btn_document_info.Click += new System.EventHandler(this.btn_document_info_Click); - // - // ribbonPanel12 - // - this.ribbonPanel12.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel12.Controls.Add(this.ribbonBar18); - this.ribbonPanel12.Controls.Add(this.ribbonBar13); - this.ribbonPanel12.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel12.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel12.Name = "ribbonPanel12"; - this.ribbonPanel12.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel12.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel12.Style.Class = ""; - this.ribbonPanel12.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel12.StyleMouseDown.Class = ""; - this.ribbonPanel12.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel12.StyleMouseOver.Class = ""; - this.ribbonPanel12.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel12.TabIndex = 34; - this.ribbonPanel12.Visible = false; - // - // ribbonBar18 - // - this.ribbonBar18.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar18.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar18.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar18.BackgroundStyle.Class = ""; - this.ribbonBar18.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar18.ContainerControlProcessDialogKey = true; - this.ribbonBar18.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar18.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItem133, - this.buttonItem132}); - this.ribbonBar18.Location = new System.Drawing.Point(508, 0); - this.ribbonBar18.Name = "ribbonBar18"; - this.ribbonBar18.Size = new System.Drawing.Size(171, 59); - this.ribbonBar18.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar18.TabIndex = 1; - // - // - // - this.ribbonBar18.TitleStyle.Class = ""; - this.ribbonBar18.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar18.TitleStyleMouseOver.Class = ""; - this.ribbonBar18.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar18.TitleVisible = false; - // - // buttonItem133 - // - this.buttonItem133.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem133.Image"))); - this.buttonItem133.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem133.Name = "buttonItem133"; - this.buttonItem133.SubItemsExpandWidth = 14; - this.buttonItem133.Text = "审核入库"; - this.buttonItem133.Click += new System.EventHandler(this.buttonItem133_Click_1); - // - // buttonItem132 - // - this.buttonItem132.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem132.Image"))); - this.buttonItem132.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem132.Name = "buttonItem132"; - this.buttonItem132.SubItemsExpandWidth = 14; - this.buttonItem132.Text = "已审核的图层"; - this.buttonItem132.Visible = false; - this.buttonItem132.Click += new System.EventHandler(this.buttonItem132_Click_1); - // - // ribbonBar13 - // - this.ribbonBar13.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar13.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar13.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar13.BackgroundStyle.Class = ""; - this.ribbonBar13.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar13.ContainerControlProcessDialogKey = true; - this.ribbonBar13.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar13.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItem127, - this.buttonItem128, - this.sliderItem1, - this.buttonItem134, - this.buttonItem130, - this.btn_check_history}); - this.ribbonBar13.Location = new System.Drawing.Point(3, 0); - this.ribbonBar13.Name = "ribbonBar13"; - this.ribbonBar13.Size = new System.Drawing.Size(505, 59); - this.ribbonBar13.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar13.TabIndex = 0; - // - // - // - this.ribbonBar13.TitleStyle.Class = ""; - this.ribbonBar13.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar13.TitleStyleMouseOver.Class = ""; - this.ribbonBar13.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar13.TitleVisible = false; - // - // buttonItem127 - // - this.buttonItem127.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem127.Image"))); - this.buttonItem127.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem127.Name = "buttonItem127"; - this.buttonItem127.SubItemsExpandWidth = 14; - this.buttonItem127.Text = "打开数据"; - this.buttonItem127.Click += new System.EventHandler(this.buttonItem127_Click_2); - // - // buttonItem128 - // - this.buttonItem128.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem128.Image"))); - this.buttonItem128.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem128.Name = "buttonItem128"; - this.buttonItem128.SubItemsExpandWidth = 14; - this.buttonItem128.Text = "一键审核"; - this.buttonItem128.Click += new System.EventHandler(this.buttonItem128_Click); - // - // sliderItem1 - // - this.sliderItem1.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; - this.sliderItem1.LabelWidth = 50; - this.sliderItem1.Name = "sliderItem1"; - this.sliderItem1.Text = "地面透明度"; - this.sliderItem1.TextColor = System.Drawing.Color.Black; - this.sliderItem1.Value = 0; - this.sliderItem1.ValueChanged += new System.EventHandler(this.sliderItem1_ValueChanged); - // - // buttonItem134 - // - this.buttonItem134.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem134.Image"))); - this.buttonItem134.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem134.Name = "buttonItem134"; - this.buttonItem134.SubItemsExpandWidth = 14; - this.buttonItem134.Text = "模拟设计修改"; - this.buttonItem134.Click += new System.EventHandler(this.buttonItem134_Click_1); - // - // buttonItem130 - // - this.buttonItem130.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem130.Image"))); - this.buttonItem130.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem130.Name = "buttonItem130"; - this.buttonItem130.SubItemsExpandWidth = 14; - this.buttonItem130.Text = "导出审核图"; - this.buttonItem130.Click += new System.EventHandler(this.buttonItem130_Click_1); - // - // btn_check_history - // - this.btn_check_history.Image = ((System.Drawing.Image)(resources.GetObject("btn_check_history.Image"))); - this.btn_check_history.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_check_history.Name = "btn_check_history"; - this.btn_check_history.SubItemsExpandWidth = 14; - this.btn_check_history.Text = "审核历史"; - this.btn_check_history.Click += new System.EventHandler(this.btn_check_history_Click); - // - // ribbonPanel5 - // - this.ribbonPanel5.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel5.Controls.Add(this.ribbonBar2); - this.ribbonPanel5.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel5.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel5.Name = "ribbonPanel5"; - this.ribbonPanel5.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel5.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel5.Style.Class = ""; - this.ribbonPanel5.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel5.StyleMouseDown.Class = ""; - this.ribbonPanel5.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel5.StyleMouseOver.Class = ""; - this.ribbonPanel5.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel5.TabIndex = 37; - this.ribbonPanel5.Visible = false; - // - // ribbonBar2 - // - this.ribbonBar2.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar2.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar2.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar2.BackgroundStyle.Class = ""; - this.ribbonBar2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar2.ContainerControlProcessDialogKey = true; - this.ribbonBar2.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar2.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItemHX1, - this.buttonItemHX2, - this.buttonItemDCTP, - this.sliderItem3}); - this.ribbonBar2.Location = new System.Drawing.Point(3, 0); - this.ribbonBar2.Name = "ribbonBar2"; - this.ribbonBar2.Size = new System.Drawing.Size(350, 59); - this.ribbonBar2.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar2.TabIndex = 0; - // - // - // - this.ribbonBar2.TitleStyle.Class = ""; - this.ribbonBar2.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar2.TitleStyleMouseOver.Class = ""; - this.ribbonBar2.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar2.TitleVisible = false; - // - // buttonItemHX1 - // - this.buttonItemHX1.AutoExpandOnClick = true; - this.buttonItemHX1.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX1.Image"))); - this.buttonItemHX1.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemHX1.Name = "buttonItemHX1"; - this.buttonItemHX1.SubItemsExpandWidth = 14; - this.buttonItemHX1.Text = "导入红线"; - this.buttonItemHX1.Click += new System.EventHandler(this.buttonItemHX1_Click); - // - // buttonItemHX2 - // - this.buttonItemHX2.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX2.Image"))); - this.buttonItemHX2.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemHX2.Name = "buttonItemHX2"; - this.buttonItemHX2.SubItemsExpandWidth = 14; - this.buttonItemHX2.Text = "红线审核"; - this.buttonItemHX2.Click += new System.EventHandler(this.buttonItemHX2_Click); - // - // buttonItemDCTP - // - this.buttonItemDCTP.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemDCTP.Image"))); - this.buttonItemDCTP.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemDCTP.Name = "buttonItemDCTP"; - this.buttonItemDCTP.SubItemsExpandWidth = 14; - this.buttonItemDCTP.Text = "导出图片"; - this.buttonItemDCTP.Click += new System.EventHandler(this.buttonItemDCTP_Click); - // - // sliderItem3 - // - this.sliderItem3.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; - this.sliderItem3.LabelWidth = 50; - this.sliderItem3.Name = "sliderItem3"; - this.sliderItem3.Text = "地面透明度"; - this.sliderItem3.TextColor = System.Drawing.Color.Black; - this.sliderItem3.Value = 0; - this.sliderItem3.ValueChanged += new System.EventHandler(this.sliderItem3_ValueChanged); - // - // ribbonPanel2 - // - this.ribbonPanel2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel2.Controls.Add(this.ribbonBar3); - this.ribbonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel2.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel2.Name = "ribbonPanel2"; - this.ribbonPanel2.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel2.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel2.Style.Class = ""; - this.ribbonPanel2.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel2.StyleMouseDown.Class = ""; - this.ribbonPanel2.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel2.StyleMouseOver.Class = ""; - this.ribbonPanel2.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel2.TabIndex = 39; - this.ribbonPanel2.Visible = false; - // - // ribbonBar3 - // - this.ribbonBar3.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar3.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar3.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar3.BackgroundStyle.Class = ""; - this.ribbonBar3.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar3.ContainerControlProcessDialogKey = true; - this.ribbonBar3.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar3.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.btn_user_info, - this.btn_role_info, - this.btn_resc_info, - this.btn_role_resc, - this.btn_user_role, - this.btn_password_edit, - this.buttonItemPasswordReset}); - this.ribbonBar3.Location = new System.Drawing.Point(3, 0); - this.ribbonBar3.Name = "ribbonBar3"; - this.ribbonBar3.Size = new System.Drawing.Size(551, 59); - this.ribbonBar3.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar3.TabIndex = 1; - // - // - // - this.ribbonBar3.TitleStyle.Class = ""; - this.ribbonBar3.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar3.TitleStyleMouseOver.Class = ""; - this.ribbonBar3.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar3.TitleVisible = false; - // - // btn_user_info - // - this.btn_user_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_info.Image"))); - this.btn_user_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_user_info.Name = "btn_user_info"; - this.btn_user_info.SubItemsExpandWidth = 14; - this.btn_user_info.Text = "用户管理"; - this.btn_user_info.Click += new System.EventHandler(this.btn_user_info_Click); - // - // btn_role_info - // - this.btn_role_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_info.Image"))); - this.btn_role_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_role_info.Name = "btn_role_info"; - this.btn_role_info.SubItemsExpandWidth = 14; - this.btn_role_info.Text = "角色管理"; - this.btn_role_info.Click += new System.EventHandler(this.btn_role_info_Click); - // - // btn_resc_info - // - this.btn_resc_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_resc_info.Image"))); - this.btn_resc_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_resc_info.Name = "btn_resc_info"; - this.btn_resc_info.SubItemsExpandWidth = 14; - this.btn_resc_info.Text = "资源管理"; - this.btn_resc_info.Visible = false; - this.btn_resc_info.Click += new System.EventHandler(this.btn_resc_info_Click); - // - // btn_role_resc - // - this.btn_role_resc.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_resc.Image"))); - this.btn_role_resc.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_role_resc.Name = "btn_role_resc"; - this.btn_role_resc.SubItemsExpandWidth = 14; - this.btn_role_resc.Text = "角色授权"; - this.btn_role_resc.Click += new System.EventHandler(this.btn_role_resc_Click); - // - // btn_user_role - // - this.btn_user_role.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_role.Image"))); - this.btn_user_role.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_user_role.Name = "btn_user_role"; - this.btn_user_role.SubItemsExpandWidth = 14; - this.btn_user_role.Text = "用户授权"; - this.btn_user_role.Click += new System.EventHandler(this.btn_user_role_Click); - // - // btn_password_edit - // - this.btn_password_edit.Image = ((System.Drawing.Image)(resources.GetObject("btn_password_edit.Image"))); - this.btn_password_edit.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_password_edit.Name = "btn_password_edit"; - this.btn_password_edit.SubItemsExpandWidth = 14; - this.btn_password_edit.Text = "密码修改"; - this.btn_password_edit.Click += new System.EventHandler(this.btn_password_edit_Click); - // - // buttonItemPasswordReset - // - this.buttonItemPasswordReset.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemPasswordReset.Image"))); - this.buttonItemPasswordReset.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemPasswordReset.Name = "buttonItemPasswordReset"; - this.buttonItemPasswordReset.SubItemsExpandWidth = 14; - this.buttonItemPasswordReset.Text = "重置密码"; - this.buttonItemPasswordReset.Click += new System.EventHandler(this.buttonItemPasswordReset_Click); - // // ribbonPanel15 // this.ribbonPanel15.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; @@ -2945,7 +2356,6 @@ this.ribbonPanel15.StyleMouseOver.Class = ""; this.ribbonPanel15.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; this.ribbonPanel15.TabIndex = 35; - this.ribbonPanel15.Visible = false; // // ribbonBar20 // @@ -4286,6 +3696,596 @@ this.buttonItemBZ11.Text = "标注管理"; this.buttonItemBZ11.Click += new System.EventHandler(this.buttonItemBZ11_Click); // + // ribbonPanel6 + // + this.ribbonPanel6.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel6.Controls.Add(this.ribbonBar6); + this.ribbonPanel6.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel6.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel6.Name = "ribbonPanel6"; + this.ribbonPanel6.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel6.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel6.Style.Class = ""; + this.ribbonPanel6.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel6.StyleMouseDown.Class = ""; + this.ribbonPanel6.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel6.StyleMouseOver.Class = ""; + this.ribbonPanel6.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel6.TabIndex = 38; + this.ribbonPanel6.Visible = false; + // + // ribbonBar6 + // + this.ribbonBar6.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar6.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar6.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar6.BackgroundStyle.Class = ""; + this.ribbonBar6.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar6.ContainerControlProcessDialogKey = true; + this.ribbonBar6.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar6.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItemSPSZ, + this.buttonItem8, + this.buttonItemLocation, + this.sliderItem2, + this.buttonItemGBJC}); + this.ribbonBar6.Location = new System.Drawing.Point(3, 0); + this.ribbonBar6.Name = "ribbonBar6"; + this.ribbonBar6.Size = new System.Drawing.Size(427, 59); + this.ribbonBar6.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar6.TabIndex = 0; + // + // + // + this.ribbonBar6.TitleStyle.Class = ""; + this.ribbonBar6.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar6.TitleStyleMouseOver.Class = ""; + this.ribbonBar6.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar6.TitleVisible = false; + // + // buttonItemSPSZ + // + this.buttonItemSPSZ.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemSPSZ.Image"))); + this.buttonItemSPSZ.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemSPSZ.Name = "buttonItemSPSZ"; + this.buttonItemSPSZ.SubItemsExpandWidth = 14; + this.buttonItemSPSZ.Text = "双屏设置"; + this.buttonItemSPSZ.Click += new System.EventHandler(this.buttonItemSPSZ_Click); + // + // buttonItem8 + // + this.buttonItem8.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem8.Image"))); + this.buttonItem8.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem8.Name = "buttonItem8"; + this.buttonItem8.SubItemsExpandWidth = 14; + this.buttonItem8.Text = "双屏分析"; + this.buttonItem8.Click += new System.EventHandler(this.buttonItem8_Click); + // + // buttonItemLocation + // + this.buttonItemLocation.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemLocation.Image"))); + this.buttonItemLocation.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemLocation.Name = "buttonItemLocation"; + this.buttonItemLocation.SubItemsExpandWidth = 14; + this.buttonItemLocation.Text = "快速定位"; + this.buttonItemLocation.Click += new System.EventHandler(this.buttonItemLocation_Click); + // + // sliderItem2 + // + this.sliderItem2.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; + this.sliderItem2.LabelWidth = 50; + this.sliderItem2.Name = "sliderItem2"; + this.sliderItem2.Text = "地面透明度"; + this.sliderItem2.TextColor = System.Drawing.Color.Black; + this.sliderItem2.Value = 0; + this.sliderItem2.ValueChanged += new System.EventHandler(this.sliderItem2_ValueChanged); + // + // buttonItemGBJC + // + this.buttonItemGBJC.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemGBJC.Image"))); + this.buttonItemGBJC.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemGBJC.Name = "buttonItemGBJC"; + this.buttonItemGBJC.SubItemsExpandWidth = 14; + this.buttonItemGBJC.Text = "国标检测"; + this.buttonItemGBJC.Click += new System.EventHandler(this.buttonItemGBJC_Click); + // + // ribbonPanel4 + // + this.ribbonPanel4.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel4.Controls.Add(this.ribbonBar1); + this.ribbonPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel4.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel4.Name = "ribbonPanel4"; + this.ribbonPanel4.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel4.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel4.Style.Class = ""; + this.ribbonPanel4.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel4.StyleMouseDown.Class = ""; + this.ribbonPanel4.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel4.StyleMouseOver.Class = ""; + this.ribbonPanel4.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel4.TabIndex = 36; + this.ribbonPanel4.Visible = false; + // + // ribbonBar1 + // + this.ribbonBar1.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar1.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar1.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar1.BackgroundStyle.Class = ""; + this.ribbonBar1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar1.ContainerControlProcessDialogKey = true; + this.ribbonBar1.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar1.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.btn_document_info}); + this.ribbonBar1.Location = new System.Drawing.Point(3, 0); + this.ribbonBar1.Name = "ribbonBar1"; + this.ribbonBar1.Size = new System.Drawing.Size(88, 59); + this.ribbonBar1.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar1.TabIndex = 0; + // + // + // + this.ribbonBar1.TitleStyle.Class = ""; + this.ribbonBar1.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar1.TitleStyleMouseOver.Class = ""; + this.ribbonBar1.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar1.TitleVisible = false; + // + // btn_document_info + // + this.btn_document_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_document_info.Image"))); + this.btn_document_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_document_info.Name = "btn_document_info"; + this.btn_document_info.SubItemsExpandWidth = 14; + this.btn_document_info.Text = "文档管理"; + this.btn_document_info.Click += new System.EventHandler(this.btn_document_info_Click); + // + // ribbonPanel12 + // + this.ribbonPanel12.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel12.Controls.Add(this.ribbonBar18); + this.ribbonPanel12.Controls.Add(this.ribbonBar13); + this.ribbonPanel12.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel12.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel12.Name = "ribbonPanel12"; + this.ribbonPanel12.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel12.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel12.Style.Class = ""; + this.ribbonPanel12.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel12.StyleMouseDown.Class = ""; + this.ribbonPanel12.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel12.StyleMouseOver.Class = ""; + this.ribbonPanel12.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel12.TabIndex = 34; + this.ribbonPanel12.Visible = false; + // + // ribbonBar18 + // + this.ribbonBar18.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar18.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar18.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar18.BackgroundStyle.Class = ""; + this.ribbonBar18.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar18.ContainerControlProcessDialogKey = true; + this.ribbonBar18.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar18.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItem133, + this.buttonItem132}); + this.ribbonBar18.Location = new System.Drawing.Point(508, 0); + this.ribbonBar18.Name = "ribbonBar18"; + this.ribbonBar18.Size = new System.Drawing.Size(171, 59); + this.ribbonBar18.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar18.TabIndex = 1; + // + // + // + this.ribbonBar18.TitleStyle.Class = ""; + this.ribbonBar18.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar18.TitleStyleMouseOver.Class = ""; + this.ribbonBar18.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar18.TitleVisible = false; + // + // buttonItem133 + // + this.buttonItem133.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem133.Image"))); + this.buttonItem133.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem133.Name = "buttonItem133"; + this.buttonItem133.SubItemsExpandWidth = 14; + this.buttonItem133.Text = "审核入库"; + this.buttonItem133.Click += new System.EventHandler(this.buttonItem133_Click_1); + // + // buttonItem132 + // + this.buttonItem132.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem132.Image"))); + this.buttonItem132.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem132.Name = "buttonItem132"; + this.buttonItem132.SubItemsExpandWidth = 14; + this.buttonItem132.Text = "已审核的图层"; + this.buttonItem132.Visible = false; + this.buttonItem132.Click += new System.EventHandler(this.buttonItem132_Click_1); + // + // ribbonBar13 + // + this.ribbonBar13.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar13.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar13.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar13.BackgroundStyle.Class = ""; + this.ribbonBar13.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar13.ContainerControlProcessDialogKey = true; + this.ribbonBar13.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar13.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItem127, + this.buttonItem128, + this.sliderItem1, + this.buttonItem134, + this.buttonItem130, + this.btn_check_history}); + this.ribbonBar13.Location = new System.Drawing.Point(3, 0); + this.ribbonBar13.Name = "ribbonBar13"; + this.ribbonBar13.Size = new System.Drawing.Size(505, 59); + this.ribbonBar13.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar13.TabIndex = 0; + // + // + // + this.ribbonBar13.TitleStyle.Class = ""; + this.ribbonBar13.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar13.TitleStyleMouseOver.Class = ""; + this.ribbonBar13.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar13.TitleVisible = false; + // + // buttonItem127 + // + this.buttonItem127.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem127.Image"))); + this.buttonItem127.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem127.Name = "buttonItem127"; + this.buttonItem127.SubItemsExpandWidth = 14; + this.buttonItem127.Text = "打开数据"; + this.buttonItem127.Click += new System.EventHandler(this.buttonItem127_Click_2); + // + // buttonItem128 + // + this.buttonItem128.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem128.Image"))); + this.buttonItem128.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem128.Name = "buttonItem128"; + this.buttonItem128.SubItemsExpandWidth = 14; + this.buttonItem128.Text = "一键审核"; + this.buttonItem128.Click += new System.EventHandler(this.buttonItem128_Click); + // + // sliderItem1 + // + this.sliderItem1.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; + this.sliderItem1.LabelWidth = 50; + this.sliderItem1.Name = "sliderItem1"; + this.sliderItem1.Text = "地面透明度"; + this.sliderItem1.TextColor = System.Drawing.Color.Black; + this.sliderItem1.Value = 0; + this.sliderItem1.ValueChanged += new System.EventHandler(this.sliderItem1_ValueChanged); + // + // buttonItem134 + // + this.buttonItem134.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem134.Image"))); + this.buttonItem134.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem134.Name = "buttonItem134"; + this.buttonItem134.SubItemsExpandWidth = 14; + this.buttonItem134.Text = "模拟设计修改"; + this.buttonItem134.Click += new System.EventHandler(this.buttonItem134_Click_1); + // + // buttonItem130 + // + this.buttonItem130.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem130.Image"))); + this.buttonItem130.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem130.Name = "buttonItem130"; + this.buttonItem130.SubItemsExpandWidth = 14; + this.buttonItem130.Text = "导出审核图"; + this.buttonItem130.Click += new System.EventHandler(this.buttonItem130_Click_1); + // + // btn_check_history + // + this.btn_check_history.Image = ((System.Drawing.Image)(resources.GetObject("btn_check_history.Image"))); + this.btn_check_history.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_check_history.Name = "btn_check_history"; + this.btn_check_history.SubItemsExpandWidth = 14; + this.btn_check_history.Text = "审核历史"; + this.btn_check_history.Click += new System.EventHandler(this.btn_check_history_Click); + // + // ribbonPanel5 + // + this.ribbonPanel5.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel5.Controls.Add(this.ribbonBar2); + this.ribbonPanel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel5.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel5.Name = "ribbonPanel5"; + this.ribbonPanel5.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel5.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel5.Style.Class = ""; + this.ribbonPanel5.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel5.StyleMouseDown.Class = ""; + this.ribbonPanel5.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel5.StyleMouseOver.Class = ""; + this.ribbonPanel5.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel5.TabIndex = 37; + this.ribbonPanel5.Visible = false; + // + // ribbonBar2 + // + this.ribbonBar2.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar2.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar2.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar2.BackgroundStyle.Class = ""; + this.ribbonBar2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar2.ContainerControlProcessDialogKey = true; + this.ribbonBar2.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar2.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItemHX1, + this.buttonItemHX2, + this.buttonItemDCTP, + this.sliderItem3}); + this.ribbonBar2.Location = new System.Drawing.Point(3, 0); + this.ribbonBar2.Name = "ribbonBar2"; + this.ribbonBar2.Size = new System.Drawing.Size(350, 59); + this.ribbonBar2.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar2.TabIndex = 0; + // + // + // + this.ribbonBar2.TitleStyle.Class = ""; + this.ribbonBar2.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar2.TitleStyleMouseOver.Class = ""; + this.ribbonBar2.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar2.TitleVisible = false; + // + // buttonItemHX1 + // + this.buttonItemHX1.AutoExpandOnClick = true; + this.buttonItemHX1.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX1.Image"))); + this.buttonItemHX1.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemHX1.Name = "buttonItemHX1"; + this.buttonItemHX1.SubItemsExpandWidth = 14; + this.buttonItemHX1.Text = "导入红线"; + this.buttonItemHX1.Click += new System.EventHandler(this.buttonItemHX1_Click); + // + // buttonItemHX2 + // + this.buttonItemHX2.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX2.Image"))); + this.buttonItemHX2.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemHX2.Name = "buttonItemHX2"; + this.buttonItemHX2.SubItemsExpandWidth = 14; + this.buttonItemHX2.Text = "红线审核"; + this.buttonItemHX2.Click += new System.EventHandler(this.buttonItemHX2_Click); + // + // buttonItemDCTP + // + this.buttonItemDCTP.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemDCTP.Image"))); + this.buttonItemDCTP.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemDCTP.Name = "buttonItemDCTP"; + this.buttonItemDCTP.SubItemsExpandWidth = 14; + this.buttonItemDCTP.Text = "导出图片"; + this.buttonItemDCTP.Click += new System.EventHandler(this.buttonItemDCTP_Click); + // + // sliderItem3 + // + this.sliderItem3.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; + this.sliderItem3.LabelWidth = 50; + this.sliderItem3.Name = "sliderItem3"; + this.sliderItem3.Text = "地面透明度"; + this.sliderItem3.TextColor = System.Drawing.Color.Black; + this.sliderItem3.Value = 0; + this.sliderItem3.ValueChanged += new System.EventHandler(this.sliderItem3_ValueChanged); + // + // ribbonPanel2 + // + this.ribbonPanel2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel2.Controls.Add(this.ribbonBar3); + this.ribbonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel2.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel2.Name = "ribbonPanel2"; + this.ribbonPanel2.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel2.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel2.Style.Class = ""; + this.ribbonPanel2.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel2.StyleMouseDown.Class = ""; + this.ribbonPanel2.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel2.StyleMouseOver.Class = ""; + this.ribbonPanel2.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel2.TabIndex = 39; + this.ribbonPanel2.Visible = false; + // + // ribbonBar3 + // + this.ribbonBar3.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar3.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar3.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar3.BackgroundStyle.Class = ""; + this.ribbonBar3.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar3.ContainerControlProcessDialogKey = true; + this.ribbonBar3.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar3.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.btn_user_info, + this.btn_role_info, + this.btn_resc_info, + this.btn_role_resc, + this.btn_user_role, + this.btn_password_edit, + this.buttonItemPasswordReset}); + this.ribbonBar3.Location = new System.Drawing.Point(3, 0); + this.ribbonBar3.Name = "ribbonBar3"; + this.ribbonBar3.Size = new System.Drawing.Size(551, 59); + this.ribbonBar3.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar3.TabIndex = 1; + // + // + // + this.ribbonBar3.TitleStyle.Class = ""; + this.ribbonBar3.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar3.TitleStyleMouseOver.Class = ""; + this.ribbonBar3.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar3.TitleVisible = false; + // + // btn_user_info + // + this.btn_user_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_info.Image"))); + this.btn_user_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_user_info.Name = "btn_user_info"; + this.btn_user_info.SubItemsExpandWidth = 14; + this.btn_user_info.Text = "用户管理"; + this.btn_user_info.Click += new System.EventHandler(this.btn_user_info_Click); + // + // btn_role_info + // + this.btn_role_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_info.Image"))); + this.btn_role_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_role_info.Name = "btn_role_info"; + this.btn_role_info.SubItemsExpandWidth = 14; + this.btn_role_info.Text = "角色管理"; + this.btn_role_info.Click += new System.EventHandler(this.btn_role_info_Click); + // + // btn_resc_info + // + this.btn_resc_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_resc_info.Image"))); + this.btn_resc_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_resc_info.Name = "btn_resc_info"; + this.btn_resc_info.SubItemsExpandWidth = 14; + this.btn_resc_info.Text = "资源管理"; + this.btn_resc_info.Visible = false; + this.btn_resc_info.Click += new System.EventHandler(this.btn_resc_info_Click); + // + // btn_role_resc + // + this.btn_role_resc.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_resc.Image"))); + this.btn_role_resc.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_role_resc.Name = "btn_role_resc"; + this.btn_role_resc.SubItemsExpandWidth = 14; + this.btn_role_resc.Text = "角色授权"; + this.btn_role_resc.Click += new System.EventHandler(this.btn_role_resc_Click); + // + // btn_user_role + // + this.btn_user_role.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_role.Image"))); + this.btn_user_role.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_user_role.Name = "btn_user_role"; + this.btn_user_role.SubItemsExpandWidth = 14; + this.btn_user_role.Text = "用户授权"; + this.btn_user_role.Click += new System.EventHandler(this.btn_user_role_Click); + // + // btn_password_edit + // + this.btn_password_edit.Image = ((System.Drawing.Image)(resources.GetObject("btn_password_edit.Image"))); + this.btn_password_edit.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_password_edit.Name = "btn_password_edit"; + this.btn_password_edit.SubItemsExpandWidth = 14; + this.btn_password_edit.Text = "密码修改"; + this.btn_password_edit.Click += new System.EventHandler(this.btn_password_edit_Click); + // + // buttonItemPasswordReset + // + this.buttonItemPasswordReset.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemPasswordReset.Image"))); + this.buttonItemPasswordReset.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemPasswordReset.Name = "buttonItemPasswordReset"; + this.buttonItemPasswordReset.SubItemsExpandWidth = 14; + this.buttonItemPasswordReset.Text = "重置密码"; + this.buttonItemPasswordReset.Click += new System.EventHandler(this.buttonItemPasswordReset_Click); + // // ribbonPanel1 // this.ribbonPanel1.AutoSize = true; @@ -4465,7 +4465,6 @@ // ribbonTabItem9 // this.ribbonTabItem9.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.ImageAndText; - this.ribbonTabItem9.Checked = true; this.ribbonTabItem9.HoverImage = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem9.HoverImage"))); this.ribbonTabItem9.Image = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem9.Image"))); this.ribbonTabItem9.Name = "ribbonTabItem9"; @@ -4486,6 +4485,7 @@ // ribbonTabItem14 // this.ribbonTabItem14.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.ImageAndText; + this.ribbonTabItem14.Checked = true; this.ribbonTabItem14.HoverImage = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem14.HoverImage"))); this.ribbonTabItem14.Image = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem14.Image"))); this.ribbonTabItem14.Name = "ribbonTabItem14"; @@ -5480,7 +5480,7 @@ this.dataGridViewX2.ReadOnly = true; this.dataGridViewX2.RowHeadersVisible = false; this.dataGridViewX2.RowTemplate.Height = 23; - this.dataGridViewX2.Size = new System.Drawing.Size(23359, 92); + this.dataGridViewX2.Size = new System.Drawing.Size(23953, 92); this.dataGridViewX2.TabIndex = 11; // // dataGridViewTextBoxColumn10 @@ -5574,7 +5574,7 @@ this.dataGridViewX3.ReadOnly = true; this.dataGridViewX3.RowHeadersVisible = false; this.dataGridViewX3.RowTemplate.Height = 23; - this.dataGridViewX3.Size = new System.Drawing.Size(23358, 127); + this.dataGridViewX3.Size = new System.Drawing.Size(23952, 127); this.dataGridViewX3.TabIndex = 5; this.dataGridViewX3.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.dataGridViewX3_MouseDoubleClick); // @@ -5832,7 +5832,7 @@ this.dataGridViewX8.ReadOnly = true; this.dataGridViewX8.RowHeadersVisible = false; this.dataGridViewX8.RowTemplate.Height = 23; - this.dataGridViewX8.Size = new System.Drawing.Size(133, 92); + this.dataGridViewX8.Size = new System.Drawing.Size(99, 92); this.dataGridViewX8.TabIndex = 11; // // dataGridViewTextBoxColumn12 @@ -5927,7 +5927,7 @@ this.dataGridViewX9.ReadOnly = true; this.dataGridViewX9.RowHeadersVisible = false; this.dataGridViewX9.RowTemplate.Height = 23; - this.dataGridViewX9.Size = new System.Drawing.Size(132, 127); + this.dataGridViewX9.Size = new System.Drawing.Size(98, 127); this.dataGridViewX9.TabIndex = 5; this.dataGridViewX9.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.dataGridViewX9_MouseDoubleClick); // @@ -6791,12 +6791,12 @@ this.contextMenuStripDeleteLayerNode.ResumeLayout(false); this.ribbonControl1.ResumeLayout(false); this.ribbonControl1.PerformLayout(); + this.ribbonPanel15.ResumeLayout(false); this.ribbonPanel6.ResumeLayout(false); this.ribbonPanel4.ResumeLayout(false); this.ribbonPanel12.ResumeLayout(false); this.ribbonPanel5.ResumeLayout(false); this.ribbonPanel2.ResumeLayout(false); - this.ribbonPanel15.ResumeLayout(false); this.ribbonPanel1.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.panelOfTable.ResumeLayout(false); diff --git a/MainFrm.resx b/MainFrm.resx index b408d34..6b9ae78 100644 --- a/MainFrm.resx +++ b/MainFrm.resx @@ -351,804 +351,6 @@ 766, 54 - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlDMzFEOUI4NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 - NEI4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlDMzFEOUI3NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 - NEI4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDk5Mzk2NTZBRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz73sIMwAAADIElEQVRIS7WVa0iTYRTH56Uiysvm3TkvpLl5DRIvQYWVWl+6 - iNEVg0yhQqloQZHkLT+Y0YdAs75IpEUhzERZoZhsRpZlS7soblotsRwoxhqWeTrnYZtv+u7NsB74cZ5z - zv89/z17HzYRAPxXeIv/EpFXcOyi4BvKhfehv4FvKBfeh+ayqIUDlIgBgT8whpRYoT2fhgvNVJKBQT9s - hB8/QZDPpnEIjEhg0J5Pw4Vm0mwygG9T06BSqQQhTUhUMoRGpyxYT7OZwfhXC6jVakFIYzNYqN5uMGKa - BI1GIwhpghXJaJJi13d0dEB2bj74hsWzSDlXbzfQG02g0+kEIU2wIomdovzKdVifngnFFytBeb4cLN+n - WaSc6hfKKqB/eHTWoHfwExgMBkFII5MnQUD4WlAWloO26wVs35MDmifPmQFFyqlO/aKKqlmDp31DYDKZ - BCGNTJ4IPqHx8LJvACbNUw7p6e2HuJQMNIhhBuaHj3vBYrEI0tb1BoIiE9kJ9h7Oh7EJM+g/jEJuwVlY - s24ri5RTnfo5BedAIoueIYPumvomuHzjzm9cq2uCq7UNUH2rEarr7kNd0yP26Y+eKoSWtk4wfpmAg7kn - ITY5DUorq1g8cOQEqze3aplOEhRtJoMcL1mMTixV9IgD5a/tSBVDYql8AKOBQLEJtTP08gY/jjFiktKg - 5FIV21Ok3NazvmR2AvrFkCAJyGYk1comZAuHDM/AyLvHThfBveZ26NOPwI59eey7LsbhFCmnOvVJ5+Ef - rrYZLEU8EZ85+HLwW7ZCLMVTFWdkHoLut+/hgbYHaE9XN31XNsupTrWV3jKVs+uS3cyAD0cLe331jW3Q - qRt0CPUlQVHDKI+fN9iGo4W90uNnyuA2vvRtWTlQgxeg/dk7FimnOvU9/CNqUe47b7ANRwt7AfjpKvAK - Gt18Qur35ymhRfsKKLr5hN7EyzDq7humWrrcfSfKxbz/QlwcLDck1snZJdUzYHUDmk57+K1qdXJyzsL6 - RmQD9ZmObygXB8sVIRO6fXQB4hC6eRQppzr1XXmHclnAckFomLc1Um5dItEvhZ97MQXP9N0AAAAASUVO - RK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhDMTdBQjRENEFBRTExRTQ4QjQyODY0MDNBNTJE - NzNCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhDMTdBQjRDNEFBRTExRTQ4QjQyODY0MDNBNTJE - NzNCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NUQyMjc4QTlBQjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4eHsDfAAAB00lEQVRIS7XVWytEURQH8HniTTNHLs0NCXNcXjTN5dH9g/gM - 3jx590QhFDJS0gyTGmpqaqJIMW4hzlAoOaWISS7LWifntI3ddnTGrl92e/57/We/DBsA/CvuYSHZSr0t - lvCGsriX/oI3lMW9lM/SwgF9SEHwizs08IX2vAyLZvZRgXJ+cQWv7yB0q96Ds86voT0vw6KZNJsK4Pnl - DWKxmBBlqhpDUN0UNp2n2VrB/WMOEomEEGX0ArN5o+BGfYB0Oi1EGa8cwpKw6bxRcH6lQiaTEaKMVw5q - rzCbNwr2z65BURQhynh8Qe0VZvNGwdZBFlRVFaKMxxfQXmE2rxc8rW3sQy6XE0puHoG7IaC9YnV9j5th - pbZPqOCDCrbH5uIwOD7/zWgkDkNTizAyuwQjkWWIxFNQWduqmVxI/MiPz6/A8HTUuDMTTYLkbrqhgt5S - T3PG4ZJ3HE7focElZx0u3yn+VQiG1ZLymmm7s74f88f42S6bl9zyJZ6d6Xckd+Mt5ieogH4xJORHHajt - SzvqZPSgECpHZSiA2DztuxBlad+NgnpBEbIjusiiYboKRF+kGFHegUR5ImkFv7G0eAPzWVq8gfksLd5/ - oULiHhYS97BwwPYJlSCUgVubViQAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJEMDQyOEZBNEFEMjExRTRBN0MxRDBCNzJGRUND - MDEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJEMDQyOEY5NEFEMjExRTRBN0MxRDBCNzJGRUND - MDEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkRDRkI1RDVEMTRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz59jfe3AAAEbUlEQVRIS8WTeUybZRzHF48/pnFOuQRajkFLgQFb5iRLNJr4 - l/EPgsniUI4xZDAY1zyxwApsMJyIME61rByl3DfoYGBrgbWUY06FcZSCha4rQ8jYxkqPr2/fvkv8o2Sg - S/wkT970eb6/T5/39z7Prv8dt/Oql4mR4HZJ3ccoXFxhVCzB9DT9JueJdSq6c1wzVZFupepVzxu34XVj - CaEDi1jX6hF8ZQoeokl4iBVwzV9YdU1XRlIl28eVo8phCdXwGltEeOUsro6psaHVwcSDh5volc4iOO8X - 7KuVwb1hEi7J8myq9PEQO//I85oafr0KtEpUpNSETm+AwWDAvfv3YTQaybnm/t/AyO6Ga+UonJOnIijF - 1hA9tWI2qle9RxcI+RIpmZpTIfBULhIyyqHVahHPKcN70TmYnFFCp9OhqXcc9KwW0DOHVl3YU1aUyjJu - F1SpfhO3EM6bMMsVt+D8Zhz2HIpC4oU6bG5uIu4cD3tfTwAjIBNypQYbGxsISquBU34PaDHiVEplGXee - SuIjVaBv3Lz7gJg8vHg4FlZvc+ATVoLipiHsD8qCXWAO7IPK8MG5FjLXKboOeoYADkldUkplGWb7vOb4 - 4BzxIXXQE/1m59WDXdgBvxPfwz6UC4eQUth/WIBDZ2qQXj+K7IYRImeE5s5fOFrcDPvPapcJzVNmmwVY - VxWG9U09uau1tTVymPpc0iYFLew7OEUJ4BwtALfvJpl5xMrKCu6s3cUrn5YbCM1us80CrJZZVWjXr7j3 - 4CE0y8v4IrcaH+cK4Bv+DRyPl8ApphYuia3wZ3eCUzOA1PIfcVuzjHnlIgK/vgy7mHzTG+w12yzA5E53 - edYPo1c2i/X1dQTEfwvbwDQ4hhXg8OcN4P48Df+UTrgkNIAeW4Hg3Hbo9Xq0iGSgs4ls5CUhoXnObLOA - S8pkhG/bdZzgDZJnffT3GXieLAA9XgB2/RjZjuQqMWhxfBw824H55XWyhcfy+HDNqoB1SH4Codn6G7iw - p3d78EaVPlXX0CaZgkqlgly1gpCiK0htHCH/IL6oFcEF3ZjT3CUvXqv0DzDSS0FPq1a/8EbYS5Rqa+if - SAJ8KoeNR7gitEsnoVQqSbGOkJmYX1ggxaY70SabwIGMUrjn8I3WIXnBRPnWu/8nDnE9Sd7cAaP/ZSES - 6/rRKJRArpiHXC7HzekZNIukiCyrhW9mGZgXa4w2kUVnibJnzdXbxP5URzyDO4QjxGl5i9uNpMZeKP5U - IrywAq9yCnGAOGGMonbYxpVnEPGdyR9BO/MTj8kfgXeNFPt5IngVtoF1kQ9WcTs8qgfgmNreQMS21xZL - 0E6Ln6ef75tg8sfgXT8O77oReAkkYNXJ4PRV/4ztyfo9VPTf4xjdf9CpQKzdxxuGe6UMbhXEmc8V6mze - r3qNivx3HGN7UmglQ6CVDMIxXwybo5UcaunJQD8te9rhyx4JrWwItlGNUut3y5+hlp4cDhFCpl14k9jq - nR+Y1NTjIe7NlmMnWKoHsOtvjWYcKpheqFQAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERTg4QTFENEQyMjExRTRBODEyODk0M0RBMTc5 - Qjg3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERTg4QTFDNEQyMjExRTRBODEyODk0M0RBMTc5 - Qjg3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjJGOUEyRDEyMTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6wJF34AAACl0lEQVRIS62Vy08TURSH73/QhQtXVnBhxEcMiUkhbEg0hB1R - Q1i68C8wIW5cEqMLN7ho2Ji4YiEhWq0prYUhfULbadN3obTaChobtZEUsFY9nnPS6WM6HYowyZf87j33 - nG/amaai9geOBYA+4pTxihmBE8DcTQB4J8em/9IwSQyagmrtL+z9rMFmvnhkKvtV7tcVHPz6DVsftulA - AckdhUg8zf19eoLKAd597iMLMItewfOxUDTN/bqCH3tVSG8VWIBZ9AoJApEk9+sKvu/uQ2IjzwJkGtH8 - OrTwy3Hu77vIAnV9mgWlcgWiqRwLjAMmkOMbPbNTKnN/JJntqJGEBZ++7oKcyLLgLN4JrU8Cms2C4pcy - BKKZumCI18temQ/8DzSLZlBmQX7nG/jCKdpgAa0driCtY5iFHuqHSjNoFtaags1iCdzBBG+QgNY2aZ0F - mIUe6osENAtrTUEq/7kDq9PHAszU5yYoq9f1i9cUSCD5ozxDEeTsrhAoONwyxLLb8MrhYQFmZYCHsnpd - v3hNgQROb5hnKIK29944MAThTBEWbS4WYBZ6qC/sKSy5ZJ6BGUQg8b4Bbhjod4AZXlhXWdBa10LrIVul - AM9ggS+aa6AIMMO8ZYUO0KeyIOMtZyaQpXpNi4LFucYzMINwhbMNcMNw5oIJMMNKIA0LNg88mZuH/ssj - dPgBMnN+cBRmny1wrRtSMMMzWCCFMg0UAeY2Fh0+GL5xG8Zu3oHXUrCj3g0WONdTbeBm21/o1N17gPtg - 98Xh3VoS3qzKMDI22agfglnY/Uld8NDc/ZlZwAwvl4Ngun6LGh8rdfVDViNs3rguOOzq6XOD8PDpc7g2 - OkHDH7XWtYa2It66Y4eCQ8cRfpvUNa2hTUD8A6JMaBvCyTdJAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERjY3MEZENEQyMzExRTRCNDlGQUMwMzk0OTAw - Qzc4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERjY3MEZDNEQyMzExRTRCNDlGQUMwMzk0OTAw - Qzc4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjhGOUEyRDEyMTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6GKmpFAAAC+UlEQVRIS63T20vTYRzH8Yforj/Ei24UiSgKIygKi8oyxZQo - cvNYeXaesmzqPGu2POd0ulSsnIdaurTSTJ3O6UxTPGya5vCQx5AuPn39RbHop7nZxQt+z3ie93e/Z4w1 - p7nsCoBt8R6yBF/UHPv+Wb0rfFFzm99CRIwEW1gnqXzxTXxRc0ydctm4OlID2sxrw6iCtiwItC+A2P/D - frLnjwGNSZdMq6N1WOvLwFpP4l/WdRlY6Jaio9Ab7QXba8sVoDHZGdT8PYS9THDqMGnLsKpNw0qXGCua - BO55VZdNQ6U/DRRibVCGb+N1pH5bukoRqHmDHOIG1N8/X2F4I8WyNhtf2+9hqSsZxqZ4upbb6HsSZLHO - Im90ym6hNVcIaktYTexZyUelGEvaHMy/jcFiZxo0xX5Y7ivGcn8JkVmA9uvlWBmqwpJeAWovs+poR99O - eRgWtQWYVUdgrj0FH+i+F3XF3NoappZYGJrEoLaOVYpOOTY/FGJB+xjTqnDMtMTTAC/Ma/Ix/TLUKl9e - x0JfFQpql7PykBP7lWIXzPeUYLIhHCPKCLr/AMy2ZsKoDLTKdNNdvM8TgNpRTBZwfJ885CTmaIChPhwa - mS+GnkdhqjEWY9X+VplqvIMXEhdQ24mZeuSs0N/BNNWWj4k6EdSZHhhXxWH0aSCGFd4c4Tk7zk7XBlUM - FKLToK4Nm+0qYnneRzqGGiSYaIiiyZdhVCdgqFSIwRJPjucZW85O1pvnRmvDkO9zFNTdy2Y6HjGp4HCF - 5kk4xhoiURd/EROv4tBfeM0qAyUC9Mp9QM0+7o829T6LZV0/mNycS6+nFKFWfAGj9ZHozfGwil7miZYH - 7qCmghsw+S6VpV894KuUuKFbfhNNqa749CwY3dm0toK+VABl3HlQM5obYHybwFLc7W1y/Y5BlX6FfgNn - DNcEY0DhZZX+MiGKbh0DNR24AYYWMSfJzc6GZBApwS5skIzNODcg0dV2V36FtsJ7yBJ8UXO8hyzBFzXH - ++H/A/YDv9/V87iOlrYAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 - RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL - ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH - s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW - uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx - xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd - iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ - qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW - GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE - NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n - KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw - qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI - HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq - wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q - 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA3MTZBNTkzNEEwMjExRTRBQjdERDhBQkEzMDEx - MzZEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA3MTZBNTkyNEEwMjExRTRBQjdERDhBQkEzMDEx - MzZEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTgxNjM4Q0YwMTRBRTQxMTk2M0JC - NEQ0MzNCOUIxQzgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - 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 - 0HWhD93n++Dbua+fK9NvoTM5+Udx5mye9NjgCZNf0HEnpN5U5RbPa9+0bdfQ+0eOPzp5ppvG96JfjFkM - nXR/vOP0ePOu/deyCuf8JVSorJny7HQdvR9MTCUm+fUYgyehazLBVCCd8ttpJbQANtO3cDjWbO9werzd - ruK5F9Ld3p7YBEdHCE/WMi0s0jf5mefm0e+ZCsXEf85i/98XsP4NaTpxka74X+IAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJBREU3RDk2NEFCMDExRTQ4OUM5QjZFOENGQzJF - MDk1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJBREU3RDk1NEFCMDExRTQ4OUM5QjZFOENGQzJF - MDk1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MEM5Mzk2NTZBRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz52g1XsAAADeUlEQVRIS62Va0hTYRiAXzVNoQs6oUCttJu3aqatrLxr2k0n - W6bLLlLSxTKCKLoQQUg3IbLMflSgBRGRP7JSSzGnWalYdpnV1MQu1tBWWklqvr3fp2dsOytSfOFh3/l2 - eJ7tnDMGkkmzGCqigsARhPlUQqCi8nEd9v7GEYP5mFcI4K/e/hGHeQ2B7p4+1HV8Nf6Kw4a5GGxtCHzv - 7sU2nR4lbr4/AUBFKIeD4GKYBL79+IX6rm622U8nSgnX4SC4GCaBL50/OXwTwIUY1ohcQkCn/84ZDLBP - I5p16TBl7XYIoaXVwI54RC4h8LG9k/OvQPIOmEZUJW2F+XRoPbBrOiKXEGj9rOdYCqi2gxXhnLQNIo6f - n9tEa7ViI79PoojIJQSaP3RwjAOJaSAjjhL3N+9zrD+W499UVJnSeeVmWDvtlcWlgCedZnK5RC4h8KZV - x2FryQSYmrAVjh/MnP46/57yS7VmZ9+zxr1Yr92NtQ1pWFmfiBevL9QpUqE0JhHcyWuImLsMAU1zG4et - V6yHC1l5oe+evNmD1ZoteL9OgaW1K7GkRoF3H8ZigTocb5bFY8bZWbpoFVwh7yiCR8xdhsAz7XuOh9QD - D2R6twyIEzG/JApz88N7z+T5d+VcDezKL43Ea4UxeCjTqyNUDpUBYeBFXjvjgOAyCdS9asXDJ3NQFj3u - 7eWCyG/FjxR45OyMr6s3S1qCYqE8RA654Uq4dOiUV/v+E9P0i1ZA9Zwg8COnA2HyDZiLYRw4dyAjC50n - z8awBBvNbbWyZ+8x10+By+GONARCbe1gDBPJloCvfKODluQ10mD+qDK5LWFyD6pfvOUYBzydXL0v2I+V - rI9Mhud5BQE9i+RQPt2P30BBYrM4HmYSNf5REGS0b5CzYdKq+iaOITA44wmPiLXwaFfGhDbZMkinYxNJ - 8CpwXxgHobQcPbhv8XegrtNyzAPsOtqHJUPeml1jm/1jYDkdM5G5hB3bDL6KhknLal9xzAN8gpMgVZHm - oKUAuwx29H420c9O/l9KHms4bC0KLFCAY6CSHr+VoHJy88lWbEjHoqoXWPzw5ZCxGKCxkslBLo22L1+6 - ahPeUj/FwgfPh8zpSzfQ0cWrwVKAjfXcWFjjPm9isWSSbx/7JEPF0cWzcYzE7dTfAmysfSLB2z0Awm1H - 8ycnjrD4N/kX4gEg8A9sAFSe4VuPvgAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkEzN0Y5NjgxNEE5MDExRTRBMzU1RUM1MkVEQTU3 - REQxIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkEzN0Y5NjgwNEE5MDExRTRBMzU1RUM1MkVEQTU3 - REQxIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MUU1QUVCQUI4RjRBRTQxMUI2QTlC - RjEwMkVGQzEyNEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4Oz1B+AAABO0lEQVRIS7WUP0sDQRDFt0snIcEiklhGJLH3k6bNp0ifYCUo - KWwMIRCx0EYxEEL+IOPO4SxzczN7d7gGfuzd7Hszd9nHOQD4V9RiStRiStQi0b68GXkgwkjzcdQigU1O - 32CC+9IjUYsENvjY7EySDHhev5skGXA3X5r8aYA3lx0wET1otYgmNMcOku+jXtMg4QJFJMb1a7uPmjUd - rVzHDfDy9pmJaZViCe5rPq7hYpgvXjPw2hNtTqBOevk+F8L0YRGQQosyHxfSf0jUegPLZwkrNedYfi6o - 9Y2RWP6cACPHYnf4XauQablfHYAxo6jt9sfwRGWgVvrVASKmdd7g2OoN4P5pVYhqbgCPmnPuzHPtua1C - s9OHyeyxEFU+IJcCb2p4zj3dKjQvrsat3jD4CwNCIcEv14/fpAfcDwXsled4Tu6+AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlGMEQ1RDBCNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 - MzBCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlGMEQ1RDBBNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 - MzBCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzFDMDRERTRENjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6zemTaAAABh0lEQVRIS7WUvUoDQRSFEwiBKPEHsRAkb+ArWIsv4CNYCSKI - jRD8a1S0m9QhdTobG5uARZogBJSkiLASFJJChQiRcJ2z2bnMZtbxCnrhY3YO556z1aSI6F9JFP+SRBEs - FFaUhoSopAyQKGIBi58jEuErcQSAhY/hyP5DL8Y7mQMcAcD8Phh+u2Tzk9cRAMz914G4wOd1BABzt/cm - LvB5HQHA3On2xQU+ryMAmB8en8UFPq8jAJjvWk/iAp/XEQDM9WZHXODzOgKAudZoiwt8XkcAMN/U78Ml - CcY7mQMcAWhz+FRc3zZFREXypwKYEiG/e+ykc1WYVRrCGUk8nGUHsyic6nKeetUK4dTESjjLDjZUlqaV - hiS8lEsh0Z1LTFYs2FBazFFwcUzB+YE+T8bffD+i4LRIwSV0jdZaO5vhHXtRPmfFgg1n81mlIQnt/W1q - bKyH34dz2XKUz1mxYBaFU5zJUG1tlXDu5TMcjuEsO5hF4exOpZWGtnLpWDiGs+xgFv9gxlmU+gIVyyIX - YCSg/AAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6npMy1AAAGEUlEQVRIS7WVeVDUZRjHf7Ase8ECu+wl4LIXcqyyHC783AWW - 5QaRFTHkMi9SQvE+UhLzwk0BUcQSgQBBgcYDzStMSzOPcpqcmo5pmqk/+rOapqb+iG/PbzfFcSz/6pn5 - zPN739/7fp/nvZn/3TSLjj+XJy2/RaItPCT5vaBd8m1+q2Qku1lcrcvki+iXr7fFU6ZZeOx5KDU1b7jU - 1Z2bVPMPWNMbRXrXkWAc+ywVLbcS8fKwFjlu8VdpW0XzSc6f8PEIPzJ19dFnU3WEJdHL9P3X9O1nkdB8 - CQrX7i3mKn9zfqsUq29ZsPfjRBx5aMO2cTMy94gm7FuF7XyJTwDJTo5GVdHxNALVgsPd5Ceye+9g8b0f - UXbjB8RtH4Msd+MeXS7f6twjxbILZiy7pEHDtTBsvG7BqivTUXpsClLWCbtJNpDwBlGVH3ySIFV520eW - nedRcf0HVJGwbeRrOHs/h2n1CGRZDe7wND/W1hiI8sEYlJ4KRcVpJcrfVqByNBILhqLh3KeA+UXBOpL2 - jkRZduARPGXZ/vH4pnMou/gd7INfIPn4QyQc/RSOzk9hrBtEiKPerUn1Y5PXBaDojWlwdgUjr0+G/H4Z - cnpCUNJrQNZ+LeLrBD/LYnixFEDAKFz7vJQ0r49dO4zikS8x8/ADxLd9jIT2B5ix/z7SX78Pw+K3EJy2 - wq1M4rEz6sRwthgw82Ag2KNS2I5JPZ4rZx00ImGNHIZSfisFkDGhxbs5AkKLd/3kaLkDlgTjXrsNc/Md - mPfeQeyOD2HbcRu6yi4E2Wrd8ngeG71IBPtePWa4JUhsD0DykQAkHQqApUWCFLcGyZvDoZ/P/5oCTGXk - hU2MvGB7rbGmG47dd2Fa+x6iX/kAMa/eQvS2m4jaeAPspvcROb8TQexid3CcL2usFCJjnwE5nQYU9RhR - PGDC7D4TCrqMyDqkR9oePbRz/SZEKh8rI8vdyshyXhmzLD8DS/1VGOquwtgw7glkXH0Nhvp3kbL2GrSl - hyC11ril03xZfbkQKZuVsDeq4NihRtYuDbJ2auBoUsO2TQXrJiWMlWIExflWMiHOjRzfJy0bg776HCKX - vANd7WXol1/xeN3Si7A2XIXW1YbAxAq3UO0zPTSd1yG38bplLK//vxBrffKY4PQ1HH9aKk8jonQUUyvO - Qlt9HtqaCx4/tXIMyXWXMXXOAQTEv+D2zCvDhBBTCN1zCGOCZq3k+DXO1YcpRYOY4hpF2LzTCCs74/VE - 3IvnEVd1EhGFblBbWot6BKXWQZq64tlYa2+TuJwQM9KU5cRL35hyOxCe2w913hA0hcPQFI16KRzxEFtO - a1Q9htSVN5C+5S5x7x/uIm3DR7CvuomUReOImt1FU7nwEolHECImMGkJE5i46EJkejNM+X1QOPqhzBqC - KvskVDmnJuHKT/K4bgjKzBMItXcjJv84NOwWiKPndJK40TOCgPgaRmIur1dZ1yM6txvyWT0ITR+AImOQ - gg39N1ybDBJP60PorC5My3oTwQm18FdNryBxbq0EJL6AEUTYZBTkF0NGKyKdvZDb3qJOAxSIOqcP/jtp - JyC3D1BSvYgp6EN4aiNlP/cTEk4gFASPEUeXkWd8RaY5jcrEBkTn9UCT4Q3gzfBfRvJE9rrsfpicHSRe - NsFXmJeSXhTBXXY+jMjk8uArVkpExuKb6pkbYJ7L7Ria37xTUBeMeCkcncRTN0z/TyLKNYy4khNQJq2G - IMLBXdUWQkXwCYYR6md7IPP1k8WEC3UFDzSpG2BZeAZJtXQWFpyls3HOC50JzkdQnbFqDInLLiC2rBcq - 6xoSzzzP+NDVwDBaQkx4XzahNv8xZH48sVotCHeOUnnCWNJG18Q4UjddB7vlfbBbPwC7+YannLTyIrS5 - OyHU5v3hr07poL7JBHe4Jh8bzgQROY8h46IKCAVfbi73D3PcpfoJlX0VtEVN0JXsQlj2ZoRaaynj7N/8 - NfZLPLFmHrXnpiWSCCL8iMl32T/M6YGMq+R+covD7QADwfoIgqt4QVGtfvIZJ4lRv5CY4zypbjfjy+eE - M4l4gtuSwYSQ4DS4EZAew/wNiCYQJlvQU3cAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVGNUQ0RjNENEQyRDExRTRBQ0ZFOEVGNkU4Rjcw - RkEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVGNUQ0RjNDNEQyRDExRTRBQ0ZFOEVGNkU4Rjcw - RkEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzUxNUY0MjEyRDRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz7jldwbAAAEyklEQVRIS6WWDUzUdRjHoeXWVktIc74MLREMUxBQV4RYkBmL - SBwSoZIFCgULlOJFDJDxqkiAqGgoiIQ6jaFLB1EqUaC8iMgdL8cJB3fHwR13HO8Hh3x7fn+pwN01nM/2 - 2X77Pb/n+33+v/3/95zBbGOVnZM58QHhRKwgnp9KPXuQ2CtJ6ScOjGo0fcMjI93llVX55us3rqbUc49P - zDLyw9auL4iw5l+IsMY//BRujcygdcg+ug83rpzCsVhf3C6+hHg/W+R++985BtU3pey1cCCpOYQhJzo9 - 8kPX1tZcDoS0Jp2jrCgWmakhOJMVA4GwBd1KNSQ9veiUdeNifjqyMsJxveD7f8+z2rPBlg0kNZ9gJjMj - L8RqQlSegIbLX6CuYAcOBm9FHe8B2rt70SZTgNfehTphJ+paCaEYjSIJkmP24PaPnrhfsBP8okCcCbZ8 - RFLmxIuc6PTICV5Dh4IxNqSEemAA6adzwBdJ8VeDEL/XNqGkmo/iKh4HW5fWNCL7QiEqq2sw3N+Dijwf - nPx6FUjKkpjLiU6P7MDVqL/gj8nJSY4bpbcQnZyK8EOJCI2Ox3dRcY+JjkNYTAIi4w4j7+JlKBQKjI+P - 42qqJ9J832AGawkjTnR6ZPm/iXvn9+ARiWsnJjCu1YLeGshJQCKVolMs5hBLJOiSydAjl0OpUmFweBhj - ZJAfuxVJ3ub6DTJ9LVCd40Pij6AZ01IRoWVGumE5dmZEM45RjRbnolwR72Wm3yDt85W4e2o3FVLnGg1G - xsYwSvDEdxB03gEa6vJwSopOhkZHkRPhgkPbTfUbpOwwR+XxXdT9OM79EQ/lgBLNkjpsz1iMP5t/oU7H - dIoz+oeGcTbUGVHblus3SPJYgfI0LxLSIPmaL4LyHOB5bClK6gswNDLKoUucoezvx+n9W3Dg49f0G8S5 - LUfZEU8MkpC8T43YQi8UVp3kutOFenAIvep+dClUkClVOPXNZoQ6L9NvEE3uN+PdMUBvRXevCgqVmjob - gGpgEH1PwPZYTq7soy9bDolcgRNfOWL/ZhP9BpEfLsVvMW70kQ1C2qMgEyVnUiUoQ2CuPZTUra7rYYi6 - ZDi+910EvbdEv0GYkwlKIj+BijrL+jUKbdJO1LZWwD19EUrrr0Cu6tMpzhCKJcj40gEB9ov1G4RsWoLi - UBe6V7r/n70RkPMOPDJMcLXqLPc0DF3ijBaRCOneG+H31kL9BkF2i3B9nzN1qoagQ4yDlzxQUE6/lHRd - XfLeGbA9cbccwk4JHggegi8UIc3LDj7rFug3CNiwENcCt6CH3ojm9g7qqoN79HZpF9rpjjumYGu2x3I8 - 4UNU85pwv0WAox5vY7f1/xj42SxAkf/7kCmUuNfUiho+FTa3gtfaRh22o6lNxMHWbI/lKut5uFVdh7sN - jTiybQN2rpmv18DQ1+rViUJfRwia+bjXLEB1YxNqyai+VUiditDY1sHB1myP5e408FFR34Cb5WVIdLXF - Zxbz2DywJYw51WkxZ9eqebxUFyvk7rDHD24bkOhig4RZEM/4yAZhm1Ziq6lRG2mxscmm2owwdF72suOn - ZkZCTzNjuJsaYdtT4vr63E4L4xcCSYv9IXiJU30i2BxlzmzkWRHsLp8GVsNqp2aygcHfZtZtYIryU78A - AAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkUzNzJDMjE3NEFENjExRTRCNjE0OEVEQzI4MEM0 - RTZDIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkUzNzJDMjE2NEFENjExRTRCNjE0OEVEQzI4MEM0 - RTZDIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI3NUQ0QkNENDRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6PyaLfAAADMElEQVRIS6VUXUiTYRT+vi3Tzd+ps23+3KRigtiPkolEQReG - UYTkhWatpWlWGkRdddfdSPImqUAJjSIT00oxLJIk0cR+tFSyzDJtgaMkDEPkdM7ZPvm2vS6jBx6es3Pe - 8zzvtm+TohLS/ov+AACStLgEQuJyLRJWYK1yzh/+FgCoQrpnfM4fOGBhcUlIMkEVkma4H4i1y2kFcMD8 - wqKQZILKZqTqmlTAWrfvMjhgbv63Dwm0hLWQohn1eNEbzrlfPiTQAtZCKjP1GXdAIC+r4XD+9CGBFrDm - RVJ1re6pZ0GyHHMvIawauYVNCFPfvvuQQAtYC6meKXU0amNsaGN/ZR60xIf9aIgN3cpGE9OzZCZ85nEm - pGiWlLABmuJCnUOXrNB7chdct4TUo32ANDbp4NuielDpqWfePdaPX6GrohSK4uLhlCEo96YlZLbOFHzH - oJXjMSBcGn4/zQGovEDqXXtzeTb+BTrKj0J3+Q54djYP7EZdTU2MPjFSK8eieQR9QtLg6GcOQPWgqKeQ - ZyOfoK30CDw+lg2Ot3Z4VLoNqo269mCNHIa2WjYn9A1PcAAqU6m9VV3TF9psOwwPS3JgZugCdNoyocwU - jU+RlImWBpezGz0vxzkA1YOiHvPFO7Ca1kGHLQtmXp2HdutmqN+/F6JiU+h3kOpyVeHJwBgHoLIpqajm - 189HoaG4CNqsGTA1UAWth9Lg6r490PygGyLjUikgzuWqQlffCAegelDdUwLqigqhpXgjTPYeh+bCFCg2 - RkEk3vxuVz/P0c43oLP3DQegLhspNalSFxiNcLswHT48LYNbBUlQk7ebzenmyhm08w1o7xmiAP6hRZiT - 70eYkzpctUuJWdHmwWs74+F1Uz7cyE+E4ohQB5mHm9a3GywpTXzektyKduIAIsKI3ISkL4rIdYle05C9 - VrZVBmvtl7eboUyv7V4jSQdwRn8FdI72iErtCUxnIuifkJ5hUqUOq9Jr7OeCNU6bTpNVqtMcDJSldOwn - KnOk+jypJ5QANRWc0cs5SEelXr54QidfwVYAMoiHq4W/gNM6OaNCJ+diaUIqN/43+Atwg27t+9ZXBUn6 - A2MdqQeVc5pWAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjUzQzNGNDI5NEQyQzExRTQ4QkE1QUNCMEVDRDZF - MDVEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjUzQzNGNDI4NEQyQzExRTQ4QkE1QUNCMEVDRDZF - MDVEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI1NUY4OTYyQTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6IsaOmAAADF0lEQVQ4T62U/UuTURTH+0nICqRI1ERMMyNQe8N0ChqBwQhN - yvwhEgJjVCqJ/qCibZo6tzQ339h6Nre5prapUzc1XzItX1ilzuWMLLVAen+xf6DTuTxjdxsFVj58ebjc - c+7nnud7z3228DbpIaDFH/CfoqCn72DIDvNfPDM2KAqyr8PcJxqY+QBTb8kkjocXQTsKigGwfqYJHqIg - 1OxHGHvlWPx4hXB1YyA3g4CBhqst+piEnrDA3rA95vBAY1x8d7lq/DVZwm5PQZNvoKYdypSgHgbVEIh1 - cLOZzOCbSSsyRQRba6uWtcpVLbPcwlglInNUCJNWWKqABqMLCGvGlfpJELaQ/V1Vd1lujAhe0chtUrH5 - ZExnmJ85MdomEa+qZMbIEF2BHGunILSjdZwYgTt4gJqjjj0Rltml1Zq9AeL0Mn71Wn2mtDU80MIvsFTw - O+KPIoWC8BNYRIUaqrRQroJKjQOk9N+xLBF2pXJFKfnsDGYa8gS6xOO2whyMuoHaHpGzZ/pBM0IMrtXD - nT4HqNHXe0lYoogMFeQP4jbSDkCPTUyXmnNoPutSo+9WN5DEQDyeWCWnhqm4p7Oimt3b54rzmmKPVHKz - 0Xg0AU1pz87VJp+yXOfd9t3mBmLXsGrsJhSsDtF4iOWxKdpzyQNnuRW7vEUp13obFG05OVUBPtO5V1Sn - k5q4SX8ENfWA6C7xHsP981Bb2sf38ZKd4JhSuXUJHPHhg/WJnAeZFw0Xzt/w8erRtLmBnB/CSmaC599I - 2PYVRl+CXigu3R9SfCC0Pf1MZ1oqvqvjogX7gtRFJfb1n24g7GblfQcFP2fkBYm5anxqQcbLKgzyK/Df - WRTkV5+RMTg84ZrgAOHo4ZIDVNdJw67CpsVLZ5gifj97Typlq2ZFQXj8LKh5EHpnaIar8N+Al5l9Y9Vs - T7OiIAzjqaMsa6QJnBkeWvgOHdPkAuIV67PSeQpCYYZplsZ+KyyWLRyFF8D553EDbURY770J0rrYJbda - SYE4iWb9NcgpRKDrOMAWwYP6d5BTaC52zyaAWDlAm/DweL8AX9zXukfxHsIAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - 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 - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjYzQTM5NEY4Mjg0OUU0MTE5NDBEQTc4ODZEQzk5 - N0NGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJGRTU5OEQ1NDlEQjExRTRBRUVDOTkyMjQ5NzEw - REUwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJGRTU5OEQ0NDlEQjExRTRBRUVDOTkyMjQ5NzEw - REUwIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTY0MkI1RjlEQTQ5RTQxMUE0QzNB - MjdEOTJBQzc3QkMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjNBMzk0RjgyODQ5RTQxMTk0MERB - Nzg4NkRDOTk3Q0YiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6B5sF9AAACe0lEQVRIS7WVb2jMcRzHL7UHanF/Mts5prE/1li3kAfu5Ak7 - 5IHNobBkSC2UIuGJkrrSWRvTmHQWK8U1T8jqUtYwkZpaGjV/Js6to5YwfXze39+fu/v23f36hXe9us+f - 7/v9rd/dr3MQ0X/F4Zm3+K9QhWajNNlBFZqN0mQHS6lMdrCUyqSgimllUsy4XmOmp+QRDllQWbygjjq6 - uimZStOX8a+ixox3pXrM1JLCDAqYJmY7c669M0bff07mcLbtEl9QE8k6V6BH5ooXMsHZZX7ae+AY7W45 - SrPm19LbsSR9m/iRA2bYGefggVePzUgKBzeu9sQpmZ4QcG/WMtk7eLjv0WMz0kOz+TX6MUXvP6cFeNbD - bz6YvQFm2Bk9PPByZO6jksLB5KvRTzTyLikIrG2ktsvXzd4g2hGjYP1ms4eHvb850qkl65LCQW/ntVs0 - 9HpMcPx0K1X4V1Ff/3NzhnphbVDsjBk8Lm/VE44s0ZJ1KS4Ie8uXUvPBE7Tn0ElCzTMqrV5BO/cfEaDG - TD5X6PFFONLygsTF7jj1vxihyPkYNTS1iFrFxm37KHIhJmp43L7qZxzp0pJ1SeHhQGgLJQaH6fb9R1QX - 2EB3Ek9FryLe95j8K9eLT/TB0FZcskOP1iRdkIh23aR7Ay9pzaZddKY9Jup8nIpeoXXhZlHD655b85Bj - p2npLOmCML+dD/iTZhaX3+UvbRB1PpzeygFnSUUvatecRUMzisoOc+x0LZ3FixxYhQyK1cxyZhkTYhqY - RgnM6hmcwVl4ljDI0KS4AC+Kmyli8Jv2MF7GNwXY4QzOwgNv5mWTL7CLpVQmO1hKZbKDpVR/1P8OcvwB - lh7gOXXZq9sAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkNDMTJDMTRENEFDOTExRTRCRDk4ODBFRTFERTlG - MzY1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkNDMTJDMTRDNEFDOTExRTRCRDk4ODBFRTFERTlG - MzY1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjYwQjFGREZDNjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4rRYZ8AAACEElEQVRIS2MQltOlCP///x8vxqqJFIzNUGSMVRMpmCDApokU - TBBg04SEpwHxfwJ4GtQo7ACoABfODY3N+P/773+82C88GWRJBtQ4TIBmKAyziCsa/L98/c5/37Ck/3Wt - fVixT2ji//OXr/8XU9T/zy0kzQo1EhVgMRyEm0uqW//vP3Lqv5Cs9ml+CZVp/OLKs/nFleYgY0EZzQt7 - Dh7/n1/eCFLXBjUSFWAxXENZ1/r/g6evgK5P/l/d1IMXe4ck/L//+MV/RW2r/0IyWppQYxEAiwWT+qfN - /7/7wHGQq84BXT9FQEq9S1Bas0VQWqMVFWu2ANWc2LbnyP/eKfNA6qdDjUUANMN9Tex8/j999eG/LzDy - yuo7icIeQfH/n7x8/x+kV0hGOwBqNASgWbBt+frt/7cCXQRko2Cg9xfCXA5io8uv37bv//J124G+0NkF - NJYRYjoQACWR8f97T99gxSA5oHIpECZCHTvIbDCAGgy34MaDF1ixo08k3LWO3hEY8jC9IBporBDEdCAA - CqBYcPnOU4ow1AKQTyEA3YKz1x9RhKEWyEBMBwJ0C05cvocVl9R3o2BsakCYoAWHz9+mCBO0YP/pGzhx - flUHGGOTg2GCFuw+cY0iTNCCHceuUIQJWUBMBYMX80uo7gQai9MCkJAoENsDcQiZGKQXZAYEYLEAlM1B - CkCuIAeD9EKLCgYGAMLPWmGxemtkAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY2MzBBRkRDNEFDOTExRTQ5Q0JEQkU0NDNBNTYy - QTY5IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY2MzBBRkRCNEFDOTExRTQ5Q0JEQkU0NDNBNTYy - QTY5IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjgwQjFGREZDNjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6+q/BOAAABR0lEQVRIS7WVTUvDQBCGe/PoQQQP4s2jv8E/4W/rXxEFQRAp - olCwfjRUJWK1ltJgNJh+6Toz7OCSzrIZFwce2LDzvs8hkDSMMf/K7wFmbWunCRgFTQp6RhKY+ZephSvh - Du7hoWf3AgPT+XcteLcqcUcUlNMFYYNLuPeVXZK4IwqKckZMZgsveO/u8jNKqMiOKHgrJrWQdqsSUTDO - Pwm7LBK6pzIYUTDMPoi8KGvB+4wVrGCfKHge5VFYwTr2iYLHQUbgWYObg6pN7BMFd/0RMczeVXAuKOim - r1EEBVf3LwSeNbg5qPIL2skTkQ7GKjgXFJzfpFEEBa3LBwLPGtwcVPkFJ+0ekcAL08C5oOD4IokiKDg6 - uyXwrMHNQZVfcNi6Jjq9vgrOBQX7p50oQgLtT3+J1Y3tA6iSBXbwS7gL7P0RzNqvqWn8AE4SSnpUkJk6 - AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFGMTBBQzY2NEFDQTExRTRBQTYyQjA5QjRFNjBF - MzcyIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFGMTBBQzY1NEFDQTExRTRBQTYyQjA5QjRFNjBF - MzcyIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6M0EzRTc1RjdDOTRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - 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 - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjg2NjBEMzE2NEFGRTExRTQ4NTY1QzE4RjMzMkM0 - NEY4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjg2NjBEMzE1NEFGRTExRTQ4NTY1QzE4RjMzMkM0 - NEY4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTU5NUNEQTdGQTRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz5BZhOvAAAD9ElEQVRIS7WWe0xbZRiH95+T6DQxcc7NLfrHTBaR4NyFmDAy - ljFwwERGpmRxxmyY6QbqgogDhqluOpFLlm6AFslGRVlXKISVS7tByzgUOF1vtLUtLVBogQ4YsLoN9ec5 - 3+xXyIiJWdrkyfed9/u979PLSdsVz6wPfyQA/Cehf3DPQsiBECHkBVj4CyGBn00E9xb+DglU4L/35xIM - 7j78qCpAlVqAg6KNkOtqMTPnx9TcLOzjFty5u4CJWR9u++/AM+NBh7WRnM3/cX/JHCqY899fwu35u/BN - z2HM60NcURjB7hwmNX4/PjmNWzPzZL/v3FPIEK9DQskTNOudmML0rD8oiD0d9hAutxej4z6yZ3pZaA0D - ZO8c8dDM8d9egtSxGxetMTiri8Ih8XpS79cZ4fZOBgVu7y2YrINg9QOIPvU4QcPqyWp1DJM6vwbOUivW - QGSMgdi8E7mqSGQqIpAoXE3OmuRtuKHRwjU6HhQMe6dgG/LA4hhBVM5KJJatJmsPa8TNARup8xm+1tnd - R9bkc88hicsllnGrcC2p1Te1QKliYLQ6SZ4KhriLYe80oaa9Ghk/JEMkqYJS3Q0DF3a4J7D9s1V4s2QN - Nmc+hviTLyOvIgv55SeQe/4YUgu3QlRXjbbrN6A12TDoniSzqMDh9lEszjEoGQbF4u/wa+tlmOxu2Ecm - 0dglR86FjxEteBZx2Zsgab4KhaoH17lXJFO04nKLDCrus+L7A7OowOLyUsxODwy2EaTm78BrWU/io6KD - YE126KxDaFDKEZ4Rhg8E+1HbKAOjNZP6TYsL0mtNaFYrUCmrAGu2YWBwLCgw2Ecf4qeGakRmPo203D1Q - dPWjz8TdBGYX0guSIK5vgLyDQa/BDr3NTdAYrYg68iI2HliJiitV6DM6ggLWwt0p/8J9PeFMsRDnJSLE - H38DsXEJSEhKAaOzod88hMjXt+KTz/PQ2WtCLyfl8wE2RbyKkyWFqJLUQdqu4ASvPBBojE4KH9wVtxel - v5Tj5zopuU5MSQOjt6NG0swJtmHtCxtwrUePHsMDQaA3J/9rfJpTgDY1CwWjDwq6dHYK37BzdwJqZe3I - E3yP9ENHsG//u+TsvcNH8dXZMryVlo4ioYjmA73ZnCA7T4BO1gqV1hp8izr6f6fwDafOlKLgdAlidsXj - 29JKJHOCFrWOnAXga4F8gIjN21Df1k1nUYFSY6bwwUvSVjy/bgN2cILKmnokvf0O8r8pRvr7H5JMcwdL - zvkcn1/cvxgqaGVMFL6BX6Nj9+BLQREuXLyCvSkHEB65BcXll2ju8LETyPqikOaXgwqudhlCQkAQ8p/M - R2K5fxKLWbbp/7Dc0CBY8Q+pPmOq0VkzzQAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjIxNUQ2NkYyNEQyRDExRTQ5N0NDRjdBNTBDQjc0 - MUY3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjIxNUQ2NkYxNEQyRDExRTQ5N0NDRjdBNTBDQjc0 - MUY3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkU1NUY4OTYyQTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4lOJsMAAADqUlEQVRIS6WTf0hVdxjGj2beulPvD52aU6Np6tKBhUWsYjIH - prDYSlZjNPsjlUnkMmSx6eJqS/u5zXGtoKKEMaEt2lpZ20RX01Bjad31A8UakdZ0SyrLJfHueU7H0zl6 - U8QXPvCe933e5/3e8z1XCY5+dVKIyJh4HZoI48bQE5kU44a3ISM45TxQCTxgQIM5a/M0m+eHN1OC4TfB - 96mZ78reg9+I50qn3HvwSIU5a+xBcwyka3ajY3DoySgwUJ44P02O/vSz4HlMfqitk7mLlnLRNs3SHAOD - QzoQOYF7de4Gud17V1DTuf/wP7nScUOFubF3559+4QxngUOzfhr9DwZV0AgHVZ99/oXcvf9IUNPZd6hG - 5qS8Ic7IOb2EOWtGDWdKtuzmkj300uwVpa9/gOZTae6qqBQ8myjb4RZbeEyjJcBROt0W6rLaw4unBYYU - 2mfMrmNvpJ4ewdFJe+Hnry7o7rvHBV+v/7hUkJtoab8qobOSZarlhfX2iLhjS5d/IBkrsvlLDmPJEvao - GTlXsKmMS9zqApjnZWatkeu3+uSvnn9NlO2skqCwl2tt4bH7N7l26nXmzqgkFxZVUWOcIfSiZ3BU0odc - 0Hay/px03Px7FOuKXBIUOms/zDwn6pr0OnOcsN0ZlVhEjXFmGHpCc0n9BenvZMulzlvyZ1ePiZLySsG7 - /hYn3VpYXKHXmdtnxLmx4CtqjDOEXunLs3F3sS7lwrWbCoT71hYUC3ITJxta1TsIDImOh+ZA2rL3hdjC - Yhr8pwdlsUfNyLkceEFThxt4TWnxXFf8rTab46WEmo8+KRc8m9jwaQXed2I1Trw4IDgqx2oPK8EFb4T+ - KHsj9fSA+Rkf3ynvYUGi0tjWybv2DXBGxjsiEo7kF5XJ7xc6BHWdzdv3yOzk1/lOu3BxN5izZtRwJr+o - VDX3s1jz4ZkCHErD+WsqiCn4xuPsEfHfvbUqV2rPtgnqOvWtV6Xm+G8qzI09ajmjmvtPy4PXQhBCT+XX - 5ss6CD/wIl5H9SspaVLhrhbUx4QaavG1/YLZVWABPTQvRTnV5DGhNZyBITPz8cqaU1KXSeHmXXLgyGn5 - seEPFeassYfDXLTawr7EzNsgmbOax9M4cfbiKBC+IBDEYjgXn9spfKrduIPHBHkPXke9JcBZCs1KkEqt - NsPZZ4H/gVcQPsAC+HMTwCKQAXhSwpw19qihljPm8GZuBDG8yAZCQYQGc9a8Gw+HN9OJMG54G5oIY4ei - /A9dc78cqtG90gAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 - RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL - ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH - s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW - uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx - xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd - iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ - qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW - GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE - NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n - KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw - qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI - HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq - wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q - 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 @@ -4803,6 +4005,804 @@ ++H/A/YDv9/V87iOlrYAAAAASUVORK5CYII= + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjYzQTM5NEY4Mjg0OUU0MTE5NDBEQTc4ODZEQzk5 + N0NGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJGRTU5OEQ1NDlEQjExRTRBRUVDOTkyMjQ5NzEw + REUwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJGRTU5OEQ0NDlEQjExRTRBRUVDOTkyMjQ5NzEw + REUwIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTY0MkI1RjlEQTQ5RTQxMUE0QzNB + MjdEOTJBQzc3QkMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjNBMzk0RjgyODQ5RTQxMTk0MERB + Nzg4NkRDOTk3Q0YiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6B5sF9AAACe0lEQVRIS7WVb2jMcRzHL7UHanF/Mts5prE/1li3kAfu5Ak7 + 5IHNobBkSC2UIuGJkrrSWRvTmHQWK8U1T8jqUtYwkZpaGjV/Js6to5YwfXze39+fu/v23f36hXe9us+f + 7/v9rd/dr3MQ0X/F4Zm3+K9QhWajNNlBFZqN0mQHS6lMdrCUyqSgimllUsy4XmOmp+QRDllQWbygjjq6 + uimZStOX8a+ixox3pXrM1JLCDAqYJmY7c669M0bff07mcLbtEl9QE8k6V6BH5ooXMsHZZX7ae+AY7W45 + SrPm19LbsSR9m/iRA2bYGefggVePzUgKBzeu9sQpmZ4QcG/WMtk7eLjv0WMz0kOz+TX6MUXvP6cFeNbD + bz6YvQFm2Bk9PPByZO6jksLB5KvRTzTyLikIrG2ktsvXzd4g2hGjYP1ms4eHvb850qkl65LCQW/ntVs0 + 9HpMcPx0K1X4V1Ff/3NzhnphbVDsjBk8Lm/VE44s0ZJ1KS4Ie8uXUvPBE7Tn0ElCzTMqrV5BO/cfEaDG + TD5X6PFFONLygsTF7jj1vxihyPkYNTS1iFrFxm37KHIhJmp43L7qZxzp0pJ1SeHhQGgLJQaH6fb9R1QX + 2EB3Ek9FryLe95j8K9eLT/TB0FZcskOP1iRdkIh23aR7Ay9pzaZddKY9Jup8nIpeoXXhZlHD655b85Bj + p2npLOmCML+dD/iTZhaX3+UvbRB1PpzeygFnSUUvatecRUMzisoOc+x0LZ3FixxYhQyK1cxyZhkTYhqY + RgnM6hmcwVl4ljDI0KS4AC+Kmyli8Jv2MF7GNwXY4QzOwgNv5mWTL7CLpVQmO1hKZbKDpVR/1P8OcvwB + lh7gOXXZq9sAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkNDMTJDMTRENEFDOTExRTRCRDk4ODBFRTFERTlG + MzY1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkNDMTJDMTRDNEFDOTExRTRCRDk4ODBFRTFERTlG + MzY1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjYwQjFGREZDNjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4rRYZ8AAACEElEQVRIS2MQltOlCP///x8vxqqJFIzNUGSMVRMpmCDApokU + TBBg04SEpwHxfwJ4GtQo7ACoABfODY3N+P/773+82C88GWRJBtQ4TIBmKAyziCsa/L98/c5/37Ck/3Wt + fVixT2ji//OXr/8XU9T/zy0kzQo1EhVgMRyEm0uqW//vP3Lqv5Cs9ml+CZVp/OLKs/nFleYgY0EZzQt7 + Dh7/n1/eCFLXBjUSFWAxXENZ1/r/g6evgK5P/l/d1IMXe4ck/L//+MV/RW2r/0IyWppQYxEAiwWT+qfN + /7/7wHGQq84BXT9FQEq9S1Bas0VQWqMVFWu2ANWc2LbnyP/eKfNA6qdDjUUANMN9Tex8/j999eG/LzDy + yuo7icIeQfH/n7x8/x+kV0hGOwBqNASgWbBt+frt/7cCXQRko2Cg9xfCXA5io8uv37bv//J124G+0NkF + NJYRYjoQACWR8f97T99gxSA5oHIpECZCHTvIbDCAGgy34MaDF1ixo08k3LWO3hEY8jC9IBporBDEdCAA + CqBYcPnOU4ow1AKQTyEA3YKz1x9RhKEWyEBMBwJ0C05cvocVl9R3o2BsakCYoAWHz9+mCBO0YP/pGzhx + flUHGGOTg2GCFuw+cY0iTNCCHceuUIQJWUBMBYMX80uo7gQai9MCkJAoENsDcQiZGKQXZAYEYLEAlM1B + CkCuIAeD9EKLCgYGAMLPWmGxemtkAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY2MzBBRkRDNEFDOTExRTQ5Q0JEQkU0NDNBNTYy + QTY5IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY2MzBBRkRCNEFDOTExRTQ5Q0JEQkU0NDNBNTYy + QTY5IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjgwQjFGREZDNjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6+q/BOAAABR0lEQVRIS7WVTUvDQBCGe/PoQQQP4s2jv8E/4W/rXxEFQRAp + olCwfjRUJWK1ltJgNJh+6Toz7OCSzrIZFwce2LDzvs8hkDSMMf/K7wFmbWunCRgFTQp6RhKY+ZephSvh + Du7hoWf3AgPT+XcteLcqcUcUlNMFYYNLuPeVXZK4IwqKckZMZgsveO/u8jNKqMiOKHgrJrWQdqsSUTDO + Pwm7LBK6pzIYUTDMPoi8KGvB+4wVrGCfKHge5VFYwTr2iYLHQUbgWYObg6pN7BMFd/0RMczeVXAuKOim + r1EEBVf3LwSeNbg5qPIL2skTkQ7GKjgXFJzfpFEEBa3LBwLPGtwcVPkFJ+0ekcAL08C5oOD4IokiKDg6 + uyXwrMHNQZVfcNi6Jjq9vgrOBQX7p50oQgLtT3+J1Y3tA6iSBXbwS7gL7P0RzNqvqWn8AE4SSnpUkJk6 + AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFGMTBBQzY2NEFDQTExRTRBQTYyQjA5QjRFNjBF + MzcyIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFGMTBBQzY1NEFDQTExRTRBQTYyQjA5QjRFNjBF + MzcyIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6M0EzRTc1RjdDOTRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + 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 + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjg2NjBEMzE2NEFGRTExRTQ4NTY1QzE4RjMzMkM0 + NEY4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjg2NjBEMzE1NEFGRTExRTQ4NTY1QzE4RjMzMkM0 + NEY4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTU5NUNEQTdGQTRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz5BZhOvAAAD9ElEQVRIS7WWe0xbZRiH95+T6DQxcc7NLfrHTBaR4NyFmDAy + ljFwwERGpmRxxmyY6QbqgogDhqluOpFLlm6AFslGRVlXKISVS7tByzgUOF1vtLUtLVBogQ4YsLoN9ec5 + 3+xXyIiJWdrkyfed9/u979PLSdsVz6wPfyQA/Cehf3DPQsiBECHkBVj4CyGBn00E9xb+DglU4L/35xIM + 7j78qCpAlVqAg6KNkOtqMTPnx9TcLOzjFty5u4CJWR9u++/AM+NBh7WRnM3/cX/JHCqY899fwu35u/BN + z2HM60NcURjB7hwmNX4/PjmNWzPzZL/v3FPIEK9DQskTNOudmML0rD8oiD0d9hAutxej4z6yZ3pZaA0D + ZO8c8dDM8d9egtSxGxetMTiri8Ih8XpS79cZ4fZOBgVu7y2YrINg9QOIPvU4QcPqyWp1DJM6vwbOUivW + QGSMgdi8E7mqSGQqIpAoXE3OmuRtuKHRwjU6HhQMe6dgG/LA4hhBVM5KJJatJmsPa8TNARup8xm+1tnd + R9bkc88hicsllnGrcC2p1Te1QKliYLQ6SZ4KhriLYe80oaa9Ghk/JEMkqYJS3Q0DF3a4J7D9s1V4s2QN + Nmc+hviTLyOvIgv55SeQe/4YUgu3QlRXjbbrN6A12TDoniSzqMDh9lEszjEoGQbF4u/wa+tlmOxu2Ecm + 0dglR86FjxEteBZx2Zsgab4KhaoH17lXJFO04nKLDCrus+L7A7OowOLyUsxODwy2EaTm78BrWU/io6KD + YE126KxDaFDKEZ4Rhg8E+1HbKAOjNZP6TYsL0mtNaFYrUCmrAGu2YWBwLCgw2Ecf4qeGakRmPo203D1Q + dPWjz8TdBGYX0guSIK5vgLyDQa/BDr3NTdAYrYg68iI2HliJiitV6DM6ggLWwt0p/8J9PeFMsRDnJSLE + H38DsXEJSEhKAaOzod88hMjXt+KTz/PQ2WtCLyfl8wE2RbyKkyWFqJLUQdqu4ASvPBBojE4KH9wVtxel + v5Tj5zopuU5MSQOjt6NG0swJtmHtCxtwrUePHsMDQaA3J/9rfJpTgDY1CwWjDwq6dHYK37BzdwJqZe3I + E3yP9ENHsG//u+TsvcNH8dXZMryVlo4ioYjmA73ZnCA7T4BO1gqV1hp8izr6f6fwDafOlKLgdAlidsXj + 29JKJHOCFrWOnAXga4F8gIjN21Df1k1nUYFSY6bwwUvSVjy/bgN2cILKmnokvf0O8r8pRvr7H5JMcwdL + zvkcn1/cvxgqaGVMFL6BX6Nj9+BLQREuXLyCvSkHEB65BcXll2ju8LETyPqikOaXgwqudhlCQkAQ8p/M + R2K5fxKLWbbp/7Dc0CBY8Q+pPmOq0VkzzQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjIxNUQ2NkYyNEQyRDExRTQ5N0NDRjdBNTBDQjc0 + MUY3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjIxNUQ2NkYxNEQyRDExRTQ5N0NDRjdBNTBDQjc0 + MUY3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkU1NUY4OTYyQTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4lOJsMAAADqUlEQVRIS6WTf0hVdxjGj2beulPvD52aU6Np6tKBhUWsYjIH + prDYSlZjNPsjlUnkMmSx6eJqS/u5zXGtoKKEMaEt2lpZ20RX01Bjad31A8UakdZ0SyrLJfHueU7H0zl6 + U8QXPvCe933e5/3e8z1XCY5+dVKIyJh4HZoI48bQE5kU44a3ISM45TxQCTxgQIM5a/M0m+eHN1OC4TfB + 96mZ78reg9+I50qn3HvwSIU5a+xBcwyka3ajY3DoySgwUJ44P02O/vSz4HlMfqitk7mLlnLRNs3SHAOD + QzoQOYF7de4Gud17V1DTuf/wP7nScUOFubF3559+4QxngUOzfhr9DwZV0AgHVZ99/oXcvf9IUNPZd6hG + 5qS8Ic7IOb2EOWtGDWdKtuzmkj300uwVpa9/gOZTae6qqBQ8myjb4RZbeEyjJcBROt0W6rLaw4unBYYU + 2mfMrmNvpJ4ewdFJe+Hnry7o7rvHBV+v/7hUkJtoab8qobOSZarlhfX2iLhjS5d/IBkrsvlLDmPJEvao + GTlXsKmMS9zqApjnZWatkeu3+uSvnn9NlO2skqCwl2tt4bH7N7l26nXmzqgkFxZVUWOcIfSiZ3BU0odc + 0Hay/px03Px7FOuKXBIUOms/zDwn6pr0OnOcsN0ZlVhEjXFmGHpCc0n9BenvZMulzlvyZ1ePiZLySsG7 + /hYn3VpYXKHXmdtnxLmx4CtqjDOEXunLs3F3sS7lwrWbCoT71hYUC3ITJxta1TsIDImOh+ZA2rL3hdjC + Yhr8pwdlsUfNyLkceEFThxt4TWnxXFf8rTab46WEmo8+KRc8m9jwaQXed2I1Trw4IDgqx2oPK8EFb4T+ + KHsj9fSA+Rkf3ynvYUGi0tjWybv2DXBGxjsiEo7kF5XJ7xc6BHWdzdv3yOzk1/lOu3BxN5izZtRwJr+o + VDX3s1jz4ZkCHErD+WsqiCn4xuPsEfHfvbUqV2rPtgnqOvWtV6Xm+G8qzI09ajmjmvtPy4PXQhBCT+XX + 5ss6CD/wIl5H9SspaVLhrhbUx4QaavG1/YLZVWABPTQvRTnV5DGhNZyBITPz8cqaU1KXSeHmXXLgyGn5 + seEPFeassYfDXLTawr7EzNsgmbOax9M4cfbiKBC+IBDEYjgXn9spfKrduIPHBHkPXke9JcBZCs1KkEqt + NsPZZ4H/gVcQPsAC+HMTwCKQAXhSwpw19qihljPm8GZuBDG8yAZCQYQGc9a8Gw+HN9OJMG54G5oIY4ei + /A9dc78cqtG90gAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 + RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL + ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH + s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW + uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx + xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd + iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ + qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW + GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE + NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n + KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw + qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI + HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq + wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q + 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlDMzFEOUI4NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 + NEI4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlDMzFEOUI3NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 + NEI4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDk5Mzk2NTZBRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz73sIMwAAADIElEQVRIS7WVa0iTYRTH56Uiysvm3TkvpLl5DRIvQYWVWl+6 + iNEVg0yhQqloQZHkLT+Y0YdAs75IpEUhzERZoZhsRpZlS7soblotsRwoxhqWeTrnYZtv+u7NsB74cZ5z + zv89/z17HzYRAPxXeIv/EpFXcOyi4BvKhfehv4FvKBfeh+ayqIUDlIgBgT8whpRYoT2fhgvNVJKBQT9s + hB8/QZDPpnEIjEhg0J5Pw4Vm0mwygG9T06BSqQQhTUhUMoRGpyxYT7OZwfhXC6jVakFIYzNYqN5uMGKa + BI1GIwhpghXJaJJi13d0dEB2bj74hsWzSDlXbzfQG02g0+kEIU2wIomdovzKdVifngnFFytBeb4cLN+n + WaSc6hfKKqB/eHTWoHfwExgMBkFII5MnQUD4WlAWloO26wVs35MDmifPmQFFyqlO/aKKqlmDp31DYDKZ + BCGNTJ4IPqHx8LJvACbNUw7p6e2HuJQMNIhhBuaHj3vBYrEI0tb1BoIiE9kJ9h7Oh7EJM+g/jEJuwVlY + s24ri5RTnfo5BedAIoueIYPumvomuHzjzm9cq2uCq7UNUH2rEarr7kNd0yP26Y+eKoSWtk4wfpmAg7kn + ITY5DUorq1g8cOQEqze3aplOEhRtJoMcL1mMTixV9IgD5a/tSBVDYql8AKOBQLEJtTP08gY/jjFiktKg + 5FIV21Ok3NazvmR2AvrFkCAJyGYk1comZAuHDM/AyLvHThfBveZ26NOPwI59eey7LsbhFCmnOvVJ5+Ef + rrYZLEU8EZ85+HLwW7ZCLMVTFWdkHoLut+/hgbYHaE9XN31XNsupTrWV3jKVs+uS3cyAD0cLe331jW3Q + qRt0CPUlQVHDKI+fN9iGo4W90uNnyuA2vvRtWTlQgxeg/dk7FimnOvU9/CNqUe47b7ANRwt7AfjpKvAK + Gt18Qur35ymhRfsKKLr5hN7EyzDq7humWrrcfSfKxbz/QlwcLDck1snZJdUzYHUDmk57+K1qdXJyzsL6 + RmQD9ZmObygXB8sVIRO6fXQB4hC6eRQppzr1XXmHclnAckFomLc1Um5dItEvhZ97MQXP9N0AAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhDMTdBQjRENEFBRTExRTQ4QjQyODY0MDNBNTJE + NzNCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhDMTdBQjRDNEFBRTExRTQ4QjQyODY0MDNBNTJE + NzNCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NUQyMjc4QTlBQjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4eHsDfAAAB00lEQVRIS7XVWytEURQH8HniTTNHLs0NCXNcXjTN5dH9g/gM + 3jx590QhFDJS0gyTGmpqaqJIMW4hzlAoOaWISS7LWifntI3ddnTGrl92e/57/We/DBsA/CvuYSHZSr0t + lvCGsriX/oI3lMW9lM/SwgF9SEHwizs08IX2vAyLZvZRgXJ+cQWv7yB0q96Ds86voT0vw6KZNJsK4Pnl + DWKxmBBlqhpDUN0UNp2n2VrB/WMOEomEEGX0ArN5o+BGfYB0Oi1EGa8cwpKw6bxRcH6lQiaTEaKMVw5q + rzCbNwr2z65BURQhynh8Qe0VZvNGwdZBFlRVFaKMxxfQXmE2rxc8rW3sQy6XE0puHoG7IaC9YnV9j5th + pbZPqOCDCrbH5uIwOD7/zWgkDkNTizAyuwQjkWWIxFNQWduqmVxI/MiPz6/A8HTUuDMTTYLkbrqhgt5S + T3PG4ZJ3HE7focElZx0u3yn+VQiG1ZLymmm7s74f88f42S6bl9zyJZ6d6Xckd+Mt5ieogH4xJORHHajt + SzvqZPSgECpHZSiA2DztuxBlad+NgnpBEbIjusiiYboKRF+kGFHegUR5ImkFv7G0eAPzWVq8gfksLd5/ + oULiHhYS97BwwPYJlSCUgVubViQAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJEMDQyOEZBNEFEMjExRTRBN0MxRDBCNzJGRUND + MDEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJEMDQyOEY5NEFEMjExRTRBN0MxRDBCNzJGRUND + MDEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkRDRkI1RDVEMTRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz59jfe3AAAEbUlEQVRIS8WTeUybZRzHF48/pnFOuQRajkFLgQFb5iRLNJr4 + l/EPgsniUI4xZDAY1zyxwApsMJyIME61rByl3DfoYGBrgbWUY06FcZSCha4rQ8jYxkqPr2/fvkv8o2Sg + S/wkT970eb6/T5/39z7Prv8dt/Oql4mR4HZJ3ccoXFxhVCzB9DT9JueJdSq6c1wzVZFupepVzxu34XVj + CaEDi1jX6hF8ZQoeokl4iBVwzV9YdU1XRlIl28eVo8phCdXwGltEeOUsro6psaHVwcSDh5volc4iOO8X + 7KuVwb1hEi7J8myq9PEQO//I85oafr0KtEpUpNSETm+AwWDAvfv3YTQaybnm/t/AyO6Ga+UonJOnIijF + 1hA9tWI2qle9RxcI+RIpmZpTIfBULhIyyqHVahHPKcN70TmYnFFCp9OhqXcc9KwW0DOHVl3YU1aUyjJu + F1SpfhO3EM6bMMsVt+D8Zhz2HIpC4oU6bG5uIu4cD3tfTwAjIBNypQYbGxsISquBU34PaDHiVEplGXee + SuIjVaBv3Lz7gJg8vHg4FlZvc+ATVoLipiHsD8qCXWAO7IPK8MG5FjLXKboOeoYADkldUkplGWb7vOb4 + 4BzxIXXQE/1m59WDXdgBvxPfwz6UC4eQUth/WIBDZ2qQXj+K7IYRImeE5s5fOFrcDPvPapcJzVNmmwVY + VxWG9U09uau1tTVymPpc0iYFLew7OEUJ4BwtALfvJpl5xMrKCu6s3cUrn5YbCM1us80CrJZZVWjXr7j3 + 4CE0y8v4IrcaH+cK4Bv+DRyPl8ApphYuia3wZ3eCUzOA1PIfcVuzjHnlIgK/vgy7mHzTG+w12yzA5E53 + edYPo1c2i/X1dQTEfwvbwDQ4hhXg8OcN4P48Df+UTrgkNIAeW4Hg3Hbo9Xq0iGSgs4ls5CUhoXnObLOA + S8pkhG/bdZzgDZJnffT3GXieLAA9XgB2/RjZjuQqMWhxfBw824H55XWyhcfy+HDNqoB1SH4Codn6G7iw + p3d78EaVPlXX0CaZgkqlgly1gpCiK0htHCH/IL6oFcEF3ZjT3CUvXqv0DzDSS0FPq1a/8EbYS5Rqa+if + SAJ8KoeNR7gitEsnoVQqSbGOkJmYX1ggxaY70SabwIGMUrjn8I3WIXnBRPnWu/8nDnE9Sd7cAaP/ZSES + 6/rRKJRArpiHXC7HzekZNIukiCyrhW9mGZgXa4w2kUVnibJnzdXbxP5URzyDO4QjxGl5i9uNpMZeKP5U + IrywAq9yCnGAOGGMonbYxpVnEPGdyR9BO/MTj8kfgXeNFPt5IngVtoF1kQ9WcTs8qgfgmNreQMS21xZL + 0E6Ln6ef75tg8sfgXT8O77oReAkkYNXJ4PRV/4ztyfo9VPTf4xjdf9CpQKzdxxuGe6UMbhXEmc8V6mze + r3qNivx3HGN7UmglQ6CVDMIxXwybo5UcaunJQD8te9rhyx4JrWwItlGNUut3y5+hlp4cDhFCpl14k9jq + nR+Y1NTjIe7NlmMnWKoHsOtvjWYcKpheqFQAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERTg4QTFENEQyMjExRTRBODEyODk0M0RBMTc5 + Qjg3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERTg4QTFDNEQyMjExRTRBODEyODk0M0RBMTc5 + Qjg3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjJGOUEyRDEyMTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6wJF34AAACl0lEQVRIS62Vy08TURSH73/QhQtXVnBhxEcMiUkhbEg0hB1R + Q1i68C8wIW5cEqMLN7ho2Ji4YiEhWq0prYUhfULbadN3obTaChobtZEUsFY9nnPS6WM6HYowyZf87j33 + nG/amaai9geOBYA+4pTxihmBE8DcTQB4J8em/9IwSQyagmrtL+z9rMFmvnhkKvtV7tcVHPz6DVsftulA + AckdhUg8zf19eoLKAd597iMLMItewfOxUDTN/bqCH3tVSG8VWIBZ9AoJApEk9+sKvu/uQ2IjzwJkGtH8 + OrTwy3Hu77vIAnV9mgWlcgWiqRwLjAMmkOMbPbNTKnN/JJntqJGEBZ++7oKcyLLgLN4JrU8Cms2C4pcy + BKKZumCI18temQ/8DzSLZlBmQX7nG/jCKdpgAa0driCtY5iFHuqHSjNoFtaags1iCdzBBG+QgNY2aZ0F + mIUe6osENAtrTUEq/7kDq9PHAszU5yYoq9f1i9cUSCD5ozxDEeTsrhAoONwyxLLb8MrhYQFmZYCHsnpd + v3hNgQROb5hnKIK29944MAThTBEWbS4WYBZ6qC/sKSy5ZJ6BGUQg8b4Bbhjod4AZXlhXWdBa10LrIVul + AM9ggS+aa6AIMMO8ZYUO0KeyIOMtZyaQpXpNi4LFucYzMINwhbMNcMNw5oIJMMNKIA0LNg88mZuH/ssj + dPgBMnN+cBRmny1wrRtSMMMzWCCFMg0UAeY2Fh0+GL5xG8Zu3oHXUrCj3g0WONdTbeBm21/o1N17gPtg + 98Xh3VoS3qzKMDI22agfglnY/Uld8NDc/ZlZwAwvl4Ngun6LGh8rdfVDViNs3rguOOzq6XOD8PDpc7g2 + OkHDH7XWtYa2It66Y4eCQ8cRfpvUNa2hTUD8A6JMaBvCyTdJAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERjY3MEZENEQyMzExRTRCNDlGQUMwMzk0OTAw + Qzc4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERjY3MEZDNEQyMzExRTRCNDlGQUMwMzk0OTAw + Qzc4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjhGOUEyRDEyMTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6GKmpFAAAC+UlEQVRIS63T20vTYRzH8Yforj/Ei24UiSgKIygKi8oyxZQo + cvNYeXaesmzqPGu2POd0ulSsnIdaurTSTJ3O6UxTPGya5vCQx5AuPn39RbHop7nZxQt+z3ie93e/Z4w1 + p7nsCoBt8R6yBF/UHPv+Wb0rfFFzm99CRIwEW1gnqXzxTXxRc0ydctm4OlID2sxrw6iCtiwItC+A2P/D + frLnjwGNSZdMq6N1WOvLwFpP4l/WdRlY6Jaio9Ab7QXba8sVoDHZGdT8PYS9THDqMGnLsKpNw0qXGCua + BO55VZdNQ6U/DRRibVCGb+N1pH5bukoRqHmDHOIG1N8/X2F4I8WyNhtf2+9hqSsZxqZ4upbb6HsSZLHO + Im90ym6hNVcIaktYTexZyUelGEvaHMy/jcFiZxo0xX5Y7ivGcn8JkVmA9uvlWBmqwpJeAWovs+poR99O + eRgWtQWYVUdgrj0FH+i+F3XF3NoappZYGJrEoLaOVYpOOTY/FGJB+xjTqnDMtMTTAC/Ma/Ix/TLUKl9e + x0JfFQpql7PykBP7lWIXzPeUYLIhHCPKCLr/AMy2ZsKoDLTKdNNdvM8TgNpRTBZwfJ885CTmaIChPhwa + mS+GnkdhqjEWY9X+VplqvIMXEhdQ24mZeuSs0N/BNNWWj4k6EdSZHhhXxWH0aSCGFd4c4Tk7zk7XBlUM + FKLToK4Nm+0qYnneRzqGGiSYaIiiyZdhVCdgqFSIwRJPjucZW85O1pvnRmvDkO9zFNTdy2Y6HjGp4HCF + 5kk4xhoiURd/EROv4tBfeM0qAyUC9Mp9QM0+7o829T6LZV0/mNycS6+nFKFWfAGj9ZHozfGwil7miZYH + 7qCmghsw+S6VpV894KuUuKFbfhNNqa749CwY3dm0toK+VABl3HlQM5obYHybwFLc7W1y/Y5BlX6FfgNn + DNcEY0DhZZX+MiGKbh0DNR24AYYWMSfJzc6GZBApwS5skIzNODcg0dV2V36FtsJ7yBJ8UXO8hyzBFzXH + ++H/A/YDv9/V87iOlrYAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 + RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL + ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH + s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW + uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx + xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd + iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ + qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW + GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE + NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n + KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw + qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI + HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq + wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q + 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA3MTZBNTkzNEEwMjExRTRBQjdERDhBQkEzMDEx + MzZEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA3MTZBNTkyNEEwMjExRTRBQjdERDhBQkEzMDEx + MzZEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTgxNjM4Q0YwMTRBRTQxMTk2M0JC + NEQ0MzNCOUIxQzgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + 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 + 0HWhD93n++Dbua+fK9NvoTM5+Udx5mye9NjgCZNf0HEnpN5U5RbPa9+0bdfQ+0eOPzp5ppvG96JfjFkM + nXR/vOP0ePOu/deyCuf8JVSorJny7HQdvR9MTCUm+fUYgyehazLBVCCd8ttpJbQANtO3cDjWbO9werzd + ruK5F9Ld3p7YBEdHCE/WMi0s0jf5mefm0e+ZCsXEf85i/98XsP4NaTpxka74X+IAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJBREU3RDk2NEFCMDExRTQ4OUM5QjZFOENGQzJF + MDk1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJBREU3RDk1NEFCMDExRTQ4OUM5QjZFOENGQzJF + MDk1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MEM5Mzk2NTZBRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz52g1XsAAADeUlEQVRIS62Va0hTYRiAXzVNoQs6oUCttJu3aqatrLxr2k0n + W6bLLlLSxTKCKLoQQUg3IbLMflSgBRGRP7JSSzGnWalYdpnV1MQu1tBWWklqvr3fp2dsOytSfOFh3/l2 + eJ7tnDMGkkmzGCqigsARhPlUQqCi8nEd9v7GEYP5mFcI4K/e/hGHeQ2B7p4+1HV8Nf6Kw4a5GGxtCHzv + 7sU2nR4lbr4/AUBFKIeD4GKYBL79+IX6rm622U8nSgnX4SC4GCaBL50/OXwTwIUY1ohcQkCn/84ZDLBP + I5p16TBl7XYIoaXVwI54RC4h8LG9k/OvQPIOmEZUJW2F+XRoPbBrOiKXEGj9rOdYCqi2gxXhnLQNIo6f + n9tEa7ViI79PoojIJQSaP3RwjAOJaSAjjhL3N+9zrD+W499UVJnSeeVmWDvtlcWlgCedZnK5RC4h8KZV + x2FryQSYmrAVjh/MnP46/57yS7VmZ9+zxr1Yr92NtQ1pWFmfiBevL9QpUqE0JhHcyWuImLsMAU1zG4et + V6yHC1l5oe+evNmD1ZoteL9OgaW1K7GkRoF3H8ZigTocb5bFY8bZWbpoFVwh7yiCR8xdhsAz7XuOh9QD + D2R6twyIEzG/JApz88N7z+T5d+VcDezKL43Ea4UxeCjTqyNUDpUBYeBFXjvjgOAyCdS9asXDJ3NQFj3u + 7eWCyG/FjxR45OyMr6s3S1qCYqE8RA654Uq4dOiUV/v+E9P0i1ZA9Zwg8COnA2HyDZiLYRw4dyAjC50n + z8awBBvNbbWyZ+8x10+By+GONARCbe1gDBPJloCvfKODluQ10mD+qDK5LWFyD6pfvOUYBzydXL0v2I+V + rI9Mhud5BQE9i+RQPt2P30BBYrM4HmYSNf5REGS0b5CzYdKq+iaOITA44wmPiLXwaFfGhDbZMkinYxNJ + 8CpwXxgHobQcPbhv8XegrtNyzAPsOtqHJUPeml1jm/1jYDkdM5G5hB3bDL6KhknLal9xzAN8gpMgVZHm + oKUAuwx29H420c9O/l9KHms4bC0KLFCAY6CSHr+VoHJy88lWbEjHoqoXWPzw5ZCxGKCxkslBLo22L1+6 + ahPeUj/FwgfPh8zpSzfQ0cWrwVKAjfXcWFjjPm9isWSSbx/7JEPF0cWzcYzE7dTfAmysfSLB2z0Awm1H + 8ycnjrD4N/kX4gEg8A9sAFSe4VuPvgAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkEzN0Y5NjgxNEE5MDExRTRBMzU1RUM1MkVEQTU3 + REQxIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkEzN0Y5NjgwNEE5MDExRTRBMzU1RUM1MkVEQTU3 + REQxIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MUU1QUVCQUI4RjRBRTQxMUI2QTlC + RjEwMkVGQzEyNEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4Oz1B+AAABO0lEQVRIS7WUP0sDQRDFt0snIcEiklhGJLH3k6bNp0ifYCUo + KWwMIRCx0EYxEEL+IOPO4SxzczN7d7gGfuzd7Hszd9nHOQD4V9RiStRiStQi0b68GXkgwkjzcdQigU1O + 32CC+9IjUYsENvjY7EySDHhev5skGXA3X5r8aYA3lx0wET1otYgmNMcOku+jXtMg4QJFJMb1a7uPmjUd + rVzHDfDy9pmJaZViCe5rPq7hYpgvXjPw2hNtTqBOevk+F8L0YRGQQosyHxfSf0jUegPLZwkrNedYfi6o + 9Y2RWP6cACPHYnf4XauQablfHYAxo6jt9sfwRGWgVvrVASKmdd7g2OoN4P5pVYhqbgCPmnPuzHPtua1C + s9OHyeyxEFU+IJcCb2p4zj3dKjQvrsat3jD4CwNCIcEv14/fpAfcDwXsled4Tu6+AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlGMEQ1RDBCNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 + MzBCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlGMEQ1RDBBNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 + MzBCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzFDMDRERTRENjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6zemTaAAABh0lEQVRIS7WUvUoDQRSFEwiBKPEHsRAkb+ArWIsv4CNYCSKI + jRD8a1S0m9QhdTobG5uARZogBJSkiLASFJJChQiRcJ2z2bnMZtbxCnrhY3YO556z1aSI6F9JFP+SRBEs + FFaUhoSopAyQKGIBi58jEuErcQSAhY/hyP5DL8Y7mQMcAcD8Phh+u2Tzk9cRAMz914G4wOd1BABzt/cm + LvB5HQHA3On2xQU+ryMAmB8en8UFPq8jAJjvWk/iAp/XEQDM9WZHXODzOgKAudZoiwt8XkcAMN/U78Ml + CcY7mQMcAWhz+FRc3zZFREXypwKYEiG/e+ykc1WYVRrCGUk8nGUHsyic6nKeetUK4dTESjjLDjZUlqaV + hiS8lEsh0Z1LTFYs2FBazFFwcUzB+YE+T8bffD+i4LRIwSV0jdZaO5vhHXtRPmfFgg1n81mlIQnt/W1q + bKyH34dz2XKUz1mxYBaFU5zJUG1tlXDu5TMcjuEsO5hF4exOpZWGtnLpWDiGs+xgFv9gxlmU+gIVyyIX + YCSg/AAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + 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 + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVGNUQ0RjNENEQyRDExRTRBQ0ZFOEVGNkU4Rjcw + RkEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVGNUQ0RjNDNEQyRDExRTRBQ0ZFOEVGNkU4Rjcw + RkEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzUxNUY0MjEyRDRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz7jldwbAAAEyklEQVRIS6WWDUzUdRjHoeXWVktIc74MLREMUxBQV4RYkBmL + SBwSoZIFCgULlOJFDJDxqkiAqGgoiIQ6jaFLB1EqUaC8iMgdL8cJB3fHwR13HO8Hh3x7fn+pwN01nM/2 + 2X77Pb/n+33+v/3/95zBbGOVnZM58QHhRKwgnp9KPXuQ2CtJ6ScOjGo0fcMjI93llVX55us3rqbUc49P + zDLyw9auL4iw5l+IsMY//BRujcygdcg+ug83rpzCsVhf3C6+hHg/W+R++985BtU3pey1cCCpOYQhJzo9 + 8kPX1tZcDoS0Jp2jrCgWmakhOJMVA4GwBd1KNSQ9veiUdeNifjqyMsJxveD7f8+z2rPBlg0kNZ9gJjMj + L8RqQlSegIbLX6CuYAcOBm9FHe8B2rt70SZTgNfehTphJ+paCaEYjSIJkmP24PaPnrhfsBP8okCcCbZ8 + RFLmxIuc6PTICV5Dh4IxNqSEemAA6adzwBdJ8VeDEL/XNqGkmo/iKh4HW5fWNCL7QiEqq2sw3N+Dijwf + nPx6FUjKkpjLiU6P7MDVqL/gj8nJSY4bpbcQnZyK8EOJCI2Ox3dRcY+JjkNYTAIi4w4j7+JlKBQKjI+P + 42qqJ9J832AGawkjTnR6ZPm/iXvn9+ARiWsnJjCu1YLeGshJQCKVolMs5hBLJOiSydAjl0OpUmFweBhj + ZJAfuxVJ3ub6DTJ9LVCd40Pij6AZ01IRoWVGumE5dmZEM45RjRbnolwR72Wm3yDt85W4e2o3FVLnGg1G + xsYwSvDEdxB03gEa6vJwSopOhkZHkRPhgkPbTfUbpOwwR+XxXdT9OM79EQ/lgBLNkjpsz1iMP5t/oU7H + dIoz+oeGcTbUGVHblus3SPJYgfI0LxLSIPmaL4LyHOB5bClK6gswNDLKoUucoezvx+n9W3Dg49f0G8S5 + LUfZEU8MkpC8T43YQi8UVp3kutOFenAIvep+dClUkClVOPXNZoQ6L9NvEE3uN+PdMUBvRXevCgqVmjob + gGpgEH1PwPZYTq7soy9bDolcgRNfOWL/ZhP9BpEfLsVvMW70kQ1C2qMgEyVnUiUoQ2CuPZTUra7rYYi6 + ZDi+910EvbdEv0GYkwlKIj+BijrL+jUKbdJO1LZWwD19EUrrr0Cu6tMpzhCKJcj40gEB9ov1G4RsWoLi + UBe6V7r/n70RkPMOPDJMcLXqLPc0DF3ijBaRCOneG+H31kL9BkF2i3B9nzN1qoagQ4yDlzxQUE6/lHRd + XfLeGbA9cbccwk4JHggegi8UIc3LDj7rFug3CNiwENcCt6CH3ojm9g7qqoN79HZpF9rpjjumYGu2x3I8 + 4UNU85pwv0WAox5vY7f1/xj42SxAkf/7kCmUuNfUiho+FTa3gtfaRh22o6lNxMHWbI/lKut5uFVdh7sN + jTiybQN2rpmv18DQ1+rViUJfRwia+bjXLEB1YxNqyai+VUiditDY1sHB1myP5e408FFR34Cb5WVIdLXF + Zxbz2DywJYw51WkxZ9eqebxUFyvk7rDHD24bkOhig4RZEM/4yAZhm1Ziq6lRG2mxscmm2owwdF72suOn + ZkZCTzNjuJsaYdtT4vr63E4L4xcCSYv9IXiJU30i2BxlzmzkWRHsLp8GVsNqp2aygcHfZtZtYIryU78A + AAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkUzNzJDMjE3NEFENjExRTRCNjE0OEVEQzI4MEM0 + RTZDIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkUzNzJDMjE2NEFENjExRTRCNjE0OEVEQzI4MEM0 + RTZDIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI3NUQ0QkNENDRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6PyaLfAAADMElEQVRIS6VUXUiTYRT+vi3Tzd+ps23+3KRigtiPkolEQReG + UYTkhWatpWlWGkRdddfdSPImqUAJjSIT00oxLJIk0cR+tFSyzDJtgaMkDEPkdM7ZPvm2vS6jBx6es3Pe + 8zzvtm+TohLS/ov+AACStLgEQuJyLRJWYK1yzh/+FgCoQrpnfM4fOGBhcUlIMkEVkma4H4i1y2kFcMD8 + wqKQZILKZqTqmlTAWrfvMjhgbv63Dwm0hLWQohn1eNEbzrlfPiTQAtZCKjP1GXdAIC+r4XD+9CGBFrDm + RVJ1re6pZ0GyHHMvIawauYVNCFPfvvuQQAtYC6meKXU0amNsaGN/ZR60xIf9aIgN3cpGE9OzZCZ85nEm + pGiWlLABmuJCnUOXrNB7chdct4TUo32ANDbp4NuielDpqWfePdaPX6GrohSK4uLhlCEo96YlZLbOFHzH + oJXjMSBcGn4/zQGovEDqXXtzeTb+BTrKj0J3+Q54djYP7EZdTU2MPjFSK8eieQR9QtLg6GcOQPWgqKeQ + ZyOfoK30CDw+lg2Ot3Z4VLoNqo269mCNHIa2WjYn9A1PcAAqU6m9VV3TF9psOwwPS3JgZugCdNoyocwU + jU+RlImWBpezGz0vxzkA1YOiHvPFO7Ca1kGHLQtmXp2HdutmqN+/F6JiU+h3kOpyVeHJwBgHoLIpqajm + 189HoaG4CNqsGTA1UAWth9Lg6r490PygGyLjUikgzuWqQlffCAegelDdUwLqigqhpXgjTPYeh+bCFCg2 + RkEk3vxuVz/P0c43oLP3DQegLhspNalSFxiNcLswHT48LYNbBUlQk7ebzenmyhm08w1o7xmiAP6hRZiT + 70eYkzpctUuJWdHmwWs74+F1Uz7cyE+E4ohQB5mHm9a3GywpTXzektyKduIAIsKI3ISkL4rIdYle05C9 + VrZVBmvtl7eboUyv7V4jSQdwRn8FdI72iErtCUxnIuifkJ5hUqUOq9Jr7OeCNU6bTpNVqtMcDJSldOwn + KnOk+jypJ5QANRWc0cs5SEelXr54QidfwVYAMoiHq4W/gNM6OaNCJ+diaUIqN/43+Atwg27t+9ZXBUn6 + A2MdqQeVc5pWAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjUzQzNGNDI5NEQyQzExRTQ4QkE1QUNCMEVDRDZF + MDVEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjUzQzNGNDI4NEQyQzExRTQ4QkE1QUNCMEVDRDZF + MDVEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI1NUY4OTYyQTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6IsaOmAAADF0lEQVQ4T62U/UuTURTH+0nICqRI1ERMMyNQe8N0ChqBwQhN + yvwhEgJjVCqJ/qCibZo6tzQ339h6Nre5prapUzc1XzItX1ilzuWMLLVAen+xf6DTuTxjdxsFVj58ebjc + c+7nnud7z3228DbpIaDFH/CfoqCn72DIDvNfPDM2KAqyr8PcJxqY+QBTb8kkjocXQTsKigGwfqYJHqIg + 1OxHGHvlWPx4hXB1YyA3g4CBhqst+piEnrDA3rA95vBAY1x8d7lq/DVZwm5PQZNvoKYdypSgHgbVEIh1 + cLOZzOCbSSsyRQRba6uWtcpVLbPcwlglInNUCJNWWKqABqMLCGvGlfpJELaQ/V1Vd1lujAhe0chtUrH5 + ZExnmJ85MdomEa+qZMbIEF2BHGunILSjdZwYgTt4gJqjjj0Rltml1Zq9AeL0Mn71Wn2mtDU80MIvsFTw + O+KPIoWC8BNYRIUaqrRQroJKjQOk9N+xLBF2pXJFKfnsDGYa8gS6xOO2whyMuoHaHpGzZ/pBM0IMrtXD + nT4HqNHXe0lYoogMFeQP4jbSDkCPTUyXmnNoPutSo+9WN5DEQDyeWCWnhqm4p7Oimt3b54rzmmKPVHKz + 0Xg0AU1pz87VJp+yXOfd9t3mBmLXsGrsJhSsDtF4iOWxKdpzyQNnuRW7vEUp13obFG05OVUBPtO5V1Sn + k5q4SX8ENfWA6C7xHsP981Bb2sf38ZKd4JhSuXUJHPHhg/WJnAeZFw0Xzt/w8erRtLmBnB/CSmaC599I + 2PYVRl+CXigu3R9SfCC0Pf1MZ1oqvqvjogX7gtRFJfb1n24g7GblfQcFP2fkBYm5anxqQcbLKgzyK/Df + WRTkV5+RMTg84ZrgAOHo4ZIDVNdJw67CpsVLZ5gifj97Typlq2ZFQXj8LKh5EHpnaIar8N+Al5l9Y9Vs + T7OiIAzjqaMsa6QJnBkeWvgOHdPkAuIV67PSeQpCYYZplsZ+KyyWLRyFF8D553EDbURY770J0rrYJbda + SYE4iWb9NcgpRKDrOMAWwYP6d5BTaC52zyaAWDlAm/DweL8AX9zXukfxHsIAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + 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 diff --git a/TreeUtils.cs b/TreeUtils.cs new file mode 100644 index 0000000..571fa7c --- /dev/null +++ b/TreeUtils.cs @@ -0,0 +1,152 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using GeoScene.Data; +using GeoScene.Globe; + +namespace Cyberpipe +{ + public class TreeUtils + { + /// + /// 构造图层tree,最多解析三层,若地球存在,则只构造指定地球上图层已存在的树节点,若地球不存在,则构造全部 + /// + /// 所属地球 + /// 要加载的树 + /// 数据来源,实测数据/施工数据/规划数据/红线数据,为空则展示全部 + public static void InitLayerTree(GSOGlobeControl gsoGlobeControl, TreeView treeView, string viewDatasrc) + { +// treeView.Nodes.Clear(); + LayerConfig layerConfig = Utility.layerConfig;//layertree所在的配置文件 + List datasrcs = layerConfig.datasrcs; + foreach (DataSrc datasrc in datasrcs) + { + if (viewDatasrc != null && !viewDatasrc.Trim().Equals("") && !datasrc.label.Equals(viewDatasrc)) continue; + TreeNode rootNode = treeView.Nodes.Add(datasrc.label); + List layerTypes = datasrc.layertypes; + foreach (LayerType layerType in layerTypes) + { + TreeNode secNode = rootNode.Nodes.Add(layerType.label); + List layers = layerType.layers; + foreach (Layer layer in layers) + { + if (gsoGlobeControl == null) + { + TreeNode node = new TreeNode(); + node.Text = layer.label; + secNode.Nodes.Add(node); + + } + else + { + GSOLayer gsoLayer = gsoGlobeControl.Globe.Layers.GetLayerByCaption(layer.layer); + if (gsoLayer == null) continue;//将不存在的去除 + TreeNode node = new TreeNode(); + node.Tag = gsoLayer; + node.Text = layer.label; + node.Checked = gsoLayer.Visible; + if (gsoLayer.Visible) + { + secNode.Checked = true; + rootNode.Checked = true; + } + secNode.Nodes.Add(node); + } + + } + } + } + } + + + /// + /// TreeNode选中状态改变,对其子节点和父节点的选中状态做相应改变 + /// + /// + /// + public static void TreeNodeCheckedChange(GSOGlobeControl globeControl, TreeNode node) + { + if (node.Tag != null) + { + if (node.Tag is GSOLayer)//图层 + { + GSOLayer layer = node.Tag as GSOLayer; + layer.Visible = node.Checked; + globeControl.Globe.Refresh(); + } + else if (node.Tag is GSOTerrain)//地形 + { + GSOTerrain feat = node.Tag as GSOTerrain; + feat.Visible = node.Checked; + globeControl.Globe.Refresh(); + }else if (node.Tag is GSOFeature)//特征点 + { + GSOFeature feature = node.Tag as GSOFeature; + feature.Visible = node.Checked; + globeControl.Globe.Refresh(); + } + } + + CheckParentNode(node); + if (node.Nodes.Count > 0) + CheckChildrenNode(globeControl, node, node.Checked); + } + /// + /// 树形结构中,根据parentNode的选中状态,更改其子节点的选中状态 + /// + /// + /// + /// + public static void CheckChildrenNode(GSOGlobeControl globeControl, TreeNode parentNode, bool isChecked) + { + foreach (TreeNode childNode in parentNode.Nodes) + { + childNode.Checked = isChecked; + if (childNode.Tag is GSOLayer) + { + GSOLayer layer = childNode.Tag as GSOLayer; + layer.Visible = isChecked; + globeControl.Globe.Refresh(); + } + else if (childNode.Tag is GSOTerrain) + { + GSOTerrain feat = childNode.Tag as GSOTerrain; + feat.Visible = isChecked; + globeControl.Globe.Refresh(); + } + else if (childNode.Tag is GSOFeature) + { + GSOFeature feature = childNode.Tag as GSOFeature; + feature.Visible = childNode.Checked; + globeControl.Globe.Refresh(); + } + if (childNode.Nodes.Count > 0) + CheckChildrenNode(globeControl, childNode, isChecked); + } + } + + /// + /// 子节点则父节点:一选则选,全不选才不选 + /// 改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 + /// + /// 要检查的节点,更改其父节点状态 + public static void CheckParentNode(TreeNode curNode) + { + + if (curNode.Parent == null) return; + bool bChecked = false; + foreach (TreeNode node in curNode.Parent.Nodes) + { + if (!node.Checked) continue; + bChecked = true; + break; + } + curNode.Parent.Checked = bChecked; + CheckParentNode(curNode.Parent); + + } + + } +} diff --git a/Utility.cs b/Utility.cs index 68c90d1..f7aa6b7 100644 --- a/Utility.cs +++ b/Utility.cs @@ -228,30 +228,30 @@ LayerLabel_LayerIDs = new Hashtable(); if (File.Exists(filename)) { - XmlTextReader XmlReader = new XmlTextReader(filename); + XmlTextReader xmlReader = new XmlTextReader(filename); try { - while (XmlReader.Read()) + while (xmlReader.Read()) { - if (XmlReader.Name == "database") + if (xmlReader.Name == "database") { - dbdatabase = XmlReader.ReadElementString(); + dbdatabase = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "dbpassword") + else if (xmlReader.Name == "dbpassword") { - DBPassword = XmlReader.ReadElementString(); + DBPassword = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "user") + else if (xmlReader.Name == "user") { - userID = XmlReader.ReadElementString(); + userID = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "locaserverip") + else if (xmlReader.Name == "locaserverip") { - serverip = XmlReader.ReadElementString(); + serverip = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "locaserverport") + else if (xmlReader.Name == "locaserverport") { - serverport = Convert.ToInt32(XmlReader.ReadElementString()); + serverport = Convert.ToInt32(xmlReader.ReadElementString()); } //else if (XmlReader.Name == "localicenseserverip") //{ @@ -261,102 +261,51 @@ //{ // Utility.localicenseserverport = Convert.ToInt32(XmlReader.ReadElementString()); //} - else if (XmlReader.Name == "dbbackuppath") + else if (xmlReader.Name == "dbbackuppath") { - DBBackUp = XmlReader.ReadElementString(); + DBBackUp = xmlReader.ReadElementString(); } -// else if (XmlReader.Name == "layerchild") -// { -// var layername = XmlReader["layer"].Trim(); -// var label = XmlReader["label"].Trim(); -// var type = XmlReader["type"].Trim(); -// -// LayerChild child = new LayerChild(); -// child.attriLabel = label; -// child.attriLayer =layername; -// child.attriType = type; -// LayerChilds.Add(child); -// LayerLabels.Add(label); -// LayerNames.Add(layername); -// -// dictionaryNetLayerNameAndCaption.Add(layername, label); -// -// if (layername.EndsWith("管线")) -// { -// LayerNamesList.Add(layername.Substring(0, layername.Length - 2)); -// } -// if (!type.Equals("db")) -// { -// if (XmlReader["isRoad"] != null) -// { -// roadLayerName = label; -// } -// }else if (XmlReader["isPipeLine"] != null) -// { -// m_PipelineLayerNames.Add(label); -// } -// else if (XmlReader["isWorkWell"] != null) -// { -// workwellLayerNames.Add(label); -// } -// else if (XmlReader["isValve"] != null) -// { -// valueLayerNames.Add(label); -// } -// else if (XmlReader["isAccess"] != null) -// { -// instrumenLayerNames.Add(label); -// } -// else if (XmlReader["isCharacter"] != null) -// { -// pipefittingLayerNames.Add(label); -// } -// else if (XmlReader["isSgData"] != null) -// { -// sgPipeLayersNames.Add(label); -// } -// } - else if (XmlReader.Name == "Terrain") + else if (xmlReader.Name == "Terrain") { - TerrainsName.Add(XmlReader.ReadElementString()); + TerrainsName.Add(xmlReader.ReadElementString()); } - else if (XmlReader.Name == "dbserver") + else if (xmlReader.Name == "dbserver") { - DBServer = XmlReader.ReadElementString(); + DBServer = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "rooturl") + else if (xmlReader.Name == "rooturl") { - PicRootURL = XmlReader.ReadElementString(); + PicRootURL = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "defaultimgurl") + else if (xmlReader.Name == "defaultimgurl") { - PicDefaultURL = XmlReader.ReadElementString(); + PicDefaultURL = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "queryfield") + else if (xmlReader.Name == "queryfield") { - Query_Fields.Add(XmlReader["label"], XmlReader.ReadElementString()); + Query_Fields.Add(xmlReader["label"], xmlReader.ReadElementString()); } - else if (XmlReader.Name == "location") + else if (xmlReader.Name == "location") { - Query_Roads.Add(XmlReader["label"], XmlReader.ReadElementString()); + Query_Roads.Add(xmlReader["label"], xmlReader.ReadElementString()); } - else if (XmlReader.Name == "pipelineCode") + else if (xmlReader.Name == "pipelineCode") { - Pipe_Code.Add(XmlReader["label"], XmlReader.ReadElementString()); + Pipe_Code.Add(xmlReader["label"], xmlReader.ReadElementString()); } - else if (XmlReader.Name == "projectStr") + else if (xmlReader.Name == "projectStr") { - projectStr = XmlReader.ReadElementString(); + projectStr = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "backupserverurl") + else if (xmlReader.Name == "backupserverurl") { - backupurl = XmlReader.ReadElementString(); + backupurl = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "backuppath") + else if (xmlReader.Name == "backuppath") { - backuppath = XmlReader.ReadElementString(); + backuppath = xmlReader.ReadElementString(); } //else if (XmlReader.Name == "uploadpath") //{ @@ -366,41 +315,41 @@ //{ // Utility.udserviceurl = XmlReader.ReadElementString(); //} - else if (XmlReader.Name == "pipelinetype") + else if (xmlReader.Name == "pipelinetype") { - pipelinetype = XmlReader.ReadElementString(); + pipelinetype = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "shdbip") + else if (xmlReader.Name == "shdbip") { - sgdbip = XmlReader.ReadElementString(); + sgdbip = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "shdbname") + else if (xmlReader.Name == "shdbname") { - sgdbname = XmlReader.ReadElementString(); + sgdbname = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "shdbuser") + else if (xmlReader.Name == "shdbuser") { - sgdbuser = XmlReader.ReadElementString(); + sgdbuser = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "shdbpwd") + else if (xmlReader.Name == "shdbpwd") { - sgdbpwd = XmlReader.ReadElementString(); + sgdbpwd = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "ghdbip") + else if (xmlReader.Name == "ghdbip") { - ghdbip = XmlReader.ReadElementString(); + ghdbip = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "ghdbname") + else if (xmlReader.Name == "ghdbname") { - ghdbname = XmlReader.ReadElementString(); + ghdbname = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "ghdbuser") + else if (xmlReader.Name == "ghdbuser") { - ghdbuser = XmlReader.ReadElementString(); + ghdbuser = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "ghdbpwd") + else if (xmlReader.Name == "ghdbpwd") { - ghdbpwd = XmlReader.ReadElementString(); + ghdbpwd = xmlReader.ReadElementString(); } } } @@ -410,7 +359,7 @@ } finally { - XmlReader.Close(); + xmlReader.Close(); } } else @@ -458,11 +407,12 @@ { sgPipeLayersNames.Add(layer.label); } -// else if (layer.flag.Equals("")) + //配置文件中不存在workwell和valve的,不起作用 +// else if (layer.flag.Equals("workwell")) // { // workwellLayerNames.Add(layer.label); // } -// else if (layer.flag.Equals("")) +// else if (layer.flag.Equals("valve")) // { // valueLayerNames.Add(layer.label); // } diff --git a/ClassDoubleScreenCompare.cs b/ClassDoubleScreenCompare.cs new file mode 100644 index 0000000..f2935da --- /dev/null +++ b/ClassDoubleScreenCompare.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using GeoScene.Globe; +using GeoScene.Data; +using GeoScene.Engine; +using System.Drawing; + +namespace Cyberpipe +{ + class ClassDoubleScreenCompare + { + public static GSOFeature getSameFeatureFromOtherGlobe(GSOFeature feature, + GSOGlobeControl globeControl1, GSOGlobeControl globeControl2,double bufferWidth,GSOGeoPolygon3D resPolygon) + { + GSOLayer layer; + GSOFeatures features = new GSOFeatures(); + + if (!feature.Dataset.Caption.StartsWith("施工")) + { + layer = feature.Dataset.Caption == "供电管线" + ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") + : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(feature, fs[i], globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + else + { + layer = feature.Dataset.Caption == "施工电力管线" + ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") + : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(fs[i], feature, globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + + return getMostSimilarFeatureFromFeatures(feature, features); + + } + + + private static GSOFeature getMostSimilarFeatureFromFeatures(GSOFeature feature, GSOFeatures features) + { + double maxLength = 0; + GSOFeature f = new GSOFeature(); + GSOGeoPolyline3D line = feature.Geometry as GSOGeoPolyline3D; + + if (features.Length == 0) return null; + if (features.Length == 1) + { + f = features[0]; + f.HighLight = true; + } + else + { + for (int m = 0; m < features.Length; m++) + { + GSOGeoPolyline3D tempSGLine = features[m].Geometry as GSOGeoPolyline3D; + + double tempLength = tempSGLine.GetSpaceLength(false, 6378137); + double lengthAbs = Math.Abs(tempLength - line.GetSpaceLength(false, 6378137)); + if (m == 0) + { + f = features[0]; + f.HighLight = true; + maxLength = lengthAbs; + } + else if (lengthAbs < maxLength) + { + f = features[m]; + f.HighLight = true; + maxLength = lengthAbs; + } + } + } + return f; + } + + private static bool isSameFeature(GSOFeature feature1, GSOFeature feature2, GSOLayer layer, double bufferWidth) + { + GSOGeoPolyline3D line = feature1.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = line.CreateBuffer(bufferWidth * 2, true, 5, true, false); + + if (bufferPolygon == null) return false; + + GSOFeatures featuresInLayer = layer.FindFeaturesInPolygon(bufferPolygon, true); + + if (featuresInLayer == null || featuresInLayer.Length <= 0) + return false; + + for (int i = 0; i < featuresInLayer.Length; i++) + { + if (featuresInLayer[i].Name == feature2.Name) + { + return true; + break; + } + } + return false; + } + + private static bool isSimilarFeature(GSOFeature srcFeature, GSOFeature dscFeature, + GSOGlobeControl globeControl1,GSOGlobeControl globeControl2,double bufferWidth) + { + GSOLayer dscLayer = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); + GSOLayer srcLayer = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); + + if (!isSameFeature(srcFeature, dscFeature, dscLayer, bufferWidth) + && !isSameFeature(dscFeature, srcFeature, srcLayer, bufferWidth)) + return false; + return true; + } + + public static void CalculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2, + out double horizonDistance, out double verticalDistance, GSOGlobeControl globeControl1, GSOGlobeControl globeControl2) + { + GSOPoint3d pntIntersect1 = new GSOPoint3d(); + GSOPoint3d pntIntersect2 = new GSOPoint3d(); + GSOPoint3d pntProIntersect1 = new GSOPoint3d(); + GSOPoint3d pntProIntersect2 = new GSOPoint3d(); + + verticalDistance = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, verticalDistance, true, "垂直", globeControl1, globeControl2); + + horizonDistance = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, horizonDistance, true, "水平", globeControl1, globeControl2); + + } + + private static GSOPoint3d LabelDistance(GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, + double distance, bool markerVisible, string label,GSOGlobeControl globeControl1,GSOGlobeControl globeControl2) + { + if (pntIntersect1 == null || pntIntersect2 == null) + return new GSOPoint3d(); + GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); + GSOPoint3ds point3ds = new GSOPoint3ds(); + point3ds.Add(pntIntersect1); + point3ds.Add(pntIntersect2); + disline.AddPart(point3ds); + + GSOGeoMarker dismarker = new GSOGeoMarker(); + GSOFeature marker = null; + GSOFeature line = null; + createLineStyle(out marker, out line, disline, pntIntersect1, pntIntersect2, distance, label, dismarker); + + line.Visible = marker.Visible = markerVisible; + globeControl1.Globe.MemoryLayer.AddFeature(line); + globeControl1.Globe.MemoryLayer.AddFeature(marker); + + globeControl2.Globe.MemoryLayer.AddFeature(line); + globeControl2.Globe.MemoryLayer.AddFeature(marker); + + return dismarker.Position; + } + + private static void createLineStyle(out GSOFeature marker, out GSOFeature line, GSOGeoPolyline3D disline, + GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) + { + GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 + style.LineColor = Color.Red; + style.LineWidth = 5; //设置线的宽度为5 + style.VertexVisible = true; //显示线的节点 + disline.Style = style; //把风格添加到线上 + disline.AltitudeMode = EnumAltitudeMode.Absolute; + line = new GSOFeature(); + line.Geometry = disline; + + dismarker.X = pntIntersect1.X; + dismarker.Y = pntIntersect1.Y; + dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; + dismarker.Text = label + distance.ToString("0.00") + "米"; + dismarker.AltitudeMode = EnumAltitudeMode.Absolute; + + GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); + GSOTextStyle styleText = new GSOTextStyle(); + styleText.IsSizeFixed = true; + styleText.ForeColor = Color.Red; + styleText.FontSize = 20; + styleMarker.TextStyle = styleText; + dismarker.Style = styleMarker; + + marker = new GSOFeature(); + marker.Geometry = dismarker; + } + + } +} diff --git a/Cyberpipe.csproj b/Cyberpipe.csproj index d8aa9c8..bcce54d 100644 --- a/Cyberpipe.csproj +++ b/Cyberpipe.csproj @@ -203,6 +203,7 @@ + @@ -1143,6 +1144,7 @@ SysRescInfoManager.cs + True True diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 123caf1..2c45db6 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -258,42 +258,25 @@ for (int i = 0; i < scLayer.GetAllFeatures().Length; i++) { GSOFeature scFeature = scLayer.GetAt(i); - if (scFeature.GetFieldAsString("所属道路") == road) + if (scFeature.GetFieldAsString("所属道路") != road) continue; + GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + + GSOFeature sgFeature = null; + GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); + + //**判断同一个Feature + if (sgFeatures.Length >= 1) { - GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); - GSOFeature sgFeature = null; - GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); - - //**判断同一个Feature - if (sgFeatures.Length >= 1) + if (sgFeature != null) { - sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); + GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; + double horizonDistance, verticalDistance; - if (sgFeature != null) - { - GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; - double horizonDistance, verticalDistance; - - CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); - GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); - } - else - { - scFeature.HighLight = true; - DataRow dr = dt.NewRow(); - dr[0] = scLayer.Caption; - dr[1] = scFeature.GetFieldAsString("编号"); - dr[2] = sgLayer.Caption; - dr[3] = "无"; - dr[4] = "无"; - dr[5] = "0.02"; - dr[6] = "无"; - dr[7] = "0.02"; - dr[8] = "未设计管段"; - dt.Rows.Add(dr); - } + CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); + GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); } else { @@ -311,6 +294,21 @@ dt.Rows.Add(dr); } } + else + { + scFeature.HighLight = true; + DataRow dr = dt.NewRow(); + dr[0] = scLayer.Caption; + dr[1] = scFeature.GetFieldAsString("编号"); + dr[2] = sgLayer.Caption; + dr[3] = "无"; + dr[4] = "无"; + dr[5] = "0.02"; + dr[6] = "无"; + dr[7] = "0.02"; + dr[8] = "未设计管段"; + dt.Rows.Add(dr); + } } } /// diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index 53946c0..fe32265 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -4,7 +4,7 @@ using GeoScene.Globe; namespace Cyberpipe -{ +{ //本类作用为:辅助GlobalControl上Feature的统计分析工具类 class FeatureStatisticsService { /// @@ -60,8 +60,8 @@ /// /// /// - /// - /// + /// + /// /// /// public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) @@ -74,6 +74,7 @@ for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; double length = line.GetSpaceLength(true, 6378137); totalLength += length; ncount += 1; @@ -114,7 +115,7 @@ for (int i = 0; i < feats.Length; i++) { double radius = feats[i].GetFieldAsDouble(fieldName); - if (radius >= min && radius <= max) + if (radius >= minValue && radius <= maxValue) { result.Add(feats[i]); } @@ -148,23 +149,22 @@ lstDiameter.Sort(); if (lstDiameter.Count > 0) { - for (int m = 0; m < lstDiameter.Count; m++) + foreach (float diameter in lstDiameter) { double totalLength = 0.00; int ncount = 0; for (int j = 0; j < feats.Length; j++) { - if (feats[j].GetFieldAsFloat("管径_毫米") == lstDiameter[m]) - { - GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } + if (Math.Abs(feats[j].GetFieldAsFloat("管径_毫米") - diameter) > 0.00001) continue; + GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = lstDiameter[m].ToString(); + featuresClass.groupFieldValue = diameter.ToString(); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -191,13 +191,13 @@ //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); - for (int j = 0; j < accessStrs.Length; j++) + foreach (string accssname in accessStrs) { - GSOFeatures feats = null; - int ncount = 0; + GSOFeatures feats; + int ncount; if (polygon == null) { - feats = flayer.GetFeatureByFieldValue("附属物名称", accessStrs[j], true); + feats = flayer.GetFeatureByFieldValue("附属物名称", accssname, true); ncount = feats.Length; } else @@ -207,14 +207,14 @@ //过滤 for (int n = 0; n < feats.Length; n++) { - if (feats[n].GetFieldAsString("附属物名称").Contains(accessStrs[j])) newfeats.Add(feats[n]); + if (feats[n].GetFieldAsString("附属物名称").Contains(accssname)) newfeats.Add(feats[n]); } ncount = newfeats.Length; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); - featuresClass.layerName = accessStrs[j]; + featuresClass.layerName = accssname; featuresClass.ncount = ncount; result.Add(featuresClass); @@ -303,6 +303,26 @@ if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); - } + } + + + /// + /// 获取globeControl上选中的管线,如果返回空则没有选中的管线 + /// + /// 地球引擎 + /// 返回一根线 + public static GSOFeature GetSelectedPipeline(GSOGlobeControl globeControl) + { + GSOFeature resFeature; + if (globeControl.Globe.SelObjectCount < 1) return null; + GSOLayer resLayer; + globeControl.Globe.GetSelectObject(0, out resFeature, out resLayer); + if (resFeature == null) return null; + + GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; + if (line1 == null) return null; + GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; + return pipeStyle1 == null ? null : resFeature; + } } } diff --git a/FrmCompareFeature.cs b/FrmCompareFeature.cs index a05e8e7..ac622c4 100644 --- a/FrmCompareFeature.cs +++ b/FrmCompareFeature.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Data; using System.Drawing; using System.Windows.Forms; @@ -11,26 +10,16 @@ { public partial class FrmCompareFeature : Office2007Form { - GSOFeature srcFeature; - GSOFeature dscFeature; - GSOGlobeControl globeControl1; - GSOGlobeControl globeControl2; - bool isSamePolyline; - - GSOLayer layerTemp; - GSOLayer layerTemp2; - GSOFeature new_feat; + private GSOFeature srcFeature, dscFeature; + private GSOGlobeControl globeControl1, globeControl2; GSOGeoPolygon3D resPolygon; - static FrmCompareFeature frm; - public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2, int width) + public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, int width) { if (frm == null) { - frm = new FrmCompareFeature(_globeControl1, _globeControl2, _layerTemp, _layerTemp2); - + frm = new FrmCompareFeature(_globeControl1, _globeControl2); frm.Location = new Point((width - frm.Width)/2, 50); frm.Show(_globeControl1.Parent); } @@ -41,8 +30,7 @@ } } - public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2) + public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2) { globeControl1 = _globeControl1; globeControl2 = _globeControl2; @@ -50,99 +38,35 @@ globeControl1.Globe.Action = EnumAction3D.SelectObject; globeControl2.Globe.Action = EnumAction3D.SelectObject; - layerTemp = _layerTemp; - layerTemp2 = _layerTemp2; globeControl1.MouseClick += globeControl1_MouseClick; globeControl2.MouseClick += globeControl2_MouseClick; } + private void invalParam() + { + if (srcFeature == null || dscFeature == null) + { + MessageBox.Show("请选择要对比的管段!", "提示"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) + { + MessageBox.Show("请选择同种类型图层!"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type || + srcFeature.Geometry.Type != EnumGeometryType.GeoPolyline3D) + return; + } + private void buttonAnalysis_Click(object sender, EventArgs e) { + invalParam(); + dataGridViewX1.DataSource = null; - - double bufferWidth = Convert.ToDouble(textBox1.Text); - - if (srcFeature == null || dscFeature == null) - MessageBox.Show("请选择要对比的管段!", "提示"); - else - { - if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) - MessageBox.Show("请选择同种类型图层!"); - else if (srcFeature.Geometry.Type == dscFeature.Geometry.Type && - srcFeature.Geometry.Type == EnumGeometryType.GeoPolyline3D) - { - lineLayerCompare(srcFeature, dscFeature, bufferWidth); - if (!isSamePolyline) - MessageBox.Show("实测管段与施工管段非同一条管段,请选择同一管段进行比较!", "提示"); - else - { - lineFeatureCompare(srcFeature, dscFeature); - globeControl1.Globe.Action = EnumAction3D.ActionNull; - globeControl2.Globe.Action = EnumAction3D.ActionNull; - } - } - else - MessageBox.Show("无法处理该类型图层!"); - } + lineFeatureCompare(srcFeature, dscFeature); } - - /// - /// 在容差范围内判断是否同一根管段 - /// - /// - /// - /// - /// - private bool lineLayerCompare(GSOFeature srcFeature, GSOFeature dscFeature, double bufferWidth) - { - isSamePolyline = false; - - GSOGeoPolyline3D srcLine = srcFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D srcBufferPolygon = srcLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer dsc = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); - - if (srcBufferPolygon != null) - { - GSOFeatures featuresInSrcLayer = dsc.FindFeaturesInPolygon(srcBufferPolygon, true); - - if (featuresInSrcLayer != null && featuresInSrcLayer.Length > 0) - { - for (int i = 0; i < featuresInSrcLayer.Length; i++) - { - if (featuresInSrcLayer[i].Name == dscFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D dscBufferPolygon = dscLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer src = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); - - if (dscBufferPolygon != null) - { - GSOFeatures featuresInDscLayer = src.FindFeaturesInPolygon(dscBufferPolygon, true); - - if (featuresInDscLayer != null && featuresInDscLayer.Length > 0) - { - for (int i = 0; i < featuresInDscLayer.Length; i++) - { - if (featuresInDscLayer[i].Name == srcFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - return isSamePolyline; - } - /// /// 分析两根管段的具体差异 /// @@ -156,8 +80,10 @@ GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; double dscLineLength = dscLine.GetSpaceLength(false, 6378137); - double horizonDistance = calculateDistance(srcLine, dscLine,false); - double verticalDistance = calculateDistance(srcLine, dscLine,true); + double horizonDistance, verticalDistance; + + ClassDoubleScreenCompare.CalculateDistance(srcLine, dscLine, out horizonDistance, + out verticalDistance,globeControl1,globeControl2); DataTable dt = new DataTable(); dt.Columns.Add("数据名称"); @@ -189,6 +115,98 @@ dt.Rows.Add(dscRow); dataGridViewX1.DataSource = dt; + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) + { + globeControl1.Globe.MemoryLayer.RemoveAllFeature(); + globeControl2.Globe.MemoryLayer.RemoveAllFeature(); + + GSOFeature new_feat = new GSOFeature(); + resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); + resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; + new_feat.Geometry = resPolygon; + + globeControl1.Globe.MemoryLayer.AddFeature(new_feat); + globeControl2.Globe.MemoryLayer.AddFeature(new_feat); + + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + public static void clearFeatureHighLight(GSOGlobeControl glb) + { + for (int i = 0; i < glb.Globe.Layers.Count; i++) + { + GSOLayer layer = glb.Globe.Layers[i]; + if (!(layer is GSOFeatureLayer)) continue; + GSOFeatures feats = layer.GetAllFeatures(); + for (int j = 0; j < feats.Length; j++) + { + feats[j].HighLight = false; + } + } + } + + void globeControl1_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl1.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl1.Globe.Action != EnumAction3D.SelectObject || + globeControl1.Globe.SelectedObject == null) + return; + GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + srcFeature = globeControl1.Globe.SelectedObject; + dscFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(srcFeature, + globeControl1,globeControl2,bufferWidth,resPolygon); + + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } + + void globeControl2_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl2.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl2.Globe.Action != EnumAction3D.SelectObject || + globeControl2.Globe.SelectedObject == null) + return; + + GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + dscFeature = globeControl2.Globe.SelectedObject; + srcFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(dscFeature, + globeControl1, globeControl2, bufferWidth, resPolygon); + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } private void FrmCompareFeature_FormClosing(object sender, FormClosingEventArgs e) @@ -198,322 +216,5 @@ frm = null; } - private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) - { - new_feat = new GSOFeature(); - resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); - resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; - new_feat.Geometry = resPolygon; - - layerTemp.AddFeature(new_feat); - layerTemp2.AddFeature(new_feat); - globeControl1.Refresh(); - globeControl2.Refresh(); - } - - private GSOLayer getSameLayer(GSOFeature feature) - { - GSOLayer layer = null; - if (!feature.Dataset.Caption.StartsWith("施工")) - { - layer = feature.Dataset.Caption == "供电管线" - ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") - : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); - } - else - { - layer = feature.Dataset.Caption == "施工电力管线" - ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") - : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); - } - - return layer; - } - - /// - /// 地球1中点击地球2中同步添加缓冲区 - /// - /// - /// - void globeControl1_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl1.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl1.Globe.Action == EnumAction3D.SelectObject && - globeControl1.Globe.SelectedObject != null) - { - GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - addPologyToGlobeControl(line, bufferWidth); - } - - srcFeature = globeControl1.Globe.SelectedObject; - GSOLayer layers = getSameLayer(srcFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = srcFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(srcFeature, features[i], Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - listFeatures.Add(features[i]); - } - calculate(out maxLength, out dscFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - /// - /// 地球2中点击地球1中同步添加缓冲区 - /// - /// - /// - void globeControl2_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl2.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl2.Globe.Action != EnumAction3D.SelectObject || - globeControl2.Globe.SelectedObject == null) - return; - else - { - GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - - addPologyToGlobeControl(line, bufferWidth); - } - - dscFeature = globeControl2.Globe.SelectedObject; - //双屏同时选中同一管段 - GSOLayer layers = getSameLayer(dscFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = dscFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(features[i], dscFeature, Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - { - listFeatures.Add(features[i]); - } - } - calculate(out maxLength, out srcFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - private void calculate(out double maxLength, out GSOFeature feature, GSOFeatures listFeatures, - GSOGeoPolyline3D scLine) - { - maxLength = 0; - feature=new GSOFeature(); - if (listFeatures.Length == 0) - feature = null; - else - { - if (listFeatures.Length == 1) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - } - else - { - for (int m = 0; m < listFeatures.Length; m++) - { - GSOGeoPolyline3D tempSGLine = listFeatures[m].Geometry as GSOGeoPolyline3D; - - double tempLength = tempSGLine.GetSpaceLength(false, 6378137); - double lengthAbs = Math.Abs(tempLength - scLine.GetSpaceLength(false, 6378137)); - if (m == 0) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - maxLength = lengthAbs; - } - else if (lengthAbs < maxLength) - { - feature = listFeatures[m]; - listFeatures[m].HighLight = true; - maxLength = lengthAbs; - } - } - } - } - } - - /// - /// 计算距离 - /// - /// - /// - /// - double calculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2,bool isVertical) - { - GSOPoint3d pntIntersect1 = new GSOPoint3d(); - GSOPoint3d pntIntersect2 = new GSOPoint3d(); - GSOPoint3d pntProIntersect1 = new GSOPoint3d(); - GSOPoint3d pntProIntersect2 = new GSOPoint3d(); - double dDist = 0; - if (isVertical) - { - dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "垂直"); - } - else - { - dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "水平"); - } - - return dDist; - } - - /// - /// 清除所有高亮Feature - /// - /// - private void clearFeatureHighLight(GSOGlobeControl glb1,GSOGlobeControl glb2) - { - layerTemp.RemoveAllFeature(); - layerTemp2.RemoveAllFeature(); - //清除gbl1中高亮 - for (int i = 0; i < glb1.Globe.Layers.Count; i++) - { - GSOLayer layer = glb1.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - //清除gbl2中高亮 - for (int i = 0; i < glb2.Globe.Layers.Count; i++) - { - GSOLayer layer = glb2.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - } - - /// - /// 添加标注 - /// - /// - /// - /// - /// - /// - /// - private GSOPoint3d LabelDistance(GSOLayer markerLayer, GSOLayer markerLayer2, - GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, bool markerVisible,string label) - { - if (pntIntersect1 == null || pntIntersect2 == null) - return new GSOPoint3d(); - GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); - GSOPoint3ds point3ds = new GSOPoint3ds(); - point3ds.Add(pntIntersect1); - point3ds.Add(pntIntersect2); - disline.AddPart(point3ds); - - GSOGeoMarker dismarker = new GSOGeoMarker(); - GSOFeature marker = null; - GSOFeature line = null; - createLineStyle(out marker, out line,disline, pntIntersect1, pntIntersect2, distance, label, dismarker); - - line.Visible = marker.Visible = markerVisible; - markerLayer.AddFeature(line); - markerLayer.AddFeature(marker); - - markerLayer2.AddFeature(line); - markerLayer2.AddFeature(marker); - - return dismarker.Position; - } - /// - /// 控制标注和字体的颜色 - /// - /// - /// - /// - /// - /// - /// - /// - /// - private void createLineStyle(out GSOFeature marker,out GSOFeature line,GSOGeoPolyline3D disline, - GSOPoint3d pntIntersect1,GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) - { - GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 - style.LineColor = Color.Red; - style.LineWidth = 5; //设置线的宽度为5 - style.VertexVisible = true; //显示线的节点 - disline.Style = style; //把风格添加到线上 - disline.AltitudeMode = EnumAltitudeMode.Absolute; - line=new GSOFeature(); - line.Geometry = disline; - - dismarker.X = pntIntersect1.X; - dismarker.Y = pntIntersect1.Y; - dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; - dismarker.Text = label + distance.ToString("0.00") + "米"; - dismarker.AltitudeMode = EnumAltitudeMode.Absolute; - - GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); - GSOTextStyle styleText = new GSOTextStyle(); - styleText.IsSizeFixed = true; - styleText.ForeColor = Color.Red; - styleText.FontSize = 20; - styleMarker.TextStyle = styleText; - dismarker.Style = styleMarker; - - marker=new GSOFeature(); - marker.Geometry = dismarker; - } - } } diff --git a/FrmHotFuncStat.cs b/FrmHotFuncStat.cs index 84131ef..f313b20 100644 --- a/FrmHotFuncStat.cs +++ b/FrmHotFuncStat.cs @@ -58,14 +58,11 @@ DataTable table = OledbHelper.QueryTable(sql); - if (table != null) + if (table == null) return; + for (int i = 0; i < table.Rows.Count; i++) { - for (int i = 0; i < table.Rows.Count; i++) - { - userLists.Items.Add(table.Rows[i][0].ToString()); - } + userLists.Items.Add(table.Rows[i][0].ToString()); } - } //统计结果 private void statBtn_Click(object sender, EventArgs e) diff --git a/FrmLayerControl.cs b/FrmLayerControl.cs index 8586041..8fbce97 100644 --- a/FrmLayerControl.cs +++ b/FrmLayerControl.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Windows.Forms; using DevComponents.DotNetBar; using GeoScene.Data; @@ -13,10 +14,10 @@ GSOGlobeControl globeControl1; GSOGlobeControl globeControl2; - TreeNode terrainManagerNode = null; - TreeNode layerManagerNode = null; - TreeNode terrainManagerNode1 = null; - TreeNode layerManagerNode1 = null; +// TreeNode terrainManagerNode = null; +// TreeNode layerManagerNode = null; +// TreeNode terrainManagerNode1 = null; +// TreeNode layerManagerNode1 = null; public FrmLayerControl(GSOGlobeControl ctl1,GSOGlobeControl ctl2) { @@ -25,14 +26,14 @@ globeControl2 = ctl2; } - private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) - { - treeNode=new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - } +// private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) +// { +// treeNode=new TreeNode(); +// treeNode.ImageIndex = 0; +// treeNode.SelectedImageIndex = 0; +// treeNode.Checked = false; +// treeNode.Text = strTreeNodeText; +// } // private void initTreeView() // { @@ -51,234 +52,258 @@ // layerTree2.Nodes.Add(terrainManagerNode); // } - #region wxl重构树形结构代码 + + - private TreeNode treeNode(string strTreeNodeText) - { - TreeNode treeNode = new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - return treeNode; - } -// private void appendToParent(TreeNodeCollection treeNodeCollection, ) - #endregion - private void initTreeView() +// private void initNode(string nodeName) +// { +// TreeNode nodeGroupElse1 = new TreeNode(); +// nodeGroupElse1.Text = nodeName; +// layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); +// +// TreeNode nodeGroupElse = new TreeNode(); +// nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; +// layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); +// } + +// private void initTreeNode(XmlNodeList Params) +// { +// foreach (XmlNode paramsNode in Params) //layers +// { +// foreach (XmlNode layerNode in paramsNode) //layer +// { +// initNode(layerNode.Attributes["label"].Value); +// } +// } +// +// initNode("基础图层"); +// initNode("其他"); +// } + +// private void FrmLayerControl_Load(object sender, EventArgs e) +// { +// +// initTreeView(); +// try +// { +// XmlDocument doc = new XmlDocument(); +// doc.Load(Application.StartupPath + "\\双屏设置.xml"); +// XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// +// initTreeNode(Params); +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// +// RefreshLayerAndTerrainTree(); +// } + private void FrmLayerControl_Load(object sender, EventArgs e) { layerTree1.Nodes.Clear(); layerTree2.Nodes.Clear(); - - //加载layertree2 - initLayerTree(out layerManagerNode1, "图层管理"); - layerTree1.Nodes.Add(layerManagerNode1); - initLayerTree(out terrainManagerNode1, "地形管理"); - layerTree1.Nodes.Add(terrainManagerNode1); - - initLayerTree(out layerManagerNode, "图层管理"); - layerTree2.Nodes.Add(layerManagerNode); - initLayerTree(out terrainManagerNode, "地形管理"); - layerTree2.Nodes.Add(terrainManagerNode); + TreeUtils.InitLayerTree(globeControl1, layerTree1, "实测数据"); + TreeUtils.InitLayerTree(globeControl2, layerTree2, "施工数据"); } - private void initNode(string nodeName) - { - TreeNode nodeGroupElse1 = new TreeNode(); - nodeGroupElse1.Text = nodeName; - layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); + #region wxl重构树形结构代码 - TreeNode nodeGroupElse = new TreeNode(); - nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; - layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); - } + /// + /// 构造tree,最多解析三层,可放在工具类中 - private void initTreeNode(XmlNodeList Params) - { - foreach (XmlNode paramsNode in Params) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - initNode(layerNode.Attributes["label"].Value); - } - } + /// 所属地球 + /// 要加载的树 + /// 数据来源,实测数据/施工数据/规划数据/红线数据,为空则展示全部 +// private void initTree(GSOGlobeControl gsoGlobeControl,TreeView treeView, string viewDatasrc) +// { +// treeView.Nodes.Clear(); +// LayerConfig layerConfig = Utility.layerConfig; +// List datasrcs = layerConfig.datasrcs; +// foreach (DataSrc datasrc in datasrcs) +// { +// if (viewDatasrc != null && !viewDatasrc.Trim().Equals("") && !datasrc.label.Equals(viewDatasrc)) continue; +// TreeNode rootNode = treeView.Nodes.Add(datasrc.label); +// List layerTypes = datasrc.layertypes; +// foreach (LayerType layerType in layerTypes) +// { +// TreeNode secNode = rootNode.Nodes.Add(layerType.label); +// List layers = layerType.layers; +// foreach (Layer layer in layers) +// { +// GSOLayer gsoLayer = gsoGlobeControl.Globe.Layers.GetLayerByCaption(layer.layer); +// if (gsoLayer == null) continue;//将不存在的去除 +// TreeNode node = new TreeNode(); +// node.Tag = gsoLayer; +// node.Text = layer.label; +// node.Checked = gsoLayer.Visible; +// if (gsoLayer.Visible) +// { +// secNode.Checked = true; +// rootNode.Checked = true; +// } +// secNode.Nodes.Add(node); +// } +// } +// } +// } - initNode("基础图层"); - initNode("其他"); - } + #endregion - private void FrmLayerControl_Load(object sender, EventArgs e) - { - initTreeView(); - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(Application.StartupPath + "\\双屏设置.xml"); - XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, +// TreeView layerTree) +// { +// try +// { +// for (int i = 0; i < nLayerCount; i++) +// { +// GSOLayer layer = globcontrol.Globe.Layers[i]; +// if (layer == null) continue; +// string layerName = layer.Name; +// TreeNode node = new TreeNode(); +// node.Tag = layer; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = layer.Caption; +// node.Checked = layer.Visible; +// +// bool isContains = false; +// for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) +// { +// if (!layerName.Contains("fttp:")) +// { +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || +// layerName.Contains("施工") || +// layerName.Contains("规划")) continue; +// break; +// case "layerTree2": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[j].Nodes.Add(node); +// isContains = true; +// break; +// } +// else +// { +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); +// isContains = true; +// break; +// } +// } +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || +// layerName.Contains("标注") || +// isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || +// layerName.Contains("景观") || layerName.Contains("红线")) +// continue; +// break; +// case "layerTree2": +// if (isContains != false || layerName.Contains("tempLgdData2")) +// continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); +// } +// +// for (int i = 0; i < nTerrainCount; i++) +// { +// GSOTerrain terrain = globcontrol.Globe.Terrains[i]; +// if (terrain == null) continue; +// TreeNode node = new TreeNode(); +// node.Tag = terrain; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = terrain.Caption; +// node.Checked = terrain.Visible; +// switch (layerTree.Name) +// { +// case "layerTree1": +// terrainManagerNode1.Nodes.Add(node); +// break; +// case "layerTree2": +// terrainManagerNode.Nodes.Add(node); +// break; +// default: +// break; +// } +// } +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// } - initTreeNode(Params); - } - catch (Exception ex) - { - LogError.PublishError(ex); - } +// private void initTreeNodeCheckedStatus(TreeView layerTreeView) +// { +// //节点选中状态控制 +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// if (node.Checked != true) continue; +// layerTreeView.Nodes[0].Checked = true; +// break; +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOTerrain layer = childNode.Tag as GSOTerrain; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// } - RefreshLayerAndTerrainTree(); - } - - private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, - TreeView layerTree) - { - try - { - for (int i = 0; i < nLayerCount; i++) - { - GSOLayer layer = globcontrol.Globe.Layers[i]; - if (layer == null) continue; - string layerName = layer.Name; - TreeNode node = new TreeNode(); - node.Tag = layer; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = layer.Caption; - node.Checked = layer.Visible; - - bool isContains = false; - for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) - { - if (!layerName.Contains("fttp:")) - { - switch (layerTree.Name) - { - case "layerTree1": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || - layerName.Contains("施工") || - layerName.Contains("规划")) continue; - break; - case "layerTree2": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[j].Nodes.Add(node); - isContains = true; - break; - } - else - { - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); - isContains = true; - break; - } - } - switch (layerTree.Name) - { - case "layerTree1": - if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || - layerName.Contains("标注") || - isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || - layerName.Contains("景观") || layerName.Contains("红线")) - continue; - break; - case "layerTree2": - if (isContains != false || layerName.Contains("tempLgdData2")) - continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); - } - - for (int i = 0; i < nTerrainCount; i++) - { - GSOTerrain terrain = globcontrol.Globe.Terrains[i]; - if (terrain == null) continue; - TreeNode node = new TreeNode(); - node.Tag = terrain; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = terrain.Caption; - node.Checked = terrain.Visible; - switch (layerTree.Name) - { - case "layerTree1": - terrainManagerNode1.Nodes.Add(node); - break; - case "layerTree2": - terrainManagerNode.Nodes.Add(node); - break; - default: - break; - } - } - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - - private void initTreeNodeCheckedStatus(TreeView layerTreeView) - { - //节点选中状态控制 - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - if (node.Checked != true) continue; - layerTreeView.Nodes[0].Checked = true; - break; - } - - foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOTerrain layer = childNode.Tag as GSOTerrain; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - } - - void exPandTreeNode() - { - layerManagerNode1.Expand(); - terrainManagerNode1.Expand(); - layerManagerNode.Expand(); - terrainManagerNode.Expand(); - } +// void exPandTreeNode() +// { +// layerManagerNode1.Expand(); +// terrainManagerNode1.Expand(); +// layerManagerNode.Expand(); +// terrainManagerNode.Expand(); +// } /// /// 刷新节点树 /// - private void RefreshLayerAndTerrainTree() - { - int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 - int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 - addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); - initTreeNodeCheckedStatus(layerTree1); - - int nLayerCount = globeControl2.Globe.Layers.Count; - int nTerrainCount = globeControl2.Globe.Terrains.Count; - addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); - initTreeNodeCheckedStatus(layerTree2); - - // 展开 - exPandTreeNode(); - } +// private void RefreshLayerAndTerrainTree() +// { +// int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 +// int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 +// addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); +// initTreeNodeCheckedStatus(layerTree1); +// +// int nLayerCount = globeControl2.Globe.Layers.Count; +// int nTerrainCount = globeControl2.Globe.Terrains.Count; +// addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); +// initTreeNodeCheckedStatus(layerTree2); +// +// // 展开 +// exPandTreeNode(); +// } /// /// 节点树复选框选中状态改变事件处理 @@ -289,144 +314,132 @@ { if (e.Action != TreeViewAction.Unknown) { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } + TreeUtils.TreeNodeCheckedChange(globeControl2,e.Node); + } + } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree2(e.Node, e.Node.Checked); + private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) + { + if (e.Action != TreeViewAction.Unknown) + { + TreeUtils.TreeNodeCheckedChange(globeControl1, e.Node); } } + + +// private void layerTree2_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree2(e.Node, e.Node.Checked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree1(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree1(childNode, isChecked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree2(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree2(childNode, isChecked); +// } +// } /// /// 节点树选中状态改变事件 /// /// /// - private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) - { - if (e.Action != TreeViewAction.Unknown) - { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } +// private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree1(e.Node, e.Node.Checked); +// } +// } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree1(e.Node, e.Node.Checked); - } - } - /// - /// 改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 - /// - /// - private void CheckParentNode(TreeNode curNode) - { - bool bChecked = false; - - if (curNode.Parent != null) - { - foreach (TreeNode node in curNode.Parent.Nodes) - { - if (node.Checked) - { - bChecked = true; - break; - } - } - if (bChecked) - { - curNode.Parent.Checked = true; - CheckParentNode(curNode.Parent); - } - else - { - curNode.Parent.Checked = false; - CheckParentNode(curNode.Parent); - } - } - } } } diff --git a/FrmMetadata.cs b/FrmMetadata.cs index 4d0d5cb..bb7c46c 100644 --- a/FrmMetadata.cs +++ b/FrmMetadata.cs @@ -12,12 +12,8 @@ { public partial class FrmMetadata : Office2007Form { - List pipelineLayerNames = new List();//线图层名称 - List workwellLayerNames = new List();//工井图层名称 - List valueLayerNames = new List();//阀门图层名称 - List instrumenLayerNames = new List();//附属物图层名称 - string filename = Utility.filename; - DataSet dataSet = new DataSet(); + + bool selectedLayer; public FrmMetadata() @@ -25,308 +21,33 @@ InitializeComponent(); loadTreeView(layerTree); } - private void FrmMetadata_Load(object sender, EventArgs e) - { - //this.ntLblC.Text = "nn"; - // loadTreeView(layerTree); - } private void loadTreeView(TreeView tv)//构建图层树 { - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - //tv.ShowPlusMinus = false; - - //tv.Nodes.Clear(); - tv.ShowLines = true; - // tv.ImageList = imageList1; - tv.CheckBoxes = false; - #region 三级 - - //foreach (XmlNode paramsNode in Params1) //layers - //{ - // foreach (XmlNode layerNode in paramsNode) //layer - // { - // TreeNode nodelayer = new TreeNode(); - // string layerName = layerNode.Attributes["label"].Value; - // nodelayer.Text = layerName; - - // if (layerNode.HasChildNodes != false) - // { - // tv.Nodes.Add(nodelayer); - // foreach (XmlNode layerchildNode in layerNode) //layerchild - // { - // if (layerchildNode.Name == "layerchild") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["type"].Value; - // string layerchildName = layerchildNode.Attributes["label"].Value; - // if (layerType == "locaserver") - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - - // } - // else - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // if (layerchildNode.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = boollayer; - // nodelayer.Nodes.Add(nodelayerchild); - // } - // } - // else if (layerchildNode.Name == "layertype") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["label"].Value; - // nodelayerchild.Text = layerType; - // nodelayerchild.Tag = layerType; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - // if (layerchildNode.HasChildNodes == true) - // { - // foreach (XmlNode childNodeLayer in layerchildNode) - // { - // TreeNode nodelayerchild1 = new TreeNode(); - // string layerName1 = childNodeLayer.Attributes["layer"].Value; - // string layerchildName = childNodeLayer.Attributes["label"].Value; - // string layerType1 = childNodeLayer.Attributes["type"].Value; - // if (childNodeLayer.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild1.Text = layerchildName; - // nodelayerchild1.Tag = layerType1 + "|" + layerName1; - // nodelayerchild1.Checked = boollayer; - // nodelayerchild.Nodes.Add(nodelayerchild1); - // } - // } - // } - - // } - // } - // else - // { - // tv.Nodes.Add(nodelayer); - // } - // } - - //} - - #endregion - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - TreeNode nodelayer = new TreeNode(); - string layerName = layerNode.Attributes["label"].Value; - nodelayer.Text = layerName; - - if (layerNode.HasChildNodes) - { - tv.Nodes.Add(nodelayer); - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - if (layerchildNode.Name == "layerchild") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["type"].Value; - string layerchildName = layerchildNode.Attributes["label"].Value; - if (layerType == "locaserver") - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - - } - else - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - if (layerchildNode.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - //nodelayerchild.Checked = boollayer; - nodelayer.Nodes.Add(nodelayerchild); - } - } - else if (layerchildNode.Name == "layertype") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["label"].Value; - nodelayerchild.Text = layerType; - nodelayerchild.Tag = layerType; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode) - { - if (childNodeLayer.HasChildNodes) - { - TreeNode nodelayerchild2 = new TreeNode(); - string layer = childNodeLayer.Attributes["label"].Value; - nodelayerchild2.Text = layer; - nodelayerchild2.Tag = layer; - nodelayerchild2.Checked = true; - nodelayerchild.Nodes.Add(nodelayerchild2); - foreach (XmlNode n in childNodeLayer) - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = n.Attributes["layer"].Value; - string layerchildName = n.Attributes["label"].Value; - string layerType1 = n.Attributes["type"].Value; - if (n.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (n.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (n.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (n.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild2.Nodes.Add(nodelayerchild1); - - } - } - else - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = childNodeLayer.Attributes["layer"].Value; - string layerchildName = childNodeLayer.Attributes["label"].Value; - string layerType1 = childNodeLayer.Attributes["type"].Value; - if (childNodeLayer.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild.Nodes.Add(nodelayerchild1); - - } - } - } - } - - } - } - else - { - tv.Nodes.Add(nodelayer); - } - } - - } - if (tv.Nodes.Count > 0) - { - //tv.Nodes[0].Expand(); - if (tv.Nodes.Count > 0) - { - foreach (TreeNode node in tv.Nodes) - { - //node.Expand(); - } - } - } - //tv.ExpandAll(); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } + //tv.ShowPlusMinus = false; + //tv.Nodes.Clear(); + // tv.ImageList = imageList1; + tv.ShowLines = true; + tv.CheckBoxes = false; + TreeUtils.InitLayerTree(null, tv, null); } - + /// + /// 点击父节点则展开,点击子节点则编辑元数据 + /// + /// + /// private void layerTree_AfterSelect(object sender, TreeViewEventArgs e) { - String layername = layerTree.SelectedNode.Text; - if (layerTree.SelectedNode.GetNodeCount(true) == 0) { - searchLayerInfo(layername); - - selectedLayer = true; - clearBtn.Hide(); - completeBtn.Hide(); + String layername = e.Node.Text; + if (e.Node.GetNodeCount(true) != 0) + { //点击父节点,则展开 + e.Node.Expand(); + return; } + searchLayerInfo(layername); + selectedLayer = true; + clearBtn.Hide(); + completeBtn.Hide(); } //查询元数据 private void searchLayerInfo(String layername) { @@ -335,8 +56,6 @@ + " casic_metadatalayer where casic_metadatacontent.\"LAYERID\" = casic_metadatalayer.\"LAYERID\" and casic_metadatalayer.\"LAYERNAME\"='" + layername+"'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; - if (table != null && table.Rows.Count > 0) { groupBox1.Text = layername; @@ -400,8 +119,6 @@ //判断此时layerTree有没有选中的图层 if (selectedLayer)//有选中的图层,获得其名 { - string name = layerTree.SelectedNode.Text; - OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "支持格式(*.xml)|*.xml|XML数据(*.xml)|"; dlg.Multiselect = true; @@ -419,31 +136,24 @@ //读入元数据 private void AddXMLMDdata(string strFilePath) { - try - { - dataSet.Clear(); //清空数据集中的内容 - dataSet.ReadXml(strFilePath); //读取XML文件中的内容 + DataSet dataSet = new DataSet(); + dataSet.ReadXml(strFilePath); //读取XML文件中的内容 - //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); - string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); - string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); - string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); - string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); + //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); + string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); + string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); + string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); + string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); - //this.titleLbl.Text = attrtitle; - consLblC.Text = attrcons; - descLblC.Text = attrdesc; - authorLblC.Text = attrauthor; - ntLblC.Text = attrnt; - //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); + //this.titleLbl.Text = attrtitle; + consLblC.Text = attrcons; + descLblC.Text = attrdesc; + authorLblC.Text = attrauthor; + ntLblC.Text = attrnt; + //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); - completeBtn.Visible = true; - //this.clearBtn.Visible = true; - } - catch (Exception e) - { - - } + completeBtn.Visible = true; + //this.clearBtn.Visible = true; } //新建/编辑元数据 private void editBtn_Click(object sender, EventArgs e) @@ -509,11 +219,7 @@ string sql = "select \"LAYERID\" from casic_metadatalayer where \"LAYERNAME\" = '" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - if (table != null && table.Rows.Count > 0)//已有该图层,属于编辑 - { - return false; - } - return true; + return table == null || table.Rows.Count <= 0; } //保存元数据 private void saveData(String method,String layername,String cons,String desc,String author,String nt) { @@ -539,17 +245,16 @@ string insertSQL = "insert into casic_metadatalayer values ('" + layerid + "','" + layername + "')";//+ string insertSQL2 = "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','" + desc + "','" + author + "','" + nt + "')"; // "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','"+desc+"','"+author+"','"+nt+"')"; - if ((OledbHelper.sqlExecuteNonQuery(insertSQL) > 0)&&(OledbHelper.sqlExecuteNonQuery(insertSQL2)>0)) - { - MessageBox.Show("保存元数据成功!"); + if ((OledbHelper.sqlExecuteNonQuery(insertSQL) <= 0) || + (OledbHelper.sqlExecuteNonQuery(insertSQL2) <= 0)) return; + MessageBox.Show("保存元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } else { //更新 string layeridSQL = "select layerid from casic_metadatalayer where LAYERNAME='"+layername+"'"; @@ -561,16 +266,14 @@ + "',casic_metadatacontent.MDAUTHOR ='" + author.Trim() + "',casic_metadatacontent.NT ='" + nt.Trim() + "' where casic_metadatacontent.LAYERID='" + layerid + "'"; - if (OledbHelper.sqlExecuteNonQuery(updateSQL) > 0) - { - MessageBox.Show("更新元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + if (OledbHelper.sqlExecuteNonQuery(updateSQL) <= 0) return; + MessageBox.Show("更新元数据成功!"); + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } } diff --git a/FrmMetadataStat.cs b/FrmMetadataStat.cs index cb19f84..c3c1359 100644 --- a/FrmMetadataStat.cs +++ b/FrmMetadataStat.cs @@ -2,16 +2,16 @@ using System.Collections; using System.Collections.Generic; using System.Data; +using System.Linq; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; -using System.Xml; using DevComponents.DotNetBar; namespace Cyberpipe { public partial class FrmMetadataStat : Office2007Form { - Dictionary dic = new Dictionary(); + public FrmMetadataStat() { InitializeComponent(); @@ -22,7 +22,7 @@ string sql = "select LAYERNAME from casic_metadataLayer where LAYERNAME like '%" + keywordsTxt.Text.Trim() + "%'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; + int num = 0; resultList.Clear(); consLblC.Text = ""; @@ -32,6 +32,7 @@ if (table != null && table.Rows.Count > 0) { + num = table.Rows.Count; for (int i = 0; i < num;i++ ) { resultList.Items.Add(table.Rows[i][0].ToString()); @@ -56,7 +57,8 @@ int metadataLayernum = statistMDLayer(); int nomdLayernum = layernum - metadataLayernum; //MessageBox.Show("共有多少层?" + layernum.ToString()+"=="+metadataLayernum.ToString()+"=="+nomdLayernum.ToString()); - dic.Clear(); +// dic.Clear(); + Dictionary dic = new Dictionary(); dic.Add("已建",metadataLayernum); dic.Add("未建", nomdLayernum); @@ -74,11 +76,9 @@ foreach (string key in dic.Keys) { - if (dic[key] != 0) - { - xlist.Add(key); - ylist.Add(dic[key]); - } + if (dic[key] == 0) continue; + xlist.Add(key); + ylist.Add(dic[key]); } chart1.Series[0].Points.DataBindXY(xlist, ylist); @@ -89,73 +89,15 @@ string sql = "select * from casic_metadataLayer"; DataTable table = OledbHelper.QueryTable(sql); - mdlayernum = table.Rows.Count; + if(table!=null)mdlayernum = table.Rows.Count; return mdlayernum; } //统计有多少个图层 - private int statistLayer() { - int layernum = 0; - - string filename = Utility.filename; - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - //MessageBox.Show(layerNode.Attributes["label"].Value); - - if (layerNode.HasChildNodes) - { - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - //MessageBox.Show(layerchildNode.Attributes["label"].Value); - if (layerchildNode.Name == "layerchild") - { - layernum++; - } - else if (layerchildNode.Name == "layertype") - { - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode)//layertype下的layerchild - { - //MessageBox.Show(childNodeLayer.Attributes["label"].Value); - if (childNodeLayer.HasChildNodes) - { - - foreach (XmlNode n in childNodeLayer) - { - layernum++; - } - } - else - { - - layernum++; - } - } - } - } - - } - } - } - - } - - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - return layernum; + private int statistLayer() + { + List datasrcs = Utility.layerConfig.datasrcs; + return datasrcs.SelectMany(datasrc => datasrc.layertypes).Sum(layerType => layerType.layers.Count); } //选择list @@ -174,7 +116,6 @@ + "join casic_metadatalayer on casic_metadatalayer.LAYERID = casic_metadatacontent.LAYERID " + "where casic_metadatalayer.LAYERNAME='" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; //MessageBox.Show(num.ToString()); if (table != null && table.Rows.Count > 0) { @@ -192,10 +133,5 @@ ntLblC.Text = ""; } } - - private void buttonX1_Click(object sender, EventArgs e) - { - drawChart(); - } } } diff --git a/FrmWait.Designer.cs b/FrmWait.Designer.cs index 99733ea..88f5a29 100644 --- a/FrmWait.Designer.cs +++ b/FrmWait.Designer.cs @@ -55,7 +55,6 @@ this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(0, 24); this.label1.TabIndex = 1; - this.label1.Click += new System.EventHandler(this.label1_Click); // // FrmWait // @@ -71,7 +70,7 @@ this.ShowIcon = false; this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; this.Text = "正在处理,请稍后..."; - this.Load += new System.EventHandler(this.FrmWait_Load); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmWait_FormClosing); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); diff --git a/FrmWait.cs b/FrmWait.cs index d3b7a48..d645ae4 100644 --- a/FrmWait.cs +++ b/FrmWait.cs @@ -32,27 +32,6 @@ frm = null; } - private void FrmWait_Load(object sender, EventArgs e) - { - - - } - - - private void labelX2_Click(object sender, EventArgs e) - { - - } - - private void progressBarX1_Click(object sender, EventArgs e) - { - - } - - private void label1_Click(object sender, EventArgs e) - { - - } } } diff --git a/FrmYJSHTC.cs b/FrmYJSHTC.cs index 3572371..27b7186 100644 --- a/FrmYJSHTC.cs +++ b/FrmYJSHTC.cs @@ -143,9 +143,7 @@ for (int i = ctl1.Globe.Layers.Count - 1; i >= 0; i--) { if (ctl1.Globe.Layers[i].Caption == str) - { ctl1.Globe.Layers.Remove(ctl1.Globe.Layers[i]); - } } foreach (TreeNode n in layerTree.Nodes) @@ -155,20 +153,15 @@ for (int i = 0; i < n.Nodes.Count; i++) { if (n.Nodes[i].Text == str) - { n.Nodes[i].Remove(); - } } } } string sql = "delete from casic_audit_result where SH_LAYER = '" + str + "'"; - OledbHelper.sqlExecuteNonQuery(sql); - } } - } } diff --git a/MainFrm.cs b/MainFrm.cs index bc962c4..29a3eb3 100644 --- a/MainFrm.cs +++ b/MainFrm.cs @@ -2,7 +2,6 @@ using System.Collections; using System.Collections.Generic; using System.Data; -using System.Data.OracleClient; using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; @@ -13,7 +12,6 @@ using System.Text; using System.Threading; using System.Windows.Forms; -using System.Xml; using Cyberpipe.Forms; using DevComponents.DotNetBar; using GeoScene.Data; @@ -28,10 +26,10 @@ { TreeNode layerManagerNode; bool m_bFullScreen; - + GSOGlobeControl globeControl1; GSOGlobeControl globeControl2; - private GSOHudButton legend;//定义图例 + private GSOHudButton legend; //定义图例 private GSOHudButton btnToolNone; private GSOHudButton btnToolSelect; ToolTip tooltip1; @@ -42,20 +40,20 @@ GSOBalloon featureTooltip2; GSOBalloonEx balloonEx2; - GSOLayer layerTemp; - GSOLayer layerTemp2; + GSOLayer layerTemp;//wxl注释,Globe1的临时图层 + GSOLayer layerTemp2;//wxl注释,Globe2的临时图层 FrmRedlineResult frmredResult = null; FrmMnModify frmModify; public bool frmRedlineResult = false; public bool boolfrmShResult; public bool boolfrmModify; - public static string m_CurrentQueryLayer;//定义当前查询的图层 + public static string m_CurrentQueryLayer; //定义当前查询的图层 //定位和闪烁初始化定义 private EnumDesignMode enumDesignMode; //模拟规划设计模式 - private string trackflag;//定义阀门查询个数 + private string trackflag; //定义阀门查询个数 //记录沿线飞行设置 //int m_nFlyMode = 2; @@ -67,7 +65,7 @@ Double m_dDigPitWidthAlongLine = 6; Boolean m_bDigPitByDepth = true; //选择管线 - int selectState;//wxl 注释,表示是否已经计算过净距等了,1已计算,0未计算 + int selectState; //wxl 注释,表示是否已经计算过净距等了,1已计算,0未计算 //private OracleConnection connBackup = null; //数据集合 @@ -89,8 +87,8 @@ //双屏对比 //bool zhanshi=false; Thread t = null; - private GSOHudButton legendSC;//定义图例 - private GSOHudButton legendSG;//定义图例 + private GSOHudButton legendSC; //定义图例 + private GSOHudButton legendSG; //定义图例 //管纵图 private GSOHudButton lendendGZ50; private GSOHudButton lendendGZ36; @@ -102,12 +100,13 @@ GSOGeoPoint3D bsqPT; - FrmYJSHTC frmSh;//一键审核窗口全局变量wxl - FrmWait frmWait;//一键审核等待窗口 + FrmYJSHTC frmSh; //一键审核窗口全局变量wxl + FrmWait frmWait; //一键审核等待窗口 //FrmWait frmWait2 = null;//文档操作等待窗口 float mouseDownX1, mouseDownY1; float mouseDownX2, mouseDownY2; + /// /// /// @@ -164,8 +163,9 @@ RigthMenuSet(); MenuSet(); - + } + /// /// 右屏中添加管纵图片 /// @@ -259,6 +259,7 @@ } #region 区域分析 + if (Utility.userRole.IndexOf("区域分析") < 0) { toolRightMenu.Items.Remove(区域分析ToolStripMenuItem); @@ -278,9 +279,11 @@ 区域分析ToolStripMenuItem.DropDownItems.Remove(无源淹没分析ToolStripMenuItem); } } + #endregion #region 视域分析 + if (Utility.userRole.IndexOf("视域分析") < 0) { toolRightMenu.Items.Remove(视域分析ToolStripMenuItem); @@ -300,9 +303,11 @@ 视域分析ToolStripMenuItem.DropDownItems.Remove(可视包络分析ToolStripMenuItem); } } + #endregion #region 开发分析 + if (Utility.userRole.IndexOf("开挖分析") < 0) { toolRightMenu.Items.Remove(开挖分析ToolStripMenuItem); @@ -334,9 +339,11 @@ 开挖分析ToolStripMenuItem.DropDownItems.Remove(删除隧道ToolStripMenuItem); } } + #endregion #region 拓扑分析 + if (Utility.userRole.IndexOf("拓扑分析") < 0) { toolRightMenu.Items.Remove(拓扑分析ToolStripMenuItem); @@ -372,9 +379,11 @@ 拓扑分析ToolStripMenuItem.DropDownItems.Remove(爆管分析ToolStripMenuItem); } } + #endregion #region 断面分析 + if (Utility.userRole.IndexOf("断面分析") < 0) { toolRightMenu.Items.Remove(断面分析ToolStripMenuItem); @@ -398,9 +407,11 @@ 断面分析ToolStripMenuItem.DropDownItems.Remove(基线剖面分析ToolStripMenuItem); } } + #endregion #region 绘制区域统计 + if (Utility.userRole.IndexOf("绘制区域统计") < 0) { toolRightMenu.Items.Remove(绘制区域统计ToolStripMenuItem); @@ -445,9 +456,11 @@ } } + #endregion #region 全区域统计 + if (Utility.userRole.IndexOf("全区域统计") < 0) { toolRightMenu.Items.Remove(全区域统计ToolStripMenuItem); @@ -492,9 +505,11 @@ } } + #endregion #region 查询 + if (Utility.userRole.IndexOf("查询") < 0) { toolRightMenu.Items.Remove(查询ToolStripMenuItem); @@ -542,9 +557,11 @@ 查询ToolStripMenuItem.DropDownItems.Remove(附属物查询ToolStripMenuItem); } } + #endregion #region 标注 + if (Utility.userRole.IndexOf("标注") < 0) { toolRightMenu.Items.Remove(标注ToolStripMenuItem); @@ -592,9 +609,11 @@ 标注ToolStripMenuItem.DropDownItems.Remove(标注管理ToolStripMenuItem); } } + #endregion #region 飞行 + if (Utility.userRole.IndexOf("飞行") < 0) { toolRightMenu.Items.Remove(飞行ToolStripMenuItem); @@ -618,9 +637,11 @@ 飞行ToolStripMenuItem.DropDownItems.Remove(绕眼睛飞行ToolStripMenuItem); } } + #endregion #region 编辑 + if (Utility.userRole.IndexOf("编辑") < 0) { toolRightMenu.Items.Remove(编辑ToolStripMenuItem); @@ -656,9 +677,11 @@ 编辑ToolStripMenuItem.DropDownItems.Remove(删除模型ToolStripMenuItem); } } + #endregion #region 量算 + if (Utility.userRole.IndexOf("量算") < 0) { toolRightMenu.Items.Remove(量算ToolStripMenuItem); @@ -694,6 +717,7 @@ 量算ToolStripMenuItem.DropDownItems.Remove(地表面积ToolStripMenuItem1); } } + #endregion } @@ -701,6 +725,7 @@ { #region 权限管理 + if (Utility.userRole.IndexOf("权限管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem2); @@ -734,9 +759,11 @@ } } + #endregion #region 基础工具 + if (Utility.userRole.IndexOf("基础工具") < 0) { ribbonControl1.Items.Remove(ribbonTabItem1); @@ -781,37 +808,47 @@ } } + #endregion #region 一键审核 + if (Utility.userRole.IndexOf("一键审核") < 0) { ribbonControl1.Items.Remove(ribbonTabItem11); } + #endregion #region 红线审核 + if (Utility.userRole.IndexOf("红线审核") < 0) { ribbonControl1.Items.Remove(ribbonTabItem6); } + #endregion #region 双屏对比 + if (Utility.userRole.IndexOf("双屏对比") < 0) { ribbonControl1.Items.Remove(ribbonTabItem9); } + #endregion #region 文档管理 + if (Utility.userRole.IndexOf("文档管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem4); } + #endregion #region 基础管理 + if (Utility.userRole.IndexOf("基础管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem14); @@ -841,6 +878,7 @@ } #region Fan Zhang 重构现有代码 + //初始化控件布局 private void initLayout() { @@ -848,37 +886,37 @@ double dsw = SW; if (SW > 1440) { - double myScreen = dsw / 1440; - buttonX1.Width = (int)(buttonX1.Width * myScreen); - buttonX2.Width = (int)(buttonX2.Width * myScreen); - buttonX4.Width = (int)(buttonX4.Width * myScreen); - buttonX5.Width = (int)(buttonX5.Width * myScreen); - buttonX6.Width = (int)(buttonX6.Width * myScreen); - buttonX7.Width = (int)(buttonX8.Width * myScreen); - buttonX8.Width = (int)(buttonX8.Width * myScreen); - buttonX9.Width = (int)(buttonX9.Width * myScreen); - buttonX12.Width = (int)(buttonX12.Width * myScreen); - buttonX14.Width = (int)(buttonX14.Width * myScreen); - buttonX15.Width = (int)(buttonX15.Width * myScreen); - buttonX16.Width = (int)(buttonX16.Width * myScreen); - buttonX17.Width = (int)(buttonX17.Width * myScreen); + double myScreen = dsw/1440; + buttonX1.Width = (int) (buttonX1.Width*myScreen); + buttonX2.Width = (int) (buttonX2.Width*myScreen); + buttonX4.Width = (int) (buttonX4.Width*myScreen); + buttonX5.Width = (int) (buttonX5.Width*myScreen); + buttonX6.Width = (int) (buttonX6.Width*myScreen); + buttonX7.Width = (int) (buttonX8.Width*myScreen); + buttonX8.Width = (int) (buttonX8.Width*myScreen); + buttonX9.Width = (int) (buttonX9.Width*myScreen); + buttonX12.Width = (int) (buttonX12.Width*myScreen); + buttonX14.Width = (int) (buttonX14.Width*myScreen); + buttonX15.Width = (int) (buttonX15.Width*myScreen); + buttonX16.Width = (int) (buttonX16.Width*myScreen); + buttonX17.Width = (int) (buttonX17.Width*myScreen); - labelX1.Width = (int)(labelX1.Width * myScreen); - labelX2.Width = (int)(labelX2.Width * myScreen); - labelX3.Width = (int)(labelX3.Width * myScreen); - labelX6.Width = (int)(labelX6.Width * myScreen); - labelX8.Width = (int)(labelX8.Width * myScreen); - labelX9.Width = (int)(labelX9.Width * myScreen); - labelX12.Width = (int)(labelX12.Width * myScreen); - labelX13.Width = (int)(labelX13.Width * myScreen); - labelX14.Width = (int)(labelX14.Width * myScreen); - labelX16.Width = (int)(labelX16.Width * myScreen); - labelX17.Width = (int)(labelX17.Width * myScreen); - labelX11.Width = (int)(labelX11.Width * myScreen); - labelX19.Width = (int)(labelX19.Width * myScreen); - labelX21.Width = (int)(labelX21.Width * myScreen); - labelX22.Width = (int)(labelX22.Width * myScreen); - labelX24.Width = (int)(labelX24.Width * myScreen); + labelX1.Width = (int) (labelX1.Width*myScreen); + labelX2.Width = (int) (labelX2.Width*myScreen); + labelX3.Width = (int) (labelX3.Width*myScreen); + labelX6.Width = (int) (labelX6.Width*myScreen); + labelX8.Width = (int) (labelX8.Width*myScreen); + labelX9.Width = (int) (labelX9.Width*myScreen); + labelX12.Width = (int) (labelX12.Width*myScreen); + labelX13.Width = (int) (labelX13.Width*myScreen); + labelX14.Width = (int) (labelX14.Width*myScreen); + labelX16.Width = (int) (labelX16.Width*myScreen); + labelX17.Width = (int) (labelX17.Width*myScreen); + labelX11.Width = (int) (labelX11.Width*myScreen); + labelX19.Width = (int) (labelX19.Width*myScreen); + labelX21.Width = (int) (labelX21.Width*myScreen); + labelX22.Width = (int) (labelX22.Width*myScreen); + labelX24.Width = (int) (labelX24.Width*myScreen); } sideBar1.Visible = false; sideBar1.ExpandedPanel = sideBarPanelItem3; @@ -899,7 +937,7 @@ splitContainer1.Panel2Collapsed = true; - buttonItem87.Checked = true;//默认地上模式 + buttonItem87.Checked = true; //默认地上模式 ribbonTabItem1.Select(); //初始化状态为浏览 sideBarPanelItem3.Visible = false; @@ -951,7 +989,7 @@ //图例 legend = new GSOHudButton(); - legend.SetImage(Application.StartupPath + "/Resource/图例P.jpg");//图例P + legend.SetImage(Application.StartupPath + "/Resource/图例P.jpg"); //图例P legend.SetOffset(0, 15); legend.MinOpaque = 1; legend.MaxOpaque = 1; @@ -1002,7 +1040,7 @@ globeControl1.Globe.UserBackgroundColor = Color.White; globeControl1.Globe.FlyAlongLineSpeed = m_dFlyAlongLineSpeed; globeControl1.Globe.FlyAlongLineRotateSpeed = m_dFlyAlongLineRotateSpeed; - globeControl1.Globe.FlyToPointSpeed = globeControl1.Globe.FlyToPointSpeed * 3; + globeControl1.Globe.FlyToPointSpeed = globeControl1.Globe.FlyToPointSpeed*3; globeControl1.Globe.EditSnapObject = true; globeControl1.Globe.IsReleaseMemOutOfView = true; globeControl1.Globe.ControlPanel.Visible = true; @@ -1021,18 +1059,22 @@ globeControl2.Globe.UserBackgroundColor = Color.White; globeControl2.Globe.FlyAlongLineSpeed = m_dFlyAlongLineSpeed; globeControl2.Globe.FlyAlongLineRotateSpeed = m_dFlyAlongLineRotateSpeed; - globeControl2.Globe.FlyToPointSpeed = globeControl2.Globe.FlyToPointSpeed * 3; + globeControl2.Globe.FlyToPointSpeed = globeControl2.Globe.FlyToPointSpeed*3; globeControl2.Globe.EditSnapObject = true; globeControl2.Globe.IsReleaseMemOutOfView = true; globeControl2.Globe.ControlPanel.Visible = false; - GSOSimplePolygonStyle3D trackingRectStyle = globeControl1.Globe.TrackRectTool.TrackingPolygonStyle as GSOSimplePolygonStyle3D; + GSOSimplePolygonStyle3D trackingRectStyle = + globeControl1.Globe.TrackRectTool.TrackingPolygonStyle as GSOSimplePolygonStyle3D; trackingRectStyle.FillColor = Color.FromArgb(0, 0, 0, 0); - GSOSimplePolygonStyle3D trackRectStyle = globeControl1.Globe.TrackRectTool.PolygonStyle as GSOSimplePolygonStyle3D; + GSOSimplePolygonStyle3D trackRectStyle = + globeControl1.Globe.TrackRectTool.PolygonStyle as GSOSimplePolygonStyle3D; trackRectStyle.FillColor = Color.FromArgb(0, 0, 0, 0); - GSOSimpleLineStyle3D trackRectLineStyle = globeControl1.Globe.TrackRectTool.PolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; + GSOSimpleLineStyle3D trackRectLineStyle = + globeControl1.Globe.TrackRectTool.PolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; trackRectLineStyle.LineType = EnumLineType.Solid; - GSOSimpleLineStyle3D trackRectLineStyle1 = globeControl1.Globe.TrackRectTool.TrackingPolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; + GSOSimpleLineStyle3D trackRectLineStyle1 = + globeControl1.Globe.TrackRectTool.TrackingPolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; trackRectLineStyle1.LineType = EnumLineType.Solid; trackRectLineStyle1.LineColor = Color.FromArgb(0, 174, 255); trackRectLineStyle1.LineWidth = 1; @@ -1107,7 +1149,7 @@ //加载两个地球数据 private void loadData() { - Thread t1 = new Thread(doLoadDataForGlobalControl1); + Thread t1 = new Thread(doLoadDataForGlobalControl); t1.IsBackground = true; t1.Start(); } @@ -1119,30 +1161,22 @@ globeControl1.Globe.ConnectServer(Utility.serverip, Utility.serverport, "", ""); //加载locaServer中的数据 globeControl2.Globe.ConnectServer(Utility.serverip, Utility.serverport, "", ""); //加载locaServer中的数据 //初始化TreeView - // 勾选实测图层 - foreach (TreeNode tn in layerTree.Nodes) - { - if (tn.Nodes.Count <= 0) continue; - if (tn.Text != "实测数据") continue; - tn.Checked = true; - foreach (TreeNode tnChild in tn.Nodes) - { - tnChild.Checked = true; - foreach (TreeNode tnGrandChild in tnChild.Nodes) - { - tnGrandChild.Checked = true; - } - } - } - } - private void doLoadDataForGlobalControl1() + initLayerTree(); + } + /// + /// 加载地球1、2的图层 + /// + private void doLoadDataForGlobalControl() { try { globeControl1.Globe.Layers.MoveDown(10000); //加载实测管线数据 - Utility.dataSource = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.DBServer.Trim() + "/" + Utility.dbdatabase.Trim(), "", "", Utility.userID, Utility.DBPassword); + Utility.dataSource = + globeControl1.Globe.DataManager.OpenOracleDataSource( + Utility.DBServer.Trim() + "/" + Utility.dbdatabase.Trim(), "", "", Utility.userID, + Utility.DBPassword); if (Utility.dataSource != null) { @@ -1160,7 +1194,9 @@ globeControl1.Globe.Layers.GetLayerByCaption("红线").Visible = false; //globleControl1中加载规划数据 - GSODataSource ghDS = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.ghdbip + "/" + Utility.ghdbname, "", "", Utility.ghdbuser, Utility.ghdbpwd); + GSODataSource ghDS = + globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.ghdbip + "/" + Utility.ghdbname, "", "", + Utility.ghdbuser, Utility.ghdbpwd); if (ghDS != null) { for (int j = 0; j < ghDS.DatasetCount; j++) @@ -1176,13 +1212,16 @@ } //globeControl1,globeControl2中加载施工数据 - GSODataSource sgDS = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.sgdbip + "/" + Utility.sgdbname, "", "", Utility.sgdbuser, Utility.sgdbpwd); + GSODataSource sgDS = + globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.sgdbip + "/" + Utility.sgdbname, "", "", + Utility.sgdbuser, Utility.sgdbpwd); if (sgDS != null) { for (int m = 0; m < sgDS.DatasetCount; m++) { GSODataset dataset = sgDS.GetDatasetAt(m); - if (dataset != null && !dataset.Caption.Contains("SH") && Utility.dictionaryNetLayerNameAndCaption.ContainsKey(dataset.Caption)) + if (dataset != null && !dataset.Caption.Contains("SH") && + Utility.dictionaryNetLayerNameAndCaption.ContainsKey(dataset.Caption)) { dataset.Caption = dataset.Name; globeControl1.Globe.Layers.Add(dataset); @@ -1196,12 +1235,12 @@ // LoadDataForGlobalControl ss = connectServer; // ss(); - + this.Invoke((EventHandler) delegate { connectServer(); }); - + } catch (Exception ex) @@ -1212,67 +1251,17 @@ private void initLayerTree() { + layerTree.Nodes.Clear(); //加载临时图层节点 layerManagerNode = new TreeNode(); layerManagerNode.ImageIndex = 0; layerManagerNode.SelectedImageIndex = 0; layerManagerNode.Checked = true; layerManagerNode.Text = "临时图层"; + layerManagerNode.Tag = layerTemp; layerTree.Nodes.Add(layerManagerNode); - XmlDocument doc = new XmlDocument(); - doc.Load(Utility.filename); - XmlNodeList xmlLayerNodes = doc.SelectNodes("//layer"); - - foreach (XmlNode xmlLayerNode in xmlLayerNodes) - { - - //TODO LIST:创建一级TreeNode(实测、规划、施工) - TreeNode nodelayer = new TreeNode(); - string layerName = xmlLayerNode.Attributes["label"].Value; - nodelayer.Text = layerName; - nodelayer.Checked = false; - layerTree.Nodes.Add(nodelayer); - - XmlNodeList xmlChildLayerNodes = xmlLayerNode.ChildNodes; - foreach (XmlNode xmlChildLayerNode in xmlChildLayerNodes) - { - //TODO LIST:创建二级TreeNode节点 - TreeNode secondLevelNode = new TreeNode(); - string layerType = xmlChildLayerNode.Attributes["label"].Value; - secondLevelNode.Text = layerType; - - if (xmlChildLayerNode.Attributes["type"] != null) - { //道路图层特殊处理 - string type = xmlChildLayerNode.Attributes["type"].Value; - secondLevelNode.Tag = type + "|" + layerType; - } - else - { - secondLevelNode.Tag = layerType; - } - secondLevelNode.Checked = false; - nodelayer.Nodes.Add(secondLevelNode); - - XmlNodeList xmlActitualLayerNodes = xmlChildLayerNode.ChildNodes; - - foreach (XmlNode xmlActitualLayerNode in xmlActitualLayerNodes) - { - //TODO LIST:创建三级图层节点 - TreeNode layerNode = new TreeNode(); - string actutallylayerType = xmlActitualLayerNode.Attributes["type"].Value; - string actutallylayerName = xmlActitualLayerNode.Attributes["layer"].Value; - string actutallyLabelName = xmlActitualLayerNode.Attributes["label"].Value; - - layerNode.Text = actutallyLabelName; - layerNode.Tag = layerType + "|" + actutallyLabelName; - layerNode.Checked = false; - secondLevelNode.Nodes.Add(layerNode); - } - - } - - } + TreeUtils.InitLayerTree(globeControl1, layerTree, null); } @@ -1298,7 +1287,8 @@ for (int i = 0; i < markerStrs.Length; i++) { if (!File.Exists(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd")) continue; - GSOLayer markerLayer = globeControl1.Globe.Layers.Add(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd"); + GSOLayer markerLayer = + globeControl1.Globe.Layers.Add(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd"); if (markerLayer == null) continue; TreeNode node1 = new TreeNode(); node1.Text = markerLayer.Caption; @@ -1312,9 +1302,11 @@ private void MainFrm_Load(object sender, EventArgs e) { + + layerTree.Nodes.Add("正在加载,请稍后……");//树状图加载在图层加载之后,故增加提示 initGlobalControl(); //initGlobalMap(); - initLayerTree(); +// initLayerTree(); initMarkerTree(); initLayout(); loadData(); @@ -1383,7 +1375,7 @@ tempnode.Checked = node.Checked ? feature.Visible : false; tempnode.Tag = feature; node.Nodes.Add(tempnode); - GSOFeatureFolder featureFolder = (GSOFeatureFolder)feature; + GSOFeatureFolder featureFolder = (GSOFeatureFolder) feature; VisitFeature3Ds(featureFolder.Features, tempnode); } else @@ -1444,7 +1436,7 @@ /// Boolean CheckDatasetGeoReference(GSODataset dataset, string strDataPath) { - + if (dataset.GeoReferenceType != EnumGeoReferenceType.Flat) return true; Boolean bSuccess = false; if (MessageBox.Show("数据没有空间参考信息,请设置空间参考信息!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) != @@ -1498,7 +1490,7 @@ dlg.Filter = "输出JPEG(*.jpg)|*.jpg|输出PNG(*.png)|*.png|输出BMP(*.bmp)|*.bmp|输出BMP(*.gif)|*.gif"; if (dlg.ShowDialog() == DialogResult.OK) { - string extension = Path.GetExtension(dlg.FileName);//扩展名 + string extension = Path.GetExtension(dlg.FileName); //扩展名 switch (extension) { case ".jpg": @@ -1520,6 +1512,7 @@ globeControl1.Globe.Action = EnumAction3D.ActionNull; globeControl1.Globe.MouseRoamingEnable = true; } + /// /// 定位正北正90度俯视 /// @@ -1548,7 +1541,6 @@ void globeControl1_HudControlMouseIntoEvent(object sender, HudControlMouseIntoEventArgs e) { - GSOHudButton btn = e.HudControl as GSOHudButton; tooltip1 = new ToolTip(); switch (e.HudControl.Name) { @@ -1573,163 +1565,46 @@ break; } } - /// - /// layerTree选中后事件处理 - /// - /// - /// + + #region wxl 重构树形结构代码 + private void layerTree_AfterCheck(object sender, TreeViewEventArgs e) { - if (e.Node.Tag != null) + if (e.Action != TreeViewAction.Unknown) { - if (e.Node.Tag.ToString().Contains("|")) - { - string nodeTag = e.Node.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(nodeTag); - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - if (e.Node.Tag is GSOFeature) - { - if (e.Node.Nodes.Count == 0) - { - GSOFeature feat = e.Node.Tag as GSOFeature; - feat.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - } - CheckControl(e); - } - /// - /// 树节点选中方法 - /// - /// - private void CheckControl(TreeViewEventArgs e) - { - if (e.Action == TreeViewAction.Unknown||e.Node == null || Convert.IsDBNull(e.Node)) return; - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - { - CheckAllChildNodes(e.Node, e.Node.Checked); - } - } - /// - /// 改变所有子节点的状态 - /// - /// - /// - private void CheckAllChildNodes(TreeNode pn, bool IsChecked) - { - foreach (TreeNode tn in pn.Nodes) - { - tn.Checked = IsChecked; - - if (tn.Nodes.Count > 0) - { - CheckAllChildNodes(tn, IsChecked); - } + TreeUtils.TreeNodeCheckedChange(globeControl1, e.Node); } } - //改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 - private void CheckParentNode(TreeNode curNode) - { - bool bChecked = false; - - if (curNode.Parent == null) return; - foreach (TreeNode node in curNode.Parent.Nodes) - { - if (node.Checked) - { - bChecked = true; - break; - } - } - - if (bChecked) - { - curNode.Parent.Checked = true; - CheckParentNode(curNode.Parent); - } - else - { - curNode.Parent.Checked = false; - CheckParentNode(curNode.Parent); - } - } - + #endregion private void layerTree_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (e.Button != MouseButtons.Right) return; layerTree.SelectedNode = e.Node; - if (e.Node.Tag == null) return; - if (e.Button == MouseButtons.Right && e.Node.Tag.ToString().Contains("|")) + if (e.Node.Tag == null || e.Node.Parent == null) return; //排除无图层节点和第一级节点 + + //来自locaserver的数据,直接返回就行了,目前只有一个180fd,暂时单独处理 + GSOLayer gsoLayer = e.Node.Tag as GSOLayer; + if (gsoLayer == null || gsoLayer.Caption.Equals(Utility.roadLayerName)) return; + if (e.Node.Parent.Text.Equals("临时图层") || e.Node.Parent.Text.Equals("我的地标")) { - - if (e.Node.Tag.ToString().Split('|')[0] == "locaserver") - { - - foreach (ToolStripItem item in layerNodeContexMenu.Items) - { - item.Visible = false; - } - return; - - } - - if (e.Node.Tag.ToString().Split('|')[0] == "new") - { - LayerEditableMenuItem.Enabled = true; - foreach (ToolStripItem item in layerNodeContexMenu.Items) - { - item.Visible = false; - } - //LayerSelectableMenuItem.Visible = true; - //LayerEditableMenuItem.Visible = true; - RemoveLayer.Visible = true; - RefreshLayerFeatureListMenuItem.Visible = true; - //SaveLayerMenuItem.Visible = true; - //LayerFlyMenuItem.Visible = true; - } - + //临时图层下的子节点应该展示的 + contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); + contextMenuStripDeleteLayerNode.Tag = e.Node; + } + else + { LayerSelectableMenuItem.Visible = true; LayerEditableMenuItem.Visible = true; SaveLayerMenuItem.Visible = true; LayerFlyMenuItem.Visible = true; 导出CADToolStripMenuItem1.Visible = true; - layerNodeContexMenu.Show(layerTree, e.X, e.Y); layerNodeContexMenu.Tag = e.Node; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(e.Node.Tag.ToString().Split('|')[1]); - if (layer != null) - { - LayerSelectableMenuItem.Checked = layer.Selectable; - LayerEditableMenuItem.Checked = layer.Editable; - } + LayerSelectableMenuItem.Checked = gsoLayer.Selectable; + LayerEditableMenuItem.Checked = gsoLayer.Editable; } - else - { - if (e.Node.Tag is GSOLayer && e.Node.Parent != null && e.Node.Parent.Text.Trim() == "临时图层") - { - contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); - contextMenuStripDeleteLayerNode.Tag = e.Node; - } - else if (e.Node.Tag is GSOFeature && e.Node.Parent != null && e.Node.Parent.Text.Trim() == "我的地标") - { - contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); - contextMenuStripDeleteLayerNode.Tag = e.Node; - } - } + } /// @@ -1740,75 +1615,61 @@ private void 删除ToolStripMenuItem2_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "临时图层") + if (node == null || node.Parent == null) return; + if (node.Parent.Text.Trim() == "临时图层") { - if (node.Tag is GSOLayer) - { - GSOLayer layer = node.Tag as GSOLayer; - - for (int i = globeControl1.Globe.Layers.Count - 1; i >= 0; i--) - { - if (globeControl1.Globe.Layers[i].Caption == layer.Caption) - { - globeControl1.Globe.Layers.Remove(globeControl1.Globe.Layers[i]); - } - } - - globeControl1.Globe.Refresh(); - - node.Remove(); - } - } - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "我的地标") + if (!(node.Tag is GSOLayer)) return; + GSOLayer layer = node.Tag as GSOLayer; + globeControl1.Globe.Layers.Remove(layer); + globeControl1.Globe.Refresh(); + node.Remove(); + }else if (node.Parent.Text.Trim() == "我的地标") { - if (node.Tag is GSOFeature) - { - GSOFeature f = node.Tag as GSOFeature; - f.Delete(); - globeControl1.Globe.Refresh(); - - node.Remove(); - } + if (!(node.Tag is GSOFeature)) return; + GSOFeature f = node.Tag as GSOFeature; + f.Delete(); + globeControl1.Globe.Refresh(); + node.Remove(); } + } private void 可编辑ToolStripMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "临时图层") - { - if (node.Tag is GSOLayer) - { - GSOLayer layer = node.Tag as GSOLayer; - - 可编辑ToolStripMenuItem.Checked = !可编辑ToolStripMenuItem.Checked; - layer.Editable = 可编辑ToolStripMenuItem.Checked; - } - } + if (node == null || + node.Parent == null || + node.Parent.Text.Trim() != "临时图层" || !(node.Tag is GSOLayer)) return; + GSOLayer layer = node.Tag as GSOLayer; + 可编辑ToolStripMenuItem.Checked = !可编辑ToolStripMenuItem.Checked; + layer.Editable = 可编辑ToolStripMenuItem.Checked; } private void 保存ToolStripMenuItem_Click(object sender, EventArgs e) { - //TreeNode node = layerNodeContexMenu.Tag as TreeNode; - TreeNode node = contextMenuStripDeleteLayerNode.Tag as TreeNode; - - Int32 nIndex = node.Index; - string layerCaption = node.Text;//.Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); +// TreeNode node = contextMenuStripDeleteLayerNode.Tag as TreeNode; + TreeNode node = layerTree.SelectedNode; + if (node == null||node.Tag==null) return; + GSOLayer layer = node.Tag as GSOLayer; + if (layer == null) return; layer.Dataset.Save(); } - + //TODO LIST: wxl? Tag更正 private void 定位ToolStripMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - - if (node == null) return; + if (node == null||node.Parent==null) return; if (node.Parent.Text.Trim() == "临时图层") { - GSOLayer lsLayer = globeControl1.Globe.Layers.GetLayerByCaption(node.Text); + GSOLayer lsLayer = node.Tag as GSOLayer; + if (lsLayer == null) + { + LogHelper.WriteLog(typeof(MainFrm),"要定位的临时图层不存在:"+node.Text); + return; + } double x = lsLayer.LatLonBounds.Center.X; double y = lsLayer.LatLonBounds.Center.Y; - if (x == 0 && y == 0) + if (x.Equals(0) && y.Equals(0)) { x = lsLayer.Bounds.Center.X; y = lsLayer.Bounds.Center.Y; @@ -1818,20 +1679,14 @@ } else { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); - + GSOLayer layer = node.Tag as GSOLayer; if (layer == null) return; - if (layer.Caption == "红线") + if (layer.Caption.Equals("红线")) { globeControl1.Globe.FlyToPosition(new GSOPoint3d(120.610963, 31.188121, 50), EnumAltitudeMode.Absolute, -4, 50, 1000); globeControl1.Globe.FlyToPointSpeed = 10000000; globeControl1.Globe.Action = EnumAction3D.SelectObject; - - GSOLayer redLayer = globeControl1.Globe.Layers.GetLayerByCaption("红线"); - if (redLayer != null) - { - redLayer.Visible = true; - } + layer.Visible = true; globeControl1.Refresh(); } else @@ -1842,55 +1697,28 @@ } } } - + //TODO LIST: wxl? Tag更正 private void layerTree_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) { - if (layerTree.SelectedNode == null) return; - if (layerTree.SelectedNode.Tag.ToString().Contains("|")) + TreeNode node = layerTree.SelectedNode; + if (node == null) return; + if (node.Tag is GSOLayer) { - string nodeTag = layerTree.SelectedNode.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(nodeTag); - if (layer != null) + GSOLayer layer = node.Tag as GSOLayer; + if (layer.GetAllFeatures().Length <= 0) return; + GSOFeature feature = layer.GetAt(0); + if (feature != null && feature.Geometry != null) { - if (layer.Caption == "红线") - { - globeControl1.Globe.FlyToPosition(new GSOPoint3d(120.610963, 31.188121, 50), EnumAltitudeMode.Absolute, -4, 50, 1000); - globeControl1.Globe.FlyToPointSpeed = 10000000; - globeControl1.Globe.Action = EnumAction3D.SelectObject; - - GSOLayer redLayer = globeControl1.Globe.Layers.GetLayerByCaption("红线"); - if (redLayer != null) - { - redLayer.Visible = true; - } - globeControl1.Refresh(); - } - else - { - double x = layer.LatLonBounds.Center.X; - double y = layer.LatLonBounds.Center.Y; - globeControl1.Globe.FlyToPosition(new GSOPoint3d(x, y, 0), EnumAltitudeMode.Absolute); - } + globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute);//, 0, 0, 1000); + } + else + { + globeControl1.Globe.FlyToFeature(feature); } } - if (layerTree.SelectedNode.Tag is GSOLayer) + else if (node.Tag is GSOFeature) { - GSOLayer layer = layerTree.SelectedNode.Tag as GSOLayer; - if (layer.GetAllFeatures().Length > 0) - { - GSOFeature feature = layer.GetAt(0); - if (feature != null && feature.Geometry != null) - { - globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute);//, 0, 0, 1000); - } - else - { - globeControl1.Globe.FlyToFeature(feature); - } - } - } else if (layerTree.SelectedNode.Tag is GSOFeature) - { - GSOFeature feature = layerTree.SelectedNode.Tag as GSOFeature; + GSOFeature feature = node.Tag as GSOFeature; if (feature.Geometry != null) { globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute, 0, 0, 10); @@ -2231,15 +2059,7 @@ int idx = dataGridViewX2.Rows.Add(); dataGridViewX2.Rows[idx].Tag = feat; dataGridViewX2.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX2.Rows[idx].Cells[1].Value = featureName; } } @@ -2261,15 +2081,7 @@ int idx = dataGridViewLineList.Rows.Add(); dataGridViewLineList.Rows[idx].Tag = feat; dataGridViewLineList.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewLineList.Rows[idx].Cells[1].Value = featureName; } } @@ -2291,15 +2103,7 @@ int idx = dataGridViewX8.Rows.Add(); dataGridViewX8.Rows[idx].Tag = feat; dataGridViewX8.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX8.Rows[idx].Cells[1].Value = featureName; } } @@ -2321,15 +2125,7 @@ int idx = dataGridViewX4.Rows.Add(); dataGridViewX4.Rows[idx].Tag = feat; dataGridViewX4.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX4.Rows[idx].Cells[1].Value = featureName; } @@ -2353,15 +2149,7 @@ int idx = dataGridViewX6.Rows.Add(); dataGridViewX6.Rows[idx].Tag = feat; dataGridViewX6.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX6.Rows[idx].Cells[1].Value = featureName; } } @@ -2736,77 +2524,104 @@ return str; } - //string filename = Utility.filename; - //List g1layername = new List(); - /// /// 获取目标图层 /// /// +// private GSOLayer TreeNodeFeatureLayer() +// { +// TreeNode featureAddPipeFitTreenode = GetDestLayerFeatureAddTreeNode(); +// GSOLayer featureAddLayer = globeControl1.Globe.Layers.GetLayerByCaption(featureAddPipeFitTreenode.Tag.ToString().Split('|')[1]); +// +// return featureAddLayer; +// } + //TODO LIST: wxl11? 待更正,Node的Tag现在都已经统一为gsolayer对象了 +// private TreeNode GetDestLayerFeatureAddTreeNode() +// { +// for (int i = 0; i < layerTree.Nodes.Count; i++) +// { +// TreeNode tempNode = layerTree.Nodes[i]; +// for (int j = 0; j < tempNode.Nodes.Count; j++) +// { +// TreeNode tempChildNode = tempNode.Nodes[j]; +// if (tempChildNode.Tag.ToString().Split('|').Length > 1) // Config配置文件配置的图层 +// {//本层节点Tag记录layer +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode; +// } +// } +// else //临时添加的本地图层 +// {//子层节点的Tag记录layer +// for (int m = 0; m < tempChildNode.Nodes.Count; m++) +// { +// TreeNode tempChildNode1 = tempChildNode.Nodes[m]; +// if (tempChildNode1.Tag.ToString().Split('|').Length > 1) +// { +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode1.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode1.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode1; +// } +// } +// else +// { +// for (int n = 0; n < tempChildNode1.Nodes.Count; n++) +// { +// TreeNode tempChildNode2 = tempChildNode1.Nodes[n]; +// if (tempChildNode2.Tag.ToString().Split('|').Length <= 1) continue; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode2.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode2.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode2; +// } +// } +// } +// } +// } +// } +// } +// return null; +// } private GSOLayer TreeNodeFeatureLayer() { TreeNode featureAddPipeFitTreenode = GetDestLayerFeatureAddTreeNode(); - GSOLayer featureAddLayer = globeControl1.Globe.Layers.GetLayerByCaption(featureAddPipeFitTreenode.Tag.ToString().Split('|')[1]); - - return featureAddLayer != null ? featureAddLayer : null; + if (featureAddPipeFitTreenode == null) return null; + GSOLayer featureAddLayer = featureAddPipeFitTreenode.Tag as GSOLayer; + return featureAddLayer; } - + //遍历最深三层找到目标node. private TreeNode GetDestLayerFeatureAddTreeNode() { - for (int i = 0; i < layerTree.Nodes.Count; i++) + + foreach (TreeNode layerTreeNode in layerTree.Nodes) { - TreeNode tempNode = layerTree.Nodes[i]; - for (int j = 0; j < tempNode.Nodes.Count; j++) + if (layerTreeNode.Tag == null && layerTreeNode.Nodes.Count > 0) { - TreeNode tempChildNode = tempNode.Nodes[j]; - if (tempChildNode.Tag.ToString().Split('|').Length > 1) // Config配置文件配置的图层 + foreach (TreeNode node in layerTreeNode.Nodes) { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode; - } + GSOLayer gsoLayer = node.Tag as GSOLayer; + if (gsoLayer != null && gsoLayer.IsDestLayerFeatureAdd()) return node; + } - else //临时添加的本地图层 - { - for (int m = 0; m < tempChildNode.Nodes.Count; m++) - { - TreeNode tempChildNode1 = tempChildNode.Nodes[m]; - if (tempChildNode1.Tag.ToString().Split('|').Length > 1) - { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode1.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode1.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode1; - } - } - else - { - for (int n = 0; n < tempChildNode1.Nodes.Count; n++) - { - TreeNode tempChildNode2 = tempChildNode1.Nodes[n]; - if (tempChildNode2.Tag.ToString().Split('|').Length <= 1) continue; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode2.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode2.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode2; - } - } - } - } - } + } + else + { + GSOLayer gsoLayer = layerTreeNode.Tag as GSOLayer; + if (gsoLayer != null && gsoLayer.IsDestLayerFeatureAdd()) return layerTreeNode; } } return null; @@ -3221,6 +3036,7 @@ } } } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 目标图层 菜单 /// @@ -3228,14 +3044,15 @@ /// private void FeatureAddLayerMenuItem_Click(object sender, EventArgs e) { - if (!FeatureAddLayerMenuItem.Checked) - { - TreeNode node = layerNodeContexMenu.Tag as TreeNode; - FeatureAddLayerMenuItem.Checked = true; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); - globeControl1.Globe.DestLayerFeatureAdd = layer; - } + if (FeatureAddLayerMenuItem.Checked) return; + TreeNode node = layerNodeContexMenu.Tag as TreeNode; + FeatureAddLayerMenuItem.Checked = true; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; + globeControl1.Globe.DestLayerFeatureAdd = layer; } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 可选择 菜单 /// @@ -3244,11 +3061,13 @@ private void LayerSelectableMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - Int32 nIndex = node.Index; - GSOLayer layer = globeControl1.Globe.Layers[nIndex]; +// GSOLayer layer = globeControl1.Globe.Layers[nIndex]; + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; LayerSelectableMenuItem.Checked = !LayerSelectableMenuItem.Checked; - layer.Selectable = LayerSelectableMenuItem.Checked; + if (layer != null) layer.Selectable = LayerSelectableMenuItem.Checked; } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 可编辑 菜单 /// @@ -3257,23 +3076,27 @@ private void LayerEditableMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; LayerEditableMenuItem.Checked = !LayerEditableMenuItem.Checked; - layer.Editable = LayerEditableMenuItem.Checked; + if (layer != null) layer.Editable = LayerEditableMenuItem.Checked; } /// /// 图层目录树 右键菜单中的 保存 菜单 /// /// /// + //TODO LIST: wxl? Tag更正 private void SaveLayerMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - Int32 nIndex = node.Index; - string layerCaption = node.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); - layer.Dataset.Save(); +// string layerCaption = node.Tag.ToString().Split('|')[1]; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; + if (layer != null) layer.Dataset.Save(); } #region wxl feature的公共方法 @@ -3455,7 +3278,6 @@ return; GSOFeatureLayer flayer = layer as GSOFeatureLayer; - GSOFeatureDataset fdataset = flayer.Dataset as GSOFeatureDataset; GSOFeatures feats = flayer.GetAllFeatures(); for (int i = 0; i < feats.Length; i++) { @@ -3480,7 +3302,6 @@ return; GSOFeatureLayer flayer = layer as GSOFeatureLayer; - GSOFeatureDataset fdataset = flayer.Dataset as GSOFeatureDataset; GSOFeatures feats = flayer.GetAllFeatures(); for (int i = 0; i < feats.Length; i++) { @@ -5508,7 +5329,6 @@ private void addNodeToLayerManagerNode(GSOLayer layer) { if (layer == null) return; - GSODataset dataset = layer.Dataset; CheckDatasetGeoReference(layer.Dataset, ""); TreeNode node = new TreeNode(); @@ -5527,43 +5347,24 @@ /// /// /// - public int getLabelName(GSOLayer layer) - { - int nid = -1; - if (layer.GetAllFeatures().Length > 0) - { - string id = layer.GetAllFeatures()[layer.GetAllFeatures().Length - 1].Name; +// public int getLabelName(GSOLayer layer) +// { +// int nid = -1; +// if (layer.GetAllFeatures().Length > 0) +// { +// string id = layer.GetAllFeatures()[layer.GetAllFeatures().Length - 1].Name; +// +// int.TryParse(id, out nid); +// } +// else +// { +// nid = 0; +// } +// return nid; +// } - int.TryParse(id, out nid); - } - else - { - nid = 0; - } - return nid; - } /// - /// 判断选中的对象是否为管线 - /// - /// 被选中管线 - /// 返回一根线 - private GSOFeature IsPipeLineOfSelectedObj() - { - GSOFeature resFeature = null; - if (globeControl1.Globe.SelObjectCount < 1) return null; - GSOLayer resLayer = null; - globeControl1.Globe.GetSelectObject(0, out resFeature, out resLayer); - if (resFeature == null) return null; - - GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; - if (line1 == null) return null; - GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; - if (pipeStyle1 == null) return null; - - return resFeature; - } - /// /// 图层节点树中 节点 右键单击事件处理 /// /// @@ -5615,13 +5416,15 @@ { TreeNode node = contextMenuStrip2.Tag as TreeNode; TreeNode parentNode = node.Parent; - Int32 nIndex = node.Index; if (parentNode.Text == "标注管理" || parentNode.Text == "传感器管理") { RefreshTreeNodeLayerFeatureList(node); } } + + #region wxl? VisitFeature3Ds的作用,重构后,是否对其有影响 + /// /// 给指定的图层节点添加代表feature对象的子节点 /// @@ -5636,6 +5439,9 @@ VisitFeature3Ds(layer.GetAllFeatures(), layerTreeNode); } } + + #endregion + /// /// 标注管理、传感器管理 图层目录树的右键菜单中的 移除所有 菜单 /// @@ -5660,53 +5466,11 @@ { if (e.Action != TreeViewAction.Unknown) { - CheckTreeNode(e.Node, e.Node.Checked); + //wxl优化标注管理树形结构 + TreeUtils.TreeNodeCheckedChange(globeControl1,e.Node); } } - /// - /// 改变指定节点对应的复选框的选中状态 - /// - /// - /// - private void CheckTreeNode(TreeNode node, Boolean bChecked) - { - CheckChildTreeNode(node, bChecked); - globeControl1.Globe.Refresh(); - } - /// - /// 改变指定节点的子节点对应的复选框的选中状态 - /// - /// - /// - private void CheckChildTreeNode(TreeNode node, Boolean bChecked) - { - if (node == null) - return; - if (node.Tag != null) - { - if (node.Tag.GetType() == typeof(GSOFeatureFolder) || node.Tag.GetType() == typeof(GSOFeature)) - ((GSOFeature)node.Tag).SetVisibleDirectly(bChecked); - else - { - GSOLayer curLayer = node.Tag as GSOLayer; - GSOTerrain curTerrain = node.Tag as GSOTerrain; - if (curLayer != null) - { - curLayer.Visible = bChecked; - } - else if (curTerrain != null) - { - curTerrain.Visible = bChecked; - } - } - } - // 递归处理子节点 - for (int i = 0; i < node.Nodes.Count; i++) - { - node.Nodes[i].Checked = bChecked; - CheckChildTreeNode(node.Nodes[i], bChecked); - } - } + /// /// 标注管理、传感器管理 目录树中的feature节点的右键菜单中的 删除 菜单 /// @@ -5984,7 +5748,7 @@ frmModify = new FrmMnModify(globeControl1, shlayername, shresultLists); - if (boolfrmModify != false) return; + if (boolfrmModify) return; frmModify.Owner = this; frmModify.Location = new Point(Width - frmModify.Width - 10, Height - frmModify.Height - 50); frmModify.Show(); @@ -6261,16 +6025,15 @@ globeControl1.Globe.ClearMeasure(); layerTemp.RemoveAllFeature(); - layerTemp2.RemoveAllFeature(); buttonItemLS5.Checked = false; dataGridViewX1.DataSource = null; panelOfTable.Visible = false; globeControl1.Globe.MemoryLayer.RemoveAllFeature(); + globeControl2.Globe.MemoryLayer.RemoveAllFeature(); globeControl1.Globe.ClearAnalysis(); - // 清除净距分析结果 buttonX2_Click(null, null); buttonX8_Click(null, null); @@ -6527,8 +6290,8 @@ GSOFeatures selectFeatures = new GSOFeatures(); for (int i = 0; i < globeControl1.Globe.SelObjectCount; i++) { - GSOFeature feature = null; - GSOLayer layer = null; + GSOFeature feature; + GSOLayer layer; globeControl1.Globe.GetSelectObject(i, out feature, out layer); if (feature != null && feature.Geometry != null && feature.Geometry.Type == EnumGeometryType.GeoPolyline3D) { @@ -6536,11 +6299,9 @@ } } List feats = SectionAnalysisTool.ZDMAnalysis(selectFeatures); - if (feats != null && feats.Count >= 1) - { - FrmProfileAnalysis frm = new FrmProfileAnalysis(globeControl1, feats); - frm.Show(this); - } + if (feats == null || feats.Count < 1) return; + FrmProfileAnalysis frm = new FrmProfileAnalysis(globeControl1, feats); + frm.Show(this); } /// /// 道路断面分析 @@ -7057,14 +6818,14 @@ /// private void buttonItemSZ1_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7075,17 +6836,17 @@ /// /// 管径标注 /// - GSOFeature radiusMarkerFeature; +// GSOFeature radiusMarkerFeature; private void buttonItemBZ2_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine==null||selLine[0].Count <= 1)//wxl增加为空判断,下面方法同理 + if (selLine == null || selLine[0].Count <= 1) //wxl增加为空判断,下面方法同理 { return; } @@ -7100,14 +6861,14 @@ /// private void buttonItemBZ3_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null||selLine[0].Count <= 1) { return; } @@ -7123,14 +6884,14 @@ /// private void buttonItemBZ4_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7140,7 +6901,7 @@ /// /// 距离标注 /// - bool distanceMarker; +// bool distanceMarker; private void buttonItemBZ5_Click(object sender, EventArgs e) { //日志记录 @@ -7148,7 +6909,7 @@ globeControl1.Globe.Action = EnumAction3D.TrackPolyline; //globeControl1.Globe.DistanceRuler.MeasureMode = EnumDistanceMeasureMode.HVSLineMeasure; - distanceMarker = true; +// distanceMarker = true; } /// /// 自定义标注 @@ -7187,14 +6948,14 @@ /// private void buttonItemBZ8_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7775,11 +7536,9 @@ if (frm.ShowDialog() == DialogResult.OK) { GSOLayer featureAddLayer = TreeNodeFeatureLayer(); - if (featureAddLayer != null) - { - FrmAddInstrument dlg = new FrmAddInstrument(globeControl1, featureAddLayer); - dlg.Show(this); - } + if (featureAddLayer == null) return; + FrmAddInstrument dlg = new FrmAddInstrument(globeControl1, featureAddLayer); + dlg.Show(this); } } /// @@ -7822,11 +7581,9 @@ frm.citySevenLineType); globeControl1.Tag = citySevenLine; GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(frm.citySevenLineType); - if (layer != null) - { - globeControl1.Globe.DestLayerFeatureAdd = layer; - layer.Editable = true; - } + if (layer == null) return; + globeControl1.Globe.DestLayerFeatureAdd = layer; + layer.Editable = true; } } #endregion @@ -7986,44 +7743,45 @@ LogManager.saveLog(Utility.userName, buttonItemBJ10_2.Text); List listVectorNames = new List(); - for (int i = 0; i < Utility.m_PipelineLayerNames.Count; i++) + foreach (string pipeline in Utility.m_PipelineLayerNames) { - if (!listVectorNames.Contains(Utility.m_PipelineLayerNames[i])) + if (!listVectorNames.Contains(pipeline)) { - listVectorNames.Add(Utility.m_PipelineLayerNames[i]); + listVectorNames.Add(pipeline); } } - for (int i = 0; i < Utility.valueLayerNames.Count; i++) + foreach (string valve in Utility.valueLayerNames) { - if (!listVectorNames.Contains(Utility.valueLayerNames[i])) + if (!listVectorNames.Contains(valve)) { - listVectorNames.Add(Utility.valueLayerNames[i]); + listVectorNames.Add(valve); } } - for (int i = 0; i < Utility.workwellLayerNames.Count; i++) + foreach (string workwell in Utility.workwellLayerNames) { - if (!listVectorNames.Contains(Utility.workwellLayerNames[i])) + if (!listVectorNames.Contains(workwell)) { - listVectorNames.Add(Utility.workwellLayerNames[i]); + listVectorNames.Add(workwell); } } - for (int i = 0; i < Utility.instrumenLayerNames.Count; i++) + foreach (string instrument in Utility.instrumenLayerNames) { - if (!listVectorNames.Contains(Utility.instrumenLayerNames[i])) + if (!listVectorNames.Contains(instrument)) { - listVectorNames.Add(Utility.instrumenLayerNames[i]); + listVectorNames.Add(instrument); } } - for (int i = 0; i < Utility.pipefittingLayerNames.Count; i++) + foreach (string pipefitting in Utility.pipefittingLayerNames) { - if (!listVectorNames.Contains(Utility.pipefittingLayerNames[i])) + if (!listVectorNames.Contains(pipefitting)) { - listVectorNames.Add(Utility.pipefittingLayerNames[i]); + listVectorNames.Add(pipefitting); } } FrmExportVector frm = new FrmExportVector(globeControl1, listVectorNames); frm.ShowDialog(); } + /// /// 删除模型 /// @@ -8032,27 +7790,25 @@ private void buttonItemBJ13_Click(object sender, EventArgs e) { LogManager.saveLog(Utility.userName, buttonItemBJ13.Text); - if (globeControl1.Globe.SelObjectCount > 0) - { - for (int i = 0; i < globeControl1.Globe.SelObjectCount; i++) - { - GSOFeature f = null; - GSOLayer layer = null; - globeControl1.Globe.GetSelectObject(i, out f, out layer); - if (f == null) continue; - f.Delete(); - if (layer != null) - globeControl1.Globe.AddToEditHistroy(layer, f, EnumEditType.Delete); - globeControl1.Refresh(); - - } - MessageBox.Show("删除成功!", "提示"); - } - else + var selObjCount = globeControl1.Globe.SelObjectCount; + if (selObjCount == 0) { MessageBox.Show("请选中要删除的模型!", "提示"); + return; } + for (int i = 0; i < selObjCount; i++) + { + GSOFeature f; + GSOLayer layer; + globeControl1.Globe.GetSelectObject(i, out f, out layer); + if (f == null) continue; + f.Delete(); + if (layer != null) + globeControl1.Globe.AddToEditHistroy(layer, f, EnumEditType.Delete); + globeControl1.Refresh(); + } + MessageBox.Show("删除成功!", "提示"); globeControl1.Globe.Action = EnumAction3D.ActionNull; } @@ -8118,6 +7874,7 @@ toolStripNumbers.Text = "红线审核 |共有:" + table.Rows.Count + "条"; toolStripDropDownButton3.Visible = true; } + /// /// 主窗体 下方的工具条中的 导出.xls文件 按钮事件处理 /// @@ -8127,24 +7884,28 @@ { if (dataGridViewX1.Rows.Count != 0) { - string strSaveFile = string.Empty; - SaveFileDialog savefiledialog = new SaveFileDialog(); - savefiledialog.Filter = "Excel文件|*.xls,*.xlsx"; - savefiledialog.AddExtension = true; - savefiledialog.FileName = "红线审核"; - if (savefiledialog.ShowDialog() == DialogResult.OK) - strSaveFile = savefiledialog.FileName; - else return; - - ExpEXCEL.ExpToExcel(dataGridViewX1, strSaveFile, "红线审核", lineStruct, featsList); - MessageBox.Show("导出成功!"); - } - else - { MessageBox.Show("表格内容为空!", "提示"); + return; } + string strSaveFile; + SaveFileDialog savefiledialog = new SaveFileDialog(); + savefiledialog.Filter = "Excel文件|*.xls,*.xlsx"; + savefiledialog.AddExtension = true; + savefiledialog.FileName = "红线审核"; + if (savefiledialog.ShowDialog() == DialogResult.OK) + strSaveFile = savefiledialog.FileName; + else return; + + ExpEXCEL.ExpToExcel(dataGridViewX1, strSaveFile, "红线审核", lineStruct, featsList); + MessageBox.Show("导出成功!"); + } + /// + /// 双屏对比的地面透明度设置 + /// + /// + /// private void sliderItem2_ValueChanged(object sender, EventArgs e) { LogManager.saveLog(Utility.userName, sliderItem2.Text); @@ -8155,7 +7916,7 @@ { layer.Opaque = 100 - sliderItem2.Value; } - layer = globeControl2.Globe.Layers.GetLayerByCaption("180fd");//("180fd"); + layer = globeControl2.Globe.Layers.GetLayerByCaption(Utility.roadLayerName);//("180fd"); if (layer != null) { layer.Opaque = 100 - sliderItem2.Value; @@ -8554,7 +8315,7 @@ LogManager.saveLog(Utility.userName, buttonItem8.Text); int width = Width; - FrmCompareFeature.ShowForm(globeControl1, globeControl2, layerTemp, layerTemp2, width); + FrmCompareFeature.ShowForm(globeControl1, globeControl2, width); } /// /// 红线审核导出图片 @@ -8690,7 +8451,6 @@ private void btn_role_resc_Click(object sender, EventArgs e) { - LogManager.saveLog(Utility.userName, btn_role_resc.Text); if (FrmRoleRescManager.IS_OPEN) return; @@ -8708,7 +8468,8 @@ frm.ShowDialog(); } } -//文档管理 操作 + + //文档管理 操作 private void btn_document_info_Click(object sender, EventArgs e) { @@ -8919,11 +8680,9 @@ } private void pictureBox1_Paint(object sender, PaintEventArgs e) - { - int Width = this.Width; + { string welcomeUser = "欢迎您:" + Utility.userName; - Graphics g = e.Graphics; - g.DrawString(welcomeUser, new Font("宋体", 12), new SolidBrush(Color.Black), Width - 180, 50); + e.Graphics.DrawString(welcomeUser, new Font("宋体", 12), new SolidBrush(Color.Black), Width - 180, 50); } } diff --git a/MainFrm.designer.cs b/MainFrm.designer.cs index a9b8c6f..5d74670 100644 --- a/MainFrm.designer.cs +++ b/MainFrm.designer.cs @@ -244,42 +244,6 @@ this.保存ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.定位ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.ribbonControl1 = new DevComponents.DotNetBar.RibbonControl(); - this.ribbonPanel6 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar6 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItemSPSZ = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem8 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemLocation = new DevComponents.DotNetBar.ButtonItem(); - this.sliderItem2 = new DevComponents.DotNetBar.SliderItem(); - this.buttonItemGBJC = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonPanel4 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar1 = new DevComponents.DotNetBar.RibbonBar(); - this.btn_document_info = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonPanel12 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar18 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItem133 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem132 = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonBar13 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItem127 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem128 = new DevComponents.DotNetBar.ButtonItem(); - this.sliderItem1 = new DevComponents.DotNetBar.SliderItem(); - this.buttonItem134 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem130 = new DevComponents.DotNetBar.ButtonItem(); - this.btn_check_history = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonPanel5 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar2 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItemHX1 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemHX2 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemDCTP = new DevComponents.DotNetBar.ButtonItem(); - this.sliderItem3 = new DevComponents.DotNetBar.SliderItem(); - this.ribbonPanel2 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar3 = new DevComponents.DotNetBar.RibbonBar(); - this.btn_user_info = new DevComponents.DotNetBar.ButtonItem(); - this.btn_role_info = new DevComponents.DotNetBar.ButtonItem(); - this.btn_resc_info = new DevComponents.DotNetBar.ButtonItem(); - this.btn_role_resc = new DevComponents.DotNetBar.ButtonItem(); - this.btn_user_role = new DevComponents.DotNetBar.ButtonItem(); - this.btn_password_edit = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemPasswordReset = new DevComponents.DotNetBar.ButtonItem(); this.ribbonPanel15 = new DevComponents.DotNetBar.RibbonPanel(); this.ribbonBar20 = new DevComponents.DotNetBar.RibbonBar(); this.buttonItemSH = new DevComponents.DotNetBar.ButtonItem(); @@ -448,6 +412,42 @@ this.buttonItemBZ9 = new DevComponents.DotNetBar.ButtonItem(); this.buttonItemBZ10 = new DevComponents.DotNetBar.ButtonItem(); this.buttonItemBZ11 = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel6 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar6 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItemSPSZ = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem8 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemLocation = new DevComponents.DotNetBar.ButtonItem(); + this.sliderItem2 = new DevComponents.DotNetBar.SliderItem(); + this.buttonItemGBJC = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel4 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar1 = new DevComponents.DotNetBar.RibbonBar(); + this.btn_document_info = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel12 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar18 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItem133 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem132 = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonBar13 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItem127 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem128 = new DevComponents.DotNetBar.ButtonItem(); + this.sliderItem1 = new DevComponents.DotNetBar.SliderItem(); + this.buttonItem134 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem130 = new DevComponents.DotNetBar.ButtonItem(); + this.btn_check_history = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel5 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar2 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItemHX1 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemHX2 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemDCTP = new DevComponents.DotNetBar.ButtonItem(); + this.sliderItem3 = new DevComponents.DotNetBar.SliderItem(); + this.ribbonPanel2 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar3 = new DevComponents.DotNetBar.RibbonBar(); + this.btn_user_info = new DevComponents.DotNetBar.ButtonItem(); + this.btn_role_info = new DevComponents.DotNetBar.ButtonItem(); + this.btn_resc_info = new DevComponents.DotNetBar.ButtonItem(); + this.btn_role_resc = new DevComponents.DotNetBar.ButtonItem(); + this.btn_user_role = new DevComponents.DotNetBar.ButtonItem(); + this.btn_password_edit = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemPasswordReset = new DevComponents.DotNetBar.ButtonItem(); this.ribbonPanel1 = new DevComponents.DotNetBar.RibbonPanel(); this.ribbonBar21 = new DevComponents.DotNetBar.RibbonBar(); this.buttonItem87 = new DevComponents.DotNetBar.ButtonItem(); @@ -652,12 +652,12 @@ this.contextMenuStrip3.SuspendLayout(); this.contextMenuStripDeleteLayerNode.SuspendLayout(); this.ribbonControl1.SuspendLayout(); + this.ribbonPanel15.SuspendLayout(); this.ribbonPanel6.SuspendLayout(); this.ribbonPanel4.SuspendLayout(); this.ribbonPanel12.SuspendLayout(); this.ribbonPanel5.SuspendLayout(); this.ribbonPanel2.SuspendLayout(); - this.ribbonPanel15.SuspendLayout(); this.ribbonPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); this.panelOfTable.SuspendLayout(); @@ -2283,12 +2283,12 @@ // this.ribbonControl1.BackgroundStyle.Class = ""; this.ribbonControl1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonControl1.Controls.Add(this.ribbonPanel15); + this.ribbonControl1.Controls.Add(this.ribbonPanel2); this.ribbonControl1.Controls.Add(this.ribbonPanel6); this.ribbonControl1.Controls.Add(this.ribbonPanel4); this.ribbonControl1.Controls.Add(this.ribbonPanel12); this.ribbonControl1.Controls.Add(this.ribbonPanel5); - this.ribbonControl1.Controls.Add(this.ribbonPanel2); - this.ribbonControl1.Controls.Add(this.ribbonPanel15); this.ribbonControl1.Controls.Add(this.ribbonPanel1); this.ribbonControl1.Dock = System.Windows.Forms.DockStyle.Top; this.ribbonControl1.ImeMode = System.Windows.Forms.ImeMode.NoControl; @@ -2331,595 +2331,6 @@ this.ribbonControl1.Text = "ribbonControl1"; this.ribbonControl1.UseCustomizeDialog = false; // - // ribbonPanel6 - // - this.ribbonPanel6.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel6.Controls.Add(this.ribbonBar6); - this.ribbonPanel6.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel6.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel6.Name = "ribbonPanel6"; - this.ribbonPanel6.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel6.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel6.Style.Class = ""; - this.ribbonPanel6.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel6.StyleMouseDown.Class = ""; - this.ribbonPanel6.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel6.StyleMouseOver.Class = ""; - this.ribbonPanel6.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel6.TabIndex = 38; - // - // ribbonBar6 - // - this.ribbonBar6.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar6.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar6.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar6.BackgroundStyle.Class = ""; - this.ribbonBar6.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar6.ContainerControlProcessDialogKey = true; - this.ribbonBar6.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar6.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItemSPSZ, - this.buttonItem8, - this.buttonItemLocation, - this.sliderItem2, - this.buttonItemGBJC}); - this.ribbonBar6.Location = new System.Drawing.Point(3, 0); - this.ribbonBar6.Name = "ribbonBar6"; - this.ribbonBar6.Size = new System.Drawing.Size(427, 59); - this.ribbonBar6.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar6.TabIndex = 0; - // - // - // - this.ribbonBar6.TitleStyle.Class = ""; - this.ribbonBar6.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar6.TitleStyleMouseOver.Class = ""; - this.ribbonBar6.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar6.TitleVisible = false; - // - // buttonItemSPSZ - // - this.buttonItemSPSZ.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemSPSZ.Image"))); - this.buttonItemSPSZ.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemSPSZ.Name = "buttonItemSPSZ"; - this.buttonItemSPSZ.SubItemsExpandWidth = 14; - this.buttonItemSPSZ.Text = "双屏设置"; - this.buttonItemSPSZ.Click += new System.EventHandler(this.buttonItemSPSZ_Click); - // - // buttonItem8 - // - this.buttonItem8.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem8.Image"))); - this.buttonItem8.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem8.Name = "buttonItem8"; - this.buttonItem8.SubItemsExpandWidth = 14; - this.buttonItem8.Text = "双屏分析"; - this.buttonItem8.Click += new System.EventHandler(this.buttonItem8_Click); - // - // buttonItemLocation - // - this.buttonItemLocation.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemLocation.Image"))); - this.buttonItemLocation.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemLocation.Name = "buttonItemLocation"; - this.buttonItemLocation.SubItemsExpandWidth = 14; - this.buttonItemLocation.Text = "快速定位"; - this.buttonItemLocation.Click += new System.EventHandler(this.buttonItemLocation_Click); - // - // sliderItem2 - // - this.sliderItem2.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; - this.sliderItem2.LabelWidth = 50; - this.sliderItem2.Name = "sliderItem2"; - this.sliderItem2.Text = "地面透明度"; - this.sliderItem2.TextColor = System.Drawing.Color.Black; - this.sliderItem2.Value = 0; - this.sliderItem2.ValueChanged += new System.EventHandler(this.sliderItem2_ValueChanged); - // - // buttonItemGBJC - // - this.buttonItemGBJC.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemGBJC.Image"))); - this.buttonItemGBJC.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemGBJC.Name = "buttonItemGBJC"; - this.buttonItemGBJC.SubItemsExpandWidth = 14; - this.buttonItemGBJC.Text = "国标检测"; - this.buttonItemGBJC.Click += new System.EventHandler(this.buttonItemGBJC_Click); - // - // ribbonPanel4 - // - this.ribbonPanel4.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel4.Controls.Add(this.ribbonBar1); - this.ribbonPanel4.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel4.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel4.Name = "ribbonPanel4"; - this.ribbonPanel4.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel4.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel4.Style.Class = ""; - this.ribbonPanel4.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel4.StyleMouseDown.Class = ""; - this.ribbonPanel4.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel4.StyleMouseOver.Class = ""; - this.ribbonPanel4.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel4.TabIndex = 36; - this.ribbonPanel4.Visible = false; - // - // ribbonBar1 - // - this.ribbonBar1.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar1.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar1.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar1.BackgroundStyle.Class = ""; - this.ribbonBar1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar1.ContainerControlProcessDialogKey = true; - this.ribbonBar1.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar1.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.btn_document_info}); - this.ribbonBar1.Location = new System.Drawing.Point(3, 0); - this.ribbonBar1.Name = "ribbonBar1"; - this.ribbonBar1.Size = new System.Drawing.Size(88, 59); - this.ribbonBar1.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar1.TabIndex = 0; - // - // - // - this.ribbonBar1.TitleStyle.Class = ""; - this.ribbonBar1.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar1.TitleStyleMouseOver.Class = ""; - this.ribbonBar1.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar1.TitleVisible = false; - // - // btn_document_info - // - this.btn_document_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_document_info.Image"))); - this.btn_document_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_document_info.Name = "btn_document_info"; - this.btn_document_info.SubItemsExpandWidth = 14; - this.btn_document_info.Text = "文档管理"; - this.btn_document_info.Click += new System.EventHandler(this.btn_document_info_Click); - // - // ribbonPanel12 - // - this.ribbonPanel12.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel12.Controls.Add(this.ribbonBar18); - this.ribbonPanel12.Controls.Add(this.ribbonBar13); - this.ribbonPanel12.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel12.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel12.Name = "ribbonPanel12"; - this.ribbonPanel12.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel12.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel12.Style.Class = ""; - this.ribbonPanel12.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel12.StyleMouseDown.Class = ""; - this.ribbonPanel12.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel12.StyleMouseOver.Class = ""; - this.ribbonPanel12.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel12.TabIndex = 34; - this.ribbonPanel12.Visible = false; - // - // ribbonBar18 - // - this.ribbonBar18.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar18.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar18.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar18.BackgroundStyle.Class = ""; - this.ribbonBar18.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar18.ContainerControlProcessDialogKey = true; - this.ribbonBar18.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar18.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItem133, - this.buttonItem132}); - this.ribbonBar18.Location = new System.Drawing.Point(508, 0); - this.ribbonBar18.Name = "ribbonBar18"; - this.ribbonBar18.Size = new System.Drawing.Size(171, 59); - this.ribbonBar18.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar18.TabIndex = 1; - // - // - // - this.ribbonBar18.TitleStyle.Class = ""; - this.ribbonBar18.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar18.TitleStyleMouseOver.Class = ""; - this.ribbonBar18.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar18.TitleVisible = false; - // - // buttonItem133 - // - this.buttonItem133.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem133.Image"))); - this.buttonItem133.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem133.Name = "buttonItem133"; - this.buttonItem133.SubItemsExpandWidth = 14; - this.buttonItem133.Text = "审核入库"; - this.buttonItem133.Click += new System.EventHandler(this.buttonItem133_Click_1); - // - // buttonItem132 - // - this.buttonItem132.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem132.Image"))); - this.buttonItem132.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem132.Name = "buttonItem132"; - this.buttonItem132.SubItemsExpandWidth = 14; - this.buttonItem132.Text = "已审核的图层"; - this.buttonItem132.Visible = false; - this.buttonItem132.Click += new System.EventHandler(this.buttonItem132_Click_1); - // - // ribbonBar13 - // - this.ribbonBar13.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar13.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar13.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar13.BackgroundStyle.Class = ""; - this.ribbonBar13.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar13.ContainerControlProcessDialogKey = true; - this.ribbonBar13.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar13.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItem127, - this.buttonItem128, - this.sliderItem1, - this.buttonItem134, - this.buttonItem130, - this.btn_check_history}); - this.ribbonBar13.Location = new System.Drawing.Point(3, 0); - this.ribbonBar13.Name = "ribbonBar13"; - this.ribbonBar13.Size = new System.Drawing.Size(505, 59); - this.ribbonBar13.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar13.TabIndex = 0; - // - // - // - this.ribbonBar13.TitleStyle.Class = ""; - this.ribbonBar13.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar13.TitleStyleMouseOver.Class = ""; - this.ribbonBar13.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar13.TitleVisible = false; - // - // buttonItem127 - // - this.buttonItem127.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem127.Image"))); - this.buttonItem127.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem127.Name = "buttonItem127"; - this.buttonItem127.SubItemsExpandWidth = 14; - this.buttonItem127.Text = "打开数据"; - this.buttonItem127.Click += new System.EventHandler(this.buttonItem127_Click_2); - // - // buttonItem128 - // - this.buttonItem128.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem128.Image"))); - this.buttonItem128.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem128.Name = "buttonItem128"; - this.buttonItem128.SubItemsExpandWidth = 14; - this.buttonItem128.Text = "一键审核"; - this.buttonItem128.Click += new System.EventHandler(this.buttonItem128_Click); - // - // sliderItem1 - // - this.sliderItem1.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; - this.sliderItem1.LabelWidth = 50; - this.sliderItem1.Name = "sliderItem1"; - this.sliderItem1.Text = "地面透明度"; - this.sliderItem1.TextColor = System.Drawing.Color.Black; - this.sliderItem1.Value = 0; - this.sliderItem1.ValueChanged += new System.EventHandler(this.sliderItem1_ValueChanged); - // - // buttonItem134 - // - this.buttonItem134.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem134.Image"))); - this.buttonItem134.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem134.Name = "buttonItem134"; - this.buttonItem134.SubItemsExpandWidth = 14; - this.buttonItem134.Text = "模拟设计修改"; - this.buttonItem134.Click += new System.EventHandler(this.buttonItem134_Click_1); - // - // buttonItem130 - // - this.buttonItem130.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem130.Image"))); - this.buttonItem130.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem130.Name = "buttonItem130"; - this.buttonItem130.SubItemsExpandWidth = 14; - this.buttonItem130.Text = "导出审核图"; - this.buttonItem130.Click += new System.EventHandler(this.buttonItem130_Click_1); - // - // btn_check_history - // - this.btn_check_history.Image = ((System.Drawing.Image)(resources.GetObject("btn_check_history.Image"))); - this.btn_check_history.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_check_history.Name = "btn_check_history"; - this.btn_check_history.SubItemsExpandWidth = 14; - this.btn_check_history.Text = "审核历史"; - this.btn_check_history.Click += new System.EventHandler(this.btn_check_history_Click); - // - // ribbonPanel5 - // - this.ribbonPanel5.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel5.Controls.Add(this.ribbonBar2); - this.ribbonPanel5.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel5.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel5.Name = "ribbonPanel5"; - this.ribbonPanel5.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel5.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel5.Style.Class = ""; - this.ribbonPanel5.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel5.StyleMouseDown.Class = ""; - this.ribbonPanel5.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel5.StyleMouseOver.Class = ""; - this.ribbonPanel5.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel5.TabIndex = 37; - this.ribbonPanel5.Visible = false; - // - // ribbonBar2 - // - this.ribbonBar2.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar2.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar2.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar2.BackgroundStyle.Class = ""; - this.ribbonBar2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar2.ContainerControlProcessDialogKey = true; - this.ribbonBar2.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar2.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItemHX1, - this.buttonItemHX2, - this.buttonItemDCTP, - this.sliderItem3}); - this.ribbonBar2.Location = new System.Drawing.Point(3, 0); - this.ribbonBar2.Name = "ribbonBar2"; - this.ribbonBar2.Size = new System.Drawing.Size(350, 59); - this.ribbonBar2.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar2.TabIndex = 0; - // - // - // - this.ribbonBar2.TitleStyle.Class = ""; - this.ribbonBar2.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar2.TitleStyleMouseOver.Class = ""; - this.ribbonBar2.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar2.TitleVisible = false; - // - // buttonItemHX1 - // - this.buttonItemHX1.AutoExpandOnClick = true; - this.buttonItemHX1.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX1.Image"))); - this.buttonItemHX1.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemHX1.Name = "buttonItemHX1"; - this.buttonItemHX1.SubItemsExpandWidth = 14; - this.buttonItemHX1.Text = "导入红线"; - this.buttonItemHX1.Click += new System.EventHandler(this.buttonItemHX1_Click); - // - // buttonItemHX2 - // - this.buttonItemHX2.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX2.Image"))); - this.buttonItemHX2.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemHX2.Name = "buttonItemHX2"; - this.buttonItemHX2.SubItemsExpandWidth = 14; - this.buttonItemHX2.Text = "红线审核"; - this.buttonItemHX2.Click += new System.EventHandler(this.buttonItemHX2_Click); - // - // buttonItemDCTP - // - this.buttonItemDCTP.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemDCTP.Image"))); - this.buttonItemDCTP.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemDCTP.Name = "buttonItemDCTP"; - this.buttonItemDCTP.SubItemsExpandWidth = 14; - this.buttonItemDCTP.Text = "导出图片"; - this.buttonItemDCTP.Click += new System.EventHandler(this.buttonItemDCTP_Click); - // - // sliderItem3 - // - this.sliderItem3.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; - this.sliderItem3.LabelWidth = 50; - this.sliderItem3.Name = "sliderItem3"; - this.sliderItem3.Text = "地面透明度"; - this.sliderItem3.TextColor = System.Drawing.Color.Black; - this.sliderItem3.Value = 0; - this.sliderItem3.ValueChanged += new System.EventHandler(this.sliderItem3_ValueChanged); - // - // ribbonPanel2 - // - this.ribbonPanel2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel2.Controls.Add(this.ribbonBar3); - this.ribbonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel2.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel2.Name = "ribbonPanel2"; - this.ribbonPanel2.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel2.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel2.Style.Class = ""; - this.ribbonPanel2.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel2.StyleMouseDown.Class = ""; - this.ribbonPanel2.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel2.StyleMouseOver.Class = ""; - this.ribbonPanel2.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel2.TabIndex = 39; - this.ribbonPanel2.Visible = false; - // - // ribbonBar3 - // - this.ribbonBar3.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar3.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar3.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar3.BackgroundStyle.Class = ""; - this.ribbonBar3.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar3.ContainerControlProcessDialogKey = true; - this.ribbonBar3.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar3.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.btn_user_info, - this.btn_role_info, - this.btn_resc_info, - this.btn_role_resc, - this.btn_user_role, - this.btn_password_edit, - this.buttonItemPasswordReset}); - this.ribbonBar3.Location = new System.Drawing.Point(3, 0); - this.ribbonBar3.Name = "ribbonBar3"; - this.ribbonBar3.Size = new System.Drawing.Size(551, 59); - this.ribbonBar3.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar3.TabIndex = 1; - // - // - // - this.ribbonBar3.TitleStyle.Class = ""; - this.ribbonBar3.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar3.TitleStyleMouseOver.Class = ""; - this.ribbonBar3.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar3.TitleVisible = false; - // - // btn_user_info - // - this.btn_user_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_info.Image"))); - this.btn_user_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_user_info.Name = "btn_user_info"; - this.btn_user_info.SubItemsExpandWidth = 14; - this.btn_user_info.Text = "用户管理"; - this.btn_user_info.Click += new System.EventHandler(this.btn_user_info_Click); - // - // btn_role_info - // - this.btn_role_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_info.Image"))); - this.btn_role_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_role_info.Name = "btn_role_info"; - this.btn_role_info.SubItemsExpandWidth = 14; - this.btn_role_info.Text = "角色管理"; - this.btn_role_info.Click += new System.EventHandler(this.btn_role_info_Click); - // - // btn_resc_info - // - this.btn_resc_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_resc_info.Image"))); - this.btn_resc_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_resc_info.Name = "btn_resc_info"; - this.btn_resc_info.SubItemsExpandWidth = 14; - this.btn_resc_info.Text = "资源管理"; - this.btn_resc_info.Visible = false; - this.btn_resc_info.Click += new System.EventHandler(this.btn_resc_info_Click); - // - // btn_role_resc - // - this.btn_role_resc.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_resc.Image"))); - this.btn_role_resc.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_role_resc.Name = "btn_role_resc"; - this.btn_role_resc.SubItemsExpandWidth = 14; - this.btn_role_resc.Text = "角色授权"; - this.btn_role_resc.Click += new System.EventHandler(this.btn_role_resc_Click); - // - // btn_user_role - // - this.btn_user_role.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_role.Image"))); - this.btn_user_role.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_user_role.Name = "btn_user_role"; - this.btn_user_role.SubItemsExpandWidth = 14; - this.btn_user_role.Text = "用户授权"; - this.btn_user_role.Click += new System.EventHandler(this.btn_user_role_Click); - // - // btn_password_edit - // - this.btn_password_edit.Image = ((System.Drawing.Image)(resources.GetObject("btn_password_edit.Image"))); - this.btn_password_edit.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_password_edit.Name = "btn_password_edit"; - this.btn_password_edit.SubItemsExpandWidth = 14; - this.btn_password_edit.Text = "密码修改"; - this.btn_password_edit.Click += new System.EventHandler(this.btn_password_edit_Click); - // - // buttonItemPasswordReset - // - this.buttonItemPasswordReset.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemPasswordReset.Image"))); - this.buttonItemPasswordReset.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemPasswordReset.Name = "buttonItemPasswordReset"; - this.buttonItemPasswordReset.SubItemsExpandWidth = 14; - this.buttonItemPasswordReset.Text = "重置密码"; - this.buttonItemPasswordReset.Click += new System.EventHandler(this.buttonItemPasswordReset_Click); - // // ribbonPanel15 // this.ribbonPanel15.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; @@ -2945,7 +2356,6 @@ this.ribbonPanel15.StyleMouseOver.Class = ""; this.ribbonPanel15.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; this.ribbonPanel15.TabIndex = 35; - this.ribbonPanel15.Visible = false; // // ribbonBar20 // @@ -4286,6 +3696,596 @@ this.buttonItemBZ11.Text = "标注管理"; this.buttonItemBZ11.Click += new System.EventHandler(this.buttonItemBZ11_Click); // + // ribbonPanel6 + // + this.ribbonPanel6.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel6.Controls.Add(this.ribbonBar6); + this.ribbonPanel6.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel6.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel6.Name = "ribbonPanel6"; + this.ribbonPanel6.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel6.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel6.Style.Class = ""; + this.ribbonPanel6.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel6.StyleMouseDown.Class = ""; + this.ribbonPanel6.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel6.StyleMouseOver.Class = ""; + this.ribbonPanel6.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel6.TabIndex = 38; + this.ribbonPanel6.Visible = false; + // + // ribbonBar6 + // + this.ribbonBar6.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar6.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar6.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar6.BackgroundStyle.Class = ""; + this.ribbonBar6.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar6.ContainerControlProcessDialogKey = true; + this.ribbonBar6.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar6.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItemSPSZ, + this.buttonItem8, + this.buttonItemLocation, + this.sliderItem2, + this.buttonItemGBJC}); + this.ribbonBar6.Location = new System.Drawing.Point(3, 0); + this.ribbonBar6.Name = "ribbonBar6"; + this.ribbonBar6.Size = new System.Drawing.Size(427, 59); + this.ribbonBar6.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar6.TabIndex = 0; + // + // + // + this.ribbonBar6.TitleStyle.Class = ""; + this.ribbonBar6.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar6.TitleStyleMouseOver.Class = ""; + this.ribbonBar6.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar6.TitleVisible = false; + // + // buttonItemSPSZ + // + this.buttonItemSPSZ.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemSPSZ.Image"))); + this.buttonItemSPSZ.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemSPSZ.Name = "buttonItemSPSZ"; + this.buttonItemSPSZ.SubItemsExpandWidth = 14; + this.buttonItemSPSZ.Text = "双屏设置"; + this.buttonItemSPSZ.Click += new System.EventHandler(this.buttonItemSPSZ_Click); + // + // buttonItem8 + // + this.buttonItem8.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem8.Image"))); + this.buttonItem8.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem8.Name = "buttonItem8"; + this.buttonItem8.SubItemsExpandWidth = 14; + this.buttonItem8.Text = "双屏分析"; + this.buttonItem8.Click += new System.EventHandler(this.buttonItem8_Click); + // + // buttonItemLocation + // + this.buttonItemLocation.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemLocation.Image"))); + this.buttonItemLocation.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemLocation.Name = "buttonItemLocation"; + this.buttonItemLocation.SubItemsExpandWidth = 14; + this.buttonItemLocation.Text = "快速定位"; + this.buttonItemLocation.Click += new System.EventHandler(this.buttonItemLocation_Click); + // + // sliderItem2 + // + this.sliderItem2.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; + this.sliderItem2.LabelWidth = 50; + this.sliderItem2.Name = "sliderItem2"; + this.sliderItem2.Text = "地面透明度"; + this.sliderItem2.TextColor = System.Drawing.Color.Black; + this.sliderItem2.Value = 0; + this.sliderItem2.ValueChanged += new System.EventHandler(this.sliderItem2_ValueChanged); + // + // buttonItemGBJC + // + this.buttonItemGBJC.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemGBJC.Image"))); + this.buttonItemGBJC.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemGBJC.Name = "buttonItemGBJC"; + this.buttonItemGBJC.SubItemsExpandWidth = 14; + this.buttonItemGBJC.Text = "国标检测"; + this.buttonItemGBJC.Click += new System.EventHandler(this.buttonItemGBJC_Click); + // + // ribbonPanel4 + // + this.ribbonPanel4.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel4.Controls.Add(this.ribbonBar1); + this.ribbonPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel4.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel4.Name = "ribbonPanel4"; + this.ribbonPanel4.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel4.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel4.Style.Class = ""; + this.ribbonPanel4.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel4.StyleMouseDown.Class = ""; + this.ribbonPanel4.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel4.StyleMouseOver.Class = ""; + this.ribbonPanel4.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel4.TabIndex = 36; + this.ribbonPanel4.Visible = false; + // + // ribbonBar1 + // + this.ribbonBar1.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar1.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar1.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar1.BackgroundStyle.Class = ""; + this.ribbonBar1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar1.ContainerControlProcessDialogKey = true; + this.ribbonBar1.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar1.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.btn_document_info}); + this.ribbonBar1.Location = new System.Drawing.Point(3, 0); + this.ribbonBar1.Name = "ribbonBar1"; + this.ribbonBar1.Size = new System.Drawing.Size(88, 59); + this.ribbonBar1.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar1.TabIndex = 0; + // + // + // + this.ribbonBar1.TitleStyle.Class = ""; + this.ribbonBar1.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar1.TitleStyleMouseOver.Class = ""; + this.ribbonBar1.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar1.TitleVisible = false; + // + // btn_document_info + // + this.btn_document_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_document_info.Image"))); + this.btn_document_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_document_info.Name = "btn_document_info"; + this.btn_document_info.SubItemsExpandWidth = 14; + this.btn_document_info.Text = "文档管理"; + this.btn_document_info.Click += new System.EventHandler(this.btn_document_info_Click); + // + // ribbonPanel12 + // + this.ribbonPanel12.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel12.Controls.Add(this.ribbonBar18); + this.ribbonPanel12.Controls.Add(this.ribbonBar13); + this.ribbonPanel12.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel12.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel12.Name = "ribbonPanel12"; + this.ribbonPanel12.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel12.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel12.Style.Class = ""; + this.ribbonPanel12.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel12.StyleMouseDown.Class = ""; + this.ribbonPanel12.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel12.StyleMouseOver.Class = ""; + this.ribbonPanel12.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel12.TabIndex = 34; + this.ribbonPanel12.Visible = false; + // + // ribbonBar18 + // + this.ribbonBar18.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar18.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar18.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar18.BackgroundStyle.Class = ""; + this.ribbonBar18.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar18.ContainerControlProcessDialogKey = true; + this.ribbonBar18.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar18.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItem133, + this.buttonItem132}); + this.ribbonBar18.Location = new System.Drawing.Point(508, 0); + this.ribbonBar18.Name = "ribbonBar18"; + this.ribbonBar18.Size = new System.Drawing.Size(171, 59); + this.ribbonBar18.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar18.TabIndex = 1; + // + // + // + this.ribbonBar18.TitleStyle.Class = ""; + this.ribbonBar18.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar18.TitleStyleMouseOver.Class = ""; + this.ribbonBar18.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar18.TitleVisible = false; + // + // buttonItem133 + // + this.buttonItem133.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem133.Image"))); + this.buttonItem133.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem133.Name = "buttonItem133"; + this.buttonItem133.SubItemsExpandWidth = 14; + this.buttonItem133.Text = "审核入库"; + this.buttonItem133.Click += new System.EventHandler(this.buttonItem133_Click_1); + // + // buttonItem132 + // + this.buttonItem132.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem132.Image"))); + this.buttonItem132.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem132.Name = "buttonItem132"; + this.buttonItem132.SubItemsExpandWidth = 14; + this.buttonItem132.Text = "已审核的图层"; + this.buttonItem132.Visible = false; + this.buttonItem132.Click += new System.EventHandler(this.buttonItem132_Click_1); + // + // ribbonBar13 + // + this.ribbonBar13.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar13.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar13.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar13.BackgroundStyle.Class = ""; + this.ribbonBar13.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar13.ContainerControlProcessDialogKey = true; + this.ribbonBar13.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar13.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItem127, + this.buttonItem128, + this.sliderItem1, + this.buttonItem134, + this.buttonItem130, + this.btn_check_history}); + this.ribbonBar13.Location = new System.Drawing.Point(3, 0); + this.ribbonBar13.Name = "ribbonBar13"; + this.ribbonBar13.Size = new System.Drawing.Size(505, 59); + this.ribbonBar13.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar13.TabIndex = 0; + // + // + // + this.ribbonBar13.TitleStyle.Class = ""; + this.ribbonBar13.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar13.TitleStyleMouseOver.Class = ""; + this.ribbonBar13.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar13.TitleVisible = false; + // + // buttonItem127 + // + this.buttonItem127.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem127.Image"))); + this.buttonItem127.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem127.Name = "buttonItem127"; + this.buttonItem127.SubItemsExpandWidth = 14; + this.buttonItem127.Text = "打开数据"; + this.buttonItem127.Click += new System.EventHandler(this.buttonItem127_Click_2); + // + // buttonItem128 + // + this.buttonItem128.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem128.Image"))); + this.buttonItem128.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem128.Name = "buttonItem128"; + this.buttonItem128.SubItemsExpandWidth = 14; + this.buttonItem128.Text = "一键审核"; + this.buttonItem128.Click += new System.EventHandler(this.buttonItem128_Click); + // + // sliderItem1 + // + this.sliderItem1.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; + this.sliderItem1.LabelWidth = 50; + this.sliderItem1.Name = "sliderItem1"; + this.sliderItem1.Text = "地面透明度"; + this.sliderItem1.TextColor = System.Drawing.Color.Black; + this.sliderItem1.Value = 0; + this.sliderItem1.ValueChanged += new System.EventHandler(this.sliderItem1_ValueChanged); + // + // buttonItem134 + // + this.buttonItem134.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem134.Image"))); + this.buttonItem134.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem134.Name = "buttonItem134"; + this.buttonItem134.SubItemsExpandWidth = 14; + this.buttonItem134.Text = "模拟设计修改"; + this.buttonItem134.Click += new System.EventHandler(this.buttonItem134_Click_1); + // + // buttonItem130 + // + this.buttonItem130.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem130.Image"))); + this.buttonItem130.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem130.Name = "buttonItem130"; + this.buttonItem130.SubItemsExpandWidth = 14; + this.buttonItem130.Text = "导出审核图"; + this.buttonItem130.Click += new System.EventHandler(this.buttonItem130_Click_1); + // + // btn_check_history + // + this.btn_check_history.Image = ((System.Drawing.Image)(resources.GetObject("btn_check_history.Image"))); + this.btn_check_history.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_check_history.Name = "btn_check_history"; + this.btn_check_history.SubItemsExpandWidth = 14; + this.btn_check_history.Text = "审核历史"; + this.btn_check_history.Click += new System.EventHandler(this.btn_check_history_Click); + // + // ribbonPanel5 + // + this.ribbonPanel5.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel5.Controls.Add(this.ribbonBar2); + this.ribbonPanel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel5.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel5.Name = "ribbonPanel5"; + this.ribbonPanel5.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel5.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel5.Style.Class = ""; + this.ribbonPanel5.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel5.StyleMouseDown.Class = ""; + this.ribbonPanel5.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel5.StyleMouseOver.Class = ""; + this.ribbonPanel5.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel5.TabIndex = 37; + this.ribbonPanel5.Visible = false; + // + // ribbonBar2 + // + this.ribbonBar2.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar2.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar2.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar2.BackgroundStyle.Class = ""; + this.ribbonBar2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar2.ContainerControlProcessDialogKey = true; + this.ribbonBar2.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar2.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItemHX1, + this.buttonItemHX2, + this.buttonItemDCTP, + this.sliderItem3}); + this.ribbonBar2.Location = new System.Drawing.Point(3, 0); + this.ribbonBar2.Name = "ribbonBar2"; + this.ribbonBar2.Size = new System.Drawing.Size(350, 59); + this.ribbonBar2.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar2.TabIndex = 0; + // + // + // + this.ribbonBar2.TitleStyle.Class = ""; + this.ribbonBar2.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar2.TitleStyleMouseOver.Class = ""; + this.ribbonBar2.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar2.TitleVisible = false; + // + // buttonItemHX1 + // + this.buttonItemHX1.AutoExpandOnClick = true; + this.buttonItemHX1.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX1.Image"))); + this.buttonItemHX1.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemHX1.Name = "buttonItemHX1"; + this.buttonItemHX1.SubItemsExpandWidth = 14; + this.buttonItemHX1.Text = "导入红线"; + this.buttonItemHX1.Click += new System.EventHandler(this.buttonItemHX1_Click); + // + // buttonItemHX2 + // + this.buttonItemHX2.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX2.Image"))); + this.buttonItemHX2.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemHX2.Name = "buttonItemHX2"; + this.buttonItemHX2.SubItemsExpandWidth = 14; + this.buttonItemHX2.Text = "红线审核"; + this.buttonItemHX2.Click += new System.EventHandler(this.buttonItemHX2_Click); + // + // buttonItemDCTP + // + this.buttonItemDCTP.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemDCTP.Image"))); + this.buttonItemDCTP.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemDCTP.Name = "buttonItemDCTP"; + this.buttonItemDCTP.SubItemsExpandWidth = 14; + this.buttonItemDCTP.Text = "导出图片"; + this.buttonItemDCTP.Click += new System.EventHandler(this.buttonItemDCTP_Click); + // + // sliderItem3 + // + this.sliderItem3.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; + this.sliderItem3.LabelWidth = 50; + this.sliderItem3.Name = "sliderItem3"; + this.sliderItem3.Text = "地面透明度"; + this.sliderItem3.TextColor = System.Drawing.Color.Black; + this.sliderItem3.Value = 0; + this.sliderItem3.ValueChanged += new System.EventHandler(this.sliderItem3_ValueChanged); + // + // ribbonPanel2 + // + this.ribbonPanel2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel2.Controls.Add(this.ribbonBar3); + this.ribbonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel2.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel2.Name = "ribbonPanel2"; + this.ribbonPanel2.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel2.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel2.Style.Class = ""; + this.ribbonPanel2.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel2.StyleMouseDown.Class = ""; + this.ribbonPanel2.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel2.StyleMouseOver.Class = ""; + this.ribbonPanel2.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel2.TabIndex = 39; + this.ribbonPanel2.Visible = false; + // + // ribbonBar3 + // + this.ribbonBar3.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar3.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar3.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar3.BackgroundStyle.Class = ""; + this.ribbonBar3.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar3.ContainerControlProcessDialogKey = true; + this.ribbonBar3.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar3.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.btn_user_info, + this.btn_role_info, + this.btn_resc_info, + this.btn_role_resc, + this.btn_user_role, + this.btn_password_edit, + this.buttonItemPasswordReset}); + this.ribbonBar3.Location = new System.Drawing.Point(3, 0); + this.ribbonBar3.Name = "ribbonBar3"; + this.ribbonBar3.Size = new System.Drawing.Size(551, 59); + this.ribbonBar3.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar3.TabIndex = 1; + // + // + // + this.ribbonBar3.TitleStyle.Class = ""; + this.ribbonBar3.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar3.TitleStyleMouseOver.Class = ""; + this.ribbonBar3.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar3.TitleVisible = false; + // + // btn_user_info + // + this.btn_user_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_info.Image"))); + this.btn_user_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_user_info.Name = "btn_user_info"; + this.btn_user_info.SubItemsExpandWidth = 14; + this.btn_user_info.Text = "用户管理"; + this.btn_user_info.Click += new System.EventHandler(this.btn_user_info_Click); + // + // btn_role_info + // + this.btn_role_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_info.Image"))); + this.btn_role_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_role_info.Name = "btn_role_info"; + this.btn_role_info.SubItemsExpandWidth = 14; + this.btn_role_info.Text = "角色管理"; + this.btn_role_info.Click += new System.EventHandler(this.btn_role_info_Click); + // + // btn_resc_info + // + this.btn_resc_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_resc_info.Image"))); + this.btn_resc_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_resc_info.Name = "btn_resc_info"; + this.btn_resc_info.SubItemsExpandWidth = 14; + this.btn_resc_info.Text = "资源管理"; + this.btn_resc_info.Visible = false; + this.btn_resc_info.Click += new System.EventHandler(this.btn_resc_info_Click); + // + // btn_role_resc + // + this.btn_role_resc.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_resc.Image"))); + this.btn_role_resc.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_role_resc.Name = "btn_role_resc"; + this.btn_role_resc.SubItemsExpandWidth = 14; + this.btn_role_resc.Text = "角色授权"; + this.btn_role_resc.Click += new System.EventHandler(this.btn_role_resc_Click); + // + // btn_user_role + // + this.btn_user_role.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_role.Image"))); + this.btn_user_role.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_user_role.Name = "btn_user_role"; + this.btn_user_role.SubItemsExpandWidth = 14; + this.btn_user_role.Text = "用户授权"; + this.btn_user_role.Click += new System.EventHandler(this.btn_user_role_Click); + // + // btn_password_edit + // + this.btn_password_edit.Image = ((System.Drawing.Image)(resources.GetObject("btn_password_edit.Image"))); + this.btn_password_edit.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_password_edit.Name = "btn_password_edit"; + this.btn_password_edit.SubItemsExpandWidth = 14; + this.btn_password_edit.Text = "密码修改"; + this.btn_password_edit.Click += new System.EventHandler(this.btn_password_edit_Click); + // + // buttonItemPasswordReset + // + this.buttonItemPasswordReset.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemPasswordReset.Image"))); + this.buttonItemPasswordReset.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemPasswordReset.Name = "buttonItemPasswordReset"; + this.buttonItemPasswordReset.SubItemsExpandWidth = 14; + this.buttonItemPasswordReset.Text = "重置密码"; + this.buttonItemPasswordReset.Click += new System.EventHandler(this.buttonItemPasswordReset_Click); + // // ribbonPanel1 // this.ribbonPanel1.AutoSize = true; @@ -4465,7 +4465,6 @@ // ribbonTabItem9 // this.ribbonTabItem9.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.ImageAndText; - this.ribbonTabItem9.Checked = true; this.ribbonTabItem9.HoverImage = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem9.HoverImage"))); this.ribbonTabItem9.Image = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem9.Image"))); this.ribbonTabItem9.Name = "ribbonTabItem9"; @@ -4486,6 +4485,7 @@ // ribbonTabItem14 // this.ribbonTabItem14.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.ImageAndText; + this.ribbonTabItem14.Checked = true; this.ribbonTabItem14.HoverImage = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem14.HoverImage"))); this.ribbonTabItem14.Image = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem14.Image"))); this.ribbonTabItem14.Name = "ribbonTabItem14"; @@ -5480,7 +5480,7 @@ this.dataGridViewX2.ReadOnly = true; this.dataGridViewX2.RowHeadersVisible = false; this.dataGridViewX2.RowTemplate.Height = 23; - this.dataGridViewX2.Size = new System.Drawing.Size(23359, 92); + this.dataGridViewX2.Size = new System.Drawing.Size(23953, 92); this.dataGridViewX2.TabIndex = 11; // // dataGridViewTextBoxColumn10 @@ -5574,7 +5574,7 @@ this.dataGridViewX3.ReadOnly = true; this.dataGridViewX3.RowHeadersVisible = false; this.dataGridViewX3.RowTemplate.Height = 23; - this.dataGridViewX3.Size = new System.Drawing.Size(23358, 127); + this.dataGridViewX3.Size = new System.Drawing.Size(23952, 127); this.dataGridViewX3.TabIndex = 5; this.dataGridViewX3.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.dataGridViewX3_MouseDoubleClick); // @@ -5832,7 +5832,7 @@ this.dataGridViewX8.ReadOnly = true; this.dataGridViewX8.RowHeadersVisible = false; this.dataGridViewX8.RowTemplate.Height = 23; - this.dataGridViewX8.Size = new System.Drawing.Size(133, 92); + this.dataGridViewX8.Size = new System.Drawing.Size(99, 92); this.dataGridViewX8.TabIndex = 11; // // dataGridViewTextBoxColumn12 @@ -5927,7 +5927,7 @@ this.dataGridViewX9.ReadOnly = true; this.dataGridViewX9.RowHeadersVisible = false; this.dataGridViewX9.RowTemplate.Height = 23; - this.dataGridViewX9.Size = new System.Drawing.Size(132, 127); + this.dataGridViewX9.Size = new System.Drawing.Size(98, 127); this.dataGridViewX9.TabIndex = 5; this.dataGridViewX9.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.dataGridViewX9_MouseDoubleClick); // @@ -6791,12 +6791,12 @@ this.contextMenuStripDeleteLayerNode.ResumeLayout(false); this.ribbonControl1.ResumeLayout(false); this.ribbonControl1.PerformLayout(); + this.ribbonPanel15.ResumeLayout(false); this.ribbonPanel6.ResumeLayout(false); this.ribbonPanel4.ResumeLayout(false); this.ribbonPanel12.ResumeLayout(false); this.ribbonPanel5.ResumeLayout(false); this.ribbonPanel2.ResumeLayout(false); - this.ribbonPanel15.ResumeLayout(false); this.ribbonPanel1.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.panelOfTable.ResumeLayout(false); diff --git a/MainFrm.resx b/MainFrm.resx index b408d34..6b9ae78 100644 --- a/MainFrm.resx +++ b/MainFrm.resx @@ -351,804 +351,6 @@ 766, 54 - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlDMzFEOUI4NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 - NEI4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlDMzFEOUI3NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 - NEI4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDk5Mzk2NTZBRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz73sIMwAAADIElEQVRIS7WVa0iTYRTH56Uiysvm3TkvpLl5DRIvQYWVWl+6 - iNEVg0yhQqloQZHkLT+Y0YdAs75IpEUhzERZoZhsRpZlS7soblotsRwoxhqWeTrnYZtv+u7NsB74cZ5z - zv89/z17HzYRAPxXeIv/EpFXcOyi4BvKhfehv4FvKBfeh+ayqIUDlIgBgT8whpRYoT2fhgvNVJKBQT9s - hB8/QZDPpnEIjEhg0J5Pw4Vm0mwygG9T06BSqQQhTUhUMoRGpyxYT7OZwfhXC6jVakFIYzNYqN5uMGKa - BI1GIwhpghXJaJJi13d0dEB2bj74hsWzSDlXbzfQG02g0+kEIU2wIomdovzKdVifngnFFytBeb4cLN+n - WaSc6hfKKqB/eHTWoHfwExgMBkFII5MnQUD4WlAWloO26wVs35MDmifPmQFFyqlO/aKKqlmDp31DYDKZ - BCGNTJ4IPqHx8LJvACbNUw7p6e2HuJQMNIhhBuaHj3vBYrEI0tb1BoIiE9kJ9h7Oh7EJM+g/jEJuwVlY - s24ri5RTnfo5BedAIoueIYPumvomuHzjzm9cq2uCq7UNUH2rEarr7kNd0yP26Y+eKoSWtk4wfpmAg7kn - ITY5DUorq1g8cOQEqze3aplOEhRtJoMcL1mMTixV9IgD5a/tSBVDYql8AKOBQLEJtTP08gY/jjFiktKg - 5FIV21Ok3NazvmR2AvrFkCAJyGYk1comZAuHDM/AyLvHThfBveZ26NOPwI59eey7LsbhFCmnOvVJ5+Ef - rrYZLEU8EZ85+HLwW7ZCLMVTFWdkHoLut+/hgbYHaE9XN31XNsupTrWV3jKVs+uS3cyAD0cLe331jW3Q - qRt0CPUlQVHDKI+fN9iGo4W90uNnyuA2vvRtWTlQgxeg/dk7FimnOvU9/CNqUe47b7ANRwt7AfjpKvAK - Gt18Qur35ymhRfsKKLr5hN7EyzDq7humWrrcfSfKxbz/QlwcLDck1snZJdUzYHUDmk57+K1qdXJyzsL6 - RmQD9ZmObygXB8sVIRO6fXQB4hC6eRQppzr1XXmHclnAckFomLc1Um5dItEvhZ97MQXP9N0AAAAASUVO - RK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhDMTdBQjRENEFBRTExRTQ4QjQyODY0MDNBNTJE - NzNCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhDMTdBQjRDNEFBRTExRTQ4QjQyODY0MDNBNTJE - NzNCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NUQyMjc4QTlBQjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4eHsDfAAAB00lEQVRIS7XVWytEURQH8HniTTNHLs0NCXNcXjTN5dH9g/gM - 3jx590QhFDJS0gyTGmpqaqJIMW4hzlAoOaWISS7LWifntI3ddnTGrl92e/57/We/DBsA/CvuYSHZSr0t - lvCGsriX/oI3lMW9lM/SwgF9SEHwizs08IX2vAyLZvZRgXJ+cQWv7yB0q96Ds86voT0vw6KZNJsK4Pnl - DWKxmBBlqhpDUN0UNp2n2VrB/WMOEomEEGX0ArN5o+BGfYB0Oi1EGa8cwpKw6bxRcH6lQiaTEaKMVw5q - rzCbNwr2z65BURQhynh8Qe0VZvNGwdZBFlRVFaKMxxfQXmE2rxc8rW3sQy6XE0puHoG7IaC9YnV9j5th - pbZPqOCDCrbH5uIwOD7/zWgkDkNTizAyuwQjkWWIxFNQWduqmVxI/MiPz6/A8HTUuDMTTYLkbrqhgt5S - T3PG4ZJ3HE7focElZx0u3yn+VQiG1ZLymmm7s74f88f42S6bl9zyJZ6d6Xckd+Mt5ieogH4xJORHHajt - SzvqZPSgECpHZSiA2DztuxBlad+NgnpBEbIjusiiYboKRF+kGFHegUR5ImkFv7G0eAPzWVq8gfksLd5/ - oULiHhYS97BwwPYJlSCUgVubViQAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJEMDQyOEZBNEFEMjExRTRBN0MxRDBCNzJGRUND - MDEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJEMDQyOEY5NEFEMjExRTRBN0MxRDBCNzJGRUND - MDEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkRDRkI1RDVEMTRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz59jfe3AAAEbUlEQVRIS8WTeUybZRzHF48/pnFOuQRajkFLgQFb5iRLNJr4 - l/EPgsniUI4xZDAY1zyxwApsMJyIME61rByl3DfoYGBrgbWUY06FcZSCha4rQ8jYxkqPr2/fvkv8o2Sg - S/wkT970eb6/T5/39z7Prv8dt/Oql4mR4HZJ3ccoXFxhVCzB9DT9JueJdSq6c1wzVZFupepVzxu34XVj - CaEDi1jX6hF8ZQoeokl4iBVwzV9YdU1XRlIl28eVo8phCdXwGltEeOUsro6psaHVwcSDh5volc4iOO8X - 7KuVwb1hEi7J8myq9PEQO//I85oafr0KtEpUpNSETm+AwWDAvfv3YTQaybnm/t/AyO6Ga+UonJOnIijF - 1hA9tWI2qle9RxcI+RIpmZpTIfBULhIyyqHVahHPKcN70TmYnFFCp9OhqXcc9KwW0DOHVl3YU1aUyjJu - F1SpfhO3EM6bMMsVt+D8Zhz2HIpC4oU6bG5uIu4cD3tfTwAjIBNypQYbGxsISquBU34PaDHiVEplGXee - SuIjVaBv3Lz7gJg8vHg4FlZvc+ATVoLipiHsD8qCXWAO7IPK8MG5FjLXKboOeoYADkldUkplGWb7vOb4 - 4BzxIXXQE/1m59WDXdgBvxPfwz6UC4eQUth/WIBDZ2qQXj+K7IYRImeE5s5fOFrcDPvPapcJzVNmmwVY - VxWG9U09uau1tTVymPpc0iYFLew7OEUJ4BwtALfvJpl5xMrKCu6s3cUrn5YbCM1us80CrJZZVWjXr7j3 - 4CE0y8v4IrcaH+cK4Bv+DRyPl8ApphYuia3wZ3eCUzOA1PIfcVuzjHnlIgK/vgy7mHzTG+w12yzA5E53 - edYPo1c2i/X1dQTEfwvbwDQ4hhXg8OcN4P48Df+UTrgkNIAeW4Hg3Hbo9Xq0iGSgs4ls5CUhoXnObLOA - S8pkhG/bdZzgDZJnffT3GXieLAA9XgB2/RjZjuQqMWhxfBw824H55XWyhcfy+HDNqoB1SH4Codn6G7iw - p3d78EaVPlXX0CaZgkqlgly1gpCiK0htHCH/IL6oFcEF3ZjT3CUvXqv0DzDSS0FPq1a/8EbYS5Rqa+if - SAJ8KoeNR7gitEsnoVQqSbGOkJmYX1ggxaY70SabwIGMUrjn8I3WIXnBRPnWu/8nDnE9Sd7cAaP/ZSES - 6/rRKJRArpiHXC7HzekZNIukiCyrhW9mGZgXa4w2kUVnibJnzdXbxP5URzyDO4QjxGl5i9uNpMZeKP5U - IrywAq9yCnGAOGGMonbYxpVnEPGdyR9BO/MTj8kfgXeNFPt5IngVtoF1kQ9WcTs8qgfgmNreQMS21xZL - 0E6Ln6ef75tg8sfgXT8O77oReAkkYNXJ4PRV/4ztyfo9VPTf4xjdf9CpQKzdxxuGe6UMbhXEmc8V6mze - r3qNivx3HGN7UmglQ6CVDMIxXwybo5UcaunJQD8te9rhyx4JrWwItlGNUut3y5+hlp4cDhFCpl14k9jq - nR+Y1NTjIe7NlmMnWKoHsOtvjWYcKpheqFQAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERTg4QTFENEQyMjExRTRBODEyODk0M0RBMTc5 - Qjg3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERTg4QTFDNEQyMjExRTRBODEyODk0M0RBMTc5 - Qjg3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjJGOUEyRDEyMTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6wJF34AAACl0lEQVRIS62Vy08TURSH73/QhQtXVnBhxEcMiUkhbEg0hB1R - Q1i68C8wIW5cEqMLN7ho2Ji4YiEhWq0prYUhfULbadN3obTaChobtZEUsFY9nnPS6WM6HYowyZf87j33 - nG/amaai9geOBYA+4pTxihmBE8DcTQB4J8em/9IwSQyagmrtL+z9rMFmvnhkKvtV7tcVHPz6DVsftulA - AckdhUg8zf19eoLKAd597iMLMItewfOxUDTN/bqCH3tVSG8VWIBZ9AoJApEk9+sKvu/uQ2IjzwJkGtH8 - OrTwy3Hu77vIAnV9mgWlcgWiqRwLjAMmkOMbPbNTKnN/JJntqJGEBZ++7oKcyLLgLN4JrU8Cms2C4pcy - BKKZumCI18temQ/8DzSLZlBmQX7nG/jCKdpgAa0driCtY5iFHuqHSjNoFtaags1iCdzBBG+QgNY2aZ0F - mIUe6osENAtrTUEq/7kDq9PHAszU5yYoq9f1i9cUSCD5ozxDEeTsrhAoONwyxLLb8MrhYQFmZYCHsnpd - v3hNgQROb5hnKIK29944MAThTBEWbS4WYBZ6qC/sKSy5ZJ6BGUQg8b4Bbhjod4AZXlhXWdBa10LrIVul - AM9ggS+aa6AIMMO8ZYUO0KeyIOMtZyaQpXpNi4LFucYzMINwhbMNcMNw5oIJMMNKIA0LNg88mZuH/ssj - dPgBMnN+cBRmny1wrRtSMMMzWCCFMg0UAeY2Fh0+GL5xG8Zu3oHXUrCj3g0WONdTbeBm21/o1N17gPtg - 98Xh3VoS3qzKMDI22agfglnY/Uld8NDc/ZlZwAwvl4Ngun6LGh8rdfVDViNs3rguOOzq6XOD8PDpc7g2 - OkHDH7XWtYa2It66Y4eCQ8cRfpvUNa2hTUD8A6JMaBvCyTdJAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERjY3MEZENEQyMzExRTRCNDlGQUMwMzk0OTAw - Qzc4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERjY3MEZDNEQyMzExRTRCNDlGQUMwMzk0OTAw - Qzc4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjhGOUEyRDEyMTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6GKmpFAAAC+UlEQVRIS63T20vTYRzH8Yforj/Ei24UiSgKIygKi8oyxZQo - cvNYeXaesmzqPGu2POd0ulSsnIdaurTSTJ3O6UxTPGya5vCQx5AuPn39RbHop7nZxQt+z3ie93e/Z4w1 - p7nsCoBt8R6yBF/UHPv+Wb0rfFFzm99CRIwEW1gnqXzxTXxRc0ydctm4OlID2sxrw6iCtiwItC+A2P/D - frLnjwGNSZdMq6N1WOvLwFpP4l/WdRlY6Jaio9Ab7QXba8sVoDHZGdT8PYS9THDqMGnLsKpNw0qXGCua - BO55VZdNQ6U/DRRibVCGb+N1pH5bukoRqHmDHOIG1N8/X2F4I8WyNhtf2+9hqSsZxqZ4upbb6HsSZLHO - Im90ym6hNVcIaktYTexZyUelGEvaHMy/jcFiZxo0xX5Y7ivGcn8JkVmA9uvlWBmqwpJeAWovs+poR99O - eRgWtQWYVUdgrj0FH+i+F3XF3NoappZYGJrEoLaOVYpOOTY/FGJB+xjTqnDMtMTTAC/Ma/Ix/TLUKl9e - x0JfFQpql7PykBP7lWIXzPeUYLIhHCPKCLr/AMy2ZsKoDLTKdNNdvM8TgNpRTBZwfJ885CTmaIChPhwa - mS+GnkdhqjEWY9X+VplqvIMXEhdQ24mZeuSs0N/BNNWWj4k6EdSZHhhXxWH0aSCGFd4c4Tk7zk7XBlUM - FKLToK4Nm+0qYnneRzqGGiSYaIiiyZdhVCdgqFSIwRJPjucZW85O1pvnRmvDkO9zFNTdy2Y6HjGp4HCF - 5kk4xhoiURd/EROv4tBfeM0qAyUC9Mp9QM0+7o829T6LZV0/mNycS6+nFKFWfAGj9ZHozfGwil7miZYH - 7qCmghsw+S6VpV894KuUuKFbfhNNqa749CwY3dm0toK+VABl3HlQM5obYHybwFLc7W1y/Y5BlX6FfgNn - DNcEY0DhZZX+MiGKbh0DNR24AYYWMSfJzc6GZBApwS5skIzNODcg0dV2V36FtsJ7yBJ8UXO8hyzBFzXH - ++H/A/YDv9/V87iOlrYAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 - RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL - ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH - s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW - uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx - xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd - iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ - qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW - GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE - NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n - KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw - qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI - HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq - wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q - 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA3MTZBNTkzNEEwMjExRTRBQjdERDhBQkEzMDEx - MzZEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA3MTZBNTkyNEEwMjExRTRBQjdERDhBQkEzMDEx - MzZEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTgxNjM4Q0YwMTRBRTQxMTk2M0JC - NEQ0MzNCOUIxQzgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz7RblD4AAAHUklEQVRIS22WC1ST5xnHg7OerZvT9aydtdzJhVzIlSSEXAgJ - JAESIFyTcJPgBRXEincrnVhaQKug1Qhepk7trG1ltAWn1RbrhYsX0FmGpdQb01Y7bREq3U7/e76s89iz - fef8zvM975fv/3/ey/e+YQFgvXA17ifw1QkBkUoTm2LGpqbdtRf7rnz41d1710dHx0bHx78HE5mcaWee - 81XmLLZMJ/r5L3/9FIvFCmA0/8v/GJDo00TSWy1tO4Zvfzn0aHwcD0fHcKq7F/vfaYdvz9vYR/GTrl6M - jIxi7LtHuPPV18PvHTn+R150fOq00MjfkMmE/2tAws8Q2R2nu1q/oxdvDN/BqtqtUCcXw5C7APbZq+Es - f8UfmZxpZ55fu/l3jDwcxUenOlup567pEaJAMpn4EwMS/hXh6bl4qWN0bAx7D70PqcmNjPIaVL5xCEt9 - h7Hg9QOYV7sHpTV/wPy6vShbt8//nPndjv2H8c23I+g639sRqTLlPxfMmcaY+A1IOIDGMe3j013tTCVr - X2+GpXApZlbvRPm6AyipasKMFT54V+9Ayeqd/li4bAtcC9cht2Id3JUbkViwGIW+Zbj/4FscP3nmCFdu - yPnZxKcm+w3IUXjgndZ9D0Yewrf7LZjzFmNu7ZsoWulD3pJNcC9qgLN0LRwlL8HuXeWPTM60exY3InXW - y5C/4YF4fS5qDjXj7v0H2HPw3QPBkXINU/0EouDajVs3+z8bgkiXhrylW5G9oB45VB0jZs2vhCVvERI9 - C5HoJigyOdPOGCp8+VA1FkG1vhi8JSm4NDiA/quf3+IoDCUsmpSg6vrGxntf/wOVq+sQn7sQWWW1SJ1Z - BWteJUzZ8xGfNRfGzLmwFSxByowV/sjkxsxSCNalQvlaPrQNcxBT74X45RzM3FyF23e+xMrqus00POa4 - ox+d+vj6rdsQaVOQMbcG5pwFsHoWQZ9aAp3DC6NzDpKLliMhtwKmrPn+mFS4DPw6O8RVmZCuyYG6dgaU - NQVQvToD/BftuDZ8G4fbjnWwaHIL/vq3wVstbccg0KYi0VUBY0YpYlOKoLZ6/JhzyqFJyn+cqyxucGss - UKx1I2pVOqJWpkPyUhai1+T74S5MxsETbbSi+oaZOSj//Isbo5ubdiPKkIaYpDzo0ryQxzv9xNgYUffj - XGZMR0S1CfwlNkStSId4hROCyhQIFqVAscoF2cpscCuSUf/mdvQPDI4xBsuHrt/84fevNUCgSYacBNQW - F6Jik/xEm7Mg0dl/zG1gFxvBnZMA3jwL+GU2iF50+O8ZxJUZRDq485KwrHk9Phv64gfGYMmVgcHxqlc3 - gCM3kwhj4gQ/mqpUmiHR2yGMsfrvGXhGMsgygZNvAs+bCP4cGzheyr3xEC1wQFhmB2dWIpZvq8fl/oHv - ycBc1nmu797W7XsRLFCTiAkijRUcmQ4cqQ48hdGfs8WxYCu0YOt1iLDqEJ6qRWR+ItgeI8I9eoTn6yGY - ZQN/tg2hhXFo/NMedPb03meWqbu1/cMrZzrPY1qYCByJHlypniKJCFQIF6rBk8UhMtqIMIUGISolwuI1 - 4NqN4DjjEJquQWhGDNguA/UqHpHFFgRma9Dd24c/tx29yuIq4jR1jU0f9F7uh8WRjUCuDBFRJCA1gL5E - hEQqECJQIFxKIjFkbDCAbdIjLEGDYIsSwUlKBNmVYOeSoZuKyDXAXObGpwODWFPXcJQVyJVMpmGq7rpw - 6Z+79x/Cs0E8qpqpnF4SaxHElSAoUopgkQzBEiJahqAYOYL0cgQaiQQ5ItJoiJxacHKMmO5QYnfL2zjX - e/lfHJm+jjY8VgAvOi57o2/Xye4Ll+DMLcLzNFQRYg31JAYchR6hYiUCRVIESYhoQi1DoFaGELMabLsB - EQ6ar0wj9USNtIpiXP50ABu37OgK5itm+je758MFU3lK09qD734wdKLjNKK1JqpajiitDUKdFSIDrXlT - CkQmKwRmC4Q2ylNTIExPgjAzCWKXA2F2HRQ5iTjTcw6tbceGI6Ta+qcnT+X7DeiaEB4Vo6AJ39h65Phd - 2jpgtDkQKlFDbsmEJo02Myd9wU4XVFlEDpHngaaoENEFLoSnxEGf58DJs120VZ/+RqCO9/0uhGch3emP - Dxy6JoaLNYl07G3ad7Dlxidnz2FV9SsIEUYhRKaCxJoKdSZtap5iqN0FkGQ4EWrSIVQnxYq6tTjfdwXv - tR+7Q+JNL7BF2aQXREx50iCAmBTCV2hpTho2bNnZd+LkWaqqBw3btqOwtBSmNAeUFhPinQ7kzZ+NDc3b - 0HWhD93n++Dbua+fK9NvoTM5+Udx5mye9NjgCZNf0HEnpN5U5RbPa9+0bdfQ+0eOPzp5ppvG96JfjFkM - nXR/vOP0ePOu/deyCuf8JVSorJny7HQdvR9MTCUm+fUYgyehazLBVCCd8ttpJbQANtO3cDjWbO9werzd - ruK5F9Ld3p7YBEdHCE/WMi0s0jf5mefm0e+ZCsXEf85i/98XsP4NaTpxka74X+IAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJBREU3RDk2NEFCMDExRTQ4OUM5QjZFOENGQzJF - MDk1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJBREU3RDk1NEFCMDExRTQ4OUM5QjZFOENGQzJF - MDk1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MEM5Mzk2NTZBRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz52g1XsAAADeUlEQVRIS62Va0hTYRiAXzVNoQs6oUCttJu3aqatrLxr2k0n - W6bLLlLSxTKCKLoQQUg3IbLMflSgBRGRP7JSSzGnWalYdpnV1MQu1tBWWklqvr3fp2dsOytSfOFh3/l2 - eJ7tnDMGkkmzGCqigsARhPlUQqCi8nEd9v7GEYP5mFcI4K/e/hGHeQ2B7p4+1HV8Nf6Kw4a5GGxtCHzv - 7sU2nR4lbr4/AUBFKIeD4GKYBL79+IX6rm622U8nSgnX4SC4GCaBL50/OXwTwIUY1ohcQkCn/84ZDLBP - I5p16TBl7XYIoaXVwI54RC4h8LG9k/OvQPIOmEZUJW2F+XRoPbBrOiKXEGj9rOdYCqi2gxXhnLQNIo6f - n9tEa7ViI79PoojIJQSaP3RwjAOJaSAjjhL3N+9zrD+W499UVJnSeeVmWDvtlcWlgCedZnK5RC4h8KZV - x2FryQSYmrAVjh/MnP46/57yS7VmZ9+zxr1Yr92NtQ1pWFmfiBevL9QpUqE0JhHcyWuImLsMAU1zG4et - V6yHC1l5oe+evNmD1ZoteL9OgaW1K7GkRoF3H8ZigTocb5bFY8bZWbpoFVwh7yiCR8xdhsAz7XuOh9QD - D2R6twyIEzG/JApz88N7z+T5d+VcDezKL43Ea4UxeCjTqyNUDpUBYeBFXjvjgOAyCdS9asXDJ3NQFj3u - 7eWCyG/FjxR45OyMr6s3S1qCYqE8RA654Uq4dOiUV/v+E9P0i1ZA9Zwg8COnA2HyDZiLYRw4dyAjC50n - z8awBBvNbbWyZ+8x10+By+GONARCbe1gDBPJloCvfKODluQ10mD+qDK5LWFyD6pfvOUYBzydXL0v2I+V - rI9Mhud5BQE9i+RQPt2P30BBYrM4HmYSNf5REGS0b5CzYdKq+iaOITA44wmPiLXwaFfGhDbZMkinYxNJ - 8CpwXxgHobQcPbhv8XegrtNyzAPsOtqHJUPeml1jm/1jYDkdM5G5hB3bDL6KhknLal9xzAN8gpMgVZHm - oKUAuwx29H420c9O/l9KHms4bC0KLFCAY6CSHr+VoHJy88lWbEjHoqoXWPzw5ZCxGKCxkslBLo22L1+6 - ahPeUj/FwgfPh8zpSzfQ0cWrwVKAjfXcWFjjPm9isWSSbx/7JEPF0cWzcYzE7dTfAmysfSLB2z0Awm1H - 8ycnjrD4N/kX4gEg8A9sAFSe4VuPvgAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkEzN0Y5NjgxNEE5MDExRTRBMzU1RUM1MkVEQTU3 - REQxIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkEzN0Y5NjgwNEE5MDExRTRBMzU1RUM1MkVEQTU3 - REQxIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MUU1QUVCQUI4RjRBRTQxMUI2QTlC - RjEwMkVGQzEyNEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4Oz1B+AAABO0lEQVRIS7WUP0sDQRDFt0snIcEiklhGJLH3k6bNp0ifYCUo - KWwMIRCx0EYxEEL+IOPO4SxzczN7d7gGfuzd7Hszd9nHOQD4V9RiStRiStQi0b68GXkgwkjzcdQigU1O - 32CC+9IjUYsENvjY7EySDHhev5skGXA3X5r8aYA3lx0wET1otYgmNMcOku+jXtMg4QJFJMb1a7uPmjUd - rVzHDfDy9pmJaZViCe5rPq7hYpgvXjPw2hNtTqBOevk+F8L0YRGQQosyHxfSf0jUegPLZwkrNedYfi6o - 9Y2RWP6cACPHYnf4XauQablfHYAxo6jt9sfwRGWgVvrVASKmdd7g2OoN4P5pVYhqbgCPmnPuzHPtua1C - s9OHyeyxEFU+IJcCb2p4zj3dKjQvrsat3jD4CwNCIcEv14/fpAfcDwXsled4Tu6+AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlGMEQ1RDBCNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 - MzBCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlGMEQ1RDBBNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 - MzBCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzFDMDRERTRENjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6zemTaAAABh0lEQVRIS7WUvUoDQRSFEwiBKPEHsRAkb+ArWIsv4CNYCSKI - jRD8a1S0m9QhdTobG5uARZogBJSkiLASFJJChQiRcJ2z2bnMZtbxCnrhY3YO556z1aSI6F9JFP+SRBEs - FFaUhoSopAyQKGIBi58jEuErcQSAhY/hyP5DL8Y7mQMcAcD8Phh+u2Tzk9cRAMz914G4wOd1BABzt/cm - LvB5HQHA3On2xQU+ryMAmB8en8UFPq8jAJjvWk/iAp/XEQDM9WZHXODzOgKAudZoiwt8XkcAMN/U78Ml - CcY7mQMcAWhz+FRc3zZFREXypwKYEiG/e+ykc1WYVRrCGUk8nGUHsyic6nKeetUK4dTESjjLDjZUlqaV - hiS8lEsh0Z1LTFYs2FBazFFwcUzB+YE+T8bffD+i4LRIwSV0jdZaO5vhHXtRPmfFgg1n81mlIQnt/W1q - bKyH34dz2XKUz1mxYBaFU5zJUG1tlXDu5TMcjuEsO5hF4exOpZWGtnLpWDiGs+xgFv9gxlmU+gIVyyIX - YCSg/AAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6npMy1AAAGEUlEQVRIS7WVeVDUZRjHf7Ase8ECu+wl4LIXcqyyHC783AWW - 5QaRFTHkMi9SQvE+UhLzwk0BUcQSgQBBgcYDzStMSzOPcpqcmo5pmqk/+rOapqb+iG/PbzfFcSz/6pn5 - zPN739/7fp/nvZn/3TSLjj+XJy2/RaItPCT5vaBd8m1+q2Qku1lcrcvki+iXr7fFU6ZZeOx5KDU1b7jU - 1Z2bVPMPWNMbRXrXkWAc+ywVLbcS8fKwFjlu8VdpW0XzSc6f8PEIPzJ19dFnU3WEJdHL9P3X9O1nkdB8 - CQrX7i3mKn9zfqsUq29ZsPfjRBx5aMO2cTMy94gm7FuF7XyJTwDJTo5GVdHxNALVgsPd5Ceye+9g8b0f - UXbjB8RtH4Msd+MeXS7f6twjxbILZiy7pEHDtTBsvG7BqivTUXpsClLWCbtJNpDwBlGVH3ySIFV520eW - nedRcf0HVJGwbeRrOHs/h2n1CGRZDe7wND/W1hiI8sEYlJ4KRcVpJcrfVqByNBILhqLh3KeA+UXBOpL2 - jkRZduARPGXZ/vH4pnMou/gd7INfIPn4QyQc/RSOzk9hrBtEiKPerUn1Y5PXBaDojWlwdgUjr0+G/H4Z - cnpCUNJrQNZ+LeLrBD/LYnixFEDAKFz7vJQ0r49dO4zikS8x8/ADxLd9jIT2B5ix/z7SX78Pw+K3EJy2 - wq1M4rEz6sRwthgw82Ag2KNS2I5JPZ4rZx00ImGNHIZSfisFkDGhxbs5AkKLd/3kaLkDlgTjXrsNc/Md - mPfeQeyOD2HbcRu6yi4E2Wrd8ngeG71IBPtePWa4JUhsD0DykQAkHQqApUWCFLcGyZvDoZ/P/5oCTGXk - hU2MvGB7rbGmG47dd2Fa+x6iX/kAMa/eQvS2m4jaeAPspvcROb8TQexid3CcL2usFCJjnwE5nQYU9RhR - PGDC7D4TCrqMyDqkR9oePbRz/SZEKh8rI8vdyshyXhmzLD8DS/1VGOquwtgw7glkXH0Nhvp3kbL2GrSl - hyC11ril03xZfbkQKZuVsDeq4NihRtYuDbJ2auBoUsO2TQXrJiWMlWIExflWMiHOjRzfJy0bg776HCKX - vANd7WXol1/xeN3Si7A2XIXW1YbAxAq3UO0zPTSd1yG38bplLK//vxBrffKY4PQ1HH9aKk8jonQUUyvO - Qlt9HtqaCx4/tXIMyXWXMXXOAQTEv+D2zCvDhBBTCN1zCGOCZq3k+DXO1YcpRYOY4hpF2LzTCCs74/VE - 3IvnEVd1EhGFblBbWot6BKXWQZq64tlYa2+TuJwQM9KU5cRL35hyOxCe2w913hA0hcPQFI16KRzxEFtO - a1Q9htSVN5C+5S5x7x/uIm3DR7CvuomUReOImt1FU7nwEolHECImMGkJE5i46EJkejNM+X1QOPqhzBqC - KvskVDmnJuHKT/K4bgjKzBMItXcjJv84NOwWiKPndJK40TOCgPgaRmIur1dZ1yM6txvyWT0ITR+AImOQ - gg39N1ybDBJP60PorC5My3oTwQm18FdNryBxbq0EJL6AEUTYZBTkF0NGKyKdvZDb3qJOAxSIOqcP/jtp - JyC3D1BSvYgp6EN4aiNlP/cTEk4gFASPEUeXkWd8RaY5jcrEBkTn9UCT4Q3gzfBfRvJE9rrsfpicHSRe - NsFXmJeSXhTBXXY+jMjk8uArVkpExuKb6pkbYJ7L7Ria37xTUBeMeCkcncRTN0z/TyLKNYy4khNQJq2G - IMLBXdUWQkXwCYYR6md7IPP1k8WEC3UFDzSpG2BZeAZJtXQWFpyls3HOC50JzkdQnbFqDInLLiC2rBcq - 6xoSzzzP+NDVwDBaQkx4XzahNv8xZH48sVotCHeOUnnCWNJG18Q4UjddB7vlfbBbPwC7+YannLTyIrS5 - OyHU5v3hr07poL7JBHe4Jh8bzgQROY8h46IKCAVfbi73D3PcpfoJlX0VtEVN0JXsQlj2ZoRaaynj7N/8 - NfZLPLFmHrXnpiWSCCL8iMl32T/M6YGMq+R+covD7QADwfoIgqt4QVGtfvIZJ4lRv5CY4zypbjfjy+eE - M4l4gtuSwYSQ4DS4EZAew/wNiCYQJlvQU3cAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVGNUQ0RjNENEQyRDExRTRBQ0ZFOEVGNkU4Rjcw - RkEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVGNUQ0RjNDNEQyRDExRTRBQ0ZFOEVGNkU4Rjcw - RkEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzUxNUY0MjEyRDRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz7jldwbAAAEyklEQVRIS6WWDUzUdRjHoeXWVktIc74MLREMUxBQV4RYkBmL - SBwSoZIFCgULlOJFDJDxqkiAqGgoiIQ6jaFLB1EqUaC8iMgdL8cJB3fHwR13HO8Hh3x7fn+pwN01nM/2 - 2X77Pb/n+33+v/3/95zBbGOVnZM58QHhRKwgnp9KPXuQ2CtJ6ScOjGo0fcMjI93llVX55us3rqbUc49P - zDLyw9auL4iw5l+IsMY//BRujcygdcg+ug83rpzCsVhf3C6+hHg/W+R++985BtU3pey1cCCpOYQhJzo9 - 8kPX1tZcDoS0Jp2jrCgWmakhOJMVA4GwBd1KNSQ9veiUdeNifjqyMsJxveD7f8+z2rPBlg0kNZ9gJjMj - L8RqQlSegIbLX6CuYAcOBm9FHe8B2rt70SZTgNfehTphJ+paCaEYjSIJkmP24PaPnrhfsBP8okCcCbZ8 - RFLmxIuc6PTICV5Dh4IxNqSEemAA6adzwBdJ8VeDEL/XNqGkmo/iKh4HW5fWNCL7QiEqq2sw3N+Dijwf - nPx6FUjKkpjLiU6P7MDVqL/gj8nJSY4bpbcQnZyK8EOJCI2Ox3dRcY+JjkNYTAIi4w4j7+JlKBQKjI+P - 42qqJ9J832AGawkjTnR6ZPm/iXvn9+ARiWsnJjCu1YLeGshJQCKVolMs5hBLJOiSydAjl0OpUmFweBhj - ZJAfuxVJ3ub6DTJ9LVCd40Pij6AZ01IRoWVGumE5dmZEM45RjRbnolwR72Wm3yDt85W4e2o3FVLnGg1G - xsYwSvDEdxB03gEa6vJwSopOhkZHkRPhgkPbTfUbpOwwR+XxXdT9OM79EQ/lgBLNkjpsz1iMP5t/oU7H - dIoz+oeGcTbUGVHblus3SPJYgfI0LxLSIPmaL4LyHOB5bClK6gswNDLKoUucoezvx+n9W3Dg49f0G8S5 - LUfZEU8MkpC8T43YQi8UVp3kutOFenAIvep+dClUkClVOPXNZoQ6L9NvEE3uN+PdMUBvRXevCgqVmjob - gGpgEH1PwPZYTq7soy9bDolcgRNfOWL/ZhP9BpEfLsVvMW70kQ1C2qMgEyVnUiUoQ2CuPZTUra7rYYi6 - ZDi+910EvbdEv0GYkwlKIj+BijrL+jUKbdJO1LZWwD19EUrrr0Cu6tMpzhCKJcj40gEB9ov1G4RsWoLi - UBe6V7r/n70RkPMOPDJMcLXqLPc0DF3ijBaRCOneG+H31kL9BkF2i3B9nzN1qoagQ4yDlzxQUE6/lHRd - XfLeGbA9cbccwk4JHggegi8UIc3LDj7rFug3CNiwENcCt6CH3ojm9g7qqoN79HZpF9rpjjumYGu2x3I8 - 4UNU85pwv0WAox5vY7f1/xj42SxAkf/7kCmUuNfUiho+FTa3gtfaRh22o6lNxMHWbI/lKut5uFVdh7sN - jTiybQN2rpmv18DQ1+rViUJfRwia+bjXLEB1YxNqyai+VUiditDY1sHB1myP5e408FFR34Cb5WVIdLXF - Zxbz2DywJYw51WkxZ9eqebxUFyvk7rDHD24bkOhig4RZEM/4yAZhm1Ziq6lRG2mxscmm2owwdF72suOn - ZkZCTzNjuJsaYdtT4vr63E4L4xcCSYv9IXiJU30i2BxlzmzkWRHsLp8GVsNqp2aygcHfZtZtYIryU78A - AAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkUzNzJDMjE3NEFENjExRTRCNjE0OEVEQzI4MEM0 - RTZDIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkUzNzJDMjE2NEFENjExRTRCNjE0OEVEQzI4MEM0 - RTZDIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI3NUQ0QkNENDRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6PyaLfAAADMElEQVRIS6VUXUiTYRT+vi3Tzd+ps23+3KRigtiPkolEQReG - UYTkhWatpWlWGkRdddfdSPImqUAJjSIT00oxLJIk0cR+tFSyzDJtgaMkDEPkdM7ZPvm2vS6jBx6es3Pe - 8zzvtm+TohLS/ov+AACStLgEQuJyLRJWYK1yzh/+FgCoQrpnfM4fOGBhcUlIMkEVkma4H4i1y2kFcMD8 - wqKQZILKZqTqmlTAWrfvMjhgbv63Dwm0hLWQohn1eNEbzrlfPiTQAtZCKjP1GXdAIC+r4XD+9CGBFrDm - RVJ1re6pZ0GyHHMvIawauYVNCFPfvvuQQAtYC6meKXU0amNsaGN/ZR60xIf9aIgN3cpGE9OzZCZ85nEm - pGiWlLABmuJCnUOXrNB7chdct4TUo32ANDbp4NuielDpqWfePdaPX6GrohSK4uLhlCEo96YlZLbOFHzH - oJXjMSBcGn4/zQGovEDqXXtzeTb+BTrKj0J3+Q54djYP7EZdTU2MPjFSK8eieQR9QtLg6GcOQPWgqKeQ - ZyOfoK30CDw+lg2Ot3Z4VLoNqo269mCNHIa2WjYn9A1PcAAqU6m9VV3TF9psOwwPS3JgZugCdNoyocwU - jU+RlImWBpezGz0vxzkA1YOiHvPFO7Ca1kGHLQtmXp2HdutmqN+/F6JiU+h3kOpyVeHJwBgHoLIpqajm - 189HoaG4CNqsGTA1UAWth9Lg6r490PygGyLjUikgzuWqQlffCAegelDdUwLqigqhpXgjTPYeh+bCFCg2 - RkEk3vxuVz/P0c43oLP3DQegLhspNalSFxiNcLswHT48LYNbBUlQk7ebzenmyhm08w1o7xmiAP6hRZiT - 70eYkzpctUuJWdHmwWs74+F1Uz7cyE+E4ohQB5mHm9a3GywpTXzektyKduIAIsKI3ISkL4rIdYle05C9 - VrZVBmvtl7eboUyv7V4jSQdwRn8FdI72iErtCUxnIuifkJ5hUqUOq9Jr7OeCNU6bTpNVqtMcDJSldOwn - KnOk+jypJ5QANRWc0cs5SEelXr54QidfwVYAMoiHq4W/gNM6OaNCJ+diaUIqN/43+Atwg27t+9ZXBUn6 - A2MdqQeVc5pWAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjUzQzNGNDI5NEQyQzExRTQ4QkE1QUNCMEVDRDZF - MDVEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjUzQzNGNDI4NEQyQzExRTQ4QkE1QUNCMEVDRDZF - MDVEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI1NUY4OTYyQTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6IsaOmAAADF0lEQVQ4T62U/UuTURTH+0nICqRI1ERMMyNQe8N0ChqBwQhN - yvwhEgJjVCqJ/qCibZo6tzQ339h6Nre5prapUzc1XzItX1ilzuWMLLVAen+xf6DTuTxjdxsFVj58ebjc - c+7nnud7z3228DbpIaDFH/CfoqCn72DIDvNfPDM2KAqyr8PcJxqY+QBTb8kkjocXQTsKigGwfqYJHqIg - 1OxHGHvlWPx4hXB1YyA3g4CBhqst+piEnrDA3rA95vBAY1x8d7lq/DVZwm5PQZNvoKYdypSgHgbVEIh1 - cLOZzOCbSSsyRQRba6uWtcpVLbPcwlglInNUCJNWWKqABqMLCGvGlfpJELaQ/V1Vd1lujAhe0chtUrH5 - ZExnmJ85MdomEa+qZMbIEF2BHGunILSjdZwYgTt4gJqjjj0Rltml1Zq9AeL0Mn71Wn2mtDU80MIvsFTw - O+KPIoWC8BNYRIUaqrRQroJKjQOk9N+xLBF2pXJFKfnsDGYa8gS6xOO2whyMuoHaHpGzZ/pBM0IMrtXD - nT4HqNHXe0lYoogMFeQP4jbSDkCPTUyXmnNoPutSo+9WN5DEQDyeWCWnhqm4p7Oimt3b54rzmmKPVHKz - 0Xg0AU1pz87VJp+yXOfd9t3mBmLXsGrsJhSsDtF4iOWxKdpzyQNnuRW7vEUp13obFG05OVUBPtO5V1Sn - k5q4SX8ENfWA6C7xHsP981Bb2sf38ZKd4JhSuXUJHPHhg/WJnAeZFw0Xzt/w8erRtLmBnB/CSmaC599I - 2PYVRl+CXigu3R9SfCC0Pf1MZ1oqvqvjogX7gtRFJfb1n24g7GblfQcFP2fkBYm5anxqQcbLKgzyK/Df - WRTkV5+RMTg84ZrgAOHo4ZIDVNdJw67CpsVLZ5gifj97Typlq2ZFQXj8LKh5EHpnaIar8N+Al5l9Y9Vs - T7OiIAzjqaMsa6QJnBkeWvgOHdPkAuIV67PSeQpCYYZplsZ+KyyWLRyFF8D553EDbURY770J0rrYJbda - SYE4iWb9NcgpRKDrOMAWwYP6d5BTaC52zyaAWDlAm/DweL8AX9zXukfxHsIAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - 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 - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjYzQTM5NEY4Mjg0OUU0MTE5NDBEQTc4ODZEQzk5 - N0NGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJGRTU5OEQ1NDlEQjExRTRBRUVDOTkyMjQ5NzEw - REUwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJGRTU5OEQ0NDlEQjExRTRBRUVDOTkyMjQ5NzEw - REUwIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTY0MkI1RjlEQTQ5RTQxMUE0QzNB - MjdEOTJBQzc3QkMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjNBMzk0RjgyODQ5RTQxMTk0MERB - Nzg4NkRDOTk3Q0YiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6B5sF9AAACe0lEQVRIS7WVb2jMcRzHL7UHanF/Mts5prE/1li3kAfu5Ak7 - 5IHNobBkSC2UIuGJkrrSWRvTmHQWK8U1T8jqUtYwkZpaGjV/Js6to5YwfXze39+fu/v23f36hXe9us+f - 7/v9rd/dr3MQ0X/F4Zm3+K9QhWajNNlBFZqN0mQHS6lMdrCUyqSgimllUsy4XmOmp+QRDllQWbygjjq6 - uimZStOX8a+ixox3pXrM1JLCDAqYJmY7c669M0bff07mcLbtEl9QE8k6V6BH5ooXMsHZZX7ae+AY7W45 - SrPm19LbsSR9m/iRA2bYGefggVePzUgKBzeu9sQpmZ4QcG/WMtk7eLjv0WMz0kOz+TX6MUXvP6cFeNbD - bz6YvQFm2Bk9PPByZO6jksLB5KvRTzTyLikIrG2ktsvXzd4g2hGjYP1ms4eHvb850qkl65LCQW/ntVs0 - 9HpMcPx0K1X4V1Ff/3NzhnphbVDsjBk8Lm/VE44s0ZJ1KS4Ie8uXUvPBE7Tn0ElCzTMqrV5BO/cfEaDG - TD5X6PFFONLygsTF7jj1vxihyPkYNTS1iFrFxm37KHIhJmp43L7qZxzp0pJ1SeHhQGgLJQaH6fb9R1QX - 2EB3Ek9FryLe95j8K9eLT/TB0FZcskOP1iRdkIh23aR7Ay9pzaZddKY9Jup8nIpeoXXhZlHD655b85Bj - p2npLOmCML+dD/iTZhaX3+UvbRB1PpzeygFnSUUvatecRUMzisoOc+x0LZ3FixxYhQyK1cxyZhkTYhqY - RgnM6hmcwVl4ljDI0KS4AC+Kmyli8Jv2MF7GNwXY4QzOwgNv5mWTL7CLpVQmO1hKZbKDpVR/1P8OcvwB - lh7gOXXZq9sAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkNDMTJDMTRENEFDOTExRTRCRDk4ODBFRTFERTlG - MzY1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkNDMTJDMTRDNEFDOTExRTRCRDk4ODBFRTFERTlG - MzY1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjYwQjFGREZDNjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4rRYZ8AAACEElEQVRIS2MQltOlCP///x8vxqqJFIzNUGSMVRMpmCDApokU - TBBg04SEpwHxfwJ4GtQo7ACoABfODY3N+P/773+82C88GWRJBtQ4TIBmKAyziCsa/L98/c5/37Ck/3Wt - fVixT2ji//OXr/8XU9T/zy0kzQo1EhVgMRyEm0uqW//vP3Lqv5Cs9ml+CZVp/OLKs/nFleYgY0EZzQt7 - Dh7/n1/eCFLXBjUSFWAxXENZ1/r/g6evgK5P/l/d1IMXe4ck/L//+MV/RW2r/0IyWppQYxEAiwWT+qfN - /7/7wHGQq84BXT9FQEq9S1Bas0VQWqMVFWu2ANWc2LbnyP/eKfNA6qdDjUUANMN9Tex8/j999eG/LzDy - yuo7icIeQfH/n7x8/x+kV0hGOwBqNASgWbBt+frt/7cCXQRko2Cg9xfCXA5io8uv37bv//J124G+0NkF - NJYRYjoQACWR8f97T99gxSA5oHIpECZCHTvIbDCAGgy34MaDF1ixo08k3LWO3hEY8jC9IBporBDEdCAA - CqBYcPnOU4ow1AKQTyEA3YKz1x9RhKEWyEBMBwJ0C05cvocVl9R3o2BsakCYoAWHz9+mCBO0YP/pGzhx - flUHGGOTg2GCFuw+cY0iTNCCHceuUIQJWUBMBYMX80uo7gQai9MCkJAoENsDcQiZGKQXZAYEYLEAlM1B - CkCuIAeD9EKLCgYGAMLPWmGxemtkAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY2MzBBRkRDNEFDOTExRTQ5Q0JEQkU0NDNBNTYy - QTY5IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY2MzBBRkRCNEFDOTExRTQ5Q0JEQkU0NDNBNTYy - QTY5IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjgwQjFGREZDNjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6+q/BOAAABR0lEQVRIS7WVTUvDQBCGe/PoQQQP4s2jv8E/4W/rXxEFQRAp - olCwfjRUJWK1ltJgNJh+6Toz7OCSzrIZFwce2LDzvs8hkDSMMf/K7wFmbWunCRgFTQp6RhKY+ZephSvh - Du7hoWf3AgPT+XcteLcqcUcUlNMFYYNLuPeVXZK4IwqKckZMZgsveO/u8jNKqMiOKHgrJrWQdqsSUTDO - Pwm7LBK6pzIYUTDMPoi8KGvB+4wVrGCfKHge5VFYwTr2iYLHQUbgWYObg6pN7BMFd/0RMczeVXAuKOim - r1EEBVf3LwSeNbg5qPIL2skTkQ7GKjgXFJzfpFEEBa3LBwLPGtwcVPkFJ+0ekcAL08C5oOD4IokiKDg6 - uyXwrMHNQZVfcNi6Jjq9vgrOBQX7p50oQgLtT3+J1Y3tA6iSBXbwS7gL7P0RzNqvqWn8AE4SSnpUkJk6 - AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFGMTBBQzY2NEFDQTExRTRBQTYyQjA5QjRFNjBF - MzcyIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFGMTBBQzY1NEFDQTExRTRBQTYyQjA5QjRFNjBF - MzcyIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6M0EzRTc1RjdDOTRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - 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 - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjg2NjBEMzE2NEFGRTExRTQ4NTY1QzE4RjMzMkM0 - NEY4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjg2NjBEMzE1NEFGRTExRTQ4NTY1QzE4RjMzMkM0 - NEY4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTU5NUNEQTdGQTRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz5BZhOvAAAD9ElEQVRIS7WWe0xbZRiH95+T6DQxcc7NLfrHTBaR4NyFmDAy - ljFwwERGpmRxxmyY6QbqgogDhqluOpFLlm6AFslGRVlXKISVS7tByzgUOF1vtLUtLVBogQ4YsLoN9ec5 - 3+xXyIiJWdrkyfed9/u979PLSdsVz6wPfyQA/Cehf3DPQsiBECHkBVj4CyGBn00E9xb+DglU4L/35xIM - 7j78qCpAlVqAg6KNkOtqMTPnx9TcLOzjFty5u4CJWR9u++/AM+NBh7WRnM3/cX/JHCqY899fwu35u/BN - z2HM60NcURjB7hwmNX4/PjmNWzPzZL/v3FPIEK9DQskTNOudmML0rD8oiD0d9hAutxej4z6yZ3pZaA0D - ZO8c8dDM8d9egtSxGxetMTiri8Ih8XpS79cZ4fZOBgVu7y2YrINg9QOIPvU4QcPqyWp1DJM6vwbOUivW - QGSMgdi8E7mqSGQqIpAoXE3OmuRtuKHRwjU6HhQMe6dgG/LA4hhBVM5KJJatJmsPa8TNARup8xm+1tnd - R9bkc88hicsllnGrcC2p1Te1QKliYLQ6SZ4KhriLYe80oaa9Ghk/JEMkqYJS3Q0DF3a4J7D9s1V4s2QN - Nmc+hviTLyOvIgv55SeQe/4YUgu3QlRXjbbrN6A12TDoniSzqMDh9lEszjEoGQbF4u/wa+tlmOxu2Ecm - 0dglR86FjxEteBZx2Zsgab4KhaoH17lXJFO04nKLDCrus+L7A7OowOLyUsxODwy2EaTm78BrWU/io6KD - YE126KxDaFDKEZ4Rhg8E+1HbKAOjNZP6TYsL0mtNaFYrUCmrAGu2YWBwLCgw2Ecf4qeGakRmPo203D1Q - dPWjz8TdBGYX0guSIK5vgLyDQa/BDr3NTdAYrYg68iI2HliJiitV6DM6ggLWwt0p/8J9PeFMsRDnJSLE - H38DsXEJSEhKAaOzod88hMjXt+KTz/PQ2WtCLyfl8wE2RbyKkyWFqJLUQdqu4ASvPBBojE4KH9wVtxel - v5Tj5zopuU5MSQOjt6NG0swJtmHtCxtwrUePHsMDQaA3J/9rfJpTgDY1CwWjDwq6dHYK37BzdwJqZe3I - E3yP9ENHsG//u+TsvcNH8dXZMryVlo4ioYjmA73ZnCA7T4BO1gqV1hp8izr6f6fwDafOlKLgdAlidsXj - 29JKJHOCFrWOnAXga4F8gIjN21Df1k1nUYFSY6bwwUvSVjy/bgN2cILKmnokvf0O8r8pRvr7H5JMcwdL - zvkcn1/cvxgqaGVMFL6BX6Nj9+BLQREuXLyCvSkHEB65BcXll2ju8LETyPqikOaXgwqudhlCQkAQ8p/M - R2K5fxKLWbbp/7Dc0CBY8Q+pPmOq0VkzzQAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjIxNUQ2NkYyNEQyRDExRTQ5N0NDRjdBNTBDQjc0 - MUY3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjIxNUQ2NkYxNEQyRDExRTQ5N0NDRjdBNTBDQjc0 - MUY3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkU1NUY4OTYyQTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4lOJsMAAADqUlEQVRIS6WTf0hVdxjGj2beulPvD52aU6Np6tKBhUWsYjIH - prDYSlZjNPsjlUnkMmSx6eJqS/u5zXGtoKKEMaEt2lpZ20RX01Bjad31A8UakdZ0SyrLJfHueU7H0zl6 - U8QXPvCe933e5/3e8z1XCY5+dVKIyJh4HZoI48bQE5kU44a3ISM45TxQCTxgQIM5a/M0m+eHN1OC4TfB - 96mZ78reg9+I50qn3HvwSIU5a+xBcwyka3ajY3DoySgwUJ44P02O/vSz4HlMfqitk7mLlnLRNs3SHAOD - QzoQOYF7de4Gud17V1DTuf/wP7nScUOFubF3559+4QxngUOzfhr9DwZV0AgHVZ99/oXcvf9IUNPZd6hG - 5qS8Ic7IOb2EOWtGDWdKtuzmkj300uwVpa9/gOZTae6qqBQ8myjb4RZbeEyjJcBROt0W6rLaw4unBYYU - 2mfMrmNvpJ4ewdFJe+Hnry7o7rvHBV+v/7hUkJtoab8qobOSZarlhfX2iLhjS5d/IBkrsvlLDmPJEvao - GTlXsKmMS9zqApjnZWatkeu3+uSvnn9NlO2skqCwl2tt4bH7N7l26nXmzqgkFxZVUWOcIfSiZ3BU0odc - 0Hay/px03Px7FOuKXBIUOms/zDwn6pr0OnOcsN0ZlVhEjXFmGHpCc0n9BenvZMulzlvyZ1ePiZLySsG7 - /hYn3VpYXKHXmdtnxLmx4CtqjDOEXunLs3F3sS7lwrWbCoT71hYUC3ITJxta1TsIDImOh+ZA2rL3hdjC - Yhr8pwdlsUfNyLkceEFThxt4TWnxXFf8rTab46WEmo8+KRc8m9jwaQXed2I1Trw4IDgqx2oPK8EFb4T+ - KHsj9fSA+Rkf3ynvYUGi0tjWybv2DXBGxjsiEo7kF5XJ7xc6BHWdzdv3yOzk1/lOu3BxN5izZtRwJr+o - VDX3s1jz4ZkCHErD+WsqiCn4xuPsEfHfvbUqV2rPtgnqOvWtV6Xm+G8qzI09ajmjmvtPy4PXQhBCT+XX - 5ss6CD/wIl5H9SspaVLhrhbUx4QaavG1/YLZVWABPTQvRTnV5DGhNZyBITPz8cqaU1KXSeHmXXLgyGn5 - seEPFeassYfDXLTawr7EzNsgmbOax9M4cfbiKBC+IBDEYjgXn9spfKrduIPHBHkPXke9JcBZCs1KkEqt - NsPZZ4H/gVcQPsAC+HMTwCKQAXhSwpw19qihljPm8GZuBDG8yAZCQYQGc9a8Gw+HN9OJMG54G5oIY4ei - /A9dc78cqtG90gAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 - RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL - ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH - s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW - uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx - xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd - iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ - qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW - GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE - NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n - KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw - qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI - HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq - wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q - 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 @@ -4803,6 +4005,804 @@ ++H/A/YDv9/V87iOlrYAAAAASUVORK5CYII= + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjYzQTM5NEY4Mjg0OUU0MTE5NDBEQTc4ODZEQzk5 + N0NGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJGRTU5OEQ1NDlEQjExRTRBRUVDOTkyMjQ5NzEw + REUwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJGRTU5OEQ0NDlEQjExRTRBRUVDOTkyMjQ5NzEw + REUwIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTY0MkI1RjlEQTQ5RTQxMUE0QzNB + MjdEOTJBQzc3QkMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjNBMzk0RjgyODQ5RTQxMTk0MERB + Nzg4NkRDOTk3Q0YiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6B5sF9AAACe0lEQVRIS7WVb2jMcRzHL7UHanF/Mts5prE/1li3kAfu5Ak7 + 5IHNobBkSC2UIuGJkrrSWRvTmHQWK8U1T8jqUtYwkZpaGjV/Js6to5YwfXze39+fu/v23f36hXe9us+f + 7/v9rd/dr3MQ0X/F4Zm3+K9QhWajNNlBFZqN0mQHS6lMdrCUyqSgimllUsy4XmOmp+QRDllQWbygjjq6 + uimZStOX8a+ixox3pXrM1JLCDAqYJmY7c669M0bff07mcLbtEl9QE8k6V6BH5ooXMsHZZX7ae+AY7W45 + SrPm19LbsSR9m/iRA2bYGefggVePzUgKBzeu9sQpmZ4QcG/WMtk7eLjv0WMz0kOz+TX6MUXvP6cFeNbD + bz6YvQFm2Bk9PPByZO6jksLB5KvRTzTyLikIrG2ktsvXzd4g2hGjYP1ms4eHvb850qkl65LCQW/ntVs0 + 9HpMcPx0K1X4V1Ff/3NzhnphbVDsjBk8Lm/VE44s0ZJ1KS4Ie8uXUvPBE7Tn0ElCzTMqrV5BO/cfEaDG + TD5X6PFFONLygsTF7jj1vxihyPkYNTS1iFrFxm37KHIhJmp43L7qZxzp0pJ1SeHhQGgLJQaH6fb9R1QX + 2EB3Ek9FryLe95j8K9eLT/TB0FZcskOP1iRdkIh23aR7Ay9pzaZddKY9Jup8nIpeoXXhZlHD655b85Bj + p2npLOmCML+dD/iTZhaX3+UvbRB1PpzeygFnSUUvatecRUMzisoOc+x0LZ3FixxYhQyK1cxyZhkTYhqY + RgnM6hmcwVl4ljDI0KS4AC+Kmyli8Jv2MF7GNwXY4QzOwgNv5mWTL7CLpVQmO1hKZbKDpVR/1P8OcvwB + lh7gOXXZq9sAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkNDMTJDMTRENEFDOTExRTRCRDk4ODBFRTFERTlG + MzY1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkNDMTJDMTRDNEFDOTExRTRCRDk4ODBFRTFERTlG + MzY1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjYwQjFGREZDNjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4rRYZ8AAACEElEQVRIS2MQltOlCP///x8vxqqJFIzNUGSMVRMpmCDApokU + TBBg04SEpwHxfwJ4GtQo7ACoABfODY3N+P/773+82C88GWRJBtQ4TIBmKAyziCsa/L98/c5/37Ck/3Wt + fVixT2ji//OXr/8XU9T/zy0kzQo1EhVgMRyEm0uqW//vP3Lqv5Cs9ml+CZVp/OLKs/nFleYgY0EZzQt7 + Dh7/n1/eCFLXBjUSFWAxXENZ1/r/g6evgK5P/l/d1IMXe4ck/L//+MV/RW2r/0IyWppQYxEAiwWT+qfN + /7/7wHGQq84BXT9FQEq9S1Bas0VQWqMVFWu2ANWc2LbnyP/eKfNA6qdDjUUANMN9Tex8/j999eG/LzDy + yuo7icIeQfH/n7x8/x+kV0hGOwBqNASgWbBt+frt/7cCXQRko2Cg9xfCXA5io8uv37bv//J124G+0NkF + NJYRYjoQACWR8f97T99gxSA5oHIpECZCHTvIbDCAGgy34MaDF1ixo08k3LWO3hEY8jC9IBporBDEdCAA + CqBYcPnOU4ow1AKQTyEA3YKz1x9RhKEWyEBMBwJ0C05cvocVl9R3o2BsakCYoAWHz9+mCBO0YP/pGzhx + flUHGGOTg2GCFuw+cY0iTNCCHceuUIQJWUBMBYMX80uo7gQai9MCkJAoENsDcQiZGKQXZAYEYLEAlM1B + CkCuIAeD9EKLCgYGAMLPWmGxemtkAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY2MzBBRkRDNEFDOTExRTQ5Q0JEQkU0NDNBNTYy + QTY5IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY2MzBBRkRCNEFDOTExRTQ5Q0JEQkU0NDNBNTYy + QTY5IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjgwQjFGREZDNjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6+q/BOAAABR0lEQVRIS7WVTUvDQBCGe/PoQQQP4s2jv8E/4W/rXxEFQRAp + olCwfjRUJWK1ltJgNJh+6Toz7OCSzrIZFwce2LDzvs8hkDSMMf/K7wFmbWunCRgFTQp6RhKY+ZephSvh + Du7hoWf3AgPT+XcteLcqcUcUlNMFYYNLuPeVXZK4IwqKckZMZgsveO/u8jNKqMiOKHgrJrWQdqsSUTDO + Pwm7LBK6pzIYUTDMPoi8KGvB+4wVrGCfKHge5VFYwTr2iYLHQUbgWYObg6pN7BMFd/0RMczeVXAuKOim + r1EEBVf3LwSeNbg5qPIL2skTkQ7GKjgXFJzfpFEEBa3LBwLPGtwcVPkFJ+0ekcAL08C5oOD4IokiKDg6 + uyXwrMHNQZVfcNi6Jjq9vgrOBQX7p50oQgLtT3+J1Y3tA6iSBXbwS7gL7P0RzNqvqWn8AE4SSnpUkJk6 + AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFGMTBBQzY2NEFDQTExRTRBQTYyQjA5QjRFNjBF + MzcyIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFGMTBBQzY1NEFDQTExRTRBQTYyQjA5QjRFNjBF + MzcyIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6M0EzRTc1RjdDOTRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6CHDkjAAAGmklEQVRIS63VeUzWRx7H8d8mu2uL2nUFDwTEEzDeqNvUAyxY + RBFKtYIcFQ9QFOX04XrggQqycttKEFmPVTxWBQUUPCJUrPA8PA8PaAVpQRBBqAheWEU2Td87P2uy/zRt + NttJXsnM/L4zn8nkl4w05f0l/5ffbL+06H/xm81y3ofGonCF4PU78rCaZ7d07BRrQ/kU7t81t2gHBgZ+ + Ghj4N7+H/v7XP+pqb12aPMfWRdoRm6R81d9Py70HBIWmEa1KJjY+BR+/GFZ7RePm+ZZ3NGvWRuHlE81q + t0jc3CN+5hb+s9XCp+HEqbLpffyUp319P1rOsd0ghSoTVX19L8QGsfx5uB0jxn2Cg/Nm7Jf5YmyxkqGm + HzN4tAsGI50xtXLF0NyZQe8tw2CozJF3Bi/lXQMHDAw+4h1h0KAFpKQc4fHjJ0y2tvGXgqN2xj191sfi + FUEMHe/D4EkRGM6IwX3LAXyDc1jgksTcZYmYzYvBdG40RtMjRV04Q8zCGSozCWOISShDjIOFQAyGrUAR + tY+e3jcBW6XAiPiEnidPsf90B4azgzG2+RJTu1wmfrQf14AzrA/7Fz5hp3DbdpwZLtlMc8rCZNEehltn + MGyWMDOdv8xI5b2pu/nrtAQGm3iiUB3k4aMeEbAoSApQqHbJA3u3aEbPj2eS60ksVuVj7V3ALI8zLAso + xkNRwibVRfxUpSzxPY21ex4TnI5g7niEUUsOMnzxfmZ9vJ9JS7MwnL4JReJRvn/4UA4IkbaExezu/L4b + hzVKzD9MEJufwdKtkKmehby/rogPNhThHHiBdcpSlHsqcNp6lnleJ5my8gSWrscxWX4EIxGy0OMgU51z + GDXb/03Agy45wGaHtDkkOrXtQRdufvE4+mSwMuIyjiHl2GwTAsqZv7UM+8ByXMPL2HlAz85cHSsVl1nk + d56FfsV8sK6QaWsKWBGQj+36E0xYFEJU8jHa2jvlgEjJLygyvbWtA88tiSz3yyY0Q0Nwpp4Nu2rwT6lj + fVIt65LqcI+vYePfa0jNu0N8bi0+O2/gEVuBp+CsuIqP6gpu4ReY6aQkLuMUrW3tcoBS2rA94oumljZU + iemk/6OAvMv3Oa9/iq6jn5MVz9lb2EVGfgd7izr5/GgLSce+41BJKxXf9FBZ34syp5bILC2xOVr8d1/H + xj2RlOx8msWeIiBOWh+gyGpsakGZmEHOsXPUNT/kkv4JuqaX6Dt+4mTlKw6WPxN6OVzezb7SdvKutlN1 + p5eG+33CM7IKGiipukf+V034Kr7g2JkLNDa3YGFtkyD5bAnLvt3YRJgqlcTsU5Sqm2hp64aXPdztfk2B + 7hWHrz0jrbib1MJO9pa0k3PpPifL2jh3vRX1Nx00tj6m6f4TXve/IOvQCS5dLaehsVkO2CV95h+aW3e7 + keS0TNJzTtDaco+XL57T2SM87KP45g+U3v6BE5onHK7o5lRVF3nlLZTrxDXp71HX1EVzaxdtbZ10t3eQ + mbWf/OJSbjU0YjHHNlny3hxyQF9XT3JyKqdPF1ChbaT+2w4uXr+G9nY9+rsvudv1ir7+AXofPed+xyPa + hTvNnejudFCha+RKZQNVVVrq6pvJ2JtNQdF5am81yAFpkqdf0GGN/hafx0WxJy2OC2ePcOWrIhISnElQ + OVOmuUHhlRIqr+VTrlGj0aup0lSi1l2mtuYy2opznDudRvHRML69dZEohS95B5LQ1d6WAzKlNb6BR6u0 + dbiucsRliTl+PlasXzeXiOBFRO6Yj6/fTMK2z2Rf5EQK9thyMMGOndGOHP1yMedybTme68bhhBnigCsI + VTrg7TWfjF1hVNfUyQF7JfcN2499rdazKyUVFzsrFtpb4GA/G1ubsbg4GWNra8zaVWZ85jKOzK0mKD2M + 8Vo9lo1elvivtcJz9WS8nMbiu3I8DsvNcP7kbxScLeZrdY38m2ZLS1y9DpVdV1NWUcX1GxoqNdXiCnSo + NVpBR7W2Bk11zZu+TivP68T4v6oFea5SLdOiv1kvTn+TM4UlzybNXpAqWcyx2ei9Kbg0KDJeHRgRqwmO + jNMGR8bXhLwl+nqh9lfo39bVhETF64Ki4rTbFDHVE2fO/6fppOle0h//NMhg9Dgru9HmlhtHmE7cbmQy + IdRozHiF0ZhxUYbG5tGCUogVVMONzeNkcv+tGEGuiRb14UYmYp3JhJARZhMDho0cs1w8+RPkd/8PwrvC + MGGkMFowFkzeMhXMhLG/QJ6Xv8t1YwR57ShB3me4JElD/wNGauB2a7BHHAAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjg2NjBEMzE2NEFGRTExRTQ4NTY1QzE4RjMzMkM0 + NEY4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjg2NjBEMzE1NEFGRTExRTQ4NTY1QzE4RjMzMkM0 + NEY4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTU5NUNEQTdGQTRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz5BZhOvAAAD9ElEQVRIS7WWe0xbZRiH95+T6DQxcc7NLfrHTBaR4NyFmDAy + ljFwwERGpmRxxmyY6QbqgogDhqluOpFLlm6AFslGRVlXKISVS7tByzgUOF1vtLUtLVBogQ4YsLoN9ec5 + 3+xXyIiJWdrkyfed9/u979PLSdsVz6wPfyQA/Cehf3DPQsiBECHkBVj4CyGBn00E9xb+DglU4L/35xIM + 7j78qCpAlVqAg6KNkOtqMTPnx9TcLOzjFty5u4CJWR9u++/AM+NBh7WRnM3/cX/JHCqY899fwu35u/BN + z2HM60NcURjB7hwmNX4/PjmNWzPzZL/v3FPIEK9DQskTNOudmML0rD8oiD0d9hAutxej4z6yZ3pZaA0D + ZO8c8dDM8d9egtSxGxetMTiri8Ih8XpS79cZ4fZOBgVu7y2YrINg9QOIPvU4QcPqyWp1DJM6vwbOUivW + QGSMgdi8E7mqSGQqIpAoXE3OmuRtuKHRwjU6HhQMe6dgG/LA4hhBVM5KJJatJmsPa8TNARup8xm+1tnd + R9bkc88hicsllnGrcC2p1Te1QKliYLQ6SZ4KhriLYe80oaa9Ghk/JEMkqYJS3Q0DF3a4J7D9s1V4s2QN + Nmc+hviTLyOvIgv55SeQe/4YUgu3QlRXjbbrN6A12TDoniSzqMDh9lEszjEoGQbF4u/wa+tlmOxu2Ecm + 0dglR86FjxEteBZx2Zsgab4KhaoH17lXJFO04nKLDCrus+L7A7OowOLyUsxODwy2EaTm78BrWU/io6KD + YE126KxDaFDKEZ4Rhg8E+1HbKAOjNZP6TYsL0mtNaFYrUCmrAGu2YWBwLCgw2Ecf4qeGakRmPo203D1Q + dPWjz8TdBGYX0guSIK5vgLyDQa/BDr3NTdAYrYg68iI2HliJiitV6DM6ggLWwt0p/8J9PeFMsRDnJSLE + H38DsXEJSEhKAaOzod88hMjXt+KTz/PQ2WtCLyfl8wE2RbyKkyWFqJLUQdqu4ASvPBBojE4KH9wVtxel + v5Tj5zopuU5MSQOjt6NG0swJtmHtCxtwrUePHsMDQaA3J/9rfJpTgDY1CwWjDwq6dHYK37BzdwJqZe3I + E3yP9ENHsG//u+TsvcNH8dXZMryVlo4ioYjmA73ZnCA7T4BO1gqV1hp8izr6f6fwDafOlKLgdAlidsXj + 29JKJHOCFrWOnAXga4F8gIjN21Df1k1nUYFSY6bwwUvSVjy/bgN2cILKmnokvf0O8r8pRvr7H5JMcwdL + zvkcn1/cvxgqaGVMFL6BX6Nj9+BLQREuXLyCvSkHEB65BcXll2ju8LETyPqikOaXgwqudhlCQkAQ8p/M + R2K5fxKLWbbp/7Dc0CBY8Q+pPmOq0VkzzQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjIxNUQ2NkYyNEQyRDExRTQ5N0NDRjdBNTBDQjc0 + MUY3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjIxNUQ2NkYxNEQyRDExRTQ5N0NDRjdBNTBDQjc0 + MUY3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkU1NUY4OTYyQTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4lOJsMAAADqUlEQVRIS6WTf0hVdxjGj2beulPvD52aU6Np6tKBhUWsYjIH + prDYSlZjNPsjlUnkMmSx6eJqS/u5zXGtoKKEMaEt2lpZ20RX01Bjad31A8UakdZ0SyrLJfHueU7H0zl6 + U8QXPvCe933e5/3e8z1XCY5+dVKIyJh4HZoI48bQE5kU44a3ISM45TxQCTxgQIM5a/M0m+eHN1OC4TfB + 96mZ78reg9+I50qn3HvwSIU5a+xBcwyka3ajY3DoySgwUJ44P02O/vSz4HlMfqitk7mLlnLRNs3SHAOD + QzoQOYF7de4Gud17V1DTuf/wP7nScUOFubF3559+4QxngUOzfhr9DwZV0AgHVZ99/oXcvf9IUNPZd6hG + 5qS8Ic7IOb2EOWtGDWdKtuzmkj300uwVpa9/gOZTae6qqBQ8myjb4RZbeEyjJcBROt0W6rLaw4unBYYU + 2mfMrmNvpJ4ewdFJe+Hnry7o7rvHBV+v/7hUkJtoab8qobOSZarlhfX2iLhjS5d/IBkrsvlLDmPJEvao + GTlXsKmMS9zqApjnZWatkeu3+uSvnn9NlO2skqCwl2tt4bH7N7l26nXmzqgkFxZVUWOcIfSiZ3BU0odc + 0Hay/px03Px7FOuKXBIUOms/zDwn6pr0OnOcsN0ZlVhEjXFmGHpCc0n9BenvZMulzlvyZ1ePiZLySsG7 + /hYn3VpYXKHXmdtnxLmx4CtqjDOEXunLs3F3sS7lwrWbCoT71hYUC3ITJxta1TsIDImOh+ZA2rL3hdjC + Yhr8pwdlsUfNyLkceEFThxt4TWnxXFf8rTab46WEmo8+KRc8m9jwaQXed2I1Trw4IDgqx2oPK8EFb4T+ + KHsj9fSA+Rkf3ynvYUGi0tjWybv2DXBGxjsiEo7kF5XJ7xc6BHWdzdv3yOzk1/lOu3BxN5izZtRwJr+o + VDX3s1jz4ZkCHErD+WsqiCn4xuPsEfHfvbUqV2rPtgnqOvWtV6Xm+G8qzI09ajmjmvtPy4PXQhBCT+XX + 5ss6CD/wIl5H9SspaVLhrhbUx4QaavG1/YLZVWABPTQvRTnV5DGhNZyBITPz8cqaU1KXSeHmXXLgyGn5 + seEPFeassYfDXLTawr7EzNsgmbOax9M4cfbiKBC+IBDEYjgXn9spfKrduIPHBHkPXke9JcBZCs1KkEqt + NsPZZ4H/gVcQPsAC+HMTwCKQAXhSwpw19qihljPm8GZuBDG8yAZCQYQGc9a8Gw+HN9OJMG54G5oIY4ei + /A9dc78cqtG90gAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 + RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL + ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH + s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW + uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx + xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd + iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ + qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW + GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE + NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n + KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw + qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI + HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq + wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q + 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlDMzFEOUI4NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 + NEI4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlDMzFEOUI3NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 + NEI4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDk5Mzk2NTZBRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz73sIMwAAADIElEQVRIS7WVa0iTYRTH56Uiysvm3TkvpLl5DRIvQYWVWl+6 + iNEVg0yhQqloQZHkLT+Y0YdAs75IpEUhzERZoZhsRpZlS7soblotsRwoxhqWeTrnYZtv+u7NsB74cZ5z + zv89/z17HzYRAPxXeIv/EpFXcOyi4BvKhfehv4FvKBfeh+ayqIUDlIgBgT8whpRYoT2fhgvNVJKBQT9s + hB8/QZDPpnEIjEhg0J5Pw4Vm0mwygG9T06BSqQQhTUhUMoRGpyxYT7OZwfhXC6jVakFIYzNYqN5uMGKa + BI1GIwhpghXJaJJi13d0dEB2bj74hsWzSDlXbzfQG02g0+kEIU2wIomdovzKdVifngnFFytBeb4cLN+n + WaSc6hfKKqB/eHTWoHfwExgMBkFII5MnQUD4WlAWloO26wVs35MDmifPmQFFyqlO/aKKqlmDp31DYDKZ + BCGNTJ4IPqHx8LJvACbNUw7p6e2HuJQMNIhhBuaHj3vBYrEI0tb1BoIiE9kJ9h7Oh7EJM+g/jEJuwVlY + s24ri5RTnfo5BedAIoueIYPumvomuHzjzm9cq2uCq7UNUH2rEarr7kNd0yP26Y+eKoSWtk4wfpmAg7kn + ITY5DUorq1g8cOQEqze3aplOEhRtJoMcL1mMTixV9IgD5a/tSBVDYql8AKOBQLEJtTP08gY/jjFiktKg + 5FIV21Ok3NazvmR2AvrFkCAJyGYk1comZAuHDM/AyLvHThfBveZ26NOPwI59eey7LsbhFCmnOvVJ5+Ef + rrYZLEU8EZ85+HLwW7ZCLMVTFWdkHoLut+/hgbYHaE9XN31XNsupTrWV3jKVs+uS3cyAD0cLe331jW3Q + qRt0CPUlQVHDKI+fN9iGo4W90uNnyuA2vvRtWTlQgxeg/dk7FimnOvU9/CNqUe47b7ANRwt7AfjpKvAK + Gt18Qur35ymhRfsKKLr5hN7EyzDq7humWrrcfSfKxbz/QlwcLDck1snZJdUzYHUDmk57+K1qdXJyzsL6 + RmQD9ZmObygXB8sVIRO6fXQB4hC6eRQppzr1XXmHclnAckFomLc1Um5dItEvhZ97MQXP9N0AAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhDMTdBQjRENEFBRTExRTQ4QjQyODY0MDNBNTJE + NzNCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhDMTdBQjRDNEFBRTExRTQ4QjQyODY0MDNBNTJE + NzNCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NUQyMjc4QTlBQjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4eHsDfAAAB00lEQVRIS7XVWytEURQH8HniTTNHLs0NCXNcXjTN5dH9g/gM + 3jx590QhFDJS0gyTGmpqaqJIMW4hzlAoOaWISS7LWifntI3ddnTGrl92e/57/We/DBsA/CvuYSHZSr0t + lvCGsriX/oI3lMW9lM/SwgF9SEHwizs08IX2vAyLZvZRgXJ+cQWv7yB0q96Ds86voT0vw6KZNJsK4Pnl + DWKxmBBlqhpDUN0UNp2n2VrB/WMOEomEEGX0ArN5o+BGfYB0Oi1EGa8cwpKw6bxRcH6lQiaTEaKMVw5q + rzCbNwr2z65BURQhynh8Qe0VZvNGwdZBFlRVFaKMxxfQXmE2rxc8rW3sQy6XE0puHoG7IaC9YnV9j5th + pbZPqOCDCrbH5uIwOD7/zWgkDkNTizAyuwQjkWWIxFNQWduqmVxI/MiPz6/A8HTUuDMTTYLkbrqhgt5S + T3PG4ZJ3HE7focElZx0u3yn+VQiG1ZLymmm7s74f88f42S6bl9zyJZ6d6Xckd+Mt5ieogH4xJORHHajt + SzvqZPSgECpHZSiA2DztuxBlad+NgnpBEbIjusiiYboKRF+kGFHegUR5ImkFv7G0eAPzWVq8gfksLd5/ + oULiHhYS97BwwPYJlSCUgVubViQAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJEMDQyOEZBNEFEMjExRTRBN0MxRDBCNzJGRUND + MDEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJEMDQyOEY5NEFEMjExRTRBN0MxRDBCNzJGRUND + MDEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkRDRkI1RDVEMTRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz59jfe3AAAEbUlEQVRIS8WTeUybZRzHF48/pnFOuQRajkFLgQFb5iRLNJr4 + l/EPgsniUI4xZDAY1zyxwApsMJyIME61rByl3DfoYGBrgbWUY06FcZSCha4rQ8jYxkqPr2/fvkv8o2Sg + S/wkT970eb6/T5/39z7Prv8dt/Oql4mR4HZJ3ccoXFxhVCzB9DT9JueJdSq6c1wzVZFupepVzxu34XVj + CaEDi1jX6hF8ZQoeokl4iBVwzV9YdU1XRlIl28eVo8phCdXwGltEeOUsro6psaHVwcSDh5volc4iOO8X + 7KuVwb1hEi7J8myq9PEQO//I85oafr0KtEpUpNSETm+AwWDAvfv3YTQaybnm/t/AyO6Ga+UonJOnIijF + 1hA9tWI2qle9RxcI+RIpmZpTIfBULhIyyqHVahHPKcN70TmYnFFCp9OhqXcc9KwW0DOHVl3YU1aUyjJu + F1SpfhO3EM6bMMsVt+D8Zhz2HIpC4oU6bG5uIu4cD3tfTwAjIBNypQYbGxsISquBU34PaDHiVEplGXee + SuIjVaBv3Lz7gJg8vHg4FlZvc+ATVoLipiHsD8qCXWAO7IPK8MG5FjLXKboOeoYADkldUkplGWb7vOb4 + 4BzxIXXQE/1m59WDXdgBvxPfwz6UC4eQUth/WIBDZ2qQXj+K7IYRImeE5s5fOFrcDPvPapcJzVNmmwVY + VxWG9U09uau1tTVymPpc0iYFLew7OEUJ4BwtALfvJpl5xMrKCu6s3cUrn5YbCM1us80CrJZZVWjXr7j3 + 4CE0y8v4IrcaH+cK4Bv+DRyPl8ApphYuia3wZ3eCUzOA1PIfcVuzjHnlIgK/vgy7mHzTG+w12yzA5E53 + edYPo1c2i/X1dQTEfwvbwDQ4hhXg8OcN4P48Df+UTrgkNIAeW4Hg3Hbo9Xq0iGSgs4ls5CUhoXnObLOA + S8pkhG/bdZzgDZJnffT3GXieLAA9XgB2/RjZjuQqMWhxfBw824H55XWyhcfy+HDNqoB1SH4Codn6G7iw + p3d78EaVPlXX0CaZgkqlgly1gpCiK0htHCH/IL6oFcEF3ZjT3CUvXqv0DzDSS0FPq1a/8EbYS5Rqa+if + SAJ8KoeNR7gitEsnoVQqSbGOkJmYX1ggxaY70SabwIGMUrjn8I3WIXnBRPnWu/8nDnE9Sd7cAaP/ZSES + 6/rRKJRArpiHXC7HzekZNIukiCyrhW9mGZgXa4w2kUVnibJnzdXbxP5URzyDO4QjxGl5i9uNpMZeKP5U + IrywAq9yCnGAOGGMonbYxpVnEPGdyR9BO/MTj8kfgXeNFPt5IngVtoF1kQ9WcTs8qgfgmNreQMS21xZL + 0E6Ln6ef75tg8sfgXT8O77oReAkkYNXJ4PRV/4ztyfo9VPTf4xjdf9CpQKzdxxuGe6UMbhXEmc8V6mze + r3qNivx3HGN7UmglQ6CVDMIxXwybo5UcaunJQD8te9rhyx4JrWwItlGNUut3y5+hlp4cDhFCpl14k9jq + nR+Y1NTjIe7NlmMnWKoHsOtvjWYcKpheqFQAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERTg4QTFENEQyMjExRTRBODEyODk0M0RBMTc5 + Qjg3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERTg4QTFDNEQyMjExRTRBODEyODk0M0RBMTc5 + Qjg3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjJGOUEyRDEyMTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6wJF34AAACl0lEQVRIS62Vy08TURSH73/QhQtXVnBhxEcMiUkhbEg0hB1R + Q1i68C8wIW5cEqMLN7ho2Ji4YiEhWq0prYUhfULbadN3obTaChobtZEUsFY9nnPS6WM6HYowyZf87j33 + nG/amaai9geOBYA+4pTxihmBE8DcTQB4J8em/9IwSQyagmrtL+z9rMFmvnhkKvtV7tcVHPz6DVsftulA + AckdhUg8zf19eoLKAd597iMLMItewfOxUDTN/bqCH3tVSG8VWIBZ9AoJApEk9+sKvu/uQ2IjzwJkGtH8 + OrTwy3Hu77vIAnV9mgWlcgWiqRwLjAMmkOMbPbNTKnN/JJntqJGEBZ++7oKcyLLgLN4JrU8Cms2C4pcy + BKKZumCI18temQ/8DzSLZlBmQX7nG/jCKdpgAa0driCtY5iFHuqHSjNoFtaags1iCdzBBG+QgNY2aZ0F + mIUe6osENAtrTUEq/7kDq9PHAszU5yYoq9f1i9cUSCD5ozxDEeTsrhAoONwyxLLb8MrhYQFmZYCHsnpd + v3hNgQROb5hnKIK29944MAThTBEWbS4WYBZ6qC/sKSy5ZJ6BGUQg8b4Bbhjod4AZXlhXWdBa10LrIVul + AM9ggS+aa6AIMMO8ZYUO0KeyIOMtZyaQpXpNi4LFucYzMINwhbMNcMNw5oIJMMNKIA0LNg88mZuH/ssj + dPgBMnN+cBRmny1wrRtSMMMzWCCFMg0UAeY2Fh0+GL5xG8Zu3oHXUrCj3g0WONdTbeBm21/o1N17gPtg + 98Xh3VoS3qzKMDI22agfglnY/Uld8NDc/ZlZwAwvl4Ngun6LGh8rdfVDViNs3rguOOzq6XOD8PDpc7g2 + OkHDH7XWtYa2It66Y4eCQ8cRfpvUNa2hTUD8A6JMaBvCyTdJAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERjY3MEZENEQyMzExRTRCNDlGQUMwMzk0OTAw + Qzc4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERjY3MEZDNEQyMzExRTRCNDlGQUMwMzk0OTAw + Qzc4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjhGOUEyRDEyMTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6GKmpFAAAC+UlEQVRIS63T20vTYRzH8Yforj/Ei24UiSgKIygKi8oyxZQo + cvNYeXaesmzqPGu2POd0ulSsnIdaurTSTJ3O6UxTPGya5vCQx5AuPn39RbHop7nZxQt+z3ie93e/Z4w1 + p7nsCoBt8R6yBF/UHPv+Wb0rfFFzm99CRIwEW1gnqXzxTXxRc0ydctm4OlID2sxrw6iCtiwItC+A2P/D + frLnjwGNSZdMq6N1WOvLwFpP4l/WdRlY6Jaio9Ab7QXba8sVoDHZGdT8PYS9THDqMGnLsKpNw0qXGCua + BO55VZdNQ6U/DRRibVCGb+N1pH5bukoRqHmDHOIG1N8/X2F4I8WyNhtf2+9hqSsZxqZ4upbb6HsSZLHO + Im90ym6hNVcIaktYTexZyUelGEvaHMy/jcFiZxo0xX5Y7ivGcn8JkVmA9uvlWBmqwpJeAWovs+poR99O + eRgWtQWYVUdgrj0FH+i+F3XF3NoappZYGJrEoLaOVYpOOTY/FGJB+xjTqnDMtMTTAC/Ma/Ix/TLUKl9e + x0JfFQpql7PykBP7lWIXzPeUYLIhHCPKCLr/AMy2ZsKoDLTKdNNdvM8TgNpRTBZwfJ885CTmaIChPhwa + mS+GnkdhqjEWY9X+VplqvIMXEhdQ24mZeuSs0N/BNNWWj4k6EdSZHhhXxWH0aSCGFd4c4Tk7zk7XBlUM + FKLToK4Nm+0qYnneRzqGGiSYaIiiyZdhVCdgqFSIwRJPjucZW85O1pvnRmvDkO9zFNTdy2Y6HjGp4HCF + 5kk4xhoiURd/EROv4tBfeM0qAyUC9Mp9QM0+7o829T6LZV0/mNycS6+nFKFWfAGj9ZHozfGwil7miZYH + 7qCmghsw+S6VpV894KuUuKFbfhNNqa749CwY3dm0toK+VABl3HlQM5obYHybwFLc7W1y/Y5BlX6FfgNn + DNcEY0DhZZX+MiGKbh0DNR24AYYWMSfJzc6GZBApwS5skIzNODcg0dV2V36FtsJ7yBJ8UXO8hyzBFzXH + ++H/A/YDv9/V87iOlrYAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 + RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL + ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH + s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW + uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx + xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd + iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ + qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW + GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE + NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n + KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw + qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI + HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq + wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q + 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA3MTZBNTkzNEEwMjExRTRBQjdERDhBQkEzMDEx + MzZEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA3MTZBNTkyNEEwMjExRTRBQjdERDhBQkEzMDEx + MzZEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTgxNjM4Q0YwMTRBRTQxMTk2M0JC + NEQ0MzNCOUIxQzgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + 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 + 0HWhD93n++Dbua+fK9NvoTM5+Udx5mye9NjgCZNf0HEnpN5U5RbPa9+0bdfQ+0eOPzp5ppvG96JfjFkM + nXR/vOP0ePOu/deyCuf8JVSorJny7HQdvR9MTCUm+fUYgyehazLBVCCd8ttpJbQANtO3cDjWbO9werzd + ruK5F9Ld3p7YBEdHCE/WMi0s0jf5mefm0e+ZCsXEf85i/98XsP4NaTpxka74X+IAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJBREU3RDk2NEFCMDExRTQ4OUM5QjZFOENGQzJF + MDk1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJBREU3RDk1NEFCMDExRTQ4OUM5QjZFOENGQzJF + MDk1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MEM5Mzk2NTZBRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz52g1XsAAADeUlEQVRIS62Va0hTYRiAXzVNoQs6oUCttJu3aqatrLxr2k0n + W6bLLlLSxTKCKLoQQUg3IbLMflSgBRGRP7JSSzGnWalYdpnV1MQu1tBWWklqvr3fp2dsOytSfOFh3/l2 + eJ7tnDMGkkmzGCqigsARhPlUQqCi8nEd9v7GEYP5mFcI4K/e/hGHeQ2B7p4+1HV8Nf6Kw4a5GGxtCHzv + 7sU2nR4lbr4/AUBFKIeD4GKYBL79+IX6rm622U8nSgnX4SC4GCaBL50/OXwTwIUY1ohcQkCn/84ZDLBP + I5p16TBl7XYIoaXVwI54RC4h8LG9k/OvQPIOmEZUJW2F+XRoPbBrOiKXEGj9rOdYCqi2gxXhnLQNIo6f + n9tEa7ViI79PoojIJQSaP3RwjAOJaSAjjhL3N+9zrD+W499UVJnSeeVmWDvtlcWlgCedZnK5RC4h8KZV + x2FryQSYmrAVjh/MnP46/57yS7VmZ9+zxr1Yr92NtQ1pWFmfiBevL9QpUqE0JhHcyWuImLsMAU1zG4et + V6yHC1l5oe+evNmD1ZoteL9OgaW1K7GkRoF3H8ZigTocb5bFY8bZWbpoFVwh7yiCR8xdhsAz7XuOh9QD + D2R6twyIEzG/JApz88N7z+T5d+VcDezKL43Ea4UxeCjTqyNUDpUBYeBFXjvjgOAyCdS9asXDJ3NQFj3u + 7eWCyG/FjxR45OyMr6s3S1qCYqE8RA654Uq4dOiUV/v+E9P0i1ZA9Zwg8COnA2HyDZiLYRw4dyAjC50n + z8awBBvNbbWyZ+8x10+By+GONARCbe1gDBPJloCvfKODluQ10mD+qDK5LWFyD6pfvOUYBzydXL0v2I+V + rI9Mhud5BQE9i+RQPt2P30BBYrM4HmYSNf5REGS0b5CzYdKq+iaOITA44wmPiLXwaFfGhDbZMkinYxNJ + 8CpwXxgHobQcPbhv8XegrtNyzAPsOtqHJUPeml1jm/1jYDkdM5G5hB3bDL6KhknLal9xzAN8gpMgVZHm + oKUAuwx29H420c9O/l9KHms4bC0KLFCAY6CSHr+VoHJy88lWbEjHoqoXWPzw5ZCxGKCxkslBLo22L1+6 + ahPeUj/FwgfPh8zpSzfQ0cWrwVKAjfXcWFjjPm9isWSSbx/7JEPF0cWzcYzE7dTfAmysfSLB2z0Awm1H + 8ycnjrD4N/kX4gEg8A9sAFSe4VuPvgAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkEzN0Y5NjgxNEE5MDExRTRBMzU1RUM1MkVEQTU3 + REQxIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkEzN0Y5NjgwNEE5MDExRTRBMzU1RUM1MkVEQTU3 + REQxIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MUU1QUVCQUI4RjRBRTQxMUI2QTlC + RjEwMkVGQzEyNEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4Oz1B+AAABO0lEQVRIS7WUP0sDQRDFt0snIcEiklhGJLH3k6bNp0ifYCUo + KWwMIRCx0EYxEEL+IOPO4SxzczN7d7gGfuzd7Hszd9nHOQD4V9RiStRiStQi0b68GXkgwkjzcdQigU1O + 32CC+9IjUYsENvjY7EySDHhev5skGXA3X5r8aYA3lx0wET1otYgmNMcOku+jXtMg4QJFJMb1a7uPmjUd + rVzHDfDy9pmJaZViCe5rPq7hYpgvXjPw2hNtTqBOevk+F8L0YRGQQosyHxfSf0jUegPLZwkrNedYfi6o + 9Y2RWP6cACPHYnf4XauQablfHYAxo6jt9sfwRGWgVvrVASKmdd7g2OoN4P5pVYhqbgCPmnPuzHPtua1C + s9OHyeyxEFU+IJcCb2p4zj3dKjQvrsat3jD4CwNCIcEv14/fpAfcDwXsled4Tu6+AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlGMEQ1RDBCNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 + MzBCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlGMEQ1RDBBNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 + MzBCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzFDMDRERTRENjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6zemTaAAABh0lEQVRIS7WUvUoDQRSFEwiBKPEHsRAkb+ArWIsv4CNYCSKI + jRD8a1S0m9QhdTobG5uARZogBJSkiLASFJJChQiRcJ2z2bnMZtbxCnrhY3YO556z1aSI6F9JFP+SRBEs + FFaUhoSopAyQKGIBi58jEuErcQSAhY/hyP5DL8Y7mQMcAcD8Phh+u2Tzk9cRAMz914G4wOd1BABzt/cm + LvB5HQHA3On2xQU+ryMAmB8en8UFPq8jAJjvWk/iAp/XEQDM9WZHXODzOgKAudZoiwt8XkcAMN/U78Ml + CcY7mQMcAWhz+FRc3zZFREXypwKYEiG/e+ykc1WYVRrCGUk8nGUHsyic6nKeetUK4dTESjjLDjZUlqaV + hiS8lEsh0Z1LTFYs2FBazFFwcUzB+YE+T8bffD+i4LRIwSV0jdZaO5vhHXtRPmfFgg1n81mlIQnt/W1q + bKyH34dz2XKUz1mxYBaFU5zJUG1tlXDu5TMcjuEsO5hF4exOpZWGtnLpWDiGs+xgFv9gxlmU+gIVyyIX + YCSg/AAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6npMy1AAAGEUlEQVRIS7WVeVDUZRjHf7Ase8ECu+wl4LIXcqyyHC783AWW + 5QaRFTHkMi9SQvE+UhLzwk0BUcQSgQBBgcYDzStMSzOPcpqcmo5pmqk/+rOapqb+iG/PbzfFcSz/6pn5 + zPN739/7fp/nvZn/3TSLjj+XJy2/RaItPCT5vaBd8m1+q2Qku1lcrcvki+iXr7fFU6ZZeOx5KDU1b7jU + 1Z2bVPMPWNMbRXrXkWAc+ywVLbcS8fKwFjlu8VdpW0XzSc6f8PEIPzJ19dFnU3WEJdHL9P3X9O1nkdB8 + CQrX7i3mKn9zfqsUq29ZsPfjRBx5aMO2cTMy94gm7FuF7XyJTwDJTo5GVdHxNALVgsPd5Ceye+9g8b0f + UXbjB8RtH4Msd+MeXS7f6twjxbILZiy7pEHDtTBsvG7BqivTUXpsClLWCbtJNpDwBlGVH3ySIFV520eW + nedRcf0HVJGwbeRrOHs/h2n1CGRZDe7wND/W1hiI8sEYlJ4KRcVpJcrfVqByNBILhqLh3KeA+UXBOpL2 + jkRZduARPGXZ/vH4pnMou/gd7INfIPn4QyQc/RSOzk9hrBtEiKPerUn1Y5PXBaDojWlwdgUjr0+G/H4Z + cnpCUNJrQNZ+LeLrBD/LYnixFEDAKFz7vJQ0r49dO4zikS8x8/ADxLd9jIT2B5ix/z7SX78Pw+K3EJy2 + wq1M4rEz6sRwthgw82Ag2KNS2I5JPZ4rZx00ImGNHIZSfisFkDGhxbs5AkKLd/3kaLkDlgTjXrsNc/Md + mPfeQeyOD2HbcRu6yi4E2Wrd8ngeG71IBPtePWa4JUhsD0DykQAkHQqApUWCFLcGyZvDoZ/P/5oCTGXk + hU2MvGB7rbGmG47dd2Fa+x6iX/kAMa/eQvS2m4jaeAPspvcROb8TQexid3CcL2usFCJjnwE5nQYU9RhR + PGDC7D4TCrqMyDqkR9oePbRz/SZEKh8rI8vdyshyXhmzLD8DS/1VGOquwtgw7glkXH0Nhvp3kbL2GrSl + hyC11ril03xZfbkQKZuVsDeq4NihRtYuDbJ2auBoUsO2TQXrJiWMlWIExflWMiHOjRzfJy0bg776HCKX + vANd7WXol1/xeN3Si7A2XIXW1YbAxAq3UO0zPTSd1yG38bplLK//vxBrffKY4PQ1HH9aKk8jonQUUyvO + Qlt9HtqaCx4/tXIMyXWXMXXOAQTEv+D2zCvDhBBTCN1zCGOCZq3k+DXO1YcpRYOY4hpF2LzTCCs74/VE + 3IvnEVd1EhGFblBbWot6BKXWQZq64tlYa2+TuJwQM9KU5cRL35hyOxCe2w913hA0hcPQFI16KRzxEFtO + a1Q9htSVN5C+5S5x7x/uIm3DR7CvuomUReOImt1FU7nwEolHECImMGkJE5i46EJkejNM+X1QOPqhzBqC + KvskVDmnJuHKT/K4bgjKzBMItXcjJv84NOwWiKPndJK40TOCgPgaRmIur1dZ1yM6txvyWT0ITR+AImOQ + gg39N1ybDBJP60PorC5My3oTwQm18FdNryBxbq0EJL6AEUTYZBTkF0NGKyKdvZDb3qJOAxSIOqcP/jtp + JyC3D1BSvYgp6EN4aiNlP/cTEk4gFASPEUeXkWd8RaY5jcrEBkTn9UCT4Q3gzfBfRvJE9rrsfpicHSRe + NsFXmJeSXhTBXXY+jMjk8uArVkpExuKb6pkbYJ7L7Ria37xTUBeMeCkcncRTN0z/TyLKNYy4khNQJq2G + IMLBXdUWQkXwCYYR6md7IPP1k8WEC3UFDzSpG2BZeAZJtXQWFpyls3HOC50JzkdQnbFqDInLLiC2rBcq + 6xoSzzzP+NDVwDBaQkx4XzahNv8xZH48sVotCHeOUnnCWNJG18Q4UjddB7vlfbBbPwC7+YannLTyIrS5 + OyHU5v3hr07poL7JBHe4Jh8bzgQROY8h46IKCAVfbi73D3PcpfoJlX0VtEVN0JXsQlj2ZoRaaynj7N/8 + NfZLPLFmHrXnpiWSCCL8iMl32T/M6YGMq+R+covD7QADwfoIgqt4QVGtfvIZJ4lRv5CY4zypbjfjy+eE + M4l4gtuSwYSQ4DS4EZAew/wNiCYQJlvQU3cAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVGNUQ0RjNENEQyRDExRTRBQ0ZFOEVGNkU4Rjcw + RkEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVGNUQ0RjNDNEQyRDExRTRBQ0ZFOEVGNkU4Rjcw + RkEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzUxNUY0MjEyRDRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz7jldwbAAAEyklEQVRIS6WWDUzUdRjHoeXWVktIc74MLREMUxBQV4RYkBmL + SBwSoZIFCgULlOJFDJDxqkiAqGgoiIQ6jaFLB1EqUaC8iMgdL8cJB3fHwR13HO8Hh3x7fn+pwN01nM/2 + 2X77Pb/n+33+v/3/95zBbGOVnZM58QHhRKwgnp9KPXuQ2CtJ6ScOjGo0fcMjI93llVX55us3rqbUc49P + zDLyw9auL4iw5l+IsMY//BRujcygdcg+ug83rpzCsVhf3C6+hHg/W+R++985BtU3pey1cCCpOYQhJzo9 + 8kPX1tZcDoS0Jp2jrCgWmakhOJMVA4GwBd1KNSQ9veiUdeNifjqyMsJxveD7f8+z2rPBlg0kNZ9gJjMj + L8RqQlSegIbLX6CuYAcOBm9FHe8B2rt70SZTgNfehTphJ+paCaEYjSIJkmP24PaPnrhfsBP8okCcCbZ8 + RFLmxIuc6PTICV5Dh4IxNqSEemAA6adzwBdJ8VeDEL/XNqGkmo/iKh4HW5fWNCL7QiEqq2sw3N+Dijwf + nPx6FUjKkpjLiU6P7MDVqL/gj8nJSY4bpbcQnZyK8EOJCI2Ox3dRcY+JjkNYTAIi4w4j7+JlKBQKjI+P + 42qqJ9J832AGawkjTnR6ZPm/iXvn9+ARiWsnJjCu1YLeGshJQCKVolMs5hBLJOiSydAjl0OpUmFweBhj + ZJAfuxVJ3ub6DTJ9LVCd40Pij6AZ01IRoWVGumE5dmZEM45RjRbnolwR72Wm3yDt85W4e2o3FVLnGg1G + xsYwSvDEdxB03gEa6vJwSopOhkZHkRPhgkPbTfUbpOwwR+XxXdT9OM79EQ/lgBLNkjpsz1iMP5t/oU7H + dIoz+oeGcTbUGVHblus3SPJYgfI0LxLSIPmaL4LyHOB5bClK6gswNDLKoUucoezvx+n9W3Dg49f0G8S5 + LUfZEU8MkpC8T43YQi8UVp3kutOFenAIvep+dClUkClVOPXNZoQ6L9NvEE3uN+PdMUBvRXevCgqVmjob + gGpgEH1PwPZYTq7soy9bDolcgRNfOWL/ZhP9BpEfLsVvMW70kQ1C2qMgEyVnUiUoQ2CuPZTUra7rYYi6 + ZDi+910EvbdEv0GYkwlKIj+BijrL+jUKbdJO1LZWwD19EUrrr0Cu6tMpzhCKJcj40gEB9ov1G4RsWoLi + UBe6V7r/n70RkPMOPDJMcLXqLPc0DF3ijBaRCOneG+H31kL9BkF2i3B9nzN1qoagQ4yDlzxQUE6/lHRd + XfLeGbA9cbccwk4JHggegi8UIc3LDj7rFug3CNiwENcCt6CH3ojm9g7qqoN79HZpF9rpjjumYGu2x3I8 + 4UNU85pwv0WAox5vY7f1/xj42SxAkf/7kCmUuNfUiho+FTa3gtfaRh22o6lNxMHWbI/lKut5uFVdh7sN + jTiybQN2rpmv18DQ1+rViUJfRwia+bjXLEB1YxNqyai+VUiditDY1sHB1myP5e408FFR34Cb5WVIdLXF + Zxbz2DywJYw51WkxZ9eqebxUFyvk7rDHD24bkOhig4RZEM/4yAZhm1Ziq6lRG2mxscmm2owwdF72suOn + ZkZCTzNjuJsaYdtT4vr63E4L4xcCSYv9IXiJU30i2BxlzmzkWRHsLp8GVsNqp2aygcHfZtZtYIryU78A + AAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkUzNzJDMjE3NEFENjExRTRCNjE0OEVEQzI4MEM0 + RTZDIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkUzNzJDMjE2NEFENjExRTRCNjE0OEVEQzI4MEM0 + RTZDIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI3NUQ0QkNENDRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6PyaLfAAADMElEQVRIS6VUXUiTYRT+vi3Tzd+ps23+3KRigtiPkolEQReG + UYTkhWatpWlWGkRdddfdSPImqUAJjSIT00oxLJIk0cR+tFSyzDJtgaMkDEPkdM7ZPvm2vS6jBx6es3Pe + 8zzvtm+TohLS/ov+AACStLgEQuJyLRJWYK1yzh/+FgCoQrpnfM4fOGBhcUlIMkEVkma4H4i1y2kFcMD8 + wqKQZILKZqTqmlTAWrfvMjhgbv63Dwm0hLWQohn1eNEbzrlfPiTQAtZCKjP1GXdAIC+r4XD+9CGBFrDm + RVJ1re6pZ0GyHHMvIawauYVNCFPfvvuQQAtYC6meKXU0amNsaGN/ZR60xIf9aIgN3cpGE9OzZCZ85nEm + pGiWlLABmuJCnUOXrNB7chdct4TUo32ANDbp4NuielDpqWfePdaPX6GrohSK4uLhlCEo96YlZLbOFHzH + oJXjMSBcGn4/zQGovEDqXXtzeTb+BTrKj0J3+Q54djYP7EZdTU2MPjFSK8eieQR9QtLg6GcOQPWgqKeQ + ZyOfoK30CDw+lg2Ot3Z4VLoNqo269mCNHIa2WjYn9A1PcAAqU6m9VV3TF9psOwwPS3JgZugCdNoyocwU + jU+RlImWBpezGz0vxzkA1YOiHvPFO7Ca1kGHLQtmXp2HdutmqN+/F6JiU+h3kOpyVeHJwBgHoLIpqajm + 189HoaG4CNqsGTA1UAWth9Lg6r490PygGyLjUikgzuWqQlffCAegelDdUwLqigqhpXgjTPYeh+bCFCg2 + RkEk3vxuVz/P0c43oLP3DQegLhspNalSFxiNcLswHT48LYNbBUlQk7ebzenmyhm08w1o7xmiAP6hRZiT + 70eYkzpctUuJWdHmwWs74+F1Uz7cyE+E4ohQB5mHm9a3GywpTXzektyKduIAIsKI3ISkL4rIdYle05C9 + VrZVBmvtl7eboUyv7V4jSQdwRn8FdI72iErtCUxnIuifkJ5hUqUOq9Jr7OeCNU6bTpNVqtMcDJSldOwn + KnOk+jypJ5QANRWc0cs5SEelXr54QidfwVYAMoiHq4W/gNM6OaNCJ+diaUIqN/43+Atwg27t+9ZXBUn6 + A2MdqQeVc5pWAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjUzQzNGNDI5NEQyQzExRTQ4QkE1QUNCMEVDRDZF + MDVEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjUzQzNGNDI4NEQyQzExRTQ4QkE1QUNCMEVDRDZF + MDVEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI1NUY4OTYyQTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6IsaOmAAADF0lEQVQ4T62U/UuTURTH+0nICqRI1ERMMyNQe8N0ChqBwQhN + yvwhEgJjVCqJ/qCibZo6tzQ339h6Nre5prapUzc1XzItX1ilzuWMLLVAen+xf6DTuTxjdxsFVj58ebjc + c+7nnud7z3228DbpIaDFH/CfoqCn72DIDvNfPDM2KAqyr8PcJxqY+QBTb8kkjocXQTsKigGwfqYJHqIg + 1OxHGHvlWPx4hXB1YyA3g4CBhqst+piEnrDA3rA95vBAY1x8d7lq/DVZwm5PQZNvoKYdypSgHgbVEIh1 + cLOZzOCbSSsyRQRba6uWtcpVLbPcwlglInNUCJNWWKqABqMLCGvGlfpJELaQ/V1Vd1lujAhe0chtUrH5 + ZExnmJ85MdomEa+qZMbIEF2BHGunILSjdZwYgTt4gJqjjj0Rltml1Zq9AeL0Mn71Wn2mtDU80MIvsFTw + O+KPIoWC8BNYRIUaqrRQroJKjQOk9N+xLBF2pXJFKfnsDGYa8gS6xOO2whyMuoHaHpGzZ/pBM0IMrtXD + nT4HqNHXe0lYoogMFeQP4jbSDkCPTUyXmnNoPutSo+9WN5DEQDyeWCWnhqm4p7Oimt3b54rzmmKPVHKz + 0Xg0AU1pz87VJp+yXOfd9t3mBmLXsGrsJhSsDtF4iOWxKdpzyQNnuRW7vEUp13obFG05OVUBPtO5V1Sn + k5q4SX8ENfWA6C7xHsP981Bb2sf38ZKd4JhSuXUJHPHhg/WJnAeZFw0Xzt/w8erRtLmBnB/CSmaC599I + 2PYVRl+CXigu3R9SfCC0Pf1MZ1oqvqvjogX7gtRFJfb1n24g7GblfQcFP2fkBYm5anxqQcbLKgzyK/Df + WRTkV5+RMTg84ZrgAOHo4ZIDVNdJw67CpsVLZ5gifj97Typlq2ZFQXj8LKh5EHpnaIar8N+Al5l9Y9Vs + T7OiIAzjqaMsa6QJnBkeWvgOHdPkAuIV67PSeQpCYYZplsZ+KyyWLRyFF8D553EDbURY770J0rrYJbda + SYE4iWb9NcgpRKDrOMAWwYP6d5BTaC52zyaAWDlAm/DweL8AX9zXukfxHsIAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6npMy1AAAGEUlEQVRIS7WVeVDUZRjHf7Ase8ECu+wl4LIXcqyyHC783AWW + 5QaRFTHkMi9SQvE+UhLzwk0BUcQSgQBBgcYDzStMSzOPcpqcmo5pmqk/+rOapqb+iG/PbzfFcSz/6pn5 + zPN739/7fp/nvZn/3TSLjj+XJy2/RaItPCT5vaBd8m1+q2Qku1lcrcvki+iXr7fFU6ZZeOx5KDU1b7jU + 1Z2bVPMPWNMbRXrXkWAc+ywVLbcS8fKwFjlu8VdpW0XzSc6f8PEIPzJ19dFnU3WEJdHL9P3X9O1nkdB8 + CQrX7i3mKn9zfqsUq29ZsPfjRBx5aMO2cTMy94gm7FuF7XyJTwDJTo5GVdHxNALVgsPd5Ceye+9g8b0f + UXbjB8RtH4Msd+MeXS7f6twjxbILZiy7pEHDtTBsvG7BqivTUXpsClLWCbtJNpDwBlGVH3ySIFV520eW + nedRcf0HVJGwbeRrOHs/h2n1CGRZDe7wND/W1hiI8sEYlJ4KRcVpJcrfVqByNBILhqLh3KeA+UXBOpL2 + jkRZduARPGXZ/vH4pnMou/gd7INfIPn4QyQc/RSOzk9hrBtEiKPerUn1Y5PXBaDojWlwdgUjr0+G/H4Z + cnpCUNJrQNZ+LeLrBD/LYnixFEDAKFz7vJQ0r49dO4zikS8x8/ADxLd9jIT2B5ix/z7SX78Pw+K3EJy2 + wq1M4rEz6sRwthgw82Ag2KNS2I5JPZ4rZx00ImGNHIZSfisFkDGhxbs5AkKLd/3kaLkDlgTjXrsNc/Md + mPfeQeyOD2HbcRu6yi4E2Wrd8ngeG71IBPtePWa4JUhsD0DykQAkHQqApUWCFLcGyZvDoZ/P/5oCTGXk + hU2MvGB7rbGmG47dd2Fa+x6iX/kAMa/eQvS2m4jaeAPspvcROb8TQexid3CcL2usFCJjnwE5nQYU9RhR + PGDC7D4TCrqMyDqkR9oePbRz/SZEKh8rI8vdyshyXhmzLD8DS/1VGOquwtgw7glkXH0Nhvp3kbL2GrSl + hyC11ril03xZfbkQKZuVsDeq4NihRtYuDbJ2auBoUsO2TQXrJiWMlWIExflWMiHOjRzfJy0bg776HCKX + vANd7WXol1/xeN3Si7A2XIXW1YbAxAq3UO0zPTSd1yG38bplLK//vxBrffKY4PQ1HH9aKk8jonQUUyvO + Qlt9HtqaCx4/tXIMyXWXMXXOAQTEv+D2zCvDhBBTCN1zCGOCZq3k+DXO1YcpRYOY4hpF2LzTCCs74/VE + 3IvnEVd1EhGFblBbWot6BKXWQZq64tlYa2+TuJwQM9KU5cRL35hyOxCe2w913hA0hcPQFI16KRzxEFtO + a1Q9htSVN5C+5S5x7x/uIm3DR7CvuomUReOImt1FU7nwEolHECImMGkJE5i46EJkejNM+X1QOPqhzBqC + KvskVDmnJuHKT/K4bgjKzBMItXcjJv84NOwWiKPndJK40TOCgPgaRmIur1dZ1yM6txvyWT0ITR+AImOQ + gg39N1ybDBJP60PorC5My3oTwQm18FdNryBxbq0EJL6AEUTYZBTkF0NGKyKdvZDb3qJOAxSIOqcP/jtp + JyC3D1BSvYgp6EN4aiNlP/cTEk4gFASPEUeXkWd8RaY5jcrEBkTn9UCT4Q3gzfBfRvJE9rrsfpicHSRe + NsFXmJeSXhTBXXY+jMjk8uArVkpExuKb6pkbYJ7L7Ria37xTUBeMeCkcncRTN0z/TyLKNYy4khNQJq2G + IMLBXdUWQkXwCYYR6md7IPP1k8WEC3UFDzSpG2BZeAZJtXQWFpyls3HOC50JzkdQnbFqDInLLiC2rBcq + 6xoSzzzP+NDVwDBaQkx4XzahNv8xZH48sVotCHeOUnnCWNJG18Q4UjddB7vlfbBbPwC7+YannLTyIrS5 + OyHU5v3hr07poL7JBHe4Jh8bzgQROY8h46IKCAVfbi73D3PcpfoJlX0VtEVN0JXsQlj2ZoRaaynj7N/8 + NfZLPLFmHrXnpiWSCCL8iMl32T/M6YGMq+R+covD7QADwfoIgqt4QVGtfvIZJ4lRv5CY4zypbjfjy+eE + M4l4gtuSwYSQ4DS4EZAew/wNiCYQJlvQU3cAAAAASUVORK5CYII= + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 diff --git a/TreeUtils.cs b/TreeUtils.cs new file mode 100644 index 0000000..571fa7c --- /dev/null +++ b/TreeUtils.cs @@ -0,0 +1,152 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using GeoScene.Data; +using GeoScene.Globe; + +namespace Cyberpipe +{ + public class TreeUtils + { + /// + /// 构造图层tree,最多解析三层,若地球存在,则只构造指定地球上图层已存在的树节点,若地球不存在,则构造全部 + /// + /// 所属地球 + /// 要加载的树 + /// 数据来源,实测数据/施工数据/规划数据/红线数据,为空则展示全部 + public static void InitLayerTree(GSOGlobeControl gsoGlobeControl, TreeView treeView, string viewDatasrc) + { +// treeView.Nodes.Clear(); + LayerConfig layerConfig = Utility.layerConfig;//layertree所在的配置文件 + List datasrcs = layerConfig.datasrcs; + foreach (DataSrc datasrc in datasrcs) + { + if (viewDatasrc != null && !viewDatasrc.Trim().Equals("") && !datasrc.label.Equals(viewDatasrc)) continue; + TreeNode rootNode = treeView.Nodes.Add(datasrc.label); + List layerTypes = datasrc.layertypes; + foreach (LayerType layerType in layerTypes) + { + TreeNode secNode = rootNode.Nodes.Add(layerType.label); + List layers = layerType.layers; + foreach (Layer layer in layers) + { + if (gsoGlobeControl == null) + { + TreeNode node = new TreeNode(); + node.Text = layer.label; + secNode.Nodes.Add(node); + + } + else + { + GSOLayer gsoLayer = gsoGlobeControl.Globe.Layers.GetLayerByCaption(layer.layer); + if (gsoLayer == null) continue;//将不存在的去除 + TreeNode node = new TreeNode(); + node.Tag = gsoLayer; + node.Text = layer.label; + node.Checked = gsoLayer.Visible; + if (gsoLayer.Visible) + { + secNode.Checked = true; + rootNode.Checked = true; + } + secNode.Nodes.Add(node); + } + + } + } + } + } + + + /// + /// TreeNode选中状态改变,对其子节点和父节点的选中状态做相应改变 + /// + /// + /// + public static void TreeNodeCheckedChange(GSOGlobeControl globeControl, TreeNode node) + { + if (node.Tag != null) + { + if (node.Tag is GSOLayer)//图层 + { + GSOLayer layer = node.Tag as GSOLayer; + layer.Visible = node.Checked; + globeControl.Globe.Refresh(); + } + else if (node.Tag is GSOTerrain)//地形 + { + GSOTerrain feat = node.Tag as GSOTerrain; + feat.Visible = node.Checked; + globeControl.Globe.Refresh(); + }else if (node.Tag is GSOFeature)//特征点 + { + GSOFeature feature = node.Tag as GSOFeature; + feature.Visible = node.Checked; + globeControl.Globe.Refresh(); + } + } + + CheckParentNode(node); + if (node.Nodes.Count > 0) + CheckChildrenNode(globeControl, node, node.Checked); + } + /// + /// 树形结构中,根据parentNode的选中状态,更改其子节点的选中状态 + /// + /// + /// + /// + public static void CheckChildrenNode(GSOGlobeControl globeControl, TreeNode parentNode, bool isChecked) + { + foreach (TreeNode childNode in parentNode.Nodes) + { + childNode.Checked = isChecked; + if (childNode.Tag is GSOLayer) + { + GSOLayer layer = childNode.Tag as GSOLayer; + layer.Visible = isChecked; + globeControl.Globe.Refresh(); + } + else if (childNode.Tag is GSOTerrain) + { + GSOTerrain feat = childNode.Tag as GSOTerrain; + feat.Visible = isChecked; + globeControl.Globe.Refresh(); + } + else if (childNode.Tag is GSOFeature) + { + GSOFeature feature = childNode.Tag as GSOFeature; + feature.Visible = childNode.Checked; + globeControl.Globe.Refresh(); + } + if (childNode.Nodes.Count > 0) + CheckChildrenNode(globeControl, childNode, isChecked); + } + } + + /// + /// 子节点则父节点:一选则选,全不选才不选 + /// 改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 + /// + /// 要检查的节点,更改其父节点状态 + public static void CheckParentNode(TreeNode curNode) + { + + if (curNode.Parent == null) return; + bool bChecked = false; + foreach (TreeNode node in curNode.Parent.Nodes) + { + if (!node.Checked) continue; + bChecked = true; + break; + } + curNode.Parent.Checked = bChecked; + CheckParentNode(curNode.Parent); + + } + + } +} diff --git a/Utility.cs b/Utility.cs index 68c90d1..f7aa6b7 100644 --- a/Utility.cs +++ b/Utility.cs @@ -228,30 +228,30 @@ LayerLabel_LayerIDs = new Hashtable(); if (File.Exists(filename)) { - XmlTextReader XmlReader = new XmlTextReader(filename); + XmlTextReader xmlReader = new XmlTextReader(filename); try { - while (XmlReader.Read()) + while (xmlReader.Read()) { - if (XmlReader.Name == "database") + if (xmlReader.Name == "database") { - dbdatabase = XmlReader.ReadElementString(); + dbdatabase = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "dbpassword") + else if (xmlReader.Name == "dbpassword") { - DBPassword = XmlReader.ReadElementString(); + DBPassword = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "user") + else if (xmlReader.Name == "user") { - userID = XmlReader.ReadElementString(); + userID = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "locaserverip") + else if (xmlReader.Name == "locaserverip") { - serverip = XmlReader.ReadElementString(); + serverip = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "locaserverport") + else if (xmlReader.Name == "locaserverport") { - serverport = Convert.ToInt32(XmlReader.ReadElementString()); + serverport = Convert.ToInt32(xmlReader.ReadElementString()); } //else if (XmlReader.Name == "localicenseserverip") //{ @@ -261,102 +261,51 @@ //{ // Utility.localicenseserverport = Convert.ToInt32(XmlReader.ReadElementString()); //} - else if (XmlReader.Name == "dbbackuppath") + else if (xmlReader.Name == "dbbackuppath") { - DBBackUp = XmlReader.ReadElementString(); + DBBackUp = xmlReader.ReadElementString(); } -// else if (XmlReader.Name == "layerchild") -// { -// var layername = XmlReader["layer"].Trim(); -// var label = XmlReader["label"].Trim(); -// var type = XmlReader["type"].Trim(); -// -// LayerChild child = new LayerChild(); -// child.attriLabel = label; -// child.attriLayer =layername; -// child.attriType = type; -// LayerChilds.Add(child); -// LayerLabels.Add(label); -// LayerNames.Add(layername); -// -// dictionaryNetLayerNameAndCaption.Add(layername, label); -// -// if (layername.EndsWith("管线")) -// { -// LayerNamesList.Add(layername.Substring(0, layername.Length - 2)); -// } -// if (!type.Equals("db")) -// { -// if (XmlReader["isRoad"] != null) -// { -// roadLayerName = label; -// } -// }else if (XmlReader["isPipeLine"] != null) -// { -// m_PipelineLayerNames.Add(label); -// } -// else if (XmlReader["isWorkWell"] != null) -// { -// workwellLayerNames.Add(label); -// } -// else if (XmlReader["isValve"] != null) -// { -// valueLayerNames.Add(label); -// } -// else if (XmlReader["isAccess"] != null) -// { -// instrumenLayerNames.Add(label); -// } -// else if (XmlReader["isCharacter"] != null) -// { -// pipefittingLayerNames.Add(label); -// } -// else if (XmlReader["isSgData"] != null) -// { -// sgPipeLayersNames.Add(label); -// } -// } - else if (XmlReader.Name == "Terrain") + else if (xmlReader.Name == "Terrain") { - TerrainsName.Add(XmlReader.ReadElementString()); + TerrainsName.Add(xmlReader.ReadElementString()); } - else if (XmlReader.Name == "dbserver") + else if (xmlReader.Name == "dbserver") { - DBServer = XmlReader.ReadElementString(); + DBServer = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "rooturl") + else if (xmlReader.Name == "rooturl") { - PicRootURL = XmlReader.ReadElementString(); + PicRootURL = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "defaultimgurl") + else if (xmlReader.Name == "defaultimgurl") { - PicDefaultURL = XmlReader.ReadElementString(); + PicDefaultURL = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "queryfield") + else if (xmlReader.Name == "queryfield") { - Query_Fields.Add(XmlReader["label"], XmlReader.ReadElementString()); + Query_Fields.Add(xmlReader["label"], xmlReader.ReadElementString()); } - else if (XmlReader.Name == "location") + else if (xmlReader.Name == "location") { - Query_Roads.Add(XmlReader["label"], XmlReader.ReadElementString()); + Query_Roads.Add(xmlReader["label"], xmlReader.ReadElementString()); } - else if (XmlReader.Name == "pipelineCode") + else if (xmlReader.Name == "pipelineCode") { - Pipe_Code.Add(XmlReader["label"], XmlReader.ReadElementString()); + Pipe_Code.Add(xmlReader["label"], xmlReader.ReadElementString()); } - else if (XmlReader.Name == "projectStr") + else if (xmlReader.Name == "projectStr") { - projectStr = XmlReader.ReadElementString(); + projectStr = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "backupserverurl") + else if (xmlReader.Name == "backupserverurl") { - backupurl = XmlReader.ReadElementString(); + backupurl = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "backuppath") + else if (xmlReader.Name == "backuppath") { - backuppath = XmlReader.ReadElementString(); + backuppath = xmlReader.ReadElementString(); } //else if (XmlReader.Name == "uploadpath") //{ @@ -366,41 +315,41 @@ //{ // Utility.udserviceurl = XmlReader.ReadElementString(); //} - else if (XmlReader.Name == "pipelinetype") + else if (xmlReader.Name == "pipelinetype") { - pipelinetype = XmlReader.ReadElementString(); + pipelinetype = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "shdbip") + else if (xmlReader.Name == "shdbip") { - sgdbip = XmlReader.ReadElementString(); + sgdbip = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "shdbname") + else if (xmlReader.Name == "shdbname") { - sgdbname = XmlReader.ReadElementString(); + sgdbname = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "shdbuser") + else if (xmlReader.Name == "shdbuser") { - sgdbuser = XmlReader.ReadElementString(); + sgdbuser = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "shdbpwd") + else if (xmlReader.Name == "shdbpwd") { - sgdbpwd = XmlReader.ReadElementString(); + sgdbpwd = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "ghdbip") + else if (xmlReader.Name == "ghdbip") { - ghdbip = XmlReader.ReadElementString(); + ghdbip = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "ghdbname") + else if (xmlReader.Name == "ghdbname") { - ghdbname = XmlReader.ReadElementString(); + ghdbname = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "ghdbuser") + else if (xmlReader.Name == "ghdbuser") { - ghdbuser = XmlReader.ReadElementString(); + ghdbuser = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "ghdbpwd") + else if (xmlReader.Name == "ghdbpwd") { - ghdbpwd = XmlReader.ReadElementString(); + ghdbpwd = xmlReader.ReadElementString(); } } } @@ -410,7 +359,7 @@ } finally { - XmlReader.Close(); + xmlReader.Close(); } } else @@ -458,11 +407,12 @@ { sgPipeLayersNames.Add(layer.label); } -// else if (layer.flag.Equals("")) + //配置文件中不存在workwell和valve的,不起作用 +// else if (layer.flag.Equals("workwell")) // { // workwellLayerNames.Add(layer.label); // } -// else if (layer.flag.Equals("")) +// else if (layer.flag.Equals("valve")) // { // valueLayerNames.Add(layer.label); // } diff --git a/bin/x86/Debug/Config.xml b/bin/x86/Debug/Config.xml index 508515a..b7dafa9 100644 --- a/bin/x86/Debug/Config.xml +++ b/bin/x86/Debug/Config.xml @@ -2,10 +2,10 @@ LocaSpace三维地下管线信息系统 release - SZHTDB2 + szhtdb2 192.168.0.203 release - 192.168.0.203 + 127.0.0.1 1500 http://192.168.0.203/images/ http://192.168.0.203/images/default.jpg @@ -25,165 +25,6 @@ http://127.0.0.1/Cyberpipe.msi http://127.0.0.1/Config.xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 编号,管线编码,管径_毫米,材质,埋设方式,起始地面高程,起始埋深,终止地面高程,终止埋深,建设年代,使用年限,权属单位,设计单位,设计负责人,施工单位,施工负责人,监理单位,监理负责人,业务负责人,备注 编号,管线编码,管径_毫米,材质,埋设方式,起始地面高程,起始埋深,终止地面高程,终止埋深,建设年代,使用年限,权属单位,设计单位,设计负责人,施工单位,施工负责人,监理单位,监理负责人,业务负责人,备注 diff --git a/ClassDoubleScreenCompare.cs b/ClassDoubleScreenCompare.cs new file mode 100644 index 0000000..f2935da --- /dev/null +++ b/ClassDoubleScreenCompare.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using GeoScene.Globe; +using GeoScene.Data; +using GeoScene.Engine; +using System.Drawing; + +namespace Cyberpipe +{ + class ClassDoubleScreenCompare + { + public static GSOFeature getSameFeatureFromOtherGlobe(GSOFeature feature, + GSOGlobeControl globeControl1, GSOGlobeControl globeControl2,double bufferWidth,GSOGeoPolygon3D resPolygon) + { + GSOLayer layer; + GSOFeatures features = new GSOFeatures(); + + if (!feature.Dataset.Caption.StartsWith("施工")) + { + layer = feature.Dataset.Caption == "供电管线" + ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") + : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(feature, fs[i], globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + else + { + layer = feature.Dataset.Caption == "施工电力管线" + ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") + : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(fs[i], feature, globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + + return getMostSimilarFeatureFromFeatures(feature, features); + + } + + + private static GSOFeature getMostSimilarFeatureFromFeatures(GSOFeature feature, GSOFeatures features) + { + double maxLength = 0; + GSOFeature f = new GSOFeature(); + GSOGeoPolyline3D line = feature.Geometry as GSOGeoPolyline3D; + + if (features.Length == 0) return null; + if (features.Length == 1) + { + f = features[0]; + f.HighLight = true; + } + else + { + for (int m = 0; m < features.Length; m++) + { + GSOGeoPolyline3D tempSGLine = features[m].Geometry as GSOGeoPolyline3D; + + double tempLength = tempSGLine.GetSpaceLength(false, 6378137); + double lengthAbs = Math.Abs(tempLength - line.GetSpaceLength(false, 6378137)); + if (m == 0) + { + f = features[0]; + f.HighLight = true; + maxLength = lengthAbs; + } + else if (lengthAbs < maxLength) + { + f = features[m]; + f.HighLight = true; + maxLength = lengthAbs; + } + } + } + return f; + } + + private static bool isSameFeature(GSOFeature feature1, GSOFeature feature2, GSOLayer layer, double bufferWidth) + { + GSOGeoPolyline3D line = feature1.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = line.CreateBuffer(bufferWidth * 2, true, 5, true, false); + + if (bufferPolygon == null) return false; + + GSOFeatures featuresInLayer = layer.FindFeaturesInPolygon(bufferPolygon, true); + + if (featuresInLayer == null || featuresInLayer.Length <= 0) + return false; + + for (int i = 0; i < featuresInLayer.Length; i++) + { + if (featuresInLayer[i].Name == feature2.Name) + { + return true; + break; + } + } + return false; + } + + private static bool isSimilarFeature(GSOFeature srcFeature, GSOFeature dscFeature, + GSOGlobeControl globeControl1,GSOGlobeControl globeControl2,double bufferWidth) + { + GSOLayer dscLayer = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); + GSOLayer srcLayer = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); + + if (!isSameFeature(srcFeature, dscFeature, dscLayer, bufferWidth) + && !isSameFeature(dscFeature, srcFeature, srcLayer, bufferWidth)) + return false; + return true; + } + + public static void CalculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2, + out double horizonDistance, out double verticalDistance, GSOGlobeControl globeControl1, GSOGlobeControl globeControl2) + { + GSOPoint3d pntIntersect1 = new GSOPoint3d(); + GSOPoint3d pntIntersect2 = new GSOPoint3d(); + GSOPoint3d pntProIntersect1 = new GSOPoint3d(); + GSOPoint3d pntProIntersect2 = new GSOPoint3d(); + + verticalDistance = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, verticalDistance, true, "垂直", globeControl1, globeControl2); + + horizonDistance = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, horizonDistance, true, "水平", globeControl1, globeControl2); + + } + + private static GSOPoint3d LabelDistance(GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, + double distance, bool markerVisible, string label,GSOGlobeControl globeControl1,GSOGlobeControl globeControl2) + { + if (pntIntersect1 == null || pntIntersect2 == null) + return new GSOPoint3d(); + GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); + GSOPoint3ds point3ds = new GSOPoint3ds(); + point3ds.Add(pntIntersect1); + point3ds.Add(pntIntersect2); + disline.AddPart(point3ds); + + GSOGeoMarker dismarker = new GSOGeoMarker(); + GSOFeature marker = null; + GSOFeature line = null; + createLineStyle(out marker, out line, disline, pntIntersect1, pntIntersect2, distance, label, dismarker); + + line.Visible = marker.Visible = markerVisible; + globeControl1.Globe.MemoryLayer.AddFeature(line); + globeControl1.Globe.MemoryLayer.AddFeature(marker); + + globeControl2.Globe.MemoryLayer.AddFeature(line); + globeControl2.Globe.MemoryLayer.AddFeature(marker); + + return dismarker.Position; + } + + private static void createLineStyle(out GSOFeature marker, out GSOFeature line, GSOGeoPolyline3D disline, + GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) + { + GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 + style.LineColor = Color.Red; + style.LineWidth = 5; //设置线的宽度为5 + style.VertexVisible = true; //显示线的节点 + disline.Style = style; //把风格添加到线上 + disline.AltitudeMode = EnumAltitudeMode.Absolute; + line = new GSOFeature(); + line.Geometry = disline; + + dismarker.X = pntIntersect1.X; + dismarker.Y = pntIntersect1.Y; + dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; + dismarker.Text = label + distance.ToString("0.00") + "米"; + dismarker.AltitudeMode = EnumAltitudeMode.Absolute; + + GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); + GSOTextStyle styleText = new GSOTextStyle(); + styleText.IsSizeFixed = true; + styleText.ForeColor = Color.Red; + styleText.FontSize = 20; + styleMarker.TextStyle = styleText; + dismarker.Style = styleMarker; + + marker = new GSOFeature(); + marker.Geometry = dismarker; + } + + } +} diff --git a/Cyberpipe.csproj b/Cyberpipe.csproj index d8aa9c8..bcce54d 100644 --- a/Cyberpipe.csproj +++ b/Cyberpipe.csproj @@ -203,6 +203,7 @@ + @@ -1143,6 +1144,7 @@ SysRescInfoManager.cs + True True diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 123caf1..2c45db6 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -258,42 +258,25 @@ for (int i = 0; i < scLayer.GetAllFeatures().Length; i++) { GSOFeature scFeature = scLayer.GetAt(i); - if (scFeature.GetFieldAsString("所属道路") == road) + if (scFeature.GetFieldAsString("所属道路") != road) continue; + GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + + GSOFeature sgFeature = null; + GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); + + //**判断同一个Feature + if (sgFeatures.Length >= 1) { - GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); - GSOFeature sgFeature = null; - GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); - - //**判断同一个Feature - if (sgFeatures.Length >= 1) + if (sgFeature != null) { - sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); + GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; + double horizonDistance, verticalDistance; - if (sgFeature != null) - { - GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; - double horizonDistance, verticalDistance; - - CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); - GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); - } - else - { - scFeature.HighLight = true; - DataRow dr = dt.NewRow(); - dr[0] = scLayer.Caption; - dr[1] = scFeature.GetFieldAsString("编号"); - dr[2] = sgLayer.Caption; - dr[3] = "无"; - dr[4] = "无"; - dr[5] = "0.02"; - dr[6] = "无"; - dr[7] = "0.02"; - dr[8] = "未设计管段"; - dt.Rows.Add(dr); - } + CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); + GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); } else { @@ -311,6 +294,21 @@ dt.Rows.Add(dr); } } + else + { + scFeature.HighLight = true; + DataRow dr = dt.NewRow(); + dr[0] = scLayer.Caption; + dr[1] = scFeature.GetFieldAsString("编号"); + dr[2] = sgLayer.Caption; + dr[3] = "无"; + dr[4] = "无"; + dr[5] = "0.02"; + dr[6] = "无"; + dr[7] = "0.02"; + dr[8] = "未设计管段"; + dt.Rows.Add(dr); + } } } /// diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index 53946c0..fe32265 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -4,7 +4,7 @@ using GeoScene.Globe; namespace Cyberpipe -{ +{ //本类作用为:辅助GlobalControl上Feature的统计分析工具类 class FeatureStatisticsService { /// @@ -60,8 +60,8 @@ /// /// /// - /// - /// + /// + /// /// /// public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) @@ -74,6 +74,7 @@ for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; double length = line.GetSpaceLength(true, 6378137); totalLength += length; ncount += 1; @@ -114,7 +115,7 @@ for (int i = 0; i < feats.Length; i++) { double radius = feats[i].GetFieldAsDouble(fieldName); - if (radius >= min && radius <= max) + if (radius >= minValue && radius <= maxValue) { result.Add(feats[i]); } @@ -148,23 +149,22 @@ lstDiameter.Sort(); if (lstDiameter.Count > 0) { - for (int m = 0; m < lstDiameter.Count; m++) + foreach (float diameter in lstDiameter) { double totalLength = 0.00; int ncount = 0; for (int j = 0; j < feats.Length; j++) { - if (feats[j].GetFieldAsFloat("管径_毫米") == lstDiameter[m]) - { - GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } + if (Math.Abs(feats[j].GetFieldAsFloat("管径_毫米") - diameter) > 0.00001) continue; + GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = lstDiameter[m].ToString(); + featuresClass.groupFieldValue = diameter.ToString(); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -191,13 +191,13 @@ //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); - for (int j = 0; j < accessStrs.Length; j++) + foreach (string accssname in accessStrs) { - GSOFeatures feats = null; - int ncount = 0; + GSOFeatures feats; + int ncount; if (polygon == null) { - feats = flayer.GetFeatureByFieldValue("附属物名称", accessStrs[j], true); + feats = flayer.GetFeatureByFieldValue("附属物名称", accssname, true); ncount = feats.Length; } else @@ -207,14 +207,14 @@ //过滤 for (int n = 0; n < feats.Length; n++) { - if (feats[n].GetFieldAsString("附属物名称").Contains(accessStrs[j])) newfeats.Add(feats[n]); + if (feats[n].GetFieldAsString("附属物名称").Contains(accssname)) newfeats.Add(feats[n]); } ncount = newfeats.Length; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); - featuresClass.layerName = accessStrs[j]; + featuresClass.layerName = accssname; featuresClass.ncount = ncount; result.Add(featuresClass); @@ -303,6 +303,26 @@ if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); - } + } + + + /// + /// 获取globeControl上选中的管线,如果返回空则没有选中的管线 + /// + /// 地球引擎 + /// 返回一根线 + public static GSOFeature GetSelectedPipeline(GSOGlobeControl globeControl) + { + GSOFeature resFeature; + if (globeControl.Globe.SelObjectCount < 1) return null; + GSOLayer resLayer; + globeControl.Globe.GetSelectObject(0, out resFeature, out resLayer); + if (resFeature == null) return null; + + GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; + if (line1 == null) return null; + GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; + return pipeStyle1 == null ? null : resFeature; + } } } diff --git a/FrmCompareFeature.cs b/FrmCompareFeature.cs index a05e8e7..ac622c4 100644 --- a/FrmCompareFeature.cs +++ b/FrmCompareFeature.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Data; using System.Drawing; using System.Windows.Forms; @@ -11,26 +10,16 @@ { public partial class FrmCompareFeature : Office2007Form { - GSOFeature srcFeature; - GSOFeature dscFeature; - GSOGlobeControl globeControl1; - GSOGlobeControl globeControl2; - bool isSamePolyline; - - GSOLayer layerTemp; - GSOLayer layerTemp2; - GSOFeature new_feat; + private GSOFeature srcFeature, dscFeature; + private GSOGlobeControl globeControl1, globeControl2; GSOGeoPolygon3D resPolygon; - static FrmCompareFeature frm; - public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2, int width) + public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, int width) { if (frm == null) { - frm = new FrmCompareFeature(_globeControl1, _globeControl2, _layerTemp, _layerTemp2); - + frm = new FrmCompareFeature(_globeControl1, _globeControl2); frm.Location = new Point((width - frm.Width)/2, 50); frm.Show(_globeControl1.Parent); } @@ -41,8 +30,7 @@ } } - public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2) + public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2) { globeControl1 = _globeControl1; globeControl2 = _globeControl2; @@ -50,99 +38,35 @@ globeControl1.Globe.Action = EnumAction3D.SelectObject; globeControl2.Globe.Action = EnumAction3D.SelectObject; - layerTemp = _layerTemp; - layerTemp2 = _layerTemp2; globeControl1.MouseClick += globeControl1_MouseClick; globeControl2.MouseClick += globeControl2_MouseClick; } + private void invalParam() + { + if (srcFeature == null || dscFeature == null) + { + MessageBox.Show("请选择要对比的管段!", "提示"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) + { + MessageBox.Show("请选择同种类型图层!"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type || + srcFeature.Geometry.Type != EnumGeometryType.GeoPolyline3D) + return; + } + private void buttonAnalysis_Click(object sender, EventArgs e) { + invalParam(); + dataGridViewX1.DataSource = null; - - double bufferWidth = Convert.ToDouble(textBox1.Text); - - if (srcFeature == null || dscFeature == null) - MessageBox.Show("请选择要对比的管段!", "提示"); - else - { - if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) - MessageBox.Show("请选择同种类型图层!"); - else if (srcFeature.Geometry.Type == dscFeature.Geometry.Type && - srcFeature.Geometry.Type == EnumGeometryType.GeoPolyline3D) - { - lineLayerCompare(srcFeature, dscFeature, bufferWidth); - if (!isSamePolyline) - MessageBox.Show("实测管段与施工管段非同一条管段,请选择同一管段进行比较!", "提示"); - else - { - lineFeatureCompare(srcFeature, dscFeature); - globeControl1.Globe.Action = EnumAction3D.ActionNull; - globeControl2.Globe.Action = EnumAction3D.ActionNull; - } - } - else - MessageBox.Show("无法处理该类型图层!"); - } + lineFeatureCompare(srcFeature, dscFeature); } - - /// - /// 在容差范围内判断是否同一根管段 - /// - /// - /// - /// - /// - private bool lineLayerCompare(GSOFeature srcFeature, GSOFeature dscFeature, double bufferWidth) - { - isSamePolyline = false; - - GSOGeoPolyline3D srcLine = srcFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D srcBufferPolygon = srcLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer dsc = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); - - if (srcBufferPolygon != null) - { - GSOFeatures featuresInSrcLayer = dsc.FindFeaturesInPolygon(srcBufferPolygon, true); - - if (featuresInSrcLayer != null && featuresInSrcLayer.Length > 0) - { - for (int i = 0; i < featuresInSrcLayer.Length; i++) - { - if (featuresInSrcLayer[i].Name == dscFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D dscBufferPolygon = dscLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer src = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); - - if (dscBufferPolygon != null) - { - GSOFeatures featuresInDscLayer = src.FindFeaturesInPolygon(dscBufferPolygon, true); - - if (featuresInDscLayer != null && featuresInDscLayer.Length > 0) - { - for (int i = 0; i < featuresInDscLayer.Length; i++) - { - if (featuresInDscLayer[i].Name == srcFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - return isSamePolyline; - } - /// /// 分析两根管段的具体差异 /// @@ -156,8 +80,10 @@ GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; double dscLineLength = dscLine.GetSpaceLength(false, 6378137); - double horizonDistance = calculateDistance(srcLine, dscLine,false); - double verticalDistance = calculateDistance(srcLine, dscLine,true); + double horizonDistance, verticalDistance; + + ClassDoubleScreenCompare.CalculateDistance(srcLine, dscLine, out horizonDistance, + out verticalDistance,globeControl1,globeControl2); DataTable dt = new DataTable(); dt.Columns.Add("数据名称"); @@ -189,6 +115,98 @@ dt.Rows.Add(dscRow); dataGridViewX1.DataSource = dt; + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) + { + globeControl1.Globe.MemoryLayer.RemoveAllFeature(); + globeControl2.Globe.MemoryLayer.RemoveAllFeature(); + + GSOFeature new_feat = new GSOFeature(); + resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); + resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; + new_feat.Geometry = resPolygon; + + globeControl1.Globe.MemoryLayer.AddFeature(new_feat); + globeControl2.Globe.MemoryLayer.AddFeature(new_feat); + + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + public static void clearFeatureHighLight(GSOGlobeControl glb) + { + for (int i = 0; i < glb.Globe.Layers.Count; i++) + { + GSOLayer layer = glb.Globe.Layers[i]; + if (!(layer is GSOFeatureLayer)) continue; + GSOFeatures feats = layer.GetAllFeatures(); + for (int j = 0; j < feats.Length; j++) + { + feats[j].HighLight = false; + } + } + } + + void globeControl1_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl1.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl1.Globe.Action != EnumAction3D.SelectObject || + globeControl1.Globe.SelectedObject == null) + return; + GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + srcFeature = globeControl1.Globe.SelectedObject; + dscFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(srcFeature, + globeControl1,globeControl2,bufferWidth,resPolygon); + + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } + + void globeControl2_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl2.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl2.Globe.Action != EnumAction3D.SelectObject || + globeControl2.Globe.SelectedObject == null) + return; + + GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + dscFeature = globeControl2.Globe.SelectedObject; + srcFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(dscFeature, + globeControl1, globeControl2, bufferWidth, resPolygon); + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } private void FrmCompareFeature_FormClosing(object sender, FormClosingEventArgs e) @@ -198,322 +216,5 @@ frm = null; } - private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) - { - new_feat = new GSOFeature(); - resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); - resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; - new_feat.Geometry = resPolygon; - - layerTemp.AddFeature(new_feat); - layerTemp2.AddFeature(new_feat); - globeControl1.Refresh(); - globeControl2.Refresh(); - } - - private GSOLayer getSameLayer(GSOFeature feature) - { - GSOLayer layer = null; - if (!feature.Dataset.Caption.StartsWith("施工")) - { - layer = feature.Dataset.Caption == "供电管线" - ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") - : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); - } - else - { - layer = feature.Dataset.Caption == "施工电力管线" - ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") - : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); - } - - return layer; - } - - /// - /// 地球1中点击地球2中同步添加缓冲区 - /// - /// - /// - void globeControl1_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl1.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl1.Globe.Action == EnumAction3D.SelectObject && - globeControl1.Globe.SelectedObject != null) - { - GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - addPologyToGlobeControl(line, bufferWidth); - } - - srcFeature = globeControl1.Globe.SelectedObject; - GSOLayer layers = getSameLayer(srcFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = srcFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(srcFeature, features[i], Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - listFeatures.Add(features[i]); - } - calculate(out maxLength, out dscFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - /// - /// 地球2中点击地球1中同步添加缓冲区 - /// - /// - /// - void globeControl2_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl2.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl2.Globe.Action != EnumAction3D.SelectObject || - globeControl2.Globe.SelectedObject == null) - return; - else - { - GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - - addPologyToGlobeControl(line, bufferWidth); - } - - dscFeature = globeControl2.Globe.SelectedObject; - //双屏同时选中同一管段 - GSOLayer layers = getSameLayer(dscFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = dscFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(features[i], dscFeature, Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - { - listFeatures.Add(features[i]); - } - } - calculate(out maxLength, out srcFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - private void calculate(out double maxLength, out GSOFeature feature, GSOFeatures listFeatures, - GSOGeoPolyline3D scLine) - { - maxLength = 0; - feature=new GSOFeature(); - if (listFeatures.Length == 0) - feature = null; - else - { - if (listFeatures.Length == 1) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - } - else - { - for (int m = 0; m < listFeatures.Length; m++) - { - GSOGeoPolyline3D tempSGLine = listFeatures[m].Geometry as GSOGeoPolyline3D; - - double tempLength = tempSGLine.GetSpaceLength(false, 6378137); - double lengthAbs = Math.Abs(tempLength - scLine.GetSpaceLength(false, 6378137)); - if (m == 0) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - maxLength = lengthAbs; - } - else if (lengthAbs < maxLength) - { - feature = listFeatures[m]; - listFeatures[m].HighLight = true; - maxLength = lengthAbs; - } - } - } - } - } - - /// - /// 计算距离 - /// - /// - /// - /// - double calculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2,bool isVertical) - { - GSOPoint3d pntIntersect1 = new GSOPoint3d(); - GSOPoint3d pntIntersect2 = new GSOPoint3d(); - GSOPoint3d pntProIntersect1 = new GSOPoint3d(); - GSOPoint3d pntProIntersect2 = new GSOPoint3d(); - double dDist = 0; - if (isVertical) - { - dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "垂直"); - } - else - { - dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "水平"); - } - - return dDist; - } - - /// - /// 清除所有高亮Feature - /// - /// - private void clearFeatureHighLight(GSOGlobeControl glb1,GSOGlobeControl glb2) - { - layerTemp.RemoveAllFeature(); - layerTemp2.RemoveAllFeature(); - //清除gbl1中高亮 - for (int i = 0; i < glb1.Globe.Layers.Count; i++) - { - GSOLayer layer = glb1.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - //清除gbl2中高亮 - for (int i = 0; i < glb2.Globe.Layers.Count; i++) - { - GSOLayer layer = glb2.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - } - - /// - /// 添加标注 - /// - /// - /// - /// - /// - /// - /// - private GSOPoint3d LabelDistance(GSOLayer markerLayer, GSOLayer markerLayer2, - GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, bool markerVisible,string label) - { - if (pntIntersect1 == null || pntIntersect2 == null) - return new GSOPoint3d(); - GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); - GSOPoint3ds point3ds = new GSOPoint3ds(); - point3ds.Add(pntIntersect1); - point3ds.Add(pntIntersect2); - disline.AddPart(point3ds); - - GSOGeoMarker dismarker = new GSOGeoMarker(); - GSOFeature marker = null; - GSOFeature line = null; - createLineStyle(out marker, out line,disline, pntIntersect1, pntIntersect2, distance, label, dismarker); - - line.Visible = marker.Visible = markerVisible; - markerLayer.AddFeature(line); - markerLayer.AddFeature(marker); - - markerLayer2.AddFeature(line); - markerLayer2.AddFeature(marker); - - return dismarker.Position; - } - /// - /// 控制标注和字体的颜色 - /// - /// - /// - /// - /// - /// - /// - /// - /// - private void createLineStyle(out GSOFeature marker,out GSOFeature line,GSOGeoPolyline3D disline, - GSOPoint3d pntIntersect1,GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) - { - GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 - style.LineColor = Color.Red; - style.LineWidth = 5; //设置线的宽度为5 - style.VertexVisible = true; //显示线的节点 - disline.Style = style; //把风格添加到线上 - disline.AltitudeMode = EnumAltitudeMode.Absolute; - line=new GSOFeature(); - line.Geometry = disline; - - dismarker.X = pntIntersect1.X; - dismarker.Y = pntIntersect1.Y; - dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; - dismarker.Text = label + distance.ToString("0.00") + "米"; - dismarker.AltitudeMode = EnumAltitudeMode.Absolute; - - GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); - GSOTextStyle styleText = new GSOTextStyle(); - styleText.IsSizeFixed = true; - styleText.ForeColor = Color.Red; - styleText.FontSize = 20; - styleMarker.TextStyle = styleText; - dismarker.Style = styleMarker; - - marker=new GSOFeature(); - marker.Geometry = dismarker; - } - } } diff --git a/FrmHotFuncStat.cs b/FrmHotFuncStat.cs index 84131ef..f313b20 100644 --- a/FrmHotFuncStat.cs +++ b/FrmHotFuncStat.cs @@ -58,14 +58,11 @@ DataTable table = OledbHelper.QueryTable(sql); - if (table != null) + if (table == null) return; + for (int i = 0; i < table.Rows.Count; i++) { - for (int i = 0; i < table.Rows.Count; i++) - { - userLists.Items.Add(table.Rows[i][0].ToString()); - } + userLists.Items.Add(table.Rows[i][0].ToString()); } - } //统计结果 private void statBtn_Click(object sender, EventArgs e) diff --git a/FrmLayerControl.cs b/FrmLayerControl.cs index 8586041..8fbce97 100644 --- a/FrmLayerControl.cs +++ b/FrmLayerControl.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Windows.Forms; using DevComponents.DotNetBar; using GeoScene.Data; @@ -13,10 +14,10 @@ GSOGlobeControl globeControl1; GSOGlobeControl globeControl2; - TreeNode terrainManagerNode = null; - TreeNode layerManagerNode = null; - TreeNode terrainManagerNode1 = null; - TreeNode layerManagerNode1 = null; +// TreeNode terrainManagerNode = null; +// TreeNode layerManagerNode = null; +// TreeNode terrainManagerNode1 = null; +// TreeNode layerManagerNode1 = null; public FrmLayerControl(GSOGlobeControl ctl1,GSOGlobeControl ctl2) { @@ -25,14 +26,14 @@ globeControl2 = ctl2; } - private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) - { - treeNode=new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - } +// private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) +// { +// treeNode=new TreeNode(); +// treeNode.ImageIndex = 0; +// treeNode.SelectedImageIndex = 0; +// treeNode.Checked = false; +// treeNode.Text = strTreeNodeText; +// } // private void initTreeView() // { @@ -51,234 +52,258 @@ // layerTree2.Nodes.Add(terrainManagerNode); // } - #region wxl重构树形结构代码 + + - private TreeNode treeNode(string strTreeNodeText) - { - TreeNode treeNode = new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - return treeNode; - } -// private void appendToParent(TreeNodeCollection treeNodeCollection, ) - #endregion - private void initTreeView() +// private void initNode(string nodeName) +// { +// TreeNode nodeGroupElse1 = new TreeNode(); +// nodeGroupElse1.Text = nodeName; +// layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); +// +// TreeNode nodeGroupElse = new TreeNode(); +// nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; +// layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); +// } + +// private void initTreeNode(XmlNodeList Params) +// { +// foreach (XmlNode paramsNode in Params) //layers +// { +// foreach (XmlNode layerNode in paramsNode) //layer +// { +// initNode(layerNode.Attributes["label"].Value); +// } +// } +// +// initNode("基础图层"); +// initNode("其他"); +// } + +// private void FrmLayerControl_Load(object sender, EventArgs e) +// { +// +// initTreeView(); +// try +// { +// XmlDocument doc = new XmlDocument(); +// doc.Load(Application.StartupPath + "\\双屏设置.xml"); +// XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// +// initTreeNode(Params); +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// +// RefreshLayerAndTerrainTree(); +// } + private void FrmLayerControl_Load(object sender, EventArgs e) { layerTree1.Nodes.Clear(); layerTree2.Nodes.Clear(); - - //加载layertree2 - initLayerTree(out layerManagerNode1, "图层管理"); - layerTree1.Nodes.Add(layerManagerNode1); - initLayerTree(out terrainManagerNode1, "地形管理"); - layerTree1.Nodes.Add(terrainManagerNode1); - - initLayerTree(out layerManagerNode, "图层管理"); - layerTree2.Nodes.Add(layerManagerNode); - initLayerTree(out terrainManagerNode, "地形管理"); - layerTree2.Nodes.Add(terrainManagerNode); + TreeUtils.InitLayerTree(globeControl1, layerTree1, "实测数据"); + TreeUtils.InitLayerTree(globeControl2, layerTree2, "施工数据"); } - private void initNode(string nodeName) - { - TreeNode nodeGroupElse1 = new TreeNode(); - nodeGroupElse1.Text = nodeName; - layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); + #region wxl重构树形结构代码 - TreeNode nodeGroupElse = new TreeNode(); - nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; - layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); - } + /// + /// 构造tree,最多解析三层,可放在工具类中 - private void initTreeNode(XmlNodeList Params) - { - foreach (XmlNode paramsNode in Params) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - initNode(layerNode.Attributes["label"].Value); - } - } + /// 所属地球 + /// 要加载的树 + /// 数据来源,实测数据/施工数据/规划数据/红线数据,为空则展示全部 +// private void initTree(GSOGlobeControl gsoGlobeControl,TreeView treeView, string viewDatasrc) +// { +// treeView.Nodes.Clear(); +// LayerConfig layerConfig = Utility.layerConfig; +// List datasrcs = layerConfig.datasrcs; +// foreach (DataSrc datasrc in datasrcs) +// { +// if (viewDatasrc != null && !viewDatasrc.Trim().Equals("") && !datasrc.label.Equals(viewDatasrc)) continue; +// TreeNode rootNode = treeView.Nodes.Add(datasrc.label); +// List layerTypes = datasrc.layertypes; +// foreach (LayerType layerType in layerTypes) +// { +// TreeNode secNode = rootNode.Nodes.Add(layerType.label); +// List layers = layerType.layers; +// foreach (Layer layer in layers) +// { +// GSOLayer gsoLayer = gsoGlobeControl.Globe.Layers.GetLayerByCaption(layer.layer); +// if (gsoLayer == null) continue;//将不存在的去除 +// TreeNode node = new TreeNode(); +// node.Tag = gsoLayer; +// node.Text = layer.label; +// node.Checked = gsoLayer.Visible; +// if (gsoLayer.Visible) +// { +// secNode.Checked = true; +// rootNode.Checked = true; +// } +// secNode.Nodes.Add(node); +// } +// } +// } +// } - initNode("基础图层"); - initNode("其他"); - } + #endregion - private void FrmLayerControl_Load(object sender, EventArgs e) - { - initTreeView(); - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(Application.StartupPath + "\\双屏设置.xml"); - XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, +// TreeView layerTree) +// { +// try +// { +// for (int i = 0; i < nLayerCount; i++) +// { +// GSOLayer layer = globcontrol.Globe.Layers[i]; +// if (layer == null) continue; +// string layerName = layer.Name; +// TreeNode node = new TreeNode(); +// node.Tag = layer; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = layer.Caption; +// node.Checked = layer.Visible; +// +// bool isContains = false; +// for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) +// { +// if (!layerName.Contains("fttp:")) +// { +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || +// layerName.Contains("施工") || +// layerName.Contains("规划")) continue; +// break; +// case "layerTree2": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[j].Nodes.Add(node); +// isContains = true; +// break; +// } +// else +// { +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); +// isContains = true; +// break; +// } +// } +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || +// layerName.Contains("标注") || +// isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || +// layerName.Contains("景观") || layerName.Contains("红线")) +// continue; +// break; +// case "layerTree2": +// if (isContains != false || layerName.Contains("tempLgdData2")) +// continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); +// } +// +// for (int i = 0; i < nTerrainCount; i++) +// { +// GSOTerrain terrain = globcontrol.Globe.Terrains[i]; +// if (terrain == null) continue; +// TreeNode node = new TreeNode(); +// node.Tag = terrain; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = terrain.Caption; +// node.Checked = terrain.Visible; +// switch (layerTree.Name) +// { +// case "layerTree1": +// terrainManagerNode1.Nodes.Add(node); +// break; +// case "layerTree2": +// terrainManagerNode.Nodes.Add(node); +// break; +// default: +// break; +// } +// } +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// } - initTreeNode(Params); - } - catch (Exception ex) - { - LogError.PublishError(ex); - } +// private void initTreeNodeCheckedStatus(TreeView layerTreeView) +// { +// //节点选中状态控制 +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// if (node.Checked != true) continue; +// layerTreeView.Nodes[0].Checked = true; +// break; +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOTerrain layer = childNode.Tag as GSOTerrain; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// } - RefreshLayerAndTerrainTree(); - } - - private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, - TreeView layerTree) - { - try - { - for (int i = 0; i < nLayerCount; i++) - { - GSOLayer layer = globcontrol.Globe.Layers[i]; - if (layer == null) continue; - string layerName = layer.Name; - TreeNode node = new TreeNode(); - node.Tag = layer; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = layer.Caption; - node.Checked = layer.Visible; - - bool isContains = false; - for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) - { - if (!layerName.Contains("fttp:")) - { - switch (layerTree.Name) - { - case "layerTree1": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || - layerName.Contains("施工") || - layerName.Contains("规划")) continue; - break; - case "layerTree2": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[j].Nodes.Add(node); - isContains = true; - break; - } - else - { - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); - isContains = true; - break; - } - } - switch (layerTree.Name) - { - case "layerTree1": - if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || - layerName.Contains("标注") || - isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || - layerName.Contains("景观") || layerName.Contains("红线")) - continue; - break; - case "layerTree2": - if (isContains != false || layerName.Contains("tempLgdData2")) - continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); - } - - for (int i = 0; i < nTerrainCount; i++) - { - GSOTerrain terrain = globcontrol.Globe.Terrains[i]; - if (terrain == null) continue; - TreeNode node = new TreeNode(); - node.Tag = terrain; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = terrain.Caption; - node.Checked = terrain.Visible; - switch (layerTree.Name) - { - case "layerTree1": - terrainManagerNode1.Nodes.Add(node); - break; - case "layerTree2": - terrainManagerNode.Nodes.Add(node); - break; - default: - break; - } - } - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - - private void initTreeNodeCheckedStatus(TreeView layerTreeView) - { - //节点选中状态控制 - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - if (node.Checked != true) continue; - layerTreeView.Nodes[0].Checked = true; - break; - } - - foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOTerrain layer = childNode.Tag as GSOTerrain; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - } - - void exPandTreeNode() - { - layerManagerNode1.Expand(); - terrainManagerNode1.Expand(); - layerManagerNode.Expand(); - terrainManagerNode.Expand(); - } +// void exPandTreeNode() +// { +// layerManagerNode1.Expand(); +// terrainManagerNode1.Expand(); +// layerManagerNode.Expand(); +// terrainManagerNode.Expand(); +// } /// /// 刷新节点树 /// - private void RefreshLayerAndTerrainTree() - { - int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 - int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 - addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); - initTreeNodeCheckedStatus(layerTree1); - - int nLayerCount = globeControl2.Globe.Layers.Count; - int nTerrainCount = globeControl2.Globe.Terrains.Count; - addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); - initTreeNodeCheckedStatus(layerTree2); - - // 展开 - exPandTreeNode(); - } +// private void RefreshLayerAndTerrainTree() +// { +// int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 +// int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 +// addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); +// initTreeNodeCheckedStatus(layerTree1); +// +// int nLayerCount = globeControl2.Globe.Layers.Count; +// int nTerrainCount = globeControl2.Globe.Terrains.Count; +// addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); +// initTreeNodeCheckedStatus(layerTree2); +// +// // 展开 +// exPandTreeNode(); +// } /// /// 节点树复选框选中状态改变事件处理 @@ -289,144 +314,132 @@ { if (e.Action != TreeViewAction.Unknown) { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } + TreeUtils.TreeNodeCheckedChange(globeControl2,e.Node); + } + } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree2(e.Node, e.Node.Checked); + private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) + { + if (e.Action != TreeViewAction.Unknown) + { + TreeUtils.TreeNodeCheckedChange(globeControl1, e.Node); } } + + +// private void layerTree2_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree2(e.Node, e.Node.Checked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree1(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree1(childNode, isChecked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree2(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree2(childNode, isChecked); +// } +// } /// /// 节点树选中状态改变事件 /// /// /// - private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) - { - if (e.Action != TreeViewAction.Unknown) - { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } +// private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree1(e.Node, e.Node.Checked); +// } +// } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree1(e.Node, e.Node.Checked); - } - } - /// - /// 改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 - /// - /// - private void CheckParentNode(TreeNode curNode) - { - bool bChecked = false; - - if (curNode.Parent != null) - { - foreach (TreeNode node in curNode.Parent.Nodes) - { - if (node.Checked) - { - bChecked = true; - break; - } - } - if (bChecked) - { - curNode.Parent.Checked = true; - CheckParentNode(curNode.Parent); - } - else - { - curNode.Parent.Checked = false; - CheckParentNode(curNode.Parent); - } - } - } } } diff --git a/FrmMetadata.cs b/FrmMetadata.cs index 4d0d5cb..bb7c46c 100644 --- a/FrmMetadata.cs +++ b/FrmMetadata.cs @@ -12,12 +12,8 @@ { public partial class FrmMetadata : Office2007Form { - List pipelineLayerNames = new List();//线图层名称 - List workwellLayerNames = new List();//工井图层名称 - List valueLayerNames = new List();//阀门图层名称 - List instrumenLayerNames = new List();//附属物图层名称 - string filename = Utility.filename; - DataSet dataSet = new DataSet(); + + bool selectedLayer; public FrmMetadata() @@ -25,308 +21,33 @@ InitializeComponent(); loadTreeView(layerTree); } - private void FrmMetadata_Load(object sender, EventArgs e) - { - //this.ntLblC.Text = "nn"; - // loadTreeView(layerTree); - } private void loadTreeView(TreeView tv)//构建图层树 { - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - //tv.ShowPlusMinus = false; - - //tv.Nodes.Clear(); - tv.ShowLines = true; - // tv.ImageList = imageList1; - tv.CheckBoxes = false; - #region 三级 - - //foreach (XmlNode paramsNode in Params1) //layers - //{ - // foreach (XmlNode layerNode in paramsNode) //layer - // { - // TreeNode nodelayer = new TreeNode(); - // string layerName = layerNode.Attributes["label"].Value; - // nodelayer.Text = layerName; - - // if (layerNode.HasChildNodes != false) - // { - // tv.Nodes.Add(nodelayer); - // foreach (XmlNode layerchildNode in layerNode) //layerchild - // { - // if (layerchildNode.Name == "layerchild") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["type"].Value; - // string layerchildName = layerchildNode.Attributes["label"].Value; - // if (layerType == "locaserver") - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - - // } - // else - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // if (layerchildNode.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = boollayer; - // nodelayer.Nodes.Add(nodelayerchild); - // } - // } - // else if (layerchildNode.Name == "layertype") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["label"].Value; - // nodelayerchild.Text = layerType; - // nodelayerchild.Tag = layerType; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - // if (layerchildNode.HasChildNodes == true) - // { - // foreach (XmlNode childNodeLayer in layerchildNode) - // { - // TreeNode nodelayerchild1 = new TreeNode(); - // string layerName1 = childNodeLayer.Attributes["layer"].Value; - // string layerchildName = childNodeLayer.Attributes["label"].Value; - // string layerType1 = childNodeLayer.Attributes["type"].Value; - // if (childNodeLayer.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild1.Text = layerchildName; - // nodelayerchild1.Tag = layerType1 + "|" + layerName1; - // nodelayerchild1.Checked = boollayer; - // nodelayerchild.Nodes.Add(nodelayerchild1); - // } - // } - // } - - // } - // } - // else - // { - // tv.Nodes.Add(nodelayer); - // } - // } - - //} - - #endregion - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - TreeNode nodelayer = new TreeNode(); - string layerName = layerNode.Attributes["label"].Value; - nodelayer.Text = layerName; - - if (layerNode.HasChildNodes) - { - tv.Nodes.Add(nodelayer); - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - if (layerchildNode.Name == "layerchild") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["type"].Value; - string layerchildName = layerchildNode.Attributes["label"].Value; - if (layerType == "locaserver") - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - - } - else - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - if (layerchildNode.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - //nodelayerchild.Checked = boollayer; - nodelayer.Nodes.Add(nodelayerchild); - } - } - else if (layerchildNode.Name == "layertype") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["label"].Value; - nodelayerchild.Text = layerType; - nodelayerchild.Tag = layerType; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode) - { - if (childNodeLayer.HasChildNodes) - { - TreeNode nodelayerchild2 = new TreeNode(); - string layer = childNodeLayer.Attributes["label"].Value; - nodelayerchild2.Text = layer; - nodelayerchild2.Tag = layer; - nodelayerchild2.Checked = true; - nodelayerchild.Nodes.Add(nodelayerchild2); - foreach (XmlNode n in childNodeLayer) - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = n.Attributes["layer"].Value; - string layerchildName = n.Attributes["label"].Value; - string layerType1 = n.Attributes["type"].Value; - if (n.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (n.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (n.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (n.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild2.Nodes.Add(nodelayerchild1); - - } - } - else - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = childNodeLayer.Attributes["layer"].Value; - string layerchildName = childNodeLayer.Attributes["label"].Value; - string layerType1 = childNodeLayer.Attributes["type"].Value; - if (childNodeLayer.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild.Nodes.Add(nodelayerchild1); - - } - } - } - } - - } - } - else - { - tv.Nodes.Add(nodelayer); - } - } - - } - if (tv.Nodes.Count > 0) - { - //tv.Nodes[0].Expand(); - if (tv.Nodes.Count > 0) - { - foreach (TreeNode node in tv.Nodes) - { - //node.Expand(); - } - } - } - //tv.ExpandAll(); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } + //tv.ShowPlusMinus = false; + //tv.Nodes.Clear(); + // tv.ImageList = imageList1; + tv.ShowLines = true; + tv.CheckBoxes = false; + TreeUtils.InitLayerTree(null, tv, null); } - + /// + /// 点击父节点则展开,点击子节点则编辑元数据 + /// + /// + /// private void layerTree_AfterSelect(object sender, TreeViewEventArgs e) { - String layername = layerTree.SelectedNode.Text; - if (layerTree.SelectedNode.GetNodeCount(true) == 0) { - searchLayerInfo(layername); - - selectedLayer = true; - clearBtn.Hide(); - completeBtn.Hide(); + String layername = e.Node.Text; + if (e.Node.GetNodeCount(true) != 0) + { //点击父节点,则展开 + e.Node.Expand(); + return; } + searchLayerInfo(layername); + selectedLayer = true; + clearBtn.Hide(); + completeBtn.Hide(); } //查询元数据 private void searchLayerInfo(String layername) { @@ -335,8 +56,6 @@ + " casic_metadatalayer where casic_metadatacontent.\"LAYERID\" = casic_metadatalayer.\"LAYERID\" and casic_metadatalayer.\"LAYERNAME\"='" + layername+"'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; - if (table != null && table.Rows.Count > 0) { groupBox1.Text = layername; @@ -400,8 +119,6 @@ //判断此时layerTree有没有选中的图层 if (selectedLayer)//有选中的图层,获得其名 { - string name = layerTree.SelectedNode.Text; - OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "支持格式(*.xml)|*.xml|XML数据(*.xml)|"; dlg.Multiselect = true; @@ -419,31 +136,24 @@ //读入元数据 private void AddXMLMDdata(string strFilePath) { - try - { - dataSet.Clear(); //清空数据集中的内容 - dataSet.ReadXml(strFilePath); //读取XML文件中的内容 + DataSet dataSet = new DataSet(); + dataSet.ReadXml(strFilePath); //读取XML文件中的内容 - //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); - string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); - string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); - string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); - string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); + //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); + string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); + string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); + string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); + string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); - //this.titleLbl.Text = attrtitle; - consLblC.Text = attrcons; - descLblC.Text = attrdesc; - authorLblC.Text = attrauthor; - ntLblC.Text = attrnt; - //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); + //this.titleLbl.Text = attrtitle; + consLblC.Text = attrcons; + descLblC.Text = attrdesc; + authorLblC.Text = attrauthor; + ntLblC.Text = attrnt; + //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); - completeBtn.Visible = true; - //this.clearBtn.Visible = true; - } - catch (Exception e) - { - - } + completeBtn.Visible = true; + //this.clearBtn.Visible = true; } //新建/编辑元数据 private void editBtn_Click(object sender, EventArgs e) @@ -509,11 +219,7 @@ string sql = "select \"LAYERID\" from casic_metadatalayer where \"LAYERNAME\" = '" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - if (table != null && table.Rows.Count > 0)//已有该图层,属于编辑 - { - return false; - } - return true; + return table == null || table.Rows.Count <= 0; } //保存元数据 private void saveData(String method,String layername,String cons,String desc,String author,String nt) { @@ -539,17 +245,16 @@ string insertSQL = "insert into casic_metadatalayer values ('" + layerid + "','" + layername + "')";//+ string insertSQL2 = "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','" + desc + "','" + author + "','" + nt + "')"; // "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','"+desc+"','"+author+"','"+nt+"')"; - if ((OledbHelper.sqlExecuteNonQuery(insertSQL) > 0)&&(OledbHelper.sqlExecuteNonQuery(insertSQL2)>0)) - { - MessageBox.Show("保存元数据成功!"); + if ((OledbHelper.sqlExecuteNonQuery(insertSQL) <= 0) || + (OledbHelper.sqlExecuteNonQuery(insertSQL2) <= 0)) return; + MessageBox.Show("保存元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } else { //更新 string layeridSQL = "select layerid from casic_metadatalayer where LAYERNAME='"+layername+"'"; @@ -561,16 +266,14 @@ + "',casic_metadatacontent.MDAUTHOR ='" + author.Trim() + "',casic_metadatacontent.NT ='" + nt.Trim() + "' where casic_metadatacontent.LAYERID='" + layerid + "'"; - if (OledbHelper.sqlExecuteNonQuery(updateSQL) > 0) - { - MessageBox.Show("更新元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + if (OledbHelper.sqlExecuteNonQuery(updateSQL) <= 0) return; + MessageBox.Show("更新元数据成功!"); + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } } diff --git a/FrmMetadataStat.cs b/FrmMetadataStat.cs index cb19f84..c3c1359 100644 --- a/FrmMetadataStat.cs +++ b/FrmMetadataStat.cs @@ -2,16 +2,16 @@ using System.Collections; using System.Collections.Generic; using System.Data; +using System.Linq; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; -using System.Xml; using DevComponents.DotNetBar; namespace Cyberpipe { public partial class FrmMetadataStat : Office2007Form { - Dictionary dic = new Dictionary(); + public FrmMetadataStat() { InitializeComponent(); @@ -22,7 +22,7 @@ string sql = "select LAYERNAME from casic_metadataLayer where LAYERNAME like '%" + keywordsTxt.Text.Trim() + "%'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; + int num = 0; resultList.Clear(); consLblC.Text = ""; @@ -32,6 +32,7 @@ if (table != null && table.Rows.Count > 0) { + num = table.Rows.Count; for (int i = 0; i < num;i++ ) { resultList.Items.Add(table.Rows[i][0].ToString()); @@ -56,7 +57,8 @@ int metadataLayernum = statistMDLayer(); int nomdLayernum = layernum - metadataLayernum; //MessageBox.Show("共有多少层?" + layernum.ToString()+"=="+metadataLayernum.ToString()+"=="+nomdLayernum.ToString()); - dic.Clear(); +// dic.Clear(); + Dictionary dic = new Dictionary(); dic.Add("已建",metadataLayernum); dic.Add("未建", nomdLayernum); @@ -74,11 +76,9 @@ foreach (string key in dic.Keys) { - if (dic[key] != 0) - { - xlist.Add(key); - ylist.Add(dic[key]); - } + if (dic[key] == 0) continue; + xlist.Add(key); + ylist.Add(dic[key]); } chart1.Series[0].Points.DataBindXY(xlist, ylist); @@ -89,73 +89,15 @@ string sql = "select * from casic_metadataLayer"; DataTable table = OledbHelper.QueryTable(sql); - mdlayernum = table.Rows.Count; + if(table!=null)mdlayernum = table.Rows.Count; return mdlayernum; } //统计有多少个图层 - private int statistLayer() { - int layernum = 0; - - string filename = Utility.filename; - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - //MessageBox.Show(layerNode.Attributes["label"].Value); - - if (layerNode.HasChildNodes) - { - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - //MessageBox.Show(layerchildNode.Attributes["label"].Value); - if (layerchildNode.Name == "layerchild") - { - layernum++; - } - else if (layerchildNode.Name == "layertype") - { - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode)//layertype下的layerchild - { - //MessageBox.Show(childNodeLayer.Attributes["label"].Value); - if (childNodeLayer.HasChildNodes) - { - - foreach (XmlNode n in childNodeLayer) - { - layernum++; - } - } - else - { - - layernum++; - } - } - } - } - - } - } - } - - } - - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - return layernum; + private int statistLayer() + { + List datasrcs = Utility.layerConfig.datasrcs; + return datasrcs.SelectMany(datasrc => datasrc.layertypes).Sum(layerType => layerType.layers.Count); } //选择list @@ -174,7 +116,6 @@ + "join casic_metadatalayer on casic_metadatalayer.LAYERID = casic_metadatacontent.LAYERID " + "where casic_metadatalayer.LAYERNAME='" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; //MessageBox.Show(num.ToString()); if (table != null && table.Rows.Count > 0) { @@ -192,10 +133,5 @@ ntLblC.Text = ""; } } - - private void buttonX1_Click(object sender, EventArgs e) - { - drawChart(); - } } } diff --git a/FrmWait.Designer.cs b/FrmWait.Designer.cs index 99733ea..88f5a29 100644 --- a/FrmWait.Designer.cs +++ b/FrmWait.Designer.cs @@ -55,7 +55,6 @@ this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(0, 24); this.label1.TabIndex = 1; - this.label1.Click += new System.EventHandler(this.label1_Click); // // FrmWait // @@ -71,7 +70,7 @@ this.ShowIcon = false; this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; this.Text = "正在处理,请稍后..."; - this.Load += new System.EventHandler(this.FrmWait_Load); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmWait_FormClosing); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); diff --git a/FrmWait.cs b/FrmWait.cs index d3b7a48..d645ae4 100644 --- a/FrmWait.cs +++ b/FrmWait.cs @@ -32,27 +32,6 @@ frm = null; } - private void FrmWait_Load(object sender, EventArgs e) - { - - - } - - - private void labelX2_Click(object sender, EventArgs e) - { - - } - - private void progressBarX1_Click(object sender, EventArgs e) - { - - } - - private void label1_Click(object sender, EventArgs e) - { - - } } } diff --git a/FrmYJSHTC.cs b/FrmYJSHTC.cs index 3572371..27b7186 100644 --- a/FrmYJSHTC.cs +++ b/FrmYJSHTC.cs @@ -143,9 +143,7 @@ for (int i = ctl1.Globe.Layers.Count - 1; i >= 0; i--) { if (ctl1.Globe.Layers[i].Caption == str) - { ctl1.Globe.Layers.Remove(ctl1.Globe.Layers[i]); - } } foreach (TreeNode n in layerTree.Nodes) @@ -155,20 +153,15 @@ for (int i = 0; i < n.Nodes.Count; i++) { if (n.Nodes[i].Text == str) - { n.Nodes[i].Remove(); - } } } } string sql = "delete from casic_audit_result where SH_LAYER = '" + str + "'"; - OledbHelper.sqlExecuteNonQuery(sql); - } } - } } diff --git a/MainFrm.cs b/MainFrm.cs index bc962c4..29a3eb3 100644 --- a/MainFrm.cs +++ b/MainFrm.cs @@ -2,7 +2,6 @@ using System.Collections; using System.Collections.Generic; using System.Data; -using System.Data.OracleClient; using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; @@ -13,7 +12,6 @@ using System.Text; using System.Threading; using System.Windows.Forms; -using System.Xml; using Cyberpipe.Forms; using DevComponents.DotNetBar; using GeoScene.Data; @@ -28,10 +26,10 @@ { TreeNode layerManagerNode; bool m_bFullScreen; - + GSOGlobeControl globeControl1; GSOGlobeControl globeControl2; - private GSOHudButton legend;//定义图例 + private GSOHudButton legend; //定义图例 private GSOHudButton btnToolNone; private GSOHudButton btnToolSelect; ToolTip tooltip1; @@ -42,20 +40,20 @@ GSOBalloon featureTooltip2; GSOBalloonEx balloonEx2; - GSOLayer layerTemp; - GSOLayer layerTemp2; + GSOLayer layerTemp;//wxl注释,Globe1的临时图层 + GSOLayer layerTemp2;//wxl注释,Globe2的临时图层 FrmRedlineResult frmredResult = null; FrmMnModify frmModify; public bool frmRedlineResult = false; public bool boolfrmShResult; public bool boolfrmModify; - public static string m_CurrentQueryLayer;//定义当前查询的图层 + public static string m_CurrentQueryLayer; //定义当前查询的图层 //定位和闪烁初始化定义 private EnumDesignMode enumDesignMode; //模拟规划设计模式 - private string trackflag;//定义阀门查询个数 + private string trackflag; //定义阀门查询个数 //记录沿线飞行设置 //int m_nFlyMode = 2; @@ -67,7 +65,7 @@ Double m_dDigPitWidthAlongLine = 6; Boolean m_bDigPitByDepth = true; //选择管线 - int selectState;//wxl 注释,表示是否已经计算过净距等了,1已计算,0未计算 + int selectState; //wxl 注释,表示是否已经计算过净距等了,1已计算,0未计算 //private OracleConnection connBackup = null; //数据集合 @@ -89,8 +87,8 @@ //双屏对比 //bool zhanshi=false; Thread t = null; - private GSOHudButton legendSC;//定义图例 - private GSOHudButton legendSG;//定义图例 + private GSOHudButton legendSC; //定义图例 + private GSOHudButton legendSG; //定义图例 //管纵图 private GSOHudButton lendendGZ50; private GSOHudButton lendendGZ36; @@ -102,12 +100,13 @@ GSOGeoPoint3D bsqPT; - FrmYJSHTC frmSh;//一键审核窗口全局变量wxl - FrmWait frmWait;//一键审核等待窗口 + FrmYJSHTC frmSh; //一键审核窗口全局变量wxl + FrmWait frmWait; //一键审核等待窗口 //FrmWait frmWait2 = null;//文档操作等待窗口 float mouseDownX1, mouseDownY1; float mouseDownX2, mouseDownY2; + /// /// /// @@ -164,8 +163,9 @@ RigthMenuSet(); MenuSet(); - + } + /// /// 右屏中添加管纵图片 /// @@ -259,6 +259,7 @@ } #region 区域分析 + if (Utility.userRole.IndexOf("区域分析") < 0) { toolRightMenu.Items.Remove(区域分析ToolStripMenuItem); @@ -278,9 +279,11 @@ 区域分析ToolStripMenuItem.DropDownItems.Remove(无源淹没分析ToolStripMenuItem); } } + #endregion #region 视域分析 + if (Utility.userRole.IndexOf("视域分析") < 0) { toolRightMenu.Items.Remove(视域分析ToolStripMenuItem); @@ -300,9 +303,11 @@ 视域分析ToolStripMenuItem.DropDownItems.Remove(可视包络分析ToolStripMenuItem); } } + #endregion #region 开发分析 + if (Utility.userRole.IndexOf("开挖分析") < 0) { toolRightMenu.Items.Remove(开挖分析ToolStripMenuItem); @@ -334,9 +339,11 @@ 开挖分析ToolStripMenuItem.DropDownItems.Remove(删除隧道ToolStripMenuItem); } } + #endregion #region 拓扑分析 + if (Utility.userRole.IndexOf("拓扑分析") < 0) { toolRightMenu.Items.Remove(拓扑分析ToolStripMenuItem); @@ -372,9 +379,11 @@ 拓扑分析ToolStripMenuItem.DropDownItems.Remove(爆管分析ToolStripMenuItem); } } + #endregion #region 断面分析 + if (Utility.userRole.IndexOf("断面分析") < 0) { toolRightMenu.Items.Remove(断面分析ToolStripMenuItem); @@ -398,9 +407,11 @@ 断面分析ToolStripMenuItem.DropDownItems.Remove(基线剖面分析ToolStripMenuItem); } } + #endregion #region 绘制区域统计 + if (Utility.userRole.IndexOf("绘制区域统计") < 0) { toolRightMenu.Items.Remove(绘制区域统计ToolStripMenuItem); @@ -445,9 +456,11 @@ } } + #endregion #region 全区域统计 + if (Utility.userRole.IndexOf("全区域统计") < 0) { toolRightMenu.Items.Remove(全区域统计ToolStripMenuItem); @@ -492,9 +505,11 @@ } } + #endregion #region 查询 + if (Utility.userRole.IndexOf("查询") < 0) { toolRightMenu.Items.Remove(查询ToolStripMenuItem); @@ -542,9 +557,11 @@ 查询ToolStripMenuItem.DropDownItems.Remove(附属物查询ToolStripMenuItem); } } + #endregion #region 标注 + if (Utility.userRole.IndexOf("标注") < 0) { toolRightMenu.Items.Remove(标注ToolStripMenuItem); @@ -592,9 +609,11 @@ 标注ToolStripMenuItem.DropDownItems.Remove(标注管理ToolStripMenuItem); } } + #endregion #region 飞行 + if (Utility.userRole.IndexOf("飞行") < 0) { toolRightMenu.Items.Remove(飞行ToolStripMenuItem); @@ -618,9 +637,11 @@ 飞行ToolStripMenuItem.DropDownItems.Remove(绕眼睛飞行ToolStripMenuItem); } } + #endregion #region 编辑 + if (Utility.userRole.IndexOf("编辑") < 0) { toolRightMenu.Items.Remove(编辑ToolStripMenuItem); @@ -656,9 +677,11 @@ 编辑ToolStripMenuItem.DropDownItems.Remove(删除模型ToolStripMenuItem); } } + #endregion #region 量算 + if (Utility.userRole.IndexOf("量算") < 0) { toolRightMenu.Items.Remove(量算ToolStripMenuItem); @@ -694,6 +717,7 @@ 量算ToolStripMenuItem.DropDownItems.Remove(地表面积ToolStripMenuItem1); } } + #endregion } @@ -701,6 +725,7 @@ { #region 权限管理 + if (Utility.userRole.IndexOf("权限管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem2); @@ -734,9 +759,11 @@ } } + #endregion #region 基础工具 + if (Utility.userRole.IndexOf("基础工具") < 0) { ribbonControl1.Items.Remove(ribbonTabItem1); @@ -781,37 +808,47 @@ } } + #endregion #region 一键审核 + if (Utility.userRole.IndexOf("一键审核") < 0) { ribbonControl1.Items.Remove(ribbonTabItem11); } + #endregion #region 红线审核 + if (Utility.userRole.IndexOf("红线审核") < 0) { ribbonControl1.Items.Remove(ribbonTabItem6); } + #endregion #region 双屏对比 + if (Utility.userRole.IndexOf("双屏对比") < 0) { ribbonControl1.Items.Remove(ribbonTabItem9); } + #endregion #region 文档管理 + if (Utility.userRole.IndexOf("文档管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem4); } + #endregion #region 基础管理 + if (Utility.userRole.IndexOf("基础管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem14); @@ -841,6 +878,7 @@ } #region Fan Zhang 重构现有代码 + //初始化控件布局 private void initLayout() { @@ -848,37 +886,37 @@ double dsw = SW; if (SW > 1440) { - double myScreen = dsw / 1440; - buttonX1.Width = (int)(buttonX1.Width * myScreen); - buttonX2.Width = (int)(buttonX2.Width * myScreen); - buttonX4.Width = (int)(buttonX4.Width * myScreen); - buttonX5.Width = (int)(buttonX5.Width * myScreen); - buttonX6.Width = (int)(buttonX6.Width * myScreen); - buttonX7.Width = (int)(buttonX8.Width * myScreen); - buttonX8.Width = (int)(buttonX8.Width * myScreen); - buttonX9.Width = (int)(buttonX9.Width * myScreen); - buttonX12.Width = (int)(buttonX12.Width * myScreen); - buttonX14.Width = (int)(buttonX14.Width * myScreen); - buttonX15.Width = (int)(buttonX15.Width * myScreen); - buttonX16.Width = (int)(buttonX16.Width * myScreen); - buttonX17.Width = (int)(buttonX17.Width * myScreen); + double myScreen = dsw/1440; + buttonX1.Width = (int) (buttonX1.Width*myScreen); + buttonX2.Width = (int) (buttonX2.Width*myScreen); + buttonX4.Width = (int) (buttonX4.Width*myScreen); + buttonX5.Width = (int) (buttonX5.Width*myScreen); + buttonX6.Width = (int) (buttonX6.Width*myScreen); + buttonX7.Width = (int) (buttonX8.Width*myScreen); + buttonX8.Width = (int) (buttonX8.Width*myScreen); + buttonX9.Width = (int) (buttonX9.Width*myScreen); + buttonX12.Width = (int) (buttonX12.Width*myScreen); + buttonX14.Width = (int) (buttonX14.Width*myScreen); + buttonX15.Width = (int) (buttonX15.Width*myScreen); + buttonX16.Width = (int) (buttonX16.Width*myScreen); + buttonX17.Width = (int) (buttonX17.Width*myScreen); - labelX1.Width = (int)(labelX1.Width * myScreen); - labelX2.Width = (int)(labelX2.Width * myScreen); - labelX3.Width = (int)(labelX3.Width * myScreen); - labelX6.Width = (int)(labelX6.Width * myScreen); - labelX8.Width = (int)(labelX8.Width * myScreen); - labelX9.Width = (int)(labelX9.Width * myScreen); - labelX12.Width = (int)(labelX12.Width * myScreen); - labelX13.Width = (int)(labelX13.Width * myScreen); - labelX14.Width = (int)(labelX14.Width * myScreen); - labelX16.Width = (int)(labelX16.Width * myScreen); - labelX17.Width = (int)(labelX17.Width * myScreen); - labelX11.Width = (int)(labelX11.Width * myScreen); - labelX19.Width = (int)(labelX19.Width * myScreen); - labelX21.Width = (int)(labelX21.Width * myScreen); - labelX22.Width = (int)(labelX22.Width * myScreen); - labelX24.Width = (int)(labelX24.Width * myScreen); + labelX1.Width = (int) (labelX1.Width*myScreen); + labelX2.Width = (int) (labelX2.Width*myScreen); + labelX3.Width = (int) (labelX3.Width*myScreen); + labelX6.Width = (int) (labelX6.Width*myScreen); + labelX8.Width = (int) (labelX8.Width*myScreen); + labelX9.Width = (int) (labelX9.Width*myScreen); + labelX12.Width = (int) (labelX12.Width*myScreen); + labelX13.Width = (int) (labelX13.Width*myScreen); + labelX14.Width = (int) (labelX14.Width*myScreen); + labelX16.Width = (int) (labelX16.Width*myScreen); + labelX17.Width = (int) (labelX17.Width*myScreen); + labelX11.Width = (int) (labelX11.Width*myScreen); + labelX19.Width = (int) (labelX19.Width*myScreen); + labelX21.Width = (int) (labelX21.Width*myScreen); + labelX22.Width = (int) (labelX22.Width*myScreen); + labelX24.Width = (int) (labelX24.Width*myScreen); } sideBar1.Visible = false; sideBar1.ExpandedPanel = sideBarPanelItem3; @@ -899,7 +937,7 @@ splitContainer1.Panel2Collapsed = true; - buttonItem87.Checked = true;//默认地上模式 + buttonItem87.Checked = true; //默认地上模式 ribbonTabItem1.Select(); //初始化状态为浏览 sideBarPanelItem3.Visible = false; @@ -951,7 +989,7 @@ //图例 legend = new GSOHudButton(); - legend.SetImage(Application.StartupPath + "/Resource/图例P.jpg");//图例P + legend.SetImage(Application.StartupPath + "/Resource/图例P.jpg"); //图例P legend.SetOffset(0, 15); legend.MinOpaque = 1; legend.MaxOpaque = 1; @@ -1002,7 +1040,7 @@ globeControl1.Globe.UserBackgroundColor = Color.White; globeControl1.Globe.FlyAlongLineSpeed = m_dFlyAlongLineSpeed; globeControl1.Globe.FlyAlongLineRotateSpeed = m_dFlyAlongLineRotateSpeed; - globeControl1.Globe.FlyToPointSpeed = globeControl1.Globe.FlyToPointSpeed * 3; + globeControl1.Globe.FlyToPointSpeed = globeControl1.Globe.FlyToPointSpeed*3; globeControl1.Globe.EditSnapObject = true; globeControl1.Globe.IsReleaseMemOutOfView = true; globeControl1.Globe.ControlPanel.Visible = true; @@ -1021,18 +1059,22 @@ globeControl2.Globe.UserBackgroundColor = Color.White; globeControl2.Globe.FlyAlongLineSpeed = m_dFlyAlongLineSpeed; globeControl2.Globe.FlyAlongLineRotateSpeed = m_dFlyAlongLineRotateSpeed; - globeControl2.Globe.FlyToPointSpeed = globeControl2.Globe.FlyToPointSpeed * 3; + globeControl2.Globe.FlyToPointSpeed = globeControl2.Globe.FlyToPointSpeed*3; globeControl2.Globe.EditSnapObject = true; globeControl2.Globe.IsReleaseMemOutOfView = true; globeControl2.Globe.ControlPanel.Visible = false; - GSOSimplePolygonStyle3D trackingRectStyle = globeControl1.Globe.TrackRectTool.TrackingPolygonStyle as GSOSimplePolygonStyle3D; + GSOSimplePolygonStyle3D trackingRectStyle = + globeControl1.Globe.TrackRectTool.TrackingPolygonStyle as GSOSimplePolygonStyle3D; trackingRectStyle.FillColor = Color.FromArgb(0, 0, 0, 0); - GSOSimplePolygonStyle3D trackRectStyle = globeControl1.Globe.TrackRectTool.PolygonStyle as GSOSimplePolygonStyle3D; + GSOSimplePolygonStyle3D trackRectStyle = + globeControl1.Globe.TrackRectTool.PolygonStyle as GSOSimplePolygonStyle3D; trackRectStyle.FillColor = Color.FromArgb(0, 0, 0, 0); - GSOSimpleLineStyle3D trackRectLineStyle = globeControl1.Globe.TrackRectTool.PolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; + GSOSimpleLineStyle3D trackRectLineStyle = + globeControl1.Globe.TrackRectTool.PolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; trackRectLineStyle.LineType = EnumLineType.Solid; - GSOSimpleLineStyle3D trackRectLineStyle1 = globeControl1.Globe.TrackRectTool.TrackingPolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; + GSOSimpleLineStyle3D trackRectLineStyle1 = + globeControl1.Globe.TrackRectTool.TrackingPolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; trackRectLineStyle1.LineType = EnumLineType.Solid; trackRectLineStyle1.LineColor = Color.FromArgb(0, 174, 255); trackRectLineStyle1.LineWidth = 1; @@ -1107,7 +1149,7 @@ //加载两个地球数据 private void loadData() { - Thread t1 = new Thread(doLoadDataForGlobalControl1); + Thread t1 = new Thread(doLoadDataForGlobalControl); t1.IsBackground = true; t1.Start(); } @@ -1119,30 +1161,22 @@ globeControl1.Globe.ConnectServer(Utility.serverip, Utility.serverport, "", ""); //加载locaServer中的数据 globeControl2.Globe.ConnectServer(Utility.serverip, Utility.serverport, "", ""); //加载locaServer中的数据 //初始化TreeView - // 勾选实测图层 - foreach (TreeNode tn in layerTree.Nodes) - { - if (tn.Nodes.Count <= 0) continue; - if (tn.Text != "实测数据") continue; - tn.Checked = true; - foreach (TreeNode tnChild in tn.Nodes) - { - tnChild.Checked = true; - foreach (TreeNode tnGrandChild in tnChild.Nodes) - { - tnGrandChild.Checked = true; - } - } - } - } - private void doLoadDataForGlobalControl1() + initLayerTree(); + } + /// + /// 加载地球1、2的图层 + /// + private void doLoadDataForGlobalControl() { try { globeControl1.Globe.Layers.MoveDown(10000); //加载实测管线数据 - Utility.dataSource = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.DBServer.Trim() + "/" + Utility.dbdatabase.Trim(), "", "", Utility.userID, Utility.DBPassword); + Utility.dataSource = + globeControl1.Globe.DataManager.OpenOracleDataSource( + Utility.DBServer.Trim() + "/" + Utility.dbdatabase.Trim(), "", "", Utility.userID, + Utility.DBPassword); if (Utility.dataSource != null) { @@ -1160,7 +1194,9 @@ globeControl1.Globe.Layers.GetLayerByCaption("红线").Visible = false; //globleControl1中加载规划数据 - GSODataSource ghDS = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.ghdbip + "/" + Utility.ghdbname, "", "", Utility.ghdbuser, Utility.ghdbpwd); + GSODataSource ghDS = + globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.ghdbip + "/" + Utility.ghdbname, "", "", + Utility.ghdbuser, Utility.ghdbpwd); if (ghDS != null) { for (int j = 0; j < ghDS.DatasetCount; j++) @@ -1176,13 +1212,16 @@ } //globeControl1,globeControl2中加载施工数据 - GSODataSource sgDS = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.sgdbip + "/" + Utility.sgdbname, "", "", Utility.sgdbuser, Utility.sgdbpwd); + GSODataSource sgDS = + globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.sgdbip + "/" + Utility.sgdbname, "", "", + Utility.sgdbuser, Utility.sgdbpwd); if (sgDS != null) { for (int m = 0; m < sgDS.DatasetCount; m++) { GSODataset dataset = sgDS.GetDatasetAt(m); - if (dataset != null && !dataset.Caption.Contains("SH") && Utility.dictionaryNetLayerNameAndCaption.ContainsKey(dataset.Caption)) + if (dataset != null && !dataset.Caption.Contains("SH") && + Utility.dictionaryNetLayerNameAndCaption.ContainsKey(dataset.Caption)) { dataset.Caption = dataset.Name; globeControl1.Globe.Layers.Add(dataset); @@ -1196,12 +1235,12 @@ // LoadDataForGlobalControl ss = connectServer; // ss(); - + this.Invoke((EventHandler) delegate { connectServer(); }); - + } catch (Exception ex) @@ -1212,67 +1251,17 @@ private void initLayerTree() { + layerTree.Nodes.Clear(); //加载临时图层节点 layerManagerNode = new TreeNode(); layerManagerNode.ImageIndex = 0; layerManagerNode.SelectedImageIndex = 0; layerManagerNode.Checked = true; layerManagerNode.Text = "临时图层"; + layerManagerNode.Tag = layerTemp; layerTree.Nodes.Add(layerManagerNode); - XmlDocument doc = new XmlDocument(); - doc.Load(Utility.filename); - XmlNodeList xmlLayerNodes = doc.SelectNodes("//layer"); - - foreach (XmlNode xmlLayerNode in xmlLayerNodes) - { - - //TODO LIST:创建一级TreeNode(实测、规划、施工) - TreeNode nodelayer = new TreeNode(); - string layerName = xmlLayerNode.Attributes["label"].Value; - nodelayer.Text = layerName; - nodelayer.Checked = false; - layerTree.Nodes.Add(nodelayer); - - XmlNodeList xmlChildLayerNodes = xmlLayerNode.ChildNodes; - foreach (XmlNode xmlChildLayerNode in xmlChildLayerNodes) - { - //TODO LIST:创建二级TreeNode节点 - TreeNode secondLevelNode = new TreeNode(); - string layerType = xmlChildLayerNode.Attributes["label"].Value; - secondLevelNode.Text = layerType; - - if (xmlChildLayerNode.Attributes["type"] != null) - { //道路图层特殊处理 - string type = xmlChildLayerNode.Attributes["type"].Value; - secondLevelNode.Tag = type + "|" + layerType; - } - else - { - secondLevelNode.Tag = layerType; - } - secondLevelNode.Checked = false; - nodelayer.Nodes.Add(secondLevelNode); - - XmlNodeList xmlActitualLayerNodes = xmlChildLayerNode.ChildNodes; - - foreach (XmlNode xmlActitualLayerNode in xmlActitualLayerNodes) - { - //TODO LIST:创建三级图层节点 - TreeNode layerNode = new TreeNode(); - string actutallylayerType = xmlActitualLayerNode.Attributes["type"].Value; - string actutallylayerName = xmlActitualLayerNode.Attributes["layer"].Value; - string actutallyLabelName = xmlActitualLayerNode.Attributes["label"].Value; - - layerNode.Text = actutallyLabelName; - layerNode.Tag = layerType + "|" + actutallyLabelName; - layerNode.Checked = false; - secondLevelNode.Nodes.Add(layerNode); - } - - } - - } + TreeUtils.InitLayerTree(globeControl1, layerTree, null); } @@ -1298,7 +1287,8 @@ for (int i = 0; i < markerStrs.Length; i++) { if (!File.Exists(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd")) continue; - GSOLayer markerLayer = globeControl1.Globe.Layers.Add(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd"); + GSOLayer markerLayer = + globeControl1.Globe.Layers.Add(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd"); if (markerLayer == null) continue; TreeNode node1 = new TreeNode(); node1.Text = markerLayer.Caption; @@ -1312,9 +1302,11 @@ private void MainFrm_Load(object sender, EventArgs e) { + + layerTree.Nodes.Add("正在加载,请稍后……");//树状图加载在图层加载之后,故增加提示 initGlobalControl(); //initGlobalMap(); - initLayerTree(); +// initLayerTree(); initMarkerTree(); initLayout(); loadData(); @@ -1383,7 +1375,7 @@ tempnode.Checked = node.Checked ? feature.Visible : false; tempnode.Tag = feature; node.Nodes.Add(tempnode); - GSOFeatureFolder featureFolder = (GSOFeatureFolder)feature; + GSOFeatureFolder featureFolder = (GSOFeatureFolder) feature; VisitFeature3Ds(featureFolder.Features, tempnode); } else @@ -1444,7 +1436,7 @@ /// Boolean CheckDatasetGeoReference(GSODataset dataset, string strDataPath) { - + if (dataset.GeoReferenceType != EnumGeoReferenceType.Flat) return true; Boolean bSuccess = false; if (MessageBox.Show("数据没有空间参考信息,请设置空间参考信息!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) != @@ -1498,7 +1490,7 @@ dlg.Filter = "输出JPEG(*.jpg)|*.jpg|输出PNG(*.png)|*.png|输出BMP(*.bmp)|*.bmp|输出BMP(*.gif)|*.gif"; if (dlg.ShowDialog() == DialogResult.OK) { - string extension = Path.GetExtension(dlg.FileName);//扩展名 + string extension = Path.GetExtension(dlg.FileName); //扩展名 switch (extension) { case ".jpg": @@ -1520,6 +1512,7 @@ globeControl1.Globe.Action = EnumAction3D.ActionNull; globeControl1.Globe.MouseRoamingEnable = true; } + /// /// 定位正北正90度俯视 /// @@ -1548,7 +1541,6 @@ void globeControl1_HudControlMouseIntoEvent(object sender, HudControlMouseIntoEventArgs e) { - GSOHudButton btn = e.HudControl as GSOHudButton; tooltip1 = new ToolTip(); switch (e.HudControl.Name) { @@ -1573,163 +1565,46 @@ break; } } - /// - /// layerTree选中后事件处理 - /// - /// - /// + + #region wxl 重构树形结构代码 + private void layerTree_AfterCheck(object sender, TreeViewEventArgs e) { - if (e.Node.Tag != null) + if (e.Action != TreeViewAction.Unknown) { - if (e.Node.Tag.ToString().Contains("|")) - { - string nodeTag = e.Node.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(nodeTag); - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - if (e.Node.Tag is GSOFeature) - { - if (e.Node.Nodes.Count == 0) - { - GSOFeature feat = e.Node.Tag as GSOFeature; - feat.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - } - CheckControl(e); - } - /// - /// 树节点选中方法 - /// - /// - private void CheckControl(TreeViewEventArgs e) - { - if (e.Action == TreeViewAction.Unknown||e.Node == null || Convert.IsDBNull(e.Node)) return; - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - { - CheckAllChildNodes(e.Node, e.Node.Checked); - } - } - /// - /// 改变所有子节点的状态 - /// - /// - /// - private void CheckAllChildNodes(TreeNode pn, bool IsChecked) - { - foreach (TreeNode tn in pn.Nodes) - { - tn.Checked = IsChecked; - - if (tn.Nodes.Count > 0) - { - CheckAllChildNodes(tn, IsChecked); - } + TreeUtils.TreeNodeCheckedChange(globeControl1, e.Node); } } - //改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 - private void CheckParentNode(TreeNode curNode) - { - bool bChecked = false; - - if (curNode.Parent == null) return; - foreach (TreeNode node in curNode.Parent.Nodes) - { - if (node.Checked) - { - bChecked = true; - break; - } - } - - if (bChecked) - { - curNode.Parent.Checked = true; - CheckParentNode(curNode.Parent); - } - else - { - curNode.Parent.Checked = false; - CheckParentNode(curNode.Parent); - } - } - + #endregion private void layerTree_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (e.Button != MouseButtons.Right) return; layerTree.SelectedNode = e.Node; - if (e.Node.Tag == null) return; - if (e.Button == MouseButtons.Right && e.Node.Tag.ToString().Contains("|")) + if (e.Node.Tag == null || e.Node.Parent == null) return; //排除无图层节点和第一级节点 + + //来自locaserver的数据,直接返回就行了,目前只有一个180fd,暂时单独处理 + GSOLayer gsoLayer = e.Node.Tag as GSOLayer; + if (gsoLayer == null || gsoLayer.Caption.Equals(Utility.roadLayerName)) return; + if (e.Node.Parent.Text.Equals("临时图层") || e.Node.Parent.Text.Equals("我的地标")) { - - if (e.Node.Tag.ToString().Split('|')[0] == "locaserver") - { - - foreach (ToolStripItem item in layerNodeContexMenu.Items) - { - item.Visible = false; - } - return; - - } - - if (e.Node.Tag.ToString().Split('|')[0] == "new") - { - LayerEditableMenuItem.Enabled = true; - foreach (ToolStripItem item in layerNodeContexMenu.Items) - { - item.Visible = false; - } - //LayerSelectableMenuItem.Visible = true; - //LayerEditableMenuItem.Visible = true; - RemoveLayer.Visible = true; - RefreshLayerFeatureListMenuItem.Visible = true; - //SaveLayerMenuItem.Visible = true; - //LayerFlyMenuItem.Visible = true; - } - + //临时图层下的子节点应该展示的 + contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); + contextMenuStripDeleteLayerNode.Tag = e.Node; + } + else + { LayerSelectableMenuItem.Visible = true; LayerEditableMenuItem.Visible = true; SaveLayerMenuItem.Visible = true; LayerFlyMenuItem.Visible = true; 导出CADToolStripMenuItem1.Visible = true; - layerNodeContexMenu.Show(layerTree, e.X, e.Y); layerNodeContexMenu.Tag = e.Node; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(e.Node.Tag.ToString().Split('|')[1]); - if (layer != null) - { - LayerSelectableMenuItem.Checked = layer.Selectable; - LayerEditableMenuItem.Checked = layer.Editable; - } + LayerSelectableMenuItem.Checked = gsoLayer.Selectable; + LayerEditableMenuItem.Checked = gsoLayer.Editable; } - else - { - if (e.Node.Tag is GSOLayer && e.Node.Parent != null && e.Node.Parent.Text.Trim() == "临时图层") - { - contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); - contextMenuStripDeleteLayerNode.Tag = e.Node; - } - else if (e.Node.Tag is GSOFeature && e.Node.Parent != null && e.Node.Parent.Text.Trim() == "我的地标") - { - contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); - contextMenuStripDeleteLayerNode.Tag = e.Node; - } - } + } /// @@ -1740,75 +1615,61 @@ private void 删除ToolStripMenuItem2_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "临时图层") + if (node == null || node.Parent == null) return; + if (node.Parent.Text.Trim() == "临时图层") { - if (node.Tag is GSOLayer) - { - GSOLayer layer = node.Tag as GSOLayer; - - for (int i = globeControl1.Globe.Layers.Count - 1; i >= 0; i--) - { - if (globeControl1.Globe.Layers[i].Caption == layer.Caption) - { - globeControl1.Globe.Layers.Remove(globeControl1.Globe.Layers[i]); - } - } - - globeControl1.Globe.Refresh(); - - node.Remove(); - } - } - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "我的地标") + if (!(node.Tag is GSOLayer)) return; + GSOLayer layer = node.Tag as GSOLayer; + globeControl1.Globe.Layers.Remove(layer); + globeControl1.Globe.Refresh(); + node.Remove(); + }else if (node.Parent.Text.Trim() == "我的地标") { - if (node.Tag is GSOFeature) - { - GSOFeature f = node.Tag as GSOFeature; - f.Delete(); - globeControl1.Globe.Refresh(); - - node.Remove(); - } + if (!(node.Tag is GSOFeature)) return; + GSOFeature f = node.Tag as GSOFeature; + f.Delete(); + globeControl1.Globe.Refresh(); + node.Remove(); } + } private void 可编辑ToolStripMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "临时图层") - { - if (node.Tag is GSOLayer) - { - GSOLayer layer = node.Tag as GSOLayer; - - 可编辑ToolStripMenuItem.Checked = !可编辑ToolStripMenuItem.Checked; - layer.Editable = 可编辑ToolStripMenuItem.Checked; - } - } + if (node == null || + node.Parent == null || + node.Parent.Text.Trim() != "临时图层" || !(node.Tag is GSOLayer)) return; + GSOLayer layer = node.Tag as GSOLayer; + 可编辑ToolStripMenuItem.Checked = !可编辑ToolStripMenuItem.Checked; + layer.Editable = 可编辑ToolStripMenuItem.Checked; } private void 保存ToolStripMenuItem_Click(object sender, EventArgs e) { - //TreeNode node = layerNodeContexMenu.Tag as TreeNode; - TreeNode node = contextMenuStripDeleteLayerNode.Tag as TreeNode; - - Int32 nIndex = node.Index; - string layerCaption = node.Text;//.Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); +// TreeNode node = contextMenuStripDeleteLayerNode.Tag as TreeNode; + TreeNode node = layerTree.SelectedNode; + if (node == null||node.Tag==null) return; + GSOLayer layer = node.Tag as GSOLayer; + if (layer == null) return; layer.Dataset.Save(); } - + //TODO LIST: wxl? Tag更正 private void 定位ToolStripMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - - if (node == null) return; + if (node == null||node.Parent==null) return; if (node.Parent.Text.Trim() == "临时图层") { - GSOLayer lsLayer = globeControl1.Globe.Layers.GetLayerByCaption(node.Text); + GSOLayer lsLayer = node.Tag as GSOLayer; + if (lsLayer == null) + { + LogHelper.WriteLog(typeof(MainFrm),"要定位的临时图层不存在:"+node.Text); + return; + } double x = lsLayer.LatLonBounds.Center.X; double y = lsLayer.LatLonBounds.Center.Y; - if (x == 0 && y == 0) + if (x.Equals(0) && y.Equals(0)) { x = lsLayer.Bounds.Center.X; y = lsLayer.Bounds.Center.Y; @@ -1818,20 +1679,14 @@ } else { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); - + GSOLayer layer = node.Tag as GSOLayer; if (layer == null) return; - if (layer.Caption == "红线") + if (layer.Caption.Equals("红线")) { globeControl1.Globe.FlyToPosition(new GSOPoint3d(120.610963, 31.188121, 50), EnumAltitudeMode.Absolute, -4, 50, 1000); globeControl1.Globe.FlyToPointSpeed = 10000000; globeControl1.Globe.Action = EnumAction3D.SelectObject; - - GSOLayer redLayer = globeControl1.Globe.Layers.GetLayerByCaption("红线"); - if (redLayer != null) - { - redLayer.Visible = true; - } + layer.Visible = true; globeControl1.Refresh(); } else @@ -1842,55 +1697,28 @@ } } } - + //TODO LIST: wxl? Tag更正 private void layerTree_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) { - if (layerTree.SelectedNode == null) return; - if (layerTree.SelectedNode.Tag.ToString().Contains("|")) + TreeNode node = layerTree.SelectedNode; + if (node == null) return; + if (node.Tag is GSOLayer) { - string nodeTag = layerTree.SelectedNode.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(nodeTag); - if (layer != null) + GSOLayer layer = node.Tag as GSOLayer; + if (layer.GetAllFeatures().Length <= 0) return; + GSOFeature feature = layer.GetAt(0); + if (feature != null && feature.Geometry != null) { - if (layer.Caption == "红线") - { - globeControl1.Globe.FlyToPosition(new GSOPoint3d(120.610963, 31.188121, 50), EnumAltitudeMode.Absolute, -4, 50, 1000); - globeControl1.Globe.FlyToPointSpeed = 10000000; - globeControl1.Globe.Action = EnumAction3D.SelectObject; - - GSOLayer redLayer = globeControl1.Globe.Layers.GetLayerByCaption("红线"); - if (redLayer != null) - { - redLayer.Visible = true; - } - globeControl1.Refresh(); - } - else - { - double x = layer.LatLonBounds.Center.X; - double y = layer.LatLonBounds.Center.Y; - globeControl1.Globe.FlyToPosition(new GSOPoint3d(x, y, 0), EnumAltitudeMode.Absolute); - } + globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute);//, 0, 0, 1000); + } + else + { + globeControl1.Globe.FlyToFeature(feature); } } - if (layerTree.SelectedNode.Tag is GSOLayer) + else if (node.Tag is GSOFeature) { - GSOLayer layer = layerTree.SelectedNode.Tag as GSOLayer; - if (layer.GetAllFeatures().Length > 0) - { - GSOFeature feature = layer.GetAt(0); - if (feature != null && feature.Geometry != null) - { - globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute);//, 0, 0, 1000); - } - else - { - globeControl1.Globe.FlyToFeature(feature); - } - } - } else if (layerTree.SelectedNode.Tag is GSOFeature) - { - GSOFeature feature = layerTree.SelectedNode.Tag as GSOFeature; + GSOFeature feature = node.Tag as GSOFeature; if (feature.Geometry != null) { globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute, 0, 0, 10); @@ -2231,15 +2059,7 @@ int idx = dataGridViewX2.Rows.Add(); dataGridViewX2.Rows[idx].Tag = feat; dataGridViewX2.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX2.Rows[idx].Cells[1].Value = featureName; } } @@ -2261,15 +2081,7 @@ int idx = dataGridViewLineList.Rows.Add(); dataGridViewLineList.Rows[idx].Tag = feat; dataGridViewLineList.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewLineList.Rows[idx].Cells[1].Value = featureName; } } @@ -2291,15 +2103,7 @@ int idx = dataGridViewX8.Rows.Add(); dataGridViewX8.Rows[idx].Tag = feat; dataGridViewX8.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX8.Rows[idx].Cells[1].Value = featureName; } } @@ -2321,15 +2125,7 @@ int idx = dataGridViewX4.Rows.Add(); dataGridViewX4.Rows[idx].Tag = feat; dataGridViewX4.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX4.Rows[idx].Cells[1].Value = featureName; } @@ -2353,15 +2149,7 @@ int idx = dataGridViewX6.Rows.Add(); dataGridViewX6.Rows[idx].Tag = feat; dataGridViewX6.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX6.Rows[idx].Cells[1].Value = featureName; } } @@ -2736,77 +2524,104 @@ return str; } - //string filename = Utility.filename; - //List g1layername = new List(); - /// /// 获取目标图层 /// /// +// private GSOLayer TreeNodeFeatureLayer() +// { +// TreeNode featureAddPipeFitTreenode = GetDestLayerFeatureAddTreeNode(); +// GSOLayer featureAddLayer = globeControl1.Globe.Layers.GetLayerByCaption(featureAddPipeFitTreenode.Tag.ToString().Split('|')[1]); +// +// return featureAddLayer; +// } + //TODO LIST: wxl11? 待更正,Node的Tag现在都已经统一为gsolayer对象了 +// private TreeNode GetDestLayerFeatureAddTreeNode() +// { +// for (int i = 0; i < layerTree.Nodes.Count; i++) +// { +// TreeNode tempNode = layerTree.Nodes[i]; +// for (int j = 0; j < tempNode.Nodes.Count; j++) +// { +// TreeNode tempChildNode = tempNode.Nodes[j]; +// if (tempChildNode.Tag.ToString().Split('|').Length > 1) // Config配置文件配置的图层 +// {//本层节点Tag记录layer +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode; +// } +// } +// else //临时添加的本地图层 +// {//子层节点的Tag记录layer +// for (int m = 0; m < tempChildNode.Nodes.Count; m++) +// { +// TreeNode tempChildNode1 = tempChildNode.Nodes[m]; +// if (tempChildNode1.Tag.ToString().Split('|').Length > 1) +// { +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode1.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode1.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode1; +// } +// } +// else +// { +// for (int n = 0; n < tempChildNode1.Nodes.Count; n++) +// { +// TreeNode tempChildNode2 = tempChildNode1.Nodes[n]; +// if (tempChildNode2.Tag.ToString().Split('|').Length <= 1) continue; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode2.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode2.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode2; +// } +// } +// } +// } +// } +// } +// } +// return null; +// } private GSOLayer TreeNodeFeatureLayer() { TreeNode featureAddPipeFitTreenode = GetDestLayerFeatureAddTreeNode(); - GSOLayer featureAddLayer = globeControl1.Globe.Layers.GetLayerByCaption(featureAddPipeFitTreenode.Tag.ToString().Split('|')[1]); - - return featureAddLayer != null ? featureAddLayer : null; + if (featureAddPipeFitTreenode == null) return null; + GSOLayer featureAddLayer = featureAddPipeFitTreenode.Tag as GSOLayer; + return featureAddLayer; } - + //遍历最深三层找到目标node. private TreeNode GetDestLayerFeatureAddTreeNode() { - for (int i = 0; i < layerTree.Nodes.Count; i++) + + foreach (TreeNode layerTreeNode in layerTree.Nodes) { - TreeNode tempNode = layerTree.Nodes[i]; - for (int j = 0; j < tempNode.Nodes.Count; j++) + if (layerTreeNode.Tag == null && layerTreeNode.Nodes.Count > 0) { - TreeNode tempChildNode = tempNode.Nodes[j]; - if (tempChildNode.Tag.ToString().Split('|').Length > 1) // Config配置文件配置的图层 + foreach (TreeNode node in layerTreeNode.Nodes) { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode; - } + GSOLayer gsoLayer = node.Tag as GSOLayer; + if (gsoLayer != null && gsoLayer.IsDestLayerFeatureAdd()) return node; + } - else //临时添加的本地图层 - { - for (int m = 0; m < tempChildNode.Nodes.Count; m++) - { - TreeNode tempChildNode1 = tempChildNode.Nodes[m]; - if (tempChildNode1.Tag.ToString().Split('|').Length > 1) - { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode1.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode1.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode1; - } - } - else - { - for (int n = 0; n < tempChildNode1.Nodes.Count; n++) - { - TreeNode tempChildNode2 = tempChildNode1.Nodes[n]; - if (tempChildNode2.Tag.ToString().Split('|').Length <= 1) continue; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode2.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode2.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode2; - } - } - } - } - } + } + else + { + GSOLayer gsoLayer = layerTreeNode.Tag as GSOLayer; + if (gsoLayer != null && gsoLayer.IsDestLayerFeatureAdd()) return layerTreeNode; } } return null; @@ -3221,6 +3036,7 @@ } } } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 目标图层 菜单 /// @@ -3228,14 +3044,15 @@ /// private void FeatureAddLayerMenuItem_Click(object sender, EventArgs e) { - if (!FeatureAddLayerMenuItem.Checked) - { - TreeNode node = layerNodeContexMenu.Tag as TreeNode; - FeatureAddLayerMenuItem.Checked = true; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); - globeControl1.Globe.DestLayerFeatureAdd = layer; - } + if (FeatureAddLayerMenuItem.Checked) return; + TreeNode node = layerNodeContexMenu.Tag as TreeNode; + FeatureAddLayerMenuItem.Checked = true; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; + globeControl1.Globe.DestLayerFeatureAdd = layer; } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 可选择 菜单 /// @@ -3244,11 +3061,13 @@ private void LayerSelectableMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - Int32 nIndex = node.Index; - GSOLayer layer = globeControl1.Globe.Layers[nIndex]; +// GSOLayer layer = globeControl1.Globe.Layers[nIndex]; + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; LayerSelectableMenuItem.Checked = !LayerSelectableMenuItem.Checked; - layer.Selectable = LayerSelectableMenuItem.Checked; + if (layer != null) layer.Selectable = LayerSelectableMenuItem.Checked; } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 可编辑 菜单 /// @@ -3257,23 +3076,27 @@ private void LayerEditableMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; LayerEditableMenuItem.Checked = !LayerEditableMenuItem.Checked; - layer.Editable = LayerEditableMenuItem.Checked; + if (layer != null) layer.Editable = LayerEditableMenuItem.Checked; } /// /// 图层目录树 右键菜单中的 保存 菜单 /// /// /// + //TODO LIST: wxl? Tag更正 private void SaveLayerMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - Int32 nIndex = node.Index; - string layerCaption = node.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); - layer.Dataset.Save(); +// string layerCaption = node.Tag.ToString().Split('|')[1]; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; + if (layer != null) layer.Dataset.Save(); } #region wxl feature的公共方法 @@ -3455,7 +3278,6 @@ return; GSOFeatureLayer flayer = layer as GSOFeatureLayer; - GSOFeatureDataset fdataset = flayer.Dataset as GSOFeatureDataset; GSOFeatures feats = flayer.GetAllFeatures(); for (int i = 0; i < feats.Length; i++) { @@ -3480,7 +3302,6 @@ return; GSOFeatureLayer flayer = layer as GSOFeatureLayer; - GSOFeatureDataset fdataset = flayer.Dataset as GSOFeatureDataset; GSOFeatures feats = flayer.GetAllFeatures(); for (int i = 0; i < feats.Length; i++) { @@ -5508,7 +5329,6 @@ private void addNodeToLayerManagerNode(GSOLayer layer) { if (layer == null) return; - GSODataset dataset = layer.Dataset; CheckDatasetGeoReference(layer.Dataset, ""); TreeNode node = new TreeNode(); @@ -5527,43 +5347,24 @@ /// /// /// - public int getLabelName(GSOLayer layer) - { - int nid = -1; - if (layer.GetAllFeatures().Length > 0) - { - string id = layer.GetAllFeatures()[layer.GetAllFeatures().Length - 1].Name; +// public int getLabelName(GSOLayer layer) +// { +// int nid = -1; +// if (layer.GetAllFeatures().Length > 0) +// { +// string id = layer.GetAllFeatures()[layer.GetAllFeatures().Length - 1].Name; +// +// int.TryParse(id, out nid); +// } +// else +// { +// nid = 0; +// } +// return nid; +// } - int.TryParse(id, out nid); - } - else - { - nid = 0; - } - return nid; - } /// - /// 判断选中的对象是否为管线 - /// - /// 被选中管线 - /// 返回一根线 - private GSOFeature IsPipeLineOfSelectedObj() - { - GSOFeature resFeature = null; - if (globeControl1.Globe.SelObjectCount < 1) return null; - GSOLayer resLayer = null; - globeControl1.Globe.GetSelectObject(0, out resFeature, out resLayer); - if (resFeature == null) return null; - - GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; - if (line1 == null) return null; - GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; - if (pipeStyle1 == null) return null; - - return resFeature; - } - /// /// 图层节点树中 节点 右键单击事件处理 /// /// @@ -5615,13 +5416,15 @@ { TreeNode node = contextMenuStrip2.Tag as TreeNode; TreeNode parentNode = node.Parent; - Int32 nIndex = node.Index; if (parentNode.Text == "标注管理" || parentNode.Text == "传感器管理") { RefreshTreeNodeLayerFeatureList(node); } } + + #region wxl? VisitFeature3Ds的作用,重构后,是否对其有影响 + /// /// 给指定的图层节点添加代表feature对象的子节点 /// @@ -5636,6 +5439,9 @@ VisitFeature3Ds(layer.GetAllFeatures(), layerTreeNode); } } + + #endregion + /// /// 标注管理、传感器管理 图层目录树的右键菜单中的 移除所有 菜单 /// @@ -5660,53 +5466,11 @@ { if (e.Action != TreeViewAction.Unknown) { - CheckTreeNode(e.Node, e.Node.Checked); + //wxl优化标注管理树形结构 + TreeUtils.TreeNodeCheckedChange(globeControl1,e.Node); } } - /// - /// 改变指定节点对应的复选框的选中状态 - /// - /// - /// - private void CheckTreeNode(TreeNode node, Boolean bChecked) - { - CheckChildTreeNode(node, bChecked); - globeControl1.Globe.Refresh(); - } - /// - /// 改变指定节点的子节点对应的复选框的选中状态 - /// - /// - /// - private void CheckChildTreeNode(TreeNode node, Boolean bChecked) - { - if (node == null) - return; - if (node.Tag != null) - { - if (node.Tag.GetType() == typeof(GSOFeatureFolder) || node.Tag.GetType() == typeof(GSOFeature)) - ((GSOFeature)node.Tag).SetVisibleDirectly(bChecked); - else - { - GSOLayer curLayer = node.Tag as GSOLayer; - GSOTerrain curTerrain = node.Tag as GSOTerrain; - if (curLayer != null) - { - curLayer.Visible = bChecked; - } - else if (curTerrain != null) - { - curTerrain.Visible = bChecked; - } - } - } - // 递归处理子节点 - for (int i = 0; i < node.Nodes.Count; i++) - { - node.Nodes[i].Checked = bChecked; - CheckChildTreeNode(node.Nodes[i], bChecked); - } - } + /// /// 标注管理、传感器管理 目录树中的feature节点的右键菜单中的 删除 菜单 /// @@ -5984,7 +5748,7 @@ frmModify = new FrmMnModify(globeControl1, shlayername, shresultLists); - if (boolfrmModify != false) return; + if (boolfrmModify) return; frmModify.Owner = this; frmModify.Location = new Point(Width - frmModify.Width - 10, Height - frmModify.Height - 50); frmModify.Show(); @@ -6261,16 +6025,15 @@ globeControl1.Globe.ClearMeasure(); layerTemp.RemoveAllFeature(); - layerTemp2.RemoveAllFeature(); buttonItemLS5.Checked = false; dataGridViewX1.DataSource = null; panelOfTable.Visible = false; globeControl1.Globe.MemoryLayer.RemoveAllFeature(); + globeControl2.Globe.MemoryLayer.RemoveAllFeature(); globeControl1.Globe.ClearAnalysis(); - // 清除净距分析结果 buttonX2_Click(null, null); buttonX8_Click(null, null); @@ -6527,8 +6290,8 @@ GSOFeatures selectFeatures = new GSOFeatures(); for (int i = 0; i < globeControl1.Globe.SelObjectCount; i++) { - GSOFeature feature = null; - GSOLayer layer = null; + GSOFeature feature; + GSOLayer layer; globeControl1.Globe.GetSelectObject(i, out feature, out layer); if (feature != null && feature.Geometry != null && feature.Geometry.Type == EnumGeometryType.GeoPolyline3D) { @@ -6536,11 +6299,9 @@ } } List feats = SectionAnalysisTool.ZDMAnalysis(selectFeatures); - if (feats != null && feats.Count >= 1) - { - FrmProfileAnalysis frm = new FrmProfileAnalysis(globeControl1, feats); - frm.Show(this); - } + if (feats == null || feats.Count < 1) return; + FrmProfileAnalysis frm = new FrmProfileAnalysis(globeControl1, feats); + frm.Show(this); } /// /// 道路断面分析 @@ -7057,14 +6818,14 @@ /// private void buttonItemSZ1_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7075,17 +6836,17 @@ /// /// 管径标注 /// - GSOFeature radiusMarkerFeature; +// GSOFeature radiusMarkerFeature; private void buttonItemBZ2_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine==null||selLine[0].Count <= 1)//wxl增加为空判断,下面方法同理 + if (selLine == null || selLine[0].Count <= 1) //wxl增加为空判断,下面方法同理 { return; } @@ -7100,14 +6861,14 @@ /// private void buttonItemBZ3_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null||selLine[0].Count <= 1) { return; } @@ -7123,14 +6884,14 @@ /// private void buttonItemBZ4_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7140,7 +6901,7 @@ /// /// 距离标注 /// - bool distanceMarker; +// bool distanceMarker; private void buttonItemBZ5_Click(object sender, EventArgs e) { //日志记录 @@ -7148,7 +6909,7 @@ globeControl1.Globe.Action = EnumAction3D.TrackPolyline; //globeControl1.Globe.DistanceRuler.MeasureMode = EnumDistanceMeasureMode.HVSLineMeasure; - distanceMarker = true; +// distanceMarker = true; } /// /// 自定义标注 @@ -7187,14 +6948,14 @@ /// private void buttonItemBZ8_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7775,11 +7536,9 @@ if (frm.ShowDialog() == DialogResult.OK) { GSOLayer featureAddLayer = TreeNodeFeatureLayer(); - if (featureAddLayer != null) - { - FrmAddInstrument dlg = new FrmAddInstrument(globeControl1, featureAddLayer); - dlg.Show(this); - } + if (featureAddLayer == null) return; + FrmAddInstrument dlg = new FrmAddInstrument(globeControl1, featureAddLayer); + dlg.Show(this); } } /// @@ -7822,11 +7581,9 @@ frm.citySevenLineType); globeControl1.Tag = citySevenLine; GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(frm.citySevenLineType); - if (layer != null) - { - globeControl1.Globe.DestLayerFeatureAdd = layer; - layer.Editable = true; - } + if (layer == null) return; + globeControl1.Globe.DestLayerFeatureAdd = layer; + layer.Editable = true; } } #endregion @@ -7986,44 +7743,45 @@ LogManager.saveLog(Utility.userName, buttonItemBJ10_2.Text); List listVectorNames = new List(); - for (int i = 0; i < Utility.m_PipelineLayerNames.Count; i++) + foreach (string pipeline in Utility.m_PipelineLayerNames) { - if (!listVectorNames.Contains(Utility.m_PipelineLayerNames[i])) + if (!listVectorNames.Contains(pipeline)) { - listVectorNames.Add(Utility.m_PipelineLayerNames[i]); + listVectorNames.Add(pipeline); } } - for (int i = 0; i < Utility.valueLayerNames.Count; i++) + foreach (string valve in Utility.valueLayerNames) { - if (!listVectorNames.Contains(Utility.valueLayerNames[i])) + if (!listVectorNames.Contains(valve)) { - listVectorNames.Add(Utility.valueLayerNames[i]); + listVectorNames.Add(valve); } } - for (int i = 0; i < Utility.workwellLayerNames.Count; i++) + foreach (string workwell in Utility.workwellLayerNames) { - if (!listVectorNames.Contains(Utility.workwellLayerNames[i])) + if (!listVectorNames.Contains(workwell)) { - listVectorNames.Add(Utility.workwellLayerNames[i]); + listVectorNames.Add(workwell); } } - for (int i = 0; i < Utility.instrumenLayerNames.Count; i++) + foreach (string instrument in Utility.instrumenLayerNames) { - if (!listVectorNames.Contains(Utility.instrumenLayerNames[i])) + if (!listVectorNames.Contains(instrument)) { - listVectorNames.Add(Utility.instrumenLayerNames[i]); + listVectorNames.Add(instrument); } } - for (int i = 0; i < Utility.pipefittingLayerNames.Count; i++) + foreach (string pipefitting in Utility.pipefittingLayerNames) { - if (!listVectorNames.Contains(Utility.pipefittingLayerNames[i])) + if (!listVectorNames.Contains(pipefitting)) { - listVectorNames.Add(Utility.pipefittingLayerNames[i]); + listVectorNames.Add(pipefitting); } } FrmExportVector frm = new FrmExportVector(globeControl1, listVectorNames); frm.ShowDialog(); } + /// /// 删除模型 /// @@ -8032,27 +7790,25 @@ private void buttonItemBJ13_Click(object sender, EventArgs e) { LogManager.saveLog(Utility.userName, buttonItemBJ13.Text); - if (globeControl1.Globe.SelObjectCount > 0) - { - for (int i = 0; i < globeControl1.Globe.SelObjectCount; i++) - { - GSOFeature f = null; - GSOLayer layer = null; - globeControl1.Globe.GetSelectObject(i, out f, out layer); - if (f == null) continue; - f.Delete(); - if (layer != null) - globeControl1.Globe.AddToEditHistroy(layer, f, EnumEditType.Delete); - globeControl1.Refresh(); - - } - MessageBox.Show("删除成功!", "提示"); - } - else + var selObjCount = globeControl1.Globe.SelObjectCount; + if (selObjCount == 0) { MessageBox.Show("请选中要删除的模型!", "提示"); + return; } + for (int i = 0; i < selObjCount; i++) + { + GSOFeature f; + GSOLayer layer; + globeControl1.Globe.GetSelectObject(i, out f, out layer); + if (f == null) continue; + f.Delete(); + if (layer != null) + globeControl1.Globe.AddToEditHistroy(layer, f, EnumEditType.Delete); + globeControl1.Refresh(); + } + MessageBox.Show("删除成功!", "提示"); globeControl1.Globe.Action = EnumAction3D.ActionNull; } @@ -8118,6 +7874,7 @@ toolStripNumbers.Text = "红线审核 |共有:" + table.Rows.Count + "条"; toolStripDropDownButton3.Visible = true; } + /// /// 主窗体 下方的工具条中的 导出.xls文件 按钮事件处理 /// @@ -8127,24 +7884,28 @@ { if (dataGridViewX1.Rows.Count != 0) { - string strSaveFile = string.Empty; - SaveFileDialog savefiledialog = new SaveFileDialog(); - savefiledialog.Filter = "Excel文件|*.xls,*.xlsx"; - savefiledialog.AddExtension = true; - savefiledialog.FileName = "红线审核"; - if (savefiledialog.ShowDialog() == DialogResult.OK) - strSaveFile = savefiledialog.FileName; - else return; - - ExpEXCEL.ExpToExcel(dataGridViewX1, strSaveFile, "红线审核", lineStruct, featsList); - MessageBox.Show("导出成功!"); - } - else - { MessageBox.Show("表格内容为空!", "提示"); + return; } + string strSaveFile; + SaveFileDialog savefiledialog = new SaveFileDialog(); + savefiledialog.Filter = "Excel文件|*.xls,*.xlsx"; + savefiledialog.AddExtension = true; + savefiledialog.FileName = "红线审核"; + if (savefiledialog.ShowDialog() == DialogResult.OK) + strSaveFile = savefiledialog.FileName; + else return; + + ExpEXCEL.ExpToExcel(dataGridViewX1, strSaveFile, "红线审核", lineStruct, featsList); + MessageBox.Show("导出成功!"); + } + /// + /// 双屏对比的地面透明度设置 + /// + /// + /// private void sliderItem2_ValueChanged(object sender, EventArgs e) { LogManager.saveLog(Utility.userName, sliderItem2.Text); @@ -8155,7 +7916,7 @@ { layer.Opaque = 100 - sliderItem2.Value; } - layer = globeControl2.Globe.Layers.GetLayerByCaption("180fd");//("180fd"); + layer = globeControl2.Globe.Layers.GetLayerByCaption(Utility.roadLayerName);//("180fd"); if (layer != null) { layer.Opaque = 100 - sliderItem2.Value; @@ -8554,7 +8315,7 @@ LogManager.saveLog(Utility.userName, buttonItem8.Text); int width = Width; - FrmCompareFeature.ShowForm(globeControl1, globeControl2, layerTemp, layerTemp2, width); + FrmCompareFeature.ShowForm(globeControl1, globeControl2, width); } /// /// 红线审核导出图片 @@ -8690,7 +8451,6 @@ private void btn_role_resc_Click(object sender, EventArgs e) { - LogManager.saveLog(Utility.userName, btn_role_resc.Text); if (FrmRoleRescManager.IS_OPEN) return; @@ -8708,7 +8468,8 @@ frm.ShowDialog(); } } -//文档管理 操作 + + //文档管理 操作 private void btn_document_info_Click(object sender, EventArgs e) { @@ -8919,11 +8680,9 @@ } private void pictureBox1_Paint(object sender, PaintEventArgs e) - { - int Width = this.Width; + { string welcomeUser = "欢迎您:" + Utility.userName; - Graphics g = e.Graphics; - g.DrawString(welcomeUser, new Font("宋体", 12), new SolidBrush(Color.Black), Width - 180, 50); + e.Graphics.DrawString(welcomeUser, new Font("宋体", 12), new SolidBrush(Color.Black), Width - 180, 50); } } diff --git a/MainFrm.designer.cs b/MainFrm.designer.cs index a9b8c6f..5d74670 100644 --- a/MainFrm.designer.cs +++ b/MainFrm.designer.cs @@ -244,42 +244,6 @@ this.保存ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.定位ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.ribbonControl1 = new DevComponents.DotNetBar.RibbonControl(); - this.ribbonPanel6 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar6 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItemSPSZ = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem8 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemLocation = new DevComponents.DotNetBar.ButtonItem(); - this.sliderItem2 = new DevComponents.DotNetBar.SliderItem(); - this.buttonItemGBJC = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonPanel4 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar1 = new DevComponents.DotNetBar.RibbonBar(); - this.btn_document_info = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonPanel12 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar18 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItem133 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem132 = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonBar13 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItem127 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem128 = new DevComponents.DotNetBar.ButtonItem(); - this.sliderItem1 = new DevComponents.DotNetBar.SliderItem(); - this.buttonItem134 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem130 = new DevComponents.DotNetBar.ButtonItem(); - this.btn_check_history = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonPanel5 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar2 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItemHX1 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemHX2 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemDCTP = new DevComponents.DotNetBar.ButtonItem(); - this.sliderItem3 = new DevComponents.DotNetBar.SliderItem(); - this.ribbonPanel2 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar3 = new DevComponents.DotNetBar.RibbonBar(); - this.btn_user_info = new DevComponents.DotNetBar.ButtonItem(); - this.btn_role_info = new DevComponents.DotNetBar.ButtonItem(); - this.btn_resc_info = new DevComponents.DotNetBar.ButtonItem(); - this.btn_role_resc = new DevComponents.DotNetBar.ButtonItem(); - this.btn_user_role = new DevComponents.DotNetBar.ButtonItem(); - this.btn_password_edit = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemPasswordReset = new DevComponents.DotNetBar.ButtonItem(); this.ribbonPanel15 = new DevComponents.DotNetBar.RibbonPanel(); this.ribbonBar20 = new DevComponents.DotNetBar.RibbonBar(); this.buttonItemSH = new DevComponents.DotNetBar.ButtonItem(); @@ -448,6 +412,42 @@ this.buttonItemBZ9 = new DevComponents.DotNetBar.ButtonItem(); this.buttonItemBZ10 = new DevComponents.DotNetBar.ButtonItem(); this.buttonItemBZ11 = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel6 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar6 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItemSPSZ = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem8 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemLocation = new DevComponents.DotNetBar.ButtonItem(); + this.sliderItem2 = new DevComponents.DotNetBar.SliderItem(); + this.buttonItemGBJC = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel4 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar1 = new DevComponents.DotNetBar.RibbonBar(); + this.btn_document_info = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel12 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar18 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItem133 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem132 = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonBar13 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItem127 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem128 = new DevComponents.DotNetBar.ButtonItem(); + this.sliderItem1 = new DevComponents.DotNetBar.SliderItem(); + this.buttonItem134 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem130 = new DevComponents.DotNetBar.ButtonItem(); + this.btn_check_history = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel5 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar2 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItemHX1 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemHX2 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemDCTP = new DevComponents.DotNetBar.ButtonItem(); + this.sliderItem3 = new DevComponents.DotNetBar.SliderItem(); + this.ribbonPanel2 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar3 = new DevComponents.DotNetBar.RibbonBar(); + this.btn_user_info = new DevComponents.DotNetBar.ButtonItem(); + this.btn_role_info = new DevComponents.DotNetBar.ButtonItem(); + this.btn_resc_info = new DevComponents.DotNetBar.ButtonItem(); + this.btn_role_resc = new DevComponents.DotNetBar.ButtonItem(); + this.btn_user_role = new DevComponents.DotNetBar.ButtonItem(); + this.btn_password_edit = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemPasswordReset = new DevComponents.DotNetBar.ButtonItem(); this.ribbonPanel1 = new DevComponents.DotNetBar.RibbonPanel(); this.ribbonBar21 = new DevComponents.DotNetBar.RibbonBar(); this.buttonItem87 = new DevComponents.DotNetBar.ButtonItem(); @@ -652,12 +652,12 @@ this.contextMenuStrip3.SuspendLayout(); this.contextMenuStripDeleteLayerNode.SuspendLayout(); this.ribbonControl1.SuspendLayout(); + this.ribbonPanel15.SuspendLayout(); this.ribbonPanel6.SuspendLayout(); this.ribbonPanel4.SuspendLayout(); this.ribbonPanel12.SuspendLayout(); this.ribbonPanel5.SuspendLayout(); this.ribbonPanel2.SuspendLayout(); - this.ribbonPanel15.SuspendLayout(); this.ribbonPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); this.panelOfTable.SuspendLayout(); @@ -2283,12 +2283,12 @@ // this.ribbonControl1.BackgroundStyle.Class = ""; this.ribbonControl1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonControl1.Controls.Add(this.ribbonPanel15); + this.ribbonControl1.Controls.Add(this.ribbonPanel2); this.ribbonControl1.Controls.Add(this.ribbonPanel6); this.ribbonControl1.Controls.Add(this.ribbonPanel4); this.ribbonControl1.Controls.Add(this.ribbonPanel12); this.ribbonControl1.Controls.Add(this.ribbonPanel5); - this.ribbonControl1.Controls.Add(this.ribbonPanel2); - this.ribbonControl1.Controls.Add(this.ribbonPanel15); this.ribbonControl1.Controls.Add(this.ribbonPanel1); this.ribbonControl1.Dock = System.Windows.Forms.DockStyle.Top; this.ribbonControl1.ImeMode = System.Windows.Forms.ImeMode.NoControl; @@ -2331,595 +2331,6 @@ this.ribbonControl1.Text = "ribbonControl1"; this.ribbonControl1.UseCustomizeDialog = false; // - // ribbonPanel6 - // - this.ribbonPanel6.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel6.Controls.Add(this.ribbonBar6); - this.ribbonPanel6.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel6.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel6.Name = "ribbonPanel6"; - this.ribbonPanel6.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel6.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel6.Style.Class = ""; - this.ribbonPanel6.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel6.StyleMouseDown.Class = ""; - this.ribbonPanel6.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel6.StyleMouseOver.Class = ""; - this.ribbonPanel6.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel6.TabIndex = 38; - // - // ribbonBar6 - // - this.ribbonBar6.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar6.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar6.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar6.BackgroundStyle.Class = ""; - this.ribbonBar6.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar6.ContainerControlProcessDialogKey = true; - this.ribbonBar6.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar6.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItemSPSZ, - this.buttonItem8, - this.buttonItemLocation, - this.sliderItem2, - this.buttonItemGBJC}); - this.ribbonBar6.Location = new System.Drawing.Point(3, 0); - this.ribbonBar6.Name = "ribbonBar6"; - this.ribbonBar6.Size = new System.Drawing.Size(427, 59); - this.ribbonBar6.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar6.TabIndex = 0; - // - // - // - this.ribbonBar6.TitleStyle.Class = ""; - this.ribbonBar6.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar6.TitleStyleMouseOver.Class = ""; - this.ribbonBar6.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar6.TitleVisible = false; - // - // buttonItemSPSZ - // - this.buttonItemSPSZ.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemSPSZ.Image"))); - this.buttonItemSPSZ.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemSPSZ.Name = "buttonItemSPSZ"; - this.buttonItemSPSZ.SubItemsExpandWidth = 14; - this.buttonItemSPSZ.Text = "双屏设置"; - this.buttonItemSPSZ.Click += new System.EventHandler(this.buttonItemSPSZ_Click); - // - // buttonItem8 - // - this.buttonItem8.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem8.Image"))); - this.buttonItem8.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem8.Name = "buttonItem8"; - this.buttonItem8.SubItemsExpandWidth = 14; - this.buttonItem8.Text = "双屏分析"; - this.buttonItem8.Click += new System.EventHandler(this.buttonItem8_Click); - // - // buttonItemLocation - // - this.buttonItemLocation.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemLocation.Image"))); - this.buttonItemLocation.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemLocation.Name = "buttonItemLocation"; - this.buttonItemLocation.SubItemsExpandWidth = 14; - this.buttonItemLocation.Text = "快速定位"; - this.buttonItemLocation.Click += new System.EventHandler(this.buttonItemLocation_Click); - // - // sliderItem2 - // - this.sliderItem2.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; - this.sliderItem2.LabelWidth = 50; - this.sliderItem2.Name = "sliderItem2"; - this.sliderItem2.Text = "地面透明度"; - this.sliderItem2.TextColor = System.Drawing.Color.Black; - this.sliderItem2.Value = 0; - this.sliderItem2.ValueChanged += new System.EventHandler(this.sliderItem2_ValueChanged); - // - // buttonItemGBJC - // - this.buttonItemGBJC.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemGBJC.Image"))); - this.buttonItemGBJC.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemGBJC.Name = "buttonItemGBJC"; - this.buttonItemGBJC.SubItemsExpandWidth = 14; - this.buttonItemGBJC.Text = "国标检测"; - this.buttonItemGBJC.Click += new System.EventHandler(this.buttonItemGBJC_Click); - // - // ribbonPanel4 - // - this.ribbonPanel4.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel4.Controls.Add(this.ribbonBar1); - this.ribbonPanel4.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel4.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel4.Name = "ribbonPanel4"; - this.ribbonPanel4.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel4.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel4.Style.Class = ""; - this.ribbonPanel4.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel4.StyleMouseDown.Class = ""; - this.ribbonPanel4.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel4.StyleMouseOver.Class = ""; - this.ribbonPanel4.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel4.TabIndex = 36; - this.ribbonPanel4.Visible = false; - // - // ribbonBar1 - // - this.ribbonBar1.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar1.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar1.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar1.BackgroundStyle.Class = ""; - this.ribbonBar1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar1.ContainerControlProcessDialogKey = true; - this.ribbonBar1.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar1.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.btn_document_info}); - this.ribbonBar1.Location = new System.Drawing.Point(3, 0); - this.ribbonBar1.Name = "ribbonBar1"; - this.ribbonBar1.Size = new System.Drawing.Size(88, 59); - this.ribbonBar1.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar1.TabIndex = 0; - // - // - // - this.ribbonBar1.TitleStyle.Class = ""; - this.ribbonBar1.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar1.TitleStyleMouseOver.Class = ""; - this.ribbonBar1.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar1.TitleVisible = false; - // - // btn_document_info - // - this.btn_document_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_document_info.Image"))); - this.btn_document_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_document_info.Name = "btn_document_info"; - this.btn_document_info.SubItemsExpandWidth = 14; - this.btn_document_info.Text = "文档管理"; - this.btn_document_info.Click += new System.EventHandler(this.btn_document_info_Click); - // - // ribbonPanel12 - // - this.ribbonPanel12.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel12.Controls.Add(this.ribbonBar18); - this.ribbonPanel12.Controls.Add(this.ribbonBar13); - this.ribbonPanel12.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel12.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel12.Name = "ribbonPanel12"; - this.ribbonPanel12.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel12.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel12.Style.Class = ""; - this.ribbonPanel12.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel12.StyleMouseDown.Class = ""; - this.ribbonPanel12.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel12.StyleMouseOver.Class = ""; - this.ribbonPanel12.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel12.TabIndex = 34; - this.ribbonPanel12.Visible = false; - // - // ribbonBar18 - // - this.ribbonBar18.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar18.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar18.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar18.BackgroundStyle.Class = ""; - this.ribbonBar18.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar18.ContainerControlProcessDialogKey = true; - this.ribbonBar18.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar18.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItem133, - this.buttonItem132}); - this.ribbonBar18.Location = new System.Drawing.Point(508, 0); - this.ribbonBar18.Name = "ribbonBar18"; - this.ribbonBar18.Size = new System.Drawing.Size(171, 59); - this.ribbonBar18.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar18.TabIndex = 1; - // - // - // - this.ribbonBar18.TitleStyle.Class = ""; - this.ribbonBar18.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar18.TitleStyleMouseOver.Class = ""; - this.ribbonBar18.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar18.TitleVisible = false; - // - // buttonItem133 - // - this.buttonItem133.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem133.Image"))); - this.buttonItem133.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem133.Name = "buttonItem133"; - this.buttonItem133.SubItemsExpandWidth = 14; - this.buttonItem133.Text = "审核入库"; - this.buttonItem133.Click += new System.EventHandler(this.buttonItem133_Click_1); - // - // buttonItem132 - // - this.buttonItem132.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem132.Image"))); - this.buttonItem132.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem132.Name = "buttonItem132"; - this.buttonItem132.SubItemsExpandWidth = 14; - this.buttonItem132.Text = "已审核的图层"; - this.buttonItem132.Visible = false; - this.buttonItem132.Click += new System.EventHandler(this.buttonItem132_Click_1); - // - // ribbonBar13 - // - this.ribbonBar13.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar13.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar13.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar13.BackgroundStyle.Class = ""; - this.ribbonBar13.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar13.ContainerControlProcessDialogKey = true; - this.ribbonBar13.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar13.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItem127, - this.buttonItem128, - this.sliderItem1, - this.buttonItem134, - this.buttonItem130, - this.btn_check_history}); - this.ribbonBar13.Location = new System.Drawing.Point(3, 0); - this.ribbonBar13.Name = "ribbonBar13"; - this.ribbonBar13.Size = new System.Drawing.Size(505, 59); - this.ribbonBar13.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar13.TabIndex = 0; - // - // - // - this.ribbonBar13.TitleStyle.Class = ""; - this.ribbonBar13.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar13.TitleStyleMouseOver.Class = ""; - this.ribbonBar13.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar13.TitleVisible = false; - // - // buttonItem127 - // - this.buttonItem127.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem127.Image"))); - this.buttonItem127.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem127.Name = "buttonItem127"; - this.buttonItem127.SubItemsExpandWidth = 14; - this.buttonItem127.Text = "打开数据"; - this.buttonItem127.Click += new System.EventHandler(this.buttonItem127_Click_2); - // - // buttonItem128 - // - this.buttonItem128.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem128.Image"))); - this.buttonItem128.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem128.Name = "buttonItem128"; - this.buttonItem128.SubItemsExpandWidth = 14; - this.buttonItem128.Text = "一键审核"; - this.buttonItem128.Click += new System.EventHandler(this.buttonItem128_Click); - // - // sliderItem1 - // - this.sliderItem1.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; - this.sliderItem1.LabelWidth = 50; - this.sliderItem1.Name = "sliderItem1"; - this.sliderItem1.Text = "地面透明度"; - this.sliderItem1.TextColor = System.Drawing.Color.Black; - this.sliderItem1.Value = 0; - this.sliderItem1.ValueChanged += new System.EventHandler(this.sliderItem1_ValueChanged); - // - // buttonItem134 - // - this.buttonItem134.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem134.Image"))); - this.buttonItem134.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem134.Name = "buttonItem134"; - this.buttonItem134.SubItemsExpandWidth = 14; - this.buttonItem134.Text = "模拟设计修改"; - this.buttonItem134.Click += new System.EventHandler(this.buttonItem134_Click_1); - // - // buttonItem130 - // - this.buttonItem130.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem130.Image"))); - this.buttonItem130.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem130.Name = "buttonItem130"; - this.buttonItem130.SubItemsExpandWidth = 14; - this.buttonItem130.Text = "导出审核图"; - this.buttonItem130.Click += new System.EventHandler(this.buttonItem130_Click_1); - // - // btn_check_history - // - this.btn_check_history.Image = ((System.Drawing.Image)(resources.GetObject("btn_check_history.Image"))); - this.btn_check_history.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_check_history.Name = "btn_check_history"; - this.btn_check_history.SubItemsExpandWidth = 14; - this.btn_check_history.Text = "审核历史"; - this.btn_check_history.Click += new System.EventHandler(this.btn_check_history_Click); - // - // ribbonPanel5 - // - this.ribbonPanel5.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel5.Controls.Add(this.ribbonBar2); - this.ribbonPanel5.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel5.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel5.Name = "ribbonPanel5"; - this.ribbonPanel5.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel5.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel5.Style.Class = ""; - this.ribbonPanel5.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel5.StyleMouseDown.Class = ""; - this.ribbonPanel5.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel5.StyleMouseOver.Class = ""; - this.ribbonPanel5.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel5.TabIndex = 37; - this.ribbonPanel5.Visible = false; - // - // ribbonBar2 - // - this.ribbonBar2.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar2.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar2.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar2.BackgroundStyle.Class = ""; - this.ribbonBar2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar2.ContainerControlProcessDialogKey = true; - this.ribbonBar2.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar2.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItemHX1, - this.buttonItemHX2, - this.buttonItemDCTP, - this.sliderItem3}); - this.ribbonBar2.Location = new System.Drawing.Point(3, 0); - this.ribbonBar2.Name = "ribbonBar2"; - this.ribbonBar2.Size = new System.Drawing.Size(350, 59); - this.ribbonBar2.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar2.TabIndex = 0; - // - // - // - this.ribbonBar2.TitleStyle.Class = ""; - this.ribbonBar2.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar2.TitleStyleMouseOver.Class = ""; - this.ribbonBar2.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar2.TitleVisible = false; - // - // buttonItemHX1 - // - this.buttonItemHX1.AutoExpandOnClick = true; - this.buttonItemHX1.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX1.Image"))); - this.buttonItemHX1.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemHX1.Name = "buttonItemHX1"; - this.buttonItemHX1.SubItemsExpandWidth = 14; - this.buttonItemHX1.Text = "导入红线"; - this.buttonItemHX1.Click += new System.EventHandler(this.buttonItemHX1_Click); - // - // buttonItemHX2 - // - this.buttonItemHX2.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX2.Image"))); - this.buttonItemHX2.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemHX2.Name = "buttonItemHX2"; - this.buttonItemHX2.SubItemsExpandWidth = 14; - this.buttonItemHX2.Text = "红线审核"; - this.buttonItemHX2.Click += new System.EventHandler(this.buttonItemHX2_Click); - // - // buttonItemDCTP - // - this.buttonItemDCTP.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemDCTP.Image"))); - this.buttonItemDCTP.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemDCTP.Name = "buttonItemDCTP"; - this.buttonItemDCTP.SubItemsExpandWidth = 14; - this.buttonItemDCTP.Text = "导出图片"; - this.buttonItemDCTP.Click += new System.EventHandler(this.buttonItemDCTP_Click); - // - // sliderItem3 - // - this.sliderItem3.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; - this.sliderItem3.LabelWidth = 50; - this.sliderItem3.Name = "sliderItem3"; - this.sliderItem3.Text = "地面透明度"; - this.sliderItem3.TextColor = System.Drawing.Color.Black; - this.sliderItem3.Value = 0; - this.sliderItem3.ValueChanged += new System.EventHandler(this.sliderItem3_ValueChanged); - // - // ribbonPanel2 - // - this.ribbonPanel2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel2.Controls.Add(this.ribbonBar3); - this.ribbonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel2.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel2.Name = "ribbonPanel2"; - this.ribbonPanel2.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel2.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel2.Style.Class = ""; - this.ribbonPanel2.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel2.StyleMouseDown.Class = ""; - this.ribbonPanel2.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel2.StyleMouseOver.Class = ""; - this.ribbonPanel2.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel2.TabIndex = 39; - this.ribbonPanel2.Visible = false; - // - // ribbonBar3 - // - this.ribbonBar3.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar3.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar3.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar3.BackgroundStyle.Class = ""; - this.ribbonBar3.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar3.ContainerControlProcessDialogKey = true; - this.ribbonBar3.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar3.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.btn_user_info, - this.btn_role_info, - this.btn_resc_info, - this.btn_role_resc, - this.btn_user_role, - this.btn_password_edit, - this.buttonItemPasswordReset}); - this.ribbonBar3.Location = new System.Drawing.Point(3, 0); - this.ribbonBar3.Name = "ribbonBar3"; - this.ribbonBar3.Size = new System.Drawing.Size(551, 59); - this.ribbonBar3.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar3.TabIndex = 1; - // - // - // - this.ribbonBar3.TitleStyle.Class = ""; - this.ribbonBar3.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar3.TitleStyleMouseOver.Class = ""; - this.ribbonBar3.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar3.TitleVisible = false; - // - // btn_user_info - // - this.btn_user_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_info.Image"))); - this.btn_user_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_user_info.Name = "btn_user_info"; - this.btn_user_info.SubItemsExpandWidth = 14; - this.btn_user_info.Text = "用户管理"; - this.btn_user_info.Click += new System.EventHandler(this.btn_user_info_Click); - // - // btn_role_info - // - this.btn_role_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_info.Image"))); - this.btn_role_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_role_info.Name = "btn_role_info"; - this.btn_role_info.SubItemsExpandWidth = 14; - this.btn_role_info.Text = "角色管理"; - this.btn_role_info.Click += new System.EventHandler(this.btn_role_info_Click); - // - // btn_resc_info - // - this.btn_resc_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_resc_info.Image"))); - this.btn_resc_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_resc_info.Name = "btn_resc_info"; - this.btn_resc_info.SubItemsExpandWidth = 14; - this.btn_resc_info.Text = "资源管理"; - this.btn_resc_info.Visible = false; - this.btn_resc_info.Click += new System.EventHandler(this.btn_resc_info_Click); - // - // btn_role_resc - // - this.btn_role_resc.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_resc.Image"))); - this.btn_role_resc.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_role_resc.Name = "btn_role_resc"; - this.btn_role_resc.SubItemsExpandWidth = 14; - this.btn_role_resc.Text = "角色授权"; - this.btn_role_resc.Click += new System.EventHandler(this.btn_role_resc_Click); - // - // btn_user_role - // - this.btn_user_role.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_role.Image"))); - this.btn_user_role.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_user_role.Name = "btn_user_role"; - this.btn_user_role.SubItemsExpandWidth = 14; - this.btn_user_role.Text = "用户授权"; - this.btn_user_role.Click += new System.EventHandler(this.btn_user_role_Click); - // - // btn_password_edit - // - this.btn_password_edit.Image = ((System.Drawing.Image)(resources.GetObject("btn_password_edit.Image"))); - this.btn_password_edit.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_password_edit.Name = "btn_password_edit"; - this.btn_password_edit.SubItemsExpandWidth = 14; - this.btn_password_edit.Text = "密码修改"; - this.btn_password_edit.Click += new System.EventHandler(this.btn_password_edit_Click); - // - // buttonItemPasswordReset - // - this.buttonItemPasswordReset.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemPasswordReset.Image"))); - this.buttonItemPasswordReset.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemPasswordReset.Name = "buttonItemPasswordReset"; - this.buttonItemPasswordReset.SubItemsExpandWidth = 14; - this.buttonItemPasswordReset.Text = "重置密码"; - this.buttonItemPasswordReset.Click += new System.EventHandler(this.buttonItemPasswordReset_Click); - // // ribbonPanel15 // this.ribbonPanel15.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; @@ -2945,7 +2356,6 @@ this.ribbonPanel15.StyleMouseOver.Class = ""; this.ribbonPanel15.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; this.ribbonPanel15.TabIndex = 35; - this.ribbonPanel15.Visible = false; // // ribbonBar20 // @@ -4286,6 +3696,596 @@ this.buttonItemBZ11.Text = "标注管理"; this.buttonItemBZ11.Click += new System.EventHandler(this.buttonItemBZ11_Click); // + // ribbonPanel6 + // + this.ribbonPanel6.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel6.Controls.Add(this.ribbonBar6); + this.ribbonPanel6.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel6.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel6.Name = "ribbonPanel6"; + this.ribbonPanel6.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel6.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel6.Style.Class = ""; + this.ribbonPanel6.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel6.StyleMouseDown.Class = ""; + this.ribbonPanel6.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel6.StyleMouseOver.Class = ""; + this.ribbonPanel6.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel6.TabIndex = 38; + this.ribbonPanel6.Visible = false; + // + // ribbonBar6 + // + this.ribbonBar6.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar6.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar6.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar6.BackgroundStyle.Class = ""; + this.ribbonBar6.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar6.ContainerControlProcessDialogKey = true; + this.ribbonBar6.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar6.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItemSPSZ, + this.buttonItem8, + this.buttonItemLocation, + this.sliderItem2, + this.buttonItemGBJC}); + this.ribbonBar6.Location = new System.Drawing.Point(3, 0); + this.ribbonBar6.Name = "ribbonBar6"; + this.ribbonBar6.Size = new System.Drawing.Size(427, 59); + this.ribbonBar6.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar6.TabIndex = 0; + // + // + // + this.ribbonBar6.TitleStyle.Class = ""; + this.ribbonBar6.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar6.TitleStyleMouseOver.Class = ""; + this.ribbonBar6.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar6.TitleVisible = false; + // + // buttonItemSPSZ + // + this.buttonItemSPSZ.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemSPSZ.Image"))); + this.buttonItemSPSZ.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemSPSZ.Name = "buttonItemSPSZ"; + this.buttonItemSPSZ.SubItemsExpandWidth = 14; + this.buttonItemSPSZ.Text = "双屏设置"; + this.buttonItemSPSZ.Click += new System.EventHandler(this.buttonItemSPSZ_Click); + // + // buttonItem8 + // + this.buttonItem8.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem8.Image"))); + this.buttonItem8.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem8.Name = "buttonItem8"; + this.buttonItem8.SubItemsExpandWidth = 14; + this.buttonItem8.Text = "双屏分析"; + this.buttonItem8.Click += new System.EventHandler(this.buttonItem8_Click); + // + // buttonItemLocation + // + this.buttonItemLocation.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemLocation.Image"))); + this.buttonItemLocation.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemLocation.Name = "buttonItemLocation"; + this.buttonItemLocation.SubItemsExpandWidth = 14; + this.buttonItemLocation.Text = "快速定位"; + this.buttonItemLocation.Click += new System.EventHandler(this.buttonItemLocation_Click); + // + // sliderItem2 + // + this.sliderItem2.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; + this.sliderItem2.LabelWidth = 50; + this.sliderItem2.Name = "sliderItem2"; + this.sliderItem2.Text = "地面透明度"; + this.sliderItem2.TextColor = System.Drawing.Color.Black; + this.sliderItem2.Value = 0; + this.sliderItem2.ValueChanged += new System.EventHandler(this.sliderItem2_ValueChanged); + // + // buttonItemGBJC + // + this.buttonItemGBJC.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemGBJC.Image"))); + this.buttonItemGBJC.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemGBJC.Name = "buttonItemGBJC"; + this.buttonItemGBJC.SubItemsExpandWidth = 14; + this.buttonItemGBJC.Text = "国标检测"; + this.buttonItemGBJC.Click += new System.EventHandler(this.buttonItemGBJC_Click); + // + // ribbonPanel4 + // + this.ribbonPanel4.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel4.Controls.Add(this.ribbonBar1); + this.ribbonPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel4.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel4.Name = "ribbonPanel4"; + this.ribbonPanel4.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel4.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel4.Style.Class = ""; + this.ribbonPanel4.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel4.StyleMouseDown.Class = ""; + this.ribbonPanel4.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel4.StyleMouseOver.Class = ""; + this.ribbonPanel4.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel4.TabIndex = 36; + this.ribbonPanel4.Visible = false; + // + // ribbonBar1 + // + this.ribbonBar1.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar1.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar1.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar1.BackgroundStyle.Class = ""; + this.ribbonBar1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar1.ContainerControlProcessDialogKey = true; + this.ribbonBar1.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar1.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.btn_document_info}); + this.ribbonBar1.Location = new System.Drawing.Point(3, 0); + this.ribbonBar1.Name = "ribbonBar1"; + this.ribbonBar1.Size = new System.Drawing.Size(88, 59); + this.ribbonBar1.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar1.TabIndex = 0; + // + // + // + this.ribbonBar1.TitleStyle.Class = ""; + this.ribbonBar1.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar1.TitleStyleMouseOver.Class = ""; + this.ribbonBar1.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar1.TitleVisible = false; + // + // btn_document_info + // + this.btn_document_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_document_info.Image"))); + this.btn_document_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_document_info.Name = "btn_document_info"; + this.btn_document_info.SubItemsExpandWidth = 14; + this.btn_document_info.Text = "文档管理"; + this.btn_document_info.Click += new System.EventHandler(this.btn_document_info_Click); + // + // ribbonPanel12 + // + this.ribbonPanel12.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel12.Controls.Add(this.ribbonBar18); + this.ribbonPanel12.Controls.Add(this.ribbonBar13); + this.ribbonPanel12.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel12.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel12.Name = "ribbonPanel12"; + this.ribbonPanel12.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel12.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel12.Style.Class = ""; + this.ribbonPanel12.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel12.StyleMouseDown.Class = ""; + this.ribbonPanel12.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel12.StyleMouseOver.Class = ""; + this.ribbonPanel12.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel12.TabIndex = 34; + this.ribbonPanel12.Visible = false; + // + // ribbonBar18 + // + this.ribbonBar18.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar18.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar18.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar18.BackgroundStyle.Class = ""; + this.ribbonBar18.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar18.ContainerControlProcessDialogKey = true; + this.ribbonBar18.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar18.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItem133, + this.buttonItem132}); + this.ribbonBar18.Location = new System.Drawing.Point(508, 0); + this.ribbonBar18.Name = "ribbonBar18"; + this.ribbonBar18.Size = new System.Drawing.Size(171, 59); + this.ribbonBar18.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar18.TabIndex = 1; + // + // + // + this.ribbonBar18.TitleStyle.Class = ""; + this.ribbonBar18.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar18.TitleStyleMouseOver.Class = ""; + this.ribbonBar18.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar18.TitleVisible = false; + // + // buttonItem133 + // + this.buttonItem133.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem133.Image"))); + this.buttonItem133.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem133.Name = "buttonItem133"; + this.buttonItem133.SubItemsExpandWidth = 14; + this.buttonItem133.Text = "审核入库"; + this.buttonItem133.Click += new System.EventHandler(this.buttonItem133_Click_1); + // + // buttonItem132 + // + this.buttonItem132.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem132.Image"))); + this.buttonItem132.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem132.Name = "buttonItem132"; + this.buttonItem132.SubItemsExpandWidth = 14; + this.buttonItem132.Text = "已审核的图层"; + this.buttonItem132.Visible = false; + this.buttonItem132.Click += new System.EventHandler(this.buttonItem132_Click_1); + // + // ribbonBar13 + // + this.ribbonBar13.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar13.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar13.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar13.BackgroundStyle.Class = ""; + this.ribbonBar13.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar13.ContainerControlProcessDialogKey = true; + this.ribbonBar13.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar13.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItem127, + this.buttonItem128, + this.sliderItem1, + this.buttonItem134, + this.buttonItem130, + this.btn_check_history}); + this.ribbonBar13.Location = new System.Drawing.Point(3, 0); + this.ribbonBar13.Name = "ribbonBar13"; + this.ribbonBar13.Size = new System.Drawing.Size(505, 59); + this.ribbonBar13.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar13.TabIndex = 0; + // + // + // + this.ribbonBar13.TitleStyle.Class = ""; + this.ribbonBar13.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar13.TitleStyleMouseOver.Class = ""; + this.ribbonBar13.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar13.TitleVisible = false; + // + // buttonItem127 + // + this.buttonItem127.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem127.Image"))); + this.buttonItem127.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem127.Name = "buttonItem127"; + this.buttonItem127.SubItemsExpandWidth = 14; + this.buttonItem127.Text = "打开数据"; + this.buttonItem127.Click += new System.EventHandler(this.buttonItem127_Click_2); + // + // buttonItem128 + // + this.buttonItem128.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem128.Image"))); + this.buttonItem128.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem128.Name = "buttonItem128"; + this.buttonItem128.SubItemsExpandWidth = 14; + this.buttonItem128.Text = "一键审核"; + this.buttonItem128.Click += new System.EventHandler(this.buttonItem128_Click); + // + // sliderItem1 + // + this.sliderItem1.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; + this.sliderItem1.LabelWidth = 50; + this.sliderItem1.Name = "sliderItem1"; + this.sliderItem1.Text = "地面透明度"; + this.sliderItem1.TextColor = System.Drawing.Color.Black; + this.sliderItem1.Value = 0; + this.sliderItem1.ValueChanged += new System.EventHandler(this.sliderItem1_ValueChanged); + // + // buttonItem134 + // + this.buttonItem134.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem134.Image"))); + this.buttonItem134.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem134.Name = "buttonItem134"; + this.buttonItem134.SubItemsExpandWidth = 14; + this.buttonItem134.Text = "模拟设计修改"; + this.buttonItem134.Click += new System.EventHandler(this.buttonItem134_Click_1); + // + // buttonItem130 + // + this.buttonItem130.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem130.Image"))); + this.buttonItem130.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem130.Name = "buttonItem130"; + this.buttonItem130.SubItemsExpandWidth = 14; + this.buttonItem130.Text = "导出审核图"; + this.buttonItem130.Click += new System.EventHandler(this.buttonItem130_Click_1); + // + // btn_check_history + // + this.btn_check_history.Image = ((System.Drawing.Image)(resources.GetObject("btn_check_history.Image"))); + this.btn_check_history.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_check_history.Name = "btn_check_history"; + this.btn_check_history.SubItemsExpandWidth = 14; + this.btn_check_history.Text = "审核历史"; + this.btn_check_history.Click += new System.EventHandler(this.btn_check_history_Click); + // + // ribbonPanel5 + // + this.ribbonPanel5.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel5.Controls.Add(this.ribbonBar2); + this.ribbonPanel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel5.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel5.Name = "ribbonPanel5"; + this.ribbonPanel5.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel5.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel5.Style.Class = ""; + this.ribbonPanel5.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel5.StyleMouseDown.Class = ""; + this.ribbonPanel5.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel5.StyleMouseOver.Class = ""; + this.ribbonPanel5.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel5.TabIndex = 37; + this.ribbonPanel5.Visible = false; + // + // ribbonBar2 + // + this.ribbonBar2.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar2.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar2.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar2.BackgroundStyle.Class = ""; + this.ribbonBar2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar2.ContainerControlProcessDialogKey = true; + this.ribbonBar2.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar2.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItemHX1, + this.buttonItemHX2, + this.buttonItemDCTP, + this.sliderItem3}); + this.ribbonBar2.Location = new System.Drawing.Point(3, 0); + this.ribbonBar2.Name = "ribbonBar2"; + this.ribbonBar2.Size = new System.Drawing.Size(350, 59); + this.ribbonBar2.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar2.TabIndex = 0; + // + // + // + this.ribbonBar2.TitleStyle.Class = ""; + this.ribbonBar2.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar2.TitleStyleMouseOver.Class = ""; + this.ribbonBar2.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar2.TitleVisible = false; + // + // buttonItemHX1 + // + this.buttonItemHX1.AutoExpandOnClick = true; + this.buttonItemHX1.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX1.Image"))); + this.buttonItemHX1.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemHX1.Name = "buttonItemHX1"; + this.buttonItemHX1.SubItemsExpandWidth = 14; + this.buttonItemHX1.Text = "导入红线"; + this.buttonItemHX1.Click += new System.EventHandler(this.buttonItemHX1_Click); + // + // buttonItemHX2 + // + this.buttonItemHX2.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX2.Image"))); + this.buttonItemHX2.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemHX2.Name = "buttonItemHX2"; + this.buttonItemHX2.SubItemsExpandWidth = 14; + this.buttonItemHX2.Text = "红线审核"; + this.buttonItemHX2.Click += new System.EventHandler(this.buttonItemHX2_Click); + // + // buttonItemDCTP + // + this.buttonItemDCTP.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemDCTP.Image"))); + this.buttonItemDCTP.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemDCTP.Name = "buttonItemDCTP"; + this.buttonItemDCTP.SubItemsExpandWidth = 14; + this.buttonItemDCTP.Text = "导出图片"; + this.buttonItemDCTP.Click += new System.EventHandler(this.buttonItemDCTP_Click); + // + // sliderItem3 + // + this.sliderItem3.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; + this.sliderItem3.LabelWidth = 50; + this.sliderItem3.Name = "sliderItem3"; + this.sliderItem3.Text = "地面透明度"; + this.sliderItem3.TextColor = System.Drawing.Color.Black; + this.sliderItem3.Value = 0; + this.sliderItem3.ValueChanged += new System.EventHandler(this.sliderItem3_ValueChanged); + // + // ribbonPanel2 + // + this.ribbonPanel2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel2.Controls.Add(this.ribbonBar3); + this.ribbonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel2.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel2.Name = "ribbonPanel2"; + this.ribbonPanel2.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel2.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel2.Style.Class = ""; + this.ribbonPanel2.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel2.StyleMouseDown.Class = ""; + this.ribbonPanel2.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel2.StyleMouseOver.Class = ""; + this.ribbonPanel2.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel2.TabIndex = 39; + this.ribbonPanel2.Visible = false; + // + // ribbonBar3 + // + this.ribbonBar3.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar3.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar3.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar3.BackgroundStyle.Class = ""; + this.ribbonBar3.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar3.ContainerControlProcessDialogKey = true; + this.ribbonBar3.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar3.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.btn_user_info, + this.btn_role_info, + this.btn_resc_info, + this.btn_role_resc, + this.btn_user_role, + this.btn_password_edit, + this.buttonItemPasswordReset}); + this.ribbonBar3.Location = new System.Drawing.Point(3, 0); + this.ribbonBar3.Name = "ribbonBar3"; + this.ribbonBar3.Size = new System.Drawing.Size(551, 59); + this.ribbonBar3.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar3.TabIndex = 1; + // + // + // + this.ribbonBar3.TitleStyle.Class = ""; + this.ribbonBar3.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar3.TitleStyleMouseOver.Class = ""; + this.ribbonBar3.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar3.TitleVisible = false; + // + // btn_user_info + // + this.btn_user_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_info.Image"))); + this.btn_user_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_user_info.Name = "btn_user_info"; + this.btn_user_info.SubItemsExpandWidth = 14; + this.btn_user_info.Text = "用户管理"; + this.btn_user_info.Click += new System.EventHandler(this.btn_user_info_Click); + // + // btn_role_info + // + this.btn_role_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_info.Image"))); + this.btn_role_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_role_info.Name = "btn_role_info"; + this.btn_role_info.SubItemsExpandWidth = 14; + this.btn_role_info.Text = "角色管理"; + this.btn_role_info.Click += new System.EventHandler(this.btn_role_info_Click); + // + // btn_resc_info + // + this.btn_resc_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_resc_info.Image"))); + this.btn_resc_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_resc_info.Name = "btn_resc_info"; + this.btn_resc_info.SubItemsExpandWidth = 14; + this.btn_resc_info.Text = "资源管理"; + this.btn_resc_info.Visible = false; + this.btn_resc_info.Click += new System.EventHandler(this.btn_resc_info_Click); + // + // btn_role_resc + // + this.btn_role_resc.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_resc.Image"))); + this.btn_role_resc.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_role_resc.Name = "btn_role_resc"; + this.btn_role_resc.SubItemsExpandWidth = 14; + this.btn_role_resc.Text = "角色授权"; + this.btn_role_resc.Click += new System.EventHandler(this.btn_role_resc_Click); + // + // btn_user_role + // + this.btn_user_role.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_role.Image"))); + this.btn_user_role.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_user_role.Name = "btn_user_role"; + this.btn_user_role.SubItemsExpandWidth = 14; + this.btn_user_role.Text = "用户授权"; + this.btn_user_role.Click += new System.EventHandler(this.btn_user_role_Click); + // + // btn_password_edit + // + this.btn_password_edit.Image = ((System.Drawing.Image)(resources.GetObject("btn_password_edit.Image"))); + this.btn_password_edit.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_password_edit.Name = "btn_password_edit"; + this.btn_password_edit.SubItemsExpandWidth = 14; + this.btn_password_edit.Text = "密码修改"; + this.btn_password_edit.Click += new System.EventHandler(this.btn_password_edit_Click); + // + // buttonItemPasswordReset + // + this.buttonItemPasswordReset.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemPasswordReset.Image"))); + this.buttonItemPasswordReset.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemPasswordReset.Name = "buttonItemPasswordReset"; + this.buttonItemPasswordReset.SubItemsExpandWidth = 14; + this.buttonItemPasswordReset.Text = "重置密码"; + this.buttonItemPasswordReset.Click += new System.EventHandler(this.buttonItemPasswordReset_Click); + // // ribbonPanel1 // this.ribbonPanel1.AutoSize = true; @@ -4465,7 +4465,6 @@ // ribbonTabItem9 // this.ribbonTabItem9.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.ImageAndText; - this.ribbonTabItem9.Checked = true; this.ribbonTabItem9.HoverImage = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem9.HoverImage"))); this.ribbonTabItem9.Image = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem9.Image"))); this.ribbonTabItem9.Name = "ribbonTabItem9"; @@ -4486,6 +4485,7 @@ // ribbonTabItem14 // this.ribbonTabItem14.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.ImageAndText; + this.ribbonTabItem14.Checked = true; this.ribbonTabItem14.HoverImage = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem14.HoverImage"))); this.ribbonTabItem14.Image = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem14.Image"))); this.ribbonTabItem14.Name = "ribbonTabItem14"; @@ -5480,7 +5480,7 @@ this.dataGridViewX2.ReadOnly = true; this.dataGridViewX2.RowHeadersVisible = false; this.dataGridViewX2.RowTemplate.Height = 23; - this.dataGridViewX2.Size = new System.Drawing.Size(23359, 92); + this.dataGridViewX2.Size = new System.Drawing.Size(23953, 92); this.dataGridViewX2.TabIndex = 11; // // dataGridViewTextBoxColumn10 @@ -5574,7 +5574,7 @@ this.dataGridViewX3.ReadOnly = true; this.dataGridViewX3.RowHeadersVisible = false; this.dataGridViewX3.RowTemplate.Height = 23; - this.dataGridViewX3.Size = new System.Drawing.Size(23358, 127); + this.dataGridViewX3.Size = new System.Drawing.Size(23952, 127); this.dataGridViewX3.TabIndex = 5; this.dataGridViewX3.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.dataGridViewX3_MouseDoubleClick); // @@ -5832,7 +5832,7 @@ this.dataGridViewX8.ReadOnly = true; this.dataGridViewX8.RowHeadersVisible = false; this.dataGridViewX8.RowTemplate.Height = 23; - this.dataGridViewX8.Size = new System.Drawing.Size(133, 92); + this.dataGridViewX8.Size = new System.Drawing.Size(99, 92); this.dataGridViewX8.TabIndex = 11; // // dataGridViewTextBoxColumn12 @@ -5927,7 +5927,7 @@ this.dataGridViewX9.ReadOnly = true; this.dataGridViewX9.RowHeadersVisible = false; this.dataGridViewX9.RowTemplate.Height = 23; - this.dataGridViewX9.Size = new System.Drawing.Size(132, 127); + this.dataGridViewX9.Size = new System.Drawing.Size(98, 127); this.dataGridViewX9.TabIndex = 5; this.dataGridViewX9.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.dataGridViewX9_MouseDoubleClick); // @@ -6791,12 +6791,12 @@ this.contextMenuStripDeleteLayerNode.ResumeLayout(false); this.ribbonControl1.ResumeLayout(false); this.ribbonControl1.PerformLayout(); + this.ribbonPanel15.ResumeLayout(false); this.ribbonPanel6.ResumeLayout(false); this.ribbonPanel4.ResumeLayout(false); this.ribbonPanel12.ResumeLayout(false); this.ribbonPanel5.ResumeLayout(false); this.ribbonPanel2.ResumeLayout(false); - this.ribbonPanel15.ResumeLayout(false); this.ribbonPanel1.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.panelOfTable.ResumeLayout(false); diff --git a/MainFrm.resx b/MainFrm.resx index b408d34..6b9ae78 100644 --- a/MainFrm.resx +++ b/MainFrm.resx @@ -351,804 +351,6 @@ 766, 54 - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlDMzFEOUI4NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 - NEI4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlDMzFEOUI3NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 - NEI4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDk5Mzk2NTZBRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz73sIMwAAADIElEQVRIS7WVa0iTYRTH56Uiysvm3TkvpLl5DRIvQYWVWl+6 - iNEVg0yhQqloQZHkLT+Y0YdAs75IpEUhzERZoZhsRpZlS7soblotsRwoxhqWeTrnYZtv+u7NsB74cZ5z - zv89/z17HzYRAPxXeIv/EpFXcOyi4BvKhfehv4FvKBfeh+ayqIUDlIgBgT8whpRYoT2fhgvNVJKBQT9s - hB8/QZDPpnEIjEhg0J5Pw4Vm0mwygG9T06BSqQQhTUhUMoRGpyxYT7OZwfhXC6jVakFIYzNYqN5uMGKa - BI1GIwhpghXJaJJi13d0dEB2bj74hsWzSDlXbzfQG02g0+kEIU2wIomdovzKdVifngnFFytBeb4cLN+n - WaSc6hfKKqB/eHTWoHfwExgMBkFII5MnQUD4WlAWloO26wVs35MDmifPmQFFyqlO/aKKqlmDp31DYDKZ - BCGNTJ4IPqHx8LJvACbNUw7p6e2HuJQMNIhhBuaHj3vBYrEI0tb1BoIiE9kJ9h7Oh7EJM+g/jEJuwVlY - s24ri5RTnfo5BedAIoueIYPumvomuHzjzm9cq2uCq7UNUH2rEarr7kNd0yP26Y+eKoSWtk4wfpmAg7kn - ITY5DUorq1g8cOQEqze3aplOEhRtJoMcL1mMTixV9IgD5a/tSBVDYql8AKOBQLEJtTP08gY/jjFiktKg - 5FIV21Ok3NazvmR2AvrFkCAJyGYk1comZAuHDM/AyLvHThfBveZ26NOPwI59eey7LsbhFCmnOvVJ5+Ef - rrYZLEU8EZ85+HLwW7ZCLMVTFWdkHoLut+/hgbYHaE9XN31XNsupTrWV3jKVs+uS3cyAD0cLe331jW3Q - qRt0CPUlQVHDKI+fN9iGo4W90uNnyuA2vvRtWTlQgxeg/dk7FimnOvU9/CNqUe47b7ANRwt7AfjpKvAK - Gt18Qur35ymhRfsKKLr5hN7EyzDq7humWrrcfSfKxbz/QlwcLDck1snZJdUzYHUDmk57+K1qdXJyzsL6 - RmQD9ZmObygXB8sVIRO6fXQB4hC6eRQppzr1XXmHclnAckFomLc1Um5dItEvhZ97MQXP9N0AAAAASUVO - RK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhDMTdBQjRENEFBRTExRTQ4QjQyODY0MDNBNTJE - NzNCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhDMTdBQjRDNEFBRTExRTQ4QjQyODY0MDNBNTJE - NzNCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NUQyMjc4QTlBQjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4eHsDfAAAB00lEQVRIS7XVWytEURQH8HniTTNHLs0NCXNcXjTN5dH9g/gM - 3jx590QhFDJS0gyTGmpqaqJIMW4hzlAoOaWISS7LWifntI3ddnTGrl92e/57/We/DBsA/CvuYSHZSr0t - lvCGsriX/oI3lMW9lM/SwgF9SEHwizs08IX2vAyLZvZRgXJ+cQWv7yB0q96Ds86voT0vw6KZNJsK4Pnl - DWKxmBBlqhpDUN0UNp2n2VrB/WMOEomEEGX0ArN5o+BGfYB0Oi1EGa8cwpKw6bxRcH6lQiaTEaKMVw5q - rzCbNwr2z65BURQhynh8Qe0VZvNGwdZBFlRVFaKMxxfQXmE2rxc8rW3sQy6XE0puHoG7IaC9YnV9j5th - pbZPqOCDCrbH5uIwOD7/zWgkDkNTizAyuwQjkWWIxFNQWduqmVxI/MiPz6/A8HTUuDMTTYLkbrqhgt5S - T3PG4ZJ3HE7focElZx0u3yn+VQiG1ZLymmm7s74f88f42S6bl9zyJZ6d6Xckd+Mt5ieogH4xJORHHajt - SzvqZPSgECpHZSiA2DztuxBlad+NgnpBEbIjusiiYboKRF+kGFHegUR5ImkFv7G0eAPzWVq8gfksLd5/ - oULiHhYS97BwwPYJlSCUgVubViQAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJEMDQyOEZBNEFEMjExRTRBN0MxRDBCNzJGRUND - MDEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJEMDQyOEY5NEFEMjExRTRBN0MxRDBCNzJGRUND - MDEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkRDRkI1RDVEMTRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz59jfe3AAAEbUlEQVRIS8WTeUybZRzHF48/pnFOuQRajkFLgQFb5iRLNJr4 - l/EPgsniUI4xZDAY1zyxwApsMJyIME61rByl3DfoYGBrgbWUY06FcZSCha4rQ8jYxkqPr2/fvkv8o2Sg - S/wkT970eb6/T5/39z7Prv8dt/Oql4mR4HZJ3ccoXFxhVCzB9DT9JueJdSq6c1wzVZFupepVzxu34XVj - CaEDi1jX6hF8ZQoeokl4iBVwzV9YdU1XRlIl28eVo8phCdXwGltEeOUsro6psaHVwcSDh5volc4iOO8X - 7KuVwb1hEi7J8myq9PEQO//I85oafr0KtEpUpNSETm+AwWDAvfv3YTQaybnm/t/AyO6Ga+UonJOnIijF - 1hA9tWI2qle9RxcI+RIpmZpTIfBULhIyyqHVahHPKcN70TmYnFFCp9OhqXcc9KwW0DOHVl3YU1aUyjJu - F1SpfhO3EM6bMMsVt+D8Zhz2HIpC4oU6bG5uIu4cD3tfTwAjIBNypQYbGxsISquBU34PaDHiVEplGXee - SuIjVaBv3Lz7gJg8vHg4FlZvc+ATVoLipiHsD8qCXWAO7IPK8MG5FjLXKboOeoYADkldUkplGWb7vOb4 - 4BzxIXXQE/1m59WDXdgBvxPfwz6UC4eQUth/WIBDZ2qQXj+K7IYRImeE5s5fOFrcDPvPapcJzVNmmwVY - VxWG9U09uau1tTVymPpc0iYFLew7OEUJ4BwtALfvJpl5xMrKCu6s3cUrn5YbCM1us80CrJZZVWjXr7j3 - 4CE0y8v4IrcaH+cK4Bv+DRyPl8ApphYuia3wZ3eCUzOA1PIfcVuzjHnlIgK/vgy7mHzTG+w12yzA5E53 - edYPo1c2i/X1dQTEfwvbwDQ4hhXg8OcN4P48Df+UTrgkNIAeW4Hg3Hbo9Xq0iGSgs4ls5CUhoXnObLOA - S8pkhG/bdZzgDZJnffT3GXieLAA9XgB2/RjZjuQqMWhxfBw824H55XWyhcfy+HDNqoB1SH4Codn6G7iw - p3d78EaVPlXX0CaZgkqlgly1gpCiK0htHCH/IL6oFcEF3ZjT3CUvXqv0DzDSS0FPq1a/8EbYS5Rqa+if - SAJ8KoeNR7gitEsnoVQqSbGOkJmYX1ggxaY70SabwIGMUrjn8I3WIXnBRPnWu/8nDnE9Sd7cAaP/ZSES - 6/rRKJRArpiHXC7HzekZNIukiCyrhW9mGZgXa4w2kUVnibJnzdXbxP5URzyDO4QjxGl5i9uNpMZeKP5U - IrywAq9yCnGAOGGMonbYxpVnEPGdyR9BO/MTj8kfgXeNFPt5IngVtoF1kQ9WcTs8qgfgmNreQMS21xZL - 0E6Ln6ef75tg8sfgXT8O77oReAkkYNXJ4PRV/4ztyfo9VPTf4xjdf9CpQKzdxxuGe6UMbhXEmc8V6mze - r3qNivx3HGN7UmglQ6CVDMIxXwybo5UcaunJQD8te9rhyx4JrWwItlGNUut3y5+hlp4cDhFCpl14k9jq - nR+Y1NTjIe7NlmMnWKoHsOtvjWYcKpheqFQAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERTg4QTFENEQyMjExRTRBODEyODk0M0RBMTc5 - Qjg3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERTg4QTFDNEQyMjExRTRBODEyODk0M0RBMTc5 - Qjg3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjJGOUEyRDEyMTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6wJF34AAACl0lEQVRIS62Vy08TURSH73/QhQtXVnBhxEcMiUkhbEg0hB1R - Q1i68C8wIW5cEqMLN7ho2Ji4YiEhWq0prYUhfULbadN3obTaChobtZEUsFY9nnPS6WM6HYowyZf87j33 - nG/amaai9geOBYA+4pTxihmBE8DcTQB4J8em/9IwSQyagmrtL+z9rMFmvnhkKvtV7tcVHPz6DVsftulA - AckdhUg8zf19eoLKAd597iMLMItewfOxUDTN/bqCH3tVSG8VWIBZ9AoJApEk9+sKvu/uQ2IjzwJkGtH8 - OrTwy3Hu77vIAnV9mgWlcgWiqRwLjAMmkOMbPbNTKnN/JJntqJGEBZ++7oKcyLLgLN4JrU8Cms2C4pcy - BKKZumCI18temQ/8DzSLZlBmQX7nG/jCKdpgAa0driCtY5iFHuqHSjNoFtaags1iCdzBBG+QgNY2aZ0F - mIUe6osENAtrTUEq/7kDq9PHAszU5yYoq9f1i9cUSCD5ozxDEeTsrhAoONwyxLLb8MrhYQFmZYCHsnpd - v3hNgQROb5hnKIK29944MAThTBEWbS4WYBZ6qC/sKSy5ZJ6BGUQg8b4Bbhjod4AZXlhXWdBa10LrIVul - AM9ggS+aa6AIMMO8ZYUO0KeyIOMtZyaQpXpNi4LFucYzMINwhbMNcMNw5oIJMMNKIA0LNg88mZuH/ssj - dPgBMnN+cBRmny1wrRtSMMMzWCCFMg0UAeY2Fh0+GL5xG8Zu3oHXUrCj3g0WONdTbeBm21/o1N17gPtg - 98Xh3VoS3qzKMDI22agfglnY/Uld8NDc/ZlZwAwvl4Ngun6LGh8rdfVDViNs3rguOOzq6XOD8PDpc7g2 - OkHDH7XWtYa2It66Y4eCQ8cRfpvUNa2hTUD8A6JMaBvCyTdJAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERjY3MEZENEQyMzExRTRCNDlGQUMwMzk0OTAw - Qzc4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERjY3MEZDNEQyMzExRTRCNDlGQUMwMzk0OTAw - Qzc4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjhGOUEyRDEyMTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6GKmpFAAAC+UlEQVRIS63T20vTYRzH8Yforj/Ei24UiSgKIygKi8oyxZQo - cvNYeXaesmzqPGu2POd0ulSsnIdaurTSTJ3O6UxTPGya5vCQx5AuPn39RbHop7nZxQt+z3ie93e/Z4w1 - p7nsCoBt8R6yBF/UHPv+Wb0rfFFzm99CRIwEW1gnqXzxTXxRc0ydctm4OlID2sxrw6iCtiwItC+A2P/D - frLnjwGNSZdMq6N1WOvLwFpP4l/WdRlY6Jaio9Ab7QXba8sVoDHZGdT8PYS9THDqMGnLsKpNw0qXGCua - BO55VZdNQ6U/DRRibVCGb+N1pH5bukoRqHmDHOIG1N8/X2F4I8WyNhtf2+9hqSsZxqZ4upbb6HsSZLHO - Im90ym6hNVcIaktYTexZyUelGEvaHMy/jcFiZxo0xX5Y7ivGcn8JkVmA9uvlWBmqwpJeAWovs+poR99O - eRgWtQWYVUdgrj0FH+i+F3XF3NoappZYGJrEoLaOVYpOOTY/FGJB+xjTqnDMtMTTAC/Ma/Ix/TLUKl9e - x0JfFQpql7PykBP7lWIXzPeUYLIhHCPKCLr/AMy2ZsKoDLTKdNNdvM8TgNpRTBZwfJ885CTmaIChPhwa - mS+GnkdhqjEWY9X+VplqvIMXEhdQ24mZeuSs0N/BNNWWj4k6EdSZHhhXxWH0aSCGFd4c4Tk7zk7XBlUM - FKLToK4Nm+0qYnneRzqGGiSYaIiiyZdhVCdgqFSIwRJPjucZW85O1pvnRmvDkO9zFNTdy2Y6HjGp4HCF - 5kk4xhoiURd/EROv4tBfeM0qAyUC9Mp9QM0+7o829T6LZV0/mNycS6+nFKFWfAGj9ZHozfGwil7miZYH - 7qCmghsw+S6VpV894KuUuKFbfhNNqa749CwY3dm0toK+VABl3HlQM5obYHybwFLc7W1y/Y5BlX6FfgNn - DNcEY0DhZZX+MiGKbh0DNR24AYYWMSfJzc6GZBApwS5skIzNODcg0dV2V36FtsJ7yBJ8UXO8hyzBFzXH - ++H/A/YDv9/V87iOlrYAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 - RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL - ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH - s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW - uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx - xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd - iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ - qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW - GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE - NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n - KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw - qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI - HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq - wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q - 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA3MTZBNTkzNEEwMjExRTRBQjdERDhBQkEzMDEx - MzZEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA3MTZBNTkyNEEwMjExRTRBQjdERDhBQkEzMDEx - MzZEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTgxNjM4Q0YwMTRBRTQxMTk2M0JC - NEQ0MzNCOUIxQzgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz7RblD4AAAHUklEQVRIS22WC1ST5xnHg7OerZvT9aydtdzJhVzIlSSEXAgJ - JAESIFyTcJPgBRXEincrnVhaQKug1Qhepk7trG1ltAWn1RbrhYsX0FmGpdQb01Y7bREq3U7/e76s89iz - fef8zvM975fv/3/ey/e+YQFgvXA17ifw1QkBkUoTm2LGpqbdtRf7rnz41d1710dHx0bHx78HE5mcaWee - 81XmLLZMJ/r5L3/9FIvFCmA0/8v/GJDo00TSWy1tO4Zvfzn0aHwcD0fHcKq7F/vfaYdvz9vYR/GTrl6M - jIxi7LtHuPPV18PvHTn+R150fOq00MjfkMmE/2tAws8Q2R2nu1q/oxdvDN/BqtqtUCcXw5C7APbZq+Es - f8UfmZxpZ55fu/l3jDwcxUenOlup567pEaJAMpn4EwMS/hXh6bl4qWN0bAx7D70PqcmNjPIaVL5xCEt9 - h7Hg9QOYV7sHpTV/wPy6vShbt8//nPndjv2H8c23I+g639sRqTLlPxfMmcaY+A1IOIDGMe3j013tTCVr - X2+GpXApZlbvRPm6AyipasKMFT54V+9Ayeqd/li4bAtcC9cht2Id3JUbkViwGIW+Zbj/4FscP3nmCFdu - yPnZxKcm+w3IUXjgndZ9D0Yewrf7LZjzFmNu7ZsoWulD3pJNcC9qgLN0LRwlL8HuXeWPTM60exY3InXW - y5C/4YF4fS5qDjXj7v0H2HPw3QPBkXINU/0EouDajVs3+z8bgkiXhrylW5G9oB45VB0jZs2vhCVvERI9 - C5HoJigyOdPOGCp8+VA1FkG1vhi8JSm4NDiA/quf3+IoDCUsmpSg6vrGxntf/wOVq+sQn7sQWWW1SJ1Z - BWteJUzZ8xGfNRfGzLmwFSxByowV/sjkxsxSCNalQvlaPrQNcxBT74X45RzM3FyF23e+xMrqus00POa4 - ox+d+vj6rdsQaVOQMbcG5pwFsHoWQZ9aAp3DC6NzDpKLliMhtwKmrPn+mFS4DPw6O8RVmZCuyYG6dgaU - NQVQvToD/BftuDZ8G4fbjnWwaHIL/vq3wVstbccg0KYi0VUBY0YpYlOKoLZ6/JhzyqFJyn+cqyxucGss - UKx1I2pVOqJWpkPyUhai1+T74S5MxsETbbSi+oaZOSj//Isbo5ubdiPKkIaYpDzo0ryQxzv9xNgYUffj - XGZMR0S1CfwlNkStSId4hROCyhQIFqVAscoF2cpscCuSUf/mdvQPDI4xBsuHrt/84fevNUCgSYacBNQW - F6Jik/xEm7Mg0dl/zG1gFxvBnZMA3jwL+GU2iF50+O8ZxJUZRDq485KwrHk9Phv64gfGYMmVgcHxqlc3 - gCM3kwhj4gQ/mqpUmiHR2yGMsfrvGXhGMsgygZNvAs+bCP4cGzheyr3xEC1wQFhmB2dWIpZvq8fl/oHv - ycBc1nmu797W7XsRLFCTiAkijRUcmQ4cqQ48hdGfs8WxYCu0YOt1iLDqEJ6qRWR+ItgeI8I9eoTn6yGY - ZQN/tg2hhXFo/NMedPb03meWqbu1/cMrZzrPY1qYCByJHlypniKJCFQIF6rBk8UhMtqIMIUGISolwuI1 - 4NqN4DjjEJquQWhGDNguA/UqHpHFFgRma9Dd24c/tx29yuIq4jR1jU0f9F7uh8WRjUCuDBFRJCA1gL5E - hEQqECJQIFxKIjFkbDCAbdIjLEGDYIsSwUlKBNmVYOeSoZuKyDXAXObGpwODWFPXcJQVyJVMpmGq7rpw - 6Z+79x/Cs0E8qpqpnF4SaxHElSAoUopgkQzBEiJahqAYOYL0cgQaiQQ5ItJoiJxacHKMmO5QYnfL2zjX - e/lfHJm+jjY8VgAvOi57o2/Xye4Ll+DMLcLzNFQRYg31JAYchR6hYiUCRVIESYhoQi1DoFaGELMabLsB - EQ6ar0wj9USNtIpiXP50ABu37OgK5itm+je758MFU3lK09qD734wdKLjNKK1JqpajiitDUKdFSIDrXlT - CkQmKwRmC4Q2ylNTIExPgjAzCWKXA2F2HRQ5iTjTcw6tbceGI6Ta+qcnT+X7DeiaEB4Vo6AJ39h65Phd - 2jpgtDkQKlFDbsmEJo02Myd9wU4XVFlEDpHngaaoENEFLoSnxEGf58DJs120VZ/+RqCO9/0uhGch3emP - Dxy6JoaLNYl07G3ad7Dlxidnz2FV9SsIEUYhRKaCxJoKdSZtap5iqN0FkGQ4EWrSIVQnxYq6tTjfdwXv - tR+7Q+JNL7BF2aQXREx50iCAmBTCV2hpTho2bNnZd+LkWaqqBw3btqOwtBSmNAeUFhPinQ7kzZ+NDc3b - 0HWhD93n++Dbua+fK9NvoTM5+Udx5mye9NjgCZNf0HEnpN5U5RbPa9+0bdfQ+0eOPzp5ppvG96JfjFkM - nXR/vOP0ePOu/deyCuf8JVSorJny7HQdvR9MTCUm+fUYgyehazLBVCCd8ttpJbQANtO3cDjWbO9werzd - ruK5F9Ld3p7YBEdHCE/WMi0s0jf5mefm0e+ZCsXEf85i/98XsP4NaTpxka74X+IAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJBREU3RDk2NEFCMDExRTQ4OUM5QjZFOENGQzJF - MDk1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJBREU3RDk1NEFCMDExRTQ4OUM5QjZFOENGQzJF - MDk1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MEM5Mzk2NTZBRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz52g1XsAAADeUlEQVRIS62Va0hTYRiAXzVNoQs6oUCttJu3aqatrLxr2k0n - W6bLLlLSxTKCKLoQQUg3IbLMflSgBRGRP7JSSzGnWalYdpnV1MQu1tBWWklqvr3fp2dsOytSfOFh3/l2 - eJ7tnDMGkkmzGCqigsARhPlUQqCi8nEd9v7GEYP5mFcI4K/e/hGHeQ2B7p4+1HV8Nf6Kw4a5GGxtCHzv - 7sU2nR4lbr4/AUBFKIeD4GKYBL79+IX6rm622U8nSgnX4SC4GCaBL50/OXwTwIUY1ohcQkCn/84ZDLBP - I5p16TBl7XYIoaXVwI54RC4h8LG9k/OvQPIOmEZUJW2F+XRoPbBrOiKXEGj9rOdYCqi2gxXhnLQNIo6f - n9tEa7ViI79PoojIJQSaP3RwjAOJaSAjjhL3N+9zrD+W499UVJnSeeVmWDvtlcWlgCedZnK5RC4h8KZV - x2FryQSYmrAVjh/MnP46/57yS7VmZ9+zxr1Yr92NtQ1pWFmfiBevL9QpUqE0JhHcyWuImLsMAU1zG4et - V6yHC1l5oe+evNmD1ZoteL9OgaW1K7GkRoF3H8ZigTocb5bFY8bZWbpoFVwh7yiCR8xdhsAz7XuOh9QD - D2R6twyIEzG/JApz88N7z+T5d+VcDezKL43Ea4UxeCjTqyNUDpUBYeBFXjvjgOAyCdS9asXDJ3NQFj3u - 7eWCyG/FjxR45OyMr6s3S1qCYqE8RA654Uq4dOiUV/v+E9P0i1ZA9Zwg8COnA2HyDZiLYRw4dyAjC50n - z8awBBvNbbWyZ+8x10+By+GONARCbe1gDBPJloCvfKODluQ10mD+qDK5LWFyD6pfvOUYBzydXL0v2I+V - rI9Mhud5BQE9i+RQPt2P30BBYrM4HmYSNf5REGS0b5CzYdKq+iaOITA44wmPiLXwaFfGhDbZMkinYxNJ - 8CpwXxgHobQcPbhv8XegrtNyzAPsOtqHJUPeml1jm/1jYDkdM5G5hB3bDL6KhknLal9xzAN8gpMgVZHm - oKUAuwx29H420c9O/l9KHms4bC0KLFCAY6CSHr+VoHJy88lWbEjHoqoXWPzw5ZCxGKCxkslBLo22L1+6 - ahPeUj/FwgfPh8zpSzfQ0cWrwVKAjfXcWFjjPm9isWSSbx/7JEPF0cWzcYzE7dTfAmysfSLB2z0Awm1H - 8ycnjrD4N/kX4gEg8A9sAFSe4VuPvgAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkEzN0Y5NjgxNEE5MDExRTRBMzU1RUM1MkVEQTU3 - REQxIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkEzN0Y5NjgwNEE5MDExRTRBMzU1RUM1MkVEQTU3 - REQxIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MUU1QUVCQUI4RjRBRTQxMUI2QTlC - RjEwMkVGQzEyNEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4Oz1B+AAABO0lEQVRIS7WUP0sDQRDFt0snIcEiklhGJLH3k6bNp0ifYCUo - KWwMIRCx0EYxEEL+IOPO4SxzczN7d7gGfuzd7Hszd9nHOQD4V9RiStRiStQi0b68GXkgwkjzcdQigU1O - 32CC+9IjUYsENvjY7EySDHhev5skGXA3X5r8aYA3lx0wET1otYgmNMcOku+jXtMg4QJFJMb1a7uPmjUd - rVzHDfDy9pmJaZViCe5rPq7hYpgvXjPw2hNtTqBOevk+F8L0YRGQQosyHxfSf0jUegPLZwkrNedYfi6o - 9Y2RWP6cACPHYnf4XauQablfHYAxo6jt9sfwRGWgVvrVASKmdd7g2OoN4P5pVYhqbgCPmnPuzHPtua1C - s9OHyeyxEFU+IJcCb2p4zj3dKjQvrsat3jD4CwNCIcEv14/fpAfcDwXsled4Tu6+AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlGMEQ1RDBCNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 - MzBCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlGMEQ1RDBBNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 - MzBCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzFDMDRERTRENjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6zemTaAAABh0lEQVRIS7WUvUoDQRSFEwiBKPEHsRAkb+ArWIsv4CNYCSKI - jRD8a1S0m9QhdTobG5uARZogBJSkiLASFJJChQiRcJ2z2bnMZtbxCnrhY3YO556z1aSI6F9JFP+SRBEs - FFaUhoSopAyQKGIBi58jEuErcQSAhY/hyP5DL8Y7mQMcAcD8Phh+u2Tzk9cRAMz914G4wOd1BABzt/cm - LvB5HQHA3On2xQU+ryMAmB8en8UFPq8jAJjvWk/iAp/XEQDM9WZHXODzOgKAudZoiwt8XkcAMN/U78Ml - CcY7mQMcAWhz+FRc3zZFREXypwKYEiG/e+ykc1WYVRrCGUk8nGUHsyic6nKeetUK4dTESjjLDjZUlqaV - hiS8lEsh0Z1LTFYs2FBazFFwcUzB+YE+T8bffD+i4LRIwSV0jdZaO5vhHXtRPmfFgg1n81mlIQnt/W1q - bKyH34dz2XKUz1mxYBaFU5zJUG1tlXDu5TMcjuEsO5hF4exOpZWGtnLpWDiGs+xgFv9gxlmU+gIVyyIX - YCSg/AAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - 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 - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVGNUQ0RjNENEQyRDExRTRBQ0ZFOEVGNkU4Rjcw - RkEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVGNUQ0RjNDNEQyRDExRTRBQ0ZFOEVGNkU4Rjcw - RkEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzUxNUY0MjEyRDRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz7jldwbAAAEyklEQVRIS6WWDUzUdRjHoeXWVktIc74MLREMUxBQV4RYkBmL - SBwSoZIFCgULlOJFDJDxqkiAqGgoiIQ6jaFLB1EqUaC8iMgdL8cJB3fHwR13HO8Hh3x7fn+pwN01nM/2 - 2X77Pb/n+33+v/3/95zBbGOVnZM58QHhRKwgnp9KPXuQ2CtJ6ScOjGo0fcMjI93llVX55us3rqbUc49P - zDLyw9auL4iw5l+IsMY//BRujcygdcg+ug83rpzCsVhf3C6+hHg/W+R++985BtU3pey1cCCpOYQhJzo9 - 8kPX1tZcDoS0Jp2jrCgWmakhOJMVA4GwBd1KNSQ9veiUdeNifjqyMsJxveD7f8+z2rPBlg0kNZ9gJjMj - L8RqQlSegIbLX6CuYAcOBm9FHe8B2rt70SZTgNfehTphJ+paCaEYjSIJkmP24PaPnrhfsBP8okCcCbZ8 - RFLmxIuc6PTICV5Dh4IxNqSEemAA6adzwBdJ8VeDEL/XNqGkmo/iKh4HW5fWNCL7QiEqq2sw3N+Dijwf - nPx6FUjKkpjLiU6P7MDVqL/gj8nJSY4bpbcQnZyK8EOJCI2Ox3dRcY+JjkNYTAIi4w4j7+JlKBQKjI+P - 42qqJ9J832AGawkjTnR6ZPm/iXvn9+ARiWsnJjCu1YLeGshJQCKVolMs5hBLJOiSydAjl0OpUmFweBhj - ZJAfuxVJ3ub6DTJ9LVCd40Pij6AZ01IRoWVGumE5dmZEM45RjRbnolwR72Wm3yDt85W4e2o3FVLnGg1G - xsYwSvDEdxB03gEa6vJwSopOhkZHkRPhgkPbTfUbpOwwR+XxXdT9OM79EQ/lgBLNkjpsz1iMP5t/oU7H - dIoz+oeGcTbUGVHblus3SPJYgfI0LxLSIPmaL4LyHOB5bClK6gswNDLKoUucoezvx+n9W3Dg49f0G8S5 - LUfZEU8MkpC8T43YQi8UVp3kutOFenAIvep+dClUkClVOPXNZoQ6L9NvEE3uN+PdMUBvRXevCgqVmjob - gGpgEH1PwPZYTq7soy9bDolcgRNfOWL/ZhP9BpEfLsVvMW70kQ1C2qMgEyVnUiUoQ2CuPZTUra7rYYi6 - ZDi+910EvbdEv0GYkwlKIj+BijrL+jUKbdJO1LZWwD19EUrrr0Cu6tMpzhCKJcj40gEB9ov1G4RsWoLi - UBe6V7r/n70RkPMOPDJMcLXqLPc0DF3ijBaRCOneG+H31kL9BkF2i3B9nzN1qoagQ4yDlzxQUE6/lHRd - XfLeGbA9cbccwk4JHggegi8UIc3LDj7rFug3CNiwENcCt6CH3ojm9g7qqoN79HZpF9rpjjumYGu2x3I8 - 4UNU85pwv0WAox5vY7f1/xj42SxAkf/7kCmUuNfUiho+FTa3gtfaRh22o6lNxMHWbI/lKut5uFVdh7sN - jTiybQN2rpmv18DQ1+rViUJfRwia+bjXLEB1YxNqyai+VUiditDY1sHB1myP5e408FFR34Cb5WVIdLXF - Zxbz2DywJYw51WkxZ9eqebxUFyvk7rDHD24bkOhig4RZEM/4yAZhm1Ziq6lRG2mxscmm2owwdF72suOn - ZkZCTzNjuJsaYdtT4vr63E4L4xcCSYv9IXiJU30i2BxlzmzkWRHsLp8GVsNqp2aygcHfZtZtYIryU78A - AAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkUzNzJDMjE3NEFENjExRTRCNjE0OEVEQzI4MEM0 - RTZDIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkUzNzJDMjE2NEFENjExRTRCNjE0OEVEQzI4MEM0 - RTZDIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI3NUQ0QkNENDRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6PyaLfAAADMElEQVRIS6VUXUiTYRT+vi3Tzd+ps23+3KRigtiPkolEQReG - UYTkhWatpWlWGkRdddfdSPImqUAJjSIT00oxLJIk0cR+tFSyzDJtgaMkDEPkdM7ZPvm2vS6jBx6es3Pe - 8zzvtm+TohLS/ov+AACStLgEQuJyLRJWYK1yzh/+FgCoQrpnfM4fOGBhcUlIMkEVkma4H4i1y2kFcMD8 - wqKQZILKZqTqmlTAWrfvMjhgbv63Dwm0hLWQohn1eNEbzrlfPiTQAtZCKjP1GXdAIC+r4XD+9CGBFrDm - RVJ1re6pZ0GyHHMvIawauYVNCFPfvvuQQAtYC6meKXU0amNsaGN/ZR60xIf9aIgN3cpGE9OzZCZ85nEm - pGiWlLABmuJCnUOXrNB7chdct4TUo32ANDbp4NuielDpqWfePdaPX6GrohSK4uLhlCEo96YlZLbOFHzH - oJXjMSBcGn4/zQGovEDqXXtzeTb+BTrKj0J3+Q54djYP7EZdTU2MPjFSK8eieQR9QtLg6GcOQPWgqKeQ - ZyOfoK30CDw+lg2Ot3Z4VLoNqo269mCNHIa2WjYn9A1PcAAqU6m9VV3TF9psOwwPS3JgZugCdNoyocwU - jU+RlImWBpezGz0vxzkA1YOiHvPFO7Ca1kGHLQtmXp2HdutmqN+/F6JiU+h3kOpyVeHJwBgHoLIpqajm - 189HoaG4CNqsGTA1UAWth9Lg6r490PygGyLjUikgzuWqQlffCAegelDdUwLqigqhpXgjTPYeh+bCFCg2 - RkEk3vxuVz/P0c43oLP3DQegLhspNalSFxiNcLswHT48LYNbBUlQk7ebzenmyhm08w1o7xmiAP6hRZiT - 70eYkzpctUuJWdHmwWs74+F1Uz7cyE+E4ohQB5mHm9a3GywpTXzektyKduIAIsKI3ISkL4rIdYle05C9 - VrZVBmvtl7eboUyv7V4jSQdwRn8FdI72iErtCUxnIuifkJ5hUqUOq9Jr7OeCNU6bTpNVqtMcDJSldOwn - KnOk+jypJ5QANRWc0cs5SEelXr54QidfwVYAMoiHq4W/gNM6OaNCJ+diaUIqN/43+Atwg27t+9ZXBUn6 - A2MdqQeVc5pWAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjUzQzNGNDI5NEQyQzExRTQ4QkE1QUNCMEVDRDZF - MDVEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjUzQzNGNDI4NEQyQzExRTQ4QkE1QUNCMEVDRDZF - MDVEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI1NUY4OTYyQTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6IsaOmAAADF0lEQVQ4T62U/UuTURTH+0nICqRI1ERMMyNQe8N0ChqBwQhN - yvwhEgJjVCqJ/qCibZo6tzQ339h6Nre5prapUzc1XzItX1ilzuWMLLVAen+xf6DTuTxjdxsFVj58ebjc - c+7nnud7z3228DbpIaDFH/CfoqCn72DIDvNfPDM2KAqyr8PcJxqY+QBTb8kkjocXQTsKigGwfqYJHqIg - 1OxHGHvlWPx4hXB1YyA3g4CBhqst+piEnrDA3rA95vBAY1x8d7lq/DVZwm5PQZNvoKYdypSgHgbVEIh1 - cLOZzOCbSSsyRQRba6uWtcpVLbPcwlglInNUCJNWWKqABqMLCGvGlfpJELaQ/V1Vd1lujAhe0chtUrH5 - ZExnmJ85MdomEa+qZMbIEF2BHGunILSjdZwYgTt4gJqjjj0Rltml1Zq9AeL0Mn71Wn2mtDU80MIvsFTw - O+KPIoWC8BNYRIUaqrRQroJKjQOk9N+xLBF2pXJFKfnsDGYa8gS6xOO2whyMuoHaHpGzZ/pBM0IMrtXD - nT4HqNHXe0lYoogMFeQP4jbSDkCPTUyXmnNoPutSo+9WN5DEQDyeWCWnhqm4p7Oimt3b54rzmmKPVHKz - 0Xg0AU1pz87VJp+yXOfd9t3mBmLXsGrsJhSsDtF4iOWxKdpzyQNnuRW7vEUp13obFG05OVUBPtO5V1Sn - k5q4SX8ENfWA6C7xHsP981Bb2sf38ZKd4JhSuXUJHPHhg/WJnAeZFw0Xzt/w8erRtLmBnB/CSmaC599I - 2PYVRl+CXigu3R9SfCC0Pf1MZ1oqvqvjogX7gtRFJfb1n24g7GblfQcFP2fkBYm5anxqQcbLKgzyK/Df - WRTkV5+RMTg84ZrgAOHo4ZIDVNdJw67CpsVLZ5gifj97Typlq2ZFQXj8LKh5EHpnaIar8N+Al5l9Y9Vs - T7OiIAzjqaMsa6QJnBkeWvgOHdPkAuIV67PSeQpCYYZplsZ+KyyWLRyFF8D553EDbURY770J0rrYJbda - SYE4iWb9NcgpRKDrOMAWwYP6d5BTaC52zyaAWDlAm/DweL8AX9zXukfxHsIAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - 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 - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjYzQTM5NEY4Mjg0OUU0MTE5NDBEQTc4ODZEQzk5 - N0NGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJGRTU5OEQ1NDlEQjExRTRBRUVDOTkyMjQ5NzEw - REUwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJGRTU5OEQ0NDlEQjExRTRBRUVDOTkyMjQ5NzEw - REUwIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTY0MkI1RjlEQTQ5RTQxMUE0QzNB - MjdEOTJBQzc3QkMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjNBMzk0RjgyODQ5RTQxMTk0MERB - Nzg4NkRDOTk3Q0YiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6B5sF9AAACe0lEQVRIS7WVb2jMcRzHL7UHanF/Mts5prE/1li3kAfu5Ak7 - 5IHNobBkSC2UIuGJkrrSWRvTmHQWK8U1T8jqUtYwkZpaGjV/Js6to5YwfXze39+fu/v23f36hXe9us+f - 7/v9rd/dr3MQ0X/F4Zm3+K9QhWajNNlBFZqN0mQHS6lMdrCUyqSgimllUsy4XmOmp+QRDllQWbygjjq6 - uimZStOX8a+ixox3pXrM1JLCDAqYJmY7c669M0bff07mcLbtEl9QE8k6V6BH5ooXMsHZZX7ae+AY7W45 - SrPm19LbsSR9m/iRA2bYGefggVePzUgKBzeu9sQpmZ4QcG/WMtk7eLjv0WMz0kOz+TX6MUXvP6cFeNbD - bz6YvQFm2Bk9PPByZO6jksLB5KvRTzTyLikIrG2ktsvXzd4g2hGjYP1ms4eHvb850qkl65LCQW/ntVs0 - 9HpMcPx0K1X4V1Ff/3NzhnphbVDsjBk8Lm/VE44s0ZJ1KS4Ie8uXUvPBE7Tn0ElCzTMqrV5BO/cfEaDG - TD5X6PFFONLygsTF7jj1vxihyPkYNTS1iFrFxm37KHIhJmp43L7qZxzp0pJ1SeHhQGgLJQaH6fb9R1QX - 2EB3Ek9FryLe95j8K9eLT/TB0FZcskOP1iRdkIh23aR7Ay9pzaZddKY9Jup8nIpeoXXhZlHD655b85Bj - p2npLOmCML+dD/iTZhaX3+UvbRB1PpzeygFnSUUvatecRUMzisoOc+x0LZ3FixxYhQyK1cxyZhkTYhqY - RgnM6hmcwVl4ljDI0KS4AC+Kmyli8Jv2MF7GNwXY4QzOwgNv5mWTL7CLpVQmO1hKZbKDpVR/1P8OcvwB - lh7gOXXZq9sAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkNDMTJDMTRENEFDOTExRTRCRDk4ODBFRTFERTlG - MzY1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkNDMTJDMTRDNEFDOTExRTRCRDk4ODBFRTFERTlG - MzY1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjYwQjFGREZDNjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4rRYZ8AAACEElEQVRIS2MQltOlCP///x8vxqqJFIzNUGSMVRMpmCDApokU - TBBg04SEpwHxfwJ4GtQo7ACoABfODY3N+P/773+82C88GWRJBtQ4TIBmKAyziCsa/L98/c5/37Ck/3Wt - fVixT2ji//OXr/8XU9T/zy0kzQo1EhVgMRyEm0uqW//vP3Lqv5Cs9ml+CZVp/OLKs/nFleYgY0EZzQt7 - Dh7/n1/eCFLXBjUSFWAxXENZ1/r/g6evgK5P/l/d1IMXe4ck/L//+MV/RW2r/0IyWppQYxEAiwWT+qfN - /7/7wHGQq84BXT9FQEq9S1Bas0VQWqMVFWu2ANWc2LbnyP/eKfNA6qdDjUUANMN9Tex8/j999eG/LzDy - yuo7icIeQfH/n7x8/x+kV0hGOwBqNASgWbBt+frt/7cCXQRko2Cg9xfCXA5io8uv37bv//J124G+0NkF - NJYRYjoQACWR8f97T99gxSA5oHIpECZCHTvIbDCAGgy34MaDF1ixo08k3LWO3hEY8jC9IBporBDEdCAA - CqBYcPnOU4ow1AKQTyEA3YKz1x9RhKEWyEBMBwJ0C05cvocVl9R3o2BsakCYoAWHz9+mCBO0YP/pGzhx - flUHGGOTg2GCFuw+cY0iTNCCHceuUIQJWUBMBYMX80uo7gQai9MCkJAoENsDcQiZGKQXZAYEYLEAlM1B - CkCuIAeD9EKLCgYGAMLPWmGxemtkAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY2MzBBRkRDNEFDOTExRTQ5Q0JEQkU0NDNBNTYy - QTY5IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY2MzBBRkRCNEFDOTExRTQ5Q0JEQkU0NDNBNTYy - QTY5IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjgwQjFGREZDNjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6+q/BOAAABR0lEQVRIS7WVTUvDQBCGe/PoQQQP4s2jv8E/4W/rXxEFQRAp - olCwfjRUJWK1ltJgNJh+6Toz7OCSzrIZFwce2LDzvs8hkDSMMf/K7wFmbWunCRgFTQp6RhKY+ZephSvh - Du7hoWf3AgPT+XcteLcqcUcUlNMFYYNLuPeVXZK4IwqKckZMZgsveO/u8jNKqMiOKHgrJrWQdqsSUTDO - Pwm7LBK6pzIYUTDMPoi8KGvB+4wVrGCfKHge5VFYwTr2iYLHQUbgWYObg6pN7BMFd/0RMczeVXAuKOim - r1EEBVf3LwSeNbg5qPIL2skTkQ7GKjgXFJzfpFEEBa3LBwLPGtwcVPkFJ+0ekcAL08C5oOD4IokiKDg6 - uyXwrMHNQZVfcNi6Jjq9vgrOBQX7p50oQgLtT3+J1Y3tA6iSBXbwS7gL7P0RzNqvqWn8AE4SSnpUkJk6 - AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFGMTBBQzY2NEFDQTExRTRBQTYyQjA5QjRFNjBF - MzcyIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFGMTBBQzY1NEFDQTExRTRBQTYyQjA5QjRFNjBF - MzcyIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6M0EzRTc1RjdDOTRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - 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 - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjg2NjBEMzE2NEFGRTExRTQ4NTY1QzE4RjMzMkM0 - NEY4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjg2NjBEMzE1NEFGRTExRTQ4NTY1QzE4RjMzMkM0 - NEY4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTU5NUNEQTdGQTRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz5BZhOvAAAD9ElEQVRIS7WWe0xbZRiH95+T6DQxcc7NLfrHTBaR4NyFmDAy - ljFwwERGpmRxxmyY6QbqgogDhqluOpFLlm6AFslGRVlXKISVS7tByzgUOF1vtLUtLVBogQ4YsLoN9ec5 - 3+xXyIiJWdrkyfed9/u979PLSdsVz6wPfyQA/Cehf3DPQsiBECHkBVj4CyGBn00E9xb+DglU4L/35xIM - 7j78qCpAlVqAg6KNkOtqMTPnx9TcLOzjFty5u4CJWR9u++/AM+NBh7WRnM3/cX/JHCqY899fwu35u/BN - z2HM60NcURjB7hwmNX4/PjmNWzPzZL/v3FPIEK9DQskTNOudmML0rD8oiD0d9hAutxej4z6yZ3pZaA0D - ZO8c8dDM8d9egtSxGxetMTiri8Ih8XpS79cZ4fZOBgVu7y2YrINg9QOIPvU4QcPqyWp1DJM6vwbOUivW - QGSMgdi8E7mqSGQqIpAoXE3OmuRtuKHRwjU6HhQMe6dgG/LA4hhBVM5KJJatJmsPa8TNARup8xm+1tnd - R9bkc88hicsllnGrcC2p1Te1QKliYLQ6SZ4KhriLYe80oaa9Ghk/JEMkqYJS3Q0DF3a4J7D9s1V4s2QN - Nmc+hviTLyOvIgv55SeQe/4YUgu3QlRXjbbrN6A12TDoniSzqMDh9lEszjEoGQbF4u/wa+tlmOxu2Ecm - 0dglR86FjxEteBZx2Zsgab4KhaoH17lXJFO04nKLDCrus+L7A7OowOLyUsxODwy2EaTm78BrWU/io6KD - YE126KxDaFDKEZ4Rhg8E+1HbKAOjNZP6TYsL0mtNaFYrUCmrAGu2YWBwLCgw2Ecf4qeGakRmPo203D1Q - dPWjz8TdBGYX0guSIK5vgLyDQa/BDr3NTdAYrYg68iI2HliJiitV6DM6ggLWwt0p/8J9PeFMsRDnJSLE - H38DsXEJSEhKAaOzod88hMjXt+KTz/PQ2WtCLyfl8wE2RbyKkyWFqJLUQdqu4ASvPBBojE4KH9wVtxel - v5Tj5zopuU5MSQOjt6NG0swJtmHtCxtwrUePHsMDQaA3J/9rfJpTgDY1CwWjDwq6dHYK37BzdwJqZe3I - E3yP9ENHsG//u+TsvcNH8dXZMryVlo4ioYjmA73ZnCA7T4BO1gqV1hp8izr6f6fwDafOlKLgdAlidsXj - 29JKJHOCFrWOnAXga4F8gIjN21Df1k1nUYFSY6bwwUvSVjy/bgN2cILKmnokvf0O8r8pRvr7H5JMcwdL - zvkcn1/cvxgqaGVMFL6BX6Nj9+BLQREuXLyCvSkHEB65BcXll2ju8LETyPqikOaXgwqudhlCQkAQ8p/M - R2K5fxKLWbbp/7Dc0CBY8Q+pPmOq0VkzzQAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjIxNUQ2NkYyNEQyRDExRTQ5N0NDRjdBNTBDQjc0 - MUY3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjIxNUQ2NkYxNEQyRDExRTQ5N0NDRjdBNTBDQjc0 - MUY3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkU1NUY4OTYyQTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4lOJsMAAADqUlEQVRIS6WTf0hVdxjGj2beulPvD52aU6Np6tKBhUWsYjIH - prDYSlZjNPsjlUnkMmSx6eJqS/u5zXGtoKKEMaEt2lpZ20RX01Bjad31A8UakdZ0SyrLJfHueU7H0zl6 - U8QXPvCe933e5/3e8z1XCY5+dVKIyJh4HZoI48bQE5kU44a3ISM45TxQCTxgQIM5a/M0m+eHN1OC4TfB - 96mZ78reg9+I50qn3HvwSIU5a+xBcwyka3ajY3DoySgwUJ44P02O/vSz4HlMfqitk7mLlnLRNs3SHAOD - QzoQOYF7de4Gud17V1DTuf/wP7nScUOFubF3559+4QxngUOzfhr9DwZV0AgHVZ99/oXcvf9IUNPZd6hG - 5qS8Ic7IOb2EOWtGDWdKtuzmkj300uwVpa9/gOZTae6qqBQ8myjb4RZbeEyjJcBROt0W6rLaw4unBYYU - 2mfMrmNvpJ4ewdFJe+Hnry7o7rvHBV+v/7hUkJtoab8qobOSZarlhfX2iLhjS5d/IBkrsvlLDmPJEvao - GTlXsKmMS9zqApjnZWatkeu3+uSvnn9NlO2skqCwl2tt4bH7N7l26nXmzqgkFxZVUWOcIfSiZ3BU0odc - 0Hay/px03Px7FOuKXBIUOms/zDwn6pr0OnOcsN0ZlVhEjXFmGHpCc0n9BenvZMulzlvyZ1ePiZLySsG7 - /hYn3VpYXKHXmdtnxLmx4CtqjDOEXunLs3F3sS7lwrWbCoT71hYUC3ITJxta1TsIDImOh+ZA2rL3hdjC - Yhr8pwdlsUfNyLkceEFThxt4TWnxXFf8rTab46WEmo8+KRc8m9jwaQXed2I1Trw4IDgqx2oPK8EFb4T+ - KHsj9fSA+Rkf3ynvYUGi0tjWybv2DXBGxjsiEo7kF5XJ7xc6BHWdzdv3yOzk1/lOu3BxN5izZtRwJr+o - VDX3s1jz4ZkCHErD+WsqiCn4xuPsEfHfvbUqV2rPtgnqOvWtV6Xm+G8qzI09ajmjmvtPy4PXQhBCT+XX - 5ss6CD/wIl5H9SspaVLhrhbUx4QaavG1/YLZVWABPTQvRTnV5DGhNZyBITPz8cqaU1KXSeHmXXLgyGn5 - seEPFeassYfDXLTawr7EzNsgmbOax9M4cfbiKBC+IBDEYjgXn9spfKrduIPHBHkPXke9JcBZCs1KkEqt - NsPZZ4H/gVcQPsAC+HMTwCKQAXhSwpw19qihljPm8GZuBDG8yAZCQYQGc9a8Gw+HN9OJMG54G5oIY4ei - /A9dc78cqtG90gAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 - RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL - ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH - s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW - uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx - xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd - iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ - qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW - GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE - NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n - KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw - qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI - HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq - wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q - 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 @@ -4803,6 +4005,804 @@ ++H/A/YDv9/V87iOlrYAAAAASUVORK5CYII= + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjYzQTM5NEY4Mjg0OUU0MTE5NDBEQTc4ODZEQzk5 + N0NGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJGRTU5OEQ1NDlEQjExRTRBRUVDOTkyMjQ5NzEw + REUwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJGRTU5OEQ0NDlEQjExRTRBRUVDOTkyMjQ5NzEw + REUwIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTY0MkI1RjlEQTQ5RTQxMUE0QzNB + MjdEOTJBQzc3QkMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjNBMzk0RjgyODQ5RTQxMTk0MERB + Nzg4NkRDOTk3Q0YiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6B5sF9AAACe0lEQVRIS7WVb2jMcRzHL7UHanF/Mts5prE/1li3kAfu5Ak7 + 5IHNobBkSC2UIuGJkrrSWRvTmHQWK8U1T8jqUtYwkZpaGjV/Js6to5YwfXze39+fu/v23f36hXe9us+f + 7/v9rd/dr3MQ0X/F4Zm3+K9QhWajNNlBFZqN0mQHS6lMdrCUyqSgimllUsy4XmOmp+QRDllQWbygjjq6 + uimZStOX8a+ixox3pXrM1JLCDAqYJmY7c669M0bff07mcLbtEl9QE8k6V6BH5ooXMsHZZX7ae+AY7W45 + SrPm19LbsSR9m/iRA2bYGefggVePzUgKBzeu9sQpmZ4QcG/WMtk7eLjv0WMz0kOz+TX6MUXvP6cFeNbD + bz6YvQFm2Bk9PPByZO6jksLB5KvRTzTyLikIrG2ktsvXzd4g2hGjYP1ms4eHvb850qkl65LCQW/ntVs0 + 9HpMcPx0K1X4V1Ff/3NzhnphbVDsjBk8Lm/VE44s0ZJ1KS4Ie8uXUvPBE7Tn0ElCzTMqrV5BO/cfEaDG + TD5X6PFFONLygsTF7jj1vxihyPkYNTS1iFrFxm37KHIhJmp43L7qZxzp0pJ1SeHhQGgLJQaH6fb9R1QX + 2EB3Ek9FryLe95j8K9eLT/TB0FZcskOP1iRdkIh23aR7Ay9pzaZddKY9Jup8nIpeoXXhZlHD655b85Bj + p2npLOmCML+dD/iTZhaX3+UvbRB1PpzeygFnSUUvatecRUMzisoOc+x0LZ3FixxYhQyK1cxyZhkTYhqY + RgnM6hmcwVl4ljDI0KS4AC+Kmyli8Jv2MF7GNwXY4QzOwgNv5mWTL7CLpVQmO1hKZbKDpVR/1P8OcvwB + lh7gOXXZq9sAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkNDMTJDMTRENEFDOTExRTRCRDk4ODBFRTFERTlG + MzY1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkNDMTJDMTRDNEFDOTExRTRCRDk4ODBFRTFERTlG + MzY1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjYwQjFGREZDNjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4rRYZ8AAACEElEQVRIS2MQltOlCP///x8vxqqJFIzNUGSMVRMpmCDApokU + TBBg04SEpwHxfwJ4GtQo7ACoABfODY3N+P/773+82C88GWRJBtQ4TIBmKAyziCsa/L98/c5/37Ck/3Wt + fVixT2ji//OXr/8XU9T/zy0kzQo1EhVgMRyEm0uqW//vP3Lqv5Cs9ml+CZVp/OLKs/nFleYgY0EZzQt7 + Dh7/n1/eCFLXBjUSFWAxXENZ1/r/g6evgK5P/l/d1IMXe4ck/L//+MV/RW2r/0IyWppQYxEAiwWT+qfN + /7/7wHGQq84BXT9FQEq9S1Bas0VQWqMVFWu2ANWc2LbnyP/eKfNA6qdDjUUANMN9Tex8/j999eG/LzDy + yuo7icIeQfH/n7x8/x+kV0hGOwBqNASgWbBt+frt/7cCXQRko2Cg9xfCXA5io8uv37bv//J124G+0NkF + NJYRYjoQACWR8f97T99gxSA5oHIpECZCHTvIbDCAGgy34MaDF1ixo08k3LWO3hEY8jC9IBporBDEdCAA + CqBYcPnOU4ow1AKQTyEA3YKz1x9RhKEWyEBMBwJ0C05cvocVl9R3o2BsakCYoAWHz9+mCBO0YP/pGzhx + flUHGGOTg2GCFuw+cY0iTNCCHceuUIQJWUBMBYMX80uo7gQai9MCkJAoENsDcQiZGKQXZAYEYLEAlM1B + CkCuIAeD9EKLCgYGAMLPWmGxemtkAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY2MzBBRkRDNEFDOTExRTQ5Q0JEQkU0NDNBNTYy + QTY5IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY2MzBBRkRCNEFDOTExRTQ5Q0JEQkU0NDNBNTYy + QTY5IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjgwQjFGREZDNjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6+q/BOAAABR0lEQVRIS7WVTUvDQBCGe/PoQQQP4s2jv8E/4W/rXxEFQRAp + olCwfjRUJWK1ltJgNJh+6Toz7OCSzrIZFwce2LDzvs8hkDSMMf/K7wFmbWunCRgFTQp6RhKY+ZephSvh + Du7hoWf3AgPT+XcteLcqcUcUlNMFYYNLuPeVXZK4IwqKckZMZgsveO/u8jNKqMiOKHgrJrWQdqsSUTDO + Pwm7LBK6pzIYUTDMPoi8KGvB+4wVrGCfKHge5VFYwTr2iYLHQUbgWYObg6pN7BMFd/0RMczeVXAuKOim + r1EEBVf3LwSeNbg5qPIL2skTkQ7GKjgXFJzfpFEEBa3LBwLPGtwcVPkFJ+0ekcAL08C5oOD4IokiKDg6 + uyXwrMHNQZVfcNi6Jjq9vgrOBQX7p50oQgLtT3+J1Y3tA6iSBXbwS7gL7P0RzNqvqWn8AE4SSnpUkJk6 + AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFGMTBBQzY2NEFDQTExRTRBQTYyQjA5QjRFNjBF + MzcyIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFGMTBBQzY1NEFDQTExRTRBQTYyQjA5QjRFNjBF + MzcyIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6M0EzRTc1RjdDOTRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6CHDkjAAAGmklEQVRIS63VeUzWRx7H8d8mu2uL2nUFDwTEEzDeqNvUAyxY + RBFKtYIcFQ9QFOX04XrggQqycttKEFmPVTxWBQUUPCJUrPA8PA8PaAVpQRBBqAheWEU2Td87P2uy/zRt + NttJXsnM/L4zn8nkl4w05f0l/5ffbL+06H/xm81y3ofGonCF4PU78rCaZ7d07BRrQ/kU7t81t2gHBgZ+ + Ghj4N7+H/v7XP+pqb12aPMfWRdoRm6R81d9Py70HBIWmEa1KJjY+BR+/GFZ7RePm+ZZ3NGvWRuHlE81q + t0jc3CN+5hb+s9XCp+HEqbLpffyUp319P1rOsd0ghSoTVX19L8QGsfx5uB0jxn2Cg/Nm7Jf5YmyxkqGm + HzN4tAsGI50xtXLF0NyZQe8tw2CozJF3Bi/lXQMHDAw+4h1h0KAFpKQc4fHjJ0y2tvGXgqN2xj191sfi + FUEMHe/D4EkRGM6IwX3LAXyDc1jgksTcZYmYzYvBdG40RtMjRV04Q8zCGSozCWOISShDjIOFQAyGrUAR + tY+e3jcBW6XAiPiEnidPsf90B4azgzG2+RJTu1wmfrQf14AzrA/7Fz5hp3DbdpwZLtlMc8rCZNEehltn + MGyWMDOdv8xI5b2pu/nrtAQGm3iiUB3k4aMeEbAoSApQqHbJA3u3aEbPj2eS60ksVuVj7V3ALI8zLAso + xkNRwibVRfxUpSzxPY21ex4TnI5g7niEUUsOMnzxfmZ9vJ9JS7MwnL4JReJRvn/4UA4IkbaExezu/L4b + hzVKzD9MEJufwdKtkKmehby/rogPNhThHHiBdcpSlHsqcNp6lnleJ5my8gSWrscxWX4EIxGy0OMgU51z + GDXb/03Agy45wGaHtDkkOrXtQRdufvE4+mSwMuIyjiHl2GwTAsqZv7UM+8ByXMPL2HlAz85cHSsVl1nk + d56FfsV8sK6QaWsKWBGQj+36E0xYFEJU8jHa2jvlgEjJLygyvbWtA88tiSz3yyY0Q0Nwpp4Nu2rwT6lj + fVIt65LqcI+vYePfa0jNu0N8bi0+O2/gEVuBp+CsuIqP6gpu4ReY6aQkLuMUrW3tcoBS2rA94oumljZU + iemk/6OAvMv3Oa9/iq6jn5MVz9lb2EVGfgd7izr5/GgLSce+41BJKxXf9FBZ34syp5bILC2xOVr8d1/H + xj2RlOx8msWeIiBOWh+gyGpsakGZmEHOsXPUNT/kkv4JuqaX6Dt+4mTlKw6WPxN6OVzezb7SdvKutlN1 + p5eG+33CM7IKGiipukf+V034Kr7g2JkLNDa3YGFtkyD5bAnLvt3YRJgqlcTsU5Sqm2hp64aXPdztfk2B + 7hWHrz0jrbib1MJO9pa0k3PpPifL2jh3vRX1Nx00tj6m6f4TXve/IOvQCS5dLaehsVkO2CV95h+aW3e7 + keS0TNJzTtDaco+XL57T2SM87KP45g+U3v6BE5onHK7o5lRVF3nlLZTrxDXp71HX1EVzaxdtbZ10t3eQ + mbWf/OJSbjU0YjHHNlny3hxyQF9XT3JyKqdPF1ChbaT+2w4uXr+G9nY9+rsvudv1ir7+AXofPed+xyPa + hTvNnejudFCha+RKZQNVVVrq6pvJ2JtNQdF5am81yAFpkqdf0GGN/hafx0WxJy2OC2ePcOWrIhISnElQ + OVOmuUHhlRIqr+VTrlGj0aup0lSi1l2mtuYy2opznDudRvHRML69dZEohS95B5LQ1d6WAzKlNb6BR6u0 + dbiucsRliTl+PlasXzeXiOBFRO6Yj6/fTMK2z2Rf5EQK9thyMMGOndGOHP1yMedybTme68bhhBnigCsI + VTrg7TWfjF1hVNfUyQF7JfcN2499rdazKyUVFzsrFtpb4GA/G1ubsbg4GWNra8zaVWZ85jKOzK0mKD2M + 8Vo9lo1elvivtcJz9WS8nMbiu3I8DsvNcP7kbxScLeZrdY38m2ZLS1y9DpVdV1NWUcX1GxoqNdXiCnSo + NVpBR7W2Bk11zZu+TivP68T4v6oFea5SLdOiv1kvTn+TM4UlzybNXpAqWcyx2ei9Kbg0KDJeHRgRqwmO + jNMGR8bXhLwl+nqh9lfo39bVhETF64Ki4rTbFDHVE2fO/6fppOle0h//NMhg9Dgru9HmlhtHmE7cbmQy + IdRozHiF0ZhxUYbG5tGCUogVVMONzeNkcv+tGEGuiRb14UYmYp3JhJARZhMDho0cs1w8+RPkd/8PwrvC + MGGkMFowFkzeMhXMhLG/QJ6Xv8t1YwR57ShB3me4JElD/wNGauB2a7BHHAAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjg2NjBEMzE2NEFGRTExRTQ4NTY1QzE4RjMzMkM0 + NEY4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjg2NjBEMzE1NEFGRTExRTQ4NTY1QzE4RjMzMkM0 + NEY4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTU5NUNEQTdGQTRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz5BZhOvAAAD9ElEQVRIS7WWe0xbZRiH95+T6DQxcc7NLfrHTBaR4NyFmDAy + ljFwwERGpmRxxmyY6QbqgogDhqluOpFLlm6AFslGRVlXKISVS7tByzgUOF1vtLUtLVBogQ4YsLoN9ec5 + 3+xXyIiJWdrkyfed9/u979PLSdsVz6wPfyQA/Cehf3DPQsiBECHkBVj4CyGBn00E9xb+DglU4L/35xIM + 7j78qCpAlVqAg6KNkOtqMTPnx9TcLOzjFty5u4CJWR9u++/AM+NBh7WRnM3/cX/JHCqY899fwu35u/BN + z2HM60NcURjB7hwmNX4/PjmNWzPzZL/v3FPIEK9DQskTNOudmML0rD8oiD0d9hAutxej4z6yZ3pZaA0D + ZO8c8dDM8d9egtSxGxetMTiri8Ih8XpS79cZ4fZOBgVu7y2YrINg9QOIPvU4QcPqyWp1DJM6vwbOUivW + QGSMgdi8E7mqSGQqIpAoXE3OmuRtuKHRwjU6HhQMe6dgG/LA4hhBVM5KJJatJmsPa8TNARup8xm+1tnd + R9bkc88hicsllnGrcC2p1Te1QKliYLQ6SZ4KhriLYe80oaa9Ghk/JEMkqYJS3Q0DF3a4J7D9s1V4s2QN + Nmc+hviTLyOvIgv55SeQe/4YUgu3QlRXjbbrN6A12TDoniSzqMDh9lEszjEoGQbF4u/wa+tlmOxu2Ecm + 0dglR86FjxEteBZx2Zsgab4KhaoH17lXJFO04nKLDCrus+L7A7OowOLyUsxODwy2EaTm78BrWU/io6KD + YE126KxDaFDKEZ4Rhg8E+1HbKAOjNZP6TYsL0mtNaFYrUCmrAGu2YWBwLCgw2Ecf4qeGakRmPo203D1Q + dPWjz8TdBGYX0guSIK5vgLyDQa/BDr3NTdAYrYg68iI2HliJiitV6DM6ggLWwt0p/8J9PeFMsRDnJSLE + H38DsXEJSEhKAaOzod88hMjXt+KTz/PQ2WtCLyfl8wE2RbyKkyWFqJLUQdqu4ASvPBBojE4KH9wVtxel + v5Tj5zopuU5MSQOjt6NG0swJtmHtCxtwrUePHsMDQaA3J/9rfJpTgDY1CwWjDwq6dHYK37BzdwJqZe3I + E3yP9ENHsG//u+TsvcNH8dXZMryVlo4ioYjmA73ZnCA7T4BO1gqV1hp8izr6f6fwDafOlKLgdAlidsXj + 29JKJHOCFrWOnAXga4F8gIjN21Df1k1nUYFSY6bwwUvSVjy/bgN2cILKmnokvf0O8r8pRvr7H5JMcwdL + zvkcn1/cvxgqaGVMFL6BX6Nj9+BLQREuXLyCvSkHEB65BcXll2ju8LETyPqikOaXgwqudhlCQkAQ8p/M + R2K5fxKLWbbp/7Dc0CBY8Q+pPmOq0VkzzQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjIxNUQ2NkYyNEQyRDExRTQ5N0NDRjdBNTBDQjc0 + MUY3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjIxNUQ2NkYxNEQyRDExRTQ5N0NDRjdBNTBDQjc0 + MUY3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkU1NUY4OTYyQTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4lOJsMAAADqUlEQVRIS6WTf0hVdxjGj2beulPvD52aU6Np6tKBhUWsYjIH + prDYSlZjNPsjlUnkMmSx6eJqS/u5zXGtoKKEMaEt2lpZ20RX01Bjad31A8UakdZ0SyrLJfHueU7H0zl6 + U8QXPvCe933e5/3e8z1XCY5+dVKIyJh4HZoI48bQE5kU44a3ISM45TxQCTxgQIM5a/M0m+eHN1OC4TfB + 96mZ78reg9+I50qn3HvwSIU5a+xBcwyka3ajY3DoySgwUJ44P02O/vSz4HlMfqitk7mLlnLRNs3SHAOD + QzoQOYF7de4Gud17V1DTuf/wP7nScUOFubF3559+4QxngUOzfhr9DwZV0AgHVZ99/oXcvf9IUNPZd6hG + 5qS8Ic7IOb2EOWtGDWdKtuzmkj300uwVpa9/gOZTae6qqBQ8myjb4RZbeEyjJcBROt0W6rLaw4unBYYU + 2mfMrmNvpJ4ewdFJe+Hnry7o7rvHBV+v/7hUkJtoab8qobOSZarlhfX2iLhjS5d/IBkrsvlLDmPJEvao + GTlXsKmMS9zqApjnZWatkeu3+uSvnn9NlO2skqCwl2tt4bH7N7l26nXmzqgkFxZVUWOcIfSiZ3BU0odc + 0Hay/px03Px7FOuKXBIUOms/zDwn6pr0OnOcsN0ZlVhEjXFmGHpCc0n9BenvZMulzlvyZ1ePiZLySsG7 + /hYn3VpYXKHXmdtnxLmx4CtqjDOEXunLs3F3sS7lwrWbCoT71hYUC3ITJxta1TsIDImOh+ZA2rL3hdjC + Yhr8pwdlsUfNyLkceEFThxt4TWnxXFf8rTab46WEmo8+KRc8m9jwaQXed2I1Trw4IDgqx2oPK8EFb4T+ + KHsj9fSA+Rkf3ynvYUGi0tjWybv2DXBGxjsiEo7kF5XJ7xc6BHWdzdv3yOzk1/lOu3BxN5izZtRwJr+o + VDX3s1jz4ZkCHErD+WsqiCn4xuPsEfHfvbUqV2rPtgnqOvWtV6Xm+G8qzI09ajmjmvtPy4PXQhBCT+XX + 5ss6CD/wIl5H9SspaVLhrhbUx4QaavG1/YLZVWABPTQvRTnV5DGhNZyBITPz8cqaU1KXSeHmXXLgyGn5 + seEPFeassYfDXLTawr7EzNsgmbOax9M4cfbiKBC+IBDEYjgXn9spfKrduIPHBHkPXke9JcBZCs1KkEqt + NsPZZ4H/gVcQPsAC+HMTwCKQAXhSwpw19qihljPm8GZuBDG8yAZCQYQGc9a8Gw+HN9OJMG54G5oIY4ei + /A9dc78cqtG90gAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 + RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL + ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH + s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW + uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx + xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd + iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ + qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW + GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE + NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n + KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw + qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI + HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq + wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q + 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlDMzFEOUI4NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 + NEI4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlDMzFEOUI3NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 + NEI4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDk5Mzk2NTZBRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz73sIMwAAADIElEQVRIS7WVa0iTYRTH56Uiysvm3TkvpLl5DRIvQYWVWl+6 + iNEVg0yhQqloQZHkLT+Y0YdAs75IpEUhzERZoZhsRpZlS7soblotsRwoxhqWeTrnYZtv+u7NsB74cZ5z + zv89/z17HzYRAPxXeIv/EpFXcOyi4BvKhfehv4FvKBfeh+ayqIUDlIgBgT8whpRYoT2fhgvNVJKBQT9s + hB8/QZDPpnEIjEhg0J5Pw4Vm0mwygG9T06BSqQQhTUhUMoRGpyxYT7OZwfhXC6jVakFIYzNYqN5uMGKa + BI1GIwhpghXJaJJi13d0dEB2bj74hsWzSDlXbzfQG02g0+kEIU2wIomdovzKdVifngnFFytBeb4cLN+n + WaSc6hfKKqB/eHTWoHfwExgMBkFII5MnQUD4WlAWloO26wVs35MDmifPmQFFyqlO/aKKqlmDp31DYDKZ + BCGNTJ4IPqHx8LJvACbNUw7p6e2HuJQMNIhhBuaHj3vBYrEI0tb1BoIiE9kJ9h7Oh7EJM+g/jEJuwVlY + s24ri5RTnfo5BedAIoueIYPumvomuHzjzm9cq2uCq7UNUH2rEarr7kNd0yP26Y+eKoSWtk4wfpmAg7kn + ITY5DUorq1g8cOQEqze3aplOEhRtJoMcL1mMTixV9IgD5a/tSBVDYql8AKOBQLEJtTP08gY/jjFiktKg + 5FIV21Ok3NazvmR2AvrFkCAJyGYk1comZAuHDM/AyLvHThfBveZ26NOPwI59eey7LsbhFCmnOvVJ5+Ef + rrYZLEU8EZ85+HLwW7ZCLMVTFWdkHoLut+/hgbYHaE9XN31XNsupTrWV3jKVs+uS3cyAD0cLe331jW3Q + qRt0CPUlQVHDKI+fN9iGo4W90uNnyuA2vvRtWTlQgxeg/dk7FimnOvU9/CNqUe47b7ANRwt7AfjpKvAK + Gt18Qur35ymhRfsKKLr5hN7EyzDq7humWrrcfSfKxbz/QlwcLDck1snZJdUzYHUDmk57+K1qdXJyzsL6 + RmQD9ZmObygXB8sVIRO6fXQB4hC6eRQppzr1XXmHclnAckFomLc1Um5dItEvhZ97MQXP9N0AAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhDMTdBQjRENEFBRTExRTQ4QjQyODY0MDNBNTJE + NzNCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhDMTdBQjRDNEFBRTExRTQ4QjQyODY0MDNBNTJE + NzNCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NUQyMjc4QTlBQjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4eHsDfAAAB00lEQVRIS7XVWytEURQH8HniTTNHLs0NCXNcXjTN5dH9g/gM + 3jx590QhFDJS0gyTGmpqaqJIMW4hzlAoOaWISS7LWifntI3ddnTGrl92e/57/We/DBsA/CvuYSHZSr0t + lvCGsriX/oI3lMW9lM/SwgF9SEHwizs08IX2vAyLZvZRgXJ+cQWv7yB0q96Ds86voT0vw6KZNJsK4Pnl + DWKxmBBlqhpDUN0UNp2n2VrB/WMOEomEEGX0ArN5o+BGfYB0Oi1EGa8cwpKw6bxRcH6lQiaTEaKMVw5q + rzCbNwr2z65BURQhynh8Qe0VZvNGwdZBFlRVFaKMxxfQXmE2rxc8rW3sQy6XE0puHoG7IaC9YnV9j5th + pbZPqOCDCrbH5uIwOD7/zWgkDkNTizAyuwQjkWWIxFNQWduqmVxI/MiPz6/A8HTUuDMTTYLkbrqhgt5S + T3PG4ZJ3HE7focElZx0u3yn+VQiG1ZLymmm7s74f88f42S6bl9zyJZ6d6Xckd+Mt5ieogH4xJORHHajt + SzvqZPSgECpHZSiA2DztuxBlad+NgnpBEbIjusiiYboKRF+kGFHegUR5ImkFv7G0eAPzWVq8gfksLd5/ + oULiHhYS97BwwPYJlSCUgVubViQAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJEMDQyOEZBNEFEMjExRTRBN0MxRDBCNzJGRUND + MDEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJEMDQyOEY5NEFEMjExRTRBN0MxRDBCNzJGRUND + MDEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkRDRkI1RDVEMTRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz59jfe3AAAEbUlEQVRIS8WTeUybZRzHF48/pnFOuQRajkFLgQFb5iRLNJr4 + l/EPgsniUI4xZDAY1zyxwApsMJyIME61rByl3DfoYGBrgbWUY06FcZSCha4rQ8jYxkqPr2/fvkv8o2Sg + S/wkT970eb6/T5/39z7Prv8dt/Oql4mR4HZJ3ccoXFxhVCzB9DT9JueJdSq6c1wzVZFupepVzxu34XVj + CaEDi1jX6hF8ZQoeokl4iBVwzV9YdU1XRlIl28eVo8phCdXwGltEeOUsro6psaHVwcSDh5volc4iOO8X + 7KuVwb1hEi7J8myq9PEQO//I85oafr0KtEpUpNSETm+AwWDAvfv3YTQaybnm/t/AyO6Ga+UonJOnIijF + 1hA9tWI2qle9RxcI+RIpmZpTIfBULhIyyqHVahHPKcN70TmYnFFCp9OhqXcc9KwW0DOHVl3YU1aUyjJu + F1SpfhO3EM6bMMsVt+D8Zhz2HIpC4oU6bG5uIu4cD3tfTwAjIBNypQYbGxsISquBU34PaDHiVEplGXee + SuIjVaBv3Lz7gJg8vHg4FlZvc+ATVoLipiHsD8qCXWAO7IPK8MG5FjLXKboOeoYADkldUkplGWb7vOb4 + 4BzxIXXQE/1m59WDXdgBvxPfwz6UC4eQUth/WIBDZ2qQXj+K7IYRImeE5s5fOFrcDPvPapcJzVNmmwVY + VxWG9U09uau1tTVymPpc0iYFLew7OEUJ4BwtALfvJpl5xMrKCu6s3cUrn5YbCM1us80CrJZZVWjXr7j3 + 4CE0y8v4IrcaH+cK4Bv+DRyPl8ApphYuia3wZ3eCUzOA1PIfcVuzjHnlIgK/vgy7mHzTG+w12yzA5E53 + edYPo1c2i/X1dQTEfwvbwDQ4hhXg8OcN4P48Df+UTrgkNIAeW4Hg3Hbo9Xq0iGSgs4ls5CUhoXnObLOA + S8pkhG/bdZzgDZJnffT3GXieLAA9XgB2/RjZjuQqMWhxfBw824H55XWyhcfy+HDNqoB1SH4Codn6G7iw + p3d78EaVPlXX0CaZgkqlgly1gpCiK0htHCH/IL6oFcEF3ZjT3CUvXqv0DzDSS0FPq1a/8EbYS5Rqa+if + SAJ8KoeNR7gitEsnoVQqSbGOkJmYX1ggxaY70SabwIGMUrjn8I3WIXnBRPnWu/8nDnE9Sd7cAaP/ZSES + 6/rRKJRArpiHXC7HzekZNIukiCyrhW9mGZgXa4w2kUVnibJnzdXbxP5URzyDO4QjxGl5i9uNpMZeKP5U + IrywAq9yCnGAOGGMonbYxpVnEPGdyR9BO/MTj8kfgXeNFPt5IngVtoF1kQ9WcTs8qgfgmNreQMS21xZL + 0E6Ln6ef75tg8sfgXT8O77oReAkkYNXJ4PRV/4ztyfo9VPTf4xjdf9CpQKzdxxuGe6UMbhXEmc8V6mze + r3qNivx3HGN7UmglQ6CVDMIxXwybo5UcaunJQD8te9rhyx4JrWwItlGNUut3y5+hlp4cDhFCpl14k9jq + nR+Y1NTjIe7NlmMnWKoHsOtvjWYcKpheqFQAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERTg4QTFENEQyMjExRTRBODEyODk0M0RBMTc5 + Qjg3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERTg4QTFDNEQyMjExRTRBODEyODk0M0RBMTc5 + Qjg3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjJGOUEyRDEyMTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6wJF34AAACl0lEQVRIS62Vy08TURSH73/QhQtXVnBhxEcMiUkhbEg0hB1R + Q1i68C8wIW5cEqMLN7ho2Ji4YiEhWq0prYUhfULbadN3obTaChobtZEUsFY9nnPS6WM6HYowyZf87j33 + nG/amaai9geOBYA+4pTxihmBE8DcTQB4J8em/9IwSQyagmrtL+z9rMFmvnhkKvtV7tcVHPz6DVsftulA + AckdhUg8zf19eoLKAd597iMLMItewfOxUDTN/bqCH3tVSG8VWIBZ9AoJApEk9+sKvu/uQ2IjzwJkGtH8 + OrTwy3Hu77vIAnV9mgWlcgWiqRwLjAMmkOMbPbNTKnN/JJntqJGEBZ++7oKcyLLgLN4JrU8Cms2C4pcy + BKKZumCI18temQ/8DzSLZlBmQX7nG/jCKdpgAa0driCtY5iFHuqHSjNoFtaags1iCdzBBG+QgNY2aZ0F + mIUe6osENAtrTUEq/7kDq9PHAszU5yYoq9f1i9cUSCD5ozxDEeTsrhAoONwyxLLb8MrhYQFmZYCHsnpd + v3hNgQROb5hnKIK29944MAThTBEWbS4WYBZ6qC/sKSy5ZJ6BGUQg8b4Bbhjod4AZXlhXWdBa10LrIVul + AM9ggS+aa6AIMMO8ZYUO0KeyIOMtZyaQpXpNi4LFucYzMINwhbMNcMNw5oIJMMNKIA0LNg88mZuH/ssj + dPgBMnN+cBRmny1wrRtSMMMzWCCFMg0UAeY2Fh0+GL5xG8Zu3oHXUrCj3g0WONdTbeBm21/o1N17gPtg + 98Xh3VoS3qzKMDI22agfglnY/Uld8NDc/ZlZwAwvl4Ngun6LGh8rdfVDViNs3rguOOzq6XOD8PDpc7g2 + OkHDH7XWtYa2It66Y4eCQ8cRfpvUNa2hTUD8A6JMaBvCyTdJAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERjY3MEZENEQyMzExRTRCNDlGQUMwMzk0OTAw + Qzc4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERjY3MEZDNEQyMzExRTRCNDlGQUMwMzk0OTAw + Qzc4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjhGOUEyRDEyMTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6GKmpFAAAC+UlEQVRIS63T20vTYRzH8Yforj/Ei24UiSgKIygKi8oyxZQo + cvNYeXaesmzqPGu2POd0ulSsnIdaurTSTJ3O6UxTPGya5vCQx5AuPn39RbHop7nZxQt+z3ie93e/Z4w1 + p7nsCoBt8R6yBF/UHPv+Wb0rfFFzm99CRIwEW1gnqXzxTXxRc0ydctm4OlID2sxrw6iCtiwItC+A2P/D + frLnjwGNSZdMq6N1WOvLwFpP4l/WdRlY6Jaio9Ab7QXba8sVoDHZGdT8PYS9THDqMGnLsKpNw0qXGCua + BO55VZdNQ6U/DRRibVCGb+N1pH5bukoRqHmDHOIG1N8/X2F4I8WyNhtf2+9hqSsZxqZ4upbb6HsSZLHO + Im90ym6hNVcIaktYTexZyUelGEvaHMy/jcFiZxo0xX5Y7ivGcn8JkVmA9uvlWBmqwpJeAWovs+poR99O + eRgWtQWYVUdgrj0FH+i+F3XF3NoappZYGJrEoLaOVYpOOTY/FGJB+xjTqnDMtMTTAC/Ma/Ix/TLUKl9e + x0JfFQpql7PykBP7lWIXzPeUYLIhHCPKCLr/AMy2ZsKoDLTKdNNdvM8TgNpRTBZwfJ885CTmaIChPhwa + mS+GnkdhqjEWY9X+VplqvIMXEhdQ24mZeuSs0N/BNNWWj4k6EdSZHhhXxWH0aSCGFd4c4Tk7zk7XBlUM + FKLToK4Nm+0qYnneRzqGGiSYaIiiyZdhVCdgqFSIwRJPjucZW85O1pvnRmvDkO9zFNTdy2Y6HjGp4HCF + 5kk4xhoiURd/EROv4tBfeM0qAyUC9Mp9QM0+7o829T6LZV0/mNycS6+nFKFWfAGj9ZHozfGwil7miZYH + 7qCmghsw+S6VpV894KuUuKFbfhNNqa749CwY3dm0toK+VABl3HlQM5obYHybwFLc7W1y/Y5BlX6FfgNn + DNcEY0DhZZX+MiGKbh0DNR24AYYWMSfJzc6GZBApwS5skIzNODcg0dV2V36FtsJ7yBJ8UXO8hyzBFzXH + ++H/A/YDv9/V87iOlrYAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 + RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL + ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH + s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW + uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx + xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd + iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ + qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW + GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE + NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n + KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw + qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI + HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq + wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q + 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA3MTZBNTkzNEEwMjExRTRBQjdERDhBQkEzMDEx + MzZEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA3MTZBNTkyNEEwMjExRTRBQjdERDhBQkEzMDEx + MzZEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTgxNjM4Q0YwMTRBRTQxMTk2M0JC + NEQ0MzNCOUIxQzgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + 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 + 0HWhD93n++Dbua+fK9NvoTM5+Udx5mye9NjgCZNf0HEnpN5U5RbPa9+0bdfQ+0eOPzp5ppvG96JfjFkM + nXR/vOP0ePOu/deyCuf8JVSorJny7HQdvR9MTCUm+fUYgyehazLBVCCd8ttpJbQANtO3cDjWbO9werzd + ruK5F9Ld3p7YBEdHCE/WMi0s0jf5mefm0e+ZCsXEf85i/98XsP4NaTpxka74X+IAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJBREU3RDk2NEFCMDExRTQ4OUM5QjZFOENGQzJF + MDk1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJBREU3RDk1NEFCMDExRTQ4OUM5QjZFOENGQzJF + MDk1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MEM5Mzk2NTZBRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz52g1XsAAADeUlEQVRIS62Va0hTYRiAXzVNoQs6oUCttJu3aqatrLxr2k0n + W6bLLlLSxTKCKLoQQUg3IbLMflSgBRGRP7JSSzGnWalYdpnV1MQu1tBWWklqvr3fp2dsOytSfOFh3/l2 + eJ7tnDMGkkmzGCqigsARhPlUQqCi8nEd9v7GEYP5mFcI4K/e/hGHeQ2B7p4+1HV8Nf6Kw4a5GGxtCHzv + 7sU2nR4lbr4/AUBFKIeD4GKYBL79+IX6rm622U8nSgnX4SC4GCaBL50/OXwTwIUY1ohcQkCn/84ZDLBP + I5p16TBl7XYIoaXVwI54RC4h8LG9k/OvQPIOmEZUJW2F+XRoPbBrOiKXEGj9rOdYCqi2gxXhnLQNIo6f + n9tEa7ViI79PoojIJQSaP3RwjAOJaSAjjhL3N+9zrD+W499UVJnSeeVmWDvtlcWlgCedZnK5RC4h8KZV + x2FryQSYmrAVjh/MnP46/57yS7VmZ9+zxr1Yr92NtQ1pWFmfiBevL9QpUqE0JhHcyWuImLsMAU1zG4et + V6yHC1l5oe+evNmD1ZoteL9OgaW1K7GkRoF3H8ZigTocb5bFY8bZWbpoFVwh7yiCR8xdhsAz7XuOh9QD + D2R6twyIEzG/JApz88N7z+T5d+VcDezKL43Ea4UxeCjTqyNUDpUBYeBFXjvjgOAyCdS9asXDJ3NQFj3u + 7eWCyG/FjxR45OyMr6s3S1qCYqE8RA654Uq4dOiUV/v+E9P0i1ZA9Zwg8COnA2HyDZiLYRw4dyAjC50n + z8awBBvNbbWyZ+8x10+By+GONARCbe1gDBPJloCvfKODluQ10mD+qDK5LWFyD6pfvOUYBzydXL0v2I+V + rI9Mhud5BQE9i+RQPt2P30BBYrM4HmYSNf5REGS0b5CzYdKq+iaOITA44wmPiLXwaFfGhDbZMkinYxNJ + 8CpwXxgHobQcPbhv8XegrtNyzAPsOtqHJUPeml1jm/1jYDkdM5G5hB3bDL6KhknLal9xzAN8gpMgVZHm + oKUAuwx29H420c9O/l9KHms4bC0KLFCAY6CSHr+VoHJy88lWbEjHoqoXWPzw5ZCxGKCxkslBLo22L1+6 + ahPeUj/FwgfPh8zpSzfQ0cWrwVKAjfXcWFjjPm9isWSSbx/7JEPF0cWzcYzE7dTfAmysfSLB2z0Awm1H + 8ycnjrD4N/kX4gEg8A9sAFSe4VuPvgAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkEzN0Y5NjgxNEE5MDExRTRBMzU1RUM1MkVEQTU3 + REQxIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkEzN0Y5NjgwNEE5MDExRTRBMzU1RUM1MkVEQTU3 + REQxIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MUU1QUVCQUI4RjRBRTQxMUI2QTlC + RjEwMkVGQzEyNEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4Oz1B+AAABO0lEQVRIS7WUP0sDQRDFt0snIcEiklhGJLH3k6bNp0ifYCUo + KWwMIRCx0EYxEEL+IOPO4SxzczN7d7gGfuzd7Hszd9nHOQD4V9RiStRiStQi0b68GXkgwkjzcdQigU1O + 32CC+9IjUYsENvjY7EySDHhev5skGXA3X5r8aYA3lx0wET1otYgmNMcOku+jXtMg4QJFJMb1a7uPmjUd + rVzHDfDy9pmJaZViCe5rPq7hYpgvXjPw2hNtTqBOevk+F8L0YRGQQosyHxfSf0jUegPLZwkrNedYfi6o + 9Y2RWP6cACPHYnf4XauQablfHYAxo6jt9sfwRGWgVvrVASKmdd7g2OoN4P5pVYhqbgCPmnPuzHPtua1C + s9OHyeyxEFU+IJcCb2p4zj3dKjQvrsat3jD4CwNCIcEv14/fpAfcDwXsled4Tu6+AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlGMEQ1RDBCNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 + MzBCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlGMEQ1RDBBNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 + MzBCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzFDMDRERTRENjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6zemTaAAABh0lEQVRIS7WUvUoDQRSFEwiBKPEHsRAkb+ArWIsv4CNYCSKI + jRD8a1S0m9QhdTobG5uARZogBJSkiLASFJJChQiRcJ2z2bnMZtbxCnrhY3YO556z1aSI6F9JFP+SRBEs + FFaUhoSopAyQKGIBi58jEuErcQSAhY/hyP5DL8Y7mQMcAcD8Phh+u2Tzk9cRAMz914G4wOd1BABzt/cm + LvB5HQHA3On2xQU+ryMAmB8en8UFPq8jAJjvWk/iAp/XEQDM9WZHXODzOgKAudZoiwt8XkcAMN/U78Ml + CcY7mQMcAWhz+FRc3zZFREXypwKYEiG/e+ykc1WYVRrCGUk8nGUHsyic6nKeetUK4dTESjjLDjZUlqaV + hiS8lEsh0Z1LTFYs2FBazFFwcUzB+YE+T8bffD+i4LRIwSV0jdZaO5vhHXtRPmfFgg1n81mlIQnt/W1q + bKyH34dz2XKUz1mxYBaFU5zJUG1tlXDu5TMcjuEsO5hF4exOpZWGtnLpWDiGs+xgFv9gxlmU+gIVyyIX + YCSg/AAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + 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 + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVGNUQ0RjNENEQyRDExRTRBQ0ZFOEVGNkU4Rjcw + RkEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVGNUQ0RjNDNEQyRDExRTRBQ0ZFOEVGNkU4Rjcw + RkEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzUxNUY0MjEyRDRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz7jldwbAAAEyklEQVRIS6WWDUzUdRjHoeXWVktIc74MLREMUxBQV4RYkBmL + SBwSoZIFCgULlOJFDJDxqkiAqGgoiIQ6jaFLB1EqUaC8iMgdL8cJB3fHwR13HO8Hh3x7fn+pwN01nM/2 + 2X77Pb/n+33+v/3/95zBbGOVnZM58QHhRKwgnp9KPXuQ2CtJ6ScOjGo0fcMjI93llVX55us3rqbUc49P + zDLyw9auL4iw5l+IsMY//BRujcygdcg+ug83rpzCsVhf3C6+hHg/W+R++985BtU3pey1cCCpOYQhJzo9 + 8kPX1tZcDoS0Jp2jrCgWmakhOJMVA4GwBd1KNSQ9veiUdeNifjqyMsJxveD7f8+z2rPBlg0kNZ9gJjMj + L8RqQlSegIbLX6CuYAcOBm9FHe8B2rt70SZTgNfehTphJ+paCaEYjSIJkmP24PaPnrhfsBP8okCcCbZ8 + RFLmxIuc6PTICV5Dh4IxNqSEemAA6adzwBdJ8VeDEL/XNqGkmo/iKh4HW5fWNCL7QiEqq2sw3N+Dijwf + nPx6FUjKkpjLiU6P7MDVqL/gj8nJSY4bpbcQnZyK8EOJCI2Ox3dRcY+JjkNYTAIi4w4j7+JlKBQKjI+P + 42qqJ9J832AGawkjTnR6ZPm/iXvn9+ARiWsnJjCu1YLeGshJQCKVolMs5hBLJOiSydAjl0OpUmFweBhj + ZJAfuxVJ3ub6DTJ9LVCd40Pij6AZ01IRoWVGumE5dmZEM45RjRbnolwR72Wm3yDt85W4e2o3FVLnGg1G + xsYwSvDEdxB03gEa6vJwSopOhkZHkRPhgkPbTfUbpOwwR+XxXdT9OM79EQ/lgBLNkjpsz1iMP5t/oU7H + dIoz+oeGcTbUGVHblus3SPJYgfI0LxLSIPmaL4LyHOB5bClK6gswNDLKoUucoezvx+n9W3Dg49f0G8S5 + LUfZEU8MkpC8T43YQi8UVp3kutOFenAIvep+dClUkClVOPXNZoQ6L9NvEE3uN+PdMUBvRXevCgqVmjob + gGpgEH1PwPZYTq7soy9bDolcgRNfOWL/ZhP9BpEfLsVvMW70kQ1C2qMgEyVnUiUoQ2CuPZTUra7rYYi6 + ZDi+910EvbdEv0GYkwlKIj+BijrL+jUKbdJO1LZWwD19EUrrr0Cu6tMpzhCKJcj40gEB9ov1G4RsWoLi + UBe6V7r/n70RkPMOPDJMcLXqLPc0DF3ijBaRCOneG+H31kL9BkF2i3B9nzN1qoagQ4yDlzxQUE6/lHRd + XfLeGbA9cbccwk4JHggegi8UIc3LDj7rFug3CNiwENcCt6CH3ojm9g7qqoN79HZpF9rpjjumYGu2x3I8 + 4UNU85pwv0WAox5vY7f1/xj42SxAkf/7kCmUuNfUiho+FTa3gtfaRh22o6lNxMHWbI/lKut5uFVdh7sN + jTiybQN2rpmv18DQ1+rViUJfRwia+bjXLEB1YxNqyai+VUiditDY1sHB1myP5e408FFR34Cb5WVIdLXF + Zxbz2DywJYw51WkxZ9eqebxUFyvk7rDHD24bkOhig4RZEM/4yAZhm1Ziq6lRG2mxscmm2owwdF72suOn + ZkZCTzNjuJsaYdtT4vr63E4L4xcCSYv9IXiJU30i2BxlzmzkWRHsLp8GVsNqp2aygcHfZtZtYIryU78A + AAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkUzNzJDMjE3NEFENjExRTRCNjE0OEVEQzI4MEM0 + RTZDIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkUzNzJDMjE2NEFENjExRTRCNjE0OEVEQzI4MEM0 + RTZDIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI3NUQ0QkNENDRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6PyaLfAAADMElEQVRIS6VUXUiTYRT+vi3Tzd+ps23+3KRigtiPkolEQReG + UYTkhWatpWlWGkRdddfdSPImqUAJjSIT00oxLJIk0cR+tFSyzDJtgaMkDEPkdM7ZPvm2vS6jBx6es3Pe + 8zzvtm+TohLS/ov+AACStLgEQuJyLRJWYK1yzh/+FgCoQrpnfM4fOGBhcUlIMkEVkma4H4i1y2kFcMD8 + wqKQZILKZqTqmlTAWrfvMjhgbv63Dwm0hLWQohn1eNEbzrlfPiTQAtZCKjP1GXdAIC+r4XD+9CGBFrDm + RVJ1re6pZ0GyHHMvIawauYVNCFPfvvuQQAtYC6meKXU0amNsaGN/ZR60xIf9aIgN3cpGE9OzZCZ85nEm + pGiWlLABmuJCnUOXrNB7chdct4TUo32ANDbp4NuielDpqWfePdaPX6GrohSK4uLhlCEo96YlZLbOFHzH + oJXjMSBcGn4/zQGovEDqXXtzeTb+BTrKj0J3+Q54djYP7EZdTU2MPjFSK8eieQR9QtLg6GcOQPWgqKeQ + ZyOfoK30CDw+lg2Ot3Z4VLoNqo269mCNHIa2WjYn9A1PcAAqU6m9VV3TF9psOwwPS3JgZugCdNoyocwU + jU+RlImWBpezGz0vxzkA1YOiHvPFO7Ca1kGHLQtmXp2HdutmqN+/F6JiU+h3kOpyVeHJwBgHoLIpqajm + 189HoaG4CNqsGTA1UAWth9Lg6r490PygGyLjUikgzuWqQlffCAegelDdUwLqigqhpXgjTPYeh+bCFCg2 + RkEk3vxuVz/P0c43oLP3DQegLhspNalSFxiNcLswHT48LYNbBUlQk7ebzenmyhm08w1o7xmiAP6hRZiT + 70eYkzpctUuJWdHmwWs74+F1Uz7cyE+E4ohQB5mHm9a3GywpTXzektyKduIAIsKI3ISkL4rIdYle05C9 + VrZVBmvtl7eboUyv7V4jSQdwRn8FdI72iErtCUxnIuifkJ5hUqUOq9Jr7OeCNU6bTpNVqtMcDJSldOwn + KnOk+jypJ5QANRWc0cs5SEelXr54QidfwVYAMoiHq4W/gNM6OaNCJ+diaUIqN/43+Atwg27t+9ZXBUn6 + A2MdqQeVc5pWAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjUzQzNGNDI5NEQyQzExRTQ4QkE1QUNCMEVDRDZF + MDVEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjUzQzNGNDI4NEQyQzExRTQ4QkE1QUNCMEVDRDZF + MDVEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI1NUY4OTYyQTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6IsaOmAAADF0lEQVQ4T62U/UuTURTH+0nICqRI1ERMMyNQe8N0ChqBwQhN + yvwhEgJjVCqJ/qCibZo6tzQ339h6Nre5prapUzc1XzItX1ilzuWMLLVAen+xf6DTuTxjdxsFVj58ebjc + c+7nnud7z3228DbpIaDFH/CfoqCn72DIDvNfPDM2KAqyr8PcJxqY+QBTb8kkjocXQTsKigGwfqYJHqIg + 1OxHGHvlWPx4hXB1YyA3g4CBhqst+piEnrDA3rA95vBAY1x8d7lq/DVZwm5PQZNvoKYdypSgHgbVEIh1 + cLOZzOCbSSsyRQRba6uWtcpVLbPcwlglInNUCJNWWKqABqMLCGvGlfpJELaQ/V1Vd1lujAhe0chtUrH5 + ZExnmJ85MdomEa+qZMbIEF2BHGunILSjdZwYgTt4gJqjjj0Rltml1Zq9AeL0Mn71Wn2mtDU80MIvsFTw + O+KPIoWC8BNYRIUaqrRQroJKjQOk9N+xLBF2pXJFKfnsDGYa8gS6xOO2whyMuoHaHpGzZ/pBM0IMrtXD + nT4HqNHXe0lYoogMFeQP4jbSDkCPTUyXmnNoPutSo+9WN5DEQDyeWCWnhqm4p7Oimt3b54rzmmKPVHKz + 0Xg0AU1pz87VJp+yXOfd9t3mBmLXsGrsJhSsDtF4iOWxKdpzyQNnuRW7vEUp13obFG05OVUBPtO5V1Sn + k5q4SX8ENfWA6C7xHsP981Bb2sf38ZKd4JhSuXUJHPHhg/WJnAeZFw0Xzt/w8erRtLmBnB/CSmaC599I + 2PYVRl+CXigu3R9SfCC0Pf1MZ1oqvqvjogX7gtRFJfb1n24g7GblfQcFP2fkBYm5anxqQcbLKgzyK/Df + WRTkV5+RMTg84ZrgAOHo4ZIDVNdJw67CpsVLZ5gifj97Typlq2ZFQXj8LKh5EHpnaIar8N+Al5l9Y9Vs + T7OiIAzjqaMsa6QJnBkeWvgOHdPkAuIV67PSeQpCYYZplsZ+KyyWLRyFF8D553EDbURY770J0rrYJbda + SYE4iWb9NcgpRKDrOMAWwYP6d5BTaC52zyaAWDlAm/DweL8AX9zXukfxHsIAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + 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 diff --git a/TreeUtils.cs b/TreeUtils.cs new file mode 100644 index 0000000..571fa7c --- /dev/null +++ b/TreeUtils.cs @@ -0,0 +1,152 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using GeoScene.Data; +using GeoScene.Globe; + +namespace Cyberpipe +{ + public class TreeUtils + { + /// + /// 构造图层tree,最多解析三层,若地球存在,则只构造指定地球上图层已存在的树节点,若地球不存在,则构造全部 + /// + /// 所属地球 + /// 要加载的树 + /// 数据来源,实测数据/施工数据/规划数据/红线数据,为空则展示全部 + public static void InitLayerTree(GSOGlobeControl gsoGlobeControl, TreeView treeView, string viewDatasrc) + { +// treeView.Nodes.Clear(); + LayerConfig layerConfig = Utility.layerConfig;//layertree所在的配置文件 + List datasrcs = layerConfig.datasrcs; + foreach (DataSrc datasrc in datasrcs) + { + if (viewDatasrc != null && !viewDatasrc.Trim().Equals("") && !datasrc.label.Equals(viewDatasrc)) continue; + TreeNode rootNode = treeView.Nodes.Add(datasrc.label); + List layerTypes = datasrc.layertypes; + foreach (LayerType layerType in layerTypes) + { + TreeNode secNode = rootNode.Nodes.Add(layerType.label); + List layers = layerType.layers; + foreach (Layer layer in layers) + { + if (gsoGlobeControl == null) + { + TreeNode node = new TreeNode(); + node.Text = layer.label; + secNode.Nodes.Add(node); + + } + else + { + GSOLayer gsoLayer = gsoGlobeControl.Globe.Layers.GetLayerByCaption(layer.layer); + if (gsoLayer == null) continue;//将不存在的去除 + TreeNode node = new TreeNode(); + node.Tag = gsoLayer; + node.Text = layer.label; + node.Checked = gsoLayer.Visible; + if (gsoLayer.Visible) + { + secNode.Checked = true; + rootNode.Checked = true; + } + secNode.Nodes.Add(node); + } + + } + } + } + } + + + /// + /// TreeNode选中状态改变,对其子节点和父节点的选中状态做相应改变 + /// + /// + /// + public static void TreeNodeCheckedChange(GSOGlobeControl globeControl, TreeNode node) + { + if (node.Tag != null) + { + if (node.Tag is GSOLayer)//图层 + { + GSOLayer layer = node.Tag as GSOLayer; + layer.Visible = node.Checked; + globeControl.Globe.Refresh(); + } + else if (node.Tag is GSOTerrain)//地形 + { + GSOTerrain feat = node.Tag as GSOTerrain; + feat.Visible = node.Checked; + globeControl.Globe.Refresh(); + }else if (node.Tag is GSOFeature)//特征点 + { + GSOFeature feature = node.Tag as GSOFeature; + feature.Visible = node.Checked; + globeControl.Globe.Refresh(); + } + } + + CheckParentNode(node); + if (node.Nodes.Count > 0) + CheckChildrenNode(globeControl, node, node.Checked); + } + /// + /// 树形结构中,根据parentNode的选中状态,更改其子节点的选中状态 + /// + /// + /// + /// + public static void CheckChildrenNode(GSOGlobeControl globeControl, TreeNode parentNode, bool isChecked) + { + foreach (TreeNode childNode in parentNode.Nodes) + { + childNode.Checked = isChecked; + if (childNode.Tag is GSOLayer) + { + GSOLayer layer = childNode.Tag as GSOLayer; + layer.Visible = isChecked; + globeControl.Globe.Refresh(); + } + else if (childNode.Tag is GSOTerrain) + { + GSOTerrain feat = childNode.Tag as GSOTerrain; + feat.Visible = isChecked; + globeControl.Globe.Refresh(); + } + else if (childNode.Tag is GSOFeature) + { + GSOFeature feature = childNode.Tag as GSOFeature; + feature.Visible = childNode.Checked; + globeControl.Globe.Refresh(); + } + if (childNode.Nodes.Count > 0) + CheckChildrenNode(globeControl, childNode, isChecked); + } + } + + /// + /// 子节点则父节点:一选则选,全不选才不选 + /// 改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 + /// + /// 要检查的节点,更改其父节点状态 + public static void CheckParentNode(TreeNode curNode) + { + + if (curNode.Parent == null) return; + bool bChecked = false; + foreach (TreeNode node in curNode.Parent.Nodes) + { + if (!node.Checked) continue; + bChecked = true; + break; + } + curNode.Parent.Checked = bChecked; + CheckParentNode(curNode.Parent); + + } + + } +} diff --git a/Utility.cs b/Utility.cs index 68c90d1..f7aa6b7 100644 --- a/Utility.cs +++ b/Utility.cs @@ -228,30 +228,30 @@ LayerLabel_LayerIDs = new Hashtable(); if (File.Exists(filename)) { - XmlTextReader XmlReader = new XmlTextReader(filename); + XmlTextReader xmlReader = new XmlTextReader(filename); try { - while (XmlReader.Read()) + while (xmlReader.Read()) { - if (XmlReader.Name == "database") + if (xmlReader.Name == "database") { - dbdatabase = XmlReader.ReadElementString(); + dbdatabase = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "dbpassword") + else if (xmlReader.Name == "dbpassword") { - DBPassword = XmlReader.ReadElementString(); + DBPassword = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "user") + else if (xmlReader.Name == "user") { - userID = XmlReader.ReadElementString(); + userID = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "locaserverip") + else if (xmlReader.Name == "locaserverip") { - serverip = XmlReader.ReadElementString(); + serverip = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "locaserverport") + else if (xmlReader.Name == "locaserverport") { - serverport = Convert.ToInt32(XmlReader.ReadElementString()); + serverport = Convert.ToInt32(xmlReader.ReadElementString()); } //else if (XmlReader.Name == "localicenseserverip") //{ @@ -261,102 +261,51 @@ //{ // Utility.localicenseserverport = Convert.ToInt32(XmlReader.ReadElementString()); //} - else if (XmlReader.Name == "dbbackuppath") + else if (xmlReader.Name == "dbbackuppath") { - DBBackUp = XmlReader.ReadElementString(); + DBBackUp = xmlReader.ReadElementString(); } -// else if (XmlReader.Name == "layerchild") -// { -// var layername = XmlReader["layer"].Trim(); -// var label = XmlReader["label"].Trim(); -// var type = XmlReader["type"].Trim(); -// -// LayerChild child = new LayerChild(); -// child.attriLabel = label; -// child.attriLayer =layername; -// child.attriType = type; -// LayerChilds.Add(child); -// LayerLabels.Add(label); -// LayerNames.Add(layername); -// -// dictionaryNetLayerNameAndCaption.Add(layername, label); -// -// if (layername.EndsWith("管线")) -// { -// LayerNamesList.Add(layername.Substring(0, layername.Length - 2)); -// } -// if (!type.Equals("db")) -// { -// if (XmlReader["isRoad"] != null) -// { -// roadLayerName = label; -// } -// }else if (XmlReader["isPipeLine"] != null) -// { -// m_PipelineLayerNames.Add(label); -// } -// else if (XmlReader["isWorkWell"] != null) -// { -// workwellLayerNames.Add(label); -// } -// else if (XmlReader["isValve"] != null) -// { -// valueLayerNames.Add(label); -// } -// else if (XmlReader["isAccess"] != null) -// { -// instrumenLayerNames.Add(label); -// } -// else if (XmlReader["isCharacter"] != null) -// { -// pipefittingLayerNames.Add(label); -// } -// else if (XmlReader["isSgData"] != null) -// { -// sgPipeLayersNames.Add(label); -// } -// } - else if (XmlReader.Name == "Terrain") + else if (xmlReader.Name == "Terrain") { - TerrainsName.Add(XmlReader.ReadElementString()); + TerrainsName.Add(xmlReader.ReadElementString()); } - else if (XmlReader.Name == "dbserver") + else if (xmlReader.Name == "dbserver") { - DBServer = XmlReader.ReadElementString(); + DBServer = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "rooturl") + else if (xmlReader.Name == "rooturl") { - PicRootURL = XmlReader.ReadElementString(); + PicRootURL = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "defaultimgurl") + else if (xmlReader.Name == "defaultimgurl") { - PicDefaultURL = XmlReader.ReadElementString(); + PicDefaultURL = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "queryfield") + else if (xmlReader.Name == "queryfield") { - Query_Fields.Add(XmlReader["label"], XmlReader.ReadElementString()); + Query_Fields.Add(xmlReader["label"], xmlReader.ReadElementString()); } - else if (XmlReader.Name == "location") + else if (xmlReader.Name == "location") { - Query_Roads.Add(XmlReader["label"], XmlReader.ReadElementString()); + Query_Roads.Add(xmlReader["label"], xmlReader.ReadElementString()); } - else if (XmlReader.Name == "pipelineCode") + else if (xmlReader.Name == "pipelineCode") { - Pipe_Code.Add(XmlReader["label"], XmlReader.ReadElementString()); + Pipe_Code.Add(xmlReader["label"], xmlReader.ReadElementString()); } - else if (XmlReader.Name == "projectStr") + else if (xmlReader.Name == "projectStr") { - projectStr = XmlReader.ReadElementString(); + projectStr = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "backupserverurl") + else if (xmlReader.Name == "backupserverurl") { - backupurl = XmlReader.ReadElementString(); + backupurl = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "backuppath") + else if (xmlReader.Name == "backuppath") { - backuppath = XmlReader.ReadElementString(); + backuppath = xmlReader.ReadElementString(); } //else if (XmlReader.Name == "uploadpath") //{ @@ -366,41 +315,41 @@ //{ // Utility.udserviceurl = XmlReader.ReadElementString(); //} - else if (XmlReader.Name == "pipelinetype") + else if (xmlReader.Name == "pipelinetype") { - pipelinetype = XmlReader.ReadElementString(); + pipelinetype = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "shdbip") + else if (xmlReader.Name == "shdbip") { - sgdbip = XmlReader.ReadElementString(); + sgdbip = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "shdbname") + else if (xmlReader.Name == "shdbname") { - sgdbname = XmlReader.ReadElementString(); + sgdbname = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "shdbuser") + else if (xmlReader.Name == "shdbuser") { - sgdbuser = XmlReader.ReadElementString(); + sgdbuser = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "shdbpwd") + else if (xmlReader.Name == "shdbpwd") { - sgdbpwd = XmlReader.ReadElementString(); + sgdbpwd = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "ghdbip") + else if (xmlReader.Name == "ghdbip") { - ghdbip = XmlReader.ReadElementString(); + ghdbip = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "ghdbname") + else if (xmlReader.Name == "ghdbname") { - ghdbname = XmlReader.ReadElementString(); + ghdbname = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "ghdbuser") + else if (xmlReader.Name == "ghdbuser") { - ghdbuser = XmlReader.ReadElementString(); + ghdbuser = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "ghdbpwd") + else if (xmlReader.Name == "ghdbpwd") { - ghdbpwd = XmlReader.ReadElementString(); + ghdbpwd = xmlReader.ReadElementString(); } } } @@ -410,7 +359,7 @@ } finally { - XmlReader.Close(); + xmlReader.Close(); } } else @@ -458,11 +407,12 @@ { sgPipeLayersNames.Add(layer.label); } -// else if (layer.flag.Equals("")) + //配置文件中不存在workwell和valve的,不起作用 +// else if (layer.flag.Equals("workwell")) // { // workwellLayerNames.Add(layer.label); // } -// else if (layer.flag.Equals("")) +// else if (layer.flag.Equals("valve")) // { // valueLayerNames.Add(layer.label); // } diff --git a/bin/x86/Debug/Config.xml b/bin/x86/Debug/Config.xml index 508515a..b7dafa9 100644 --- a/bin/x86/Debug/Config.xml +++ b/bin/x86/Debug/Config.xml @@ -2,10 +2,10 @@ LocaSpace三维地下管线信息系统 release - SZHTDB2 + szhtdb2 192.168.0.203 release - 192.168.0.203 + 127.0.0.1 1500 http://192.168.0.203/images/ http://192.168.0.203/images/default.jpg @@ -25,165 +25,6 @@ http://127.0.0.1/Cyberpipe.msi http://127.0.0.1/Config.xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 编号,管线编码,管径_毫米,材质,埋设方式,起始地面高程,起始埋深,终止地面高程,终止埋深,建设年代,使用年限,权属单位,设计单位,设计负责人,施工单位,施工负责人,监理单位,监理负责人,业务负责人,备注 编号,管线编码,管径_毫米,材质,埋设方式,起始地面高程,起始埋深,终止地面高程,终止埋深,建设年代,使用年限,权属单位,设计单位,设计负责人,施工单位,施工负责人,监理单位,监理负责人,业务负责人,备注 diff --git a/bin/x86/Debug/Cyberpipe.exe b/bin/x86/Debug/Cyberpipe.exe new file mode 100644 index 0000000..d81e34f --- /dev/null +++ b/bin/x86/Debug/Cyberpipe.exe Binary files differ diff --git a/ClassDoubleScreenCompare.cs b/ClassDoubleScreenCompare.cs new file mode 100644 index 0000000..f2935da --- /dev/null +++ b/ClassDoubleScreenCompare.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using GeoScene.Globe; +using GeoScene.Data; +using GeoScene.Engine; +using System.Drawing; + +namespace Cyberpipe +{ + class ClassDoubleScreenCompare + { + public static GSOFeature getSameFeatureFromOtherGlobe(GSOFeature feature, + GSOGlobeControl globeControl1, GSOGlobeControl globeControl2,double bufferWidth,GSOGeoPolygon3D resPolygon) + { + GSOLayer layer; + GSOFeatures features = new GSOFeatures(); + + if (!feature.Dataset.Caption.StartsWith("施工")) + { + layer = feature.Dataset.Caption == "供电管线" + ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") + : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(feature, fs[i], globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + else + { + layer = feature.Dataset.Caption == "施工电力管线" + ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") + : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(fs[i], feature, globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + + return getMostSimilarFeatureFromFeatures(feature, features); + + } + + + private static GSOFeature getMostSimilarFeatureFromFeatures(GSOFeature feature, GSOFeatures features) + { + double maxLength = 0; + GSOFeature f = new GSOFeature(); + GSOGeoPolyline3D line = feature.Geometry as GSOGeoPolyline3D; + + if (features.Length == 0) return null; + if (features.Length == 1) + { + f = features[0]; + f.HighLight = true; + } + else + { + for (int m = 0; m < features.Length; m++) + { + GSOGeoPolyline3D tempSGLine = features[m].Geometry as GSOGeoPolyline3D; + + double tempLength = tempSGLine.GetSpaceLength(false, 6378137); + double lengthAbs = Math.Abs(tempLength - line.GetSpaceLength(false, 6378137)); + if (m == 0) + { + f = features[0]; + f.HighLight = true; + maxLength = lengthAbs; + } + else if (lengthAbs < maxLength) + { + f = features[m]; + f.HighLight = true; + maxLength = lengthAbs; + } + } + } + return f; + } + + private static bool isSameFeature(GSOFeature feature1, GSOFeature feature2, GSOLayer layer, double bufferWidth) + { + GSOGeoPolyline3D line = feature1.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = line.CreateBuffer(bufferWidth * 2, true, 5, true, false); + + if (bufferPolygon == null) return false; + + GSOFeatures featuresInLayer = layer.FindFeaturesInPolygon(bufferPolygon, true); + + if (featuresInLayer == null || featuresInLayer.Length <= 0) + return false; + + for (int i = 0; i < featuresInLayer.Length; i++) + { + if (featuresInLayer[i].Name == feature2.Name) + { + return true; + break; + } + } + return false; + } + + private static bool isSimilarFeature(GSOFeature srcFeature, GSOFeature dscFeature, + GSOGlobeControl globeControl1,GSOGlobeControl globeControl2,double bufferWidth) + { + GSOLayer dscLayer = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); + GSOLayer srcLayer = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); + + if (!isSameFeature(srcFeature, dscFeature, dscLayer, bufferWidth) + && !isSameFeature(dscFeature, srcFeature, srcLayer, bufferWidth)) + return false; + return true; + } + + public static void CalculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2, + out double horizonDistance, out double verticalDistance, GSOGlobeControl globeControl1, GSOGlobeControl globeControl2) + { + GSOPoint3d pntIntersect1 = new GSOPoint3d(); + GSOPoint3d pntIntersect2 = new GSOPoint3d(); + GSOPoint3d pntProIntersect1 = new GSOPoint3d(); + GSOPoint3d pntProIntersect2 = new GSOPoint3d(); + + verticalDistance = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, verticalDistance, true, "垂直", globeControl1, globeControl2); + + horizonDistance = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, horizonDistance, true, "水平", globeControl1, globeControl2); + + } + + private static GSOPoint3d LabelDistance(GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, + double distance, bool markerVisible, string label,GSOGlobeControl globeControl1,GSOGlobeControl globeControl2) + { + if (pntIntersect1 == null || pntIntersect2 == null) + return new GSOPoint3d(); + GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); + GSOPoint3ds point3ds = new GSOPoint3ds(); + point3ds.Add(pntIntersect1); + point3ds.Add(pntIntersect2); + disline.AddPart(point3ds); + + GSOGeoMarker dismarker = new GSOGeoMarker(); + GSOFeature marker = null; + GSOFeature line = null; + createLineStyle(out marker, out line, disline, pntIntersect1, pntIntersect2, distance, label, dismarker); + + line.Visible = marker.Visible = markerVisible; + globeControl1.Globe.MemoryLayer.AddFeature(line); + globeControl1.Globe.MemoryLayer.AddFeature(marker); + + globeControl2.Globe.MemoryLayer.AddFeature(line); + globeControl2.Globe.MemoryLayer.AddFeature(marker); + + return dismarker.Position; + } + + private static void createLineStyle(out GSOFeature marker, out GSOFeature line, GSOGeoPolyline3D disline, + GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) + { + GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 + style.LineColor = Color.Red; + style.LineWidth = 5; //设置线的宽度为5 + style.VertexVisible = true; //显示线的节点 + disline.Style = style; //把风格添加到线上 + disline.AltitudeMode = EnumAltitudeMode.Absolute; + line = new GSOFeature(); + line.Geometry = disline; + + dismarker.X = pntIntersect1.X; + dismarker.Y = pntIntersect1.Y; + dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; + dismarker.Text = label + distance.ToString("0.00") + "米"; + dismarker.AltitudeMode = EnumAltitudeMode.Absolute; + + GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); + GSOTextStyle styleText = new GSOTextStyle(); + styleText.IsSizeFixed = true; + styleText.ForeColor = Color.Red; + styleText.FontSize = 20; + styleMarker.TextStyle = styleText; + dismarker.Style = styleMarker; + + marker = new GSOFeature(); + marker.Geometry = dismarker; + } + + } +} diff --git a/Cyberpipe.csproj b/Cyberpipe.csproj index d8aa9c8..bcce54d 100644 --- a/Cyberpipe.csproj +++ b/Cyberpipe.csproj @@ -203,6 +203,7 @@ + @@ -1143,6 +1144,7 @@ SysRescInfoManager.cs + True True diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 123caf1..2c45db6 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -258,42 +258,25 @@ for (int i = 0; i < scLayer.GetAllFeatures().Length; i++) { GSOFeature scFeature = scLayer.GetAt(i); - if (scFeature.GetFieldAsString("所属道路") == road) + if (scFeature.GetFieldAsString("所属道路") != road) continue; + GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + + GSOFeature sgFeature = null; + GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); + + //**判断同一个Feature + if (sgFeatures.Length >= 1) { - GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); - GSOFeature sgFeature = null; - GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); - - //**判断同一个Feature - if (sgFeatures.Length >= 1) + if (sgFeature != null) { - sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); + GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; + double horizonDistance, verticalDistance; - if (sgFeature != null) - { - GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; - double horizonDistance, verticalDistance; - - CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); - GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); - } - else - { - scFeature.HighLight = true; - DataRow dr = dt.NewRow(); - dr[0] = scLayer.Caption; - dr[1] = scFeature.GetFieldAsString("编号"); - dr[2] = sgLayer.Caption; - dr[3] = "无"; - dr[4] = "无"; - dr[5] = "0.02"; - dr[6] = "无"; - dr[7] = "0.02"; - dr[8] = "未设计管段"; - dt.Rows.Add(dr); - } + CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); + GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); } else { @@ -311,6 +294,21 @@ dt.Rows.Add(dr); } } + else + { + scFeature.HighLight = true; + DataRow dr = dt.NewRow(); + dr[0] = scLayer.Caption; + dr[1] = scFeature.GetFieldAsString("编号"); + dr[2] = sgLayer.Caption; + dr[3] = "无"; + dr[4] = "无"; + dr[5] = "0.02"; + dr[6] = "无"; + dr[7] = "0.02"; + dr[8] = "未设计管段"; + dt.Rows.Add(dr); + } } } /// diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index 53946c0..fe32265 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -4,7 +4,7 @@ using GeoScene.Globe; namespace Cyberpipe -{ +{ //本类作用为:辅助GlobalControl上Feature的统计分析工具类 class FeatureStatisticsService { /// @@ -60,8 +60,8 @@ /// /// /// - /// - /// + /// + /// /// /// public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) @@ -74,6 +74,7 @@ for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; double length = line.GetSpaceLength(true, 6378137); totalLength += length; ncount += 1; @@ -114,7 +115,7 @@ for (int i = 0; i < feats.Length; i++) { double radius = feats[i].GetFieldAsDouble(fieldName); - if (radius >= min && radius <= max) + if (radius >= minValue && radius <= maxValue) { result.Add(feats[i]); } @@ -148,23 +149,22 @@ lstDiameter.Sort(); if (lstDiameter.Count > 0) { - for (int m = 0; m < lstDiameter.Count; m++) + foreach (float diameter in lstDiameter) { double totalLength = 0.00; int ncount = 0; for (int j = 0; j < feats.Length; j++) { - if (feats[j].GetFieldAsFloat("管径_毫米") == lstDiameter[m]) - { - GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } + if (Math.Abs(feats[j].GetFieldAsFloat("管径_毫米") - diameter) > 0.00001) continue; + GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = lstDiameter[m].ToString(); + featuresClass.groupFieldValue = diameter.ToString(); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -191,13 +191,13 @@ //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); - for (int j = 0; j < accessStrs.Length; j++) + foreach (string accssname in accessStrs) { - GSOFeatures feats = null; - int ncount = 0; + GSOFeatures feats; + int ncount; if (polygon == null) { - feats = flayer.GetFeatureByFieldValue("附属物名称", accessStrs[j], true); + feats = flayer.GetFeatureByFieldValue("附属物名称", accssname, true); ncount = feats.Length; } else @@ -207,14 +207,14 @@ //过滤 for (int n = 0; n < feats.Length; n++) { - if (feats[n].GetFieldAsString("附属物名称").Contains(accessStrs[j])) newfeats.Add(feats[n]); + if (feats[n].GetFieldAsString("附属物名称").Contains(accssname)) newfeats.Add(feats[n]); } ncount = newfeats.Length; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); - featuresClass.layerName = accessStrs[j]; + featuresClass.layerName = accssname; featuresClass.ncount = ncount; result.Add(featuresClass); @@ -303,6 +303,26 @@ if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); - } + } + + + /// + /// 获取globeControl上选中的管线,如果返回空则没有选中的管线 + /// + /// 地球引擎 + /// 返回一根线 + public static GSOFeature GetSelectedPipeline(GSOGlobeControl globeControl) + { + GSOFeature resFeature; + if (globeControl.Globe.SelObjectCount < 1) return null; + GSOLayer resLayer; + globeControl.Globe.GetSelectObject(0, out resFeature, out resLayer); + if (resFeature == null) return null; + + GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; + if (line1 == null) return null; + GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; + return pipeStyle1 == null ? null : resFeature; + } } } diff --git a/FrmCompareFeature.cs b/FrmCompareFeature.cs index a05e8e7..ac622c4 100644 --- a/FrmCompareFeature.cs +++ b/FrmCompareFeature.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Data; using System.Drawing; using System.Windows.Forms; @@ -11,26 +10,16 @@ { public partial class FrmCompareFeature : Office2007Form { - GSOFeature srcFeature; - GSOFeature dscFeature; - GSOGlobeControl globeControl1; - GSOGlobeControl globeControl2; - bool isSamePolyline; - - GSOLayer layerTemp; - GSOLayer layerTemp2; - GSOFeature new_feat; + private GSOFeature srcFeature, dscFeature; + private GSOGlobeControl globeControl1, globeControl2; GSOGeoPolygon3D resPolygon; - static FrmCompareFeature frm; - public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2, int width) + public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, int width) { if (frm == null) { - frm = new FrmCompareFeature(_globeControl1, _globeControl2, _layerTemp, _layerTemp2); - + frm = new FrmCompareFeature(_globeControl1, _globeControl2); frm.Location = new Point((width - frm.Width)/2, 50); frm.Show(_globeControl1.Parent); } @@ -41,8 +30,7 @@ } } - public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2) + public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2) { globeControl1 = _globeControl1; globeControl2 = _globeControl2; @@ -50,99 +38,35 @@ globeControl1.Globe.Action = EnumAction3D.SelectObject; globeControl2.Globe.Action = EnumAction3D.SelectObject; - layerTemp = _layerTemp; - layerTemp2 = _layerTemp2; globeControl1.MouseClick += globeControl1_MouseClick; globeControl2.MouseClick += globeControl2_MouseClick; } + private void invalParam() + { + if (srcFeature == null || dscFeature == null) + { + MessageBox.Show("请选择要对比的管段!", "提示"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) + { + MessageBox.Show("请选择同种类型图层!"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type || + srcFeature.Geometry.Type != EnumGeometryType.GeoPolyline3D) + return; + } + private void buttonAnalysis_Click(object sender, EventArgs e) { + invalParam(); + dataGridViewX1.DataSource = null; - - double bufferWidth = Convert.ToDouble(textBox1.Text); - - if (srcFeature == null || dscFeature == null) - MessageBox.Show("请选择要对比的管段!", "提示"); - else - { - if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) - MessageBox.Show("请选择同种类型图层!"); - else if (srcFeature.Geometry.Type == dscFeature.Geometry.Type && - srcFeature.Geometry.Type == EnumGeometryType.GeoPolyline3D) - { - lineLayerCompare(srcFeature, dscFeature, bufferWidth); - if (!isSamePolyline) - MessageBox.Show("实测管段与施工管段非同一条管段,请选择同一管段进行比较!", "提示"); - else - { - lineFeatureCompare(srcFeature, dscFeature); - globeControl1.Globe.Action = EnumAction3D.ActionNull; - globeControl2.Globe.Action = EnumAction3D.ActionNull; - } - } - else - MessageBox.Show("无法处理该类型图层!"); - } + lineFeatureCompare(srcFeature, dscFeature); } - - /// - /// 在容差范围内判断是否同一根管段 - /// - /// - /// - /// - /// - private bool lineLayerCompare(GSOFeature srcFeature, GSOFeature dscFeature, double bufferWidth) - { - isSamePolyline = false; - - GSOGeoPolyline3D srcLine = srcFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D srcBufferPolygon = srcLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer dsc = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); - - if (srcBufferPolygon != null) - { - GSOFeatures featuresInSrcLayer = dsc.FindFeaturesInPolygon(srcBufferPolygon, true); - - if (featuresInSrcLayer != null && featuresInSrcLayer.Length > 0) - { - for (int i = 0; i < featuresInSrcLayer.Length; i++) - { - if (featuresInSrcLayer[i].Name == dscFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D dscBufferPolygon = dscLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer src = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); - - if (dscBufferPolygon != null) - { - GSOFeatures featuresInDscLayer = src.FindFeaturesInPolygon(dscBufferPolygon, true); - - if (featuresInDscLayer != null && featuresInDscLayer.Length > 0) - { - for (int i = 0; i < featuresInDscLayer.Length; i++) - { - if (featuresInDscLayer[i].Name == srcFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - return isSamePolyline; - } - /// /// 分析两根管段的具体差异 /// @@ -156,8 +80,10 @@ GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; double dscLineLength = dscLine.GetSpaceLength(false, 6378137); - double horizonDistance = calculateDistance(srcLine, dscLine,false); - double verticalDistance = calculateDistance(srcLine, dscLine,true); + double horizonDistance, verticalDistance; + + ClassDoubleScreenCompare.CalculateDistance(srcLine, dscLine, out horizonDistance, + out verticalDistance,globeControl1,globeControl2); DataTable dt = new DataTable(); dt.Columns.Add("数据名称"); @@ -189,6 +115,98 @@ dt.Rows.Add(dscRow); dataGridViewX1.DataSource = dt; + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) + { + globeControl1.Globe.MemoryLayer.RemoveAllFeature(); + globeControl2.Globe.MemoryLayer.RemoveAllFeature(); + + GSOFeature new_feat = new GSOFeature(); + resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); + resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; + new_feat.Geometry = resPolygon; + + globeControl1.Globe.MemoryLayer.AddFeature(new_feat); + globeControl2.Globe.MemoryLayer.AddFeature(new_feat); + + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + public static void clearFeatureHighLight(GSOGlobeControl glb) + { + for (int i = 0; i < glb.Globe.Layers.Count; i++) + { + GSOLayer layer = glb.Globe.Layers[i]; + if (!(layer is GSOFeatureLayer)) continue; + GSOFeatures feats = layer.GetAllFeatures(); + for (int j = 0; j < feats.Length; j++) + { + feats[j].HighLight = false; + } + } + } + + void globeControl1_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl1.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl1.Globe.Action != EnumAction3D.SelectObject || + globeControl1.Globe.SelectedObject == null) + return; + GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + srcFeature = globeControl1.Globe.SelectedObject; + dscFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(srcFeature, + globeControl1,globeControl2,bufferWidth,resPolygon); + + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } + + void globeControl2_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl2.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl2.Globe.Action != EnumAction3D.SelectObject || + globeControl2.Globe.SelectedObject == null) + return; + + GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + dscFeature = globeControl2.Globe.SelectedObject; + srcFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(dscFeature, + globeControl1, globeControl2, bufferWidth, resPolygon); + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } private void FrmCompareFeature_FormClosing(object sender, FormClosingEventArgs e) @@ -198,322 +216,5 @@ frm = null; } - private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) - { - new_feat = new GSOFeature(); - resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); - resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; - new_feat.Geometry = resPolygon; - - layerTemp.AddFeature(new_feat); - layerTemp2.AddFeature(new_feat); - globeControl1.Refresh(); - globeControl2.Refresh(); - } - - private GSOLayer getSameLayer(GSOFeature feature) - { - GSOLayer layer = null; - if (!feature.Dataset.Caption.StartsWith("施工")) - { - layer = feature.Dataset.Caption == "供电管线" - ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") - : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); - } - else - { - layer = feature.Dataset.Caption == "施工电力管线" - ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") - : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); - } - - return layer; - } - - /// - /// 地球1中点击地球2中同步添加缓冲区 - /// - /// - /// - void globeControl1_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl1.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl1.Globe.Action == EnumAction3D.SelectObject && - globeControl1.Globe.SelectedObject != null) - { - GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - addPologyToGlobeControl(line, bufferWidth); - } - - srcFeature = globeControl1.Globe.SelectedObject; - GSOLayer layers = getSameLayer(srcFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = srcFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(srcFeature, features[i], Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - listFeatures.Add(features[i]); - } - calculate(out maxLength, out dscFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - /// - /// 地球2中点击地球1中同步添加缓冲区 - /// - /// - /// - void globeControl2_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl2.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl2.Globe.Action != EnumAction3D.SelectObject || - globeControl2.Globe.SelectedObject == null) - return; - else - { - GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - - addPologyToGlobeControl(line, bufferWidth); - } - - dscFeature = globeControl2.Globe.SelectedObject; - //双屏同时选中同一管段 - GSOLayer layers = getSameLayer(dscFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = dscFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(features[i], dscFeature, Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - { - listFeatures.Add(features[i]); - } - } - calculate(out maxLength, out srcFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - private void calculate(out double maxLength, out GSOFeature feature, GSOFeatures listFeatures, - GSOGeoPolyline3D scLine) - { - maxLength = 0; - feature=new GSOFeature(); - if (listFeatures.Length == 0) - feature = null; - else - { - if (listFeatures.Length == 1) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - } - else - { - for (int m = 0; m < listFeatures.Length; m++) - { - GSOGeoPolyline3D tempSGLine = listFeatures[m].Geometry as GSOGeoPolyline3D; - - double tempLength = tempSGLine.GetSpaceLength(false, 6378137); - double lengthAbs = Math.Abs(tempLength - scLine.GetSpaceLength(false, 6378137)); - if (m == 0) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - maxLength = lengthAbs; - } - else if (lengthAbs < maxLength) - { - feature = listFeatures[m]; - listFeatures[m].HighLight = true; - maxLength = lengthAbs; - } - } - } - } - } - - /// - /// 计算距离 - /// - /// - /// - /// - double calculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2,bool isVertical) - { - GSOPoint3d pntIntersect1 = new GSOPoint3d(); - GSOPoint3d pntIntersect2 = new GSOPoint3d(); - GSOPoint3d pntProIntersect1 = new GSOPoint3d(); - GSOPoint3d pntProIntersect2 = new GSOPoint3d(); - double dDist = 0; - if (isVertical) - { - dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "垂直"); - } - else - { - dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "水平"); - } - - return dDist; - } - - /// - /// 清除所有高亮Feature - /// - /// - private void clearFeatureHighLight(GSOGlobeControl glb1,GSOGlobeControl glb2) - { - layerTemp.RemoveAllFeature(); - layerTemp2.RemoveAllFeature(); - //清除gbl1中高亮 - for (int i = 0; i < glb1.Globe.Layers.Count; i++) - { - GSOLayer layer = glb1.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - //清除gbl2中高亮 - for (int i = 0; i < glb2.Globe.Layers.Count; i++) - { - GSOLayer layer = glb2.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - } - - /// - /// 添加标注 - /// - /// - /// - /// - /// - /// - /// - private GSOPoint3d LabelDistance(GSOLayer markerLayer, GSOLayer markerLayer2, - GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, bool markerVisible,string label) - { - if (pntIntersect1 == null || pntIntersect2 == null) - return new GSOPoint3d(); - GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); - GSOPoint3ds point3ds = new GSOPoint3ds(); - point3ds.Add(pntIntersect1); - point3ds.Add(pntIntersect2); - disline.AddPart(point3ds); - - GSOGeoMarker dismarker = new GSOGeoMarker(); - GSOFeature marker = null; - GSOFeature line = null; - createLineStyle(out marker, out line,disline, pntIntersect1, pntIntersect2, distance, label, dismarker); - - line.Visible = marker.Visible = markerVisible; - markerLayer.AddFeature(line); - markerLayer.AddFeature(marker); - - markerLayer2.AddFeature(line); - markerLayer2.AddFeature(marker); - - return dismarker.Position; - } - /// - /// 控制标注和字体的颜色 - /// - /// - /// - /// - /// - /// - /// - /// - /// - private void createLineStyle(out GSOFeature marker,out GSOFeature line,GSOGeoPolyline3D disline, - GSOPoint3d pntIntersect1,GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) - { - GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 - style.LineColor = Color.Red; - style.LineWidth = 5; //设置线的宽度为5 - style.VertexVisible = true; //显示线的节点 - disline.Style = style; //把风格添加到线上 - disline.AltitudeMode = EnumAltitudeMode.Absolute; - line=new GSOFeature(); - line.Geometry = disline; - - dismarker.X = pntIntersect1.X; - dismarker.Y = pntIntersect1.Y; - dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; - dismarker.Text = label + distance.ToString("0.00") + "米"; - dismarker.AltitudeMode = EnumAltitudeMode.Absolute; - - GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); - GSOTextStyle styleText = new GSOTextStyle(); - styleText.IsSizeFixed = true; - styleText.ForeColor = Color.Red; - styleText.FontSize = 20; - styleMarker.TextStyle = styleText; - dismarker.Style = styleMarker; - - marker=new GSOFeature(); - marker.Geometry = dismarker; - } - } } diff --git a/FrmHotFuncStat.cs b/FrmHotFuncStat.cs index 84131ef..f313b20 100644 --- a/FrmHotFuncStat.cs +++ b/FrmHotFuncStat.cs @@ -58,14 +58,11 @@ DataTable table = OledbHelper.QueryTable(sql); - if (table != null) + if (table == null) return; + for (int i = 0; i < table.Rows.Count; i++) { - for (int i = 0; i < table.Rows.Count; i++) - { - userLists.Items.Add(table.Rows[i][0].ToString()); - } + userLists.Items.Add(table.Rows[i][0].ToString()); } - } //统计结果 private void statBtn_Click(object sender, EventArgs e) diff --git a/FrmLayerControl.cs b/FrmLayerControl.cs index 8586041..8fbce97 100644 --- a/FrmLayerControl.cs +++ b/FrmLayerControl.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Windows.Forms; using DevComponents.DotNetBar; using GeoScene.Data; @@ -13,10 +14,10 @@ GSOGlobeControl globeControl1; GSOGlobeControl globeControl2; - TreeNode terrainManagerNode = null; - TreeNode layerManagerNode = null; - TreeNode terrainManagerNode1 = null; - TreeNode layerManagerNode1 = null; +// TreeNode terrainManagerNode = null; +// TreeNode layerManagerNode = null; +// TreeNode terrainManagerNode1 = null; +// TreeNode layerManagerNode1 = null; public FrmLayerControl(GSOGlobeControl ctl1,GSOGlobeControl ctl2) { @@ -25,14 +26,14 @@ globeControl2 = ctl2; } - private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) - { - treeNode=new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - } +// private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) +// { +// treeNode=new TreeNode(); +// treeNode.ImageIndex = 0; +// treeNode.SelectedImageIndex = 0; +// treeNode.Checked = false; +// treeNode.Text = strTreeNodeText; +// } // private void initTreeView() // { @@ -51,234 +52,258 @@ // layerTree2.Nodes.Add(terrainManagerNode); // } - #region wxl重构树形结构代码 + + - private TreeNode treeNode(string strTreeNodeText) - { - TreeNode treeNode = new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - return treeNode; - } -// private void appendToParent(TreeNodeCollection treeNodeCollection, ) - #endregion - private void initTreeView() +// private void initNode(string nodeName) +// { +// TreeNode nodeGroupElse1 = new TreeNode(); +// nodeGroupElse1.Text = nodeName; +// layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); +// +// TreeNode nodeGroupElse = new TreeNode(); +// nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; +// layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); +// } + +// private void initTreeNode(XmlNodeList Params) +// { +// foreach (XmlNode paramsNode in Params) //layers +// { +// foreach (XmlNode layerNode in paramsNode) //layer +// { +// initNode(layerNode.Attributes["label"].Value); +// } +// } +// +// initNode("基础图层"); +// initNode("其他"); +// } + +// private void FrmLayerControl_Load(object sender, EventArgs e) +// { +// +// initTreeView(); +// try +// { +// XmlDocument doc = new XmlDocument(); +// doc.Load(Application.StartupPath + "\\双屏设置.xml"); +// XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// +// initTreeNode(Params); +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// +// RefreshLayerAndTerrainTree(); +// } + private void FrmLayerControl_Load(object sender, EventArgs e) { layerTree1.Nodes.Clear(); layerTree2.Nodes.Clear(); - - //加载layertree2 - initLayerTree(out layerManagerNode1, "图层管理"); - layerTree1.Nodes.Add(layerManagerNode1); - initLayerTree(out terrainManagerNode1, "地形管理"); - layerTree1.Nodes.Add(terrainManagerNode1); - - initLayerTree(out layerManagerNode, "图层管理"); - layerTree2.Nodes.Add(layerManagerNode); - initLayerTree(out terrainManagerNode, "地形管理"); - layerTree2.Nodes.Add(terrainManagerNode); + TreeUtils.InitLayerTree(globeControl1, layerTree1, "实测数据"); + TreeUtils.InitLayerTree(globeControl2, layerTree2, "施工数据"); } - private void initNode(string nodeName) - { - TreeNode nodeGroupElse1 = new TreeNode(); - nodeGroupElse1.Text = nodeName; - layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); + #region wxl重构树形结构代码 - TreeNode nodeGroupElse = new TreeNode(); - nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; - layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); - } + /// + /// 构造tree,最多解析三层,可放在工具类中 - private void initTreeNode(XmlNodeList Params) - { - foreach (XmlNode paramsNode in Params) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - initNode(layerNode.Attributes["label"].Value); - } - } + /// 所属地球 + /// 要加载的树 + /// 数据来源,实测数据/施工数据/规划数据/红线数据,为空则展示全部 +// private void initTree(GSOGlobeControl gsoGlobeControl,TreeView treeView, string viewDatasrc) +// { +// treeView.Nodes.Clear(); +// LayerConfig layerConfig = Utility.layerConfig; +// List datasrcs = layerConfig.datasrcs; +// foreach (DataSrc datasrc in datasrcs) +// { +// if (viewDatasrc != null && !viewDatasrc.Trim().Equals("") && !datasrc.label.Equals(viewDatasrc)) continue; +// TreeNode rootNode = treeView.Nodes.Add(datasrc.label); +// List layerTypes = datasrc.layertypes; +// foreach (LayerType layerType in layerTypes) +// { +// TreeNode secNode = rootNode.Nodes.Add(layerType.label); +// List layers = layerType.layers; +// foreach (Layer layer in layers) +// { +// GSOLayer gsoLayer = gsoGlobeControl.Globe.Layers.GetLayerByCaption(layer.layer); +// if (gsoLayer == null) continue;//将不存在的去除 +// TreeNode node = new TreeNode(); +// node.Tag = gsoLayer; +// node.Text = layer.label; +// node.Checked = gsoLayer.Visible; +// if (gsoLayer.Visible) +// { +// secNode.Checked = true; +// rootNode.Checked = true; +// } +// secNode.Nodes.Add(node); +// } +// } +// } +// } - initNode("基础图层"); - initNode("其他"); - } + #endregion - private void FrmLayerControl_Load(object sender, EventArgs e) - { - initTreeView(); - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(Application.StartupPath + "\\双屏设置.xml"); - XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, +// TreeView layerTree) +// { +// try +// { +// for (int i = 0; i < nLayerCount; i++) +// { +// GSOLayer layer = globcontrol.Globe.Layers[i]; +// if (layer == null) continue; +// string layerName = layer.Name; +// TreeNode node = new TreeNode(); +// node.Tag = layer; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = layer.Caption; +// node.Checked = layer.Visible; +// +// bool isContains = false; +// for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) +// { +// if (!layerName.Contains("fttp:")) +// { +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || +// layerName.Contains("施工") || +// layerName.Contains("规划")) continue; +// break; +// case "layerTree2": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[j].Nodes.Add(node); +// isContains = true; +// break; +// } +// else +// { +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); +// isContains = true; +// break; +// } +// } +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || +// layerName.Contains("标注") || +// isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || +// layerName.Contains("景观") || layerName.Contains("红线")) +// continue; +// break; +// case "layerTree2": +// if (isContains != false || layerName.Contains("tempLgdData2")) +// continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); +// } +// +// for (int i = 0; i < nTerrainCount; i++) +// { +// GSOTerrain terrain = globcontrol.Globe.Terrains[i]; +// if (terrain == null) continue; +// TreeNode node = new TreeNode(); +// node.Tag = terrain; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = terrain.Caption; +// node.Checked = terrain.Visible; +// switch (layerTree.Name) +// { +// case "layerTree1": +// terrainManagerNode1.Nodes.Add(node); +// break; +// case "layerTree2": +// terrainManagerNode.Nodes.Add(node); +// break; +// default: +// break; +// } +// } +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// } - initTreeNode(Params); - } - catch (Exception ex) - { - LogError.PublishError(ex); - } +// private void initTreeNodeCheckedStatus(TreeView layerTreeView) +// { +// //节点选中状态控制 +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// if (node.Checked != true) continue; +// layerTreeView.Nodes[0].Checked = true; +// break; +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOTerrain layer = childNode.Tag as GSOTerrain; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// } - RefreshLayerAndTerrainTree(); - } - - private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, - TreeView layerTree) - { - try - { - for (int i = 0; i < nLayerCount; i++) - { - GSOLayer layer = globcontrol.Globe.Layers[i]; - if (layer == null) continue; - string layerName = layer.Name; - TreeNode node = new TreeNode(); - node.Tag = layer; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = layer.Caption; - node.Checked = layer.Visible; - - bool isContains = false; - for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) - { - if (!layerName.Contains("fttp:")) - { - switch (layerTree.Name) - { - case "layerTree1": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || - layerName.Contains("施工") || - layerName.Contains("规划")) continue; - break; - case "layerTree2": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[j].Nodes.Add(node); - isContains = true; - break; - } - else - { - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); - isContains = true; - break; - } - } - switch (layerTree.Name) - { - case "layerTree1": - if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || - layerName.Contains("标注") || - isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || - layerName.Contains("景观") || layerName.Contains("红线")) - continue; - break; - case "layerTree2": - if (isContains != false || layerName.Contains("tempLgdData2")) - continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); - } - - for (int i = 0; i < nTerrainCount; i++) - { - GSOTerrain terrain = globcontrol.Globe.Terrains[i]; - if (terrain == null) continue; - TreeNode node = new TreeNode(); - node.Tag = terrain; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = terrain.Caption; - node.Checked = terrain.Visible; - switch (layerTree.Name) - { - case "layerTree1": - terrainManagerNode1.Nodes.Add(node); - break; - case "layerTree2": - terrainManagerNode.Nodes.Add(node); - break; - default: - break; - } - } - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - - private void initTreeNodeCheckedStatus(TreeView layerTreeView) - { - //节点选中状态控制 - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - if (node.Checked != true) continue; - layerTreeView.Nodes[0].Checked = true; - break; - } - - foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOTerrain layer = childNode.Tag as GSOTerrain; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - } - - void exPandTreeNode() - { - layerManagerNode1.Expand(); - terrainManagerNode1.Expand(); - layerManagerNode.Expand(); - terrainManagerNode.Expand(); - } +// void exPandTreeNode() +// { +// layerManagerNode1.Expand(); +// terrainManagerNode1.Expand(); +// layerManagerNode.Expand(); +// terrainManagerNode.Expand(); +// } /// /// 刷新节点树 /// - private void RefreshLayerAndTerrainTree() - { - int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 - int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 - addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); - initTreeNodeCheckedStatus(layerTree1); - - int nLayerCount = globeControl2.Globe.Layers.Count; - int nTerrainCount = globeControl2.Globe.Terrains.Count; - addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); - initTreeNodeCheckedStatus(layerTree2); - - // 展开 - exPandTreeNode(); - } +// private void RefreshLayerAndTerrainTree() +// { +// int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 +// int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 +// addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); +// initTreeNodeCheckedStatus(layerTree1); +// +// int nLayerCount = globeControl2.Globe.Layers.Count; +// int nTerrainCount = globeControl2.Globe.Terrains.Count; +// addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); +// initTreeNodeCheckedStatus(layerTree2); +// +// // 展开 +// exPandTreeNode(); +// } /// /// 节点树复选框选中状态改变事件处理 @@ -289,144 +314,132 @@ { if (e.Action != TreeViewAction.Unknown) { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } + TreeUtils.TreeNodeCheckedChange(globeControl2,e.Node); + } + } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree2(e.Node, e.Node.Checked); + private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) + { + if (e.Action != TreeViewAction.Unknown) + { + TreeUtils.TreeNodeCheckedChange(globeControl1, e.Node); } } + + +// private void layerTree2_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree2(e.Node, e.Node.Checked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree1(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree1(childNode, isChecked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree2(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree2(childNode, isChecked); +// } +// } /// /// 节点树选中状态改变事件 /// /// /// - private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) - { - if (e.Action != TreeViewAction.Unknown) - { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } +// private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree1(e.Node, e.Node.Checked); +// } +// } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree1(e.Node, e.Node.Checked); - } - } - /// - /// 改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 - /// - /// - private void CheckParentNode(TreeNode curNode) - { - bool bChecked = false; - - if (curNode.Parent != null) - { - foreach (TreeNode node in curNode.Parent.Nodes) - { - if (node.Checked) - { - bChecked = true; - break; - } - } - if (bChecked) - { - curNode.Parent.Checked = true; - CheckParentNode(curNode.Parent); - } - else - { - curNode.Parent.Checked = false; - CheckParentNode(curNode.Parent); - } - } - } } } diff --git a/FrmMetadata.cs b/FrmMetadata.cs index 4d0d5cb..bb7c46c 100644 --- a/FrmMetadata.cs +++ b/FrmMetadata.cs @@ -12,12 +12,8 @@ { public partial class FrmMetadata : Office2007Form { - List pipelineLayerNames = new List();//线图层名称 - List workwellLayerNames = new List();//工井图层名称 - List valueLayerNames = new List();//阀门图层名称 - List instrumenLayerNames = new List();//附属物图层名称 - string filename = Utility.filename; - DataSet dataSet = new DataSet(); + + bool selectedLayer; public FrmMetadata() @@ -25,308 +21,33 @@ InitializeComponent(); loadTreeView(layerTree); } - private void FrmMetadata_Load(object sender, EventArgs e) - { - //this.ntLblC.Text = "nn"; - // loadTreeView(layerTree); - } private void loadTreeView(TreeView tv)//构建图层树 { - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - //tv.ShowPlusMinus = false; - - //tv.Nodes.Clear(); - tv.ShowLines = true; - // tv.ImageList = imageList1; - tv.CheckBoxes = false; - #region 三级 - - //foreach (XmlNode paramsNode in Params1) //layers - //{ - // foreach (XmlNode layerNode in paramsNode) //layer - // { - // TreeNode nodelayer = new TreeNode(); - // string layerName = layerNode.Attributes["label"].Value; - // nodelayer.Text = layerName; - - // if (layerNode.HasChildNodes != false) - // { - // tv.Nodes.Add(nodelayer); - // foreach (XmlNode layerchildNode in layerNode) //layerchild - // { - // if (layerchildNode.Name == "layerchild") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["type"].Value; - // string layerchildName = layerchildNode.Attributes["label"].Value; - // if (layerType == "locaserver") - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - - // } - // else - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // if (layerchildNode.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = boollayer; - // nodelayer.Nodes.Add(nodelayerchild); - // } - // } - // else if (layerchildNode.Name == "layertype") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["label"].Value; - // nodelayerchild.Text = layerType; - // nodelayerchild.Tag = layerType; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - // if (layerchildNode.HasChildNodes == true) - // { - // foreach (XmlNode childNodeLayer in layerchildNode) - // { - // TreeNode nodelayerchild1 = new TreeNode(); - // string layerName1 = childNodeLayer.Attributes["layer"].Value; - // string layerchildName = childNodeLayer.Attributes["label"].Value; - // string layerType1 = childNodeLayer.Attributes["type"].Value; - // if (childNodeLayer.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild1.Text = layerchildName; - // nodelayerchild1.Tag = layerType1 + "|" + layerName1; - // nodelayerchild1.Checked = boollayer; - // nodelayerchild.Nodes.Add(nodelayerchild1); - // } - // } - // } - - // } - // } - // else - // { - // tv.Nodes.Add(nodelayer); - // } - // } - - //} - - #endregion - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - TreeNode nodelayer = new TreeNode(); - string layerName = layerNode.Attributes["label"].Value; - nodelayer.Text = layerName; - - if (layerNode.HasChildNodes) - { - tv.Nodes.Add(nodelayer); - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - if (layerchildNode.Name == "layerchild") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["type"].Value; - string layerchildName = layerchildNode.Attributes["label"].Value; - if (layerType == "locaserver") - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - - } - else - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - if (layerchildNode.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - //nodelayerchild.Checked = boollayer; - nodelayer.Nodes.Add(nodelayerchild); - } - } - else if (layerchildNode.Name == "layertype") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["label"].Value; - nodelayerchild.Text = layerType; - nodelayerchild.Tag = layerType; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode) - { - if (childNodeLayer.HasChildNodes) - { - TreeNode nodelayerchild2 = new TreeNode(); - string layer = childNodeLayer.Attributes["label"].Value; - nodelayerchild2.Text = layer; - nodelayerchild2.Tag = layer; - nodelayerchild2.Checked = true; - nodelayerchild.Nodes.Add(nodelayerchild2); - foreach (XmlNode n in childNodeLayer) - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = n.Attributes["layer"].Value; - string layerchildName = n.Attributes["label"].Value; - string layerType1 = n.Attributes["type"].Value; - if (n.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (n.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (n.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (n.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild2.Nodes.Add(nodelayerchild1); - - } - } - else - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = childNodeLayer.Attributes["layer"].Value; - string layerchildName = childNodeLayer.Attributes["label"].Value; - string layerType1 = childNodeLayer.Attributes["type"].Value; - if (childNodeLayer.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild.Nodes.Add(nodelayerchild1); - - } - } - } - } - - } - } - else - { - tv.Nodes.Add(nodelayer); - } - } - - } - if (tv.Nodes.Count > 0) - { - //tv.Nodes[0].Expand(); - if (tv.Nodes.Count > 0) - { - foreach (TreeNode node in tv.Nodes) - { - //node.Expand(); - } - } - } - //tv.ExpandAll(); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } + //tv.ShowPlusMinus = false; + //tv.Nodes.Clear(); + // tv.ImageList = imageList1; + tv.ShowLines = true; + tv.CheckBoxes = false; + TreeUtils.InitLayerTree(null, tv, null); } - + /// + /// 点击父节点则展开,点击子节点则编辑元数据 + /// + /// + /// private void layerTree_AfterSelect(object sender, TreeViewEventArgs e) { - String layername = layerTree.SelectedNode.Text; - if (layerTree.SelectedNode.GetNodeCount(true) == 0) { - searchLayerInfo(layername); - - selectedLayer = true; - clearBtn.Hide(); - completeBtn.Hide(); + String layername = e.Node.Text; + if (e.Node.GetNodeCount(true) != 0) + { //点击父节点,则展开 + e.Node.Expand(); + return; } + searchLayerInfo(layername); + selectedLayer = true; + clearBtn.Hide(); + completeBtn.Hide(); } //查询元数据 private void searchLayerInfo(String layername) { @@ -335,8 +56,6 @@ + " casic_metadatalayer where casic_metadatacontent.\"LAYERID\" = casic_metadatalayer.\"LAYERID\" and casic_metadatalayer.\"LAYERNAME\"='" + layername+"'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; - if (table != null && table.Rows.Count > 0) { groupBox1.Text = layername; @@ -400,8 +119,6 @@ //判断此时layerTree有没有选中的图层 if (selectedLayer)//有选中的图层,获得其名 { - string name = layerTree.SelectedNode.Text; - OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "支持格式(*.xml)|*.xml|XML数据(*.xml)|"; dlg.Multiselect = true; @@ -419,31 +136,24 @@ //读入元数据 private void AddXMLMDdata(string strFilePath) { - try - { - dataSet.Clear(); //清空数据集中的内容 - dataSet.ReadXml(strFilePath); //读取XML文件中的内容 + DataSet dataSet = new DataSet(); + dataSet.ReadXml(strFilePath); //读取XML文件中的内容 - //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); - string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); - string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); - string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); - string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); + //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); + string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); + string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); + string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); + string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); - //this.titleLbl.Text = attrtitle; - consLblC.Text = attrcons; - descLblC.Text = attrdesc; - authorLblC.Text = attrauthor; - ntLblC.Text = attrnt; - //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); + //this.titleLbl.Text = attrtitle; + consLblC.Text = attrcons; + descLblC.Text = attrdesc; + authorLblC.Text = attrauthor; + ntLblC.Text = attrnt; + //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); - completeBtn.Visible = true; - //this.clearBtn.Visible = true; - } - catch (Exception e) - { - - } + completeBtn.Visible = true; + //this.clearBtn.Visible = true; } //新建/编辑元数据 private void editBtn_Click(object sender, EventArgs e) @@ -509,11 +219,7 @@ string sql = "select \"LAYERID\" from casic_metadatalayer where \"LAYERNAME\" = '" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - if (table != null && table.Rows.Count > 0)//已有该图层,属于编辑 - { - return false; - } - return true; + return table == null || table.Rows.Count <= 0; } //保存元数据 private void saveData(String method,String layername,String cons,String desc,String author,String nt) { @@ -539,17 +245,16 @@ string insertSQL = "insert into casic_metadatalayer values ('" + layerid + "','" + layername + "')";//+ string insertSQL2 = "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','" + desc + "','" + author + "','" + nt + "')"; // "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','"+desc+"','"+author+"','"+nt+"')"; - if ((OledbHelper.sqlExecuteNonQuery(insertSQL) > 0)&&(OledbHelper.sqlExecuteNonQuery(insertSQL2)>0)) - { - MessageBox.Show("保存元数据成功!"); + if ((OledbHelper.sqlExecuteNonQuery(insertSQL) <= 0) || + (OledbHelper.sqlExecuteNonQuery(insertSQL2) <= 0)) return; + MessageBox.Show("保存元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } else { //更新 string layeridSQL = "select layerid from casic_metadatalayer where LAYERNAME='"+layername+"'"; @@ -561,16 +266,14 @@ + "',casic_metadatacontent.MDAUTHOR ='" + author.Trim() + "',casic_metadatacontent.NT ='" + nt.Trim() + "' where casic_metadatacontent.LAYERID='" + layerid + "'"; - if (OledbHelper.sqlExecuteNonQuery(updateSQL) > 0) - { - MessageBox.Show("更新元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + if (OledbHelper.sqlExecuteNonQuery(updateSQL) <= 0) return; + MessageBox.Show("更新元数据成功!"); + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } } diff --git a/FrmMetadataStat.cs b/FrmMetadataStat.cs index cb19f84..c3c1359 100644 --- a/FrmMetadataStat.cs +++ b/FrmMetadataStat.cs @@ -2,16 +2,16 @@ using System.Collections; using System.Collections.Generic; using System.Data; +using System.Linq; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; -using System.Xml; using DevComponents.DotNetBar; namespace Cyberpipe { public partial class FrmMetadataStat : Office2007Form { - Dictionary dic = new Dictionary(); + public FrmMetadataStat() { InitializeComponent(); @@ -22,7 +22,7 @@ string sql = "select LAYERNAME from casic_metadataLayer where LAYERNAME like '%" + keywordsTxt.Text.Trim() + "%'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; + int num = 0; resultList.Clear(); consLblC.Text = ""; @@ -32,6 +32,7 @@ if (table != null && table.Rows.Count > 0) { + num = table.Rows.Count; for (int i = 0; i < num;i++ ) { resultList.Items.Add(table.Rows[i][0].ToString()); @@ -56,7 +57,8 @@ int metadataLayernum = statistMDLayer(); int nomdLayernum = layernum - metadataLayernum; //MessageBox.Show("共有多少层?" + layernum.ToString()+"=="+metadataLayernum.ToString()+"=="+nomdLayernum.ToString()); - dic.Clear(); +// dic.Clear(); + Dictionary dic = new Dictionary(); dic.Add("已建",metadataLayernum); dic.Add("未建", nomdLayernum); @@ -74,11 +76,9 @@ foreach (string key in dic.Keys) { - if (dic[key] != 0) - { - xlist.Add(key); - ylist.Add(dic[key]); - } + if (dic[key] == 0) continue; + xlist.Add(key); + ylist.Add(dic[key]); } chart1.Series[0].Points.DataBindXY(xlist, ylist); @@ -89,73 +89,15 @@ string sql = "select * from casic_metadataLayer"; DataTable table = OledbHelper.QueryTable(sql); - mdlayernum = table.Rows.Count; + if(table!=null)mdlayernum = table.Rows.Count; return mdlayernum; } //统计有多少个图层 - private int statistLayer() { - int layernum = 0; - - string filename = Utility.filename; - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - //MessageBox.Show(layerNode.Attributes["label"].Value); - - if (layerNode.HasChildNodes) - { - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - //MessageBox.Show(layerchildNode.Attributes["label"].Value); - if (layerchildNode.Name == "layerchild") - { - layernum++; - } - else if (layerchildNode.Name == "layertype") - { - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode)//layertype下的layerchild - { - //MessageBox.Show(childNodeLayer.Attributes["label"].Value); - if (childNodeLayer.HasChildNodes) - { - - foreach (XmlNode n in childNodeLayer) - { - layernum++; - } - } - else - { - - layernum++; - } - } - } - } - - } - } - } - - } - - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - return layernum; + private int statistLayer() + { + List datasrcs = Utility.layerConfig.datasrcs; + return datasrcs.SelectMany(datasrc => datasrc.layertypes).Sum(layerType => layerType.layers.Count); } //选择list @@ -174,7 +116,6 @@ + "join casic_metadatalayer on casic_metadatalayer.LAYERID = casic_metadatacontent.LAYERID " + "where casic_metadatalayer.LAYERNAME='" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; //MessageBox.Show(num.ToString()); if (table != null && table.Rows.Count > 0) { @@ -192,10 +133,5 @@ ntLblC.Text = ""; } } - - private void buttonX1_Click(object sender, EventArgs e) - { - drawChart(); - } } } diff --git a/FrmWait.Designer.cs b/FrmWait.Designer.cs index 99733ea..88f5a29 100644 --- a/FrmWait.Designer.cs +++ b/FrmWait.Designer.cs @@ -55,7 +55,6 @@ this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(0, 24); this.label1.TabIndex = 1; - this.label1.Click += new System.EventHandler(this.label1_Click); // // FrmWait // @@ -71,7 +70,7 @@ this.ShowIcon = false; this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; this.Text = "正在处理,请稍后..."; - this.Load += new System.EventHandler(this.FrmWait_Load); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmWait_FormClosing); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); diff --git a/FrmWait.cs b/FrmWait.cs index d3b7a48..d645ae4 100644 --- a/FrmWait.cs +++ b/FrmWait.cs @@ -32,27 +32,6 @@ frm = null; } - private void FrmWait_Load(object sender, EventArgs e) - { - - - } - - - private void labelX2_Click(object sender, EventArgs e) - { - - } - - private void progressBarX1_Click(object sender, EventArgs e) - { - - } - - private void label1_Click(object sender, EventArgs e) - { - - } } } diff --git a/FrmYJSHTC.cs b/FrmYJSHTC.cs index 3572371..27b7186 100644 --- a/FrmYJSHTC.cs +++ b/FrmYJSHTC.cs @@ -143,9 +143,7 @@ for (int i = ctl1.Globe.Layers.Count - 1; i >= 0; i--) { if (ctl1.Globe.Layers[i].Caption == str) - { ctl1.Globe.Layers.Remove(ctl1.Globe.Layers[i]); - } } foreach (TreeNode n in layerTree.Nodes) @@ -155,20 +153,15 @@ for (int i = 0; i < n.Nodes.Count; i++) { if (n.Nodes[i].Text == str) - { n.Nodes[i].Remove(); - } } } } string sql = "delete from casic_audit_result where SH_LAYER = '" + str + "'"; - OledbHelper.sqlExecuteNonQuery(sql); - } } - } } diff --git a/MainFrm.cs b/MainFrm.cs index bc962c4..29a3eb3 100644 --- a/MainFrm.cs +++ b/MainFrm.cs @@ -2,7 +2,6 @@ using System.Collections; using System.Collections.Generic; using System.Data; -using System.Data.OracleClient; using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; @@ -13,7 +12,6 @@ using System.Text; using System.Threading; using System.Windows.Forms; -using System.Xml; using Cyberpipe.Forms; using DevComponents.DotNetBar; using GeoScene.Data; @@ -28,10 +26,10 @@ { TreeNode layerManagerNode; bool m_bFullScreen; - + GSOGlobeControl globeControl1; GSOGlobeControl globeControl2; - private GSOHudButton legend;//定义图例 + private GSOHudButton legend; //定义图例 private GSOHudButton btnToolNone; private GSOHudButton btnToolSelect; ToolTip tooltip1; @@ -42,20 +40,20 @@ GSOBalloon featureTooltip2; GSOBalloonEx balloonEx2; - GSOLayer layerTemp; - GSOLayer layerTemp2; + GSOLayer layerTemp;//wxl注释,Globe1的临时图层 + GSOLayer layerTemp2;//wxl注释,Globe2的临时图层 FrmRedlineResult frmredResult = null; FrmMnModify frmModify; public bool frmRedlineResult = false; public bool boolfrmShResult; public bool boolfrmModify; - public static string m_CurrentQueryLayer;//定义当前查询的图层 + public static string m_CurrentQueryLayer; //定义当前查询的图层 //定位和闪烁初始化定义 private EnumDesignMode enumDesignMode; //模拟规划设计模式 - private string trackflag;//定义阀门查询个数 + private string trackflag; //定义阀门查询个数 //记录沿线飞行设置 //int m_nFlyMode = 2; @@ -67,7 +65,7 @@ Double m_dDigPitWidthAlongLine = 6; Boolean m_bDigPitByDepth = true; //选择管线 - int selectState;//wxl 注释,表示是否已经计算过净距等了,1已计算,0未计算 + int selectState; //wxl 注释,表示是否已经计算过净距等了,1已计算,0未计算 //private OracleConnection connBackup = null; //数据集合 @@ -89,8 +87,8 @@ //双屏对比 //bool zhanshi=false; Thread t = null; - private GSOHudButton legendSC;//定义图例 - private GSOHudButton legendSG;//定义图例 + private GSOHudButton legendSC; //定义图例 + private GSOHudButton legendSG; //定义图例 //管纵图 private GSOHudButton lendendGZ50; private GSOHudButton lendendGZ36; @@ -102,12 +100,13 @@ GSOGeoPoint3D bsqPT; - FrmYJSHTC frmSh;//一键审核窗口全局变量wxl - FrmWait frmWait;//一键审核等待窗口 + FrmYJSHTC frmSh; //一键审核窗口全局变量wxl + FrmWait frmWait; //一键审核等待窗口 //FrmWait frmWait2 = null;//文档操作等待窗口 float mouseDownX1, mouseDownY1; float mouseDownX2, mouseDownY2; + /// /// /// @@ -164,8 +163,9 @@ RigthMenuSet(); MenuSet(); - + } + /// /// 右屏中添加管纵图片 /// @@ -259,6 +259,7 @@ } #region 区域分析 + if (Utility.userRole.IndexOf("区域分析") < 0) { toolRightMenu.Items.Remove(区域分析ToolStripMenuItem); @@ -278,9 +279,11 @@ 区域分析ToolStripMenuItem.DropDownItems.Remove(无源淹没分析ToolStripMenuItem); } } + #endregion #region 视域分析 + if (Utility.userRole.IndexOf("视域分析") < 0) { toolRightMenu.Items.Remove(视域分析ToolStripMenuItem); @@ -300,9 +303,11 @@ 视域分析ToolStripMenuItem.DropDownItems.Remove(可视包络分析ToolStripMenuItem); } } + #endregion #region 开发分析 + if (Utility.userRole.IndexOf("开挖分析") < 0) { toolRightMenu.Items.Remove(开挖分析ToolStripMenuItem); @@ -334,9 +339,11 @@ 开挖分析ToolStripMenuItem.DropDownItems.Remove(删除隧道ToolStripMenuItem); } } + #endregion #region 拓扑分析 + if (Utility.userRole.IndexOf("拓扑分析") < 0) { toolRightMenu.Items.Remove(拓扑分析ToolStripMenuItem); @@ -372,9 +379,11 @@ 拓扑分析ToolStripMenuItem.DropDownItems.Remove(爆管分析ToolStripMenuItem); } } + #endregion #region 断面分析 + if (Utility.userRole.IndexOf("断面分析") < 0) { toolRightMenu.Items.Remove(断面分析ToolStripMenuItem); @@ -398,9 +407,11 @@ 断面分析ToolStripMenuItem.DropDownItems.Remove(基线剖面分析ToolStripMenuItem); } } + #endregion #region 绘制区域统计 + if (Utility.userRole.IndexOf("绘制区域统计") < 0) { toolRightMenu.Items.Remove(绘制区域统计ToolStripMenuItem); @@ -445,9 +456,11 @@ } } + #endregion #region 全区域统计 + if (Utility.userRole.IndexOf("全区域统计") < 0) { toolRightMenu.Items.Remove(全区域统计ToolStripMenuItem); @@ -492,9 +505,11 @@ } } + #endregion #region 查询 + if (Utility.userRole.IndexOf("查询") < 0) { toolRightMenu.Items.Remove(查询ToolStripMenuItem); @@ -542,9 +557,11 @@ 查询ToolStripMenuItem.DropDownItems.Remove(附属物查询ToolStripMenuItem); } } + #endregion #region 标注 + if (Utility.userRole.IndexOf("标注") < 0) { toolRightMenu.Items.Remove(标注ToolStripMenuItem); @@ -592,9 +609,11 @@ 标注ToolStripMenuItem.DropDownItems.Remove(标注管理ToolStripMenuItem); } } + #endregion #region 飞行 + if (Utility.userRole.IndexOf("飞行") < 0) { toolRightMenu.Items.Remove(飞行ToolStripMenuItem); @@ -618,9 +637,11 @@ 飞行ToolStripMenuItem.DropDownItems.Remove(绕眼睛飞行ToolStripMenuItem); } } + #endregion #region 编辑 + if (Utility.userRole.IndexOf("编辑") < 0) { toolRightMenu.Items.Remove(编辑ToolStripMenuItem); @@ -656,9 +677,11 @@ 编辑ToolStripMenuItem.DropDownItems.Remove(删除模型ToolStripMenuItem); } } + #endregion #region 量算 + if (Utility.userRole.IndexOf("量算") < 0) { toolRightMenu.Items.Remove(量算ToolStripMenuItem); @@ -694,6 +717,7 @@ 量算ToolStripMenuItem.DropDownItems.Remove(地表面积ToolStripMenuItem1); } } + #endregion } @@ -701,6 +725,7 @@ { #region 权限管理 + if (Utility.userRole.IndexOf("权限管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem2); @@ -734,9 +759,11 @@ } } + #endregion #region 基础工具 + if (Utility.userRole.IndexOf("基础工具") < 0) { ribbonControl1.Items.Remove(ribbonTabItem1); @@ -781,37 +808,47 @@ } } + #endregion #region 一键审核 + if (Utility.userRole.IndexOf("一键审核") < 0) { ribbonControl1.Items.Remove(ribbonTabItem11); } + #endregion #region 红线审核 + if (Utility.userRole.IndexOf("红线审核") < 0) { ribbonControl1.Items.Remove(ribbonTabItem6); } + #endregion #region 双屏对比 + if (Utility.userRole.IndexOf("双屏对比") < 0) { ribbonControl1.Items.Remove(ribbonTabItem9); } + #endregion #region 文档管理 + if (Utility.userRole.IndexOf("文档管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem4); } + #endregion #region 基础管理 + if (Utility.userRole.IndexOf("基础管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem14); @@ -841,6 +878,7 @@ } #region Fan Zhang 重构现有代码 + //初始化控件布局 private void initLayout() { @@ -848,37 +886,37 @@ double dsw = SW; if (SW > 1440) { - double myScreen = dsw / 1440; - buttonX1.Width = (int)(buttonX1.Width * myScreen); - buttonX2.Width = (int)(buttonX2.Width * myScreen); - buttonX4.Width = (int)(buttonX4.Width * myScreen); - buttonX5.Width = (int)(buttonX5.Width * myScreen); - buttonX6.Width = (int)(buttonX6.Width * myScreen); - buttonX7.Width = (int)(buttonX8.Width * myScreen); - buttonX8.Width = (int)(buttonX8.Width * myScreen); - buttonX9.Width = (int)(buttonX9.Width * myScreen); - buttonX12.Width = (int)(buttonX12.Width * myScreen); - buttonX14.Width = (int)(buttonX14.Width * myScreen); - buttonX15.Width = (int)(buttonX15.Width * myScreen); - buttonX16.Width = (int)(buttonX16.Width * myScreen); - buttonX17.Width = (int)(buttonX17.Width * myScreen); + double myScreen = dsw/1440; + buttonX1.Width = (int) (buttonX1.Width*myScreen); + buttonX2.Width = (int) (buttonX2.Width*myScreen); + buttonX4.Width = (int) (buttonX4.Width*myScreen); + buttonX5.Width = (int) (buttonX5.Width*myScreen); + buttonX6.Width = (int) (buttonX6.Width*myScreen); + buttonX7.Width = (int) (buttonX8.Width*myScreen); + buttonX8.Width = (int) (buttonX8.Width*myScreen); + buttonX9.Width = (int) (buttonX9.Width*myScreen); + buttonX12.Width = (int) (buttonX12.Width*myScreen); + buttonX14.Width = (int) (buttonX14.Width*myScreen); + buttonX15.Width = (int) (buttonX15.Width*myScreen); + buttonX16.Width = (int) (buttonX16.Width*myScreen); + buttonX17.Width = (int) (buttonX17.Width*myScreen); - labelX1.Width = (int)(labelX1.Width * myScreen); - labelX2.Width = (int)(labelX2.Width * myScreen); - labelX3.Width = (int)(labelX3.Width * myScreen); - labelX6.Width = (int)(labelX6.Width * myScreen); - labelX8.Width = (int)(labelX8.Width * myScreen); - labelX9.Width = (int)(labelX9.Width * myScreen); - labelX12.Width = (int)(labelX12.Width * myScreen); - labelX13.Width = (int)(labelX13.Width * myScreen); - labelX14.Width = (int)(labelX14.Width * myScreen); - labelX16.Width = (int)(labelX16.Width * myScreen); - labelX17.Width = (int)(labelX17.Width * myScreen); - labelX11.Width = (int)(labelX11.Width * myScreen); - labelX19.Width = (int)(labelX19.Width * myScreen); - labelX21.Width = (int)(labelX21.Width * myScreen); - labelX22.Width = (int)(labelX22.Width * myScreen); - labelX24.Width = (int)(labelX24.Width * myScreen); + labelX1.Width = (int) (labelX1.Width*myScreen); + labelX2.Width = (int) (labelX2.Width*myScreen); + labelX3.Width = (int) (labelX3.Width*myScreen); + labelX6.Width = (int) (labelX6.Width*myScreen); + labelX8.Width = (int) (labelX8.Width*myScreen); + labelX9.Width = (int) (labelX9.Width*myScreen); + labelX12.Width = (int) (labelX12.Width*myScreen); + labelX13.Width = (int) (labelX13.Width*myScreen); + labelX14.Width = (int) (labelX14.Width*myScreen); + labelX16.Width = (int) (labelX16.Width*myScreen); + labelX17.Width = (int) (labelX17.Width*myScreen); + labelX11.Width = (int) (labelX11.Width*myScreen); + labelX19.Width = (int) (labelX19.Width*myScreen); + labelX21.Width = (int) (labelX21.Width*myScreen); + labelX22.Width = (int) (labelX22.Width*myScreen); + labelX24.Width = (int) (labelX24.Width*myScreen); } sideBar1.Visible = false; sideBar1.ExpandedPanel = sideBarPanelItem3; @@ -899,7 +937,7 @@ splitContainer1.Panel2Collapsed = true; - buttonItem87.Checked = true;//默认地上模式 + buttonItem87.Checked = true; //默认地上模式 ribbonTabItem1.Select(); //初始化状态为浏览 sideBarPanelItem3.Visible = false; @@ -951,7 +989,7 @@ //图例 legend = new GSOHudButton(); - legend.SetImage(Application.StartupPath + "/Resource/图例P.jpg");//图例P + legend.SetImage(Application.StartupPath + "/Resource/图例P.jpg"); //图例P legend.SetOffset(0, 15); legend.MinOpaque = 1; legend.MaxOpaque = 1; @@ -1002,7 +1040,7 @@ globeControl1.Globe.UserBackgroundColor = Color.White; globeControl1.Globe.FlyAlongLineSpeed = m_dFlyAlongLineSpeed; globeControl1.Globe.FlyAlongLineRotateSpeed = m_dFlyAlongLineRotateSpeed; - globeControl1.Globe.FlyToPointSpeed = globeControl1.Globe.FlyToPointSpeed * 3; + globeControl1.Globe.FlyToPointSpeed = globeControl1.Globe.FlyToPointSpeed*3; globeControl1.Globe.EditSnapObject = true; globeControl1.Globe.IsReleaseMemOutOfView = true; globeControl1.Globe.ControlPanel.Visible = true; @@ -1021,18 +1059,22 @@ globeControl2.Globe.UserBackgroundColor = Color.White; globeControl2.Globe.FlyAlongLineSpeed = m_dFlyAlongLineSpeed; globeControl2.Globe.FlyAlongLineRotateSpeed = m_dFlyAlongLineRotateSpeed; - globeControl2.Globe.FlyToPointSpeed = globeControl2.Globe.FlyToPointSpeed * 3; + globeControl2.Globe.FlyToPointSpeed = globeControl2.Globe.FlyToPointSpeed*3; globeControl2.Globe.EditSnapObject = true; globeControl2.Globe.IsReleaseMemOutOfView = true; globeControl2.Globe.ControlPanel.Visible = false; - GSOSimplePolygonStyle3D trackingRectStyle = globeControl1.Globe.TrackRectTool.TrackingPolygonStyle as GSOSimplePolygonStyle3D; + GSOSimplePolygonStyle3D trackingRectStyle = + globeControl1.Globe.TrackRectTool.TrackingPolygonStyle as GSOSimplePolygonStyle3D; trackingRectStyle.FillColor = Color.FromArgb(0, 0, 0, 0); - GSOSimplePolygonStyle3D trackRectStyle = globeControl1.Globe.TrackRectTool.PolygonStyle as GSOSimplePolygonStyle3D; + GSOSimplePolygonStyle3D trackRectStyle = + globeControl1.Globe.TrackRectTool.PolygonStyle as GSOSimplePolygonStyle3D; trackRectStyle.FillColor = Color.FromArgb(0, 0, 0, 0); - GSOSimpleLineStyle3D trackRectLineStyle = globeControl1.Globe.TrackRectTool.PolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; + GSOSimpleLineStyle3D trackRectLineStyle = + globeControl1.Globe.TrackRectTool.PolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; trackRectLineStyle.LineType = EnumLineType.Solid; - GSOSimpleLineStyle3D trackRectLineStyle1 = globeControl1.Globe.TrackRectTool.TrackingPolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; + GSOSimpleLineStyle3D trackRectLineStyle1 = + globeControl1.Globe.TrackRectTool.TrackingPolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; trackRectLineStyle1.LineType = EnumLineType.Solid; trackRectLineStyle1.LineColor = Color.FromArgb(0, 174, 255); trackRectLineStyle1.LineWidth = 1; @@ -1107,7 +1149,7 @@ //加载两个地球数据 private void loadData() { - Thread t1 = new Thread(doLoadDataForGlobalControl1); + Thread t1 = new Thread(doLoadDataForGlobalControl); t1.IsBackground = true; t1.Start(); } @@ -1119,30 +1161,22 @@ globeControl1.Globe.ConnectServer(Utility.serverip, Utility.serverport, "", ""); //加载locaServer中的数据 globeControl2.Globe.ConnectServer(Utility.serverip, Utility.serverport, "", ""); //加载locaServer中的数据 //初始化TreeView - // 勾选实测图层 - foreach (TreeNode tn in layerTree.Nodes) - { - if (tn.Nodes.Count <= 0) continue; - if (tn.Text != "实测数据") continue; - tn.Checked = true; - foreach (TreeNode tnChild in tn.Nodes) - { - tnChild.Checked = true; - foreach (TreeNode tnGrandChild in tnChild.Nodes) - { - tnGrandChild.Checked = true; - } - } - } - } - private void doLoadDataForGlobalControl1() + initLayerTree(); + } + /// + /// 加载地球1、2的图层 + /// + private void doLoadDataForGlobalControl() { try { globeControl1.Globe.Layers.MoveDown(10000); //加载实测管线数据 - Utility.dataSource = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.DBServer.Trim() + "/" + Utility.dbdatabase.Trim(), "", "", Utility.userID, Utility.DBPassword); + Utility.dataSource = + globeControl1.Globe.DataManager.OpenOracleDataSource( + Utility.DBServer.Trim() + "/" + Utility.dbdatabase.Trim(), "", "", Utility.userID, + Utility.DBPassword); if (Utility.dataSource != null) { @@ -1160,7 +1194,9 @@ globeControl1.Globe.Layers.GetLayerByCaption("红线").Visible = false; //globleControl1中加载规划数据 - GSODataSource ghDS = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.ghdbip + "/" + Utility.ghdbname, "", "", Utility.ghdbuser, Utility.ghdbpwd); + GSODataSource ghDS = + globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.ghdbip + "/" + Utility.ghdbname, "", "", + Utility.ghdbuser, Utility.ghdbpwd); if (ghDS != null) { for (int j = 0; j < ghDS.DatasetCount; j++) @@ -1176,13 +1212,16 @@ } //globeControl1,globeControl2中加载施工数据 - GSODataSource sgDS = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.sgdbip + "/" + Utility.sgdbname, "", "", Utility.sgdbuser, Utility.sgdbpwd); + GSODataSource sgDS = + globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.sgdbip + "/" + Utility.sgdbname, "", "", + Utility.sgdbuser, Utility.sgdbpwd); if (sgDS != null) { for (int m = 0; m < sgDS.DatasetCount; m++) { GSODataset dataset = sgDS.GetDatasetAt(m); - if (dataset != null && !dataset.Caption.Contains("SH") && Utility.dictionaryNetLayerNameAndCaption.ContainsKey(dataset.Caption)) + if (dataset != null && !dataset.Caption.Contains("SH") && + Utility.dictionaryNetLayerNameAndCaption.ContainsKey(dataset.Caption)) { dataset.Caption = dataset.Name; globeControl1.Globe.Layers.Add(dataset); @@ -1196,12 +1235,12 @@ // LoadDataForGlobalControl ss = connectServer; // ss(); - + this.Invoke((EventHandler) delegate { connectServer(); }); - + } catch (Exception ex) @@ -1212,67 +1251,17 @@ private void initLayerTree() { + layerTree.Nodes.Clear(); //加载临时图层节点 layerManagerNode = new TreeNode(); layerManagerNode.ImageIndex = 0; layerManagerNode.SelectedImageIndex = 0; layerManagerNode.Checked = true; layerManagerNode.Text = "临时图层"; + layerManagerNode.Tag = layerTemp; layerTree.Nodes.Add(layerManagerNode); - XmlDocument doc = new XmlDocument(); - doc.Load(Utility.filename); - XmlNodeList xmlLayerNodes = doc.SelectNodes("//layer"); - - foreach (XmlNode xmlLayerNode in xmlLayerNodes) - { - - //TODO LIST:创建一级TreeNode(实测、规划、施工) - TreeNode nodelayer = new TreeNode(); - string layerName = xmlLayerNode.Attributes["label"].Value; - nodelayer.Text = layerName; - nodelayer.Checked = false; - layerTree.Nodes.Add(nodelayer); - - XmlNodeList xmlChildLayerNodes = xmlLayerNode.ChildNodes; - foreach (XmlNode xmlChildLayerNode in xmlChildLayerNodes) - { - //TODO LIST:创建二级TreeNode节点 - TreeNode secondLevelNode = new TreeNode(); - string layerType = xmlChildLayerNode.Attributes["label"].Value; - secondLevelNode.Text = layerType; - - if (xmlChildLayerNode.Attributes["type"] != null) - { //道路图层特殊处理 - string type = xmlChildLayerNode.Attributes["type"].Value; - secondLevelNode.Tag = type + "|" + layerType; - } - else - { - secondLevelNode.Tag = layerType; - } - secondLevelNode.Checked = false; - nodelayer.Nodes.Add(secondLevelNode); - - XmlNodeList xmlActitualLayerNodes = xmlChildLayerNode.ChildNodes; - - foreach (XmlNode xmlActitualLayerNode in xmlActitualLayerNodes) - { - //TODO LIST:创建三级图层节点 - TreeNode layerNode = new TreeNode(); - string actutallylayerType = xmlActitualLayerNode.Attributes["type"].Value; - string actutallylayerName = xmlActitualLayerNode.Attributes["layer"].Value; - string actutallyLabelName = xmlActitualLayerNode.Attributes["label"].Value; - - layerNode.Text = actutallyLabelName; - layerNode.Tag = layerType + "|" + actutallyLabelName; - layerNode.Checked = false; - secondLevelNode.Nodes.Add(layerNode); - } - - } - - } + TreeUtils.InitLayerTree(globeControl1, layerTree, null); } @@ -1298,7 +1287,8 @@ for (int i = 0; i < markerStrs.Length; i++) { if (!File.Exists(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd")) continue; - GSOLayer markerLayer = globeControl1.Globe.Layers.Add(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd"); + GSOLayer markerLayer = + globeControl1.Globe.Layers.Add(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd"); if (markerLayer == null) continue; TreeNode node1 = new TreeNode(); node1.Text = markerLayer.Caption; @@ -1312,9 +1302,11 @@ private void MainFrm_Load(object sender, EventArgs e) { + + layerTree.Nodes.Add("正在加载,请稍后……");//树状图加载在图层加载之后,故增加提示 initGlobalControl(); //initGlobalMap(); - initLayerTree(); +// initLayerTree(); initMarkerTree(); initLayout(); loadData(); @@ -1383,7 +1375,7 @@ tempnode.Checked = node.Checked ? feature.Visible : false; tempnode.Tag = feature; node.Nodes.Add(tempnode); - GSOFeatureFolder featureFolder = (GSOFeatureFolder)feature; + GSOFeatureFolder featureFolder = (GSOFeatureFolder) feature; VisitFeature3Ds(featureFolder.Features, tempnode); } else @@ -1444,7 +1436,7 @@ /// Boolean CheckDatasetGeoReference(GSODataset dataset, string strDataPath) { - + if (dataset.GeoReferenceType != EnumGeoReferenceType.Flat) return true; Boolean bSuccess = false; if (MessageBox.Show("数据没有空间参考信息,请设置空间参考信息!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) != @@ -1498,7 +1490,7 @@ dlg.Filter = "输出JPEG(*.jpg)|*.jpg|输出PNG(*.png)|*.png|输出BMP(*.bmp)|*.bmp|输出BMP(*.gif)|*.gif"; if (dlg.ShowDialog() == DialogResult.OK) { - string extension = Path.GetExtension(dlg.FileName);//扩展名 + string extension = Path.GetExtension(dlg.FileName); //扩展名 switch (extension) { case ".jpg": @@ -1520,6 +1512,7 @@ globeControl1.Globe.Action = EnumAction3D.ActionNull; globeControl1.Globe.MouseRoamingEnable = true; } + /// /// 定位正北正90度俯视 /// @@ -1548,7 +1541,6 @@ void globeControl1_HudControlMouseIntoEvent(object sender, HudControlMouseIntoEventArgs e) { - GSOHudButton btn = e.HudControl as GSOHudButton; tooltip1 = new ToolTip(); switch (e.HudControl.Name) { @@ -1573,163 +1565,46 @@ break; } } - /// - /// layerTree选中后事件处理 - /// - /// - /// + + #region wxl 重构树形结构代码 + private void layerTree_AfterCheck(object sender, TreeViewEventArgs e) { - if (e.Node.Tag != null) + if (e.Action != TreeViewAction.Unknown) { - if (e.Node.Tag.ToString().Contains("|")) - { - string nodeTag = e.Node.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(nodeTag); - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - if (e.Node.Tag is GSOFeature) - { - if (e.Node.Nodes.Count == 0) - { - GSOFeature feat = e.Node.Tag as GSOFeature; - feat.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - } - CheckControl(e); - } - /// - /// 树节点选中方法 - /// - /// - private void CheckControl(TreeViewEventArgs e) - { - if (e.Action == TreeViewAction.Unknown||e.Node == null || Convert.IsDBNull(e.Node)) return; - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - { - CheckAllChildNodes(e.Node, e.Node.Checked); - } - } - /// - /// 改变所有子节点的状态 - /// - /// - /// - private void CheckAllChildNodes(TreeNode pn, bool IsChecked) - { - foreach (TreeNode tn in pn.Nodes) - { - tn.Checked = IsChecked; - - if (tn.Nodes.Count > 0) - { - CheckAllChildNodes(tn, IsChecked); - } + TreeUtils.TreeNodeCheckedChange(globeControl1, e.Node); } } - //改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 - private void CheckParentNode(TreeNode curNode) - { - bool bChecked = false; - - if (curNode.Parent == null) return; - foreach (TreeNode node in curNode.Parent.Nodes) - { - if (node.Checked) - { - bChecked = true; - break; - } - } - - if (bChecked) - { - curNode.Parent.Checked = true; - CheckParentNode(curNode.Parent); - } - else - { - curNode.Parent.Checked = false; - CheckParentNode(curNode.Parent); - } - } - + #endregion private void layerTree_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (e.Button != MouseButtons.Right) return; layerTree.SelectedNode = e.Node; - if (e.Node.Tag == null) return; - if (e.Button == MouseButtons.Right && e.Node.Tag.ToString().Contains("|")) + if (e.Node.Tag == null || e.Node.Parent == null) return; //排除无图层节点和第一级节点 + + //来自locaserver的数据,直接返回就行了,目前只有一个180fd,暂时单独处理 + GSOLayer gsoLayer = e.Node.Tag as GSOLayer; + if (gsoLayer == null || gsoLayer.Caption.Equals(Utility.roadLayerName)) return; + if (e.Node.Parent.Text.Equals("临时图层") || e.Node.Parent.Text.Equals("我的地标")) { - - if (e.Node.Tag.ToString().Split('|')[0] == "locaserver") - { - - foreach (ToolStripItem item in layerNodeContexMenu.Items) - { - item.Visible = false; - } - return; - - } - - if (e.Node.Tag.ToString().Split('|')[0] == "new") - { - LayerEditableMenuItem.Enabled = true; - foreach (ToolStripItem item in layerNodeContexMenu.Items) - { - item.Visible = false; - } - //LayerSelectableMenuItem.Visible = true; - //LayerEditableMenuItem.Visible = true; - RemoveLayer.Visible = true; - RefreshLayerFeatureListMenuItem.Visible = true; - //SaveLayerMenuItem.Visible = true; - //LayerFlyMenuItem.Visible = true; - } - + //临时图层下的子节点应该展示的 + contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); + contextMenuStripDeleteLayerNode.Tag = e.Node; + } + else + { LayerSelectableMenuItem.Visible = true; LayerEditableMenuItem.Visible = true; SaveLayerMenuItem.Visible = true; LayerFlyMenuItem.Visible = true; 导出CADToolStripMenuItem1.Visible = true; - layerNodeContexMenu.Show(layerTree, e.X, e.Y); layerNodeContexMenu.Tag = e.Node; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(e.Node.Tag.ToString().Split('|')[1]); - if (layer != null) - { - LayerSelectableMenuItem.Checked = layer.Selectable; - LayerEditableMenuItem.Checked = layer.Editable; - } + LayerSelectableMenuItem.Checked = gsoLayer.Selectable; + LayerEditableMenuItem.Checked = gsoLayer.Editable; } - else - { - if (e.Node.Tag is GSOLayer && e.Node.Parent != null && e.Node.Parent.Text.Trim() == "临时图层") - { - contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); - contextMenuStripDeleteLayerNode.Tag = e.Node; - } - else if (e.Node.Tag is GSOFeature && e.Node.Parent != null && e.Node.Parent.Text.Trim() == "我的地标") - { - contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); - contextMenuStripDeleteLayerNode.Tag = e.Node; - } - } + } /// @@ -1740,75 +1615,61 @@ private void 删除ToolStripMenuItem2_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "临时图层") + if (node == null || node.Parent == null) return; + if (node.Parent.Text.Trim() == "临时图层") { - if (node.Tag is GSOLayer) - { - GSOLayer layer = node.Tag as GSOLayer; - - for (int i = globeControl1.Globe.Layers.Count - 1; i >= 0; i--) - { - if (globeControl1.Globe.Layers[i].Caption == layer.Caption) - { - globeControl1.Globe.Layers.Remove(globeControl1.Globe.Layers[i]); - } - } - - globeControl1.Globe.Refresh(); - - node.Remove(); - } - } - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "我的地标") + if (!(node.Tag is GSOLayer)) return; + GSOLayer layer = node.Tag as GSOLayer; + globeControl1.Globe.Layers.Remove(layer); + globeControl1.Globe.Refresh(); + node.Remove(); + }else if (node.Parent.Text.Trim() == "我的地标") { - if (node.Tag is GSOFeature) - { - GSOFeature f = node.Tag as GSOFeature; - f.Delete(); - globeControl1.Globe.Refresh(); - - node.Remove(); - } + if (!(node.Tag is GSOFeature)) return; + GSOFeature f = node.Tag as GSOFeature; + f.Delete(); + globeControl1.Globe.Refresh(); + node.Remove(); } + } private void 可编辑ToolStripMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "临时图层") - { - if (node.Tag is GSOLayer) - { - GSOLayer layer = node.Tag as GSOLayer; - - 可编辑ToolStripMenuItem.Checked = !可编辑ToolStripMenuItem.Checked; - layer.Editable = 可编辑ToolStripMenuItem.Checked; - } - } + if (node == null || + node.Parent == null || + node.Parent.Text.Trim() != "临时图层" || !(node.Tag is GSOLayer)) return; + GSOLayer layer = node.Tag as GSOLayer; + 可编辑ToolStripMenuItem.Checked = !可编辑ToolStripMenuItem.Checked; + layer.Editable = 可编辑ToolStripMenuItem.Checked; } private void 保存ToolStripMenuItem_Click(object sender, EventArgs e) { - //TreeNode node = layerNodeContexMenu.Tag as TreeNode; - TreeNode node = contextMenuStripDeleteLayerNode.Tag as TreeNode; - - Int32 nIndex = node.Index; - string layerCaption = node.Text;//.Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); +// TreeNode node = contextMenuStripDeleteLayerNode.Tag as TreeNode; + TreeNode node = layerTree.SelectedNode; + if (node == null||node.Tag==null) return; + GSOLayer layer = node.Tag as GSOLayer; + if (layer == null) return; layer.Dataset.Save(); } - + //TODO LIST: wxl? Tag更正 private void 定位ToolStripMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - - if (node == null) return; + if (node == null||node.Parent==null) return; if (node.Parent.Text.Trim() == "临时图层") { - GSOLayer lsLayer = globeControl1.Globe.Layers.GetLayerByCaption(node.Text); + GSOLayer lsLayer = node.Tag as GSOLayer; + if (lsLayer == null) + { + LogHelper.WriteLog(typeof(MainFrm),"要定位的临时图层不存在:"+node.Text); + return; + } double x = lsLayer.LatLonBounds.Center.X; double y = lsLayer.LatLonBounds.Center.Y; - if (x == 0 && y == 0) + if (x.Equals(0) && y.Equals(0)) { x = lsLayer.Bounds.Center.X; y = lsLayer.Bounds.Center.Y; @@ -1818,20 +1679,14 @@ } else { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); - + GSOLayer layer = node.Tag as GSOLayer; if (layer == null) return; - if (layer.Caption == "红线") + if (layer.Caption.Equals("红线")) { globeControl1.Globe.FlyToPosition(new GSOPoint3d(120.610963, 31.188121, 50), EnumAltitudeMode.Absolute, -4, 50, 1000); globeControl1.Globe.FlyToPointSpeed = 10000000; globeControl1.Globe.Action = EnumAction3D.SelectObject; - - GSOLayer redLayer = globeControl1.Globe.Layers.GetLayerByCaption("红线"); - if (redLayer != null) - { - redLayer.Visible = true; - } + layer.Visible = true; globeControl1.Refresh(); } else @@ -1842,55 +1697,28 @@ } } } - + //TODO LIST: wxl? Tag更正 private void layerTree_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) { - if (layerTree.SelectedNode == null) return; - if (layerTree.SelectedNode.Tag.ToString().Contains("|")) + TreeNode node = layerTree.SelectedNode; + if (node == null) return; + if (node.Tag is GSOLayer) { - string nodeTag = layerTree.SelectedNode.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(nodeTag); - if (layer != null) + GSOLayer layer = node.Tag as GSOLayer; + if (layer.GetAllFeatures().Length <= 0) return; + GSOFeature feature = layer.GetAt(0); + if (feature != null && feature.Geometry != null) { - if (layer.Caption == "红线") - { - globeControl1.Globe.FlyToPosition(new GSOPoint3d(120.610963, 31.188121, 50), EnumAltitudeMode.Absolute, -4, 50, 1000); - globeControl1.Globe.FlyToPointSpeed = 10000000; - globeControl1.Globe.Action = EnumAction3D.SelectObject; - - GSOLayer redLayer = globeControl1.Globe.Layers.GetLayerByCaption("红线"); - if (redLayer != null) - { - redLayer.Visible = true; - } - globeControl1.Refresh(); - } - else - { - double x = layer.LatLonBounds.Center.X; - double y = layer.LatLonBounds.Center.Y; - globeControl1.Globe.FlyToPosition(new GSOPoint3d(x, y, 0), EnumAltitudeMode.Absolute); - } + globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute);//, 0, 0, 1000); + } + else + { + globeControl1.Globe.FlyToFeature(feature); } } - if (layerTree.SelectedNode.Tag is GSOLayer) + else if (node.Tag is GSOFeature) { - GSOLayer layer = layerTree.SelectedNode.Tag as GSOLayer; - if (layer.GetAllFeatures().Length > 0) - { - GSOFeature feature = layer.GetAt(0); - if (feature != null && feature.Geometry != null) - { - globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute);//, 0, 0, 1000); - } - else - { - globeControl1.Globe.FlyToFeature(feature); - } - } - } else if (layerTree.SelectedNode.Tag is GSOFeature) - { - GSOFeature feature = layerTree.SelectedNode.Tag as GSOFeature; + GSOFeature feature = node.Tag as GSOFeature; if (feature.Geometry != null) { globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute, 0, 0, 10); @@ -2231,15 +2059,7 @@ int idx = dataGridViewX2.Rows.Add(); dataGridViewX2.Rows[idx].Tag = feat; dataGridViewX2.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX2.Rows[idx].Cells[1].Value = featureName; } } @@ -2261,15 +2081,7 @@ int idx = dataGridViewLineList.Rows.Add(); dataGridViewLineList.Rows[idx].Tag = feat; dataGridViewLineList.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewLineList.Rows[idx].Cells[1].Value = featureName; } } @@ -2291,15 +2103,7 @@ int idx = dataGridViewX8.Rows.Add(); dataGridViewX8.Rows[idx].Tag = feat; dataGridViewX8.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX8.Rows[idx].Cells[1].Value = featureName; } } @@ -2321,15 +2125,7 @@ int idx = dataGridViewX4.Rows.Add(); dataGridViewX4.Rows[idx].Tag = feat; dataGridViewX4.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX4.Rows[idx].Cells[1].Value = featureName; } @@ -2353,15 +2149,7 @@ int idx = dataGridViewX6.Rows.Add(); dataGridViewX6.Rows[idx].Tag = feat; dataGridViewX6.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX6.Rows[idx].Cells[1].Value = featureName; } } @@ -2736,77 +2524,104 @@ return str; } - //string filename = Utility.filename; - //List g1layername = new List(); - /// /// 获取目标图层 /// /// +// private GSOLayer TreeNodeFeatureLayer() +// { +// TreeNode featureAddPipeFitTreenode = GetDestLayerFeatureAddTreeNode(); +// GSOLayer featureAddLayer = globeControl1.Globe.Layers.GetLayerByCaption(featureAddPipeFitTreenode.Tag.ToString().Split('|')[1]); +// +// return featureAddLayer; +// } + //TODO LIST: wxl11? 待更正,Node的Tag现在都已经统一为gsolayer对象了 +// private TreeNode GetDestLayerFeatureAddTreeNode() +// { +// for (int i = 0; i < layerTree.Nodes.Count; i++) +// { +// TreeNode tempNode = layerTree.Nodes[i]; +// for (int j = 0; j < tempNode.Nodes.Count; j++) +// { +// TreeNode tempChildNode = tempNode.Nodes[j]; +// if (tempChildNode.Tag.ToString().Split('|').Length > 1) // Config配置文件配置的图层 +// {//本层节点Tag记录layer +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode; +// } +// } +// else //临时添加的本地图层 +// {//子层节点的Tag记录layer +// for (int m = 0; m < tempChildNode.Nodes.Count; m++) +// { +// TreeNode tempChildNode1 = tempChildNode.Nodes[m]; +// if (tempChildNode1.Tag.ToString().Split('|').Length > 1) +// { +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode1.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode1.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode1; +// } +// } +// else +// { +// for (int n = 0; n < tempChildNode1.Nodes.Count; n++) +// { +// TreeNode tempChildNode2 = tempChildNode1.Nodes[n]; +// if (tempChildNode2.Tag.ToString().Split('|').Length <= 1) continue; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode2.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode2.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode2; +// } +// } +// } +// } +// } +// } +// } +// return null; +// } private GSOLayer TreeNodeFeatureLayer() { TreeNode featureAddPipeFitTreenode = GetDestLayerFeatureAddTreeNode(); - GSOLayer featureAddLayer = globeControl1.Globe.Layers.GetLayerByCaption(featureAddPipeFitTreenode.Tag.ToString().Split('|')[1]); - - return featureAddLayer != null ? featureAddLayer : null; + if (featureAddPipeFitTreenode == null) return null; + GSOLayer featureAddLayer = featureAddPipeFitTreenode.Tag as GSOLayer; + return featureAddLayer; } - + //遍历最深三层找到目标node. private TreeNode GetDestLayerFeatureAddTreeNode() { - for (int i = 0; i < layerTree.Nodes.Count; i++) + + foreach (TreeNode layerTreeNode in layerTree.Nodes) { - TreeNode tempNode = layerTree.Nodes[i]; - for (int j = 0; j < tempNode.Nodes.Count; j++) + if (layerTreeNode.Tag == null && layerTreeNode.Nodes.Count > 0) { - TreeNode tempChildNode = tempNode.Nodes[j]; - if (tempChildNode.Tag.ToString().Split('|').Length > 1) // Config配置文件配置的图层 + foreach (TreeNode node in layerTreeNode.Nodes) { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode; - } + GSOLayer gsoLayer = node.Tag as GSOLayer; + if (gsoLayer != null && gsoLayer.IsDestLayerFeatureAdd()) return node; + } - else //临时添加的本地图层 - { - for (int m = 0; m < tempChildNode.Nodes.Count; m++) - { - TreeNode tempChildNode1 = tempChildNode.Nodes[m]; - if (tempChildNode1.Tag.ToString().Split('|').Length > 1) - { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode1.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode1.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode1; - } - } - else - { - for (int n = 0; n < tempChildNode1.Nodes.Count; n++) - { - TreeNode tempChildNode2 = tempChildNode1.Nodes[n]; - if (tempChildNode2.Tag.ToString().Split('|').Length <= 1) continue; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode2.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode2.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode2; - } - } - } - } - } + } + else + { + GSOLayer gsoLayer = layerTreeNode.Tag as GSOLayer; + if (gsoLayer != null && gsoLayer.IsDestLayerFeatureAdd()) return layerTreeNode; } } return null; @@ -3221,6 +3036,7 @@ } } } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 目标图层 菜单 /// @@ -3228,14 +3044,15 @@ /// private void FeatureAddLayerMenuItem_Click(object sender, EventArgs e) { - if (!FeatureAddLayerMenuItem.Checked) - { - TreeNode node = layerNodeContexMenu.Tag as TreeNode; - FeatureAddLayerMenuItem.Checked = true; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); - globeControl1.Globe.DestLayerFeatureAdd = layer; - } + if (FeatureAddLayerMenuItem.Checked) return; + TreeNode node = layerNodeContexMenu.Tag as TreeNode; + FeatureAddLayerMenuItem.Checked = true; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; + globeControl1.Globe.DestLayerFeatureAdd = layer; } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 可选择 菜单 /// @@ -3244,11 +3061,13 @@ private void LayerSelectableMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - Int32 nIndex = node.Index; - GSOLayer layer = globeControl1.Globe.Layers[nIndex]; +// GSOLayer layer = globeControl1.Globe.Layers[nIndex]; + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; LayerSelectableMenuItem.Checked = !LayerSelectableMenuItem.Checked; - layer.Selectable = LayerSelectableMenuItem.Checked; + if (layer != null) layer.Selectable = LayerSelectableMenuItem.Checked; } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 可编辑 菜单 /// @@ -3257,23 +3076,27 @@ private void LayerEditableMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; LayerEditableMenuItem.Checked = !LayerEditableMenuItem.Checked; - layer.Editable = LayerEditableMenuItem.Checked; + if (layer != null) layer.Editable = LayerEditableMenuItem.Checked; } /// /// 图层目录树 右键菜单中的 保存 菜单 /// /// /// + //TODO LIST: wxl? Tag更正 private void SaveLayerMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - Int32 nIndex = node.Index; - string layerCaption = node.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); - layer.Dataset.Save(); +// string layerCaption = node.Tag.ToString().Split('|')[1]; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; + if (layer != null) layer.Dataset.Save(); } #region wxl feature的公共方法 @@ -3455,7 +3278,6 @@ return; GSOFeatureLayer flayer = layer as GSOFeatureLayer; - GSOFeatureDataset fdataset = flayer.Dataset as GSOFeatureDataset; GSOFeatures feats = flayer.GetAllFeatures(); for (int i = 0; i < feats.Length; i++) { @@ -3480,7 +3302,6 @@ return; GSOFeatureLayer flayer = layer as GSOFeatureLayer; - GSOFeatureDataset fdataset = flayer.Dataset as GSOFeatureDataset; GSOFeatures feats = flayer.GetAllFeatures(); for (int i = 0; i < feats.Length; i++) { @@ -5508,7 +5329,6 @@ private void addNodeToLayerManagerNode(GSOLayer layer) { if (layer == null) return; - GSODataset dataset = layer.Dataset; CheckDatasetGeoReference(layer.Dataset, ""); TreeNode node = new TreeNode(); @@ -5527,43 +5347,24 @@ /// /// /// - public int getLabelName(GSOLayer layer) - { - int nid = -1; - if (layer.GetAllFeatures().Length > 0) - { - string id = layer.GetAllFeatures()[layer.GetAllFeatures().Length - 1].Name; +// public int getLabelName(GSOLayer layer) +// { +// int nid = -1; +// if (layer.GetAllFeatures().Length > 0) +// { +// string id = layer.GetAllFeatures()[layer.GetAllFeatures().Length - 1].Name; +// +// int.TryParse(id, out nid); +// } +// else +// { +// nid = 0; +// } +// return nid; +// } - int.TryParse(id, out nid); - } - else - { - nid = 0; - } - return nid; - } /// - /// 判断选中的对象是否为管线 - /// - /// 被选中管线 - /// 返回一根线 - private GSOFeature IsPipeLineOfSelectedObj() - { - GSOFeature resFeature = null; - if (globeControl1.Globe.SelObjectCount < 1) return null; - GSOLayer resLayer = null; - globeControl1.Globe.GetSelectObject(0, out resFeature, out resLayer); - if (resFeature == null) return null; - - GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; - if (line1 == null) return null; - GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; - if (pipeStyle1 == null) return null; - - return resFeature; - } - /// /// 图层节点树中 节点 右键单击事件处理 /// /// @@ -5615,13 +5416,15 @@ { TreeNode node = contextMenuStrip2.Tag as TreeNode; TreeNode parentNode = node.Parent; - Int32 nIndex = node.Index; if (parentNode.Text == "标注管理" || parentNode.Text == "传感器管理") { RefreshTreeNodeLayerFeatureList(node); } } + + #region wxl? VisitFeature3Ds的作用,重构后,是否对其有影响 + /// /// 给指定的图层节点添加代表feature对象的子节点 /// @@ -5636,6 +5439,9 @@ VisitFeature3Ds(layer.GetAllFeatures(), layerTreeNode); } } + + #endregion + /// /// 标注管理、传感器管理 图层目录树的右键菜单中的 移除所有 菜单 /// @@ -5660,53 +5466,11 @@ { if (e.Action != TreeViewAction.Unknown) { - CheckTreeNode(e.Node, e.Node.Checked); + //wxl优化标注管理树形结构 + TreeUtils.TreeNodeCheckedChange(globeControl1,e.Node); } } - /// - /// 改变指定节点对应的复选框的选中状态 - /// - /// - /// - private void CheckTreeNode(TreeNode node, Boolean bChecked) - { - CheckChildTreeNode(node, bChecked); - globeControl1.Globe.Refresh(); - } - /// - /// 改变指定节点的子节点对应的复选框的选中状态 - /// - /// - /// - private void CheckChildTreeNode(TreeNode node, Boolean bChecked) - { - if (node == null) - return; - if (node.Tag != null) - { - if (node.Tag.GetType() == typeof(GSOFeatureFolder) || node.Tag.GetType() == typeof(GSOFeature)) - ((GSOFeature)node.Tag).SetVisibleDirectly(bChecked); - else - { - GSOLayer curLayer = node.Tag as GSOLayer; - GSOTerrain curTerrain = node.Tag as GSOTerrain; - if (curLayer != null) - { - curLayer.Visible = bChecked; - } - else if (curTerrain != null) - { - curTerrain.Visible = bChecked; - } - } - } - // 递归处理子节点 - for (int i = 0; i < node.Nodes.Count; i++) - { - node.Nodes[i].Checked = bChecked; - CheckChildTreeNode(node.Nodes[i], bChecked); - } - } + /// /// 标注管理、传感器管理 目录树中的feature节点的右键菜单中的 删除 菜单 /// @@ -5984,7 +5748,7 @@ frmModify = new FrmMnModify(globeControl1, shlayername, shresultLists); - if (boolfrmModify != false) return; + if (boolfrmModify) return; frmModify.Owner = this; frmModify.Location = new Point(Width - frmModify.Width - 10, Height - frmModify.Height - 50); frmModify.Show(); @@ -6261,16 +6025,15 @@ globeControl1.Globe.ClearMeasure(); layerTemp.RemoveAllFeature(); - layerTemp2.RemoveAllFeature(); buttonItemLS5.Checked = false; dataGridViewX1.DataSource = null; panelOfTable.Visible = false; globeControl1.Globe.MemoryLayer.RemoveAllFeature(); + globeControl2.Globe.MemoryLayer.RemoveAllFeature(); globeControl1.Globe.ClearAnalysis(); - // 清除净距分析结果 buttonX2_Click(null, null); buttonX8_Click(null, null); @@ -6527,8 +6290,8 @@ GSOFeatures selectFeatures = new GSOFeatures(); for (int i = 0; i < globeControl1.Globe.SelObjectCount; i++) { - GSOFeature feature = null; - GSOLayer layer = null; + GSOFeature feature; + GSOLayer layer; globeControl1.Globe.GetSelectObject(i, out feature, out layer); if (feature != null && feature.Geometry != null && feature.Geometry.Type == EnumGeometryType.GeoPolyline3D) { @@ -6536,11 +6299,9 @@ } } List feats = SectionAnalysisTool.ZDMAnalysis(selectFeatures); - if (feats != null && feats.Count >= 1) - { - FrmProfileAnalysis frm = new FrmProfileAnalysis(globeControl1, feats); - frm.Show(this); - } + if (feats == null || feats.Count < 1) return; + FrmProfileAnalysis frm = new FrmProfileAnalysis(globeControl1, feats); + frm.Show(this); } /// /// 道路断面分析 @@ -7057,14 +6818,14 @@ /// private void buttonItemSZ1_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7075,17 +6836,17 @@ /// /// 管径标注 /// - GSOFeature radiusMarkerFeature; +// GSOFeature radiusMarkerFeature; private void buttonItemBZ2_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine==null||selLine[0].Count <= 1)//wxl增加为空判断,下面方法同理 + if (selLine == null || selLine[0].Count <= 1) //wxl增加为空判断,下面方法同理 { return; } @@ -7100,14 +6861,14 @@ /// private void buttonItemBZ3_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null||selLine[0].Count <= 1) { return; } @@ -7123,14 +6884,14 @@ /// private void buttonItemBZ4_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7140,7 +6901,7 @@ /// /// 距离标注 /// - bool distanceMarker; +// bool distanceMarker; private void buttonItemBZ5_Click(object sender, EventArgs e) { //日志记录 @@ -7148,7 +6909,7 @@ globeControl1.Globe.Action = EnumAction3D.TrackPolyline; //globeControl1.Globe.DistanceRuler.MeasureMode = EnumDistanceMeasureMode.HVSLineMeasure; - distanceMarker = true; +// distanceMarker = true; } /// /// 自定义标注 @@ -7187,14 +6948,14 @@ /// private void buttonItemBZ8_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7775,11 +7536,9 @@ if (frm.ShowDialog() == DialogResult.OK) { GSOLayer featureAddLayer = TreeNodeFeatureLayer(); - if (featureAddLayer != null) - { - FrmAddInstrument dlg = new FrmAddInstrument(globeControl1, featureAddLayer); - dlg.Show(this); - } + if (featureAddLayer == null) return; + FrmAddInstrument dlg = new FrmAddInstrument(globeControl1, featureAddLayer); + dlg.Show(this); } } /// @@ -7822,11 +7581,9 @@ frm.citySevenLineType); globeControl1.Tag = citySevenLine; GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(frm.citySevenLineType); - if (layer != null) - { - globeControl1.Globe.DestLayerFeatureAdd = layer; - layer.Editable = true; - } + if (layer == null) return; + globeControl1.Globe.DestLayerFeatureAdd = layer; + layer.Editable = true; } } #endregion @@ -7986,44 +7743,45 @@ LogManager.saveLog(Utility.userName, buttonItemBJ10_2.Text); List listVectorNames = new List(); - for (int i = 0; i < Utility.m_PipelineLayerNames.Count; i++) + foreach (string pipeline in Utility.m_PipelineLayerNames) { - if (!listVectorNames.Contains(Utility.m_PipelineLayerNames[i])) + if (!listVectorNames.Contains(pipeline)) { - listVectorNames.Add(Utility.m_PipelineLayerNames[i]); + listVectorNames.Add(pipeline); } } - for (int i = 0; i < Utility.valueLayerNames.Count; i++) + foreach (string valve in Utility.valueLayerNames) { - if (!listVectorNames.Contains(Utility.valueLayerNames[i])) + if (!listVectorNames.Contains(valve)) { - listVectorNames.Add(Utility.valueLayerNames[i]); + listVectorNames.Add(valve); } } - for (int i = 0; i < Utility.workwellLayerNames.Count; i++) + foreach (string workwell in Utility.workwellLayerNames) { - if (!listVectorNames.Contains(Utility.workwellLayerNames[i])) + if (!listVectorNames.Contains(workwell)) { - listVectorNames.Add(Utility.workwellLayerNames[i]); + listVectorNames.Add(workwell); } } - for (int i = 0; i < Utility.instrumenLayerNames.Count; i++) + foreach (string instrument in Utility.instrumenLayerNames) { - if (!listVectorNames.Contains(Utility.instrumenLayerNames[i])) + if (!listVectorNames.Contains(instrument)) { - listVectorNames.Add(Utility.instrumenLayerNames[i]); + listVectorNames.Add(instrument); } } - for (int i = 0; i < Utility.pipefittingLayerNames.Count; i++) + foreach (string pipefitting in Utility.pipefittingLayerNames) { - if (!listVectorNames.Contains(Utility.pipefittingLayerNames[i])) + if (!listVectorNames.Contains(pipefitting)) { - listVectorNames.Add(Utility.pipefittingLayerNames[i]); + listVectorNames.Add(pipefitting); } } FrmExportVector frm = new FrmExportVector(globeControl1, listVectorNames); frm.ShowDialog(); } + /// /// 删除模型 /// @@ -8032,27 +7790,25 @@ private void buttonItemBJ13_Click(object sender, EventArgs e) { LogManager.saveLog(Utility.userName, buttonItemBJ13.Text); - if (globeControl1.Globe.SelObjectCount > 0) - { - for (int i = 0; i < globeControl1.Globe.SelObjectCount; i++) - { - GSOFeature f = null; - GSOLayer layer = null; - globeControl1.Globe.GetSelectObject(i, out f, out layer); - if (f == null) continue; - f.Delete(); - if (layer != null) - globeControl1.Globe.AddToEditHistroy(layer, f, EnumEditType.Delete); - globeControl1.Refresh(); - - } - MessageBox.Show("删除成功!", "提示"); - } - else + var selObjCount = globeControl1.Globe.SelObjectCount; + if (selObjCount == 0) { MessageBox.Show("请选中要删除的模型!", "提示"); + return; } + for (int i = 0; i < selObjCount; i++) + { + GSOFeature f; + GSOLayer layer; + globeControl1.Globe.GetSelectObject(i, out f, out layer); + if (f == null) continue; + f.Delete(); + if (layer != null) + globeControl1.Globe.AddToEditHistroy(layer, f, EnumEditType.Delete); + globeControl1.Refresh(); + } + MessageBox.Show("删除成功!", "提示"); globeControl1.Globe.Action = EnumAction3D.ActionNull; } @@ -8118,6 +7874,7 @@ toolStripNumbers.Text = "红线审核 |共有:" + table.Rows.Count + "条"; toolStripDropDownButton3.Visible = true; } + /// /// 主窗体 下方的工具条中的 导出.xls文件 按钮事件处理 /// @@ -8127,24 +7884,28 @@ { if (dataGridViewX1.Rows.Count != 0) { - string strSaveFile = string.Empty; - SaveFileDialog savefiledialog = new SaveFileDialog(); - savefiledialog.Filter = "Excel文件|*.xls,*.xlsx"; - savefiledialog.AddExtension = true; - savefiledialog.FileName = "红线审核"; - if (savefiledialog.ShowDialog() == DialogResult.OK) - strSaveFile = savefiledialog.FileName; - else return; - - ExpEXCEL.ExpToExcel(dataGridViewX1, strSaveFile, "红线审核", lineStruct, featsList); - MessageBox.Show("导出成功!"); - } - else - { MessageBox.Show("表格内容为空!", "提示"); + return; } + string strSaveFile; + SaveFileDialog savefiledialog = new SaveFileDialog(); + savefiledialog.Filter = "Excel文件|*.xls,*.xlsx"; + savefiledialog.AddExtension = true; + savefiledialog.FileName = "红线审核"; + if (savefiledialog.ShowDialog() == DialogResult.OK) + strSaveFile = savefiledialog.FileName; + else return; + + ExpEXCEL.ExpToExcel(dataGridViewX1, strSaveFile, "红线审核", lineStruct, featsList); + MessageBox.Show("导出成功!"); + } + /// + /// 双屏对比的地面透明度设置 + /// + /// + /// private void sliderItem2_ValueChanged(object sender, EventArgs e) { LogManager.saveLog(Utility.userName, sliderItem2.Text); @@ -8155,7 +7916,7 @@ { layer.Opaque = 100 - sliderItem2.Value; } - layer = globeControl2.Globe.Layers.GetLayerByCaption("180fd");//("180fd"); + layer = globeControl2.Globe.Layers.GetLayerByCaption(Utility.roadLayerName);//("180fd"); if (layer != null) { layer.Opaque = 100 - sliderItem2.Value; @@ -8554,7 +8315,7 @@ LogManager.saveLog(Utility.userName, buttonItem8.Text); int width = Width; - FrmCompareFeature.ShowForm(globeControl1, globeControl2, layerTemp, layerTemp2, width); + FrmCompareFeature.ShowForm(globeControl1, globeControl2, width); } /// /// 红线审核导出图片 @@ -8690,7 +8451,6 @@ private void btn_role_resc_Click(object sender, EventArgs e) { - LogManager.saveLog(Utility.userName, btn_role_resc.Text); if (FrmRoleRescManager.IS_OPEN) return; @@ -8708,7 +8468,8 @@ frm.ShowDialog(); } } -//文档管理 操作 + + //文档管理 操作 private void btn_document_info_Click(object sender, EventArgs e) { @@ -8919,11 +8680,9 @@ } private void pictureBox1_Paint(object sender, PaintEventArgs e) - { - int Width = this.Width; + { string welcomeUser = "欢迎您:" + Utility.userName; - Graphics g = e.Graphics; - g.DrawString(welcomeUser, new Font("宋体", 12), new SolidBrush(Color.Black), Width - 180, 50); + e.Graphics.DrawString(welcomeUser, new Font("宋体", 12), new SolidBrush(Color.Black), Width - 180, 50); } } diff --git a/MainFrm.designer.cs b/MainFrm.designer.cs index a9b8c6f..5d74670 100644 --- a/MainFrm.designer.cs +++ b/MainFrm.designer.cs @@ -244,42 +244,6 @@ this.保存ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.定位ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.ribbonControl1 = new DevComponents.DotNetBar.RibbonControl(); - this.ribbonPanel6 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar6 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItemSPSZ = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem8 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemLocation = new DevComponents.DotNetBar.ButtonItem(); - this.sliderItem2 = new DevComponents.DotNetBar.SliderItem(); - this.buttonItemGBJC = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonPanel4 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar1 = new DevComponents.DotNetBar.RibbonBar(); - this.btn_document_info = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonPanel12 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar18 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItem133 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem132 = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonBar13 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItem127 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem128 = new DevComponents.DotNetBar.ButtonItem(); - this.sliderItem1 = new DevComponents.DotNetBar.SliderItem(); - this.buttonItem134 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem130 = new DevComponents.DotNetBar.ButtonItem(); - this.btn_check_history = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonPanel5 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar2 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItemHX1 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemHX2 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemDCTP = new DevComponents.DotNetBar.ButtonItem(); - this.sliderItem3 = new DevComponents.DotNetBar.SliderItem(); - this.ribbonPanel2 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar3 = new DevComponents.DotNetBar.RibbonBar(); - this.btn_user_info = new DevComponents.DotNetBar.ButtonItem(); - this.btn_role_info = new DevComponents.DotNetBar.ButtonItem(); - this.btn_resc_info = new DevComponents.DotNetBar.ButtonItem(); - this.btn_role_resc = new DevComponents.DotNetBar.ButtonItem(); - this.btn_user_role = new DevComponents.DotNetBar.ButtonItem(); - this.btn_password_edit = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemPasswordReset = new DevComponents.DotNetBar.ButtonItem(); this.ribbonPanel15 = new DevComponents.DotNetBar.RibbonPanel(); this.ribbonBar20 = new DevComponents.DotNetBar.RibbonBar(); this.buttonItemSH = new DevComponents.DotNetBar.ButtonItem(); @@ -448,6 +412,42 @@ this.buttonItemBZ9 = new DevComponents.DotNetBar.ButtonItem(); this.buttonItemBZ10 = new DevComponents.DotNetBar.ButtonItem(); this.buttonItemBZ11 = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel6 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar6 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItemSPSZ = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem8 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemLocation = new DevComponents.DotNetBar.ButtonItem(); + this.sliderItem2 = new DevComponents.DotNetBar.SliderItem(); + this.buttonItemGBJC = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel4 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar1 = new DevComponents.DotNetBar.RibbonBar(); + this.btn_document_info = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel12 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar18 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItem133 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem132 = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonBar13 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItem127 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem128 = new DevComponents.DotNetBar.ButtonItem(); + this.sliderItem1 = new DevComponents.DotNetBar.SliderItem(); + this.buttonItem134 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem130 = new DevComponents.DotNetBar.ButtonItem(); + this.btn_check_history = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel5 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar2 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItemHX1 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemHX2 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemDCTP = new DevComponents.DotNetBar.ButtonItem(); + this.sliderItem3 = new DevComponents.DotNetBar.SliderItem(); + this.ribbonPanel2 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar3 = new DevComponents.DotNetBar.RibbonBar(); + this.btn_user_info = new DevComponents.DotNetBar.ButtonItem(); + this.btn_role_info = new DevComponents.DotNetBar.ButtonItem(); + this.btn_resc_info = new DevComponents.DotNetBar.ButtonItem(); + this.btn_role_resc = new DevComponents.DotNetBar.ButtonItem(); + this.btn_user_role = new DevComponents.DotNetBar.ButtonItem(); + this.btn_password_edit = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemPasswordReset = new DevComponents.DotNetBar.ButtonItem(); this.ribbonPanel1 = new DevComponents.DotNetBar.RibbonPanel(); this.ribbonBar21 = new DevComponents.DotNetBar.RibbonBar(); this.buttonItem87 = new DevComponents.DotNetBar.ButtonItem(); @@ -652,12 +652,12 @@ this.contextMenuStrip3.SuspendLayout(); this.contextMenuStripDeleteLayerNode.SuspendLayout(); this.ribbonControl1.SuspendLayout(); + this.ribbonPanel15.SuspendLayout(); this.ribbonPanel6.SuspendLayout(); this.ribbonPanel4.SuspendLayout(); this.ribbonPanel12.SuspendLayout(); this.ribbonPanel5.SuspendLayout(); this.ribbonPanel2.SuspendLayout(); - this.ribbonPanel15.SuspendLayout(); this.ribbonPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); this.panelOfTable.SuspendLayout(); @@ -2283,12 +2283,12 @@ // this.ribbonControl1.BackgroundStyle.Class = ""; this.ribbonControl1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonControl1.Controls.Add(this.ribbonPanel15); + this.ribbonControl1.Controls.Add(this.ribbonPanel2); this.ribbonControl1.Controls.Add(this.ribbonPanel6); this.ribbonControl1.Controls.Add(this.ribbonPanel4); this.ribbonControl1.Controls.Add(this.ribbonPanel12); this.ribbonControl1.Controls.Add(this.ribbonPanel5); - this.ribbonControl1.Controls.Add(this.ribbonPanel2); - this.ribbonControl1.Controls.Add(this.ribbonPanel15); this.ribbonControl1.Controls.Add(this.ribbonPanel1); this.ribbonControl1.Dock = System.Windows.Forms.DockStyle.Top; this.ribbonControl1.ImeMode = System.Windows.Forms.ImeMode.NoControl; @@ -2331,595 +2331,6 @@ this.ribbonControl1.Text = "ribbonControl1"; this.ribbonControl1.UseCustomizeDialog = false; // - // ribbonPanel6 - // - this.ribbonPanel6.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel6.Controls.Add(this.ribbonBar6); - this.ribbonPanel6.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel6.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel6.Name = "ribbonPanel6"; - this.ribbonPanel6.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel6.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel6.Style.Class = ""; - this.ribbonPanel6.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel6.StyleMouseDown.Class = ""; - this.ribbonPanel6.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel6.StyleMouseOver.Class = ""; - this.ribbonPanel6.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel6.TabIndex = 38; - // - // ribbonBar6 - // - this.ribbonBar6.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar6.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar6.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar6.BackgroundStyle.Class = ""; - this.ribbonBar6.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar6.ContainerControlProcessDialogKey = true; - this.ribbonBar6.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar6.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItemSPSZ, - this.buttonItem8, - this.buttonItemLocation, - this.sliderItem2, - this.buttonItemGBJC}); - this.ribbonBar6.Location = new System.Drawing.Point(3, 0); - this.ribbonBar6.Name = "ribbonBar6"; - this.ribbonBar6.Size = new System.Drawing.Size(427, 59); - this.ribbonBar6.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar6.TabIndex = 0; - // - // - // - this.ribbonBar6.TitleStyle.Class = ""; - this.ribbonBar6.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar6.TitleStyleMouseOver.Class = ""; - this.ribbonBar6.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar6.TitleVisible = false; - // - // buttonItemSPSZ - // - this.buttonItemSPSZ.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemSPSZ.Image"))); - this.buttonItemSPSZ.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemSPSZ.Name = "buttonItemSPSZ"; - this.buttonItemSPSZ.SubItemsExpandWidth = 14; - this.buttonItemSPSZ.Text = "双屏设置"; - this.buttonItemSPSZ.Click += new System.EventHandler(this.buttonItemSPSZ_Click); - // - // buttonItem8 - // - this.buttonItem8.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem8.Image"))); - this.buttonItem8.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem8.Name = "buttonItem8"; - this.buttonItem8.SubItemsExpandWidth = 14; - this.buttonItem8.Text = "双屏分析"; - this.buttonItem8.Click += new System.EventHandler(this.buttonItem8_Click); - // - // buttonItemLocation - // - this.buttonItemLocation.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemLocation.Image"))); - this.buttonItemLocation.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemLocation.Name = "buttonItemLocation"; - this.buttonItemLocation.SubItemsExpandWidth = 14; - this.buttonItemLocation.Text = "快速定位"; - this.buttonItemLocation.Click += new System.EventHandler(this.buttonItemLocation_Click); - // - // sliderItem2 - // - this.sliderItem2.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; - this.sliderItem2.LabelWidth = 50; - this.sliderItem2.Name = "sliderItem2"; - this.sliderItem2.Text = "地面透明度"; - this.sliderItem2.TextColor = System.Drawing.Color.Black; - this.sliderItem2.Value = 0; - this.sliderItem2.ValueChanged += new System.EventHandler(this.sliderItem2_ValueChanged); - // - // buttonItemGBJC - // - this.buttonItemGBJC.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemGBJC.Image"))); - this.buttonItemGBJC.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemGBJC.Name = "buttonItemGBJC"; - this.buttonItemGBJC.SubItemsExpandWidth = 14; - this.buttonItemGBJC.Text = "国标检测"; - this.buttonItemGBJC.Click += new System.EventHandler(this.buttonItemGBJC_Click); - // - // ribbonPanel4 - // - this.ribbonPanel4.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel4.Controls.Add(this.ribbonBar1); - this.ribbonPanel4.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel4.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel4.Name = "ribbonPanel4"; - this.ribbonPanel4.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel4.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel4.Style.Class = ""; - this.ribbonPanel4.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel4.StyleMouseDown.Class = ""; - this.ribbonPanel4.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel4.StyleMouseOver.Class = ""; - this.ribbonPanel4.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel4.TabIndex = 36; - this.ribbonPanel4.Visible = false; - // - // ribbonBar1 - // - this.ribbonBar1.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar1.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar1.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar1.BackgroundStyle.Class = ""; - this.ribbonBar1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar1.ContainerControlProcessDialogKey = true; - this.ribbonBar1.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar1.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.btn_document_info}); - this.ribbonBar1.Location = new System.Drawing.Point(3, 0); - this.ribbonBar1.Name = "ribbonBar1"; - this.ribbonBar1.Size = new System.Drawing.Size(88, 59); - this.ribbonBar1.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar1.TabIndex = 0; - // - // - // - this.ribbonBar1.TitleStyle.Class = ""; - this.ribbonBar1.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar1.TitleStyleMouseOver.Class = ""; - this.ribbonBar1.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar1.TitleVisible = false; - // - // btn_document_info - // - this.btn_document_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_document_info.Image"))); - this.btn_document_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_document_info.Name = "btn_document_info"; - this.btn_document_info.SubItemsExpandWidth = 14; - this.btn_document_info.Text = "文档管理"; - this.btn_document_info.Click += new System.EventHandler(this.btn_document_info_Click); - // - // ribbonPanel12 - // - this.ribbonPanel12.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel12.Controls.Add(this.ribbonBar18); - this.ribbonPanel12.Controls.Add(this.ribbonBar13); - this.ribbonPanel12.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel12.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel12.Name = "ribbonPanel12"; - this.ribbonPanel12.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel12.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel12.Style.Class = ""; - this.ribbonPanel12.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel12.StyleMouseDown.Class = ""; - this.ribbonPanel12.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel12.StyleMouseOver.Class = ""; - this.ribbonPanel12.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel12.TabIndex = 34; - this.ribbonPanel12.Visible = false; - // - // ribbonBar18 - // - this.ribbonBar18.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar18.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar18.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar18.BackgroundStyle.Class = ""; - this.ribbonBar18.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar18.ContainerControlProcessDialogKey = true; - this.ribbonBar18.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar18.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItem133, - this.buttonItem132}); - this.ribbonBar18.Location = new System.Drawing.Point(508, 0); - this.ribbonBar18.Name = "ribbonBar18"; - this.ribbonBar18.Size = new System.Drawing.Size(171, 59); - this.ribbonBar18.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar18.TabIndex = 1; - // - // - // - this.ribbonBar18.TitleStyle.Class = ""; - this.ribbonBar18.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar18.TitleStyleMouseOver.Class = ""; - this.ribbonBar18.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar18.TitleVisible = false; - // - // buttonItem133 - // - this.buttonItem133.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem133.Image"))); - this.buttonItem133.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem133.Name = "buttonItem133"; - this.buttonItem133.SubItemsExpandWidth = 14; - this.buttonItem133.Text = "审核入库"; - this.buttonItem133.Click += new System.EventHandler(this.buttonItem133_Click_1); - // - // buttonItem132 - // - this.buttonItem132.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem132.Image"))); - this.buttonItem132.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem132.Name = "buttonItem132"; - this.buttonItem132.SubItemsExpandWidth = 14; - this.buttonItem132.Text = "已审核的图层"; - this.buttonItem132.Visible = false; - this.buttonItem132.Click += new System.EventHandler(this.buttonItem132_Click_1); - // - // ribbonBar13 - // - this.ribbonBar13.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar13.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar13.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar13.BackgroundStyle.Class = ""; - this.ribbonBar13.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar13.ContainerControlProcessDialogKey = true; - this.ribbonBar13.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar13.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItem127, - this.buttonItem128, - this.sliderItem1, - this.buttonItem134, - this.buttonItem130, - this.btn_check_history}); - this.ribbonBar13.Location = new System.Drawing.Point(3, 0); - this.ribbonBar13.Name = "ribbonBar13"; - this.ribbonBar13.Size = new System.Drawing.Size(505, 59); - this.ribbonBar13.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar13.TabIndex = 0; - // - // - // - this.ribbonBar13.TitleStyle.Class = ""; - this.ribbonBar13.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar13.TitleStyleMouseOver.Class = ""; - this.ribbonBar13.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar13.TitleVisible = false; - // - // buttonItem127 - // - this.buttonItem127.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem127.Image"))); - this.buttonItem127.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem127.Name = "buttonItem127"; - this.buttonItem127.SubItemsExpandWidth = 14; - this.buttonItem127.Text = "打开数据"; - this.buttonItem127.Click += new System.EventHandler(this.buttonItem127_Click_2); - // - // buttonItem128 - // - this.buttonItem128.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem128.Image"))); - this.buttonItem128.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem128.Name = "buttonItem128"; - this.buttonItem128.SubItemsExpandWidth = 14; - this.buttonItem128.Text = "一键审核"; - this.buttonItem128.Click += new System.EventHandler(this.buttonItem128_Click); - // - // sliderItem1 - // - this.sliderItem1.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; - this.sliderItem1.LabelWidth = 50; - this.sliderItem1.Name = "sliderItem1"; - this.sliderItem1.Text = "地面透明度"; - this.sliderItem1.TextColor = System.Drawing.Color.Black; - this.sliderItem1.Value = 0; - this.sliderItem1.ValueChanged += new System.EventHandler(this.sliderItem1_ValueChanged); - // - // buttonItem134 - // - this.buttonItem134.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem134.Image"))); - this.buttonItem134.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem134.Name = "buttonItem134"; - this.buttonItem134.SubItemsExpandWidth = 14; - this.buttonItem134.Text = "模拟设计修改"; - this.buttonItem134.Click += new System.EventHandler(this.buttonItem134_Click_1); - // - // buttonItem130 - // - this.buttonItem130.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem130.Image"))); - this.buttonItem130.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem130.Name = "buttonItem130"; - this.buttonItem130.SubItemsExpandWidth = 14; - this.buttonItem130.Text = "导出审核图"; - this.buttonItem130.Click += new System.EventHandler(this.buttonItem130_Click_1); - // - // btn_check_history - // - this.btn_check_history.Image = ((System.Drawing.Image)(resources.GetObject("btn_check_history.Image"))); - this.btn_check_history.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_check_history.Name = "btn_check_history"; - this.btn_check_history.SubItemsExpandWidth = 14; - this.btn_check_history.Text = "审核历史"; - this.btn_check_history.Click += new System.EventHandler(this.btn_check_history_Click); - // - // ribbonPanel5 - // - this.ribbonPanel5.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel5.Controls.Add(this.ribbonBar2); - this.ribbonPanel5.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel5.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel5.Name = "ribbonPanel5"; - this.ribbonPanel5.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel5.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel5.Style.Class = ""; - this.ribbonPanel5.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel5.StyleMouseDown.Class = ""; - this.ribbonPanel5.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel5.StyleMouseOver.Class = ""; - this.ribbonPanel5.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel5.TabIndex = 37; - this.ribbonPanel5.Visible = false; - // - // ribbonBar2 - // - this.ribbonBar2.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar2.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar2.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar2.BackgroundStyle.Class = ""; - this.ribbonBar2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar2.ContainerControlProcessDialogKey = true; - this.ribbonBar2.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar2.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItemHX1, - this.buttonItemHX2, - this.buttonItemDCTP, - this.sliderItem3}); - this.ribbonBar2.Location = new System.Drawing.Point(3, 0); - this.ribbonBar2.Name = "ribbonBar2"; - this.ribbonBar2.Size = new System.Drawing.Size(350, 59); - this.ribbonBar2.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar2.TabIndex = 0; - // - // - // - this.ribbonBar2.TitleStyle.Class = ""; - this.ribbonBar2.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar2.TitleStyleMouseOver.Class = ""; - this.ribbonBar2.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar2.TitleVisible = false; - // - // buttonItemHX1 - // - this.buttonItemHX1.AutoExpandOnClick = true; - this.buttonItemHX1.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX1.Image"))); - this.buttonItemHX1.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemHX1.Name = "buttonItemHX1"; - this.buttonItemHX1.SubItemsExpandWidth = 14; - this.buttonItemHX1.Text = "导入红线"; - this.buttonItemHX1.Click += new System.EventHandler(this.buttonItemHX1_Click); - // - // buttonItemHX2 - // - this.buttonItemHX2.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX2.Image"))); - this.buttonItemHX2.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemHX2.Name = "buttonItemHX2"; - this.buttonItemHX2.SubItemsExpandWidth = 14; - this.buttonItemHX2.Text = "红线审核"; - this.buttonItemHX2.Click += new System.EventHandler(this.buttonItemHX2_Click); - // - // buttonItemDCTP - // - this.buttonItemDCTP.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemDCTP.Image"))); - this.buttonItemDCTP.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemDCTP.Name = "buttonItemDCTP"; - this.buttonItemDCTP.SubItemsExpandWidth = 14; - this.buttonItemDCTP.Text = "导出图片"; - this.buttonItemDCTP.Click += new System.EventHandler(this.buttonItemDCTP_Click); - // - // sliderItem3 - // - this.sliderItem3.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; - this.sliderItem3.LabelWidth = 50; - this.sliderItem3.Name = "sliderItem3"; - this.sliderItem3.Text = "地面透明度"; - this.sliderItem3.TextColor = System.Drawing.Color.Black; - this.sliderItem3.Value = 0; - this.sliderItem3.ValueChanged += new System.EventHandler(this.sliderItem3_ValueChanged); - // - // ribbonPanel2 - // - this.ribbonPanel2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel2.Controls.Add(this.ribbonBar3); - this.ribbonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel2.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel2.Name = "ribbonPanel2"; - this.ribbonPanel2.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel2.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel2.Style.Class = ""; - this.ribbonPanel2.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel2.StyleMouseDown.Class = ""; - this.ribbonPanel2.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel2.StyleMouseOver.Class = ""; - this.ribbonPanel2.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel2.TabIndex = 39; - this.ribbonPanel2.Visible = false; - // - // ribbonBar3 - // - this.ribbonBar3.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar3.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar3.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar3.BackgroundStyle.Class = ""; - this.ribbonBar3.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar3.ContainerControlProcessDialogKey = true; - this.ribbonBar3.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar3.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.btn_user_info, - this.btn_role_info, - this.btn_resc_info, - this.btn_role_resc, - this.btn_user_role, - this.btn_password_edit, - this.buttonItemPasswordReset}); - this.ribbonBar3.Location = new System.Drawing.Point(3, 0); - this.ribbonBar3.Name = "ribbonBar3"; - this.ribbonBar3.Size = new System.Drawing.Size(551, 59); - this.ribbonBar3.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar3.TabIndex = 1; - // - // - // - this.ribbonBar3.TitleStyle.Class = ""; - this.ribbonBar3.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar3.TitleStyleMouseOver.Class = ""; - this.ribbonBar3.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar3.TitleVisible = false; - // - // btn_user_info - // - this.btn_user_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_info.Image"))); - this.btn_user_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_user_info.Name = "btn_user_info"; - this.btn_user_info.SubItemsExpandWidth = 14; - this.btn_user_info.Text = "用户管理"; - this.btn_user_info.Click += new System.EventHandler(this.btn_user_info_Click); - // - // btn_role_info - // - this.btn_role_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_info.Image"))); - this.btn_role_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_role_info.Name = "btn_role_info"; - this.btn_role_info.SubItemsExpandWidth = 14; - this.btn_role_info.Text = "角色管理"; - this.btn_role_info.Click += new System.EventHandler(this.btn_role_info_Click); - // - // btn_resc_info - // - this.btn_resc_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_resc_info.Image"))); - this.btn_resc_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_resc_info.Name = "btn_resc_info"; - this.btn_resc_info.SubItemsExpandWidth = 14; - this.btn_resc_info.Text = "资源管理"; - this.btn_resc_info.Visible = false; - this.btn_resc_info.Click += new System.EventHandler(this.btn_resc_info_Click); - // - // btn_role_resc - // - this.btn_role_resc.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_resc.Image"))); - this.btn_role_resc.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_role_resc.Name = "btn_role_resc"; - this.btn_role_resc.SubItemsExpandWidth = 14; - this.btn_role_resc.Text = "角色授权"; - this.btn_role_resc.Click += new System.EventHandler(this.btn_role_resc_Click); - // - // btn_user_role - // - this.btn_user_role.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_role.Image"))); - this.btn_user_role.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_user_role.Name = "btn_user_role"; - this.btn_user_role.SubItemsExpandWidth = 14; - this.btn_user_role.Text = "用户授权"; - this.btn_user_role.Click += new System.EventHandler(this.btn_user_role_Click); - // - // btn_password_edit - // - this.btn_password_edit.Image = ((System.Drawing.Image)(resources.GetObject("btn_password_edit.Image"))); - this.btn_password_edit.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_password_edit.Name = "btn_password_edit"; - this.btn_password_edit.SubItemsExpandWidth = 14; - this.btn_password_edit.Text = "密码修改"; - this.btn_password_edit.Click += new System.EventHandler(this.btn_password_edit_Click); - // - // buttonItemPasswordReset - // - this.buttonItemPasswordReset.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemPasswordReset.Image"))); - this.buttonItemPasswordReset.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemPasswordReset.Name = "buttonItemPasswordReset"; - this.buttonItemPasswordReset.SubItemsExpandWidth = 14; - this.buttonItemPasswordReset.Text = "重置密码"; - this.buttonItemPasswordReset.Click += new System.EventHandler(this.buttonItemPasswordReset_Click); - // // ribbonPanel15 // this.ribbonPanel15.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; @@ -2945,7 +2356,6 @@ this.ribbonPanel15.StyleMouseOver.Class = ""; this.ribbonPanel15.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; this.ribbonPanel15.TabIndex = 35; - this.ribbonPanel15.Visible = false; // // ribbonBar20 // @@ -4286,6 +3696,596 @@ this.buttonItemBZ11.Text = "标注管理"; this.buttonItemBZ11.Click += new System.EventHandler(this.buttonItemBZ11_Click); // + // ribbonPanel6 + // + this.ribbonPanel6.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel6.Controls.Add(this.ribbonBar6); + this.ribbonPanel6.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel6.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel6.Name = "ribbonPanel6"; + this.ribbonPanel6.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel6.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel6.Style.Class = ""; + this.ribbonPanel6.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel6.StyleMouseDown.Class = ""; + this.ribbonPanel6.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel6.StyleMouseOver.Class = ""; + this.ribbonPanel6.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel6.TabIndex = 38; + this.ribbonPanel6.Visible = false; + // + // ribbonBar6 + // + this.ribbonBar6.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar6.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar6.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar6.BackgroundStyle.Class = ""; + this.ribbonBar6.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar6.ContainerControlProcessDialogKey = true; + this.ribbonBar6.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar6.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItemSPSZ, + this.buttonItem8, + this.buttonItemLocation, + this.sliderItem2, + this.buttonItemGBJC}); + this.ribbonBar6.Location = new System.Drawing.Point(3, 0); + this.ribbonBar6.Name = "ribbonBar6"; + this.ribbonBar6.Size = new System.Drawing.Size(427, 59); + this.ribbonBar6.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar6.TabIndex = 0; + // + // + // + this.ribbonBar6.TitleStyle.Class = ""; + this.ribbonBar6.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar6.TitleStyleMouseOver.Class = ""; + this.ribbonBar6.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar6.TitleVisible = false; + // + // buttonItemSPSZ + // + this.buttonItemSPSZ.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemSPSZ.Image"))); + this.buttonItemSPSZ.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemSPSZ.Name = "buttonItemSPSZ"; + this.buttonItemSPSZ.SubItemsExpandWidth = 14; + this.buttonItemSPSZ.Text = "双屏设置"; + this.buttonItemSPSZ.Click += new System.EventHandler(this.buttonItemSPSZ_Click); + // + // buttonItem8 + // + this.buttonItem8.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem8.Image"))); + this.buttonItem8.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem8.Name = "buttonItem8"; + this.buttonItem8.SubItemsExpandWidth = 14; + this.buttonItem8.Text = "双屏分析"; + this.buttonItem8.Click += new System.EventHandler(this.buttonItem8_Click); + // + // buttonItemLocation + // + this.buttonItemLocation.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemLocation.Image"))); + this.buttonItemLocation.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemLocation.Name = "buttonItemLocation"; + this.buttonItemLocation.SubItemsExpandWidth = 14; + this.buttonItemLocation.Text = "快速定位"; + this.buttonItemLocation.Click += new System.EventHandler(this.buttonItemLocation_Click); + // + // sliderItem2 + // + this.sliderItem2.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; + this.sliderItem2.LabelWidth = 50; + this.sliderItem2.Name = "sliderItem2"; + this.sliderItem2.Text = "地面透明度"; + this.sliderItem2.TextColor = System.Drawing.Color.Black; + this.sliderItem2.Value = 0; + this.sliderItem2.ValueChanged += new System.EventHandler(this.sliderItem2_ValueChanged); + // + // buttonItemGBJC + // + this.buttonItemGBJC.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemGBJC.Image"))); + this.buttonItemGBJC.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemGBJC.Name = "buttonItemGBJC"; + this.buttonItemGBJC.SubItemsExpandWidth = 14; + this.buttonItemGBJC.Text = "国标检测"; + this.buttonItemGBJC.Click += new System.EventHandler(this.buttonItemGBJC_Click); + // + // ribbonPanel4 + // + this.ribbonPanel4.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel4.Controls.Add(this.ribbonBar1); + this.ribbonPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel4.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel4.Name = "ribbonPanel4"; + this.ribbonPanel4.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel4.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel4.Style.Class = ""; + this.ribbonPanel4.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel4.StyleMouseDown.Class = ""; + this.ribbonPanel4.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel4.StyleMouseOver.Class = ""; + this.ribbonPanel4.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel4.TabIndex = 36; + this.ribbonPanel4.Visible = false; + // + // ribbonBar1 + // + this.ribbonBar1.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar1.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar1.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar1.BackgroundStyle.Class = ""; + this.ribbonBar1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar1.ContainerControlProcessDialogKey = true; + this.ribbonBar1.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar1.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.btn_document_info}); + this.ribbonBar1.Location = new System.Drawing.Point(3, 0); + this.ribbonBar1.Name = "ribbonBar1"; + this.ribbonBar1.Size = new System.Drawing.Size(88, 59); + this.ribbonBar1.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar1.TabIndex = 0; + // + // + // + this.ribbonBar1.TitleStyle.Class = ""; + this.ribbonBar1.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar1.TitleStyleMouseOver.Class = ""; + this.ribbonBar1.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar1.TitleVisible = false; + // + // btn_document_info + // + this.btn_document_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_document_info.Image"))); + this.btn_document_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_document_info.Name = "btn_document_info"; + this.btn_document_info.SubItemsExpandWidth = 14; + this.btn_document_info.Text = "文档管理"; + this.btn_document_info.Click += new System.EventHandler(this.btn_document_info_Click); + // + // ribbonPanel12 + // + this.ribbonPanel12.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel12.Controls.Add(this.ribbonBar18); + this.ribbonPanel12.Controls.Add(this.ribbonBar13); + this.ribbonPanel12.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel12.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel12.Name = "ribbonPanel12"; + this.ribbonPanel12.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel12.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel12.Style.Class = ""; + this.ribbonPanel12.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel12.StyleMouseDown.Class = ""; + this.ribbonPanel12.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel12.StyleMouseOver.Class = ""; + this.ribbonPanel12.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel12.TabIndex = 34; + this.ribbonPanel12.Visible = false; + // + // ribbonBar18 + // + this.ribbonBar18.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar18.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar18.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar18.BackgroundStyle.Class = ""; + this.ribbonBar18.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar18.ContainerControlProcessDialogKey = true; + this.ribbonBar18.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar18.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItem133, + this.buttonItem132}); + this.ribbonBar18.Location = new System.Drawing.Point(508, 0); + this.ribbonBar18.Name = "ribbonBar18"; + this.ribbonBar18.Size = new System.Drawing.Size(171, 59); + this.ribbonBar18.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar18.TabIndex = 1; + // + // + // + this.ribbonBar18.TitleStyle.Class = ""; + this.ribbonBar18.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar18.TitleStyleMouseOver.Class = ""; + this.ribbonBar18.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar18.TitleVisible = false; + // + // buttonItem133 + // + this.buttonItem133.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem133.Image"))); + this.buttonItem133.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem133.Name = "buttonItem133"; + this.buttonItem133.SubItemsExpandWidth = 14; + this.buttonItem133.Text = "审核入库"; + this.buttonItem133.Click += new System.EventHandler(this.buttonItem133_Click_1); + // + // buttonItem132 + // + this.buttonItem132.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem132.Image"))); + this.buttonItem132.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem132.Name = "buttonItem132"; + this.buttonItem132.SubItemsExpandWidth = 14; + this.buttonItem132.Text = "已审核的图层"; + this.buttonItem132.Visible = false; + this.buttonItem132.Click += new System.EventHandler(this.buttonItem132_Click_1); + // + // ribbonBar13 + // + this.ribbonBar13.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar13.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar13.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar13.BackgroundStyle.Class = ""; + this.ribbonBar13.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar13.ContainerControlProcessDialogKey = true; + this.ribbonBar13.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar13.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItem127, + this.buttonItem128, + this.sliderItem1, + this.buttonItem134, + this.buttonItem130, + this.btn_check_history}); + this.ribbonBar13.Location = new System.Drawing.Point(3, 0); + this.ribbonBar13.Name = "ribbonBar13"; + this.ribbonBar13.Size = new System.Drawing.Size(505, 59); + this.ribbonBar13.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar13.TabIndex = 0; + // + // + // + this.ribbonBar13.TitleStyle.Class = ""; + this.ribbonBar13.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar13.TitleStyleMouseOver.Class = ""; + this.ribbonBar13.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar13.TitleVisible = false; + // + // buttonItem127 + // + this.buttonItem127.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem127.Image"))); + this.buttonItem127.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem127.Name = "buttonItem127"; + this.buttonItem127.SubItemsExpandWidth = 14; + this.buttonItem127.Text = "打开数据"; + this.buttonItem127.Click += new System.EventHandler(this.buttonItem127_Click_2); + // + // buttonItem128 + // + this.buttonItem128.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem128.Image"))); + this.buttonItem128.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem128.Name = "buttonItem128"; + this.buttonItem128.SubItemsExpandWidth = 14; + this.buttonItem128.Text = "一键审核"; + this.buttonItem128.Click += new System.EventHandler(this.buttonItem128_Click); + // + // sliderItem1 + // + this.sliderItem1.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; + this.sliderItem1.LabelWidth = 50; + this.sliderItem1.Name = "sliderItem1"; + this.sliderItem1.Text = "地面透明度"; + this.sliderItem1.TextColor = System.Drawing.Color.Black; + this.sliderItem1.Value = 0; + this.sliderItem1.ValueChanged += new System.EventHandler(this.sliderItem1_ValueChanged); + // + // buttonItem134 + // + this.buttonItem134.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem134.Image"))); + this.buttonItem134.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem134.Name = "buttonItem134"; + this.buttonItem134.SubItemsExpandWidth = 14; + this.buttonItem134.Text = "模拟设计修改"; + this.buttonItem134.Click += new System.EventHandler(this.buttonItem134_Click_1); + // + // buttonItem130 + // + this.buttonItem130.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem130.Image"))); + this.buttonItem130.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem130.Name = "buttonItem130"; + this.buttonItem130.SubItemsExpandWidth = 14; + this.buttonItem130.Text = "导出审核图"; + this.buttonItem130.Click += new System.EventHandler(this.buttonItem130_Click_1); + // + // btn_check_history + // + this.btn_check_history.Image = ((System.Drawing.Image)(resources.GetObject("btn_check_history.Image"))); + this.btn_check_history.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_check_history.Name = "btn_check_history"; + this.btn_check_history.SubItemsExpandWidth = 14; + this.btn_check_history.Text = "审核历史"; + this.btn_check_history.Click += new System.EventHandler(this.btn_check_history_Click); + // + // ribbonPanel5 + // + this.ribbonPanel5.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel5.Controls.Add(this.ribbonBar2); + this.ribbonPanel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel5.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel5.Name = "ribbonPanel5"; + this.ribbonPanel5.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel5.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel5.Style.Class = ""; + this.ribbonPanel5.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel5.StyleMouseDown.Class = ""; + this.ribbonPanel5.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel5.StyleMouseOver.Class = ""; + this.ribbonPanel5.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel5.TabIndex = 37; + this.ribbonPanel5.Visible = false; + // + // ribbonBar2 + // + this.ribbonBar2.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar2.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar2.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar2.BackgroundStyle.Class = ""; + this.ribbonBar2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar2.ContainerControlProcessDialogKey = true; + this.ribbonBar2.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar2.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItemHX1, + this.buttonItemHX2, + this.buttonItemDCTP, + this.sliderItem3}); + this.ribbonBar2.Location = new System.Drawing.Point(3, 0); + this.ribbonBar2.Name = "ribbonBar2"; + this.ribbonBar2.Size = new System.Drawing.Size(350, 59); + this.ribbonBar2.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar2.TabIndex = 0; + // + // + // + this.ribbonBar2.TitleStyle.Class = ""; + this.ribbonBar2.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar2.TitleStyleMouseOver.Class = ""; + this.ribbonBar2.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar2.TitleVisible = false; + // + // buttonItemHX1 + // + this.buttonItemHX1.AutoExpandOnClick = true; + this.buttonItemHX1.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX1.Image"))); + this.buttonItemHX1.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemHX1.Name = "buttonItemHX1"; + this.buttonItemHX1.SubItemsExpandWidth = 14; + this.buttonItemHX1.Text = "导入红线"; + this.buttonItemHX1.Click += new System.EventHandler(this.buttonItemHX1_Click); + // + // buttonItemHX2 + // + this.buttonItemHX2.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX2.Image"))); + this.buttonItemHX2.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemHX2.Name = "buttonItemHX2"; + this.buttonItemHX2.SubItemsExpandWidth = 14; + this.buttonItemHX2.Text = "红线审核"; + this.buttonItemHX2.Click += new System.EventHandler(this.buttonItemHX2_Click); + // + // buttonItemDCTP + // + this.buttonItemDCTP.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemDCTP.Image"))); + this.buttonItemDCTP.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemDCTP.Name = "buttonItemDCTP"; + this.buttonItemDCTP.SubItemsExpandWidth = 14; + this.buttonItemDCTP.Text = "导出图片"; + this.buttonItemDCTP.Click += new System.EventHandler(this.buttonItemDCTP_Click); + // + // sliderItem3 + // + this.sliderItem3.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; + this.sliderItem3.LabelWidth = 50; + this.sliderItem3.Name = "sliderItem3"; + this.sliderItem3.Text = "地面透明度"; + this.sliderItem3.TextColor = System.Drawing.Color.Black; + this.sliderItem3.Value = 0; + this.sliderItem3.ValueChanged += new System.EventHandler(this.sliderItem3_ValueChanged); + // + // ribbonPanel2 + // + this.ribbonPanel2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel2.Controls.Add(this.ribbonBar3); + this.ribbonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel2.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel2.Name = "ribbonPanel2"; + this.ribbonPanel2.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel2.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel2.Style.Class = ""; + this.ribbonPanel2.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel2.StyleMouseDown.Class = ""; + this.ribbonPanel2.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel2.StyleMouseOver.Class = ""; + this.ribbonPanel2.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel2.TabIndex = 39; + this.ribbonPanel2.Visible = false; + // + // ribbonBar3 + // + this.ribbonBar3.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar3.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar3.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar3.BackgroundStyle.Class = ""; + this.ribbonBar3.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar3.ContainerControlProcessDialogKey = true; + this.ribbonBar3.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar3.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.btn_user_info, + this.btn_role_info, + this.btn_resc_info, + this.btn_role_resc, + this.btn_user_role, + this.btn_password_edit, + this.buttonItemPasswordReset}); + this.ribbonBar3.Location = new System.Drawing.Point(3, 0); + this.ribbonBar3.Name = "ribbonBar3"; + this.ribbonBar3.Size = new System.Drawing.Size(551, 59); + this.ribbonBar3.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar3.TabIndex = 1; + // + // + // + this.ribbonBar3.TitleStyle.Class = ""; + this.ribbonBar3.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar3.TitleStyleMouseOver.Class = ""; + this.ribbonBar3.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar3.TitleVisible = false; + // + // btn_user_info + // + this.btn_user_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_info.Image"))); + this.btn_user_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_user_info.Name = "btn_user_info"; + this.btn_user_info.SubItemsExpandWidth = 14; + this.btn_user_info.Text = "用户管理"; + this.btn_user_info.Click += new System.EventHandler(this.btn_user_info_Click); + // + // btn_role_info + // + this.btn_role_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_info.Image"))); + this.btn_role_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_role_info.Name = "btn_role_info"; + this.btn_role_info.SubItemsExpandWidth = 14; + this.btn_role_info.Text = "角色管理"; + this.btn_role_info.Click += new System.EventHandler(this.btn_role_info_Click); + // + // btn_resc_info + // + this.btn_resc_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_resc_info.Image"))); + this.btn_resc_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_resc_info.Name = "btn_resc_info"; + this.btn_resc_info.SubItemsExpandWidth = 14; + this.btn_resc_info.Text = "资源管理"; + this.btn_resc_info.Visible = false; + this.btn_resc_info.Click += new System.EventHandler(this.btn_resc_info_Click); + // + // btn_role_resc + // + this.btn_role_resc.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_resc.Image"))); + this.btn_role_resc.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_role_resc.Name = "btn_role_resc"; + this.btn_role_resc.SubItemsExpandWidth = 14; + this.btn_role_resc.Text = "角色授权"; + this.btn_role_resc.Click += new System.EventHandler(this.btn_role_resc_Click); + // + // btn_user_role + // + this.btn_user_role.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_role.Image"))); + this.btn_user_role.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_user_role.Name = "btn_user_role"; + this.btn_user_role.SubItemsExpandWidth = 14; + this.btn_user_role.Text = "用户授权"; + this.btn_user_role.Click += new System.EventHandler(this.btn_user_role_Click); + // + // btn_password_edit + // + this.btn_password_edit.Image = ((System.Drawing.Image)(resources.GetObject("btn_password_edit.Image"))); + this.btn_password_edit.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_password_edit.Name = "btn_password_edit"; + this.btn_password_edit.SubItemsExpandWidth = 14; + this.btn_password_edit.Text = "密码修改"; + this.btn_password_edit.Click += new System.EventHandler(this.btn_password_edit_Click); + // + // buttonItemPasswordReset + // + this.buttonItemPasswordReset.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemPasswordReset.Image"))); + this.buttonItemPasswordReset.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemPasswordReset.Name = "buttonItemPasswordReset"; + this.buttonItemPasswordReset.SubItemsExpandWidth = 14; + this.buttonItemPasswordReset.Text = "重置密码"; + this.buttonItemPasswordReset.Click += new System.EventHandler(this.buttonItemPasswordReset_Click); + // // ribbonPanel1 // this.ribbonPanel1.AutoSize = true; @@ -4465,7 +4465,6 @@ // ribbonTabItem9 // this.ribbonTabItem9.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.ImageAndText; - this.ribbonTabItem9.Checked = true; this.ribbonTabItem9.HoverImage = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem9.HoverImage"))); this.ribbonTabItem9.Image = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem9.Image"))); this.ribbonTabItem9.Name = "ribbonTabItem9"; @@ -4486,6 +4485,7 @@ // ribbonTabItem14 // this.ribbonTabItem14.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.ImageAndText; + this.ribbonTabItem14.Checked = true; this.ribbonTabItem14.HoverImage = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem14.HoverImage"))); this.ribbonTabItem14.Image = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem14.Image"))); this.ribbonTabItem14.Name = "ribbonTabItem14"; @@ -5480,7 +5480,7 @@ this.dataGridViewX2.ReadOnly = true; this.dataGridViewX2.RowHeadersVisible = false; this.dataGridViewX2.RowTemplate.Height = 23; - this.dataGridViewX2.Size = new System.Drawing.Size(23359, 92); + this.dataGridViewX2.Size = new System.Drawing.Size(23953, 92); this.dataGridViewX2.TabIndex = 11; // // dataGridViewTextBoxColumn10 @@ -5574,7 +5574,7 @@ this.dataGridViewX3.ReadOnly = true; this.dataGridViewX3.RowHeadersVisible = false; this.dataGridViewX3.RowTemplate.Height = 23; - this.dataGridViewX3.Size = new System.Drawing.Size(23358, 127); + this.dataGridViewX3.Size = new System.Drawing.Size(23952, 127); this.dataGridViewX3.TabIndex = 5; this.dataGridViewX3.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.dataGridViewX3_MouseDoubleClick); // @@ -5832,7 +5832,7 @@ this.dataGridViewX8.ReadOnly = true; this.dataGridViewX8.RowHeadersVisible = false; this.dataGridViewX8.RowTemplate.Height = 23; - this.dataGridViewX8.Size = new System.Drawing.Size(133, 92); + this.dataGridViewX8.Size = new System.Drawing.Size(99, 92); this.dataGridViewX8.TabIndex = 11; // // dataGridViewTextBoxColumn12 @@ -5927,7 +5927,7 @@ this.dataGridViewX9.ReadOnly = true; this.dataGridViewX9.RowHeadersVisible = false; this.dataGridViewX9.RowTemplate.Height = 23; - this.dataGridViewX9.Size = new System.Drawing.Size(132, 127); + this.dataGridViewX9.Size = new System.Drawing.Size(98, 127); this.dataGridViewX9.TabIndex = 5; this.dataGridViewX9.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.dataGridViewX9_MouseDoubleClick); // @@ -6791,12 +6791,12 @@ this.contextMenuStripDeleteLayerNode.ResumeLayout(false); this.ribbonControl1.ResumeLayout(false); this.ribbonControl1.PerformLayout(); + this.ribbonPanel15.ResumeLayout(false); this.ribbonPanel6.ResumeLayout(false); this.ribbonPanel4.ResumeLayout(false); this.ribbonPanel12.ResumeLayout(false); this.ribbonPanel5.ResumeLayout(false); this.ribbonPanel2.ResumeLayout(false); - this.ribbonPanel15.ResumeLayout(false); this.ribbonPanel1.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.panelOfTable.ResumeLayout(false); diff --git a/MainFrm.resx b/MainFrm.resx index b408d34..6b9ae78 100644 --- a/MainFrm.resx +++ b/MainFrm.resx @@ -351,804 +351,6 @@ 766, 54 - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlDMzFEOUI4NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 - NEI4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlDMzFEOUI3NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 - NEI4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDk5Mzk2NTZBRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz73sIMwAAADIElEQVRIS7WVa0iTYRTH56Uiysvm3TkvpLl5DRIvQYWVWl+6 - iNEVg0yhQqloQZHkLT+Y0YdAs75IpEUhzERZoZhsRpZlS7soblotsRwoxhqWeTrnYZtv+u7NsB74cZ5z - zv89/z17HzYRAPxXeIv/EpFXcOyi4BvKhfehv4FvKBfeh+ayqIUDlIgBgT8whpRYoT2fhgvNVJKBQT9s - hB8/QZDPpnEIjEhg0J5Pw4Vm0mwygG9T06BSqQQhTUhUMoRGpyxYT7OZwfhXC6jVakFIYzNYqN5uMGKa - BI1GIwhpghXJaJJi13d0dEB2bj74hsWzSDlXbzfQG02g0+kEIU2wIomdovzKdVifngnFFytBeb4cLN+n - WaSc6hfKKqB/eHTWoHfwExgMBkFII5MnQUD4WlAWloO26wVs35MDmifPmQFFyqlO/aKKqlmDp31DYDKZ - BCGNTJ4IPqHx8LJvACbNUw7p6e2HuJQMNIhhBuaHj3vBYrEI0tb1BoIiE9kJ9h7Oh7EJM+g/jEJuwVlY - s24ri5RTnfo5BedAIoueIYPumvomuHzjzm9cq2uCq7UNUH2rEarr7kNd0yP26Y+eKoSWtk4wfpmAg7kn - ITY5DUorq1g8cOQEqze3aplOEhRtJoMcL1mMTixV9IgD5a/tSBVDYql8AKOBQLEJtTP08gY/jjFiktKg - 5FIV21Ok3NazvmR2AvrFkCAJyGYk1comZAuHDM/AyLvHThfBveZ26NOPwI59eey7LsbhFCmnOvVJ5+Ef - rrYZLEU8EZ85+HLwW7ZCLMVTFWdkHoLut+/hgbYHaE9XN31XNsupTrWV3jKVs+uS3cyAD0cLe331jW3Q - qRt0CPUlQVHDKI+fN9iGo4W90uNnyuA2vvRtWTlQgxeg/dk7FimnOvU9/CNqUe47b7ANRwt7AfjpKvAK - Gt18Qur35ymhRfsKKLr5hN7EyzDq7humWrrcfSfKxbz/QlwcLDck1snZJdUzYHUDmk57+K1qdXJyzsL6 - RmQD9ZmObygXB8sVIRO6fXQB4hC6eRQppzr1XXmHclnAckFomLc1Um5dItEvhZ97MQXP9N0AAAAASUVO - RK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhDMTdBQjRENEFBRTExRTQ4QjQyODY0MDNBNTJE - NzNCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhDMTdBQjRDNEFBRTExRTQ4QjQyODY0MDNBNTJE - NzNCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NUQyMjc4QTlBQjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4eHsDfAAAB00lEQVRIS7XVWytEURQH8HniTTNHLs0NCXNcXjTN5dH9g/gM - 3jx590QhFDJS0gyTGmpqaqJIMW4hzlAoOaWISS7LWifntI3ddnTGrl92e/57/We/DBsA/CvuYSHZSr0t - lvCGsriX/oI3lMW9lM/SwgF9SEHwizs08IX2vAyLZvZRgXJ+cQWv7yB0q96Ds86voT0vw6KZNJsK4Pnl - DWKxmBBlqhpDUN0UNp2n2VrB/WMOEomEEGX0ArN5o+BGfYB0Oi1EGa8cwpKw6bxRcH6lQiaTEaKMVw5q - rzCbNwr2z65BURQhynh8Qe0VZvNGwdZBFlRVFaKMxxfQXmE2rxc8rW3sQy6XE0puHoG7IaC9YnV9j5th - pbZPqOCDCrbH5uIwOD7/zWgkDkNTizAyuwQjkWWIxFNQWduqmVxI/MiPz6/A8HTUuDMTTYLkbrqhgt5S - T3PG4ZJ3HE7focElZx0u3yn+VQiG1ZLymmm7s74f88f42S6bl9zyJZ6d6Xckd+Mt5ieogH4xJORHHajt - SzvqZPSgECpHZSiA2DztuxBlad+NgnpBEbIjusiiYboKRF+kGFHegUR5ImkFv7G0eAPzWVq8gfksLd5/ - oULiHhYS97BwwPYJlSCUgVubViQAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJEMDQyOEZBNEFEMjExRTRBN0MxRDBCNzJGRUND - MDEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJEMDQyOEY5NEFEMjExRTRBN0MxRDBCNzJGRUND - MDEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkRDRkI1RDVEMTRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz59jfe3AAAEbUlEQVRIS8WTeUybZRzHF48/pnFOuQRajkFLgQFb5iRLNJr4 - l/EPgsniUI4xZDAY1zyxwApsMJyIME61rByl3DfoYGBrgbWUY06FcZSCha4rQ8jYxkqPr2/fvkv8o2Sg - S/wkT970eb6/T5/39z7Prv8dt/Oql4mR4HZJ3ccoXFxhVCzB9DT9JueJdSq6c1wzVZFupepVzxu34XVj - CaEDi1jX6hF8ZQoeokl4iBVwzV9YdU1XRlIl28eVo8phCdXwGltEeOUsro6psaHVwcSDh5volc4iOO8X - 7KuVwb1hEi7J8myq9PEQO//I85oafr0KtEpUpNSETm+AwWDAvfv3YTQaybnm/t/AyO6Ga+UonJOnIijF - 1hA9tWI2qle9RxcI+RIpmZpTIfBULhIyyqHVahHPKcN70TmYnFFCp9OhqXcc9KwW0DOHVl3YU1aUyjJu - F1SpfhO3EM6bMMsVt+D8Zhz2HIpC4oU6bG5uIu4cD3tfTwAjIBNypQYbGxsISquBU34PaDHiVEplGXee - SuIjVaBv3Lz7gJg8vHg4FlZvc+ATVoLipiHsD8qCXWAO7IPK8MG5FjLXKboOeoYADkldUkplGWb7vOb4 - 4BzxIXXQE/1m59WDXdgBvxPfwz6UC4eQUth/WIBDZ2qQXj+K7IYRImeE5s5fOFrcDPvPapcJzVNmmwVY - VxWG9U09uau1tTVymPpc0iYFLew7OEUJ4BwtALfvJpl5xMrKCu6s3cUrn5YbCM1us80CrJZZVWjXr7j3 - 4CE0y8v4IrcaH+cK4Bv+DRyPl8ApphYuia3wZ3eCUzOA1PIfcVuzjHnlIgK/vgy7mHzTG+w12yzA5E53 - edYPo1c2i/X1dQTEfwvbwDQ4hhXg8OcN4P48Df+UTrgkNIAeW4Hg3Hbo9Xq0iGSgs4ls5CUhoXnObLOA - S8pkhG/bdZzgDZJnffT3GXieLAA9XgB2/RjZjuQqMWhxfBw824H55XWyhcfy+HDNqoB1SH4Codn6G7iw - p3d78EaVPlXX0CaZgkqlgly1gpCiK0htHCH/IL6oFcEF3ZjT3CUvXqv0DzDSS0FPq1a/8EbYS5Rqa+if - SAJ8KoeNR7gitEsnoVQqSbGOkJmYX1ggxaY70SabwIGMUrjn8I3WIXnBRPnWu/8nDnE9Sd7cAaP/ZSES - 6/rRKJRArpiHXC7HzekZNIukiCyrhW9mGZgXa4w2kUVnibJnzdXbxP5URzyDO4QjxGl5i9uNpMZeKP5U - IrywAq9yCnGAOGGMonbYxpVnEPGdyR9BO/MTj8kfgXeNFPt5IngVtoF1kQ9WcTs8qgfgmNreQMS21xZL - 0E6Ln6ef75tg8sfgXT8O77oReAkkYNXJ4PRV/4ztyfo9VPTf4xjdf9CpQKzdxxuGe6UMbhXEmc8V6mze - r3qNivx3HGN7UmglQ6CVDMIxXwybo5UcaunJQD8te9rhyx4JrWwItlGNUut3y5+hlp4cDhFCpl14k9jq - nR+Y1NTjIe7NlmMnWKoHsOtvjWYcKpheqFQAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERTg4QTFENEQyMjExRTRBODEyODk0M0RBMTc5 - Qjg3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERTg4QTFDNEQyMjExRTRBODEyODk0M0RBMTc5 - Qjg3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjJGOUEyRDEyMTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6wJF34AAACl0lEQVRIS62Vy08TURSH73/QhQtXVnBhxEcMiUkhbEg0hB1R - Q1i68C8wIW5cEqMLN7ho2Ji4YiEhWq0prYUhfULbadN3obTaChobtZEUsFY9nnPS6WM6HYowyZf87j33 - nG/amaai9geOBYA+4pTxihmBE8DcTQB4J8em/9IwSQyagmrtL+z9rMFmvnhkKvtV7tcVHPz6DVsftulA - AckdhUg8zf19eoLKAd597iMLMItewfOxUDTN/bqCH3tVSG8VWIBZ9AoJApEk9+sKvu/uQ2IjzwJkGtH8 - OrTwy3Hu77vIAnV9mgWlcgWiqRwLjAMmkOMbPbNTKnN/JJntqJGEBZ++7oKcyLLgLN4JrU8Cms2C4pcy - BKKZumCI18temQ/8DzSLZlBmQX7nG/jCKdpgAa0driCtY5iFHuqHSjNoFtaags1iCdzBBG+QgNY2aZ0F - mIUe6osENAtrTUEq/7kDq9PHAszU5yYoq9f1i9cUSCD5ozxDEeTsrhAoONwyxLLb8MrhYQFmZYCHsnpd - v3hNgQROb5hnKIK29944MAThTBEWbS4WYBZ6qC/sKSy5ZJ6BGUQg8b4Bbhjod4AZXlhXWdBa10LrIVul - AM9ggS+aa6AIMMO8ZYUO0KeyIOMtZyaQpXpNi4LFucYzMINwhbMNcMNw5oIJMMNKIA0LNg88mZuH/ssj - dPgBMnN+cBRmny1wrRtSMMMzWCCFMg0UAeY2Fh0+GL5xG8Zu3oHXUrCj3g0WONdTbeBm21/o1N17gPtg - 98Xh3VoS3qzKMDI22agfglnY/Uld8NDc/ZlZwAwvl4Ngun6LGh8rdfVDViNs3rguOOzq6XOD8PDpc7g2 - OkHDH7XWtYa2It66Y4eCQ8cRfpvUNa2hTUD8A6JMaBvCyTdJAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERjY3MEZENEQyMzExRTRCNDlGQUMwMzk0OTAw - Qzc4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERjY3MEZDNEQyMzExRTRCNDlGQUMwMzk0OTAw - Qzc4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjhGOUEyRDEyMTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6GKmpFAAAC+UlEQVRIS63T20vTYRzH8Yforj/Ei24UiSgKIygKi8oyxZQo - cvNYeXaesmzqPGu2POd0ulSsnIdaurTSTJ3O6UxTPGya5vCQx5AuPn39RbHop7nZxQt+z3ie93e/Z4w1 - p7nsCoBt8R6yBF/UHPv+Wb0rfFFzm99CRIwEW1gnqXzxTXxRc0ydctm4OlID2sxrw6iCtiwItC+A2P/D - frLnjwGNSZdMq6N1WOvLwFpP4l/WdRlY6Jaio9Ab7QXba8sVoDHZGdT8PYS9THDqMGnLsKpNw0qXGCua - BO55VZdNQ6U/DRRibVCGb+N1pH5bukoRqHmDHOIG1N8/X2F4I8WyNhtf2+9hqSsZxqZ4upbb6HsSZLHO - Im90ym6hNVcIaktYTexZyUelGEvaHMy/jcFiZxo0xX5Y7ivGcn8JkVmA9uvlWBmqwpJeAWovs+poR99O - eRgWtQWYVUdgrj0FH+i+F3XF3NoappZYGJrEoLaOVYpOOTY/FGJB+xjTqnDMtMTTAC/Ma/Ix/TLUKl9e - x0JfFQpql7PykBP7lWIXzPeUYLIhHCPKCLr/AMy2ZsKoDLTKdNNdvM8TgNpRTBZwfJ885CTmaIChPhwa - mS+GnkdhqjEWY9X+VplqvIMXEhdQ24mZeuSs0N/BNNWWj4k6EdSZHhhXxWH0aSCGFd4c4Tk7zk7XBlUM - FKLToK4Nm+0qYnneRzqGGiSYaIiiyZdhVCdgqFSIwRJPjucZW85O1pvnRmvDkO9zFNTdy2Y6HjGp4HCF - 5kk4xhoiURd/EROv4tBfeM0qAyUC9Mp9QM0+7o829T6LZV0/mNycS6+nFKFWfAGj9ZHozfGwil7miZYH - 7qCmghsw+S6VpV894KuUuKFbfhNNqa749CwY3dm0toK+VABl3HlQM5obYHybwFLc7W1y/Y5BlX6FfgNn - DNcEY0DhZZX+MiGKbh0DNR24AYYWMSfJzc6GZBApwS5skIzNODcg0dV2V36FtsJ7yBJ8UXO8hyzBFzXH - ++H/A/YDv9/V87iOlrYAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 - RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL - ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH - s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW - uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx - xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd - iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ - qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW - GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE - NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n - KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw - qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI - HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq - wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q - 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA3MTZBNTkzNEEwMjExRTRBQjdERDhBQkEzMDEx - MzZEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA3MTZBNTkyNEEwMjExRTRBQjdERDhBQkEzMDEx - MzZEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTgxNjM4Q0YwMTRBRTQxMTk2M0JC - NEQ0MzNCOUIxQzgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - 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 - 0HWhD93n++Dbua+fK9NvoTM5+Udx5mye9NjgCZNf0HEnpN5U5RbPa9+0bdfQ+0eOPzp5ppvG96JfjFkM - nXR/vOP0ePOu/deyCuf8JVSorJny7HQdvR9MTCUm+fUYgyehazLBVCCd8ttpJbQANtO3cDjWbO9werzd - ruK5F9Ld3p7YBEdHCE/WMi0s0jf5mefm0e+ZCsXEf85i/98XsP4NaTpxka74X+IAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJBREU3RDk2NEFCMDExRTQ4OUM5QjZFOENGQzJF - MDk1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJBREU3RDk1NEFCMDExRTQ4OUM5QjZFOENGQzJF - MDk1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MEM5Mzk2NTZBRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz52g1XsAAADeUlEQVRIS62Va0hTYRiAXzVNoQs6oUCttJu3aqatrLxr2k0n - W6bLLlLSxTKCKLoQQUg3IbLMflSgBRGRP7JSSzGnWalYdpnV1MQu1tBWWklqvr3fp2dsOytSfOFh3/l2 - eJ7tnDMGkkmzGCqigsARhPlUQqCi8nEd9v7GEYP5mFcI4K/e/hGHeQ2B7p4+1HV8Nf6Kw4a5GGxtCHzv - 7sU2nR4lbr4/AUBFKIeD4GKYBL79+IX6rm622U8nSgnX4SC4GCaBL50/OXwTwIUY1ohcQkCn/84ZDLBP - I5p16TBl7XYIoaXVwI54RC4h8LG9k/OvQPIOmEZUJW2F+XRoPbBrOiKXEGj9rOdYCqi2gxXhnLQNIo6f - n9tEa7ViI79PoojIJQSaP3RwjAOJaSAjjhL3N+9zrD+W499UVJnSeeVmWDvtlcWlgCedZnK5RC4h8KZV - x2FryQSYmrAVjh/MnP46/57yS7VmZ9+zxr1Yr92NtQ1pWFmfiBevL9QpUqE0JhHcyWuImLsMAU1zG4et - V6yHC1l5oe+evNmD1ZoteL9OgaW1K7GkRoF3H8ZigTocb5bFY8bZWbpoFVwh7yiCR8xdhsAz7XuOh9QD - D2R6twyIEzG/JApz88N7z+T5d+VcDezKL43Ea4UxeCjTqyNUDpUBYeBFXjvjgOAyCdS9asXDJ3NQFj3u - 7eWCyG/FjxR45OyMr6s3S1qCYqE8RA654Uq4dOiUV/v+E9P0i1ZA9Zwg8COnA2HyDZiLYRw4dyAjC50n - z8awBBvNbbWyZ+8x10+By+GONARCbe1gDBPJloCvfKODluQ10mD+qDK5LWFyD6pfvOUYBzydXL0v2I+V - rI9Mhud5BQE9i+RQPt2P30BBYrM4HmYSNf5REGS0b5CzYdKq+iaOITA44wmPiLXwaFfGhDbZMkinYxNJ - 8CpwXxgHobQcPbhv8XegrtNyzAPsOtqHJUPeml1jm/1jYDkdM5G5hB3bDL6KhknLal9xzAN8gpMgVZHm - oKUAuwx29H420c9O/l9KHms4bC0KLFCAY6CSHr+VoHJy88lWbEjHoqoXWPzw5ZCxGKCxkslBLo22L1+6 - ahPeUj/FwgfPh8zpSzfQ0cWrwVKAjfXcWFjjPm9isWSSbx/7JEPF0cWzcYzE7dTfAmysfSLB2z0Awm1H - 8ycnjrD4N/kX4gEg8A9sAFSe4VuPvgAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkEzN0Y5NjgxNEE5MDExRTRBMzU1RUM1MkVEQTU3 - REQxIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkEzN0Y5NjgwNEE5MDExRTRBMzU1RUM1MkVEQTU3 - REQxIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MUU1QUVCQUI4RjRBRTQxMUI2QTlC - RjEwMkVGQzEyNEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4Oz1B+AAABO0lEQVRIS7WUP0sDQRDFt0snIcEiklhGJLH3k6bNp0ifYCUo - KWwMIRCx0EYxEEL+IOPO4SxzczN7d7gGfuzd7Hszd9nHOQD4V9RiStRiStQi0b68GXkgwkjzcdQigU1O - 32CC+9IjUYsENvjY7EySDHhev5skGXA3X5r8aYA3lx0wET1otYgmNMcOku+jXtMg4QJFJMb1a7uPmjUd - rVzHDfDy9pmJaZViCe5rPq7hYpgvXjPw2hNtTqBOevk+F8L0YRGQQosyHxfSf0jUegPLZwkrNedYfi6o - 9Y2RWP6cACPHYnf4XauQablfHYAxo6jt9sfwRGWgVvrVASKmdd7g2OoN4P5pVYhqbgCPmnPuzHPtua1C - s9OHyeyxEFU+IJcCb2p4zj3dKjQvrsat3jD4CwNCIcEv14/fpAfcDwXsled4Tu6+AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlGMEQ1RDBCNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 - MzBCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlGMEQ1RDBBNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 - MzBCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzFDMDRERTRENjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6zemTaAAABh0lEQVRIS7WUvUoDQRSFEwiBKPEHsRAkb+ArWIsv4CNYCSKI - jRD8a1S0m9QhdTobG5uARZogBJSkiLASFJJChQiRcJ2z2bnMZtbxCnrhY3YO556z1aSI6F9JFP+SRBEs - FFaUhoSopAyQKGIBi58jEuErcQSAhY/hyP5DL8Y7mQMcAcD8Phh+u2Tzk9cRAMz914G4wOd1BABzt/cm - LvB5HQHA3On2xQU+ryMAmB8en8UFPq8jAJjvWk/iAp/XEQDM9WZHXODzOgKAudZoiwt8XkcAMN/U78Ml - CcY7mQMcAWhz+FRc3zZFREXypwKYEiG/e+ykc1WYVRrCGUk8nGUHsyic6nKeetUK4dTESjjLDjZUlqaV - hiS8lEsh0Z1LTFYs2FBazFFwcUzB+YE+T8bffD+i4LRIwSV0jdZaO5vhHXtRPmfFgg1n81mlIQnt/W1q - bKyH34dz2XKUz1mxYBaFU5zJUG1tlXDu5TMcjuEsO5hF4exOpZWGtnLpWDiGs+xgFv9gxlmU+gIVyyIX - YCSg/AAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - 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 - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVGNUQ0RjNENEQyRDExRTRBQ0ZFOEVGNkU4Rjcw - RkEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVGNUQ0RjNDNEQyRDExRTRBQ0ZFOEVGNkU4Rjcw - RkEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzUxNUY0MjEyRDRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz7jldwbAAAEyklEQVRIS6WWDUzUdRjHoeXWVktIc74MLREMUxBQV4RYkBmL - SBwSoZIFCgULlOJFDJDxqkiAqGgoiIQ6jaFLB1EqUaC8iMgdL8cJB3fHwR13HO8Hh3x7fn+pwN01nM/2 - 2X77Pb/n+33+v/3/95zBbGOVnZM58QHhRKwgnp9KPXuQ2CtJ6ScOjGo0fcMjI93llVX55us3rqbUc49P - zDLyw9auL4iw5l+IsMY//BRujcygdcg+ug83rpzCsVhf3C6+hHg/W+R++985BtU3pey1cCCpOYQhJzo9 - 8kPX1tZcDoS0Jp2jrCgWmakhOJMVA4GwBd1KNSQ9veiUdeNifjqyMsJxveD7f8+z2rPBlg0kNZ9gJjMj - L8RqQlSegIbLX6CuYAcOBm9FHe8B2rt70SZTgNfehTphJ+paCaEYjSIJkmP24PaPnrhfsBP8okCcCbZ8 - RFLmxIuc6PTICV5Dh4IxNqSEemAA6adzwBdJ8VeDEL/XNqGkmo/iKh4HW5fWNCL7QiEqq2sw3N+Dijwf - nPx6FUjKkpjLiU6P7MDVqL/gj8nJSY4bpbcQnZyK8EOJCI2Ox3dRcY+JjkNYTAIi4w4j7+JlKBQKjI+P - 42qqJ9J832AGawkjTnR6ZPm/iXvn9+ARiWsnJjCu1YLeGshJQCKVolMs5hBLJOiSydAjl0OpUmFweBhj - ZJAfuxVJ3ub6DTJ9LVCd40Pij6AZ01IRoWVGumE5dmZEM45RjRbnolwR72Wm3yDt85W4e2o3FVLnGg1G - xsYwSvDEdxB03gEa6vJwSopOhkZHkRPhgkPbTfUbpOwwR+XxXdT9OM79EQ/lgBLNkjpsz1iMP5t/oU7H - dIoz+oeGcTbUGVHblus3SPJYgfI0LxLSIPmaL4LyHOB5bClK6gswNDLKoUucoezvx+n9W3Dg49f0G8S5 - LUfZEU8MkpC8T43YQi8UVp3kutOFenAIvep+dClUkClVOPXNZoQ6L9NvEE3uN+PdMUBvRXevCgqVmjob - gGpgEH1PwPZYTq7soy9bDolcgRNfOWL/ZhP9BpEfLsVvMW70kQ1C2qMgEyVnUiUoQ2CuPZTUra7rYYi6 - ZDi+910EvbdEv0GYkwlKIj+BijrL+jUKbdJO1LZWwD19EUrrr0Cu6tMpzhCKJcj40gEB9ov1G4RsWoLi - UBe6V7r/n70RkPMOPDJMcLXqLPc0DF3ijBaRCOneG+H31kL9BkF2i3B9nzN1qoagQ4yDlzxQUE6/lHRd - XfLeGbA9cbccwk4JHggegi8UIc3LDj7rFug3CNiwENcCt6CH3ojm9g7qqoN79HZpF9rpjjumYGu2x3I8 - 4UNU85pwv0WAox5vY7f1/xj42SxAkf/7kCmUuNfUiho+FTa3gtfaRh22o6lNxMHWbI/lKut5uFVdh7sN - jTiybQN2rpmv18DQ1+rViUJfRwia+bjXLEB1YxNqyai+VUiditDY1sHB1myP5e408FFR34Cb5WVIdLXF - Zxbz2DywJYw51WkxZ9eqebxUFyvk7rDHD24bkOhig4RZEM/4yAZhm1Ziq6lRG2mxscmm2owwdF72suOn - ZkZCTzNjuJsaYdtT4vr63E4L4xcCSYv9IXiJU30i2BxlzmzkWRHsLp8GVsNqp2aygcHfZtZtYIryU78A - AAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkUzNzJDMjE3NEFENjExRTRCNjE0OEVEQzI4MEM0 - RTZDIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkUzNzJDMjE2NEFENjExRTRCNjE0OEVEQzI4MEM0 - RTZDIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI3NUQ0QkNENDRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6PyaLfAAADMElEQVRIS6VUXUiTYRT+vi3Tzd+ps23+3KRigtiPkolEQReG - UYTkhWatpWlWGkRdddfdSPImqUAJjSIT00oxLJIk0cR+tFSyzDJtgaMkDEPkdM7ZPvm2vS6jBx6es3Pe - 8zzvtm+TohLS/ov+AACStLgEQuJyLRJWYK1yzh/+FgCoQrpnfM4fOGBhcUlIMkEVkma4H4i1y2kFcMD8 - wqKQZILKZqTqmlTAWrfvMjhgbv63Dwm0hLWQohn1eNEbzrlfPiTQAtZCKjP1GXdAIC+r4XD+9CGBFrDm - RVJ1re6pZ0GyHHMvIawauYVNCFPfvvuQQAtYC6meKXU0amNsaGN/ZR60xIf9aIgN3cpGE9OzZCZ85nEm - pGiWlLABmuJCnUOXrNB7chdct4TUo32ANDbp4NuielDpqWfePdaPX6GrohSK4uLhlCEo96YlZLbOFHzH - oJXjMSBcGn4/zQGovEDqXXtzeTb+BTrKj0J3+Q54djYP7EZdTU2MPjFSK8eieQR9QtLg6GcOQPWgqKeQ - ZyOfoK30CDw+lg2Ot3Z4VLoNqo269mCNHIa2WjYn9A1PcAAqU6m9VV3TF9psOwwPS3JgZugCdNoyocwU - jU+RlImWBpezGz0vxzkA1YOiHvPFO7Ca1kGHLQtmXp2HdutmqN+/F6JiU+h3kOpyVeHJwBgHoLIpqajm - 189HoaG4CNqsGTA1UAWth9Lg6r490PygGyLjUikgzuWqQlffCAegelDdUwLqigqhpXgjTPYeh+bCFCg2 - RkEk3vxuVz/P0c43oLP3DQegLhspNalSFxiNcLswHT48LYNbBUlQk7ebzenmyhm08w1o7xmiAP6hRZiT - 70eYkzpctUuJWdHmwWs74+F1Uz7cyE+E4ohQB5mHm9a3GywpTXzektyKduIAIsKI3ISkL4rIdYle05C9 - VrZVBmvtl7eboUyv7V4jSQdwRn8FdI72iErtCUxnIuifkJ5hUqUOq9Jr7OeCNU6bTpNVqtMcDJSldOwn - KnOk+jypJ5QANRWc0cs5SEelXr54QidfwVYAMoiHq4W/gNM6OaNCJ+diaUIqN/43+Atwg27t+9ZXBUn6 - A2MdqQeVc5pWAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjUzQzNGNDI5NEQyQzExRTQ4QkE1QUNCMEVDRDZF - MDVEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjUzQzNGNDI4NEQyQzExRTQ4QkE1QUNCMEVDRDZF - MDVEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI1NUY4OTYyQTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6IsaOmAAADF0lEQVQ4T62U/UuTURTH+0nICqRI1ERMMyNQe8N0ChqBwQhN - yvwhEgJjVCqJ/qCibZo6tzQ339h6Nre5prapUzc1XzItX1ilzuWMLLVAen+xf6DTuTxjdxsFVj58ebjc - c+7nnud7z3228DbpIaDFH/CfoqCn72DIDvNfPDM2KAqyr8PcJxqY+QBTb8kkjocXQTsKigGwfqYJHqIg - 1OxHGHvlWPx4hXB1YyA3g4CBhqst+piEnrDA3rA95vBAY1x8d7lq/DVZwm5PQZNvoKYdypSgHgbVEIh1 - cLOZzOCbSSsyRQRba6uWtcpVLbPcwlglInNUCJNWWKqABqMLCGvGlfpJELaQ/V1Vd1lujAhe0chtUrH5 - ZExnmJ85MdomEa+qZMbIEF2BHGunILSjdZwYgTt4gJqjjj0Rltml1Zq9AeL0Mn71Wn2mtDU80MIvsFTw - O+KPIoWC8BNYRIUaqrRQroJKjQOk9N+xLBF2pXJFKfnsDGYa8gS6xOO2whyMuoHaHpGzZ/pBM0IMrtXD - nT4HqNHXe0lYoogMFeQP4jbSDkCPTUyXmnNoPutSo+9WN5DEQDyeWCWnhqm4p7Oimt3b54rzmmKPVHKz - 0Xg0AU1pz87VJp+yXOfd9t3mBmLXsGrsJhSsDtF4iOWxKdpzyQNnuRW7vEUp13obFG05OVUBPtO5V1Sn - k5q4SX8ENfWA6C7xHsP981Bb2sf38ZKd4JhSuXUJHPHhg/WJnAeZFw0Xzt/w8erRtLmBnB/CSmaC599I - 2PYVRl+CXigu3R9SfCC0Pf1MZ1oqvqvjogX7gtRFJfb1n24g7GblfQcFP2fkBYm5anxqQcbLKgzyK/Df - WRTkV5+RMTg84ZrgAOHo4ZIDVNdJw67CpsVLZ5gifj97Typlq2ZFQXj8LKh5EHpnaIar8N+Al5l9Y9Vs - T7OiIAzjqaMsa6QJnBkeWvgOHdPkAuIV67PSeQpCYYZplsZ+KyyWLRyFF8D553EDbURY770J0rrYJbda - SYE4iWb9NcgpRKDrOMAWwYP6d5BTaC52zyaAWDlAm/DweL8AX9zXukfxHsIAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - 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 - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjYzQTM5NEY4Mjg0OUU0MTE5NDBEQTc4ODZEQzk5 - N0NGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJGRTU5OEQ1NDlEQjExRTRBRUVDOTkyMjQ5NzEw - REUwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJGRTU5OEQ0NDlEQjExRTRBRUVDOTkyMjQ5NzEw - REUwIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTY0MkI1RjlEQTQ5RTQxMUE0QzNB - MjdEOTJBQzc3QkMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjNBMzk0RjgyODQ5RTQxMTk0MERB - Nzg4NkRDOTk3Q0YiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6B5sF9AAACe0lEQVRIS7WVb2jMcRzHL7UHanF/Mts5prE/1li3kAfu5Ak7 - 5IHNobBkSC2UIuGJkrrSWRvTmHQWK8U1T8jqUtYwkZpaGjV/Js6to5YwfXze39+fu/v23f36hXe9us+f - 7/v9rd/dr3MQ0X/F4Zm3+K9QhWajNNlBFZqN0mQHS6lMdrCUyqSgimllUsy4XmOmp+QRDllQWbygjjq6 - uimZStOX8a+ixox3pXrM1JLCDAqYJmY7c669M0bff07mcLbtEl9QE8k6V6BH5ooXMsHZZX7ae+AY7W45 - SrPm19LbsSR9m/iRA2bYGefggVePzUgKBzeu9sQpmZ4QcG/WMtk7eLjv0WMz0kOz+TX6MUXvP6cFeNbD - bz6YvQFm2Bk9PPByZO6jksLB5KvRTzTyLikIrG2ktsvXzd4g2hGjYP1ms4eHvb850qkl65LCQW/ntVs0 - 9HpMcPx0K1X4V1Ff/3NzhnphbVDsjBk8Lm/VE44s0ZJ1KS4Ie8uXUvPBE7Tn0ElCzTMqrV5BO/cfEaDG - TD5X6PFFONLygsTF7jj1vxihyPkYNTS1iFrFxm37KHIhJmp43L7qZxzp0pJ1SeHhQGgLJQaH6fb9R1QX - 2EB3Ek9FryLe95j8K9eLT/TB0FZcskOP1iRdkIh23aR7Ay9pzaZddKY9Jup8nIpeoXXhZlHD655b85Bj - p2npLOmCML+dD/iTZhaX3+UvbRB1PpzeygFnSUUvatecRUMzisoOc+x0LZ3FixxYhQyK1cxyZhkTYhqY - RgnM6hmcwVl4ljDI0KS4AC+Kmyli8Jv2MF7GNwXY4QzOwgNv5mWTL7CLpVQmO1hKZbKDpVR/1P8OcvwB - lh7gOXXZq9sAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkNDMTJDMTRENEFDOTExRTRCRDk4ODBFRTFERTlG - MzY1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkNDMTJDMTRDNEFDOTExRTRCRDk4ODBFRTFERTlG - MzY1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjYwQjFGREZDNjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4rRYZ8AAACEElEQVRIS2MQltOlCP///x8vxqqJFIzNUGSMVRMpmCDApokU - TBBg04SEpwHxfwJ4GtQo7ACoABfODY3N+P/773+82C88GWRJBtQ4TIBmKAyziCsa/L98/c5/37Ck/3Wt - fVixT2ji//OXr/8XU9T/zy0kzQo1EhVgMRyEm0uqW//vP3Lqv5Cs9ml+CZVp/OLKs/nFleYgY0EZzQt7 - Dh7/n1/eCFLXBjUSFWAxXENZ1/r/g6evgK5P/l/d1IMXe4ck/L//+MV/RW2r/0IyWppQYxEAiwWT+qfN - /7/7wHGQq84BXT9FQEq9S1Bas0VQWqMVFWu2ANWc2LbnyP/eKfNA6qdDjUUANMN9Tex8/j999eG/LzDy - yuo7icIeQfH/n7x8/x+kV0hGOwBqNASgWbBt+frt/7cCXQRko2Cg9xfCXA5io8uv37bv//J124G+0NkF - NJYRYjoQACWR8f97T99gxSA5oHIpECZCHTvIbDCAGgy34MaDF1ixo08k3LWO3hEY8jC9IBporBDEdCAA - CqBYcPnOU4ow1AKQTyEA3YKz1x9RhKEWyEBMBwJ0C05cvocVl9R3o2BsakCYoAWHz9+mCBO0YP/pGzhx - flUHGGOTg2GCFuw+cY0iTNCCHceuUIQJWUBMBYMX80uo7gQai9MCkJAoENsDcQiZGKQXZAYEYLEAlM1B - CkCuIAeD9EKLCgYGAMLPWmGxemtkAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY2MzBBRkRDNEFDOTExRTQ5Q0JEQkU0NDNBNTYy - QTY5IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY2MzBBRkRCNEFDOTExRTQ5Q0JEQkU0NDNBNTYy - QTY5IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjgwQjFGREZDNjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6+q/BOAAABR0lEQVRIS7WVTUvDQBCGe/PoQQQP4s2jv8E/4W/rXxEFQRAp - olCwfjRUJWK1ltJgNJh+6Toz7OCSzrIZFwce2LDzvs8hkDSMMf/K7wFmbWunCRgFTQp6RhKY+ZephSvh - Du7hoWf3AgPT+XcteLcqcUcUlNMFYYNLuPeVXZK4IwqKckZMZgsveO/u8jNKqMiOKHgrJrWQdqsSUTDO - Pwm7LBK6pzIYUTDMPoi8KGvB+4wVrGCfKHge5VFYwTr2iYLHQUbgWYObg6pN7BMFd/0RMczeVXAuKOim - r1EEBVf3LwSeNbg5qPIL2skTkQ7GKjgXFJzfpFEEBa3LBwLPGtwcVPkFJ+0ekcAL08C5oOD4IokiKDg6 - uyXwrMHNQZVfcNi6Jjq9vgrOBQX7p50oQgLtT3+J1Y3tA6iSBXbwS7gL7P0RzNqvqWn8AE4SSnpUkJk6 - AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFGMTBBQzY2NEFDQTExRTRBQTYyQjA5QjRFNjBF - MzcyIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFGMTBBQzY1NEFDQTExRTRBQTYyQjA5QjRFNjBF - MzcyIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6M0EzRTc1RjdDOTRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - 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 - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjg2NjBEMzE2NEFGRTExRTQ4NTY1QzE4RjMzMkM0 - NEY4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjg2NjBEMzE1NEFGRTExRTQ4NTY1QzE4RjMzMkM0 - NEY4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTU5NUNEQTdGQTRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz5BZhOvAAAD9ElEQVRIS7WWe0xbZRiH95+T6DQxcc7NLfrHTBaR4NyFmDAy - ljFwwERGpmRxxmyY6QbqgogDhqluOpFLlm6AFslGRVlXKISVS7tByzgUOF1vtLUtLVBogQ4YsLoN9ec5 - 3+xXyIiJWdrkyfed9/u979PLSdsVz6wPfyQA/Cehf3DPQsiBECHkBVj4CyGBn00E9xb+DglU4L/35xIM - 7j78qCpAlVqAg6KNkOtqMTPnx9TcLOzjFty5u4CJWR9u++/AM+NBh7WRnM3/cX/JHCqY899fwu35u/BN - z2HM60NcURjB7hwmNX4/PjmNWzPzZL/v3FPIEK9DQskTNOudmML0rD8oiD0d9hAutxej4z6yZ3pZaA0D - ZO8c8dDM8d9egtSxGxetMTiri8Ih8XpS79cZ4fZOBgVu7y2YrINg9QOIPvU4QcPqyWp1DJM6vwbOUivW - QGSMgdi8E7mqSGQqIpAoXE3OmuRtuKHRwjU6HhQMe6dgG/LA4hhBVM5KJJatJmsPa8TNARup8xm+1tnd - R9bkc88hicsllnGrcC2p1Te1QKliYLQ6SZ4KhriLYe80oaa9Ghk/JEMkqYJS3Q0DF3a4J7D9s1V4s2QN - Nmc+hviTLyOvIgv55SeQe/4YUgu3QlRXjbbrN6A12TDoniSzqMDh9lEszjEoGQbF4u/wa+tlmOxu2Ecm - 0dglR86FjxEteBZx2Zsgab4KhaoH17lXJFO04nKLDCrus+L7A7OowOLyUsxODwy2EaTm78BrWU/io6KD - YE126KxDaFDKEZ4Rhg8E+1HbKAOjNZP6TYsL0mtNaFYrUCmrAGu2YWBwLCgw2Ecf4qeGakRmPo203D1Q - dPWjz8TdBGYX0guSIK5vgLyDQa/BDr3NTdAYrYg68iI2HliJiitV6DM6ggLWwt0p/8J9PeFMsRDnJSLE - H38DsXEJSEhKAaOzod88hMjXt+KTz/PQ2WtCLyfl8wE2RbyKkyWFqJLUQdqu4ASvPBBojE4KH9wVtxel - v5Tj5zopuU5MSQOjt6NG0swJtmHtCxtwrUePHsMDQaA3J/9rfJpTgDY1CwWjDwq6dHYK37BzdwJqZe3I - E3yP9ENHsG//u+TsvcNH8dXZMryVlo4ioYjmA73ZnCA7T4BO1gqV1hp8izr6f6fwDafOlKLgdAlidsXj - 29JKJHOCFrWOnAXga4F8gIjN21Df1k1nUYFSY6bwwUvSVjy/bgN2cILKmnokvf0O8r8pRvr7H5JMcwdL - zvkcn1/cvxgqaGVMFL6BX6Nj9+BLQREuXLyCvSkHEB65BcXll2ju8LETyPqikOaXgwqudhlCQkAQ8p/M - R2K5fxKLWbbp/7Dc0CBY8Q+pPmOq0VkzzQAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjIxNUQ2NkYyNEQyRDExRTQ5N0NDRjdBNTBDQjc0 - MUY3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjIxNUQ2NkYxNEQyRDExRTQ5N0NDRjdBNTBDQjc0 - MUY3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkU1NUY4OTYyQTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4lOJsMAAADqUlEQVRIS6WTf0hVdxjGj2beulPvD52aU6Np6tKBhUWsYjIH - prDYSlZjNPsjlUnkMmSx6eJqS/u5zXGtoKKEMaEt2lpZ20RX01Bjad31A8UakdZ0SyrLJfHueU7H0zl6 - U8QXPvCe933e5/3e8z1XCY5+dVKIyJh4HZoI48bQE5kU44a3ISM45TxQCTxgQIM5a/M0m+eHN1OC4TfB - 96mZ78reg9+I50qn3HvwSIU5a+xBcwyka3ajY3DoySgwUJ44P02O/vSz4HlMfqitk7mLlnLRNs3SHAOD - QzoQOYF7de4Gud17V1DTuf/wP7nScUOFubF3559+4QxngUOzfhr9DwZV0AgHVZ99/oXcvf9IUNPZd6hG - 5qS8Ic7IOb2EOWtGDWdKtuzmkj300uwVpa9/gOZTae6qqBQ8myjb4RZbeEyjJcBROt0W6rLaw4unBYYU - 2mfMrmNvpJ4ewdFJe+Hnry7o7rvHBV+v/7hUkJtoab8qobOSZarlhfX2iLhjS5d/IBkrsvlLDmPJEvao - GTlXsKmMS9zqApjnZWatkeu3+uSvnn9NlO2skqCwl2tt4bH7N7l26nXmzqgkFxZVUWOcIfSiZ3BU0odc - 0Hay/px03Px7FOuKXBIUOms/zDwn6pr0OnOcsN0ZlVhEjXFmGHpCc0n9BenvZMulzlvyZ1ePiZLySsG7 - /hYn3VpYXKHXmdtnxLmx4CtqjDOEXunLs3F3sS7lwrWbCoT71hYUC3ITJxta1TsIDImOh+ZA2rL3hdjC - Yhr8pwdlsUfNyLkceEFThxt4TWnxXFf8rTab46WEmo8+KRc8m9jwaQXed2I1Trw4IDgqx2oPK8EFb4T+ - KHsj9fSA+Rkf3ynvYUGi0tjWybv2DXBGxjsiEo7kF5XJ7xc6BHWdzdv3yOzk1/lOu3BxN5izZtRwJr+o - VDX3s1jz4ZkCHErD+WsqiCn4xuPsEfHfvbUqV2rPtgnqOvWtV6Xm+G8qzI09ajmjmvtPy4PXQhBCT+XX - 5ss6CD/wIl5H9SspaVLhrhbUx4QaavG1/YLZVWABPTQvRTnV5DGhNZyBITPz8cqaU1KXSeHmXXLgyGn5 - seEPFeassYfDXLTawr7EzNsgmbOax9M4cfbiKBC+IBDEYjgXn9spfKrduIPHBHkPXke9JcBZCs1KkEqt - NsPZZ4H/gVcQPsAC+HMTwCKQAXhSwpw19qihljPm8GZuBDG8yAZCQYQGc9a8Gw+HN9OJMG54G5oIY4ei - /A9dc78cqtG90gAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 - RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL - ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH - s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW - uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx - xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd - iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ - qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW - GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE - NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n - KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw - qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI - HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq - wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q - 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 @@ -4803,6 +4005,804 @@ ++H/A/YDv9/V87iOlrYAAAAASUVORK5CYII= + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjYzQTM5NEY4Mjg0OUU0MTE5NDBEQTc4ODZEQzk5 + N0NGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJGRTU5OEQ1NDlEQjExRTRBRUVDOTkyMjQ5NzEw + REUwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJGRTU5OEQ0NDlEQjExRTRBRUVDOTkyMjQ5NzEw + REUwIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTY0MkI1RjlEQTQ5RTQxMUE0QzNB + MjdEOTJBQzc3QkMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjNBMzk0RjgyODQ5RTQxMTk0MERB + Nzg4NkRDOTk3Q0YiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6B5sF9AAACe0lEQVRIS7WVb2jMcRzHL7UHanF/Mts5prE/1li3kAfu5Ak7 + 5IHNobBkSC2UIuGJkrrSWRvTmHQWK8U1T8jqUtYwkZpaGjV/Js6to5YwfXze39+fu/v23f36hXe9us+f + 7/v9rd/dr3MQ0X/F4Zm3+K9QhWajNNlBFZqN0mQHS6lMdrCUyqSgimllUsy4XmOmp+QRDllQWbygjjq6 + uimZStOX8a+ixox3pXrM1JLCDAqYJmY7c669M0bff07mcLbtEl9QE8k6V6BH5ooXMsHZZX7ae+AY7W45 + SrPm19LbsSR9m/iRA2bYGefggVePzUgKBzeu9sQpmZ4QcG/WMtk7eLjv0WMz0kOz+TX6MUXvP6cFeNbD + bz6YvQFm2Bk9PPByZO6jksLB5KvRTzTyLikIrG2ktsvXzd4g2hGjYP1ms4eHvb850qkl65LCQW/ntVs0 + 9HpMcPx0K1X4V1Ff/3NzhnphbVDsjBk8Lm/VE44s0ZJ1KS4Ie8uXUvPBE7Tn0ElCzTMqrV5BO/cfEaDG + TD5X6PFFONLygsTF7jj1vxihyPkYNTS1iFrFxm37KHIhJmp43L7qZxzp0pJ1SeHhQGgLJQaH6fb9R1QX + 2EB3Ek9FryLe95j8K9eLT/TB0FZcskOP1iRdkIh23aR7Ay9pzaZddKY9Jup8nIpeoXXhZlHD655b85Bj + p2npLOmCML+dD/iTZhaX3+UvbRB1PpzeygFnSUUvatecRUMzisoOc+x0LZ3FixxYhQyK1cxyZhkTYhqY + RgnM6hmcwVl4ljDI0KS4AC+Kmyli8Jv2MF7GNwXY4QzOwgNv5mWTL7CLpVQmO1hKZbKDpVR/1P8OcvwB + lh7gOXXZq9sAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkNDMTJDMTRENEFDOTExRTRCRDk4ODBFRTFERTlG + MzY1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkNDMTJDMTRDNEFDOTExRTRCRDk4ODBFRTFERTlG + MzY1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjYwQjFGREZDNjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4rRYZ8AAACEElEQVRIS2MQltOlCP///x8vxqqJFIzNUGSMVRMpmCDApokU + TBBg04SEpwHxfwJ4GtQo7ACoABfODY3N+P/773+82C88GWRJBtQ4TIBmKAyziCsa/L98/c5/37Ck/3Wt + fVixT2ji//OXr/8XU9T/zy0kzQo1EhVgMRyEm0uqW//vP3Lqv5Cs9ml+CZVp/OLKs/nFleYgY0EZzQt7 + Dh7/n1/eCFLXBjUSFWAxXENZ1/r/g6evgK5P/l/d1IMXe4ck/L//+MV/RW2r/0IyWppQYxEAiwWT+qfN + /7/7wHGQq84BXT9FQEq9S1Bas0VQWqMVFWu2ANWc2LbnyP/eKfNA6qdDjUUANMN9Tex8/j999eG/LzDy + yuo7icIeQfH/n7x8/x+kV0hGOwBqNASgWbBt+frt/7cCXQRko2Cg9xfCXA5io8uv37bv//J124G+0NkF + NJYRYjoQACWR8f97T99gxSA5oHIpECZCHTvIbDCAGgy34MaDF1ixo08k3LWO3hEY8jC9IBporBDEdCAA + CqBYcPnOU4ow1AKQTyEA3YKz1x9RhKEWyEBMBwJ0C05cvocVl9R3o2BsakCYoAWHz9+mCBO0YP/pGzhx + flUHGGOTg2GCFuw+cY0iTNCCHceuUIQJWUBMBYMX80uo7gQai9MCkJAoENsDcQiZGKQXZAYEYLEAlM1B + CkCuIAeD9EKLCgYGAMLPWmGxemtkAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY2MzBBRkRDNEFDOTExRTQ5Q0JEQkU0NDNBNTYy + QTY5IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY2MzBBRkRCNEFDOTExRTQ5Q0JEQkU0NDNBNTYy + QTY5IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjgwQjFGREZDNjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6+q/BOAAABR0lEQVRIS7WVTUvDQBCGe/PoQQQP4s2jv8E/4W/rXxEFQRAp + olCwfjRUJWK1ltJgNJh+6Toz7OCSzrIZFwce2LDzvs8hkDSMMf/K7wFmbWunCRgFTQp6RhKY+ZephSvh + Du7hoWf3AgPT+XcteLcqcUcUlNMFYYNLuPeVXZK4IwqKckZMZgsveO/u8jNKqMiOKHgrJrWQdqsSUTDO + Pwm7LBK6pzIYUTDMPoi8KGvB+4wVrGCfKHge5VFYwTr2iYLHQUbgWYObg6pN7BMFd/0RMczeVXAuKOim + r1EEBVf3LwSeNbg5qPIL2skTkQ7GKjgXFJzfpFEEBa3LBwLPGtwcVPkFJ+0ekcAL08C5oOD4IokiKDg6 + uyXwrMHNQZVfcNi6Jjq9vgrOBQX7p50oQgLtT3+J1Y3tA6iSBXbwS7gL7P0RzNqvqWn8AE4SSnpUkJk6 + AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFGMTBBQzY2NEFDQTExRTRBQTYyQjA5QjRFNjBF + MzcyIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFGMTBBQzY1NEFDQTExRTRBQTYyQjA5QjRFNjBF + MzcyIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6M0EzRTc1RjdDOTRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + 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 + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjg2NjBEMzE2NEFGRTExRTQ4NTY1QzE4RjMzMkM0 + NEY4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjg2NjBEMzE1NEFGRTExRTQ4NTY1QzE4RjMzMkM0 + NEY4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTU5NUNEQTdGQTRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz5BZhOvAAAD9ElEQVRIS7WWe0xbZRiH95+T6DQxcc7NLfrHTBaR4NyFmDAy + ljFwwERGpmRxxmyY6QbqgogDhqluOpFLlm6AFslGRVlXKISVS7tByzgUOF1vtLUtLVBogQ4YsLoN9ec5 + 3+xXyIiJWdrkyfed9/u979PLSdsVz6wPfyQA/Cehf3DPQsiBECHkBVj4CyGBn00E9xb+DglU4L/35xIM + 7j78qCpAlVqAg6KNkOtqMTPnx9TcLOzjFty5u4CJWR9u++/AM+NBh7WRnM3/cX/JHCqY899fwu35u/BN + z2HM60NcURjB7hwmNX4/PjmNWzPzZL/v3FPIEK9DQskTNOudmML0rD8oiD0d9hAutxej4z6yZ3pZaA0D + ZO8c8dDM8d9egtSxGxetMTiri8Ih8XpS79cZ4fZOBgVu7y2YrINg9QOIPvU4QcPqyWp1DJM6vwbOUivW + QGSMgdi8E7mqSGQqIpAoXE3OmuRtuKHRwjU6HhQMe6dgG/LA4hhBVM5KJJatJmsPa8TNARup8xm+1tnd + R9bkc88hicsllnGrcC2p1Te1QKliYLQ6SZ4KhriLYe80oaa9Ghk/JEMkqYJS3Q0DF3a4J7D9s1V4s2QN + Nmc+hviTLyOvIgv55SeQe/4YUgu3QlRXjbbrN6A12TDoniSzqMDh9lEszjEoGQbF4u/wa+tlmOxu2Ecm + 0dglR86FjxEteBZx2Zsgab4KhaoH17lXJFO04nKLDCrus+L7A7OowOLyUsxODwy2EaTm78BrWU/io6KD + YE126KxDaFDKEZ4Rhg8E+1HbKAOjNZP6TYsL0mtNaFYrUCmrAGu2YWBwLCgw2Ecf4qeGakRmPo203D1Q + dPWjz8TdBGYX0guSIK5vgLyDQa/BDr3NTdAYrYg68iI2HliJiitV6DM6ggLWwt0p/8J9PeFMsRDnJSLE + H38DsXEJSEhKAaOzod88hMjXt+KTz/PQ2WtCLyfl8wE2RbyKkyWFqJLUQdqu4ASvPBBojE4KH9wVtxel + v5Tj5zopuU5MSQOjt6NG0swJtmHtCxtwrUePHsMDQaA3J/9rfJpTgDY1CwWjDwq6dHYK37BzdwJqZe3I + E3yP9ENHsG//u+TsvcNH8dXZMryVlo4ioYjmA73ZnCA7T4BO1gqV1hp8izr6f6fwDafOlKLgdAlidsXj + 29JKJHOCFrWOnAXga4F8gIjN21Df1k1nUYFSY6bwwUvSVjy/bgN2cILKmnokvf0O8r8pRvr7H5JMcwdL + zvkcn1/cvxgqaGVMFL6BX6Nj9+BLQREuXLyCvSkHEB65BcXll2ju8LETyPqikOaXgwqudhlCQkAQ8p/M + R2K5fxKLWbbp/7Dc0CBY8Q+pPmOq0VkzzQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjIxNUQ2NkYyNEQyRDExRTQ5N0NDRjdBNTBDQjc0 + MUY3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjIxNUQ2NkYxNEQyRDExRTQ5N0NDRjdBNTBDQjc0 + MUY3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkU1NUY4OTYyQTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4lOJsMAAADqUlEQVRIS6WTf0hVdxjGj2beulPvD52aU6Np6tKBhUWsYjIH + prDYSlZjNPsjlUnkMmSx6eJqS/u5zXGtoKKEMaEt2lpZ20RX01Bjad31A8UakdZ0SyrLJfHueU7H0zl6 + U8QXPvCe933e5/3e8z1XCY5+dVKIyJh4HZoI48bQE5kU44a3ISM45TxQCTxgQIM5a/M0m+eHN1OC4TfB + 96mZ78reg9+I50qn3HvwSIU5a+xBcwyka3ajY3DoySgwUJ44P02O/vSz4HlMfqitk7mLlnLRNs3SHAOD + QzoQOYF7de4Gud17V1DTuf/wP7nScUOFubF3559+4QxngUOzfhr9DwZV0AgHVZ99/oXcvf9IUNPZd6hG + 5qS8Ic7IOb2EOWtGDWdKtuzmkj300uwVpa9/gOZTae6qqBQ8myjb4RZbeEyjJcBROt0W6rLaw4unBYYU + 2mfMrmNvpJ4ewdFJe+Hnry7o7rvHBV+v/7hUkJtoab8qobOSZarlhfX2iLhjS5d/IBkrsvlLDmPJEvao + GTlXsKmMS9zqApjnZWatkeu3+uSvnn9NlO2skqCwl2tt4bH7N7l26nXmzqgkFxZVUWOcIfSiZ3BU0odc + 0Hay/px03Px7FOuKXBIUOms/zDwn6pr0OnOcsN0ZlVhEjXFmGHpCc0n9BenvZMulzlvyZ1ePiZLySsG7 + /hYn3VpYXKHXmdtnxLmx4CtqjDOEXunLs3F3sS7lwrWbCoT71hYUC3ITJxta1TsIDImOh+ZA2rL3hdjC + Yhr8pwdlsUfNyLkceEFThxt4TWnxXFf8rTab46WEmo8+KRc8m9jwaQXed2I1Trw4IDgqx2oPK8EFb4T+ + KHsj9fSA+Rkf3ynvYUGi0tjWybv2DXBGxjsiEo7kF5XJ7xc6BHWdzdv3yOzk1/lOu3BxN5izZtRwJr+o + VDX3s1jz4ZkCHErD+WsqiCn4xuPsEfHfvbUqV2rPtgnqOvWtV6Xm+G8qzI09ajmjmvtPy4PXQhBCT+XX + 5ss6CD/wIl5H9SspaVLhrhbUx4QaavG1/YLZVWABPTQvRTnV5DGhNZyBITPz8cqaU1KXSeHmXXLgyGn5 + seEPFeassYfDXLTawr7EzNsgmbOax9M4cfbiKBC+IBDEYjgXn9spfKrduIPHBHkPXke9JcBZCs1KkEqt + NsPZZ4H/gVcQPsAC+HMTwCKQAXhSwpw19qihljPm8GZuBDG8yAZCQYQGc9a8Gw+HN9OJMG54G5oIY4ei + /A9dc78cqtG90gAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 + RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL + ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH + s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW + uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx + xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd + iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ + qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW + GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE + NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n + KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw + qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI + HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq + wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q + 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlDMzFEOUI4NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 + NEI4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlDMzFEOUI3NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 + NEI4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDk5Mzk2NTZBRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz73sIMwAAADIElEQVRIS7WVa0iTYRTH56Uiysvm3TkvpLl5DRIvQYWVWl+6 + iNEVg0yhQqloQZHkLT+Y0YdAs75IpEUhzERZoZhsRpZlS7soblotsRwoxhqWeTrnYZtv+u7NsB74cZ5z + zv89/z17HzYRAPxXeIv/EpFXcOyi4BvKhfehv4FvKBfeh+ayqIUDlIgBgT8whpRYoT2fhgvNVJKBQT9s + hB8/QZDPpnEIjEhg0J5Pw4Vm0mwygG9T06BSqQQhTUhUMoRGpyxYT7OZwfhXC6jVakFIYzNYqN5uMGKa + BI1GIwhpghXJaJJi13d0dEB2bj74hsWzSDlXbzfQG02g0+kEIU2wIomdovzKdVifngnFFytBeb4cLN+n + WaSc6hfKKqB/eHTWoHfwExgMBkFII5MnQUD4WlAWloO26wVs35MDmifPmQFFyqlO/aKKqlmDp31DYDKZ + BCGNTJ4IPqHx8LJvACbNUw7p6e2HuJQMNIhhBuaHj3vBYrEI0tb1BoIiE9kJ9h7Oh7EJM+g/jEJuwVlY + s24ri5RTnfo5BedAIoueIYPumvomuHzjzm9cq2uCq7UNUH2rEarr7kNd0yP26Y+eKoSWtk4wfpmAg7kn + ITY5DUorq1g8cOQEqze3aplOEhRtJoMcL1mMTixV9IgD5a/tSBVDYql8AKOBQLEJtTP08gY/jjFiktKg + 5FIV21Ok3NazvmR2AvrFkCAJyGYk1comZAuHDM/AyLvHThfBveZ26NOPwI59eey7LsbhFCmnOvVJ5+Ef + rrYZLEU8EZ85+HLwW7ZCLMVTFWdkHoLut+/hgbYHaE9XN31XNsupTrWV3jKVs+uS3cyAD0cLe331jW3Q + qRt0CPUlQVHDKI+fN9iGo4W90uNnyuA2vvRtWTlQgxeg/dk7FimnOvU9/CNqUe47b7ANRwt7AfjpKvAK + Gt18Qur35ymhRfsKKLr5hN7EyzDq7humWrrcfSfKxbz/QlwcLDck1snZJdUzYHUDmk57+K1qdXJyzsL6 + RmQD9ZmObygXB8sVIRO6fXQB4hC6eRQppzr1XXmHclnAckFomLc1Um5dItEvhZ97MQXP9N0AAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhDMTdBQjRENEFBRTExRTQ4QjQyODY0MDNBNTJE + NzNCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhDMTdBQjRDNEFBRTExRTQ4QjQyODY0MDNBNTJE + NzNCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NUQyMjc4QTlBQjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4eHsDfAAAB00lEQVRIS7XVWytEURQH8HniTTNHLs0NCXNcXjTN5dH9g/gM + 3jx590QhFDJS0gyTGmpqaqJIMW4hzlAoOaWISS7LWifntI3ddnTGrl92e/57/We/DBsA/CvuYSHZSr0t + lvCGsriX/oI3lMW9lM/SwgF9SEHwizs08IX2vAyLZvZRgXJ+cQWv7yB0q96Ds86voT0vw6KZNJsK4Pnl + DWKxmBBlqhpDUN0UNp2n2VrB/WMOEomEEGX0ArN5o+BGfYB0Oi1EGa8cwpKw6bxRcH6lQiaTEaKMVw5q + rzCbNwr2z65BURQhynh8Qe0VZvNGwdZBFlRVFaKMxxfQXmE2rxc8rW3sQy6XE0puHoG7IaC9YnV9j5th + pbZPqOCDCrbH5uIwOD7/zWgkDkNTizAyuwQjkWWIxFNQWduqmVxI/MiPz6/A8HTUuDMTTYLkbrqhgt5S + T3PG4ZJ3HE7focElZx0u3yn+VQiG1ZLymmm7s74f88f42S6bl9zyJZ6d6Xckd+Mt5ieogH4xJORHHajt + SzvqZPSgECpHZSiA2DztuxBlad+NgnpBEbIjusiiYboKRF+kGFHegUR5ImkFv7G0eAPzWVq8gfksLd5/ + oULiHhYS97BwwPYJlSCUgVubViQAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJEMDQyOEZBNEFEMjExRTRBN0MxRDBCNzJGRUND + MDEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJEMDQyOEY5NEFEMjExRTRBN0MxRDBCNzJGRUND + MDEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkRDRkI1RDVEMTRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz59jfe3AAAEbUlEQVRIS8WTeUybZRzHF48/pnFOuQRajkFLgQFb5iRLNJr4 + l/EPgsniUI4xZDAY1zyxwApsMJyIME61rByl3DfoYGBrgbWUY06FcZSCha4rQ8jYxkqPr2/fvkv8o2Sg + S/wkT970eb6/T5/39z7Prv8dt/Oql4mR4HZJ3ccoXFxhVCzB9DT9JueJdSq6c1wzVZFupepVzxu34XVj + CaEDi1jX6hF8ZQoeokl4iBVwzV9YdU1XRlIl28eVo8phCdXwGltEeOUsro6psaHVwcSDh5volc4iOO8X + 7KuVwb1hEi7J8myq9PEQO//I85oafr0KtEpUpNSETm+AwWDAvfv3YTQaybnm/t/AyO6Ga+UonJOnIijF + 1hA9tWI2qle9RxcI+RIpmZpTIfBULhIyyqHVahHPKcN70TmYnFFCp9OhqXcc9KwW0DOHVl3YU1aUyjJu + F1SpfhO3EM6bMMsVt+D8Zhz2HIpC4oU6bG5uIu4cD3tfTwAjIBNypQYbGxsISquBU34PaDHiVEplGXee + SuIjVaBv3Lz7gJg8vHg4FlZvc+ATVoLipiHsD8qCXWAO7IPK8MG5FjLXKboOeoYADkldUkplGWb7vOb4 + 4BzxIXXQE/1m59WDXdgBvxPfwz6UC4eQUth/WIBDZ2qQXj+K7IYRImeE5s5fOFrcDPvPapcJzVNmmwVY + VxWG9U09uau1tTVymPpc0iYFLew7OEUJ4BwtALfvJpl5xMrKCu6s3cUrn5YbCM1us80CrJZZVWjXr7j3 + 4CE0y8v4IrcaH+cK4Bv+DRyPl8ApphYuia3wZ3eCUzOA1PIfcVuzjHnlIgK/vgy7mHzTG+w12yzA5E53 + edYPo1c2i/X1dQTEfwvbwDQ4hhXg8OcN4P48Df+UTrgkNIAeW4Hg3Hbo9Xq0iGSgs4ls5CUhoXnObLOA + S8pkhG/bdZzgDZJnffT3GXieLAA9XgB2/RjZjuQqMWhxfBw824H55XWyhcfy+HDNqoB1SH4Codn6G7iw + p3d78EaVPlXX0CaZgkqlgly1gpCiK0htHCH/IL6oFcEF3ZjT3CUvXqv0DzDSS0FPq1a/8EbYS5Rqa+if + SAJ8KoeNR7gitEsnoVQqSbGOkJmYX1ggxaY70SabwIGMUrjn8I3WIXnBRPnWu/8nDnE9Sd7cAaP/ZSES + 6/rRKJRArpiHXC7HzekZNIukiCyrhW9mGZgXa4w2kUVnibJnzdXbxP5URzyDO4QjxGl5i9uNpMZeKP5U + IrywAq9yCnGAOGGMonbYxpVnEPGdyR9BO/MTj8kfgXeNFPt5IngVtoF1kQ9WcTs8qgfgmNreQMS21xZL + 0E6Ln6ef75tg8sfgXT8O77oReAkkYNXJ4PRV/4ztyfo9VPTf4xjdf9CpQKzdxxuGe6UMbhXEmc8V6mze + r3qNivx3HGN7UmglQ6CVDMIxXwybo5UcaunJQD8te9rhyx4JrWwItlGNUut3y5+hlp4cDhFCpl14k9jq + nR+Y1NTjIe7NlmMnWKoHsOtvjWYcKpheqFQAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERTg4QTFENEQyMjExRTRBODEyODk0M0RBMTc5 + Qjg3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERTg4QTFDNEQyMjExRTRBODEyODk0M0RBMTc5 + Qjg3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjJGOUEyRDEyMTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6wJF34AAACl0lEQVRIS62Vy08TURSH73/QhQtXVnBhxEcMiUkhbEg0hB1R + Q1i68C8wIW5cEqMLN7ho2Ji4YiEhWq0prYUhfULbadN3obTaChobtZEUsFY9nnPS6WM6HYowyZf87j33 + nG/amaai9geOBYA+4pTxihmBE8DcTQB4J8em/9IwSQyagmrtL+z9rMFmvnhkKvtV7tcVHPz6DVsftulA + AckdhUg8zf19eoLKAd597iMLMItewfOxUDTN/bqCH3tVSG8VWIBZ9AoJApEk9+sKvu/uQ2IjzwJkGtH8 + OrTwy3Hu77vIAnV9mgWlcgWiqRwLjAMmkOMbPbNTKnN/JJntqJGEBZ++7oKcyLLgLN4JrU8Cms2C4pcy + BKKZumCI18temQ/8DzSLZlBmQX7nG/jCKdpgAa0driCtY5iFHuqHSjNoFtaags1iCdzBBG+QgNY2aZ0F + mIUe6osENAtrTUEq/7kDq9PHAszU5yYoq9f1i9cUSCD5ozxDEeTsrhAoONwyxLLb8MrhYQFmZYCHsnpd + v3hNgQROb5hnKIK29944MAThTBEWbS4WYBZ6qC/sKSy5ZJ6BGUQg8b4Bbhjod4AZXlhXWdBa10LrIVul + AM9ggS+aa6AIMMO8ZYUO0KeyIOMtZyaQpXpNi4LFucYzMINwhbMNcMNw5oIJMMNKIA0LNg88mZuH/ssj + dPgBMnN+cBRmny1wrRtSMMMzWCCFMg0UAeY2Fh0+GL5xG8Zu3oHXUrCj3g0WONdTbeBm21/o1N17gPtg + 98Xh3VoS3qzKMDI22agfglnY/Uld8NDc/ZlZwAwvl4Ngun6LGh8rdfVDViNs3rguOOzq6XOD8PDpc7g2 + OkHDH7XWtYa2It66Y4eCQ8cRfpvUNa2hTUD8A6JMaBvCyTdJAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERjY3MEZENEQyMzExRTRCNDlGQUMwMzk0OTAw + Qzc4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERjY3MEZDNEQyMzExRTRCNDlGQUMwMzk0OTAw + Qzc4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjhGOUEyRDEyMTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6GKmpFAAAC+UlEQVRIS63T20vTYRzH8Yforj/Ei24UiSgKIygKi8oyxZQo + cvNYeXaesmzqPGu2POd0ulSsnIdaurTSTJ3O6UxTPGya5vCQx5AuPn39RbHop7nZxQt+z3ie93e/Z4w1 + p7nsCoBt8R6yBF/UHPv+Wb0rfFFzm99CRIwEW1gnqXzxTXxRc0ydctm4OlID2sxrw6iCtiwItC+A2P/D + frLnjwGNSZdMq6N1WOvLwFpP4l/WdRlY6Jaio9Ab7QXba8sVoDHZGdT8PYS9THDqMGnLsKpNw0qXGCua + BO55VZdNQ6U/DRRibVCGb+N1pH5bukoRqHmDHOIG1N8/X2F4I8WyNhtf2+9hqSsZxqZ4upbb6HsSZLHO + Im90ym6hNVcIaktYTexZyUelGEvaHMy/jcFiZxo0xX5Y7ivGcn8JkVmA9uvlWBmqwpJeAWovs+poR99O + eRgWtQWYVUdgrj0FH+i+F3XF3NoappZYGJrEoLaOVYpOOTY/FGJB+xjTqnDMtMTTAC/Ma/Ix/TLUKl9e + x0JfFQpql7PykBP7lWIXzPeUYLIhHCPKCLr/AMy2ZsKoDLTKdNNdvM8TgNpRTBZwfJ885CTmaIChPhwa + mS+GnkdhqjEWY9X+VplqvIMXEhdQ24mZeuSs0N/BNNWWj4k6EdSZHhhXxWH0aSCGFd4c4Tk7zk7XBlUM + FKLToK4Nm+0qYnneRzqGGiSYaIiiyZdhVCdgqFSIwRJPjucZW85O1pvnRmvDkO9zFNTdy2Y6HjGp4HCF + 5kk4xhoiURd/EROv4tBfeM0qAyUC9Mp9QM0+7o829T6LZV0/mNycS6+nFKFWfAGj9ZHozfGwil7miZYH + 7qCmghsw+S6VpV894KuUuKFbfhNNqa749CwY3dm0toK+VABl3HlQM5obYHybwFLc7W1y/Y5BlX6FfgNn + DNcEY0DhZZX+MiGKbh0DNR24AYYWMSfJzc6GZBApwS5skIzNODcg0dV2V36FtsJ7yBJ8UXO8hyzBFzXH + ++H/A/YDv9/V87iOlrYAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 + RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL + ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH + s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW + uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx + xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd + iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ + qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW + GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE + NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n + KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw + qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI + HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq + wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q + 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA3MTZBNTkzNEEwMjExRTRBQjdERDhBQkEzMDEx + MzZEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA3MTZBNTkyNEEwMjExRTRBQjdERDhBQkEzMDEx + MzZEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTgxNjM4Q0YwMTRBRTQxMTk2M0JC + NEQ0MzNCOUIxQzgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + 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 + 0HWhD93n++Dbua+fK9NvoTM5+Udx5mye9NjgCZNf0HEnpN5U5RbPa9+0bdfQ+0eOPzp5ppvG96JfjFkM + nXR/vOP0ePOu/deyCuf8JVSorJny7HQdvR9MTCUm+fUYgyehazLBVCCd8ttpJbQANtO3cDjWbO9werzd + ruK5F9Ld3p7YBEdHCE/WMi0s0jf5mefm0e+ZCsXEf85i/98XsP4NaTpxka74X+IAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJBREU3RDk2NEFCMDExRTQ4OUM5QjZFOENGQzJF + MDk1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJBREU3RDk1NEFCMDExRTQ4OUM5QjZFOENGQzJF + MDk1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MEM5Mzk2NTZBRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz52g1XsAAADeUlEQVRIS62Va0hTYRiAXzVNoQs6oUCttJu3aqatrLxr2k0n + W6bLLlLSxTKCKLoQQUg3IbLMflSgBRGRP7JSSzGnWalYdpnV1MQu1tBWWklqvr3fp2dsOytSfOFh3/l2 + eJ7tnDMGkkmzGCqigsARhPlUQqCi8nEd9v7GEYP5mFcI4K/e/hGHeQ2B7p4+1HV8Nf6Kw4a5GGxtCHzv + 7sU2nR4lbr4/AUBFKIeD4GKYBL79+IX6rm622U8nSgnX4SC4GCaBL50/OXwTwIUY1ohcQkCn/84ZDLBP + I5p16TBl7XYIoaXVwI54RC4h8LG9k/OvQPIOmEZUJW2F+XRoPbBrOiKXEGj9rOdYCqi2gxXhnLQNIo6f + n9tEa7ViI79PoojIJQSaP3RwjAOJaSAjjhL3N+9zrD+W499UVJnSeeVmWDvtlcWlgCedZnK5RC4h8KZV + x2FryQSYmrAVjh/MnP46/57yS7VmZ9+zxr1Yr92NtQ1pWFmfiBevL9QpUqE0JhHcyWuImLsMAU1zG4et + V6yHC1l5oe+evNmD1ZoteL9OgaW1K7GkRoF3H8ZigTocb5bFY8bZWbpoFVwh7yiCR8xdhsAz7XuOh9QD + D2R6twyIEzG/JApz88N7z+T5d+VcDezKL43Ea4UxeCjTqyNUDpUBYeBFXjvjgOAyCdS9asXDJ3NQFj3u + 7eWCyG/FjxR45OyMr6s3S1qCYqE8RA654Uq4dOiUV/v+E9P0i1ZA9Zwg8COnA2HyDZiLYRw4dyAjC50n + z8awBBvNbbWyZ+8x10+By+GONARCbe1gDBPJloCvfKODluQ10mD+qDK5LWFyD6pfvOUYBzydXL0v2I+V + rI9Mhud5BQE9i+RQPt2P30BBYrM4HmYSNf5REGS0b5CzYdKq+iaOITA44wmPiLXwaFfGhDbZMkinYxNJ + 8CpwXxgHobQcPbhv8XegrtNyzAPsOtqHJUPeml1jm/1jYDkdM5G5hB3bDL6KhknLal9xzAN8gpMgVZHm + oKUAuwx29H420c9O/l9KHms4bC0KLFCAY6CSHr+VoHJy88lWbEjHoqoXWPzw5ZCxGKCxkslBLo22L1+6 + ahPeUj/FwgfPh8zpSzfQ0cWrwVKAjfXcWFjjPm9isWSSbx/7JEPF0cWzcYzE7dTfAmysfSLB2z0Awm1H + 8ycnjrD4N/kX4gEg8A9sAFSe4VuPvgAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkEzN0Y5NjgxNEE5MDExRTRBMzU1RUM1MkVEQTU3 + REQxIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkEzN0Y5NjgwNEE5MDExRTRBMzU1RUM1MkVEQTU3 + REQxIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MUU1QUVCQUI4RjRBRTQxMUI2QTlC + RjEwMkVGQzEyNEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4Oz1B+AAABO0lEQVRIS7WUP0sDQRDFt0snIcEiklhGJLH3k6bNp0ifYCUo + KWwMIRCx0EYxEEL+IOPO4SxzczN7d7gGfuzd7Hszd9nHOQD4V9RiStRiStQi0b68GXkgwkjzcdQigU1O + 32CC+9IjUYsENvjY7EySDHhev5skGXA3X5r8aYA3lx0wET1otYgmNMcOku+jXtMg4QJFJMb1a7uPmjUd + rVzHDfDy9pmJaZViCe5rPq7hYpgvXjPw2hNtTqBOevk+F8L0YRGQQosyHxfSf0jUegPLZwkrNedYfi6o + 9Y2RWP6cACPHYnf4XauQablfHYAxo6jt9sfwRGWgVvrVASKmdd7g2OoN4P5pVYhqbgCPmnPuzHPtua1C + s9OHyeyxEFU+IJcCb2p4zj3dKjQvrsat3jD4CwNCIcEv14/fpAfcDwXsled4Tu6+AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlGMEQ1RDBCNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 + MzBCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlGMEQ1RDBBNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 + MzBCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzFDMDRERTRENjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6zemTaAAABh0lEQVRIS7WUvUoDQRSFEwiBKPEHsRAkb+ArWIsv4CNYCSKI + jRD8a1S0m9QhdTobG5uARZogBJSkiLASFJJChQiRcJ2z2bnMZtbxCnrhY3YO556z1aSI6F9JFP+SRBEs + FFaUhoSopAyQKGIBi58jEuErcQSAhY/hyP5DL8Y7mQMcAcD8Phh+u2Tzk9cRAMz914G4wOd1BABzt/cm + LvB5HQHA3On2xQU+ryMAmB8en8UFPq8jAJjvWk/iAp/XEQDM9WZHXODzOgKAudZoiwt8XkcAMN/U78Ml + CcY7mQMcAWhz+FRc3zZFREXypwKYEiG/e+ykc1WYVRrCGUk8nGUHsyic6nKeetUK4dTESjjLDjZUlqaV + hiS8lEsh0Z1LTFYs2FBazFFwcUzB+YE+T8bffD+i4LRIwSV0jdZaO5vhHXtRPmfFgg1n81mlIQnt/W1q + bKyH34dz2XKUz1mxYBaFU5zJUG1tlXDu5TMcjuEsO5hF4exOpZWGtnLpWDiGs+xgFv9gxlmU+gIVyyIX + YCSg/AAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6npMy1AAAGEUlEQVRIS7WVeVDUZRjHf7Ase8ECu+wl4LIXcqyyHC783AWW + 5QaRFTHkMi9SQvE+UhLzwk0BUcQSgQBBgcYDzStMSzOPcpqcmo5pmqk/+rOapqb+iG/PbzfFcSz/6pn5 + zPN739/7fp/nvZn/3TSLjj+XJy2/RaItPCT5vaBd8m1+q2Qku1lcrcvki+iXr7fFU6ZZeOx5KDU1b7jU + 1Z2bVPMPWNMbRXrXkWAc+ywVLbcS8fKwFjlu8VdpW0XzSc6f8PEIPzJ19dFnU3WEJdHL9P3X9O1nkdB8 + CQrX7i3mKn9zfqsUq29ZsPfjRBx5aMO2cTMy94gm7FuF7XyJTwDJTo5GVdHxNALVgsPd5Ceye+9g8b0f + UXbjB8RtH4Msd+MeXS7f6twjxbILZiy7pEHDtTBsvG7BqivTUXpsClLWCbtJNpDwBlGVH3ySIFV520eW + nedRcf0HVJGwbeRrOHs/h2n1CGRZDe7wND/W1hiI8sEYlJ4KRcVpJcrfVqByNBILhqLh3KeA+UXBOpL2 + jkRZduARPGXZ/vH4pnMou/gd7INfIPn4QyQc/RSOzk9hrBtEiKPerUn1Y5PXBaDojWlwdgUjr0+G/H4Z + cnpCUNJrQNZ+LeLrBD/LYnixFEDAKFz7vJQ0r49dO4zikS8x8/ADxLd9jIT2B5ix/z7SX78Pw+K3EJy2 + wq1M4rEz6sRwthgw82Ag2KNS2I5JPZ4rZx00ImGNHIZSfisFkDGhxbs5AkKLd/3kaLkDlgTjXrsNc/Md + mPfeQeyOD2HbcRu6yi4E2Wrd8ngeG71IBPtePWa4JUhsD0DykQAkHQqApUWCFLcGyZvDoZ/P/5oCTGXk + hU2MvGB7rbGmG47dd2Fa+x6iX/kAMa/eQvS2m4jaeAPspvcROb8TQexid3CcL2usFCJjnwE5nQYU9RhR + PGDC7D4TCrqMyDqkR9oePbRz/SZEKh8rI8vdyshyXhmzLD8DS/1VGOquwtgw7glkXH0Nhvp3kbL2GrSl + hyC11ril03xZfbkQKZuVsDeq4NihRtYuDbJ2auBoUsO2TQXrJiWMlWIExflWMiHOjRzfJy0bg776HCKX + vANd7WXol1/xeN3Si7A2XIXW1YbAxAq3UO0zPTSd1yG38bplLK//vxBrffKY4PQ1HH9aKk8jonQUUyvO + Qlt9HtqaCx4/tXIMyXWXMXXOAQTEv+D2zCvDhBBTCN1zCGOCZq3k+DXO1YcpRYOY4hpF2LzTCCs74/VE + 3IvnEVd1EhGFblBbWot6BKXWQZq64tlYa2+TuJwQM9KU5cRL35hyOxCe2w913hA0hcPQFI16KRzxEFtO + a1Q9htSVN5C+5S5x7x/uIm3DR7CvuomUReOImt1FU7nwEolHECImMGkJE5i46EJkejNM+X1QOPqhzBqC + KvskVDmnJuHKT/K4bgjKzBMItXcjJv84NOwWiKPndJK40TOCgPgaRmIur1dZ1yM6txvyWT0ITR+AImOQ + gg39N1ybDBJP60PorC5My3oTwQm18FdNryBxbq0EJL6AEUTYZBTkF0NGKyKdvZDb3qJOAxSIOqcP/jtp + JyC3D1BSvYgp6EN4aiNlP/cTEk4gFASPEUeXkWd8RaY5jcrEBkTn9UCT4Q3gzfBfRvJE9rrsfpicHSRe + NsFXmJeSXhTBXXY+jMjk8uArVkpExuKb6pkbYJ7L7Ria37xTUBeMeCkcncRTN0z/TyLKNYy4khNQJq2G + IMLBXdUWQkXwCYYR6md7IPP1k8WEC3UFDzSpG2BZeAZJtXQWFpyls3HOC50JzkdQnbFqDInLLiC2rBcq + 6xoSzzzP+NDVwDBaQkx4XzahNv8xZH48sVotCHeOUnnCWNJG18Q4UjddB7vlfbBbPwC7+YannLTyIrS5 + OyHU5v3hr07poL7JBHe4Jh8bzgQROY8h46IKCAVfbi73D3PcpfoJlX0VtEVN0JXsQlj2ZoRaaynj7N/8 + NfZLPLFmHrXnpiWSCCL8iMl32T/M6YGMq+R+covD7QADwfoIgqt4QVGtfvIZJ4lRv5CY4zypbjfjy+eE + M4l4gtuSwYSQ4DS4EZAew/wNiCYQJlvQU3cAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVGNUQ0RjNENEQyRDExRTRBQ0ZFOEVGNkU4Rjcw + RkEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVGNUQ0RjNDNEQyRDExRTRBQ0ZFOEVGNkU4Rjcw + RkEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzUxNUY0MjEyRDRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz7jldwbAAAEyklEQVRIS6WWDUzUdRjHoeXWVktIc74MLREMUxBQV4RYkBmL + SBwSoZIFCgULlOJFDJDxqkiAqGgoiIQ6jaFLB1EqUaC8iMgdL8cJB3fHwR13HO8Hh3x7fn+pwN01nM/2 + 2X77Pb/n+33+v/3/95zBbGOVnZM58QHhRKwgnp9KPXuQ2CtJ6ScOjGo0fcMjI93llVX55us3rqbUc49P + zDLyw9auL4iw5l+IsMY//BRujcygdcg+ug83rpzCsVhf3C6+hHg/W+R++985BtU3pey1cCCpOYQhJzo9 + 8kPX1tZcDoS0Jp2jrCgWmakhOJMVA4GwBd1KNSQ9veiUdeNifjqyMsJxveD7f8+z2rPBlg0kNZ9gJjMj + L8RqQlSegIbLX6CuYAcOBm9FHe8B2rt70SZTgNfehTphJ+paCaEYjSIJkmP24PaPnrhfsBP8okCcCbZ8 + RFLmxIuc6PTICV5Dh4IxNqSEemAA6adzwBdJ8VeDEL/XNqGkmo/iKh4HW5fWNCL7QiEqq2sw3N+Dijwf + nPx6FUjKkpjLiU6P7MDVqL/gj8nJSY4bpbcQnZyK8EOJCI2Ox3dRcY+JjkNYTAIi4w4j7+JlKBQKjI+P + 42qqJ9J832AGawkjTnR6ZPm/iXvn9+ARiWsnJjCu1YLeGshJQCKVolMs5hBLJOiSydAjl0OpUmFweBhj + ZJAfuxVJ3ub6DTJ9LVCd40Pij6AZ01IRoWVGumE5dmZEM45RjRbnolwR72Wm3yDt85W4e2o3FVLnGg1G + xsYwSvDEdxB03gEa6vJwSopOhkZHkRPhgkPbTfUbpOwwR+XxXdT9OM79EQ/lgBLNkjpsz1iMP5t/oU7H + dIoz+oeGcTbUGVHblus3SPJYgfI0LxLSIPmaL4LyHOB5bClK6gswNDLKoUucoezvx+n9W3Dg49f0G8S5 + LUfZEU8MkpC8T43YQi8UVp3kutOFenAIvep+dClUkClVOPXNZoQ6L9NvEE3uN+PdMUBvRXevCgqVmjob + gGpgEH1PwPZYTq7soy9bDolcgRNfOWL/ZhP9BpEfLsVvMW70kQ1C2qMgEyVnUiUoQ2CuPZTUra7rYYi6 + ZDi+910EvbdEv0GYkwlKIj+BijrL+jUKbdJO1LZWwD19EUrrr0Cu6tMpzhCKJcj40gEB9ov1G4RsWoLi + UBe6V7r/n70RkPMOPDJMcLXqLPc0DF3ijBaRCOneG+H31kL9BkF2i3B9nzN1qoagQ4yDlzxQUE6/lHRd + XfLeGbA9cbccwk4JHggegi8UIc3LDj7rFug3CNiwENcCt6CH3ojm9g7qqoN79HZpF9rpjjumYGu2x3I8 + 4UNU85pwv0WAox5vY7f1/xj42SxAkf/7kCmUuNfUiho+FTa3gtfaRh22o6lNxMHWbI/lKut5uFVdh7sN + jTiybQN2rpmv18DQ1+rViUJfRwia+bjXLEB1YxNqyai+VUiditDY1sHB1myP5e408FFR34Cb5WVIdLXF + Zxbz2DywJYw51WkxZ9eqebxUFyvk7rDHD24bkOhig4RZEM/4yAZhm1Ziq6lRG2mxscmm2owwdF72suOn + ZkZCTzNjuJsaYdtT4vr63E4L4xcCSYv9IXiJU30i2BxlzmzkWRHsLp8GVsNqp2aygcHfZtZtYIryU78A + AAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkUzNzJDMjE3NEFENjExRTRCNjE0OEVEQzI4MEM0 + RTZDIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkUzNzJDMjE2NEFENjExRTRCNjE0OEVEQzI4MEM0 + RTZDIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI3NUQ0QkNENDRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6PyaLfAAADMElEQVRIS6VUXUiTYRT+vi3Tzd+ps23+3KRigtiPkolEQReG + UYTkhWatpWlWGkRdddfdSPImqUAJjSIT00oxLJIk0cR+tFSyzDJtgaMkDEPkdM7ZPvm2vS6jBx6es3Pe + 8zzvtm+TohLS/ov+AACStLgEQuJyLRJWYK1yzh/+FgCoQrpnfM4fOGBhcUlIMkEVkma4H4i1y2kFcMD8 + wqKQZILKZqTqmlTAWrfvMjhgbv63Dwm0hLWQohn1eNEbzrlfPiTQAtZCKjP1GXdAIC+r4XD+9CGBFrDm + RVJ1re6pZ0GyHHMvIawauYVNCFPfvvuQQAtYC6meKXU0amNsaGN/ZR60xIf9aIgN3cpGE9OzZCZ85nEm + pGiWlLABmuJCnUOXrNB7chdct4TUo32ANDbp4NuielDpqWfePdaPX6GrohSK4uLhlCEo96YlZLbOFHzH + oJXjMSBcGn4/zQGovEDqXXtzeTb+BTrKj0J3+Q54djYP7EZdTU2MPjFSK8eieQR9QtLg6GcOQPWgqKeQ + ZyOfoK30CDw+lg2Ot3Z4VLoNqo269mCNHIa2WjYn9A1PcAAqU6m9VV3TF9psOwwPS3JgZugCdNoyocwU + jU+RlImWBpezGz0vxzkA1YOiHvPFO7Ca1kGHLQtmXp2HdutmqN+/F6JiU+h3kOpyVeHJwBgHoLIpqajm + 189HoaG4CNqsGTA1UAWth9Lg6r490PygGyLjUikgzuWqQlffCAegelDdUwLqigqhpXgjTPYeh+bCFCg2 + RkEk3vxuVz/P0c43oLP3DQegLhspNalSFxiNcLswHT48LYNbBUlQk7ebzenmyhm08w1o7xmiAP6hRZiT + 70eYkzpctUuJWdHmwWs74+F1Uz7cyE+E4ohQB5mHm9a3GywpTXzektyKduIAIsKI3ISkL4rIdYle05C9 + VrZVBmvtl7eboUyv7V4jSQdwRn8FdI72iErtCUxnIuifkJ5hUqUOq9Jr7OeCNU6bTpNVqtMcDJSldOwn + KnOk+jypJ5QANRWc0cs5SEelXr54QidfwVYAMoiHq4W/gNM6OaNCJ+diaUIqN/43+Atwg27t+9ZXBUn6 + A2MdqQeVc5pWAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjUzQzNGNDI5NEQyQzExRTQ4QkE1QUNCMEVDRDZF + MDVEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjUzQzNGNDI4NEQyQzExRTQ4QkE1QUNCMEVDRDZF + MDVEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI1NUY4OTYyQTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6IsaOmAAADF0lEQVQ4T62U/UuTURTH+0nICqRI1ERMMyNQe8N0ChqBwQhN + yvwhEgJjVCqJ/qCibZo6tzQ339h6Nre5prapUzc1XzItX1ilzuWMLLVAen+xf6DTuTxjdxsFVj58ebjc + c+7nnud7z3228DbpIaDFH/CfoqCn72DIDvNfPDM2KAqyr8PcJxqY+QBTb8kkjocXQTsKigGwfqYJHqIg + 1OxHGHvlWPx4hXB1YyA3g4CBhqst+piEnrDA3rA95vBAY1x8d7lq/DVZwm5PQZNvoKYdypSgHgbVEIh1 + cLOZzOCbSSsyRQRba6uWtcpVLbPcwlglInNUCJNWWKqABqMLCGvGlfpJELaQ/V1Vd1lujAhe0chtUrH5 + ZExnmJ85MdomEa+qZMbIEF2BHGunILSjdZwYgTt4gJqjjj0Rltml1Zq9AeL0Mn71Wn2mtDU80MIvsFTw + O+KPIoWC8BNYRIUaqrRQroJKjQOk9N+xLBF2pXJFKfnsDGYa8gS6xOO2whyMuoHaHpGzZ/pBM0IMrtXD + nT4HqNHXe0lYoogMFeQP4jbSDkCPTUyXmnNoPutSo+9WN5DEQDyeWCWnhqm4p7Oimt3b54rzmmKPVHKz + 0Xg0AU1pz87VJp+yXOfd9t3mBmLXsGrsJhSsDtF4iOWxKdpzyQNnuRW7vEUp13obFG05OVUBPtO5V1Sn + k5q4SX8ENfWA6C7xHsP981Bb2sf38ZKd4JhSuXUJHPHhg/WJnAeZFw0Xzt/w8erRtLmBnB/CSmaC599I + 2PYVRl+CXigu3R9SfCC0Pf1MZ1oqvqvjogX7gtRFJfb1n24g7GblfQcFP2fkBYm5anxqQcbLKgzyK/Df + WRTkV5+RMTg84ZrgAOHo4ZIDVNdJw67CpsVLZ5gifj97Typlq2ZFQXj8LKh5EHpnaIar8N+Al5l9Y9Vs + T7OiIAzjqaMsa6QJnBkeWvgOHdPkAuIV67PSeQpCYYZplsZ+KyyWLRyFF8D553EDbURY770J0rrYJbda + SYE4iWb9NcgpRKDrOMAWwYP6d5BTaC52zyaAWDlAm/DweL8AX9zXukfxHsIAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + 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 diff --git a/TreeUtils.cs b/TreeUtils.cs new file mode 100644 index 0000000..571fa7c --- /dev/null +++ b/TreeUtils.cs @@ -0,0 +1,152 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using GeoScene.Data; +using GeoScene.Globe; + +namespace Cyberpipe +{ + public class TreeUtils + { + /// + /// 构造图层tree,最多解析三层,若地球存在,则只构造指定地球上图层已存在的树节点,若地球不存在,则构造全部 + /// + /// 所属地球 + /// 要加载的树 + /// 数据来源,实测数据/施工数据/规划数据/红线数据,为空则展示全部 + public static void InitLayerTree(GSOGlobeControl gsoGlobeControl, TreeView treeView, string viewDatasrc) + { +// treeView.Nodes.Clear(); + LayerConfig layerConfig = Utility.layerConfig;//layertree所在的配置文件 + List datasrcs = layerConfig.datasrcs; + foreach (DataSrc datasrc in datasrcs) + { + if (viewDatasrc != null && !viewDatasrc.Trim().Equals("") && !datasrc.label.Equals(viewDatasrc)) continue; + TreeNode rootNode = treeView.Nodes.Add(datasrc.label); + List layerTypes = datasrc.layertypes; + foreach (LayerType layerType in layerTypes) + { + TreeNode secNode = rootNode.Nodes.Add(layerType.label); + List layers = layerType.layers; + foreach (Layer layer in layers) + { + if (gsoGlobeControl == null) + { + TreeNode node = new TreeNode(); + node.Text = layer.label; + secNode.Nodes.Add(node); + + } + else + { + GSOLayer gsoLayer = gsoGlobeControl.Globe.Layers.GetLayerByCaption(layer.layer); + if (gsoLayer == null) continue;//将不存在的去除 + TreeNode node = new TreeNode(); + node.Tag = gsoLayer; + node.Text = layer.label; + node.Checked = gsoLayer.Visible; + if (gsoLayer.Visible) + { + secNode.Checked = true; + rootNode.Checked = true; + } + secNode.Nodes.Add(node); + } + + } + } + } + } + + + /// + /// TreeNode选中状态改变,对其子节点和父节点的选中状态做相应改变 + /// + /// + /// + public static void TreeNodeCheckedChange(GSOGlobeControl globeControl, TreeNode node) + { + if (node.Tag != null) + { + if (node.Tag is GSOLayer)//图层 + { + GSOLayer layer = node.Tag as GSOLayer; + layer.Visible = node.Checked; + globeControl.Globe.Refresh(); + } + else if (node.Tag is GSOTerrain)//地形 + { + GSOTerrain feat = node.Tag as GSOTerrain; + feat.Visible = node.Checked; + globeControl.Globe.Refresh(); + }else if (node.Tag is GSOFeature)//特征点 + { + GSOFeature feature = node.Tag as GSOFeature; + feature.Visible = node.Checked; + globeControl.Globe.Refresh(); + } + } + + CheckParentNode(node); + if (node.Nodes.Count > 0) + CheckChildrenNode(globeControl, node, node.Checked); + } + /// + /// 树形结构中,根据parentNode的选中状态,更改其子节点的选中状态 + /// + /// + /// + /// + public static void CheckChildrenNode(GSOGlobeControl globeControl, TreeNode parentNode, bool isChecked) + { + foreach (TreeNode childNode in parentNode.Nodes) + { + childNode.Checked = isChecked; + if (childNode.Tag is GSOLayer) + { + GSOLayer layer = childNode.Tag as GSOLayer; + layer.Visible = isChecked; + globeControl.Globe.Refresh(); + } + else if (childNode.Tag is GSOTerrain) + { + GSOTerrain feat = childNode.Tag as GSOTerrain; + feat.Visible = isChecked; + globeControl.Globe.Refresh(); + } + else if (childNode.Tag is GSOFeature) + { + GSOFeature feature = childNode.Tag as GSOFeature; + feature.Visible = childNode.Checked; + globeControl.Globe.Refresh(); + } + if (childNode.Nodes.Count > 0) + CheckChildrenNode(globeControl, childNode, isChecked); + } + } + + /// + /// 子节点则父节点:一选则选,全不选才不选 + /// 改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 + /// + /// 要检查的节点,更改其父节点状态 + public static void CheckParentNode(TreeNode curNode) + { + + if (curNode.Parent == null) return; + bool bChecked = false; + foreach (TreeNode node in curNode.Parent.Nodes) + { + if (!node.Checked) continue; + bChecked = true; + break; + } + curNode.Parent.Checked = bChecked; + CheckParentNode(curNode.Parent); + + } + + } +} diff --git a/Utility.cs b/Utility.cs index 68c90d1..f7aa6b7 100644 --- a/Utility.cs +++ b/Utility.cs @@ -228,30 +228,30 @@ LayerLabel_LayerIDs = new Hashtable(); if (File.Exists(filename)) { - XmlTextReader XmlReader = new XmlTextReader(filename); + XmlTextReader xmlReader = new XmlTextReader(filename); try { - while (XmlReader.Read()) + while (xmlReader.Read()) { - if (XmlReader.Name == "database") + if (xmlReader.Name == "database") { - dbdatabase = XmlReader.ReadElementString(); + dbdatabase = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "dbpassword") + else if (xmlReader.Name == "dbpassword") { - DBPassword = XmlReader.ReadElementString(); + DBPassword = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "user") + else if (xmlReader.Name == "user") { - userID = XmlReader.ReadElementString(); + userID = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "locaserverip") + else if (xmlReader.Name == "locaserverip") { - serverip = XmlReader.ReadElementString(); + serverip = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "locaserverport") + else if (xmlReader.Name == "locaserverport") { - serverport = Convert.ToInt32(XmlReader.ReadElementString()); + serverport = Convert.ToInt32(xmlReader.ReadElementString()); } //else if (XmlReader.Name == "localicenseserverip") //{ @@ -261,102 +261,51 @@ //{ // Utility.localicenseserverport = Convert.ToInt32(XmlReader.ReadElementString()); //} - else if (XmlReader.Name == "dbbackuppath") + else if (xmlReader.Name == "dbbackuppath") { - DBBackUp = XmlReader.ReadElementString(); + DBBackUp = xmlReader.ReadElementString(); } -// else if (XmlReader.Name == "layerchild") -// { -// var layername = XmlReader["layer"].Trim(); -// var label = XmlReader["label"].Trim(); -// var type = XmlReader["type"].Trim(); -// -// LayerChild child = new LayerChild(); -// child.attriLabel = label; -// child.attriLayer =layername; -// child.attriType = type; -// LayerChilds.Add(child); -// LayerLabels.Add(label); -// LayerNames.Add(layername); -// -// dictionaryNetLayerNameAndCaption.Add(layername, label); -// -// if (layername.EndsWith("管线")) -// { -// LayerNamesList.Add(layername.Substring(0, layername.Length - 2)); -// } -// if (!type.Equals("db")) -// { -// if (XmlReader["isRoad"] != null) -// { -// roadLayerName = label; -// } -// }else if (XmlReader["isPipeLine"] != null) -// { -// m_PipelineLayerNames.Add(label); -// } -// else if (XmlReader["isWorkWell"] != null) -// { -// workwellLayerNames.Add(label); -// } -// else if (XmlReader["isValve"] != null) -// { -// valueLayerNames.Add(label); -// } -// else if (XmlReader["isAccess"] != null) -// { -// instrumenLayerNames.Add(label); -// } -// else if (XmlReader["isCharacter"] != null) -// { -// pipefittingLayerNames.Add(label); -// } -// else if (XmlReader["isSgData"] != null) -// { -// sgPipeLayersNames.Add(label); -// } -// } - else if (XmlReader.Name == "Terrain") + else if (xmlReader.Name == "Terrain") { - TerrainsName.Add(XmlReader.ReadElementString()); + TerrainsName.Add(xmlReader.ReadElementString()); } - else if (XmlReader.Name == "dbserver") + else if (xmlReader.Name == "dbserver") { - DBServer = XmlReader.ReadElementString(); + DBServer = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "rooturl") + else if (xmlReader.Name == "rooturl") { - PicRootURL = XmlReader.ReadElementString(); + PicRootURL = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "defaultimgurl") + else if (xmlReader.Name == "defaultimgurl") { - PicDefaultURL = XmlReader.ReadElementString(); + PicDefaultURL = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "queryfield") + else if (xmlReader.Name == "queryfield") { - Query_Fields.Add(XmlReader["label"], XmlReader.ReadElementString()); + Query_Fields.Add(xmlReader["label"], xmlReader.ReadElementString()); } - else if (XmlReader.Name == "location") + else if (xmlReader.Name == "location") { - Query_Roads.Add(XmlReader["label"], XmlReader.ReadElementString()); + Query_Roads.Add(xmlReader["label"], xmlReader.ReadElementString()); } - else if (XmlReader.Name == "pipelineCode") + else if (xmlReader.Name == "pipelineCode") { - Pipe_Code.Add(XmlReader["label"], XmlReader.ReadElementString()); + Pipe_Code.Add(xmlReader["label"], xmlReader.ReadElementString()); } - else if (XmlReader.Name == "projectStr") + else if (xmlReader.Name == "projectStr") { - projectStr = XmlReader.ReadElementString(); + projectStr = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "backupserverurl") + else if (xmlReader.Name == "backupserverurl") { - backupurl = XmlReader.ReadElementString(); + backupurl = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "backuppath") + else if (xmlReader.Name == "backuppath") { - backuppath = XmlReader.ReadElementString(); + backuppath = xmlReader.ReadElementString(); } //else if (XmlReader.Name == "uploadpath") //{ @@ -366,41 +315,41 @@ //{ // Utility.udserviceurl = XmlReader.ReadElementString(); //} - else if (XmlReader.Name == "pipelinetype") + else if (xmlReader.Name == "pipelinetype") { - pipelinetype = XmlReader.ReadElementString(); + pipelinetype = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "shdbip") + else if (xmlReader.Name == "shdbip") { - sgdbip = XmlReader.ReadElementString(); + sgdbip = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "shdbname") + else if (xmlReader.Name == "shdbname") { - sgdbname = XmlReader.ReadElementString(); + sgdbname = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "shdbuser") + else if (xmlReader.Name == "shdbuser") { - sgdbuser = XmlReader.ReadElementString(); + sgdbuser = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "shdbpwd") + else if (xmlReader.Name == "shdbpwd") { - sgdbpwd = XmlReader.ReadElementString(); + sgdbpwd = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "ghdbip") + else if (xmlReader.Name == "ghdbip") { - ghdbip = XmlReader.ReadElementString(); + ghdbip = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "ghdbname") + else if (xmlReader.Name == "ghdbname") { - ghdbname = XmlReader.ReadElementString(); + ghdbname = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "ghdbuser") + else if (xmlReader.Name == "ghdbuser") { - ghdbuser = XmlReader.ReadElementString(); + ghdbuser = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "ghdbpwd") + else if (xmlReader.Name == "ghdbpwd") { - ghdbpwd = XmlReader.ReadElementString(); + ghdbpwd = xmlReader.ReadElementString(); } } } @@ -410,7 +359,7 @@ } finally { - XmlReader.Close(); + xmlReader.Close(); } } else @@ -458,11 +407,12 @@ { sgPipeLayersNames.Add(layer.label); } -// else if (layer.flag.Equals("")) + //配置文件中不存在workwell和valve的,不起作用 +// else if (layer.flag.Equals("workwell")) // { // workwellLayerNames.Add(layer.label); // } -// else if (layer.flag.Equals("")) +// else if (layer.flag.Equals("valve")) // { // valueLayerNames.Add(layer.label); // } diff --git a/bin/x86/Debug/Config.xml b/bin/x86/Debug/Config.xml index 508515a..b7dafa9 100644 --- a/bin/x86/Debug/Config.xml +++ b/bin/x86/Debug/Config.xml @@ -2,10 +2,10 @@ LocaSpace三维地下管线信息系统 release - SZHTDB2 + szhtdb2 192.168.0.203 release - 192.168.0.203 + 127.0.0.1 1500 http://192.168.0.203/images/ http://192.168.0.203/images/default.jpg @@ -25,165 +25,6 @@ http://127.0.0.1/Cyberpipe.msi http://127.0.0.1/Config.xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 编号,管线编码,管径_毫米,材质,埋设方式,起始地面高程,起始埋深,终止地面高程,终止埋深,建设年代,使用年限,权属单位,设计单位,设计负责人,施工单位,施工负责人,监理单位,监理负责人,业务负责人,备注 编号,管线编码,管径_毫米,材质,埋设方式,起始地面高程,起始埋深,终止地面高程,终止埋深,建设年代,使用年限,权属单位,设计单位,设计负责人,施工单位,施工负责人,监理单位,监理负责人,业务负责人,备注 diff --git a/bin/x86/Debug/Cyberpipe.exe b/bin/x86/Debug/Cyberpipe.exe new file mode 100644 index 0000000..d81e34f --- /dev/null +++ b/bin/x86/Debug/Cyberpipe.exe Binary files differ diff --git a/bin/x86/Debug/Cyberpipe.pdb b/bin/x86/Debug/Cyberpipe.pdb new file mode 100644 index 0000000..1e4e6f8 --- /dev/null +++ b/bin/x86/Debug/Cyberpipe.pdb Binary files differ diff --git a/ClassDoubleScreenCompare.cs b/ClassDoubleScreenCompare.cs new file mode 100644 index 0000000..f2935da --- /dev/null +++ b/ClassDoubleScreenCompare.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using GeoScene.Globe; +using GeoScene.Data; +using GeoScene.Engine; +using System.Drawing; + +namespace Cyberpipe +{ + class ClassDoubleScreenCompare + { + public static GSOFeature getSameFeatureFromOtherGlobe(GSOFeature feature, + GSOGlobeControl globeControl1, GSOGlobeControl globeControl2,double bufferWidth,GSOGeoPolygon3D resPolygon) + { + GSOLayer layer; + GSOFeatures features = new GSOFeatures(); + + if (!feature.Dataset.Caption.StartsWith("施工")) + { + layer = feature.Dataset.Caption == "供电管线" + ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") + : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(feature, fs[i], globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + else + { + layer = feature.Dataset.Caption == "施工电力管线" + ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") + : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); + + GSOFeatures fs = layer.FindFeaturesInPolygon(resPolygon, false); + + for (int i = 0; i < fs.Length; i++) + { + if (isSimilarFeature(fs[i], feature, globeControl1, globeControl2, bufferWidth)) + features.Add(fs[i]); + } + } + + return getMostSimilarFeatureFromFeatures(feature, features); + + } + + + private static GSOFeature getMostSimilarFeatureFromFeatures(GSOFeature feature, GSOFeatures features) + { + double maxLength = 0; + GSOFeature f = new GSOFeature(); + GSOGeoPolyline3D line = feature.Geometry as GSOGeoPolyline3D; + + if (features.Length == 0) return null; + if (features.Length == 1) + { + f = features[0]; + f.HighLight = true; + } + else + { + for (int m = 0; m < features.Length; m++) + { + GSOGeoPolyline3D tempSGLine = features[m].Geometry as GSOGeoPolyline3D; + + double tempLength = tempSGLine.GetSpaceLength(false, 6378137); + double lengthAbs = Math.Abs(tempLength - line.GetSpaceLength(false, 6378137)); + if (m == 0) + { + f = features[0]; + f.HighLight = true; + maxLength = lengthAbs; + } + else if (lengthAbs < maxLength) + { + f = features[m]; + f.HighLight = true; + maxLength = lengthAbs; + } + } + } + return f; + } + + private static bool isSameFeature(GSOFeature feature1, GSOFeature feature2, GSOLayer layer, double bufferWidth) + { + GSOGeoPolyline3D line = feature1.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = line.CreateBuffer(bufferWidth * 2, true, 5, true, false); + + if (bufferPolygon == null) return false; + + GSOFeatures featuresInLayer = layer.FindFeaturesInPolygon(bufferPolygon, true); + + if (featuresInLayer == null || featuresInLayer.Length <= 0) + return false; + + for (int i = 0; i < featuresInLayer.Length; i++) + { + if (featuresInLayer[i].Name == feature2.Name) + { + return true; + break; + } + } + return false; + } + + private static bool isSimilarFeature(GSOFeature srcFeature, GSOFeature dscFeature, + GSOGlobeControl globeControl1,GSOGlobeControl globeControl2,double bufferWidth) + { + GSOLayer dscLayer = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); + GSOLayer srcLayer = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); + + if (!isSameFeature(srcFeature, dscFeature, dscLayer, bufferWidth) + && !isSameFeature(dscFeature, srcFeature, srcLayer, bufferWidth)) + return false; + return true; + } + + public static void CalculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2, + out double horizonDistance, out double verticalDistance, GSOGlobeControl globeControl1, GSOGlobeControl globeControl2) + { + GSOPoint3d pntIntersect1 = new GSOPoint3d(); + GSOPoint3d pntIntersect2 = new GSOPoint3d(); + GSOPoint3d pntProIntersect1 = new GSOPoint3d(); + GSOPoint3d pntProIntersect2 = new GSOPoint3d(); + + verticalDistance = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, verticalDistance, true, "垂直", globeControl1, globeControl2); + + horizonDistance = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, + out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + LabelDistance(pntProIntersect1, pntProIntersect2, horizonDistance, true, "水平", globeControl1, globeControl2); + + } + + private static GSOPoint3d LabelDistance(GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, + double distance, bool markerVisible, string label,GSOGlobeControl globeControl1,GSOGlobeControl globeControl2) + { + if (pntIntersect1 == null || pntIntersect2 == null) + return new GSOPoint3d(); + GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); + GSOPoint3ds point3ds = new GSOPoint3ds(); + point3ds.Add(pntIntersect1); + point3ds.Add(pntIntersect2); + disline.AddPart(point3ds); + + GSOGeoMarker dismarker = new GSOGeoMarker(); + GSOFeature marker = null; + GSOFeature line = null; + createLineStyle(out marker, out line, disline, pntIntersect1, pntIntersect2, distance, label, dismarker); + + line.Visible = marker.Visible = markerVisible; + globeControl1.Globe.MemoryLayer.AddFeature(line); + globeControl1.Globe.MemoryLayer.AddFeature(marker); + + globeControl2.Globe.MemoryLayer.AddFeature(line); + globeControl2.Globe.MemoryLayer.AddFeature(marker); + + return dismarker.Position; + } + + private static void createLineStyle(out GSOFeature marker, out GSOFeature line, GSOGeoPolyline3D disline, + GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) + { + GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 + style.LineColor = Color.Red; + style.LineWidth = 5; //设置线的宽度为5 + style.VertexVisible = true; //显示线的节点 + disline.Style = style; //把风格添加到线上 + disline.AltitudeMode = EnumAltitudeMode.Absolute; + line = new GSOFeature(); + line.Geometry = disline; + + dismarker.X = pntIntersect1.X; + dismarker.Y = pntIntersect1.Y; + dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; + dismarker.Text = label + distance.ToString("0.00") + "米"; + dismarker.AltitudeMode = EnumAltitudeMode.Absolute; + + GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); + GSOTextStyle styleText = new GSOTextStyle(); + styleText.IsSizeFixed = true; + styleText.ForeColor = Color.Red; + styleText.FontSize = 20; + styleMarker.TextStyle = styleText; + dismarker.Style = styleMarker; + + marker = new GSOFeature(); + marker.Geometry = dismarker; + } + + } +} diff --git a/Cyberpipe.csproj b/Cyberpipe.csproj index d8aa9c8..bcce54d 100644 --- a/Cyberpipe.csproj +++ b/Cyberpipe.csproj @@ -203,6 +203,7 @@ + @@ -1143,6 +1144,7 @@ SysRescInfoManager.cs + True True diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 123caf1..2c45db6 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -258,42 +258,25 @@ for (int i = 0; i < scLayer.GetAllFeatures().Length; i++) { GSOFeature scFeature = scLayer.GetAt(i); - if (scFeature.GetFieldAsString("所属道路") == road) + if (scFeature.GetFieldAsString("所属道路") != road) continue; + GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; + GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + + GSOFeature sgFeature = null; + GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); + + //**判断同一个Feature + if (sgFeatures.Length >= 1) { - GSOGeoPolyline3D scLine = scFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D bufferPolygon = scLine.CreateBuffer(bufferWidth, true, 5, true, false); + sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); - GSOFeature sgFeature = null; - GSOFeatures sgFeatures = sgLayer.FindFeaturesInPolygon(bufferPolygon, true); - - //**判断同一个Feature - if (sgFeatures.Length >= 1) + if (sgFeature != null) { - sgFeature = GetSameFeature(scFeature, scLayer, sgLayer, bufferWidth); + GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; + double horizonDistance, verticalDistance; - if (sgFeature != null) - { - GSOGeoPolyline3D sgLine = sgFeature.Geometry as GSOGeoPolyline3D; - double horizonDistance, verticalDistance; - - CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); - GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); - } - else - { - scFeature.HighLight = true; - DataRow dr = dt.NewRow(); - dr[0] = scLayer.Caption; - dr[1] = scFeature.GetFieldAsString("编号"); - dr[2] = sgLayer.Caption; - dr[3] = "无"; - dr[4] = "无"; - dr[5] = "0.02"; - dr[6] = "无"; - dr[7] = "0.02"; - dr[8] = "未设计管段"; - dt.Rows.Add(dr); - } + CalculateDistance(out verticalDistance, out horizonDistance, scLine, sgLine); + GongDianAnalysis(scLayer.Caption, sgLayer.Caption, scFeature, sgFeature, horizonDistance, verticalDistance, dt); } else { @@ -311,6 +294,21 @@ dt.Rows.Add(dr); } } + else + { + scFeature.HighLight = true; + DataRow dr = dt.NewRow(); + dr[0] = scLayer.Caption; + dr[1] = scFeature.GetFieldAsString("编号"); + dr[2] = sgLayer.Caption; + dr[3] = "无"; + dr[4] = "无"; + dr[5] = "0.02"; + dr[6] = "无"; + dr[7] = "0.02"; + dr[8] = "未设计管段"; + dt.Rows.Add(dr); + } } } /// diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index 53946c0..fe32265 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -4,7 +4,7 @@ using GeoScene.Globe; namespace Cyberpipe -{ +{ //本类作用为:辅助GlobalControl上Feature的统计分析工具类 class FeatureStatisticsService { /// @@ -60,8 +60,8 @@ /// /// /// - /// - /// + /// + /// /// /// public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) @@ -74,6 +74,7 @@ for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; double length = line.GetSpaceLength(true, 6378137); totalLength += length; ncount += 1; @@ -114,7 +115,7 @@ for (int i = 0; i < feats.Length; i++) { double radius = feats[i].GetFieldAsDouble(fieldName); - if (radius >= min && radius <= max) + if (radius >= minValue && radius <= maxValue) { result.Add(feats[i]); } @@ -148,23 +149,22 @@ lstDiameter.Sort(); if (lstDiameter.Count > 0) { - for (int m = 0; m < lstDiameter.Count; m++) + foreach (float diameter in lstDiameter) { double totalLength = 0.00; int ncount = 0; for (int j = 0; j < feats.Length; j++) { - if (feats[j].GetFieldAsFloat("管径_毫米") == lstDiameter[m]) - { - GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } + if (Math.Abs(feats[j].GetFieldAsFloat("管径_毫米") - diameter) > 0.00001) continue; + GSOGeoPolyline3D line = feats[j].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = lstDiameter[m].ToString(); + featuresClass.groupFieldValue = diameter.ToString(); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -191,13 +191,13 @@ //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); - for (int j = 0; j < accessStrs.Length; j++) + foreach (string accssname in accessStrs) { - GSOFeatures feats = null; - int ncount = 0; + GSOFeatures feats; + int ncount; if (polygon == null) { - feats = flayer.GetFeatureByFieldValue("附属物名称", accessStrs[j], true); + feats = flayer.GetFeatureByFieldValue("附属物名称", accssname, true); ncount = feats.Length; } else @@ -207,14 +207,14 @@ //过滤 for (int n = 0; n < feats.Length; n++) { - if (feats[n].GetFieldAsString("附属物名称").Contains(accessStrs[j])) newfeats.Add(feats[n]); + if (feats[n].GetFieldAsString("附属物名称").Contains(accssname)) newfeats.Add(feats[n]); } ncount = newfeats.Length; } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); - featuresClass.layerName = accessStrs[j]; + featuresClass.layerName = accssname; featuresClass.ncount = ncount; result.Add(featuresClass); @@ -303,6 +303,26 @@ if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); - } + } + + + /// + /// 获取globeControl上选中的管线,如果返回空则没有选中的管线 + /// + /// 地球引擎 + /// 返回一根线 + public static GSOFeature GetSelectedPipeline(GSOGlobeControl globeControl) + { + GSOFeature resFeature; + if (globeControl.Globe.SelObjectCount < 1) return null; + GSOLayer resLayer; + globeControl.Globe.GetSelectObject(0, out resFeature, out resLayer); + if (resFeature == null) return null; + + GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; + if (line1 == null) return null; + GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; + return pipeStyle1 == null ? null : resFeature; + } } } diff --git a/FrmCompareFeature.cs b/FrmCompareFeature.cs index a05e8e7..ac622c4 100644 --- a/FrmCompareFeature.cs +++ b/FrmCompareFeature.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Data; using System.Drawing; using System.Windows.Forms; @@ -11,26 +10,16 @@ { public partial class FrmCompareFeature : Office2007Form { - GSOFeature srcFeature; - GSOFeature dscFeature; - GSOGlobeControl globeControl1; - GSOGlobeControl globeControl2; - bool isSamePolyline; - - GSOLayer layerTemp; - GSOLayer layerTemp2; - GSOFeature new_feat; + private GSOFeature srcFeature, dscFeature; + private GSOGlobeControl globeControl1, globeControl2; GSOGeoPolygon3D resPolygon; - static FrmCompareFeature frm; - public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2, int width) + public static void ShowForm(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, int width) { if (frm == null) { - frm = new FrmCompareFeature(_globeControl1, _globeControl2, _layerTemp, _layerTemp2); - + frm = new FrmCompareFeature(_globeControl1, _globeControl2); frm.Location = new Point((width - frm.Width)/2, 50); frm.Show(_globeControl1.Parent); } @@ -41,8 +30,7 @@ } } - public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2, - GSOLayer _layerTemp, GSOLayer _layerTemp2) + public FrmCompareFeature(GSOGlobeControl _globeControl1, GSOGlobeControl _globeControl2) { globeControl1 = _globeControl1; globeControl2 = _globeControl2; @@ -50,99 +38,35 @@ globeControl1.Globe.Action = EnumAction3D.SelectObject; globeControl2.Globe.Action = EnumAction3D.SelectObject; - layerTemp = _layerTemp; - layerTemp2 = _layerTemp2; globeControl1.MouseClick += globeControl1_MouseClick; globeControl2.MouseClick += globeControl2_MouseClick; } + private void invalParam() + { + if (srcFeature == null || dscFeature == null) + { + MessageBox.Show("请选择要对比的管段!", "提示"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) + { + MessageBox.Show("请选择同种类型图层!"); + return; + } + else if (srcFeature.Geometry.Type != dscFeature.Geometry.Type || + srcFeature.Geometry.Type != EnumGeometryType.GeoPolyline3D) + return; + } + private void buttonAnalysis_Click(object sender, EventArgs e) { + invalParam(); + dataGridViewX1.DataSource = null; - - double bufferWidth = Convert.ToDouble(textBox1.Text); - - if (srcFeature == null || dscFeature == null) - MessageBox.Show("请选择要对比的管段!", "提示"); - else - { - if (srcFeature.Geometry.Type != dscFeature.Geometry.Type) - MessageBox.Show("请选择同种类型图层!"); - else if (srcFeature.Geometry.Type == dscFeature.Geometry.Type && - srcFeature.Geometry.Type == EnumGeometryType.GeoPolyline3D) - { - lineLayerCompare(srcFeature, dscFeature, bufferWidth); - if (!isSamePolyline) - MessageBox.Show("实测管段与施工管段非同一条管段,请选择同一管段进行比较!", "提示"); - else - { - lineFeatureCompare(srcFeature, dscFeature); - globeControl1.Globe.Action = EnumAction3D.ActionNull; - globeControl2.Globe.Action = EnumAction3D.ActionNull; - } - } - else - MessageBox.Show("无法处理该类型图层!"); - } + lineFeatureCompare(srcFeature, dscFeature); } - - /// - /// 在容差范围内判断是否同一根管段 - /// - /// - /// - /// - /// - private bool lineLayerCompare(GSOFeature srcFeature, GSOFeature dscFeature, double bufferWidth) - { - isSamePolyline = false; - - GSOGeoPolyline3D srcLine = srcFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D srcBufferPolygon = srcLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer dsc = globeControl2.Globe.Layers.GetLayerByCaption(dscFeature.Dataset.Caption); - - if (srcBufferPolygon != null) - { - GSOFeatures featuresInSrcLayer = dsc.FindFeaturesInPolygon(srcBufferPolygon, true); - - if (featuresInSrcLayer != null && featuresInSrcLayer.Length > 0) - { - for (int i = 0; i < featuresInSrcLayer.Length; i++) - { - if (featuresInSrcLayer[i].Name == dscFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; - GSOGeoPolygon3D dscBufferPolygon = dscLine.CreateBuffer(bufferWidth * 2, true, 5, true, false); - GSOLayer src = globeControl1.Globe.Layers.GetLayerByCaption(srcFeature.Dataset.Caption); - - if (dscBufferPolygon != null) - { - GSOFeatures featuresInDscLayer = src.FindFeaturesInPolygon(dscBufferPolygon, true); - - if (featuresInDscLayer != null && featuresInDscLayer.Length > 0) - { - for (int i = 0; i < featuresInDscLayer.Length; i++) - { - if (featuresInDscLayer[i].Name == srcFeature.Name) - { - isSamePolyline = true; - break; - } - } - } - } - - return isSamePolyline; - } - /// /// 分析两根管段的具体差异 /// @@ -156,8 +80,10 @@ GSOGeoPolyline3D dscLine = dscFeature.Geometry as GSOGeoPolyline3D; double dscLineLength = dscLine.GetSpaceLength(false, 6378137); - double horizonDistance = calculateDistance(srcLine, dscLine,false); - double verticalDistance = calculateDistance(srcLine, dscLine,true); + double horizonDistance, verticalDistance; + + ClassDoubleScreenCompare.CalculateDistance(srcLine, dscLine, out horizonDistance, + out verticalDistance,globeControl1,globeControl2); DataTable dt = new DataTable(); dt.Columns.Add("数据名称"); @@ -189,6 +115,98 @@ dt.Rows.Add(dscRow); dataGridViewX1.DataSource = dt; + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) + { + globeControl1.Globe.MemoryLayer.RemoveAllFeature(); + globeControl2.Globe.MemoryLayer.RemoveAllFeature(); + + GSOFeature new_feat = new GSOFeature(); + resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); + resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; + new_feat.Geometry = resPolygon; + + globeControl1.Globe.MemoryLayer.AddFeature(new_feat); + globeControl2.Globe.MemoryLayer.AddFeature(new_feat); + + globeControl1.Refresh(); + globeControl2.Refresh(); + } + + public static void clearFeatureHighLight(GSOGlobeControl glb) + { + for (int i = 0; i < glb.Globe.Layers.Count; i++) + { + GSOLayer layer = glb.Globe.Layers[i]; + if (!(layer is GSOFeatureLayer)) continue; + GSOFeatures feats = layer.GetAllFeatures(); + for (int j = 0; j < feats.Length; j++) + { + feats[j].HighLight = false; + } + } + } + + void globeControl1_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl1.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl1.Globe.Action != EnumAction3D.SelectObject || + globeControl1.Globe.SelectedObject == null) + return; + GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + srcFeature = globeControl1.Globe.SelectedObject; + dscFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(srcFeature, + globeControl1,globeControl2,bufferWidth,resPolygon); + + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } + + void globeControl2_MouseClick(object sender, MouseEventArgs e) + { + + if (globeControl2.Globe.SelectedObject == null) return; + clearFeatureHighLight(globeControl1); + clearFeatureHighLight(globeControl2); + + try + { + double bufferWidth = Convert.ToDouble(textBox1.Text); + resPolygon = null; + + if (globeControl2.Globe.Action != EnumAction3D.SelectObject || + globeControl2.Globe.SelectedObject == null) + return; + + GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; + addPologyToGlobeControl(line, bufferWidth); + + dscFeature = globeControl2.Globe.SelectedObject; + srcFeature = ClassDoubleScreenCompare.getSameFeatureFromOtherGlobe(dscFeature, + globeControl1, globeControl2, bufferWidth, resPolygon); + } + catch (Exception ex) + { + LogError.PublishError(ex); + } + } private void FrmCompareFeature_FormClosing(object sender, FormClosingEventArgs e) @@ -198,322 +216,5 @@ frm = null; } - private void addPologyToGlobeControl(GSOGeoPolyline3D line, double bufferWidth) - { - new_feat = new GSOFeature(); - resPolygon = line.CreateBuffer(bufferWidth*2, true, 0, false, false); - resPolygon.AltitudeMode = EnumAltitudeMode.RelativeToGround; - new_feat.Geometry = resPolygon; - - layerTemp.AddFeature(new_feat); - layerTemp2.AddFeature(new_feat); - globeControl1.Refresh(); - globeControl2.Refresh(); - } - - private GSOLayer getSameLayer(GSOFeature feature) - { - GSOLayer layer = null; - if (!feature.Dataset.Caption.StartsWith("施工")) - { - layer = feature.Dataset.Caption == "供电管线" - ? globeControl2.Globe.Layers.GetLayerByCaption("施工电力管线") - : globeControl2.Globe.Layers.GetLayerByCaption("施工" + feature.Dataset.Caption); - } - else - { - layer = feature.Dataset.Caption == "施工电力管线" - ? globeControl1.Globe.Layers.GetLayerByCaption("供电管线") - : globeControl1.Globe.Layers.GetLayerByCaption(feature.Dataset.Caption.Replace("施工", "")); - } - - return layer; - } - - /// - /// 地球1中点击地球2中同步添加缓冲区 - /// - /// - /// - void globeControl1_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl1.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl1.Globe.Action == EnumAction3D.SelectObject && - globeControl1.Globe.SelectedObject != null) - { - GSOGeoPolyline3D line = globeControl1.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - addPologyToGlobeControl(line, bufferWidth); - } - - srcFeature = globeControl1.Globe.SelectedObject; - GSOLayer layers = getSameLayer(srcFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = srcFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(srcFeature, features[i], Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - listFeatures.Add(features[i]); - } - calculate(out maxLength, out dscFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - /// - /// 地球2中点击地球1中同步添加缓冲区 - /// - /// - /// - void globeControl2_MouseClick(object sender, MouseEventArgs e) - { - layerTemp.Visible = true; - layerTemp2.Visible = true; - GSOFeatures listFeatures = new GSOFeatures(); - double maxLength = 0; - - if (globeControl2.Globe.SelectedObject == null) return; - else - { - clearFeatureHighLight(globeControl1, globeControl2); - try - { - double bufferWidth = Convert.ToDouble(textBox1.Text); - resPolygon = null; - - if (globeControl2.Globe.Action != EnumAction3D.SelectObject || - globeControl2.Globe.SelectedObject == null) - return; - else - { - GSOGeoPolyline3D line = globeControl2.Globe.SelectedObject.Geometry as GSOGeoPolyline3D; - - addPologyToGlobeControl(line, bufferWidth); - } - - dscFeature = globeControl2.Globe.SelectedObject; - //双屏同时选中同一管段 - GSOLayer layers = getSameLayer(dscFeature); - - GSOFeatures features = layers.FindFeaturesInPolygon(resPolygon, false); - GSOGeoPolyline3D scLine = dscFeature.Geometry as GSOGeoPolyline3D; - - for (int i = 0; i < features.Length; i++) - { - lineLayerCompare(features[i], dscFeature, Convert.ToDouble(textBox1.Text)); - if (isSamePolyline) - { - listFeatures.Add(features[i]); - } - } - calculate(out maxLength, out srcFeature, listFeatures, scLine); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - } - - private void calculate(out double maxLength, out GSOFeature feature, GSOFeatures listFeatures, - GSOGeoPolyline3D scLine) - { - maxLength = 0; - feature=new GSOFeature(); - if (listFeatures.Length == 0) - feature = null; - else - { - if (listFeatures.Length == 1) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - } - else - { - for (int m = 0; m < listFeatures.Length; m++) - { - GSOGeoPolyline3D tempSGLine = listFeatures[m].Geometry as GSOGeoPolyline3D; - - double tempLength = tempSGLine.GetSpaceLength(false, 6378137); - double lengthAbs = Math.Abs(tempLength - scLine.GetSpaceLength(false, 6378137)); - if (m == 0) - { - feature = listFeatures[0]; - listFeatures[0].HighLight = true; - maxLength = lengthAbs; - } - else if (lengthAbs < maxLength) - { - feature = listFeatures[m]; - listFeatures[m].HighLight = true; - maxLength = lengthAbs; - } - } - } - } - } - - /// - /// 计算距离 - /// - /// - /// - /// - double calculateDistance(GSOGeoPolyline3D line1, GSOGeoPolyline3D line2,bool isVertical) - { - GSOPoint3d pntIntersect1 = new GSOPoint3d(); - GSOPoint3d pntIntersect2 = new GSOPoint3d(); - GSOPoint3d pntProIntersect1 = new GSOPoint3d(); - GSOPoint3d pntProIntersect2 = new GSOPoint3d(); - double dDist = 0; - if (isVertical) - { - dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "垂直"); - } - else - { - dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, - out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); - - LabelDistance(layerTemp, layerTemp2, pntProIntersect1, pntProIntersect2, dDist, true, "水平"); - } - - return dDist; - } - - /// - /// 清除所有高亮Feature - /// - /// - private void clearFeatureHighLight(GSOGlobeControl glb1,GSOGlobeControl glb2) - { - layerTemp.RemoveAllFeature(); - layerTemp2.RemoveAllFeature(); - //清除gbl1中高亮 - for (int i = 0; i < glb1.Globe.Layers.Count; i++) - { - GSOLayer layer = glb1.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - //清除gbl2中高亮 - for (int i = 0; i < glb2.Globe.Layers.Count; i++) - { - GSOLayer layer = glb2.Globe.Layers[i]; - if (!(layer is GSOFeatureLayer)) continue; - GSOFeatures feats = layer.GetAllFeatures(); - for (int j = 0; j < feats.Length; j++) - { - GSOFeature feat = feats[j]; - feat.HighLight = false; - } - } - } - - /// - /// 添加标注 - /// - /// - /// - /// - /// - /// - /// - private GSOPoint3d LabelDistance(GSOLayer markerLayer, GSOLayer markerLayer2, - GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, bool markerVisible,string label) - { - if (pntIntersect1 == null || pntIntersect2 == null) - return new GSOPoint3d(); - GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); - GSOPoint3ds point3ds = new GSOPoint3ds(); - point3ds.Add(pntIntersect1); - point3ds.Add(pntIntersect2); - disline.AddPart(point3ds); - - GSOGeoMarker dismarker = new GSOGeoMarker(); - GSOFeature marker = null; - GSOFeature line = null; - createLineStyle(out marker, out line,disline, pntIntersect1, pntIntersect2, distance, label, dismarker); - - line.Visible = marker.Visible = markerVisible; - markerLayer.AddFeature(line); - markerLayer.AddFeature(marker); - - markerLayer2.AddFeature(line); - markerLayer2.AddFeature(marker); - - return dismarker.Position; - } - /// - /// 控制标注和字体的颜色 - /// - /// - /// - /// - /// - /// - /// - /// - /// - private void createLineStyle(out GSOFeature marker,out GSOFeature line,GSOGeoPolyline3D disline, - GSOPoint3d pntIntersect1,GSOPoint3d pntIntersect2, double distance, string label, GSOGeoMarker dismarker) - { - GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 - style.LineColor = Color.Red; - style.LineWidth = 5; //设置线的宽度为5 - style.VertexVisible = true; //显示线的节点 - disline.Style = style; //把风格添加到线上 - disline.AltitudeMode = EnumAltitudeMode.Absolute; - line=new GSOFeature(); - line.Geometry = disline; - - dismarker.X = pntIntersect1.X; - dismarker.Y = pntIntersect1.Y; - dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; - dismarker.Text = label + distance.ToString("0.00") + "米"; - dismarker.AltitudeMode = EnumAltitudeMode.Absolute; - - GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); - GSOTextStyle styleText = new GSOTextStyle(); - styleText.IsSizeFixed = true; - styleText.ForeColor = Color.Red; - styleText.FontSize = 20; - styleMarker.TextStyle = styleText; - dismarker.Style = styleMarker; - - marker=new GSOFeature(); - marker.Geometry = dismarker; - } - } } diff --git a/FrmHotFuncStat.cs b/FrmHotFuncStat.cs index 84131ef..f313b20 100644 --- a/FrmHotFuncStat.cs +++ b/FrmHotFuncStat.cs @@ -58,14 +58,11 @@ DataTable table = OledbHelper.QueryTable(sql); - if (table != null) + if (table == null) return; + for (int i = 0; i < table.Rows.Count; i++) { - for (int i = 0; i < table.Rows.Count; i++) - { - userLists.Items.Add(table.Rows[i][0].ToString()); - } + userLists.Items.Add(table.Rows[i][0].ToString()); } - } //统计结果 private void statBtn_Click(object sender, EventArgs e) diff --git a/FrmLayerControl.cs b/FrmLayerControl.cs index 8586041..8fbce97 100644 --- a/FrmLayerControl.cs +++ b/FrmLayerControl.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Windows.Forms; using DevComponents.DotNetBar; using GeoScene.Data; @@ -13,10 +14,10 @@ GSOGlobeControl globeControl1; GSOGlobeControl globeControl2; - TreeNode terrainManagerNode = null; - TreeNode layerManagerNode = null; - TreeNode terrainManagerNode1 = null; - TreeNode layerManagerNode1 = null; +// TreeNode terrainManagerNode = null; +// TreeNode layerManagerNode = null; +// TreeNode terrainManagerNode1 = null; +// TreeNode layerManagerNode1 = null; public FrmLayerControl(GSOGlobeControl ctl1,GSOGlobeControl ctl2) { @@ -25,14 +26,14 @@ globeControl2 = ctl2; } - private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) - { - treeNode=new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - } +// private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) +// { +// treeNode=new TreeNode(); +// treeNode.ImageIndex = 0; +// treeNode.SelectedImageIndex = 0; +// treeNode.Checked = false; +// treeNode.Text = strTreeNodeText; +// } // private void initTreeView() // { @@ -51,234 +52,258 @@ // layerTree2.Nodes.Add(terrainManagerNode); // } - #region wxl重构树形结构代码 + + - private TreeNode treeNode(string strTreeNodeText) - { - TreeNode treeNode = new TreeNode(); - treeNode.ImageIndex = 0; - treeNode.SelectedImageIndex = 0; - treeNode.Checked = false; - treeNode.Text = strTreeNodeText; - return treeNode; - } -// private void appendToParent(TreeNodeCollection treeNodeCollection, ) - #endregion - private void initTreeView() +// private void initNode(string nodeName) +// { +// TreeNode nodeGroupElse1 = new TreeNode(); +// nodeGroupElse1.Text = nodeName; +// layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); +// +// TreeNode nodeGroupElse = new TreeNode(); +// nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; +// layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); +// } + +// private void initTreeNode(XmlNodeList Params) +// { +// foreach (XmlNode paramsNode in Params) //layers +// { +// foreach (XmlNode layerNode in paramsNode) //layer +// { +// initNode(layerNode.Attributes["label"].Value); +// } +// } +// +// initNode("基础图层"); +// initNode("其他"); +// } + +// private void FrmLayerControl_Load(object sender, EventArgs e) +// { +// +// initTreeView(); +// try +// { +// XmlDocument doc = new XmlDocument(); +// doc.Load(Application.StartupPath + "\\双屏设置.xml"); +// XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// +// initTreeNode(Params); +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// +// RefreshLayerAndTerrainTree(); +// } + private void FrmLayerControl_Load(object sender, EventArgs e) { layerTree1.Nodes.Clear(); layerTree2.Nodes.Clear(); - - //加载layertree2 - initLayerTree(out layerManagerNode1, "图层管理"); - layerTree1.Nodes.Add(layerManagerNode1); - initLayerTree(out terrainManagerNode1, "地形管理"); - layerTree1.Nodes.Add(terrainManagerNode1); - - initLayerTree(out layerManagerNode, "图层管理"); - layerTree2.Nodes.Add(layerManagerNode); - initLayerTree(out terrainManagerNode, "地形管理"); - layerTree2.Nodes.Add(terrainManagerNode); + TreeUtils.InitLayerTree(globeControl1, layerTree1, "实测数据"); + TreeUtils.InitLayerTree(globeControl2, layerTree2, "施工数据"); } - private void initNode(string nodeName) - { - TreeNode nodeGroupElse1 = new TreeNode(); - nodeGroupElse1.Text = nodeName; - layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); + #region wxl重构树形结构代码 - TreeNode nodeGroupElse = new TreeNode(); - nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; - layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); - } + /// + /// 构造tree,最多解析三层,可放在工具类中 - private void initTreeNode(XmlNodeList Params) - { - foreach (XmlNode paramsNode in Params) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - initNode(layerNode.Attributes["label"].Value); - } - } + /// 所属地球 + /// 要加载的树 + /// 数据来源,实测数据/施工数据/规划数据/红线数据,为空则展示全部 +// private void initTree(GSOGlobeControl gsoGlobeControl,TreeView treeView, string viewDatasrc) +// { +// treeView.Nodes.Clear(); +// LayerConfig layerConfig = Utility.layerConfig; +// List datasrcs = layerConfig.datasrcs; +// foreach (DataSrc datasrc in datasrcs) +// { +// if (viewDatasrc != null && !viewDatasrc.Trim().Equals("") && !datasrc.label.Equals(viewDatasrc)) continue; +// TreeNode rootNode = treeView.Nodes.Add(datasrc.label); +// List layerTypes = datasrc.layertypes; +// foreach (LayerType layerType in layerTypes) +// { +// TreeNode secNode = rootNode.Nodes.Add(layerType.label); +// List layers = layerType.layers; +// foreach (Layer layer in layers) +// { +// GSOLayer gsoLayer = gsoGlobeControl.Globe.Layers.GetLayerByCaption(layer.layer); +// if (gsoLayer == null) continue;//将不存在的去除 +// TreeNode node = new TreeNode(); +// node.Tag = gsoLayer; +// node.Text = layer.label; +// node.Checked = gsoLayer.Visible; +// if (gsoLayer.Visible) +// { +// secNode.Checked = true; +// rootNode.Checked = true; +// } +// secNode.Nodes.Add(node); +// } +// } +// } +// } - initNode("基础图层"); - initNode("其他"); - } + #endregion - private void FrmLayerControl_Load(object sender, EventArgs e) - { - initTreeView(); - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(Application.StartupPath + "\\双屏设置.xml"); - XmlNodeList Params = doc.SelectNodes("/Params/layers"); +// private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, +// TreeView layerTree) +// { +// try +// { +// for (int i = 0; i < nLayerCount; i++) +// { +// GSOLayer layer = globcontrol.Globe.Layers[i]; +// if (layer == null) continue; +// string layerName = layer.Name; +// TreeNode node = new TreeNode(); +// node.Tag = layer; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = layer.Caption; +// node.Checked = layer.Visible; +// +// bool isContains = false; +// for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) +// { +// if (!layerName.Contains("fttp:")) +// { +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || +// layerName.Contains("施工") || +// layerName.Contains("规划")) continue; +// break; +// case "layerTree2": +// if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[j].Nodes.Add(node); +// isContains = true; +// break; +// } +// else +// { +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); +// isContains = true; +// break; +// } +// } +// switch (layerTree.Name) +// { +// case "layerTree1": +// if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || +// layerName.Contains("标注") || +// isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || +// layerName.Contains("景观") || layerName.Contains("红线")) +// continue; +// break; +// case "layerTree2": +// if (isContains != false || layerName.Contains("tempLgdData2")) +// continue; +// break; +// default: +// break; +// } +// +// layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); +// } +// +// for (int i = 0; i < nTerrainCount; i++) +// { +// GSOTerrain terrain = globcontrol.Globe.Terrains[i]; +// if (terrain == null) continue; +// TreeNode node = new TreeNode(); +// node.Tag = terrain; +// node.ImageIndex = 0; +// node.SelectedImageIndex = 0; +// node.Text = terrain.Caption; +// node.Checked = terrain.Visible; +// switch (layerTree.Name) +// { +// case "layerTree1": +// terrainManagerNode1.Nodes.Add(node); +// break; +// case "layerTree2": +// terrainManagerNode.Nodes.Add(node); +// break; +// default: +// break; +// } +// } +// } +// catch (Exception ex) +// { +// LogError.PublishError(ex); +// } +// } - initTreeNode(Params); - } - catch (Exception ex) - { - LogError.PublishError(ex); - } +// private void initTreeNodeCheckedStatus(TreeView layerTreeView) +// { +// //节点选中状态控制 +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) +// { +// if (node.Checked != true) continue; +// layerTreeView.Nodes[0].Checked = true; +// break; +// } +// +// foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) +// { +// foreach (TreeNode childNode in node.Nodes) +// { +// GSOTerrain layer = childNode.Tag as GSOTerrain; +// if (layer == null || layer.Visible != true) continue; +// node.Checked = true; +// break; +// } +// } +// } - RefreshLayerAndTerrainTree(); - } - - private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, - TreeView layerTree) - { - try - { - for (int i = 0; i < nLayerCount; i++) - { - GSOLayer layer = globcontrol.Globe.Layers[i]; - if (layer == null) continue; - string layerName = layer.Name; - TreeNode node = new TreeNode(); - node.Tag = layer; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = layer.Caption; - node.Checked = layer.Visible; - - bool isContains = false; - for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) - { - if (!layerName.Contains("fttp:")) - { - switch (layerTree.Name) - { - case "layerTree1": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || - layerName.Contains("施工") || - layerName.Contains("规划")) continue; - break; - case "layerTree2": - if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[j].Nodes.Add(node); - isContains = true; - break; - } - else - { - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); - isContains = true; - break; - } - } - switch (layerTree.Name) - { - case "layerTree1": - if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || - layerName.Contains("标注") || - isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || - layerName.Contains("景观") || layerName.Contains("红线")) - continue; - break; - case "layerTree2": - if (isContains != false || layerName.Contains("tempLgdData2")) - continue; - break; - default: - break; - } - - layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); - } - - for (int i = 0; i < nTerrainCount; i++) - { - GSOTerrain terrain = globcontrol.Globe.Terrains[i]; - if (terrain == null) continue; - TreeNode node = new TreeNode(); - node.Tag = terrain; - node.ImageIndex = 0; - node.SelectedImageIndex = 0; - node.Text = terrain.Caption; - node.Checked = terrain.Visible; - switch (layerTree.Name) - { - case "layerTree1": - terrainManagerNode1.Nodes.Add(node); - break; - case "layerTree2": - terrainManagerNode.Nodes.Add(node); - break; - default: - break; - } - } - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - } - - private void initTreeNodeCheckedStatus(TreeView layerTreeView) - { - //节点选中状态控制 - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - - foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) - { - if (node.Checked != true) continue; - layerTreeView.Nodes[0].Checked = true; - break; - } - - foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) - { - foreach (TreeNode childNode in node.Nodes) - { - GSOTerrain layer = childNode.Tag as GSOTerrain; - if (layer == null || layer.Visible != true) continue; - node.Checked = true; - break; - } - } - } - - void exPandTreeNode() - { - layerManagerNode1.Expand(); - terrainManagerNode1.Expand(); - layerManagerNode.Expand(); - terrainManagerNode.Expand(); - } +// void exPandTreeNode() +// { +// layerManagerNode1.Expand(); +// terrainManagerNode1.Expand(); +// layerManagerNode.Expand(); +// terrainManagerNode.Expand(); +// } /// /// 刷新节点树 /// - private void RefreshLayerAndTerrainTree() - { - int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 - int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 - addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); - initTreeNodeCheckedStatus(layerTree1); - - int nLayerCount = globeControl2.Globe.Layers.Count; - int nTerrainCount = globeControl2.Globe.Terrains.Count; - addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); - initTreeNodeCheckedStatus(layerTree2); - - // 展开 - exPandTreeNode(); - } +// private void RefreshLayerAndTerrainTree() +// { +// int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 +// int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 +// addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); +// initTreeNodeCheckedStatus(layerTree1); +// +// int nLayerCount = globeControl2.Globe.Layers.Count; +// int nTerrainCount = globeControl2.Globe.Terrains.Count; +// addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); +// initTreeNodeCheckedStatus(layerTree2); +// +// // 展开 +// exPandTreeNode(); +// } /// /// 节点树复选框选中状态改变事件处理 @@ -289,144 +314,132 @@ { if (e.Action != TreeViewAction.Unknown) { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl2.Globe.Refresh(); - } - } + TreeUtils.TreeNodeCheckedChange(globeControl2,e.Node); + } + } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree2(e.Node, e.Node.Checked); + private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) + { + if (e.Action != TreeViewAction.Unknown) + { + TreeUtils.TreeNodeCheckedChange(globeControl1, e.Node); } } + + +// private void layerTree2_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl2.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree2(e.Node, e.Node.Checked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl1.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree1(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl1.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree1(childNode, isChecked); +// } +// } /// /// 改变指定节点的子节点的选中状态 /// /// /// - private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) - { - foreach (TreeNode childNode in parentNode.Nodes) - { - childNode.Checked = isChecked; - GSOLayer layer = childNode.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Tag is GSOTerrain) - { - GSOTerrain feat = childNode.Tag as GSOTerrain; - feat.Visible = isChecked; - globeControl2.Globe.Refresh(); - } - if (childNode.Nodes.Count > 0) - checkChildrenNodeLayertree2(childNode, isChecked); - } - } +// private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) +// { +// foreach (TreeNode childNode in parentNode.Nodes) +// { +// childNode.Checked = isChecked; +// GSOLayer layer = childNode.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Tag is GSOTerrain) +// { +// GSOTerrain feat = childNode.Tag as GSOTerrain; +// feat.Visible = isChecked; +// globeControl2.Globe.Refresh(); +// } +// if (childNode.Nodes.Count > 0) +// checkChildrenNodeLayertree2(childNode, isChecked); +// } +// } /// /// 节点树选中状态改变事件 /// /// /// - private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) - { - if (e.Action != TreeViewAction.Unknown) - { - if (e.Node.Tag != null) - { - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOTerrain) - { - GSOTerrain feat = e.Node.Tag as GSOTerrain; - feat.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } +// private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) +// { +// if (e.Action != TreeViewAction.Unknown) +// { +// if (e.Node.Tag != null) +// { +// if (e.Node.Tag is GSOLayer) +// { +// GSOLayer layer = e.Node.Tag as GSOLayer; +// if (layer != null) +// { +// layer.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// if (e.Node.Tag is GSOTerrain) +// { +// GSOTerrain feat = e.Node.Tag as GSOTerrain; +// feat.Visible = e.Node.Checked; +// globeControl1.Globe.Refresh(); +// } +// } +// +// CheckParentNode(e.Node); +// if (e.Node.Nodes.Count > 0) +// checkChildrenNodeLayertree1(e.Node, e.Node.Checked); +// } +// } - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - checkChildrenNodeLayertree1(e.Node, e.Node.Checked); - } - } - /// - /// 改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 - /// - /// - private void CheckParentNode(TreeNode curNode) - { - bool bChecked = false; - - if (curNode.Parent != null) - { - foreach (TreeNode node in curNode.Parent.Nodes) - { - if (node.Checked) - { - bChecked = true; - break; - } - } - if (bChecked) - { - curNode.Parent.Checked = true; - CheckParentNode(curNode.Parent); - } - else - { - curNode.Parent.Checked = false; - CheckParentNode(curNode.Parent); - } - } - } } } diff --git a/FrmMetadata.cs b/FrmMetadata.cs index 4d0d5cb..bb7c46c 100644 --- a/FrmMetadata.cs +++ b/FrmMetadata.cs @@ -12,12 +12,8 @@ { public partial class FrmMetadata : Office2007Form { - List pipelineLayerNames = new List();//线图层名称 - List workwellLayerNames = new List();//工井图层名称 - List valueLayerNames = new List();//阀门图层名称 - List instrumenLayerNames = new List();//附属物图层名称 - string filename = Utility.filename; - DataSet dataSet = new DataSet(); + + bool selectedLayer; public FrmMetadata() @@ -25,308 +21,33 @@ InitializeComponent(); loadTreeView(layerTree); } - private void FrmMetadata_Load(object sender, EventArgs e) - { - //this.ntLblC.Text = "nn"; - // loadTreeView(layerTree); - } private void loadTreeView(TreeView tv)//构建图层树 { - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - //tv.ShowPlusMinus = false; - - //tv.Nodes.Clear(); - tv.ShowLines = true; - // tv.ImageList = imageList1; - tv.CheckBoxes = false; - #region 三级 - - //foreach (XmlNode paramsNode in Params1) //layers - //{ - // foreach (XmlNode layerNode in paramsNode) //layer - // { - // TreeNode nodelayer = new TreeNode(); - // string layerName = layerNode.Attributes["label"].Value; - // nodelayer.Text = layerName; - - // if (layerNode.HasChildNodes != false) - // { - // tv.Nodes.Add(nodelayer); - // foreach (XmlNode layerchildNode in layerNode) //layerchild - // { - // if (layerchildNode.Name == "layerchild") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["type"].Value; - // string layerchildName = layerchildNode.Attributes["label"].Value; - // if (layerType == "locaserver") - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - - // } - // else - // { - // string layerName1 = layerchildNode.Attributes["layer"].Value; - // if (layerchildNode.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (layerchildNode.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild.Text = layerchildName; - // nodelayerchild.Tag = layerType + "|" + layerName1; - // nodelayerchild.Checked = boollayer; - // nodelayer.Nodes.Add(nodelayerchild); - // } - // } - // else if (layerchildNode.Name == "layertype") - // { - // TreeNode nodelayerchild = new TreeNode(); - // string layerType = layerchildNode.Attributes["label"].Value; - // nodelayerchild.Text = layerType; - // nodelayerchild.Tag = layerType; - // nodelayerchild.Checked = true; - // nodelayer.Nodes.Add(nodelayerchild); - // if (layerchildNode.HasChildNodes == true) - // { - // foreach (XmlNode childNodeLayer in layerchildNode) - // { - // TreeNode nodelayerchild1 = new TreeNode(); - // string layerName1 = childNodeLayer.Attributes["layer"].Value; - // string layerchildName = childNodeLayer.Attributes["label"].Value; - // string layerType1 = childNodeLayer.Attributes["type"].Value; - // if (childNodeLayer.Attributes["isPipeLine"] != null) - // { - // pipelineLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isWorkWell"] != null) - // { - // workwellLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isValve"] != null) - // { - // valueLayerNames.Add(layerName1); - // } - // if (childNodeLayer.Attributes["isInstrument"] != null) - // { - // instrumenLayerNames.Add(layerName1); - // } - // bool boollayer = AddLayers(layerName1, ""); - // nodelayerchild1.Text = layerchildName; - // nodelayerchild1.Tag = layerType1 + "|" + layerName1; - // nodelayerchild1.Checked = boollayer; - // nodelayerchild.Nodes.Add(nodelayerchild1); - // } - // } - // } - - // } - // } - // else - // { - // tv.Nodes.Add(nodelayer); - // } - // } - - //} - - #endregion - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - TreeNode nodelayer = new TreeNode(); - string layerName = layerNode.Attributes["label"].Value; - nodelayer.Text = layerName; - - if (layerNode.HasChildNodes) - { - tv.Nodes.Add(nodelayer); - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - if (layerchildNode.Name == "layerchild") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["type"].Value; - string layerchildName = layerchildNode.Attributes["label"].Value; - if (layerType == "locaserver") - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - - } - else - { - string layerName1 = layerchildNode.Attributes["layer"].Value; - if (layerchildNode.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (layerchildNode.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild.Text = layerchildName; - nodelayerchild.Tag = layerType + "|" + layerName1; - //nodelayerchild.Checked = boollayer; - nodelayer.Nodes.Add(nodelayerchild); - } - } - else if (layerchildNode.Name == "layertype") - { - TreeNode nodelayerchild = new TreeNode(); - string layerType = layerchildNode.Attributes["label"].Value; - nodelayerchild.Text = layerType; - nodelayerchild.Tag = layerType; - nodelayerchild.Checked = true; - nodelayer.Nodes.Add(nodelayerchild); - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode) - { - if (childNodeLayer.HasChildNodes) - { - TreeNode nodelayerchild2 = new TreeNode(); - string layer = childNodeLayer.Attributes["label"].Value; - nodelayerchild2.Text = layer; - nodelayerchild2.Tag = layer; - nodelayerchild2.Checked = true; - nodelayerchild.Nodes.Add(nodelayerchild2); - foreach (XmlNode n in childNodeLayer) - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = n.Attributes["layer"].Value; - string layerchildName = n.Attributes["label"].Value; - string layerType1 = n.Attributes["type"].Value; - if (n.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (n.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (n.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (n.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild2.Nodes.Add(nodelayerchild1); - - } - } - else - { - TreeNode nodelayerchild1 = new TreeNode(); - string layerName1 = childNodeLayer.Attributes["layer"].Value; - string layerchildName = childNodeLayer.Attributes["label"].Value; - string layerType1 = childNodeLayer.Attributes["type"].Value; - if (childNodeLayer.Attributes["isPipeLine"] != null) - { - pipelineLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isWorkWell"] != null) - { - workwellLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isValve"] != null) - { - valueLayerNames.Add(layerName1); - } - if (childNodeLayer.Attributes["isInstrument"] != null) - { - instrumenLayerNames.Add(layerName1); - } - //bool boollayer = AddLayers(layerName1, ""); - nodelayerchild1.Text = layerchildName; - nodelayerchild1.Tag = layerType1 + "|" + layerName1; - //nodelayerchild1.Checked = boollayer; - nodelayerchild.Nodes.Add(nodelayerchild1); - - } - } - } - } - - } - } - else - { - tv.Nodes.Add(nodelayer); - } - } - - } - if (tv.Nodes.Count > 0) - { - //tv.Nodes[0].Expand(); - if (tv.Nodes.Count > 0) - { - foreach (TreeNode node in tv.Nodes) - { - //node.Expand(); - } - } - } - //tv.ExpandAll(); - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } + //tv.ShowPlusMinus = false; + //tv.Nodes.Clear(); + // tv.ImageList = imageList1; + tv.ShowLines = true; + tv.CheckBoxes = false; + TreeUtils.InitLayerTree(null, tv, null); } - + /// + /// 点击父节点则展开,点击子节点则编辑元数据 + /// + /// + /// private void layerTree_AfterSelect(object sender, TreeViewEventArgs e) { - String layername = layerTree.SelectedNode.Text; - if (layerTree.SelectedNode.GetNodeCount(true) == 0) { - searchLayerInfo(layername); - - selectedLayer = true; - clearBtn.Hide(); - completeBtn.Hide(); + String layername = e.Node.Text; + if (e.Node.GetNodeCount(true) != 0) + { //点击父节点,则展开 + e.Node.Expand(); + return; } + searchLayerInfo(layername); + selectedLayer = true; + clearBtn.Hide(); + completeBtn.Hide(); } //查询元数据 private void searchLayerInfo(String layername) { @@ -335,8 +56,6 @@ + " casic_metadatalayer where casic_metadatacontent.\"LAYERID\" = casic_metadatalayer.\"LAYERID\" and casic_metadatalayer.\"LAYERNAME\"='" + layername+"'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; - if (table != null && table.Rows.Count > 0) { groupBox1.Text = layername; @@ -400,8 +119,6 @@ //判断此时layerTree有没有选中的图层 if (selectedLayer)//有选中的图层,获得其名 { - string name = layerTree.SelectedNode.Text; - OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "支持格式(*.xml)|*.xml|XML数据(*.xml)|"; dlg.Multiselect = true; @@ -419,31 +136,24 @@ //读入元数据 private void AddXMLMDdata(string strFilePath) { - try - { - dataSet.Clear(); //清空数据集中的内容 - dataSet.ReadXml(strFilePath); //读取XML文件中的内容 + DataSet dataSet = new DataSet(); + dataSet.ReadXml(strFilePath); //读取XML文件中的内容 - //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); - string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); - string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); - string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); - string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); + //string attrtitle = dataSet.Tables[0].Rows[0][0].ToString(); + string attrcons = dataSet.Tables[0].Rows[0][0].ToString(); + string attrdesc = dataSet.Tables[0].Rows[0][1].ToString(); + string attrauthor = dataSet.Tables[0].Rows[0][2].ToString(); + string attrnt = dataSet.Tables[0].Rows[0][3].ToString(); - //this.titleLbl.Text = attrtitle; - consLblC.Text = attrcons; - descLblC.Text = attrdesc; - authorLblC.Text = attrauthor; - ntLblC.Text = attrnt; - //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); + //this.titleLbl.Text = attrtitle; + consLblC.Text = attrcons; + descLblC.Text = attrdesc; + authorLblC.Text = attrauthor; + ntLblC.Text = attrnt; + //MessageBox.Show(attrtitle + "==" + attrcons + "==" + attrdesc + "==" + attrauthor + "==" + attrnt); - completeBtn.Visible = true; - //this.clearBtn.Visible = true; - } - catch (Exception e) - { - - } + completeBtn.Visible = true; + //this.clearBtn.Visible = true; } //新建/编辑元数据 private void editBtn_Click(object sender, EventArgs e) @@ -509,11 +219,7 @@ string sql = "select \"LAYERID\" from casic_metadatalayer where \"LAYERNAME\" = '" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - if (table != null && table.Rows.Count > 0)//已有该图层,属于编辑 - { - return false; - } - return true; + return table == null || table.Rows.Count <= 0; } //保存元数据 private void saveData(String method,String layername,String cons,String desc,String author,String nt) { @@ -539,17 +245,16 @@ string insertSQL = "insert into casic_metadatalayer values ('" + layerid + "','" + layername + "')";//+ string insertSQL2 = "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','" + desc + "','" + author + "','" + nt + "')"; // "insert into casic_metadatacontent values ('" + layerid + "','" + cons + "','"+desc+"','"+author+"','"+nt+"')"; - if ((OledbHelper.sqlExecuteNonQuery(insertSQL) > 0)&&(OledbHelper.sqlExecuteNonQuery(insertSQL2)>0)) - { - MessageBox.Show("保存元数据成功!"); + if ((OledbHelper.sqlExecuteNonQuery(insertSQL) <= 0) || + (OledbHelper.sqlExecuteNonQuery(insertSQL2) <= 0)) return; + MessageBox.Show("保存元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } else { //更新 string layeridSQL = "select layerid from casic_metadatalayer where LAYERNAME='"+layername+"'"; @@ -561,16 +266,14 @@ + "',casic_metadatacontent.MDAUTHOR ='" + author.Trim() + "',casic_metadatacontent.NT ='" + nt.Trim() + "' where casic_metadatacontent.LAYERID='" + layerid + "'"; - if (OledbHelper.sqlExecuteNonQuery(updateSQL) > 0) - { - MessageBox.Show("更新元数据成功!"); - consLblC.Text = cons; - descLblC.Text = desc; - authorLblC.Text = author; - ntLblC.Text = nt; - //DialogResult = DialogResult.OK; - //Close(); - } + if (OledbHelper.sqlExecuteNonQuery(updateSQL) <= 0) return; + MessageBox.Show("更新元数据成功!"); + consLblC.Text = cons; + descLblC.Text = desc; + authorLblC.Text = author; + ntLblC.Text = nt; + //DialogResult = DialogResult.OK; + //Close(); } } diff --git a/FrmMetadataStat.cs b/FrmMetadataStat.cs index cb19f84..c3c1359 100644 --- a/FrmMetadataStat.cs +++ b/FrmMetadataStat.cs @@ -2,16 +2,16 @@ using System.Collections; using System.Collections.Generic; using System.Data; +using System.Linq; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; -using System.Xml; using DevComponents.DotNetBar; namespace Cyberpipe { public partial class FrmMetadataStat : Office2007Form { - Dictionary dic = new Dictionary(); + public FrmMetadataStat() { InitializeComponent(); @@ -22,7 +22,7 @@ string sql = "select LAYERNAME from casic_metadataLayer where LAYERNAME like '%" + keywordsTxt.Text.Trim() + "%'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; + int num = 0; resultList.Clear(); consLblC.Text = ""; @@ -32,6 +32,7 @@ if (table != null && table.Rows.Count > 0) { + num = table.Rows.Count; for (int i = 0; i < num;i++ ) { resultList.Items.Add(table.Rows[i][0].ToString()); @@ -56,7 +57,8 @@ int metadataLayernum = statistMDLayer(); int nomdLayernum = layernum - metadataLayernum; //MessageBox.Show("共有多少层?" + layernum.ToString()+"=="+metadataLayernum.ToString()+"=="+nomdLayernum.ToString()); - dic.Clear(); +// dic.Clear(); + Dictionary dic = new Dictionary(); dic.Add("已建",metadataLayernum); dic.Add("未建", nomdLayernum); @@ -74,11 +76,9 @@ foreach (string key in dic.Keys) { - if (dic[key] != 0) - { - xlist.Add(key); - ylist.Add(dic[key]); - } + if (dic[key] == 0) continue; + xlist.Add(key); + ylist.Add(dic[key]); } chart1.Series[0].Points.DataBindXY(xlist, ylist); @@ -89,73 +89,15 @@ string sql = "select * from casic_metadataLayer"; DataTable table = OledbHelper.QueryTable(sql); - mdlayernum = table.Rows.Count; + if(table!=null)mdlayernum = table.Rows.Count; return mdlayernum; } //统计有多少个图层 - private int statistLayer() { - int layernum = 0; - - string filename = Utility.filename; - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(filename); - XmlNodeList Params1 = doc.SelectNodes("/Params/layers"); - - foreach (XmlNode paramsNode in Params1) //layers - { - foreach (XmlNode layerNode in paramsNode) //layer - { - //MessageBox.Show(layerNode.Attributes["label"].Value); - - if (layerNode.HasChildNodes) - { - foreach (XmlNode layerchildNode in layerNode) //layerchild - { - //MessageBox.Show(layerchildNode.Attributes["label"].Value); - if (layerchildNode.Name == "layerchild") - { - layernum++; - } - else if (layerchildNode.Name == "layertype") - { - if (layerchildNode.HasChildNodes) - { - foreach (XmlNode childNodeLayer in layerchildNode)//layertype下的layerchild - { - //MessageBox.Show(childNodeLayer.Attributes["label"].Value); - if (childNodeLayer.HasChildNodes) - { - - foreach (XmlNode n in childNodeLayer) - { - layernum++; - } - } - else - { - - layernum++; - } - } - } - } - - } - } - } - - } - - - } - catch (Exception ex) - { - LogError.PublishError(ex); - } - return layernum; + private int statistLayer() + { + List datasrcs = Utility.layerConfig.datasrcs; + return datasrcs.SelectMany(datasrc => datasrc.layertypes).Sum(layerType => layerType.layers.Count); } //选择list @@ -174,7 +116,6 @@ + "join casic_metadatalayer on casic_metadatalayer.LAYERID = casic_metadatacontent.LAYERID " + "where casic_metadatalayer.LAYERNAME='" + layername + "'"; DataTable table = OledbHelper.QueryTable(sql); - int num = table.Rows.Count; //MessageBox.Show(num.ToString()); if (table != null && table.Rows.Count > 0) { @@ -192,10 +133,5 @@ ntLblC.Text = ""; } } - - private void buttonX1_Click(object sender, EventArgs e) - { - drawChart(); - } } } diff --git a/FrmWait.Designer.cs b/FrmWait.Designer.cs index 99733ea..88f5a29 100644 --- a/FrmWait.Designer.cs +++ b/FrmWait.Designer.cs @@ -55,7 +55,6 @@ this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(0, 24); this.label1.TabIndex = 1; - this.label1.Click += new System.EventHandler(this.label1_Click); // // FrmWait // @@ -71,7 +70,7 @@ this.ShowIcon = false; this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; this.Text = "正在处理,请稍后..."; - this.Load += new System.EventHandler(this.FrmWait_Load); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmWait_FormClosing); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); diff --git a/FrmWait.cs b/FrmWait.cs index d3b7a48..d645ae4 100644 --- a/FrmWait.cs +++ b/FrmWait.cs @@ -32,27 +32,6 @@ frm = null; } - private void FrmWait_Load(object sender, EventArgs e) - { - - - } - - - private void labelX2_Click(object sender, EventArgs e) - { - - } - - private void progressBarX1_Click(object sender, EventArgs e) - { - - } - - private void label1_Click(object sender, EventArgs e) - { - - } } } diff --git a/FrmYJSHTC.cs b/FrmYJSHTC.cs index 3572371..27b7186 100644 --- a/FrmYJSHTC.cs +++ b/FrmYJSHTC.cs @@ -143,9 +143,7 @@ for (int i = ctl1.Globe.Layers.Count - 1; i >= 0; i--) { if (ctl1.Globe.Layers[i].Caption == str) - { ctl1.Globe.Layers.Remove(ctl1.Globe.Layers[i]); - } } foreach (TreeNode n in layerTree.Nodes) @@ -155,20 +153,15 @@ for (int i = 0; i < n.Nodes.Count; i++) { if (n.Nodes[i].Text == str) - { n.Nodes[i].Remove(); - } } } } string sql = "delete from casic_audit_result where SH_LAYER = '" + str + "'"; - OledbHelper.sqlExecuteNonQuery(sql); - } } - } } diff --git a/MainFrm.cs b/MainFrm.cs index bc962c4..29a3eb3 100644 --- a/MainFrm.cs +++ b/MainFrm.cs @@ -2,7 +2,6 @@ using System.Collections; using System.Collections.Generic; using System.Data; -using System.Data.OracleClient; using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; @@ -13,7 +12,6 @@ using System.Text; using System.Threading; using System.Windows.Forms; -using System.Xml; using Cyberpipe.Forms; using DevComponents.DotNetBar; using GeoScene.Data; @@ -28,10 +26,10 @@ { TreeNode layerManagerNode; bool m_bFullScreen; - + GSOGlobeControl globeControl1; GSOGlobeControl globeControl2; - private GSOHudButton legend;//定义图例 + private GSOHudButton legend; //定义图例 private GSOHudButton btnToolNone; private GSOHudButton btnToolSelect; ToolTip tooltip1; @@ -42,20 +40,20 @@ GSOBalloon featureTooltip2; GSOBalloonEx balloonEx2; - GSOLayer layerTemp; - GSOLayer layerTemp2; + GSOLayer layerTemp;//wxl注释,Globe1的临时图层 + GSOLayer layerTemp2;//wxl注释,Globe2的临时图层 FrmRedlineResult frmredResult = null; FrmMnModify frmModify; public bool frmRedlineResult = false; public bool boolfrmShResult; public bool boolfrmModify; - public static string m_CurrentQueryLayer;//定义当前查询的图层 + public static string m_CurrentQueryLayer; //定义当前查询的图层 //定位和闪烁初始化定义 private EnumDesignMode enumDesignMode; //模拟规划设计模式 - private string trackflag;//定义阀门查询个数 + private string trackflag; //定义阀门查询个数 //记录沿线飞行设置 //int m_nFlyMode = 2; @@ -67,7 +65,7 @@ Double m_dDigPitWidthAlongLine = 6; Boolean m_bDigPitByDepth = true; //选择管线 - int selectState;//wxl 注释,表示是否已经计算过净距等了,1已计算,0未计算 + int selectState; //wxl 注释,表示是否已经计算过净距等了,1已计算,0未计算 //private OracleConnection connBackup = null; //数据集合 @@ -89,8 +87,8 @@ //双屏对比 //bool zhanshi=false; Thread t = null; - private GSOHudButton legendSC;//定义图例 - private GSOHudButton legendSG;//定义图例 + private GSOHudButton legendSC; //定义图例 + private GSOHudButton legendSG; //定义图例 //管纵图 private GSOHudButton lendendGZ50; private GSOHudButton lendendGZ36; @@ -102,12 +100,13 @@ GSOGeoPoint3D bsqPT; - FrmYJSHTC frmSh;//一键审核窗口全局变量wxl - FrmWait frmWait;//一键审核等待窗口 + FrmYJSHTC frmSh; //一键审核窗口全局变量wxl + FrmWait frmWait; //一键审核等待窗口 //FrmWait frmWait2 = null;//文档操作等待窗口 float mouseDownX1, mouseDownY1; float mouseDownX2, mouseDownY2; + /// /// /// @@ -164,8 +163,9 @@ RigthMenuSet(); MenuSet(); - + } + /// /// 右屏中添加管纵图片 /// @@ -259,6 +259,7 @@ } #region 区域分析 + if (Utility.userRole.IndexOf("区域分析") < 0) { toolRightMenu.Items.Remove(区域分析ToolStripMenuItem); @@ -278,9 +279,11 @@ 区域分析ToolStripMenuItem.DropDownItems.Remove(无源淹没分析ToolStripMenuItem); } } + #endregion #region 视域分析 + if (Utility.userRole.IndexOf("视域分析") < 0) { toolRightMenu.Items.Remove(视域分析ToolStripMenuItem); @@ -300,9 +303,11 @@ 视域分析ToolStripMenuItem.DropDownItems.Remove(可视包络分析ToolStripMenuItem); } } + #endregion #region 开发分析 + if (Utility.userRole.IndexOf("开挖分析") < 0) { toolRightMenu.Items.Remove(开挖分析ToolStripMenuItem); @@ -334,9 +339,11 @@ 开挖分析ToolStripMenuItem.DropDownItems.Remove(删除隧道ToolStripMenuItem); } } + #endregion #region 拓扑分析 + if (Utility.userRole.IndexOf("拓扑分析") < 0) { toolRightMenu.Items.Remove(拓扑分析ToolStripMenuItem); @@ -372,9 +379,11 @@ 拓扑分析ToolStripMenuItem.DropDownItems.Remove(爆管分析ToolStripMenuItem); } } + #endregion #region 断面分析 + if (Utility.userRole.IndexOf("断面分析") < 0) { toolRightMenu.Items.Remove(断面分析ToolStripMenuItem); @@ -398,9 +407,11 @@ 断面分析ToolStripMenuItem.DropDownItems.Remove(基线剖面分析ToolStripMenuItem); } } + #endregion #region 绘制区域统计 + if (Utility.userRole.IndexOf("绘制区域统计") < 0) { toolRightMenu.Items.Remove(绘制区域统计ToolStripMenuItem); @@ -445,9 +456,11 @@ } } + #endregion #region 全区域统计 + if (Utility.userRole.IndexOf("全区域统计") < 0) { toolRightMenu.Items.Remove(全区域统计ToolStripMenuItem); @@ -492,9 +505,11 @@ } } + #endregion #region 查询 + if (Utility.userRole.IndexOf("查询") < 0) { toolRightMenu.Items.Remove(查询ToolStripMenuItem); @@ -542,9 +557,11 @@ 查询ToolStripMenuItem.DropDownItems.Remove(附属物查询ToolStripMenuItem); } } + #endregion #region 标注 + if (Utility.userRole.IndexOf("标注") < 0) { toolRightMenu.Items.Remove(标注ToolStripMenuItem); @@ -592,9 +609,11 @@ 标注ToolStripMenuItem.DropDownItems.Remove(标注管理ToolStripMenuItem); } } + #endregion #region 飞行 + if (Utility.userRole.IndexOf("飞行") < 0) { toolRightMenu.Items.Remove(飞行ToolStripMenuItem); @@ -618,9 +637,11 @@ 飞行ToolStripMenuItem.DropDownItems.Remove(绕眼睛飞行ToolStripMenuItem); } } + #endregion #region 编辑 + if (Utility.userRole.IndexOf("编辑") < 0) { toolRightMenu.Items.Remove(编辑ToolStripMenuItem); @@ -656,9 +677,11 @@ 编辑ToolStripMenuItem.DropDownItems.Remove(删除模型ToolStripMenuItem); } } + #endregion #region 量算 + if (Utility.userRole.IndexOf("量算") < 0) { toolRightMenu.Items.Remove(量算ToolStripMenuItem); @@ -694,6 +717,7 @@ 量算ToolStripMenuItem.DropDownItems.Remove(地表面积ToolStripMenuItem1); } } + #endregion } @@ -701,6 +725,7 @@ { #region 权限管理 + if (Utility.userRole.IndexOf("权限管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem2); @@ -734,9 +759,11 @@ } } + #endregion #region 基础工具 + if (Utility.userRole.IndexOf("基础工具") < 0) { ribbonControl1.Items.Remove(ribbonTabItem1); @@ -781,37 +808,47 @@ } } + #endregion #region 一键审核 + if (Utility.userRole.IndexOf("一键审核") < 0) { ribbonControl1.Items.Remove(ribbonTabItem11); } + #endregion #region 红线审核 + if (Utility.userRole.IndexOf("红线审核") < 0) { ribbonControl1.Items.Remove(ribbonTabItem6); } + #endregion #region 双屏对比 + if (Utility.userRole.IndexOf("双屏对比") < 0) { ribbonControl1.Items.Remove(ribbonTabItem9); } + #endregion #region 文档管理 + if (Utility.userRole.IndexOf("文档管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem4); } + #endregion #region 基础管理 + if (Utility.userRole.IndexOf("基础管理") < 0) { ribbonControl1.Items.Remove(ribbonTabItem14); @@ -841,6 +878,7 @@ } #region Fan Zhang 重构现有代码 + //初始化控件布局 private void initLayout() { @@ -848,37 +886,37 @@ double dsw = SW; if (SW > 1440) { - double myScreen = dsw / 1440; - buttonX1.Width = (int)(buttonX1.Width * myScreen); - buttonX2.Width = (int)(buttonX2.Width * myScreen); - buttonX4.Width = (int)(buttonX4.Width * myScreen); - buttonX5.Width = (int)(buttonX5.Width * myScreen); - buttonX6.Width = (int)(buttonX6.Width * myScreen); - buttonX7.Width = (int)(buttonX8.Width * myScreen); - buttonX8.Width = (int)(buttonX8.Width * myScreen); - buttonX9.Width = (int)(buttonX9.Width * myScreen); - buttonX12.Width = (int)(buttonX12.Width * myScreen); - buttonX14.Width = (int)(buttonX14.Width * myScreen); - buttonX15.Width = (int)(buttonX15.Width * myScreen); - buttonX16.Width = (int)(buttonX16.Width * myScreen); - buttonX17.Width = (int)(buttonX17.Width * myScreen); + double myScreen = dsw/1440; + buttonX1.Width = (int) (buttonX1.Width*myScreen); + buttonX2.Width = (int) (buttonX2.Width*myScreen); + buttonX4.Width = (int) (buttonX4.Width*myScreen); + buttonX5.Width = (int) (buttonX5.Width*myScreen); + buttonX6.Width = (int) (buttonX6.Width*myScreen); + buttonX7.Width = (int) (buttonX8.Width*myScreen); + buttonX8.Width = (int) (buttonX8.Width*myScreen); + buttonX9.Width = (int) (buttonX9.Width*myScreen); + buttonX12.Width = (int) (buttonX12.Width*myScreen); + buttonX14.Width = (int) (buttonX14.Width*myScreen); + buttonX15.Width = (int) (buttonX15.Width*myScreen); + buttonX16.Width = (int) (buttonX16.Width*myScreen); + buttonX17.Width = (int) (buttonX17.Width*myScreen); - labelX1.Width = (int)(labelX1.Width * myScreen); - labelX2.Width = (int)(labelX2.Width * myScreen); - labelX3.Width = (int)(labelX3.Width * myScreen); - labelX6.Width = (int)(labelX6.Width * myScreen); - labelX8.Width = (int)(labelX8.Width * myScreen); - labelX9.Width = (int)(labelX9.Width * myScreen); - labelX12.Width = (int)(labelX12.Width * myScreen); - labelX13.Width = (int)(labelX13.Width * myScreen); - labelX14.Width = (int)(labelX14.Width * myScreen); - labelX16.Width = (int)(labelX16.Width * myScreen); - labelX17.Width = (int)(labelX17.Width * myScreen); - labelX11.Width = (int)(labelX11.Width * myScreen); - labelX19.Width = (int)(labelX19.Width * myScreen); - labelX21.Width = (int)(labelX21.Width * myScreen); - labelX22.Width = (int)(labelX22.Width * myScreen); - labelX24.Width = (int)(labelX24.Width * myScreen); + labelX1.Width = (int) (labelX1.Width*myScreen); + labelX2.Width = (int) (labelX2.Width*myScreen); + labelX3.Width = (int) (labelX3.Width*myScreen); + labelX6.Width = (int) (labelX6.Width*myScreen); + labelX8.Width = (int) (labelX8.Width*myScreen); + labelX9.Width = (int) (labelX9.Width*myScreen); + labelX12.Width = (int) (labelX12.Width*myScreen); + labelX13.Width = (int) (labelX13.Width*myScreen); + labelX14.Width = (int) (labelX14.Width*myScreen); + labelX16.Width = (int) (labelX16.Width*myScreen); + labelX17.Width = (int) (labelX17.Width*myScreen); + labelX11.Width = (int) (labelX11.Width*myScreen); + labelX19.Width = (int) (labelX19.Width*myScreen); + labelX21.Width = (int) (labelX21.Width*myScreen); + labelX22.Width = (int) (labelX22.Width*myScreen); + labelX24.Width = (int) (labelX24.Width*myScreen); } sideBar1.Visible = false; sideBar1.ExpandedPanel = sideBarPanelItem3; @@ -899,7 +937,7 @@ splitContainer1.Panel2Collapsed = true; - buttonItem87.Checked = true;//默认地上模式 + buttonItem87.Checked = true; //默认地上模式 ribbonTabItem1.Select(); //初始化状态为浏览 sideBarPanelItem3.Visible = false; @@ -951,7 +989,7 @@ //图例 legend = new GSOHudButton(); - legend.SetImage(Application.StartupPath + "/Resource/图例P.jpg");//图例P + legend.SetImage(Application.StartupPath + "/Resource/图例P.jpg"); //图例P legend.SetOffset(0, 15); legend.MinOpaque = 1; legend.MaxOpaque = 1; @@ -1002,7 +1040,7 @@ globeControl1.Globe.UserBackgroundColor = Color.White; globeControl1.Globe.FlyAlongLineSpeed = m_dFlyAlongLineSpeed; globeControl1.Globe.FlyAlongLineRotateSpeed = m_dFlyAlongLineRotateSpeed; - globeControl1.Globe.FlyToPointSpeed = globeControl1.Globe.FlyToPointSpeed * 3; + globeControl1.Globe.FlyToPointSpeed = globeControl1.Globe.FlyToPointSpeed*3; globeControl1.Globe.EditSnapObject = true; globeControl1.Globe.IsReleaseMemOutOfView = true; globeControl1.Globe.ControlPanel.Visible = true; @@ -1021,18 +1059,22 @@ globeControl2.Globe.UserBackgroundColor = Color.White; globeControl2.Globe.FlyAlongLineSpeed = m_dFlyAlongLineSpeed; globeControl2.Globe.FlyAlongLineRotateSpeed = m_dFlyAlongLineRotateSpeed; - globeControl2.Globe.FlyToPointSpeed = globeControl2.Globe.FlyToPointSpeed * 3; + globeControl2.Globe.FlyToPointSpeed = globeControl2.Globe.FlyToPointSpeed*3; globeControl2.Globe.EditSnapObject = true; globeControl2.Globe.IsReleaseMemOutOfView = true; globeControl2.Globe.ControlPanel.Visible = false; - GSOSimplePolygonStyle3D trackingRectStyle = globeControl1.Globe.TrackRectTool.TrackingPolygonStyle as GSOSimplePolygonStyle3D; + GSOSimplePolygonStyle3D trackingRectStyle = + globeControl1.Globe.TrackRectTool.TrackingPolygonStyle as GSOSimplePolygonStyle3D; trackingRectStyle.FillColor = Color.FromArgb(0, 0, 0, 0); - GSOSimplePolygonStyle3D trackRectStyle = globeControl1.Globe.TrackRectTool.PolygonStyle as GSOSimplePolygonStyle3D; + GSOSimplePolygonStyle3D trackRectStyle = + globeControl1.Globe.TrackRectTool.PolygonStyle as GSOSimplePolygonStyle3D; trackRectStyle.FillColor = Color.FromArgb(0, 0, 0, 0); - GSOSimpleLineStyle3D trackRectLineStyle = globeControl1.Globe.TrackRectTool.PolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; + GSOSimpleLineStyle3D trackRectLineStyle = + globeControl1.Globe.TrackRectTool.PolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; trackRectLineStyle.LineType = EnumLineType.Solid; - GSOSimpleLineStyle3D trackRectLineStyle1 = globeControl1.Globe.TrackRectTool.TrackingPolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; + GSOSimpleLineStyle3D trackRectLineStyle1 = + globeControl1.Globe.TrackRectTool.TrackingPolygonStyle.OutlineStyle as GSOSimpleLineStyle3D; trackRectLineStyle1.LineType = EnumLineType.Solid; trackRectLineStyle1.LineColor = Color.FromArgb(0, 174, 255); trackRectLineStyle1.LineWidth = 1; @@ -1107,7 +1149,7 @@ //加载两个地球数据 private void loadData() { - Thread t1 = new Thread(doLoadDataForGlobalControl1); + Thread t1 = new Thread(doLoadDataForGlobalControl); t1.IsBackground = true; t1.Start(); } @@ -1119,30 +1161,22 @@ globeControl1.Globe.ConnectServer(Utility.serverip, Utility.serverport, "", ""); //加载locaServer中的数据 globeControl2.Globe.ConnectServer(Utility.serverip, Utility.serverport, "", ""); //加载locaServer中的数据 //初始化TreeView - // 勾选实测图层 - foreach (TreeNode tn in layerTree.Nodes) - { - if (tn.Nodes.Count <= 0) continue; - if (tn.Text != "实测数据") continue; - tn.Checked = true; - foreach (TreeNode tnChild in tn.Nodes) - { - tnChild.Checked = true; - foreach (TreeNode tnGrandChild in tnChild.Nodes) - { - tnGrandChild.Checked = true; - } - } - } - } - private void doLoadDataForGlobalControl1() + initLayerTree(); + } + /// + /// 加载地球1、2的图层 + /// + private void doLoadDataForGlobalControl() { try { globeControl1.Globe.Layers.MoveDown(10000); //加载实测管线数据 - Utility.dataSource = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.DBServer.Trim() + "/" + Utility.dbdatabase.Trim(), "", "", Utility.userID, Utility.DBPassword); + Utility.dataSource = + globeControl1.Globe.DataManager.OpenOracleDataSource( + Utility.DBServer.Trim() + "/" + Utility.dbdatabase.Trim(), "", "", Utility.userID, + Utility.DBPassword); if (Utility.dataSource != null) { @@ -1160,7 +1194,9 @@ globeControl1.Globe.Layers.GetLayerByCaption("红线").Visible = false; //globleControl1中加载规划数据 - GSODataSource ghDS = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.ghdbip + "/" + Utility.ghdbname, "", "", Utility.ghdbuser, Utility.ghdbpwd); + GSODataSource ghDS = + globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.ghdbip + "/" + Utility.ghdbname, "", "", + Utility.ghdbuser, Utility.ghdbpwd); if (ghDS != null) { for (int j = 0; j < ghDS.DatasetCount; j++) @@ -1176,13 +1212,16 @@ } //globeControl1,globeControl2中加载施工数据 - GSODataSource sgDS = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.sgdbip + "/" + Utility.sgdbname, "", "", Utility.sgdbuser, Utility.sgdbpwd); + GSODataSource sgDS = + globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.sgdbip + "/" + Utility.sgdbname, "", "", + Utility.sgdbuser, Utility.sgdbpwd); if (sgDS != null) { for (int m = 0; m < sgDS.DatasetCount; m++) { GSODataset dataset = sgDS.GetDatasetAt(m); - if (dataset != null && !dataset.Caption.Contains("SH") && Utility.dictionaryNetLayerNameAndCaption.ContainsKey(dataset.Caption)) + if (dataset != null && !dataset.Caption.Contains("SH") && + Utility.dictionaryNetLayerNameAndCaption.ContainsKey(dataset.Caption)) { dataset.Caption = dataset.Name; globeControl1.Globe.Layers.Add(dataset); @@ -1196,12 +1235,12 @@ // LoadDataForGlobalControl ss = connectServer; // ss(); - + this.Invoke((EventHandler) delegate { connectServer(); }); - + } catch (Exception ex) @@ -1212,67 +1251,17 @@ private void initLayerTree() { + layerTree.Nodes.Clear(); //加载临时图层节点 layerManagerNode = new TreeNode(); layerManagerNode.ImageIndex = 0; layerManagerNode.SelectedImageIndex = 0; layerManagerNode.Checked = true; layerManagerNode.Text = "临时图层"; + layerManagerNode.Tag = layerTemp; layerTree.Nodes.Add(layerManagerNode); - XmlDocument doc = new XmlDocument(); - doc.Load(Utility.filename); - XmlNodeList xmlLayerNodes = doc.SelectNodes("//layer"); - - foreach (XmlNode xmlLayerNode in xmlLayerNodes) - { - - //TODO LIST:创建一级TreeNode(实测、规划、施工) - TreeNode nodelayer = new TreeNode(); - string layerName = xmlLayerNode.Attributes["label"].Value; - nodelayer.Text = layerName; - nodelayer.Checked = false; - layerTree.Nodes.Add(nodelayer); - - XmlNodeList xmlChildLayerNodes = xmlLayerNode.ChildNodes; - foreach (XmlNode xmlChildLayerNode in xmlChildLayerNodes) - { - //TODO LIST:创建二级TreeNode节点 - TreeNode secondLevelNode = new TreeNode(); - string layerType = xmlChildLayerNode.Attributes["label"].Value; - secondLevelNode.Text = layerType; - - if (xmlChildLayerNode.Attributes["type"] != null) - { //道路图层特殊处理 - string type = xmlChildLayerNode.Attributes["type"].Value; - secondLevelNode.Tag = type + "|" + layerType; - } - else - { - secondLevelNode.Tag = layerType; - } - secondLevelNode.Checked = false; - nodelayer.Nodes.Add(secondLevelNode); - - XmlNodeList xmlActitualLayerNodes = xmlChildLayerNode.ChildNodes; - - foreach (XmlNode xmlActitualLayerNode in xmlActitualLayerNodes) - { - //TODO LIST:创建三级图层节点 - TreeNode layerNode = new TreeNode(); - string actutallylayerType = xmlActitualLayerNode.Attributes["type"].Value; - string actutallylayerName = xmlActitualLayerNode.Attributes["layer"].Value; - string actutallyLabelName = xmlActitualLayerNode.Attributes["label"].Value; - - layerNode.Text = actutallyLabelName; - layerNode.Tag = layerType + "|" + actutallyLabelName; - layerNode.Checked = false; - secondLevelNode.Nodes.Add(layerNode); - } - - } - - } + TreeUtils.InitLayerTree(globeControl1, layerTree, null); } @@ -1298,7 +1287,8 @@ for (int i = 0; i < markerStrs.Length; i++) { if (!File.Exists(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd")) continue; - GSOLayer markerLayer = globeControl1.Globe.Layers.Add(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd"); + GSOLayer markerLayer = + globeControl1.Globe.Layers.Add(Application.StartupPath + "\\标注管理\\" + markerStrs[i] + ".lgd"); if (markerLayer == null) continue; TreeNode node1 = new TreeNode(); node1.Text = markerLayer.Caption; @@ -1312,9 +1302,11 @@ private void MainFrm_Load(object sender, EventArgs e) { + + layerTree.Nodes.Add("正在加载,请稍后……");//树状图加载在图层加载之后,故增加提示 initGlobalControl(); //initGlobalMap(); - initLayerTree(); +// initLayerTree(); initMarkerTree(); initLayout(); loadData(); @@ -1383,7 +1375,7 @@ tempnode.Checked = node.Checked ? feature.Visible : false; tempnode.Tag = feature; node.Nodes.Add(tempnode); - GSOFeatureFolder featureFolder = (GSOFeatureFolder)feature; + GSOFeatureFolder featureFolder = (GSOFeatureFolder) feature; VisitFeature3Ds(featureFolder.Features, tempnode); } else @@ -1444,7 +1436,7 @@ /// Boolean CheckDatasetGeoReference(GSODataset dataset, string strDataPath) { - + if (dataset.GeoReferenceType != EnumGeoReferenceType.Flat) return true; Boolean bSuccess = false; if (MessageBox.Show("数据没有空间参考信息,请设置空间参考信息!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) != @@ -1498,7 +1490,7 @@ dlg.Filter = "输出JPEG(*.jpg)|*.jpg|输出PNG(*.png)|*.png|输出BMP(*.bmp)|*.bmp|输出BMP(*.gif)|*.gif"; if (dlg.ShowDialog() == DialogResult.OK) { - string extension = Path.GetExtension(dlg.FileName);//扩展名 + string extension = Path.GetExtension(dlg.FileName); //扩展名 switch (extension) { case ".jpg": @@ -1520,6 +1512,7 @@ globeControl1.Globe.Action = EnumAction3D.ActionNull; globeControl1.Globe.MouseRoamingEnable = true; } + /// /// 定位正北正90度俯视 /// @@ -1548,7 +1541,6 @@ void globeControl1_HudControlMouseIntoEvent(object sender, HudControlMouseIntoEventArgs e) { - GSOHudButton btn = e.HudControl as GSOHudButton; tooltip1 = new ToolTip(); switch (e.HudControl.Name) { @@ -1573,163 +1565,46 @@ break; } } - /// - /// layerTree选中后事件处理 - /// - /// - /// + + #region wxl 重构树形结构代码 + private void layerTree_AfterCheck(object sender, TreeViewEventArgs e) { - if (e.Node.Tag != null) + if (e.Action != TreeViewAction.Unknown) { - if (e.Node.Tag.ToString().Contains("|")) - { - string nodeTag = e.Node.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(nodeTag); - if (layer != null) - { - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - if (e.Node.Tag is GSOLayer) - { - GSOLayer layer = e.Node.Tag as GSOLayer; - layer.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - if (e.Node.Tag is GSOFeature) - { - if (e.Node.Nodes.Count == 0) - { - GSOFeature feat = e.Node.Tag as GSOFeature; - feat.Visible = e.Node.Checked; - globeControl1.Globe.Refresh(); - } - } - } - CheckControl(e); - } - /// - /// 树节点选中方法 - /// - /// - private void CheckControl(TreeViewEventArgs e) - { - if (e.Action == TreeViewAction.Unknown||e.Node == null || Convert.IsDBNull(e.Node)) return; - CheckParentNode(e.Node); - if (e.Node.Nodes.Count > 0) - { - CheckAllChildNodes(e.Node, e.Node.Checked); - } - } - /// - /// 改变所有子节点的状态 - /// - /// - /// - private void CheckAllChildNodes(TreeNode pn, bool IsChecked) - { - foreach (TreeNode tn in pn.Nodes) - { - tn.Checked = IsChecked; - - if (tn.Nodes.Count > 0) - { - CheckAllChildNodes(tn, IsChecked); - } + TreeUtils.TreeNodeCheckedChange(globeControl1, e.Node); } } - //改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 - private void CheckParentNode(TreeNode curNode) - { - bool bChecked = false; - - if (curNode.Parent == null) return; - foreach (TreeNode node in curNode.Parent.Nodes) - { - if (node.Checked) - { - bChecked = true; - break; - } - } - - if (bChecked) - { - curNode.Parent.Checked = true; - CheckParentNode(curNode.Parent); - } - else - { - curNode.Parent.Checked = false; - CheckParentNode(curNode.Parent); - } - } - + #endregion private void layerTree_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (e.Button != MouseButtons.Right) return; layerTree.SelectedNode = e.Node; - if (e.Node.Tag == null) return; - if (e.Button == MouseButtons.Right && e.Node.Tag.ToString().Contains("|")) + if (e.Node.Tag == null || e.Node.Parent == null) return; //排除无图层节点和第一级节点 + + //来自locaserver的数据,直接返回就行了,目前只有一个180fd,暂时单独处理 + GSOLayer gsoLayer = e.Node.Tag as GSOLayer; + if (gsoLayer == null || gsoLayer.Caption.Equals(Utility.roadLayerName)) return; + if (e.Node.Parent.Text.Equals("临时图层") || e.Node.Parent.Text.Equals("我的地标")) { - - if (e.Node.Tag.ToString().Split('|')[0] == "locaserver") - { - - foreach (ToolStripItem item in layerNodeContexMenu.Items) - { - item.Visible = false; - } - return; - - } - - if (e.Node.Tag.ToString().Split('|')[0] == "new") - { - LayerEditableMenuItem.Enabled = true; - foreach (ToolStripItem item in layerNodeContexMenu.Items) - { - item.Visible = false; - } - //LayerSelectableMenuItem.Visible = true; - //LayerEditableMenuItem.Visible = true; - RemoveLayer.Visible = true; - RefreshLayerFeatureListMenuItem.Visible = true; - //SaveLayerMenuItem.Visible = true; - //LayerFlyMenuItem.Visible = true; - } - + //临时图层下的子节点应该展示的 + contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); + contextMenuStripDeleteLayerNode.Tag = e.Node; + } + else + { LayerSelectableMenuItem.Visible = true; LayerEditableMenuItem.Visible = true; SaveLayerMenuItem.Visible = true; LayerFlyMenuItem.Visible = true; 导出CADToolStripMenuItem1.Visible = true; - layerNodeContexMenu.Show(layerTree, e.X, e.Y); layerNodeContexMenu.Tag = e.Node; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(e.Node.Tag.ToString().Split('|')[1]); - if (layer != null) - { - LayerSelectableMenuItem.Checked = layer.Selectable; - LayerEditableMenuItem.Checked = layer.Editable; - } + LayerSelectableMenuItem.Checked = gsoLayer.Selectable; + LayerEditableMenuItem.Checked = gsoLayer.Editable; } - else - { - if (e.Node.Tag is GSOLayer && e.Node.Parent != null && e.Node.Parent.Text.Trim() == "临时图层") - { - contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); - contextMenuStripDeleteLayerNode.Tag = e.Node; - } - else if (e.Node.Tag is GSOFeature && e.Node.Parent != null && e.Node.Parent.Text.Trim() == "我的地标") - { - contextMenuStripDeleteLayerNode.Show(layerTree, e.X, e.Y); - contextMenuStripDeleteLayerNode.Tag = e.Node; - } - } + } /// @@ -1740,75 +1615,61 @@ private void 删除ToolStripMenuItem2_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "临时图层") + if (node == null || node.Parent == null) return; + if (node.Parent.Text.Trim() == "临时图层") { - if (node.Tag is GSOLayer) - { - GSOLayer layer = node.Tag as GSOLayer; - - for (int i = globeControl1.Globe.Layers.Count - 1; i >= 0; i--) - { - if (globeControl1.Globe.Layers[i].Caption == layer.Caption) - { - globeControl1.Globe.Layers.Remove(globeControl1.Globe.Layers[i]); - } - } - - globeControl1.Globe.Refresh(); - - node.Remove(); - } - } - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "我的地标") + if (!(node.Tag is GSOLayer)) return; + GSOLayer layer = node.Tag as GSOLayer; + globeControl1.Globe.Layers.Remove(layer); + globeControl1.Globe.Refresh(); + node.Remove(); + }else if (node.Parent.Text.Trim() == "我的地标") { - if (node.Tag is GSOFeature) - { - GSOFeature f = node.Tag as GSOFeature; - f.Delete(); - globeControl1.Globe.Refresh(); - - node.Remove(); - } + if (!(node.Tag is GSOFeature)) return; + GSOFeature f = node.Tag as GSOFeature; + f.Delete(); + globeControl1.Globe.Refresh(); + node.Remove(); } + } private void 可编辑ToolStripMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - if (node != null && node.Parent != null && node.Parent.Text.Trim() == "临时图层") - { - if (node.Tag is GSOLayer) - { - GSOLayer layer = node.Tag as GSOLayer; - - 可编辑ToolStripMenuItem.Checked = !可编辑ToolStripMenuItem.Checked; - layer.Editable = 可编辑ToolStripMenuItem.Checked; - } - } + if (node == null || + node.Parent == null || + node.Parent.Text.Trim() != "临时图层" || !(node.Tag is GSOLayer)) return; + GSOLayer layer = node.Tag as GSOLayer; + 可编辑ToolStripMenuItem.Checked = !可编辑ToolStripMenuItem.Checked; + layer.Editable = 可编辑ToolStripMenuItem.Checked; } private void 保存ToolStripMenuItem_Click(object sender, EventArgs e) { - //TreeNode node = layerNodeContexMenu.Tag as TreeNode; - TreeNode node = contextMenuStripDeleteLayerNode.Tag as TreeNode; - - Int32 nIndex = node.Index; - string layerCaption = node.Text;//.Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); +// TreeNode node = contextMenuStripDeleteLayerNode.Tag as TreeNode; + TreeNode node = layerTree.SelectedNode; + if (node == null||node.Tag==null) return; + GSOLayer layer = node.Tag as GSOLayer; + if (layer == null) return; layer.Dataset.Save(); } - + //TODO LIST: wxl? Tag更正 private void 定位ToolStripMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerTree.SelectedNode; - - if (node == null) return; + if (node == null||node.Parent==null) return; if (node.Parent.Text.Trim() == "临时图层") { - GSOLayer lsLayer = globeControl1.Globe.Layers.GetLayerByCaption(node.Text); + GSOLayer lsLayer = node.Tag as GSOLayer; + if (lsLayer == null) + { + LogHelper.WriteLog(typeof(MainFrm),"要定位的临时图层不存在:"+node.Text); + return; + } double x = lsLayer.LatLonBounds.Center.X; double y = lsLayer.LatLonBounds.Center.Y; - if (x == 0 && y == 0) + if (x.Equals(0) && y.Equals(0)) { x = lsLayer.Bounds.Center.X; y = lsLayer.Bounds.Center.Y; @@ -1818,20 +1679,14 @@ } else { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); - + GSOLayer layer = node.Tag as GSOLayer; if (layer == null) return; - if (layer.Caption == "红线") + if (layer.Caption.Equals("红线")) { globeControl1.Globe.FlyToPosition(new GSOPoint3d(120.610963, 31.188121, 50), EnumAltitudeMode.Absolute, -4, 50, 1000); globeControl1.Globe.FlyToPointSpeed = 10000000; globeControl1.Globe.Action = EnumAction3D.SelectObject; - - GSOLayer redLayer = globeControl1.Globe.Layers.GetLayerByCaption("红线"); - if (redLayer != null) - { - redLayer.Visible = true; - } + layer.Visible = true; globeControl1.Refresh(); } else @@ -1842,55 +1697,28 @@ } } } - + //TODO LIST: wxl? Tag更正 private void layerTree_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) { - if (layerTree.SelectedNode == null) return; - if (layerTree.SelectedNode.Tag.ToString().Contains("|")) + TreeNode node = layerTree.SelectedNode; + if (node == null) return; + if (node.Tag is GSOLayer) { - string nodeTag = layerTree.SelectedNode.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(nodeTag); - if (layer != null) + GSOLayer layer = node.Tag as GSOLayer; + if (layer.GetAllFeatures().Length <= 0) return; + GSOFeature feature = layer.GetAt(0); + if (feature != null && feature.Geometry != null) { - if (layer.Caption == "红线") - { - globeControl1.Globe.FlyToPosition(new GSOPoint3d(120.610963, 31.188121, 50), EnumAltitudeMode.Absolute, -4, 50, 1000); - globeControl1.Globe.FlyToPointSpeed = 10000000; - globeControl1.Globe.Action = EnumAction3D.SelectObject; - - GSOLayer redLayer = globeControl1.Globe.Layers.GetLayerByCaption("红线"); - if (redLayer != null) - { - redLayer.Visible = true; - } - globeControl1.Refresh(); - } - else - { - double x = layer.LatLonBounds.Center.X; - double y = layer.LatLonBounds.Center.Y; - globeControl1.Globe.FlyToPosition(new GSOPoint3d(x, y, 0), EnumAltitudeMode.Absolute); - } + globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute);//, 0, 0, 1000); + } + else + { + globeControl1.Globe.FlyToFeature(feature); } } - if (layerTree.SelectedNode.Tag is GSOLayer) + else if (node.Tag is GSOFeature) { - GSOLayer layer = layerTree.SelectedNode.Tag as GSOLayer; - if (layer.GetAllFeatures().Length > 0) - { - GSOFeature feature = layer.GetAt(0); - if (feature != null && feature.Geometry != null) - { - globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute);//, 0, 0, 1000); - } - else - { - globeControl1.Globe.FlyToFeature(feature); - } - } - } else if (layerTree.SelectedNode.Tag is GSOFeature) - { - GSOFeature feature = layerTree.SelectedNode.Tag as GSOFeature; + GSOFeature feature = node.Tag as GSOFeature; if (feature.Geometry != null) { globeControl1.Globe.FlyToPosition(feature.Geometry.GeoCenterPoint, EnumAltitudeMode.Absolute, 0, 0, 10); @@ -2231,15 +2059,7 @@ int idx = dataGridViewX2.Rows.Add(); dataGridViewX2.Rows[idx].Tag = feat; dataGridViewX2.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX2.Rows[idx].Cells[1].Value = featureName; } } @@ -2261,15 +2081,7 @@ int idx = dataGridViewLineList.Rows.Add(); dataGridViewLineList.Rows[idx].Tag = feat; dataGridViewLineList.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewLineList.Rows[idx].Cells[1].Value = featureName; } } @@ -2291,15 +2103,7 @@ int idx = dataGridViewX8.Rows.Add(); dataGridViewX8.Rows[idx].Tag = feat; dataGridViewX8.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX8.Rows[idx].Cells[1].Value = featureName; } } @@ -2321,15 +2125,7 @@ int idx = dataGridViewX4.Rows.Add(); dataGridViewX4.Rows[idx].Tag = feat; dataGridViewX4.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX4.Rows[idx].Cells[1].Value = featureName; } @@ -2353,15 +2149,7 @@ int idx = dataGridViewX6.Rows.Add(); dataGridViewX6.Rows[idx].Tag = feat; dataGridViewX6.Rows[idx].Cells[0].Value = resLayer.Caption; - string featureName; - if (isFeatureContainsBianhao(feat)) - { - featureName = feat.GetValue(featureIDFieldName).ToString(); - } - else - { - featureName = feat.Name; - } + var featureName = isFeatureContainsBianhao(feat) ? feat.GetValue(featureIDFieldName).ToString() : feat.Name; dataGridViewX6.Rows[idx].Cells[1].Value = featureName; } } @@ -2736,77 +2524,104 @@ return str; } - //string filename = Utility.filename; - //List g1layername = new List(); - /// /// 获取目标图层 /// /// +// private GSOLayer TreeNodeFeatureLayer() +// { +// TreeNode featureAddPipeFitTreenode = GetDestLayerFeatureAddTreeNode(); +// GSOLayer featureAddLayer = globeControl1.Globe.Layers.GetLayerByCaption(featureAddPipeFitTreenode.Tag.ToString().Split('|')[1]); +// +// return featureAddLayer; +// } + //TODO LIST: wxl11? 待更正,Node的Tag现在都已经统一为gsolayer对象了 +// private TreeNode GetDestLayerFeatureAddTreeNode() +// { +// for (int i = 0; i < layerTree.Nodes.Count; i++) +// { +// TreeNode tempNode = layerTree.Nodes[i]; +// for (int j = 0; j < tempNode.Nodes.Count; j++) +// { +// TreeNode tempChildNode = tempNode.Nodes[j]; +// if (tempChildNode.Tag.ToString().Split('|').Length > 1) // Config配置文件配置的图层 +// {//本层节点Tag记录layer +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode; +// } +// } +// else //临时添加的本地图层 +// {//子层节点的Tag记录layer +// for (int m = 0; m < tempChildNode.Nodes.Count; m++) +// { +// TreeNode tempChildNode1 = tempChildNode.Nodes[m]; +// if (tempChildNode1.Tag.ToString().Split('|').Length > 1) +// { +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode1.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode1.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode1; +// } +// } +// else +// { +// for (int n = 0; n < tempChildNode1.Nodes.Count; n++) +// { +// TreeNode tempChildNode2 = tempChildNode1.Nodes[n]; +// if (tempChildNode2.Tag.ToString().Split('|').Length <= 1) continue; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode2.Tag.ToString().Split('|')[1]); +// if (layer == null) +// { +// continue; +// } +// if (tempChildNode2.Tag != null && layer.IsDestLayerFeatureAdd()) +// { +// return tempChildNode2; +// } +// } +// } +// } +// } +// } +// } +// return null; +// } private GSOLayer TreeNodeFeatureLayer() { TreeNode featureAddPipeFitTreenode = GetDestLayerFeatureAddTreeNode(); - GSOLayer featureAddLayer = globeControl1.Globe.Layers.GetLayerByCaption(featureAddPipeFitTreenode.Tag.ToString().Split('|')[1]); - - return featureAddLayer != null ? featureAddLayer : null; + if (featureAddPipeFitTreenode == null) return null; + GSOLayer featureAddLayer = featureAddPipeFitTreenode.Tag as GSOLayer; + return featureAddLayer; } - + //遍历最深三层找到目标node. private TreeNode GetDestLayerFeatureAddTreeNode() { - for (int i = 0; i < layerTree.Nodes.Count; i++) + + foreach (TreeNode layerTreeNode in layerTree.Nodes) { - TreeNode tempNode = layerTree.Nodes[i]; - for (int j = 0; j < tempNode.Nodes.Count; j++) + if (layerTreeNode.Tag == null && layerTreeNode.Nodes.Count > 0) { - TreeNode tempChildNode = tempNode.Nodes[j]; - if (tempChildNode.Tag.ToString().Split('|').Length > 1) // Config配置文件配置的图层 + foreach (TreeNode node in layerTreeNode.Nodes) { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode; - } + GSOLayer gsoLayer = node.Tag as GSOLayer; + if (gsoLayer != null && gsoLayer.IsDestLayerFeatureAdd()) return node; + } - else //临时添加的本地图层 - { - for (int m = 0; m < tempChildNode.Nodes.Count; m++) - { - TreeNode tempChildNode1 = tempChildNode.Nodes[m]; - if (tempChildNode1.Tag.ToString().Split('|').Length > 1) - { - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode1.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode1.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode1; - } - } - else - { - for (int n = 0; n < tempChildNode1.Nodes.Count; n++) - { - TreeNode tempChildNode2 = tempChildNode1.Nodes[n]; - if (tempChildNode2.Tag.ToString().Split('|').Length <= 1) continue; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(tempChildNode2.Tag.ToString().Split('|')[1]); - if (layer == null) - { - continue; - } - if (tempChildNode2.Tag != null && layer.IsDestLayerFeatureAdd()) - { - return tempChildNode2; - } - } - } - } - } + } + else + { + GSOLayer gsoLayer = layerTreeNode.Tag as GSOLayer; + if (gsoLayer != null && gsoLayer.IsDestLayerFeatureAdd()) return layerTreeNode; } } return null; @@ -3221,6 +3036,7 @@ } } } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 目标图层 菜单 /// @@ -3228,14 +3044,15 @@ /// private void FeatureAddLayerMenuItem_Click(object sender, EventArgs e) { - if (!FeatureAddLayerMenuItem.Checked) - { - TreeNode node = layerNodeContexMenu.Tag as TreeNode; - FeatureAddLayerMenuItem.Checked = true; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); - globeControl1.Globe.DestLayerFeatureAdd = layer; - } + if (FeatureAddLayerMenuItem.Checked) return; + TreeNode node = layerNodeContexMenu.Tag as TreeNode; + FeatureAddLayerMenuItem.Checked = true; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; + globeControl1.Globe.DestLayerFeatureAdd = layer; } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 可选择 菜单 /// @@ -3244,11 +3061,13 @@ private void LayerSelectableMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - Int32 nIndex = node.Index; - GSOLayer layer = globeControl1.Globe.Layers[nIndex]; +// GSOLayer layer = globeControl1.Globe.Layers[nIndex]; + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; LayerSelectableMenuItem.Checked = !LayerSelectableMenuItem.Checked; - layer.Selectable = LayerSelectableMenuItem.Checked; + if (layer != null) layer.Selectable = LayerSelectableMenuItem.Checked; } + //TODO LIST: wxl? Tag更正 /// /// 图层目录树 右键菜单中的 可编辑 菜单 /// @@ -3257,23 +3076,27 @@ private void LayerEditableMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(node.Tag.ToString().Split('|')[1]); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; LayerEditableMenuItem.Checked = !LayerEditableMenuItem.Checked; - layer.Editable = LayerEditableMenuItem.Checked; + if (layer != null) layer.Editable = LayerEditableMenuItem.Checked; } /// /// 图层目录树 右键菜单中的 保存 菜单 /// /// /// + //TODO LIST: wxl? Tag更正 private void SaveLayerMenuItem_Click(object sender, EventArgs e) { TreeNode node = layerNodeContexMenu.Tag as TreeNode; - Int32 nIndex = node.Index; - string layerCaption = node.Tag.ToString().Split('|')[1]; - GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); - layer.Dataset.Save(); +// string layerCaption = node.Tag.ToString().Split('|')[1]; +// GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layerCaption); + if (node == null) return; + GSOLayer layer = node.Tag as GSOLayer; + if (layer != null) layer.Dataset.Save(); } #region wxl feature的公共方法 @@ -3455,7 +3278,6 @@ return; GSOFeatureLayer flayer = layer as GSOFeatureLayer; - GSOFeatureDataset fdataset = flayer.Dataset as GSOFeatureDataset; GSOFeatures feats = flayer.GetAllFeatures(); for (int i = 0; i < feats.Length; i++) { @@ -3480,7 +3302,6 @@ return; GSOFeatureLayer flayer = layer as GSOFeatureLayer; - GSOFeatureDataset fdataset = flayer.Dataset as GSOFeatureDataset; GSOFeatures feats = flayer.GetAllFeatures(); for (int i = 0; i < feats.Length; i++) { @@ -5508,7 +5329,6 @@ private void addNodeToLayerManagerNode(GSOLayer layer) { if (layer == null) return; - GSODataset dataset = layer.Dataset; CheckDatasetGeoReference(layer.Dataset, ""); TreeNode node = new TreeNode(); @@ -5527,43 +5347,24 @@ /// /// /// - public int getLabelName(GSOLayer layer) - { - int nid = -1; - if (layer.GetAllFeatures().Length > 0) - { - string id = layer.GetAllFeatures()[layer.GetAllFeatures().Length - 1].Name; +// public int getLabelName(GSOLayer layer) +// { +// int nid = -1; +// if (layer.GetAllFeatures().Length > 0) +// { +// string id = layer.GetAllFeatures()[layer.GetAllFeatures().Length - 1].Name; +// +// int.TryParse(id, out nid); +// } +// else +// { +// nid = 0; +// } +// return nid; +// } - int.TryParse(id, out nid); - } - else - { - nid = 0; - } - return nid; - } /// - /// 判断选中的对象是否为管线 - /// - /// 被选中管线 - /// 返回一根线 - private GSOFeature IsPipeLineOfSelectedObj() - { - GSOFeature resFeature = null; - if (globeControl1.Globe.SelObjectCount < 1) return null; - GSOLayer resLayer = null; - globeControl1.Globe.GetSelectObject(0, out resFeature, out resLayer); - if (resFeature == null) return null; - - GSOGeoPolyline3D line1 = resFeature.Geometry as GSOGeoPolyline3D; - if (line1 == null) return null; - GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; - if (pipeStyle1 == null) return null; - - return resFeature; - } - /// /// 图层节点树中 节点 右键单击事件处理 /// /// @@ -5615,13 +5416,15 @@ { TreeNode node = contextMenuStrip2.Tag as TreeNode; TreeNode parentNode = node.Parent; - Int32 nIndex = node.Index; if (parentNode.Text == "标注管理" || parentNode.Text == "传感器管理") { RefreshTreeNodeLayerFeatureList(node); } } + + #region wxl? VisitFeature3Ds的作用,重构后,是否对其有影响 + /// /// 给指定的图层节点添加代表feature对象的子节点 /// @@ -5636,6 +5439,9 @@ VisitFeature3Ds(layer.GetAllFeatures(), layerTreeNode); } } + + #endregion + /// /// 标注管理、传感器管理 图层目录树的右键菜单中的 移除所有 菜单 /// @@ -5660,53 +5466,11 @@ { if (e.Action != TreeViewAction.Unknown) { - CheckTreeNode(e.Node, e.Node.Checked); + //wxl优化标注管理树形结构 + TreeUtils.TreeNodeCheckedChange(globeControl1,e.Node); } } - /// - /// 改变指定节点对应的复选框的选中状态 - /// - /// - /// - private void CheckTreeNode(TreeNode node, Boolean bChecked) - { - CheckChildTreeNode(node, bChecked); - globeControl1.Globe.Refresh(); - } - /// - /// 改变指定节点的子节点对应的复选框的选中状态 - /// - /// - /// - private void CheckChildTreeNode(TreeNode node, Boolean bChecked) - { - if (node == null) - return; - if (node.Tag != null) - { - if (node.Tag.GetType() == typeof(GSOFeatureFolder) || node.Tag.GetType() == typeof(GSOFeature)) - ((GSOFeature)node.Tag).SetVisibleDirectly(bChecked); - else - { - GSOLayer curLayer = node.Tag as GSOLayer; - GSOTerrain curTerrain = node.Tag as GSOTerrain; - if (curLayer != null) - { - curLayer.Visible = bChecked; - } - else if (curTerrain != null) - { - curTerrain.Visible = bChecked; - } - } - } - // 递归处理子节点 - for (int i = 0; i < node.Nodes.Count; i++) - { - node.Nodes[i].Checked = bChecked; - CheckChildTreeNode(node.Nodes[i], bChecked); - } - } + /// /// 标注管理、传感器管理 目录树中的feature节点的右键菜单中的 删除 菜单 /// @@ -5984,7 +5748,7 @@ frmModify = new FrmMnModify(globeControl1, shlayername, shresultLists); - if (boolfrmModify != false) return; + if (boolfrmModify) return; frmModify.Owner = this; frmModify.Location = new Point(Width - frmModify.Width - 10, Height - frmModify.Height - 50); frmModify.Show(); @@ -6261,16 +6025,15 @@ globeControl1.Globe.ClearMeasure(); layerTemp.RemoveAllFeature(); - layerTemp2.RemoveAllFeature(); buttonItemLS5.Checked = false; dataGridViewX1.DataSource = null; panelOfTable.Visible = false; globeControl1.Globe.MemoryLayer.RemoveAllFeature(); + globeControl2.Globe.MemoryLayer.RemoveAllFeature(); globeControl1.Globe.ClearAnalysis(); - // 清除净距分析结果 buttonX2_Click(null, null); buttonX8_Click(null, null); @@ -6527,8 +6290,8 @@ GSOFeatures selectFeatures = new GSOFeatures(); for (int i = 0; i < globeControl1.Globe.SelObjectCount; i++) { - GSOFeature feature = null; - GSOLayer layer = null; + GSOFeature feature; + GSOLayer layer; globeControl1.Globe.GetSelectObject(i, out feature, out layer); if (feature != null && feature.Geometry != null && feature.Geometry.Type == EnumGeometryType.GeoPolyline3D) { @@ -6536,11 +6299,9 @@ } } List feats = SectionAnalysisTool.ZDMAnalysis(selectFeatures); - if (feats != null && feats.Count >= 1) - { - FrmProfileAnalysis frm = new FrmProfileAnalysis(globeControl1, feats); - frm.Show(this); - } + if (feats == null || feats.Count < 1) return; + FrmProfileAnalysis frm = new FrmProfileAnalysis(globeControl1, feats); + frm.Show(this); } /// /// 道路断面分析 @@ -7057,14 +6818,14 @@ /// private void buttonItemSZ1_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7075,17 +6836,17 @@ /// /// 管径标注 /// - GSOFeature radiusMarkerFeature; +// GSOFeature radiusMarkerFeature; private void buttonItemBZ2_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine==null||selLine[0].Count <= 1)//wxl增加为空判断,下面方法同理 + if (selLine == null || selLine[0].Count <= 1) //wxl增加为空判断,下面方法同理 { return; } @@ -7100,14 +6861,14 @@ /// private void buttonItemBZ3_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null||selLine[0].Count <= 1) { return; } @@ -7123,14 +6884,14 @@ /// private void buttonItemBZ4_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7140,7 +6901,7 @@ /// /// 距离标注 /// - bool distanceMarker; +// bool distanceMarker; private void buttonItemBZ5_Click(object sender, EventArgs e) { //日志记录 @@ -7148,7 +6909,7 @@ globeControl1.Globe.Action = EnumAction3D.TrackPolyline; //globeControl1.Globe.DistanceRuler.MeasureMode = EnumDistanceMeasureMode.HVSLineMeasure; - distanceMarker = true; +// distanceMarker = true; } /// /// 自定义标注 @@ -7187,14 +6948,14 @@ /// private void buttonItemBZ8_Click(object sender, EventArgs e) { - GSOFeature resFeature = IsPipeLineOfSelectedObj(); + GSOFeature resFeature = FeatureStatisticsService.GetSelectedPipeline(globeControl1); if (resFeature == null) { MessageBox.Show("请选中一根管线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } GSOGeoPolyline3D selLine = resFeature.Geometry as GSOGeoPolyline3D; - if (selLine[0].Count <= 1) + if (selLine == null || selLine[0].Count <= 1) { return; } @@ -7775,11 +7536,9 @@ if (frm.ShowDialog() == DialogResult.OK) { GSOLayer featureAddLayer = TreeNodeFeatureLayer(); - if (featureAddLayer != null) - { - FrmAddInstrument dlg = new FrmAddInstrument(globeControl1, featureAddLayer); - dlg.Show(this); - } + if (featureAddLayer == null) return; + FrmAddInstrument dlg = new FrmAddInstrument(globeControl1, featureAddLayer); + dlg.Show(this); } } /// @@ -7822,11 +7581,9 @@ frm.citySevenLineType); globeControl1.Tag = citySevenLine; GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(frm.citySevenLineType); - if (layer != null) - { - globeControl1.Globe.DestLayerFeatureAdd = layer; - layer.Editable = true; - } + if (layer == null) return; + globeControl1.Globe.DestLayerFeatureAdd = layer; + layer.Editable = true; } } #endregion @@ -7986,44 +7743,45 @@ LogManager.saveLog(Utility.userName, buttonItemBJ10_2.Text); List listVectorNames = new List(); - for (int i = 0; i < Utility.m_PipelineLayerNames.Count; i++) + foreach (string pipeline in Utility.m_PipelineLayerNames) { - if (!listVectorNames.Contains(Utility.m_PipelineLayerNames[i])) + if (!listVectorNames.Contains(pipeline)) { - listVectorNames.Add(Utility.m_PipelineLayerNames[i]); + listVectorNames.Add(pipeline); } } - for (int i = 0; i < Utility.valueLayerNames.Count; i++) + foreach (string valve in Utility.valueLayerNames) { - if (!listVectorNames.Contains(Utility.valueLayerNames[i])) + if (!listVectorNames.Contains(valve)) { - listVectorNames.Add(Utility.valueLayerNames[i]); + listVectorNames.Add(valve); } } - for (int i = 0; i < Utility.workwellLayerNames.Count; i++) + foreach (string workwell in Utility.workwellLayerNames) { - if (!listVectorNames.Contains(Utility.workwellLayerNames[i])) + if (!listVectorNames.Contains(workwell)) { - listVectorNames.Add(Utility.workwellLayerNames[i]); + listVectorNames.Add(workwell); } } - for (int i = 0; i < Utility.instrumenLayerNames.Count; i++) + foreach (string instrument in Utility.instrumenLayerNames) { - if (!listVectorNames.Contains(Utility.instrumenLayerNames[i])) + if (!listVectorNames.Contains(instrument)) { - listVectorNames.Add(Utility.instrumenLayerNames[i]); + listVectorNames.Add(instrument); } } - for (int i = 0; i < Utility.pipefittingLayerNames.Count; i++) + foreach (string pipefitting in Utility.pipefittingLayerNames) { - if (!listVectorNames.Contains(Utility.pipefittingLayerNames[i])) + if (!listVectorNames.Contains(pipefitting)) { - listVectorNames.Add(Utility.pipefittingLayerNames[i]); + listVectorNames.Add(pipefitting); } } FrmExportVector frm = new FrmExportVector(globeControl1, listVectorNames); frm.ShowDialog(); } + /// /// 删除模型 /// @@ -8032,27 +7790,25 @@ private void buttonItemBJ13_Click(object sender, EventArgs e) { LogManager.saveLog(Utility.userName, buttonItemBJ13.Text); - if (globeControl1.Globe.SelObjectCount > 0) - { - for (int i = 0; i < globeControl1.Globe.SelObjectCount; i++) - { - GSOFeature f = null; - GSOLayer layer = null; - globeControl1.Globe.GetSelectObject(i, out f, out layer); - if (f == null) continue; - f.Delete(); - if (layer != null) - globeControl1.Globe.AddToEditHistroy(layer, f, EnumEditType.Delete); - globeControl1.Refresh(); - - } - MessageBox.Show("删除成功!", "提示"); - } - else + var selObjCount = globeControl1.Globe.SelObjectCount; + if (selObjCount == 0) { MessageBox.Show("请选中要删除的模型!", "提示"); + return; } + for (int i = 0; i < selObjCount; i++) + { + GSOFeature f; + GSOLayer layer; + globeControl1.Globe.GetSelectObject(i, out f, out layer); + if (f == null) continue; + f.Delete(); + if (layer != null) + globeControl1.Globe.AddToEditHistroy(layer, f, EnumEditType.Delete); + globeControl1.Refresh(); + } + MessageBox.Show("删除成功!", "提示"); globeControl1.Globe.Action = EnumAction3D.ActionNull; } @@ -8118,6 +7874,7 @@ toolStripNumbers.Text = "红线审核 |共有:" + table.Rows.Count + "条"; toolStripDropDownButton3.Visible = true; } + /// /// 主窗体 下方的工具条中的 导出.xls文件 按钮事件处理 /// @@ -8127,24 +7884,28 @@ { if (dataGridViewX1.Rows.Count != 0) { - string strSaveFile = string.Empty; - SaveFileDialog savefiledialog = new SaveFileDialog(); - savefiledialog.Filter = "Excel文件|*.xls,*.xlsx"; - savefiledialog.AddExtension = true; - savefiledialog.FileName = "红线审核"; - if (savefiledialog.ShowDialog() == DialogResult.OK) - strSaveFile = savefiledialog.FileName; - else return; - - ExpEXCEL.ExpToExcel(dataGridViewX1, strSaveFile, "红线审核", lineStruct, featsList); - MessageBox.Show("导出成功!"); - } - else - { MessageBox.Show("表格内容为空!", "提示"); + return; } + string strSaveFile; + SaveFileDialog savefiledialog = new SaveFileDialog(); + savefiledialog.Filter = "Excel文件|*.xls,*.xlsx"; + savefiledialog.AddExtension = true; + savefiledialog.FileName = "红线审核"; + if (savefiledialog.ShowDialog() == DialogResult.OK) + strSaveFile = savefiledialog.FileName; + else return; + + ExpEXCEL.ExpToExcel(dataGridViewX1, strSaveFile, "红线审核", lineStruct, featsList); + MessageBox.Show("导出成功!"); + } + /// + /// 双屏对比的地面透明度设置 + /// + /// + /// private void sliderItem2_ValueChanged(object sender, EventArgs e) { LogManager.saveLog(Utility.userName, sliderItem2.Text); @@ -8155,7 +7916,7 @@ { layer.Opaque = 100 - sliderItem2.Value; } - layer = globeControl2.Globe.Layers.GetLayerByCaption("180fd");//("180fd"); + layer = globeControl2.Globe.Layers.GetLayerByCaption(Utility.roadLayerName);//("180fd"); if (layer != null) { layer.Opaque = 100 - sliderItem2.Value; @@ -8554,7 +8315,7 @@ LogManager.saveLog(Utility.userName, buttonItem8.Text); int width = Width; - FrmCompareFeature.ShowForm(globeControl1, globeControl2, layerTemp, layerTemp2, width); + FrmCompareFeature.ShowForm(globeControl1, globeControl2, width); } /// /// 红线审核导出图片 @@ -8690,7 +8451,6 @@ private void btn_role_resc_Click(object sender, EventArgs e) { - LogManager.saveLog(Utility.userName, btn_role_resc.Text); if (FrmRoleRescManager.IS_OPEN) return; @@ -8708,7 +8468,8 @@ frm.ShowDialog(); } } -//文档管理 操作 + + //文档管理 操作 private void btn_document_info_Click(object sender, EventArgs e) { @@ -8919,11 +8680,9 @@ } private void pictureBox1_Paint(object sender, PaintEventArgs e) - { - int Width = this.Width; + { string welcomeUser = "欢迎您:" + Utility.userName; - Graphics g = e.Graphics; - g.DrawString(welcomeUser, new Font("宋体", 12), new SolidBrush(Color.Black), Width - 180, 50); + e.Graphics.DrawString(welcomeUser, new Font("宋体", 12), new SolidBrush(Color.Black), Width - 180, 50); } } diff --git a/MainFrm.designer.cs b/MainFrm.designer.cs index a9b8c6f..5d74670 100644 --- a/MainFrm.designer.cs +++ b/MainFrm.designer.cs @@ -244,42 +244,6 @@ this.保存ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.定位ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.ribbonControl1 = new DevComponents.DotNetBar.RibbonControl(); - this.ribbonPanel6 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar6 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItemSPSZ = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem8 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemLocation = new DevComponents.DotNetBar.ButtonItem(); - this.sliderItem2 = new DevComponents.DotNetBar.SliderItem(); - this.buttonItemGBJC = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonPanel4 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar1 = new DevComponents.DotNetBar.RibbonBar(); - this.btn_document_info = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonPanel12 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar18 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItem133 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem132 = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonBar13 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItem127 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem128 = new DevComponents.DotNetBar.ButtonItem(); - this.sliderItem1 = new DevComponents.DotNetBar.SliderItem(); - this.buttonItem134 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItem130 = new DevComponents.DotNetBar.ButtonItem(); - this.btn_check_history = new DevComponents.DotNetBar.ButtonItem(); - this.ribbonPanel5 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar2 = new DevComponents.DotNetBar.RibbonBar(); - this.buttonItemHX1 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemHX2 = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemDCTP = new DevComponents.DotNetBar.ButtonItem(); - this.sliderItem3 = new DevComponents.DotNetBar.SliderItem(); - this.ribbonPanel2 = new DevComponents.DotNetBar.RibbonPanel(); - this.ribbonBar3 = new DevComponents.DotNetBar.RibbonBar(); - this.btn_user_info = new DevComponents.DotNetBar.ButtonItem(); - this.btn_role_info = new DevComponents.DotNetBar.ButtonItem(); - this.btn_resc_info = new DevComponents.DotNetBar.ButtonItem(); - this.btn_role_resc = new DevComponents.DotNetBar.ButtonItem(); - this.btn_user_role = new DevComponents.DotNetBar.ButtonItem(); - this.btn_password_edit = new DevComponents.DotNetBar.ButtonItem(); - this.buttonItemPasswordReset = new DevComponents.DotNetBar.ButtonItem(); this.ribbonPanel15 = new DevComponents.DotNetBar.RibbonPanel(); this.ribbonBar20 = new DevComponents.DotNetBar.RibbonBar(); this.buttonItemSH = new DevComponents.DotNetBar.ButtonItem(); @@ -448,6 +412,42 @@ this.buttonItemBZ9 = new DevComponents.DotNetBar.ButtonItem(); this.buttonItemBZ10 = new DevComponents.DotNetBar.ButtonItem(); this.buttonItemBZ11 = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel6 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar6 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItemSPSZ = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem8 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemLocation = new DevComponents.DotNetBar.ButtonItem(); + this.sliderItem2 = new DevComponents.DotNetBar.SliderItem(); + this.buttonItemGBJC = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel4 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar1 = new DevComponents.DotNetBar.RibbonBar(); + this.btn_document_info = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel12 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar18 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItem133 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem132 = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonBar13 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItem127 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem128 = new DevComponents.DotNetBar.ButtonItem(); + this.sliderItem1 = new DevComponents.DotNetBar.SliderItem(); + this.buttonItem134 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItem130 = new DevComponents.DotNetBar.ButtonItem(); + this.btn_check_history = new DevComponents.DotNetBar.ButtonItem(); + this.ribbonPanel5 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar2 = new DevComponents.DotNetBar.RibbonBar(); + this.buttonItemHX1 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemHX2 = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemDCTP = new DevComponents.DotNetBar.ButtonItem(); + this.sliderItem3 = new DevComponents.DotNetBar.SliderItem(); + this.ribbonPanel2 = new DevComponents.DotNetBar.RibbonPanel(); + this.ribbonBar3 = new DevComponents.DotNetBar.RibbonBar(); + this.btn_user_info = new DevComponents.DotNetBar.ButtonItem(); + this.btn_role_info = new DevComponents.DotNetBar.ButtonItem(); + this.btn_resc_info = new DevComponents.DotNetBar.ButtonItem(); + this.btn_role_resc = new DevComponents.DotNetBar.ButtonItem(); + this.btn_user_role = new DevComponents.DotNetBar.ButtonItem(); + this.btn_password_edit = new DevComponents.DotNetBar.ButtonItem(); + this.buttonItemPasswordReset = new DevComponents.DotNetBar.ButtonItem(); this.ribbonPanel1 = new DevComponents.DotNetBar.RibbonPanel(); this.ribbonBar21 = new DevComponents.DotNetBar.RibbonBar(); this.buttonItem87 = new DevComponents.DotNetBar.ButtonItem(); @@ -652,12 +652,12 @@ this.contextMenuStrip3.SuspendLayout(); this.contextMenuStripDeleteLayerNode.SuspendLayout(); this.ribbonControl1.SuspendLayout(); + this.ribbonPanel15.SuspendLayout(); this.ribbonPanel6.SuspendLayout(); this.ribbonPanel4.SuspendLayout(); this.ribbonPanel12.SuspendLayout(); this.ribbonPanel5.SuspendLayout(); this.ribbonPanel2.SuspendLayout(); - this.ribbonPanel15.SuspendLayout(); this.ribbonPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); this.panelOfTable.SuspendLayout(); @@ -2283,12 +2283,12 @@ // this.ribbonControl1.BackgroundStyle.Class = ""; this.ribbonControl1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonControl1.Controls.Add(this.ribbonPanel15); + this.ribbonControl1.Controls.Add(this.ribbonPanel2); this.ribbonControl1.Controls.Add(this.ribbonPanel6); this.ribbonControl1.Controls.Add(this.ribbonPanel4); this.ribbonControl1.Controls.Add(this.ribbonPanel12); this.ribbonControl1.Controls.Add(this.ribbonPanel5); - this.ribbonControl1.Controls.Add(this.ribbonPanel2); - this.ribbonControl1.Controls.Add(this.ribbonPanel15); this.ribbonControl1.Controls.Add(this.ribbonPanel1); this.ribbonControl1.Dock = System.Windows.Forms.DockStyle.Top; this.ribbonControl1.ImeMode = System.Windows.Forms.ImeMode.NoControl; @@ -2331,595 +2331,6 @@ this.ribbonControl1.Text = "ribbonControl1"; this.ribbonControl1.UseCustomizeDialog = false; // - // ribbonPanel6 - // - this.ribbonPanel6.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel6.Controls.Add(this.ribbonBar6); - this.ribbonPanel6.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel6.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel6.Name = "ribbonPanel6"; - this.ribbonPanel6.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel6.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel6.Style.Class = ""; - this.ribbonPanel6.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel6.StyleMouseDown.Class = ""; - this.ribbonPanel6.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel6.StyleMouseOver.Class = ""; - this.ribbonPanel6.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel6.TabIndex = 38; - // - // ribbonBar6 - // - this.ribbonBar6.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar6.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar6.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar6.BackgroundStyle.Class = ""; - this.ribbonBar6.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar6.ContainerControlProcessDialogKey = true; - this.ribbonBar6.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar6.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItemSPSZ, - this.buttonItem8, - this.buttonItemLocation, - this.sliderItem2, - this.buttonItemGBJC}); - this.ribbonBar6.Location = new System.Drawing.Point(3, 0); - this.ribbonBar6.Name = "ribbonBar6"; - this.ribbonBar6.Size = new System.Drawing.Size(427, 59); - this.ribbonBar6.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar6.TabIndex = 0; - // - // - // - this.ribbonBar6.TitleStyle.Class = ""; - this.ribbonBar6.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar6.TitleStyleMouseOver.Class = ""; - this.ribbonBar6.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar6.TitleVisible = false; - // - // buttonItemSPSZ - // - this.buttonItemSPSZ.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemSPSZ.Image"))); - this.buttonItemSPSZ.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemSPSZ.Name = "buttonItemSPSZ"; - this.buttonItemSPSZ.SubItemsExpandWidth = 14; - this.buttonItemSPSZ.Text = "双屏设置"; - this.buttonItemSPSZ.Click += new System.EventHandler(this.buttonItemSPSZ_Click); - // - // buttonItem8 - // - this.buttonItem8.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem8.Image"))); - this.buttonItem8.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem8.Name = "buttonItem8"; - this.buttonItem8.SubItemsExpandWidth = 14; - this.buttonItem8.Text = "双屏分析"; - this.buttonItem8.Click += new System.EventHandler(this.buttonItem8_Click); - // - // buttonItemLocation - // - this.buttonItemLocation.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemLocation.Image"))); - this.buttonItemLocation.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemLocation.Name = "buttonItemLocation"; - this.buttonItemLocation.SubItemsExpandWidth = 14; - this.buttonItemLocation.Text = "快速定位"; - this.buttonItemLocation.Click += new System.EventHandler(this.buttonItemLocation_Click); - // - // sliderItem2 - // - this.sliderItem2.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; - this.sliderItem2.LabelWidth = 50; - this.sliderItem2.Name = "sliderItem2"; - this.sliderItem2.Text = "地面透明度"; - this.sliderItem2.TextColor = System.Drawing.Color.Black; - this.sliderItem2.Value = 0; - this.sliderItem2.ValueChanged += new System.EventHandler(this.sliderItem2_ValueChanged); - // - // buttonItemGBJC - // - this.buttonItemGBJC.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemGBJC.Image"))); - this.buttonItemGBJC.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemGBJC.Name = "buttonItemGBJC"; - this.buttonItemGBJC.SubItemsExpandWidth = 14; - this.buttonItemGBJC.Text = "国标检测"; - this.buttonItemGBJC.Click += new System.EventHandler(this.buttonItemGBJC_Click); - // - // ribbonPanel4 - // - this.ribbonPanel4.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel4.Controls.Add(this.ribbonBar1); - this.ribbonPanel4.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel4.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel4.Name = "ribbonPanel4"; - this.ribbonPanel4.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel4.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel4.Style.Class = ""; - this.ribbonPanel4.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel4.StyleMouseDown.Class = ""; - this.ribbonPanel4.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel4.StyleMouseOver.Class = ""; - this.ribbonPanel4.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel4.TabIndex = 36; - this.ribbonPanel4.Visible = false; - // - // ribbonBar1 - // - this.ribbonBar1.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar1.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar1.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar1.BackgroundStyle.Class = ""; - this.ribbonBar1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar1.ContainerControlProcessDialogKey = true; - this.ribbonBar1.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar1.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.btn_document_info}); - this.ribbonBar1.Location = new System.Drawing.Point(3, 0); - this.ribbonBar1.Name = "ribbonBar1"; - this.ribbonBar1.Size = new System.Drawing.Size(88, 59); - this.ribbonBar1.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar1.TabIndex = 0; - // - // - // - this.ribbonBar1.TitleStyle.Class = ""; - this.ribbonBar1.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar1.TitleStyleMouseOver.Class = ""; - this.ribbonBar1.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar1.TitleVisible = false; - // - // btn_document_info - // - this.btn_document_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_document_info.Image"))); - this.btn_document_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_document_info.Name = "btn_document_info"; - this.btn_document_info.SubItemsExpandWidth = 14; - this.btn_document_info.Text = "文档管理"; - this.btn_document_info.Click += new System.EventHandler(this.btn_document_info_Click); - // - // ribbonPanel12 - // - this.ribbonPanel12.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel12.Controls.Add(this.ribbonBar18); - this.ribbonPanel12.Controls.Add(this.ribbonBar13); - this.ribbonPanel12.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel12.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel12.Name = "ribbonPanel12"; - this.ribbonPanel12.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel12.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel12.Style.Class = ""; - this.ribbonPanel12.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel12.StyleMouseDown.Class = ""; - this.ribbonPanel12.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel12.StyleMouseOver.Class = ""; - this.ribbonPanel12.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel12.TabIndex = 34; - this.ribbonPanel12.Visible = false; - // - // ribbonBar18 - // - this.ribbonBar18.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar18.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar18.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar18.BackgroundStyle.Class = ""; - this.ribbonBar18.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar18.ContainerControlProcessDialogKey = true; - this.ribbonBar18.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar18.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItem133, - this.buttonItem132}); - this.ribbonBar18.Location = new System.Drawing.Point(508, 0); - this.ribbonBar18.Name = "ribbonBar18"; - this.ribbonBar18.Size = new System.Drawing.Size(171, 59); - this.ribbonBar18.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar18.TabIndex = 1; - // - // - // - this.ribbonBar18.TitleStyle.Class = ""; - this.ribbonBar18.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar18.TitleStyleMouseOver.Class = ""; - this.ribbonBar18.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar18.TitleVisible = false; - // - // buttonItem133 - // - this.buttonItem133.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem133.Image"))); - this.buttonItem133.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem133.Name = "buttonItem133"; - this.buttonItem133.SubItemsExpandWidth = 14; - this.buttonItem133.Text = "审核入库"; - this.buttonItem133.Click += new System.EventHandler(this.buttonItem133_Click_1); - // - // buttonItem132 - // - this.buttonItem132.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem132.Image"))); - this.buttonItem132.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem132.Name = "buttonItem132"; - this.buttonItem132.SubItemsExpandWidth = 14; - this.buttonItem132.Text = "已审核的图层"; - this.buttonItem132.Visible = false; - this.buttonItem132.Click += new System.EventHandler(this.buttonItem132_Click_1); - // - // ribbonBar13 - // - this.ribbonBar13.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar13.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar13.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar13.BackgroundStyle.Class = ""; - this.ribbonBar13.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar13.ContainerControlProcessDialogKey = true; - this.ribbonBar13.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar13.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItem127, - this.buttonItem128, - this.sliderItem1, - this.buttonItem134, - this.buttonItem130, - this.btn_check_history}); - this.ribbonBar13.Location = new System.Drawing.Point(3, 0); - this.ribbonBar13.Name = "ribbonBar13"; - this.ribbonBar13.Size = new System.Drawing.Size(505, 59); - this.ribbonBar13.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar13.TabIndex = 0; - // - // - // - this.ribbonBar13.TitleStyle.Class = ""; - this.ribbonBar13.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar13.TitleStyleMouseOver.Class = ""; - this.ribbonBar13.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar13.TitleVisible = false; - // - // buttonItem127 - // - this.buttonItem127.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem127.Image"))); - this.buttonItem127.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem127.Name = "buttonItem127"; - this.buttonItem127.SubItemsExpandWidth = 14; - this.buttonItem127.Text = "打开数据"; - this.buttonItem127.Click += new System.EventHandler(this.buttonItem127_Click_2); - // - // buttonItem128 - // - this.buttonItem128.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem128.Image"))); - this.buttonItem128.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem128.Name = "buttonItem128"; - this.buttonItem128.SubItemsExpandWidth = 14; - this.buttonItem128.Text = "一键审核"; - this.buttonItem128.Click += new System.EventHandler(this.buttonItem128_Click); - // - // sliderItem1 - // - this.sliderItem1.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; - this.sliderItem1.LabelWidth = 50; - this.sliderItem1.Name = "sliderItem1"; - this.sliderItem1.Text = "地面透明度"; - this.sliderItem1.TextColor = System.Drawing.Color.Black; - this.sliderItem1.Value = 0; - this.sliderItem1.ValueChanged += new System.EventHandler(this.sliderItem1_ValueChanged); - // - // buttonItem134 - // - this.buttonItem134.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem134.Image"))); - this.buttonItem134.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem134.Name = "buttonItem134"; - this.buttonItem134.SubItemsExpandWidth = 14; - this.buttonItem134.Text = "模拟设计修改"; - this.buttonItem134.Click += new System.EventHandler(this.buttonItem134_Click_1); - // - // buttonItem130 - // - this.buttonItem130.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem130.Image"))); - this.buttonItem130.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItem130.Name = "buttonItem130"; - this.buttonItem130.SubItemsExpandWidth = 14; - this.buttonItem130.Text = "导出审核图"; - this.buttonItem130.Click += new System.EventHandler(this.buttonItem130_Click_1); - // - // btn_check_history - // - this.btn_check_history.Image = ((System.Drawing.Image)(resources.GetObject("btn_check_history.Image"))); - this.btn_check_history.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_check_history.Name = "btn_check_history"; - this.btn_check_history.SubItemsExpandWidth = 14; - this.btn_check_history.Text = "审核历史"; - this.btn_check_history.Click += new System.EventHandler(this.btn_check_history_Click); - // - // ribbonPanel5 - // - this.ribbonPanel5.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel5.Controls.Add(this.ribbonBar2); - this.ribbonPanel5.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel5.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel5.Name = "ribbonPanel5"; - this.ribbonPanel5.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel5.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel5.Style.Class = ""; - this.ribbonPanel5.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel5.StyleMouseDown.Class = ""; - this.ribbonPanel5.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel5.StyleMouseOver.Class = ""; - this.ribbonPanel5.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel5.TabIndex = 37; - this.ribbonPanel5.Visible = false; - // - // ribbonBar2 - // - this.ribbonBar2.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar2.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar2.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar2.BackgroundStyle.Class = ""; - this.ribbonBar2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar2.ContainerControlProcessDialogKey = true; - this.ribbonBar2.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar2.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.buttonItemHX1, - this.buttonItemHX2, - this.buttonItemDCTP, - this.sliderItem3}); - this.ribbonBar2.Location = new System.Drawing.Point(3, 0); - this.ribbonBar2.Name = "ribbonBar2"; - this.ribbonBar2.Size = new System.Drawing.Size(350, 59); - this.ribbonBar2.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar2.TabIndex = 0; - // - // - // - this.ribbonBar2.TitleStyle.Class = ""; - this.ribbonBar2.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar2.TitleStyleMouseOver.Class = ""; - this.ribbonBar2.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar2.TitleVisible = false; - // - // buttonItemHX1 - // - this.buttonItemHX1.AutoExpandOnClick = true; - this.buttonItemHX1.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX1.Image"))); - this.buttonItemHX1.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemHX1.Name = "buttonItemHX1"; - this.buttonItemHX1.SubItemsExpandWidth = 14; - this.buttonItemHX1.Text = "导入红线"; - this.buttonItemHX1.Click += new System.EventHandler(this.buttonItemHX1_Click); - // - // buttonItemHX2 - // - this.buttonItemHX2.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX2.Image"))); - this.buttonItemHX2.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemHX2.Name = "buttonItemHX2"; - this.buttonItemHX2.SubItemsExpandWidth = 14; - this.buttonItemHX2.Text = "红线审核"; - this.buttonItemHX2.Click += new System.EventHandler(this.buttonItemHX2_Click); - // - // buttonItemDCTP - // - this.buttonItemDCTP.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemDCTP.Image"))); - this.buttonItemDCTP.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemDCTP.Name = "buttonItemDCTP"; - this.buttonItemDCTP.SubItemsExpandWidth = 14; - this.buttonItemDCTP.Text = "导出图片"; - this.buttonItemDCTP.Click += new System.EventHandler(this.buttonItemDCTP_Click); - // - // sliderItem3 - // - this.sliderItem3.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; - this.sliderItem3.LabelWidth = 50; - this.sliderItem3.Name = "sliderItem3"; - this.sliderItem3.Text = "地面透明度"; - this.sliderItem3.TextColor = System.Drawing.Color.Black; - this.sliderItem3.Value = 0; - this.sliderItem3.ValueChanged += new System.EventHandler(this.sliderItem3_ValueChanged); - // - // ribbonPanel2 - // - this.ribbonPanel2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonPanel2.Controls.Add(this.ribbonBar3); - this.ribbonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.ribbonPanel2.Location = new System.Drawing.Point(0, 33); - this.ribbonPanel2.Name = "ribbonPanel2"; - this.ribbonPanel2.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.ribbonPanel2.Size = new System.Drawing.Size(1328, 62); - // - // - // - this.ribbonPanel2.Style.Class = ""; - this.ribbonPanel2.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel2.StyleMouseDown.Class = ""; - this.ribbonPanel2.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonPanel2.StyleMouseOver.Class = ""; - this.ribbonPanel2.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonPanel2.TabIndex = 39; - this.ribbonPanel2.Visible = false; - // - // ribbonBar3 - // - this.ribbonBar3.AutoOverflowEnabled = true; - // - // - // - this.ribbonBar3.BackgroundMouseOverStyle.Class = ""; - this.ribbonBar3.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar3.BackgroundStyle.Class = ""; - this.ribbonBar3.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar3.ContainerControlProcessDialogKey = true; - this.ribbonBar3.Dock = System.Windows.Forms.DockStyle.Left; - this.ribbonBar3.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.btn_user_info, - this.btn_role_info, - this.btn_resc_info, - this.btn_role_resc, - this.btn_user_role, - this.btn_password_edit, - this.buttonItemPasswordReset}); - this.ribbonBar3.Location = new System.Drawing.Point(3, 0); - this.ribbonBar3.Name = "ribbonBar3"; - this.ribbonBar3.Size = new System.Drawing.Size(551, 59); - this.ribbonBar3.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.ribbonBar3.TabIndex = 1; - // - // - // - this.ribbonBar3.TitleStyle.Class = ""; - this.ribbonBar3.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.ribbonBar3.TitleStyleMouseOver.Class = ""; - this.ribbonBar3.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.ribbonBar3.TitleVisible = false; - // - // btn_user_info - // - this.btn_user_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_info.Image"))); - this.btn_user_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_user_info.Name = "btn_user_info"; - this.btn_user_info.SubItemsExpandWidth = 14; - this.btn_user_info.Text = "用户管理"; - this.btn_user_info.Click += new System.EventHandler(this.btn_user_info_Click); - // - // btn_role_info - // - this.btn_role_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_info.Image"))); - this.btn_role_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_role_info.Name = "btn_role_info"; - this.btn_role_info.SubItemsExpandWidth = 14; - this.btn_role_info.Text = "角色管理"; - this.btn_role_info.Click += new System.EventHandler(this.btn_role_info_Click); - // - // btn_resc_info - // - this.btn_resc_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_resc_info.Image"))); - this.btn_resc_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_resc_info.Name = "btn_resc_info"; - this.btn_resc_info.SubItemsExpandWidth = 14; - this.btn_resc_info.Text = "资源管理"; - this.btn_resc_info.Visible = false; - this.btn_resc_info.Click += new System.EventHandler(this.btn_resc_info_Click); - // - // btn_role_resc - // - this.btn_role_resc.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_resc.Image"))); - this.btn_role_resc.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_role_resc.Name = "btn_role_resc"; - this.btn_role_resc.SubItemsExpandWidth = 14; - this.btn_role_resc.Text = "角色授权"; - this.btn_role_resc.Click += new System.EventHandler(this.btn_role_resc_Click); - // - // btn_user_role - // - this.btn_user_role.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_role.Image"))); - this.btn_user_role.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_user_role.Name = "btn_user_role"; - this.btn_user_role.SubItemsExpandWidth = 14; - this.btn_user_role.Text = "用户授权"; - this.btn_user_role.Click += new System.EventHandler(this.btn_user_role_Click); - // - // btn_password_edit - // - this.btn_password_edit.Image = ((System.Drawing.Image)(resources.GetObject("btn_password_edit.Image"))); - this.btn_password_edit.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.btn_password_edit.Name = "btn_password_edit"; - this.btn_password_edit.SubItemsExpandWidth = 14; - this.btn_password_edit.Text = "密码修改"; - this.btn_password_edit.Click += new System.EventHandler(this.btn_password_edit_Click); - // - // buttonItemPasswordReset - // - this.buttonItemPasswordReset.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemPasswordReset.Image"))); - this.buttonItemPasswordReset.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; - this.buttonItemPasswordReset.Name = "buttonItemPasswordReset"; - this.buttonItemPasswordReset.SubItemsExpandWidth = 14; - this.buttonItemPasswordReset.Text = "重置密码"; - this.buttonItemPasswordReset.Click += new System.EventHandler(this.buttonItemPasswordReset_Click); - // // ribbonPanel15 // this.ribbonPanel15.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; @@ -2945,7 +2356,6 @@ this.ribbonPanel15.StyleMouseOver.Class = ""; this.ribbonPanel15.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; this.ribbonPanel15.TabIndex = 35; - this.ribbonPanel15.Visible = false; // // ribbonBar20 // @@ -4286,6 +3696,596 @@ this.buttonItemBZ11.Text = "标注管理"; this.buttonItemBZ11.Click += new System.EventHandler(this.buttonItemBZ11_Click); // + // ribbonPanel6 + // + this.ribbonPanel6.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel6.Controls.Add(this.ribbonBar6); + this.ribbonPanel6.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel6.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel6.Name = "ribbonPanel6"; + this.ribbonPanel6.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel6.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel6.Style.Class = ""; + this.ribbonPanel6.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel6.StyleMouseDown.Class = ""; + this.ribbonPanel6.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel6.StyleMouseOver.Class = ""; + this.ribbonPanel6.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel6.TabIndex = 38; + this.ribbonPanel6.Visible = false; + // + // ribbonBar6 + // + this.ribbonBar6.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar6.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar6.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar6.BackgroundStyle.Class = ""; + this.ribbonBar6.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar6.ContainerControlProcessDialogKey = true; + this.ribbonBar6.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar6.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItemSPSZ, + this.buttonItem8, + this.buttonItemLocation, + this.sliderItem2, + this.buttonItemGBJC}); + this.ribbonBar6.Location = new System.Drawing.Point(3, 0); + this.ribbonBar6.Name = "ribbonBar6"; + this.ribbonBar6.Size = new System.Drawing.Size(427, 59); + this.ribbonBar6.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar6.TabIndex = 0; + // + // + // + this.ribbonBar6.TitleStyle.Class = ""; + this.ribbonBar6.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar6.TitleStyleMouseOver.Class = ""; + this.ribbonBar6.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar6.TitleVisible = false; + // + // buttonItemSPSZ + // + this.buttonItemSPSZ.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemSPSZ.Image"))); + this.buttonItemSPSZ.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemSPSZ.Name = "buttonItemSPSZ"; + this.buttonItemSPSZ.SubItemsExpandWidth = 14; + this.buttonItemSPSZ.Text = "双屏设置"; + this.buttonItemSPSZ.Click += new System.EventHandler(this.buttonItemSPSZ_Click); + // + // buttonItem8 + // + this.buttonItem8.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem8.Image"))); + this.buttonItem8.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem8.Name = "buttonItem8"; + this.buttonItem8.SubItemsExpandWidth = 14; + this.buttonItem8.Text = "双屏分析"; + this.buttonItem8.Click += new System.EventHandler(this.buttonItem8_Click); + // + // buttonItemLocation + // + this.buttonItemLocation.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemLocation.Image"))); + this.buttonItemLocation.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemLocation.Name = "buttonItemLocation"; + this.buttonItemLocation.SubItemsExpandWidth = 14; + this.buttonItemLocation.Text = "快速定位"; + this.buttonItemLocation.Click += new System.EventHandler(this.buttonItemLocation_Click); + // + // sliderItem2 + // + this.sliderItem2.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; + this.sliderItem2.LabelWidth = 50; + this.sliderItem2.Name = "sliderItem2"; + this.sliderItem2.Text = "地面透明度"; + this.sliderItem2.TextColor = System.Drawing.Color.Black; + this.sliderItem2.Value = 0; + this.sliderItem2.ValueChanged += new System.EventHandler(this.sliderItem2_ValueChanged); + // + // buttonItemGBJC + // + this.buttonItemGBJC.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemGBJC.Image"))); + this.buttonItemGBJC.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemGBJC.Name = "buttonItemGBJC"; + this.buttonItemGBJC.SubItemsExpandWidth = 14; + this.buttonItemGBJC.Text = "国标检测"; + this.buttonItemGBJC.Click += new System.EventHandler(this.buttonItemGBJC_Click); + // + // ribbonPanel4 + // + this.ribbonPanel4.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel4.Controls.Add(this.ribbonBar1); + this.ribbonPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel4.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel4.Name = "ribbonPanel4"; + this.ribbonPanel4.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel4.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel4.Style.Class = ""; + this.ribbonPanel4.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel4.StyleMouseDown.Class = ""; + this.ribbonPanel4.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel4.StyleMouseOver.Class = ""; + this.ribbonPanel4.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel4.TabIndex = 36; + this.ribbonPanel4.Visible = false; + // + // ribbonBar1 + // + this.ribbonBar1.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar1.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar1.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar1.BackgroundStyle.Class = ""; + this.ribbonBar1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar1.ContainerControlProcessDialogKey = true; + this.ribbonBar1.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar1.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.btn_document_info}); + this.ribbonBar1.Location = new System.Drawing.Point(3, 0); + this.ribbonBar1.Name = "ribbonBar1"; + this.ribbonBar1.Size = new System.Drawing.Size(88, 59); + this.ribbonBar1.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar1.TabIndex = 0; + // + // + // + this.ribbonBar1.TitleStyle.Class = ""; + this.ribbonBar1.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar1.TitleStyleMouseOver.Class = ""; + this.ribbonBar1.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar1.TitleVisible = false; + // + // btn_document_info + // + this.btn_document_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_document_info.Image"))); + this.btn_document_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_document_info.Name = "btn_document_info"; + this.btn_document_info.SubItemsExpandWidth = 14; + this.btn_document_info.Text = "文档管理"; + this.btn_document_info.Click += new System.EventHandler(this.btn_document_info_Click); + // + // ribbonPanel12 + // + this.ribbonPanel12.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel12.Controls.Add(this.ribbonBar18); + this.ribbonPanel12.Controls.Add(this.ribbonBar13); + this.ribbonPanel12.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel12.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel12.Name = "ribbonPanel12"; + this.ribbonPanel12.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel12.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel12.Style.Class = ""; + this.ribbonPanel12.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel12.StyleMouseDown.Class = ""; + this.ribbonPanel12.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel12.StyleMouseOver.Class = ""; + this.ribbonPanel12.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel12.TabIndex = 34; + this.ribbonPanel12.Visible = false; + // + // ribbonBar18 + // + this.ribbonBar18.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar18.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar18.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar18.BackgroundStyle.Class = ""; + this.ribbonBar18.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar18.ContainerControlProcessDialogKey = true; + this.ribbonBar18.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar18.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItem133, + this.buttonItem132}); + this.ribbonBar18.Location = new System.Drawing.Point(508, 0); + this.ribbonBar18.Name = "ribbonBar18"; + this.ribbonBar18.Size = new System.Drawing.Size(171, 59); + this.ribbonBar18.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar18.TabIndex = 1; + // + // + // + this.ribbonBar18.TitleStyle.Class = ""; + this.ribbonBar18.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar18.TitleStyleMouseOver.Class = ""; + this.ribbonBar18.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar18.TitleVisible = false; + // + // buttonItem133 + // + this.buttonItem133.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem133.Image"))); + this.buttonItem133.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem133.Name = "buttonItem133"; + this.buttonItem133.SubItemsExpandWidth = 14; + this.buttonItem133.Text = "审核入库"; + this.buttonItem133.Click += new System.EventHandler(this.buttonItem133_Click_1); + // + // buttonItem132 + // + this.buttonItem132.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem132.Image"))); + this.buttonItem132.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem132.Name = "buttonItem132"; + this.buttonItem132.SubItemsExpandWidth = 14; + this.buttonItem132.Text = "已审核的图层"; + this.buttonItem132.Visible = false; + this.buttonItem132.Click += new System.EventHandler(this.buttonItem132_Click_1); + // + // ribbonBar13 + // + this.ribbonBar13.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar13.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar13.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar13.BackgroundStyle.Class = ""; + this.ribbonBar13.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar13.ContainerControlProcessDialogKey = true; + this.ribbonBar13.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar13.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItem127, + this.buttonItem128, + this.sliderItem1, + this.buttonItem134, + this.buttonItem130, + this.btn_check_history}); + this.ribbonBar13.Location = new System.Drawing.Point(3, 0); + this.ribbonBar13.Name = "ribbonBar13"; + this.ribbonBar13.Size = new System.Drawing.Size(505, 59); + this.ribbonBar13.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar13.TabIndex = 0; + // + // + // + this.ribbonBar13.TitleStyle.Class = ""; + this.ribbonBar13.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar13.TitleStyleMouseOver.Class = ""; + this.ribbonBar13.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar13.TitleVisible = false; + // + // buttonItem127 + // + this.buttonItem127.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem127.Image"))); + this.buttonItem127.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem127.Name = "buttonItem127"; + this.buttonItem127.SubItemsExpandWidth = 14; + this.buttonItem127.Text = "打开数据"; + this.buttonItem127.Click += new System.EventHandler(this.buttonItem127_Click_2); + // + // buttonItem128 + // + this.buttonItem128.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem128.Image"))); + this.buttonItem128.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem128.Name = "buttonItem128"; + this.buttonItem128.SubItemsExpandWidth = 14; + this.buttonItem128.Text = "一键审核"; + this.buttonItem128.Click += new System.EventHandler(this.buttonItem128_Click); + // + // sliderItem1 + // + this.sliderItem1.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; + this.sliderItem1.LabelWidth = 50; + this.sliderItem1.Name = "sliderItem1"; + this.sliderItem1.Text = "地面透明度"; + this.sliderItem1.TextColor = System.Drawing.Color.Black; + this.sliderItem1.Value = 0; + this.sliderItem1.ValueChanged += new System.EventHandler(this.sliderItem1_ValueChanged); + // + // buttonItem134 + // + this.buttonItem134.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem134.Image"))); + this.buttonItem134.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem134.Name = "buttonItem134"; + this.buttonItem134.SubItemsExpandWidth = 14; + this.buttonItem134.Text = "模拟设计修改"; + this.buttonItem134.Click += new System.EventHandler(this.buttonItem134_Click_1); + // + // buttonItem130 + // + this.buttonItem130.Image = ((System.Drawing.Image)(resources.GetObject("buttonItem130.Image"))); + this.buttonItem130.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItem130.Name = "buttonItem130"; + this.buttonItem130.SubItemsExpandWidth = 14; + this.buttonItem130.Text = "导出审核图"; + this.buttonItem130.Click += new System.EventHandler(this.buttonItem130_Click_1); + // + // btn_check_history + // + this.btn_check_history.Image = ((System.Drawing.Image)(resources.GetObject("btn_check_history.Image"))); + this.btn_check_history.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_check_history.Name = "btn_check_history"; + this.btn_check_history.SubItemsExpandWidth = 14; + this.btn_check_history.Text = "审核历史"; + this.btn_check_history.Click += new System.EventHandler(this.btn_check_history_Click); + // + // ribbonPanel5 + // + this.ribbonPanel5.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel5.Controls.Add(this.ribbonBar2); + this.ribbonPanel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel5.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel5.Name = "ribbonPanel5"; + this.ribbonPanel5.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel5.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel5.Style.Class = ""; + this.ribbonPanel5.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel5.StyleMouseDown.Class = ""; + this.ribbonPanel5.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel5.StyleMouseOver.Class = ""; + this.ribbonPanel5.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel5.TabIndex = 37; + this.ribbonPanel5.Visible = false; + // + // ribbonBar2 + // + this.ribbonBar2.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar2.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar2.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar2.BackgroundStyle.Class = ""; + this.ribbonBar2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar2.ContainerControlProcessDialogKey = true; + this.ribbonBar2.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar2.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItemHX1, + this.buttonItemHX2, + this.buttonItemDCTP, + this.sliderItem3}); + this.ribbonBar2.Location = new System.Drawing.Point(3, 0); + this.ribbonBar2.Name = "ribbonBar2"; + this.ribbonBar2.Size = new System.Drawing.Size(350, 59); + this.ribbonBar2.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar2.TabIndex = 0; + // + // + // + this.ribbonBar2.TitleStyle.Class = ""; + this.ribbonBar2.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar2.TitleStyleMouseOver.Class = ""; + this.ribbonBar2.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar2.TitleVisible = false; + // + // buttonItemHX1 + // + this.buttonItemHX1.AutoExpandOnClick = true; + this.buttonItemHX1.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX1.Image"))); + this.buttonItemHX1.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemHX1.Name = "buttonItemHX1"; + this.buttonItemHX1.SubItemsExpandWidth = 14; + this.buttonItemHX1.Text = "导入红线"; + this.buttonItemHX1.Click += new System.EventHandler(this.buttonItemHX1_Click); + // + // buttonItemHX2 + // + this.buttonItemHX2.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemHX2.Image"))); + this.buttonItemHX2.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemHX2.Name = "buttonItemHX2"; + this.buttonItemHX2.SubItemsExpandWidth = 14; + this.buttonItemHX2.Text = "红线审核"; + this.buttonItemHX2.Click += new System.EventHandler(this.buttonItemHX2_Click); + // + // buttonItemDCTP + // + this.buttonItemDCTP.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemDCTP.Image"))); + this.buttonItemDCTP.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemDCTP.Name = "buttonItemDCTP"; + this.buttonItemDCTP.SubItemsExpandWidth = 14; + this.buttonItemDCTP.Text = "导出图片"; + this.buttonItemDCTP.Click += new System.EventHandler(this.buttonItemDCTP_Click); + // + // sliderItem3 + // + this.sliderItem3.LabelPosition = DevComponents.DotNetBar.eSliderLabelPosition.Top; + this.sliderItem3.LabelWidth = 50; + this.sliderItem3.Name = "sliderItem3"; + this.sliderItem3.Text = "地面透明度"; + this.sliderItem3.TextColor = System.Drawing.Color.Black; + this.sliderItem3.Value = 0; + this.sliderItem3.ValueChanged += new System.EventHandler(this.sliderItem3_ValueChanged); + // + // ribbonPanel2 + // + this.ribbonPanel2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonPanel2.Controls.Add(this.ribbonBar3); + this.ribbonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.ribbonPanel2.Location = new System.Drawing.Point(0, 33); + this.ribbonPanel2.Name = "ribbonPanel2"; + this.ribbonPanel2.Padding = new System.Windows.Forms.Padding(3, 0, 3, 3); + this.ribbonPanel2.Size = new System.Drawing.Size(1328, 62); + // + // + // + this.ribbonPanel2.Style.Class = ""; + this.ribbonPanel2.Style.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel2.StyleMouseDown.Class = ""; + this.ribbonPanel2.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonPanel2.StyleMouseOver.Class = ""; + this.ribbonPanel2.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonPanel2.TabIndex = 39; + this.ribbonPanel2.Visible = false; + // + // ribbonBar3 + // + this.ribbonBar3.AutoOverflowEnabled = true; + // + // + // + this.ribbonBar3.BackgroundMouseOverStyle.Class = ""; + this.ribbonBar3.BackgroundMouseOverStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar3.BackgroundStyle.Class = ""; + this.ribbonBar3.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar3.ContainerControlProcessDialogKey = true; + this.ribbonBar3.Dock = System.Windows.Forms.DockStyle.Left; + this.ribbonBar3.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.btn_user_info, + this.btn_role_info, + this.btn_resc_info, + this.btn_role_resc, + this.btn_user_role, + this.btn_password_edit, + this.buttonItemPasswordReset}); + this.ribbonBar3.Location = new System.Drawing.Point(3, 0); + this.ribbonBar3.Name = "ribbonBar3"; + this.ribbonBar3.Size = new System.Drawing.Size(551, 59); + this.ribbonBar3.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.ribbonBar3.TabIndex = 1; + // + // + // + this.ribbonBar3.TitleStyle.Class = ""; + this.ribbonBar3.TitleStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.ribbonBar3.TitleStyleMouseOver.Class = ""; + this.ribbonBar3.TitleStyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.ribbonBar3.TitleVisible = false; + // + // btn_user_info + // + this.btn_user_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_info.Image"))); + this.btn_user_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_user_info.Name = "btn_user_info"; + this.btn_user_info.SubItemsExpandWidth = 14; + this.btn_user_info.Text = "用户管理"; + this.btn_user_info.Click += new System.EventHandler(this.btn_user_info_Click); + // + // btn_role_info + // + this.btn_role_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_info.Image"))); + this.btn_role_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_role_info.Name = "btn_role_info"; + this.btn_role_info.SubItemsExpandWidth = 14; + this.btn_role_info.Text = "角色管理"; + this.btn_role_info.Click += new System.EventHandler(this.btn_role_info_Click); + // + // btn_resc_info + // + this.btn_resc_info.Image = ((System.Drawing.Image)(resources.GetObject("btn_resc_info.Image"))); + this.btn_resc_info.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_resc_info.Name = "btn_resc_info"; + this.btn_resc_info.SubItemsExpandWidth = 14; + this.btn_resc_info.Text = "资源管理"; + this.btn_resc_info.Visible = false; + this.btn_resc_info.Click += new System.EventHandler(this.btn_resc_info_Click); + // + // btn_role_resc + // + this.btn_role_resc.Image = ((System.Drawing.Image)(resources.GetObject("btn_role_resc.Image"))); + this.btn_role_resc.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_role_resc.Name = "btn_role_resc"; + this.btn_role_resc.SubItemsExpandWidth = 14; + this.btn_role_resc.Text = "角色授权"; + this.btn_role_resc.Click += new System.EventHandler(this.btn_role_resc_Click); + // + // btn_user_role + // + this.btn_user_role.Image = ((System.Drawing.Image)(resources.GetObject("btn_user_role.Image"))); + this.btn_user_role.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_user_role.Name = "btn_user_role"; + this.btn_user_role.SubItemsExpandWidth = 14; + this.btn_user_role.Text = "用户授权"; + this.btn_user_role.Click += new System.EventHandler(this.btn_user_role_Click); + // + // btn_password_edit + // + this.btn_password_edit.Image = ((System.Drawing.Image)(resources.GetObject("btn_password_edit.Image"))); + this.btn_password_edit.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.btn_password_edit.Name = "btn_password_edit"; + this.btn_password_edit.SubItemsExpandWidth = 14; + this.btn_password_edit.Text = "密码修改"; + this.btn_password_edit.Click += new System.EventHandler(this.btn_password_edit_Click); + // + // buttonItemPasswordReset + // + this.buttonItemPasswordReset.Image = ((System.Drawing.Image)(resources.GetObject("buttonItemPasswordReset.Image"))); + this.buttonItemPasswordReset.ImagePosition = DevComponents.DotNetBar.eImagePosition.Top; + this.buttonItemPasswordReset.Name = "buttonItemPasswordReset"; + this.buttonItemPasswordReset.SubItemsExpandWidth = 14; + this.buttonItemPasswordReset.Text = "重置密码"; + this.buttonItemPasswordReset.Click += new System.EventHandler(this.buttonItemPasswordReset_Click); + // // ribbonPanel1 // this.ribbonPanel1.AutoSize = true; @@ -4465,7 +4465,6 @@ // ribbonTabItem9 // this.ribbonTabItem9.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.ImageAndText; - this.ribbonTabItem9.Checked = true; this.ribbonTabItem9.HoverImage = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem9.HoverImage"))); this.ribbonTabItem9.Image = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem9.Image"))); this.ribbonTabItem9.Name = "ribbonTabItem9"; @@ -4486,6 +4485,7 @@ // ribbonTabItem14 // this.ribbonTabItem14.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.ImageAndText; + this.ribbonTabItem14.Checked = true; this.ribbonTabItem14.HoverImage = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem14.HoverImage"))); this.ribbonTabItem14.Image = ((System.Drawing.Image)(resources.GetObject("ribbonTabItem14.Image"))); this.ribbonTabItem14.Name = "ribbonTabItem14"; @@ -5480,7 +5480,7 @@ this.dataGridViewX2.ReadOnly = true; this.dataGridViewX2.RowHeadersVisible = false; this.dataGridViewX2.RowTemplate.Height = 23; - this.dataGridViewX2.Size = new System.Drawing.Size(23359, 92); + this.dataGridViewX2.Size = new System.Drawing.Size(23953, 92); this.dataGridViewX2.TabIndex = 11; // // dataGridViewTextBoxColumn10 @@ -5574,7 +5574,7 @@ this.dataGridViewX3.ReadOnly = true; this.dataGridViewX3.RowHeadersVisible = false; this.dataGridViewX3.RowTemplate.Height = 23; - this.dataGridViewX3.Size = new System.Drawing.Size(23358, 127); + this.dataGridViewX3.Size = new System.Drawing.Size(23952, 127); this.dataGridViewX3.TabIndex = 5; this.dataGridViewX3.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.dataGridViewX3_MouseDoubleClick); // @@ -5832,7 +5832,7 @@ this.dataGridViewX8.ReadOnly = true; this.dataGridViewX8.RowHeadersVisible = false; this.dataGridViewX8.RowTemplate.Height = 23; - this.dataGridViewX8.Size = new System.Drawing.Size(133, 92); + this.dataGridViewX8.Size = new System.Drawing.Size(99, 92); this.dataGridViewX8.TabIndex = 11; // // dataGridViewTextBoxColumn12 @@ -5927,7 +5927,7 @@ this.dataGridViewX9.ReadOnly = true; this.dataGridViewX9.RowHeadersVisible = false; this.dataGridViewX9.RowTemplate.Height = 23; - this.dataGridViewX9.Size = new System.Drawing.Size(132, 127); + this.dataGridViewX9.Size = new System.Drawing.Size(98, 127); this.dataGridViewX9.TabIndex = 5; this.dataGridViewX9.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.dataGridViewX9_MouseDoubleClick); // @@ -6791,12 +6791,12 @@ this.contextMenuStripDeleteLayerNode.ResumeLayout(false); this.ribbonControl1.ResumeLayout(false); this.ribbonControl1.PerformLayout(); + this.ribbonPanel15.ResumeLayout(false); this.ribbonPanel6.ResumeLayout(false); this.ribbonPanel4.ResumeLayout(false); this.ribbonPanel12.ResumeLayout(false); this.ribbonPanel5.ResumeLayout(false); this.ribbonPanel2.ResumeLayout(false); - this.ribbonPanel15.ResumeLayout(false); this.ribbonPanel1.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.panelOfTable.ResumeLayout(false); diff --git a/MainFrm.resx b/MainFrm.resx index b408d34..6b9ae78 100644 --- a/MainFrm.resx +++ b/MainFrm.resx @@ -351,804 +351,6 @@ 766, 54 - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlDMzFEOUI4NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 - NEI4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlDMzFEOUI3NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 - NEI4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDk5Mzk2NTZBRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz73sIMwAAADIElEQVRIS7WVa0iTYRTH56Uiysvm3TkvpLl5DRIvQYWVWl+6 - iNEVg0yhQqloQZHkLT+Y0YdAs75IpEUhzERZoZhsRpZlS7soblotsRwoxhqWeTrnYZtv+u7NsB74cZ5z - zv89/z17HzYRAPxXeIv/EpFXcOyi4BvKhfehv4FvKBfeh+ayqIUDlIgBgT8whpRYoT2fhgvNVJKBQT9s - hB8/QZDPpnEIjEhg0J5Pw4Vm0mwygG9T06BSqQQhTUhUMoRGpyxYT7OZwfhXC6jVakFIYzNYqN5uMGKa - BI1GIwhpghXJaJJi13d0dEB2bj74hsWzSDlXbzfQG02g0+kEIU2wIomdovzKdVifngnFFytBeb4cLN+n - WaSc6hfKKqB/eHTWoHfwExgMBkFII5MnQUD4WlAWloO26wVs35MDmifPmQFFyqlO/aKKqlmDp31DYDKZ - BCGNTJ4IPqHx8LJvACbNUw7p6e2HuJQMNIhhBuaHj3vBYrEI0tb1BoIiE9kJ9h7Oh7EJM+g/jEJuwVlY - s24ri5RTnfo5BedAIoueIYPumvomuHzjzm9cq2uCq7UNUH2rEarr7kNd0yP26Y+eKoSWtk4wfpmAg7kn - ITY5DUorq1g8cOQEqze3aplOEhRtJoMcL1mMTixV9IgD5a/tSBVDYql8AKOBQLEJtTP08gY/jjFiktKg - 5FIV21Ok3NazvmR2AvrFkCAJyGYk1comZAuHDM/AyLvHThfBveZ26NOPwI59eey7LsbhFCmnOvVJ5+Ef - rrYZLEU8EZ85+HLwW7ZCLMVTFWdkHoLut+/hgbYHaE9XN31XNsupTrWV3jKVs+uS3cyAD0cLe331jW3Q - qRt0CPUlQVHDKI+fN9iGo4W90uNnyuA2vvRtWTlQgxeg/dk7FimnOvU9/CNqUe47b7ANRwt7AfjpKvAK - Gt18Qur35ymhRfsKKLr5hN7EyzDq7humWrrcfSfKxbz/QlwcLDck1snZJdUzYHUDmk57+K1qdXJyzsL6 - RmQD9ZmObygXB8sVIRO6fXQB4hC6eRQppzr1XXmHclnAckFomLc1Um5dItEvhZ97MQXP9N0AAAAASUVO - RK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhDMTdBQjRENEFBRTExRTQ4QjQyODY0MDNBNTJE - NzNCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhDMTdBQjRDNEFBRTExRTQ4QjQyODY0MDNBNTJE - NzNCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NUQyMjc4QTlBQjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4eHsDfAAAB00lEQVRIS7XVWytEURQH8HniTTNHLs0NCXNcXjTN5dH9g/gM - 3jx590QhFDJS0gyTGmpqaqJIMW4hzlAoOaWISS7LWifntI3ddnTGrl92e/57/We/DBsA/CvuYSHZSr0t - lvCGsriX/oI3lMW9lM/SwgF9SEHwizs08IX2vAyLZvZRgXJ+cQWv7yB0q96Ds86voT0vw6KZNJsK4Pnl - DWKxmBBlqhpDUN0UNp2n2VrB/WMOEomEEGX0ArN5o+BGfYB0Oi1EGa8cwpKw6bxRcH6lQiaTEaKMVw5q - rzCbNwr2z65BURQhynh8Qe0VZvNGwdZBFlRVFaKMxxfQXmE2rxc8rW3sQy6XE0puHoG7IaC9YnV9j5th - pbZPqOCDCrbH5uIwOD7/zWgkDkNTizAyuwQjkWWIxFNQWduqmVxI/MiPz6/A8HTUuDMTTYLkbrqhgt5S - T3PG4ZJ3HE7focElZx0u3yn+VQiG1ZLymmm7s74f88f42S6bl9zyJZ6d6Xckd+Mt5ieogH4xJORHHajt - SzvqZPSgECpHZSiA2DztuxBlad+NgnpBEbIjusiiYboKRF+kGFHegUR5ImkFv7G0eAPzWVq8gfksLd5/ - oULiHhYS97BwwPYJlSCUgVubViQAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJEMDQyOEZBNEFEMjExRTRBN0MxRDBCNzJGRUND - MDEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJEMDQyOEY5NEFEMjExRTRBN0MxRDBCNzJGRUND - MDEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkRDRkI1RDVEMTRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz59jfe3AAAEbUlEQVRIS8WTeUybZRzHF48/pnFOuQRajkFLgQFb5iRLNJr4 - l/EPgsniUI4xZDAY1zyxwApsMJyIME61rByl3DfoYGBrgbWUY06FcZSCha4rQ8jYxkqPr2/fvkv8o2Sg - S/wkT970eb6/T5/39z7Prv8dt/Oql4mR4HZJ3ccoXFxhVCzB9DT9JueJdSq6c1wzVZFupepVzxu34XVj - CaEDi1jX6hF8ZQoeokl4iBVwzV9YdU1XRlIl28eVo8phCdXwGltEeOUsro6psaHVwcSDh5volc4iOO8X - 7KuVwb1hEi7J8myq9PEQO//I85oafr0KtEpUpNSETm+AwWDAvfv3YTQaybnm/t/AyO6Ga+UonJOnIijF - 1hA9tWI2qle9RxcI+RIpmZpTIfBULhIyyqHVahHPKcN70TmYnFFCp9OhqXcc9KwW0DOHVl3YU1aUyjJu - F1SpfhO3EM6bMMsVt+D8Zhz2HIpC4oU6bG5uIu4cD3tfTwAjIBNypQYbGxsISquBU34PaDHiVEplGXee - SuIjVaBv3Lz7gJg8vHg4FlZvc+ATVoLipiHsD8qCXWAO7IPK8MG5FjLXKboOeoYADkldUkplGWb7vOb4 - 4BzxIXXQE/1m59WDXdgBvxPfwz6UC4eQUth/WIBDZ2qQXj+K7IYRImeE5s5fOFrcDPvPapcJzVNmmwVY - VxWG9U09uau1tTVymPpc0iYFLew7OEUJ4BwtALfvJpl5xMrKCu6s3cUrn5YbCM1us80CrJZZVWjXr7j3 - 4CE0y8v4IrcaH+cK4Bv+DRyPl8ApphYuia3wZ3eCUzOA1PIfcVuzjHnlIgK/vgy7mHzTG+w12yzA5E53 - edYPo1c2i/X1dQTEfwvbwDQ4hhXg8OcN4P48Df+UTrgkNIAeW4Hg3Hbo9Xq0iGSgs4ls5CUhoXnObLOA - S8pkhG/bdZzgDZJnffT3GXieLAA9XgB2/RjZjuQqMWhxfBw824H55XWyhcfy+HDNqoB1SH4Codn6G7iw - p3d78EaVPlXX0CaZgkqlgly1gpCiK0htHCH/IL6oFcEF3ZjT3CUvXqv0DzDSS0FPq1a/8EbYS5Rqa+if - SAJ8KoeNR7gitEsnoVQqSbGOkJmYX1ggxaY70SabwIGMUrjn8I3WIXnBRPnWu/8nDnE9Sd7cAaP/ZSES - 6/rRKJRArpiHXC7HzekZNIukiCyrhW9mGZgXa4w2kUVnibJnzdXbxP5URzyDO4QjxGl5i9uNpMZeKP5U - IrywAq9yCnGAOGGMonbYxpVnEPGdyR9BO/MTj8kfgXeNFPt5IngVtoF1kQ9WcTs8qgfgmNreQMS21xZL - 0E6Ln6ef75tg8sfgXT8O77oReAkkYNXJ4PRV/4ztyfo9VPTf4xjdf9CpQKzdxxuGe6UMbhXEmc8V6mze - r3qNivx3HGN7UmglQ6CVDMIxXwybo5UcaunJQD8te9rhyx4JrWwItlGNUut3y5+hlp4cDhFCpl14k9jq - nR+Y1NTjIe7NlmMnWKoHsOtvjWYcKpheqFQAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERTg4QTFENEQyMjExRTRBODEyODk0M0RBMTc5 - Qjg3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERTg4QTFDNEQyMjExRTRBODEyODk0M0RBMTc5 - Qjg3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjJGOUEyRDEyMTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6wJF34AAACl0lEQVRIS62Vy08TURSH73/QhQtXVnBhxEcMiUkhbEg0hB1R - Q1i68C8wIW5cEqMLN7ho2Ji4YiEhWq0prYUhfULbadN3obTaChobtZEUsFY9nnPS6WM6HYowyZf87j33 - nG/amaai9geOBYA+4pTxihmBE8DcTQB4J8em/9IwSQyagmrtL+z9rMFmvnhkKvtV7tcVHPz6DVsftulA - AckdhUg8zf19eoLKAd597iMLMItewfOxUDTN/bqCH3tVSG8VWIBZ9AoJApEk9+sKvu/uQ2IjzwJkGtH8 - OrTwy3Hu77vIAnV9mgWlcgWiqRwLjAMmkOMbPbNTKnN/JJntqJGEBZ++7oKcyLLgLN4JrU8Cms2C4pcy - BKKZumCI18temQ/8DzSLZlBmQX7nG/jCKdpgAa0driCtY5iFHuqHSjNoFtaags1iCdzBBG+QgNY2aZ0F - mIUe6osENAtrTUEq/7kDq9PHAszU5yYoq9f1i9cUSCD5ozxDEeTsrhAoONwyxLLb8MrhYQFmZYCHsnpd - v3hNgQROb5hnKIK29944MAThTBEWbS4WYBZ6qC/sKSy5ZJ6BGUQg8b4Bbhjod4AZXlhXWdBa10LrIVul - AM9ggS+aa6AIMMO8ZYUO0KeyIOMtZyaQpXpNi4LFucYzMINwhbMNcMNw5oIJMMNKIA0LNg88mZuH/ssj - dPgBMnN+cBRmny1wrRtSMMMzWCCFMg0UAeY2Fh0+GL5xG8Zu3oHXUrCj3g0WONdTbeBm21/o1N17gPtg - 98Xh3VoS3qzKMDI22agfglnY/Uld8NDc/ZlZwAwvl4Ngun6LGh8rdfVDViNs3rguOOzq6XOD8PDpc7g2 - OkHDH7XWtYa2It66Y4eCQ8cRfpvUNa2hTUD8A6JMaBvCyTdJAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERjY3MEZENEQyMzExRTRCNDlGQUMwMzk0OTAw - Qzc4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERjY3MEZDNEQyMzExRTRCNDlGQUMwMzk0OTAw - Qzc4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjhGOUEyRDEyMTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6GKmpFAAAC+UlEQVRIS63T20vTYRzH8Yforj/Ei24UiSgKIygKi8oyxZQo - cvNYeXaesmzqPGu2POd0ulSsnIdaurTSTJ3O6UxTPGya5vCQx5AuPn39RbHop7nZxQt+z3ie93e/Z4w1 - p7nsCoBt8R6yBF/UHPv+Wb0rfFFzm99CRIwEW1gnqXzxTXxRc0ydctm4OlID2sxrw6iCtiwItC+A2P/D - frLnjwGNSZdMq6N1WOvLwFpP4l/WdRlY6Jaio9Ab7QXba8sVoDHZGdT8PYS9THDqMGnLsKpNw0qXGCua - BO55VZdNQ6U/DRRibVCGb+N1pH5bukoRqHmDHOIG1N8/X2F4I8WyNhtf2+9hqSsZxqZ4upbb6HsSZLHO - Im90ym6hNVcIaktYTexZyUelGEvaHMy/jcFiZxo0xX5Y7ivGcn8JkVmA9uvlWBmqwpJeAWovs+poR99O - eRgWtQWYVUdgrj0FH+i+F3XF3NoappZYGJrEoLaOVYpOOTY/FGJB+xjTqnDMtMTTAC/Ma/Ix/TLUKl9e - x0JfFQpql7PykBP7lWIXzPeUYLIhHCPKCLr/AMy2ZsKoDLTKdNNdvM8TgNpRTBZwfJ885CTmaIChPhwa - mS+GnkdhqjEWY9X+VplqvIMXEhdQ24mZeuSs0N/BNNWWj4k6EdSZHhhXxWH0aSCGFd4c4Tk7zk7XBlUM - FKLToK4Nm+0qYnneRzqGGiSYaIiiyZdhVCdgqFSIwRJPjucZW85O1pvnRmvDkO9zFNTdy2Y6HjGp4HCF - 5kk4xhoiURd/EROv4tBfeM0qAyUC9Mp9QM0+7o829T6LZV0/mNycS6+nFKFWfAGj9ZHozfGwil7miZYH - 7qCmghsw+S6VpV894KuUuKFbfhNNqa749CwY3dm0toK+VABl3HlQM5obYHybwFLc7W1y/Y5BlX6FfgNn - DNcEY0DhZZX+MiGKbh0DNR24AYYWMSfJzc6GZBApwS5skIzNODcg0dV2V36FtsJ7yBJ8UXO8hyzBFzXH - ++H/A/YDv9/V87iOlrYAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 - RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL - ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH - s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW - uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx - xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd - iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ - qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW - GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE - NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n - KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw - qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI - HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq - wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q - 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA3MTZBNTkzNEEwMjExRTRBQjdERDhBQkEzMDEx - MzZEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA3MTZBNTkyNEEwMjExRTRBQjdERDhBQkEzMDEx - MzZEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTgxNjM4Q0YwMTRBRTQxMTk2M0JC - NEQ0MzNCOUIxQzgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - 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 - 0HWhD93n++Dbua+fK9NvoTM5+Udx5mye9NjgCZNf0HEnpN5U5RbPa9+0bdfQ+0eOPzp5ppvG96JfjFkM - nXR/vOP0ePOu/deyCuf8JVSorJny7HQdvR9MTCUm+fUYgyehazLBVCCd8ttpJbQANtO3cDjWbO9werzd - ruK5F9Ld3p7YBEdHCE/WMi0s0jf5mefm0e+ZCsXEf85i/98XsP4NaTpxka74X+IAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJBREU3RDk2NEFCMDExRTQ4OUM5QjZFOENGQzJF - MDk1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJBREU3RDk1NEFCMDExRTQ4OUM5QjZFOENGQzJF - MDk1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MEM5Mzk2NTZBRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz52g1XsAAADeUlEQVRIS62Va0hTYRiAXzVNoQs6oUCttJu3aqatrLxr2k0n - W6bLLlLSxTKCKLoQQUg3IbLMflSgBRGRP7JSSzGnWalYdpnV1MQu1tBWWklqvr3fp2dsOytSfOFh3/l2 - eJ7tnDMGkkmzGCqigsARhPlUQqCi8nEd9v7GEYP5mFcI4K/e/hGHeQ2B7p4+1HV8Nf6Kw4a5GGxtCHzv - 7sU2nR4lbr4/AUBFKIeD4GKYBL79+IX6rm622U8nSgnX4SC4GCaBL50/OXwTwIUY1ohcQkCn/84ZDLBP - I5p16TBl7XYIoaXVwI54RC4h8LG9k/OvQPIOmEZUJW2F+XRoPbBrOiKXEGj9rOdYCqi2gxXhnLQNIo6f - n9tEa7ViI79PoojIJQSaP3RwjAOJaSAjjhL3N+9zrD+W499UVJnSeeVmWDvtlcWlgCedZnK5RC4h8KZV - x2FryQSYmrAVjh/MnP46/57yS7VmZ9+zxr1Yr92NtQ1pWFmfiBevL9QpUqE0JhHcyWuImLsMAU1zG4et - V6yHC1l5oe+evNmD1ZoteL9OgaW1K7GkRoF3H8ZigTocb5bFY8bZWbpoFVwh7yiCR8xdhsAz7XuOh9QD - D2R6twyIEzG/JApz88N7z+T5d+VcDezKL43Ea4UxeCjTqyNUDpUBYeBFXjvjgOAyCdS9asXDJ3NQFj3u - 7eWCyG/FjxR45OyMr6s3S1qCYqE8RA654Uq4dOiUV/v+E9P0i1ZA9Zwg8COnA2HyDZiLYRw4dyAjC50n - z8awBBvNbbWyZ+8x10+By+GONARCbe1gDBPJloCvfKODluQ10mD+qDK5LWFyD6pfvOUYBzydXL0v2I+V - rI9Mhud5BQE9i+RQPt2P30BBYrM4HmYSNf5REGS0b5CzYdKq+iaOITA44wmPiLXwaFfGhDbZMkinYxNJ - 8CpwXxgHobQcPbhv8XegrtNyzAPsOtqHJUPeml1jm/1jYDkdM5G5hB3bDL6KhknLal9xzAN8gpMgVZHm - oKUAuwx29H420c9O/l9KHms4bC0KLFCAY6CSHr+VoHJy88lWbEjHoqoXWPzw5ZCxGKCxkslBLo22L1+6 - ahPeUj/FwgfPh8zpSzfQ0cWrwVKAjfXcWFjjPm9isWSSbx/7JEPF0cWzcYzE7dTfAmysfSLB2z0Awm1H - 8ycnjrD4N/kX4gEg8A9sAFSe4VuPvgAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkEzN0Y5NjgxNEE5MDExRTRBMzU1RUM1MkVEQTU3 - REQxIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkEzN0Y5NjgwNEE5MDExRTRBMzU1RUM1MkVEQTU3 - REQxIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MUU1QUVCQUI4RjRBRTQxMUI2QTlC - RjEwMkVGQzEyNEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4Oz1B+AAABO0lEQVRIS7WUP0sDQRDFt0snIcEiklhGJLH3k6bNp0ifYCUo - KWwMIRCx0EYxEEL+IOPO4SxzczN7d7gGfuzd7Hszd9nHOQD4V9RiStRiStQi0b68GXkgwkjzcdQigU1O - 32CC+9IjUYsENvjY7EySDHhev5skGXA3X5r8aYA3lx0wET1otYgmNMcOku+jXtMg4QJFJMb1a7uPmjUd - rVzHDfDy9pmJaZViCe5rPq7hYpgvXjPw2hNtTqBOevk+F8L0YRGQQosyHxfSf0jUegPLZwkrNedYfi6o - 9Y2RWP6cACPHYnf4XauQablfHYAxo6jt9sfwRGWgVvrVASKmdd7g2OoN4P5pVYhqbgCPmnPuzHPtua1C - s9OHyeyxEFU+IJcCb2p4zj3dKjQvrsat3jD4CwNCIcEv14/fpAfcDwXsled4Tu6+AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlGMEQ1RDBCNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 - MzBCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlGMEQ1RDBBNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 - MzBCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzFDMDRERTRENjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6zemTaAAABh0lEQVRIS7WUvUoDQRSFEwiBKPEHsRAkb+ArWIsv4CNYCSKI - jRD8a1S0m9QhdTobG5uARZogBJSkiLASFJJChQiRcJ2z2bnMZtbxCnrhY3YO556z1aSI6F9JFP+SRBEs - FFaUhoSopAyQKGIBi58jEuErcQSAhY/hyP5DL8Y7mQMcAcD8Phh+u2Tzk9cRAMz914G4wOd1BABzt/cm - LvB5HQHA3On2xQU+ryMAmB8en8UFPq8jAJjvWk/iAp/XEQDM9WZHXODzOgKAudZoiwt8XkcAMN/U78Ml - CcY7mQMcAWhz+FRc3zZFREXypwKYEiG/e+ykc1WYVRrCGUk8nGUHsyic6nKeetUK4dTESjjLDjZUlqaV - hiS8lEsh0Z1LTFYs2FBazFFwcUzB+YE+T8bffD+i4LRIwSV0jdZaO5vhHXtRPmfFgg1n81mlIQnt/W1q - bKyH34dz2XKUz1mxYBaFU5zJUG1tlXDu5TMcjuEsO5hF4exOpZWGtnLpWDiGs+xgFv9gxlmU+gIVyyIX - YCSg/AAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - 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 - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVGNUQ0RjNENEQyRDExRTRBQ0ZFOEVGNkU4Rjcw - RkEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVGNUQ0RjNDNEQyRDExRTRBQ0ZFOEVGNkU4Rjcw - RkEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzUxNUY0MjEyRDRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz7jldwbAAAEyklEQVRIS6WWDUzUdRjHoeXWVktIc74MLREMUxBQV4RYkBmL - SBwSoZIFCgULlOJFDJDxqkiAqGgoiIQ6jaFLB1EqUaC8iMgdL8cJB3fHwR13HO8Hh3x7fn+pwN01nM/2 - 2X77Pb/n+33+v/3/95zBbGOVnZM58QHhRKwgnp9KPXuQ2CtJ6ScOjGo0fcMjI93llVX55us3rqbUc49P - zDLyw9auL4iw5l+IsMY//BRujcygdcg+ug83rpzCsVhf3C6+hHg/W+R++985BtU3pey1cCCpOYQhJzo9 - 8kPX1tZcDoS0Jp2jrCgWmakhOJMVA4GwBd1KNSQ9veiUdeNifjqyMsJxveD7f8+z2rPBlg0kNZ9gJjMj - L8RqQlSegIbLX6CuYAcOBm9FHe8B2rt70SZTgNfehTphJ+paCaEYjSIJkmP24PaPnrhfsBP8okCcCbZ8 - RFLmxIuc6PTICV5Dh4IxNqSEemAA6adzwBdJ8VeDEL/XNqGkmo/iKh4HW5fWNCL7QiEqq2sw3N+Dijwf - nPx6FUjKkpjLiU6P7MDVqL/gj8nJSY4bpbcQnZyK8EOJCI2Ox3dRcY+JjkNYTAIi4w4j7+JlKBQKjI+P - 42qqJ9J832AGawkjTnR6ZPm/iXvn9+ARiWsnJjCu1YLeGshJQCKVolMs5hBLJOiSydAjl0OpUmFweBhj - ZJAfuxVJ3ub6DTJ9LVCd40Pij6AZ01IRoWVGumE5dmZEM45RjRbnolwR72Wm3yDt85W4e2o3FVLnGg1G - xsYwSvDEdxB03gEa6vJwSopOhkZHkRPhgkPbTfUbpOwwR+XxXdT9OM79EQ/lgBLNkjpsz1iMP5t/oU7H - dIoz+oeGcTbUGVHblus3SPJYgfI0LxLSIPmaL4LyHOB5bClK6gswNDLKoUucoezvx+n9W3Dg49f0G8S5 - LUfZEU8MkpC8T43YQi8UVp3kutOFenAIvep+dClUkClVOPXNZoQ6L9NvEE3uN+PdMUBvRXevCgqVmjob - gGpgEH1PwPZYTq7soy9bDolcgRNfOWL/ZhP9BpEfLsVvMW70kQ1C2qMgEyVnUiUoQ2CuPZTUra7rYYi6 - ZDi+910EvbdEv0GYkwlKIj+BijrL+jUKbdJO1LZWwD19EUrrr0Cu6tMpzhCKJcj40gEB9ov1G4RsWoLi - UBe6V7r/n70RkPMOPDJMcLXqLPc0DF3ijBaRCOneG+H31kL9BkF2i3B9nzN1qoagQ4yDlzxQUE6/lHRd - XfLeGbA9cbccwk4JHggegi8UIc3LDj7rFug3CNiwENcCt6CH3ojm9g7qqoN79HZpF9rpjjumYGu2x3I8 - 4UNU85pwv0WAox5vY7f1/xj42SxAkf/7kCmUuNfUiho+FTa3gtfaRh22o6lNxMHWbI/lKut5uFVdh7sN - jTiybQN2rpmv18DQ1+rViUJfRwia+bjXLEB1YxNqyai+VUiditDY1sHB1myP5e408FFR34Cb5WVIdLXF - Zxbz2DywJYw51WkxZ9eqebxUFyvk7rDHD24bkOhig4RZEM/4yAZhm1Ziq6lRG2mxscmm2owwdF72suOn - ZkZCTzNjuJsaYdtT4vr63E4L4xcCSYv9IXiJU30i2BxlzmzkWRHsLp8GVsNqp2aygcHfZtZtYIryU78A - AAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkUzNzJDMjE3NEFENjExRTRCNjE0OEVEQzI4MEM0 - RTZDIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkUzNzJDMjE2NEFENjExRTRCNjE0OEVEQzI4MEM0 - RTZDIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI3NUQ0QkNENDRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6PyaLfAAADMElEQVRIS6VUXUiTYRT+vi3Tzd+ps23+3KRigtiPkolEQReG - UYTkhWatpWlWGkRdddfdSPImqUAJjSIT00oxLJIk0cR+tFSyzDJtgaMkDEPkdM7ZPvm2vS6jBx6es3Pe - 8zzvtm+TohLS/ov+AACStLgEQuJyLRJWYK1yzh/+FgCoQrpnfM4fOGBhcUlIMkEVkma4H4i1y2kFcMD8 - wqKQZILKZqTqmlTAWrfvMjhgbv63Dwm0hLWQohn1eNEbzrlfPiTQAtZCKjP1GXdAIC+r4XD+9CGBFrDm - RVJ1re6pZ0GyHHMvIawauYVNCFPfvvuQQAtYC6meKXU0amNsaGN/ZR60xIf9aIgN3cpGE9OzZCZ85nEm - pGiWlLABmuJCnUOXrNB7chdct4TUo32ANDbp4NuielDpqWfePdaPX6GrohSK4uLhlCEo96YlZLbOFHzH - oJXjMSBcGn4/zQGovEDqXXtzeTb+BTrKj0J3+Q54djYP7EZdTU2MPjFSK8eieQR9QtLg6GcOQPWgqKeQ - ZyOfoK30CDw+lg2Ot3Z4VLoNqo269mCNHIa2WjYn9A1PcAAqU6m9VV3TF9psOwwPS3JgZugCdNoyocwU - jU+RlImWBpezGz0vxzkA1YOiHvPFO7Ca1kGHLQtmXp2HdutmqN+/F6JiU+h3kOpyVeHJwBgHoLIpqajm - 189HoaG4CNqsGTA1UAWth9Lg6r490PygGyLjUikgzuWqQlffCAegelDdUwLqigqhpXgjTPYeh+bCFCg2 - RkEk3vxuVz/P0c43oLP3DQegLhspNalSFxiNcLswHT48LYNbBUlQk7ebzenmyhm08w1o7xmiAP6hRZiT - 70eYkzpctUuJWdHmwWs74+F1Uz7cyE+E4ohQB5mHm9a3GywpTXzektyKduIAIsKI3ISkL4rIdYle05C9 - VrZVBmvtl7eboUyv7V4jSQdwRn8FdI72iErtCUxnIuifkJ5hUqUOq9Jr7OeCNU6bTpNVqtMcDJSldOwn - KnOk+jypJ5QANRWc0cs5SEelXr54QidfwVYAMoiHq4W/gNM6OaNCJ+diaUIqN/43+Atwg27t+9ZXBUn6 - A2MdqQeVc5pWAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjUzQzNGNDI5NEQyQzExRTQ4QkE1QUNCMEVDRDZF - MDVEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjUzQzNGNDI4NEQyQzExRTQ4QkE1QUNCMEVDRDZF - MDVEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI1NUY4OTYyQTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6IsaOmAAADF0lEQVQ4T62U/UuTURTH+0nICqRI1ERMMyNQe8N0ChqBwQhN - yvwhEgJjVCqJ/qCibZo6tzQ339h6Nre5prapUzc1XzItX1ilzuWMLLVAen+xf6DTuTxjdxsFVj58ebjc - c+7nnud7z3228DbpIaDFH/CfoqCn72DIDvNfPDM2KAqyr8PcJxqY+QBTb8kkjocXQTsKigGwfqYJHqIg - 1OxHGHvlWPx4hXB1YyA3g4CBhqst+piEnrDA3rA95vBAY1x8d7lq/DVZwm5PQZNvoKYdypSgHgbVEIh1 - cLOZzOCbSSsyRQRba6uWtcpVLbPcwlglInNUCJNWWKqABqMLCGvGlfpJELaQ/V1Vd1lujAhe0chtUrH5 - ZExnmJ85MdomEa+qZMbIEF2BHGunILSjdZwYgTt4gJqjjj0Rltml1Zq9AeL0Mn71Wn2mtDU80MIvsFTw - O+KPIoWC8BNYRIUaqrRQroJKjQOk9N+xLBF2pXJFKfnsDGYa8gS6xOO2whyMuoHaHpGzZ/pBM0IMrtXD - nT4HqNHXe0lYoogMFeQP4jbSDkCPTUyXmnNoPutSo+9WN5DEQDyeWCWnhqm4p7Oimt3b54rzmmKPVHKz - 0Xg0AU1pz87VJp+yXOfd9t3mBmLXsGrsJhSsDtF4iOWxKdpzyQNnuRW7vEUp13obFG05OVUBPtO5V1Sn - k5q4SX8ENfWA6C7xHsP981Bb2sf38ZKd4JhSuXUJHPHhg/WJnAeZFw0Xzt/w8erRtLmBnB/CSmaC599I - 2PYVRl+CXigu3R9SfCC0Pf1MZ1oqvqvjogX7gtRFJfb1n24g7GblfQcFP2fkBYm5anxqQcbLKgzyK/Df - WRTkV5+RMTg84ZrgAOHo4ZIDVNdJw67CpsVLZ5gifj97Typlq2ZFQXj8LKh5EHpnaIar8N+Al5l9Y9Vs - T7OiIAzjqaMsa6QJnBkeWvgOHdPkAuIV67PSeQpCYYZplsZ+KyyWLRyFF8D553EDbURY770J0rrYJbda - SYE4iWb9NcgpRKDrOMAWwYP6d5BTaC52zyaAWDlAm/DweL8AX9zXukfxHsIAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy - NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - 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 - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjYzQTM5NEY4Mjg0OUU0MTE5NDBEQTc4ODZEQzk5 - N0NGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJGRTU5OEQ1NDlEQjExRTRBRUVDOTkyMjQ5NzEw - REUwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJGRTU5OEQ0NDlEQjExRTRBRUVDOTkyMjQ5NzEw - REUwIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTY0MkI1RjlEQTQ5RTQxMUE0QzNB - MjdEOTJBQzc3QkMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjNBMzk0RjgyODQ5RTQxMTk0MERB - Nzg4NkRDOTk3Q0YiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6B5sF9AAACe0lEQVRIS7WVb2jMcRzHL7UHanF/Mts5prE/1li3kAfu5Ak7 - 5IHNobBkSC2UIuGJkrrSWRvTmHQWK8U1T8jqUtYwkZpaGjV/Js6to5YwfXze39+fu/v23f36hXe9us+f - 7/v9rd/dr3MQ0X/F4Zm3+K9QhWajNNlBFZqN0mQHS6lMdrCUyqSgimllUsy4XmOmp+QRDllQWbygjjq6 - uimZStOX8a+ixox3pXrM1JLCDAqYJmY7c669M0bff07mcLbtEl9QE8k6V6BH5ooXMsHZZX7ae+AY7W45 - SrPm19LbsSR9m/iRA2bYGefggVePzUgKBzeu9sQpmZ4QcG/WMtk7eLjv0WMz0kOz+TX6MUXvP6cFeNbD - bz6YvQFm2Bk9PPByZO6jksLB5KvRTzTyLikIrG2ktsvXzd4g2hGjYP1ms4eHvb850qkl65LCQW/ntVs0 - 9HpMcPx0K1X4V1Ff/3NzhnphbVDsjBk8Lm/VE44s0ZJ1KS4Ie8uXUvPBE7Tn0ElCzTMqrV5BO/cfEaDG - TD5X6PFFONLygsTF7jj1vxihyPkYNTS1iFrFxm37KHIhJmp43L7qZxzp0pJ1SeHhQGgLJQaH6fb9R1QX - 2EB3Ek9FryLe95j8K9eLT/TB0FZcskOP1iRdkIh23aR7Ay9pzaZddKY9Jup8nIpeoXXhZlHD655b85Bj - p2npLOmCML+dD/iTZhaX3+UvbRB1PpzeygFnSUUvatecRUMzisoOc+x0LZ3FixxYhQyK1cxyZhkTYhqY - RgnM6hmcwVl4ljDI0KS4AC+Kmyli8Jv2MF7GNwXY4QzOwgNv5mWTL7CLpVQmO1hKZbKDpVR/1P8OcvwB - lh7gOXXZq9sAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkNDMTJDMTRENEFDOTExRTRCRDk4ODBFRTFERTlG - MzY1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkNDMTJDMTRDNEFDOTExRTRCRDk4ODBFRTFERTlG - MzY1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjYwQjFGREZDNjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4rRYZ8AAACEElEQVRIS2MQltOlCP///x8vxqqJFIzNUGSMVRMpmCDApokU - TBBg04SEpwHxfwJ4GtQo7ACoABfODY3N+P/773+82C88GWRJBtQ4TIBmKAyziCsa/L98/c5/37Ck/3Wt - fVixT2ji//OXr/8XU9T/zy0kzQo1EhVgMRyEm0uqW//vP3Lqv5Cs9ml+CZVp/OLKs/nFleYgY0EZzQt7 - Dh7/n1/eCFLXBjUSFWAxXENZ1/r/g6evgK5P/l/d1IMXe4ck/L//+MV/RW2r/0IyWppQYxEAiwWT+qfN - /7/7wHGQq84BXT9FQEq9S1Bas0VQWqMVFWu2ANWc2LbnyP/eKfNA6qdDjUUANMN9Tex8/j999eG/LzDy - yuo7icIeQfH/n7x8/x+kV0hGOwBqNASgWbBt+frt/7cCXQRko2Cg9xfCXA5io8uv37bv//J124G+0NkF - NJYRYjoQACWR8f97T99gxSA5oHIpECZCHTvIbDCAGgy34MaDF1ixo08k3LWO3hEY8jC9IBporBDEdCAA - CqBYcPnOU4ow1AKQTyEA3YKz1x9RhKEWyEBMBwJ0C05cvocVl9R3o2BsakCYoAWHz9+mCBO0YP/pGzhx - flUHGGOTg2GCFuw+cY0iTNCCHceuUIQJWUBMBYMX80uo7gQai9MCkJAoENsDcQiZGKQXZAYEYLEAlM1B - CkCuIAeD9EKLCgYGAMLPWmGxemtkAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY2MzBBRkRDNEFDOTExRTQ5Q0JEQkU0NDNBNTYy - QTY5IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY2MzBBRkRCNEFDOTExRTQ5Q0JEQkU0NDNBNTYy - QTY5IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjgwQjFGREZDNjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz6+q/BOAAABR0lEQVRIS7WVTUvDQBCGe/PoQQQP4s2jv8E/4W/rXxEFQRAp - olCwfjRUJWK1ltJgNJh+6Toz7OCSzrIZFwce2LDzvs8hkDSMMf/K7wFmbWunCRgFTQp6RhKY+ZephSvh - Du7hoWf3AgPT+XcteLcqcUcUlNMFYYNLuPeVXZK4IwqKckZMZgsveO/u8jNKqMiOKHgrJrWQdqsSUTDO - Pwm7LBK6pzIYUTDMPoi8KGvB+4wVrGCfKHge5VFYwTr2iYLHQUbgWYObg6pN7BMFd/0RMczeVXAuKOim - r1EEBVf3LwSeNbg5qPIL2skTkQ7GKjgXFJzfpFEEBa3LBwLPGtwcVPkFJ+0ekcAL08C5oOD4IokiKDg6 - uyXwrMHNQZVfcNi6Jjq9vgrOBQX7p50oQgLtT3+J1Y3tA6iSBXbwS7gL7P0RzNqvqWn8AE4SSnpUkJk6 - AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFGMTBBQzY2NEFDQTExRTRBQTYyQjA5QjRFNjBF - MzcyIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFGMTBBQzY1NEFDQTExRTRBQTYyQjA5QjRFNjBF - MzcyIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6M0EzRTc1RjdDOTRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - 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 - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjg2NjBEMzE2NEFGRTExRTQ4NTY1QzE4RjMzMkM0 - NEY4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjg2NjBEMzE1NEFGRTExRTQ4NTY1QzE4RjMzMkM0 - NEY4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTU5NUNEQTdGQTRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz5BZhOvAAAD9ElEQVRIS7WWe0xbZRiH95+T6DQxcc7NLfrHTBaR4NyFmDAy - ljFwwERGpmRxxmyY6QbqgogDhqluOpFLlm6AFslGRVlXKISVS7tByzgUOF1vtLUtLVBogQ4YsLoN9ec5 - 3+xXyIiJWdrkyfed9/u979PLSdsVz6wPfyQA/Cehf3DPQsiBECHkBVj4CyGBn00E9xb+DglU4L/35xIM - 7j78qCpAlVqAg6KNkOtqMTPnx9TcLOzjFty5u4CJWR9u++/AM+NBh7WRnM3/cX/JHCqY899fwu35u/BN - z2HM60NcURjB7hwmNX4/PjmNWzPzZL/v3FPIEK9DQskTNOudmML0rD8oiD0d9hAutxej4z6yZ3pZaA0D - ZO8c8dDM8d9egtSxGxetMTiri8Ih8XpS79cZ4fZOBgVu7y2YrINg9QOIPvU4QcPqyWp1DJM6vwbOUivW - QGSMgdi8E7mqSGQqIpAoXE3OmuRtuKHRwjU6HhQMe6dgG/LA4hhBVM5KJJatJmsPa8TNARup8xm+1tnd - R9bkc88hicsllnGrcC2p1Te1QKliYLQ6SZ4KhriLYe80oaa9Ghk/JEMkqYJS3Q0DF3a4J7D9s1V4s2QN - Nmc+hviTLyOvIgv55SeQe/4YUgu3QlRXjbbrN6A12TDoniSzqMDh9lEszjEoGQbF4u/wa+tlmOxu2Ecm - 0dglR86FjxEteBZx2Zsgab4KhaoH17lXJFO04nKLDCrus+L7A7OowOLyUsxODwy2EaTm78BrWU/io6KD - YE126KxDaFDKEZ4Rhg8E+1HbKAOjNZP6TYsL0mtNaFYrUCmrAGu2YWBwLCgw2Ecf4qeGakRmPo203D1Q - dPWjz8TdBGYX0guSIK5vgLyDQa/BDr3NTdAYrYg68iI2HliJiitV6DM6ggLWwt0p/8J9PeFMsRDnJSLE - H38DsXEJSEhKAaOzod88hMjXt+KTz/PQ2WtCLyfl8wE2RbyKkyWFqJLUQdqu4ASvPBBojE4KH9wVtxel - v5Tj5zopuU5MSQOjt6NG0swJtmHtCxtwrUePHsMDQaA3J/9rfJpTgDY1CwWjDwq6dHYK37BzdwJqZe3I - E3yP9ENHsG//u+TsvcNH8dXZMryVlo4ioYjmA73ZnCA7T4BO1gqV1hp8izr6f6fwDafOlKLgdAlidsXj - 29JKJHOCFrWOnAXga4F8gIjN21Df1k1nUYFSY6bwwUvSVjy/bgN2cILKmnokvf0O8r8pRvr7H5JMcwdL - zvkcn1/cvxgqaGVMFL6BX6Nj9+BLQREuXLyCvSkHEB65BcXll2ju8LETyPqikOaXgwqudhlCQkAQ8p/M - R2K5fxKLWbbp/7Dc0CBY8Q+pPmOq0VkzzQAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC - MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjIxNUQ2NkYyNEQyRDExRTQ5N0NDRjdBNTBDQjc0 - MUY3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjIxNUQ2NkYxNEQyRDExRTQ5N0NDRjdBNTBDQjc0 - MUY3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkU1NUY4OTYyQTRERTQxMUIzNkJE - NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC - NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4lOJsMAAADqUlEQVRIS6WTf0hVdxjGj2beulPvD52aU6Np6tKBhUWsYjIH - prDYSlZjNPsjlUnkMmSx6eJqS/u5zXGtoKKEMaEt2lpZ20RX01Bjad31A8UakdZ0SyrLJfHueU7H0zl6 - U8QXPvCe933e5/3e8z1XCY5+dVKIyJh4HZoI48bQE5kU44a3ISM45TxQCTxgQIM5a/M0m+eHN1OC4TfB - 96mZ78reg9+I50qn3HvwSIU5a+xBcwyka3ajY3DoySgwUJ44P02O/vSz4HlMfqitk7mLlnLRNs3SHAOD - QzoQOYF7de4Gud17V1DTuf/wP7nScUOFubF3559+4QxngUOzfhr9DwZV0AgHVZ99/oXcvf9IUNPZd6hG - 5qS8Ic7IOb2EOWtGDWdKtuzmkj300uwVpa9/gOZTae6qqBQ8myjb4RZbeEyjJcBROt0W6rLaw4unBYYU - 2mfMrmNvpJ4ewdFJe+Hnry7o7rvHBV+v/7hUkJtoab8qobOSZarlhfX2iLhjS5d/IBkrsvlLDmPJEvao - GTlXsKmMS9zqApjnZWatkeu3+uSvnn9NlO2skqCwl2tt4bH7N7l26nXmzqgkFxZVUWOcIfSiZ3BU0odc - 0Hay/px03Px7FOuKXBIUOms/zDwn6pr0OnOcsN0ZlVhEjXFmGHpCc0n9BenvZMulzlvyZ1ePiZLySsG7 - /hYn3VpYXKHXmdtnxLmx4CtqjDOEXunLs3F3sS7lwrWbCoT71hYUC3ITJxta1TsIDImOh+ZA2rL3hdjC - Yhr8pwdlsUfNyLkceEFThxt4TWnxXFf8rTab46WEmo8+KRc8m9jwaQXed2I1Trw4IDgqx2oPK8EFb4T+ - KHsj9fSA+Rkf3ynvYUGi0tjWybv2DXBGxjsiEo7kF5XJ7xc6BHWdzdv3yOzk1/lOu3BxN5izZtRwJr+o - VDX3s1jz4ZkCHErD+WsqiCn4xuPsEfHfvbUqV2rPtgnqOvWtV6Xm+G8qzI09ajmjmvtPy4PXQhBCT+XX - 5ss6CD/wIl5H9SspaVLhrhbUx4QaavG1/YLZVWABPTQvRTnV5DGhNZyBITPz8cqaU1KXSeHmXXLgyGn5 - seEPFeassYfDXLTawr7EzNsgmbOax9M4cfbiKBC+IBDEYjgXn9spfKrduIPHBHkPXke9JcBZCs1KkEqt - NsPZZ4H/gVcQPsAC+HMTwCKQAXhSwpw19qihljPm8GZuBDG8yAZCQYQGc9a8Gw+HN9OJMG54G5oIY4ei - /A9dc78cqtG90gAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl - LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi - Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv - cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE - RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 - cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv - bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw - ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w - TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 - RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC - MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N - OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD - QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ - eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL - ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH - s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW - uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx - xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd - iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ - qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW - GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE - NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n - KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw - qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI - HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq - wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q - 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 @@ -4803,6 +4005,804 @@ ++H/A/YDv9/V87iOlrYAAAAASUVORK5CYII= + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjYzQTM5NEY4Mjg0OUU0MTE5NDBEQTc4ODZEQzk5 + N0NGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJGRTU5OEQ1NDlEQjExRTRBRUVDOTkyMjQ5NzEw + REUwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJGRTU5OEQ0NDlEQjExRTRBRUVDOTkyMjQ5NzEw + REUwIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTY0MkI1RjlEQTQ5RTQxMUE0QzNB + MjdEOTJBQzc3QkMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjNBMzk0RjgyODQ5RTQxMTk0MERB + Nzg4NkRDOTk3Q0YiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6B5sF9AAACe0lEQVRIS7WVb2jMcRzHL7UHanF/Mts5prE/1li3kAfu5Ak7 + 5IHNobBkSC2UIuGJkrrSWRvTmHQWK8U1T8jqUtYwkZpaGjV/Js6to5YwfXze39+fu/v23f36hXe9us+f + 7/v9rd/dr3MQ0X/F4Zm3+K9QhWajNNlBFZqN0mQHS6lMdrCUyqSgimllUsy4XmOmp+QRDllQWbygjjq6 + uimZStOX8a+ixox3pXrM1JLCDAqYJmY7c669M0bff07mcLbtEl9QE8k6V6BH5ooXMsHZZX7ae+AY7W45 + SrPm19LbsSR9m/iRA2bYGefggVePzUgKBzeu9sQpmZ4QcG/WMtk7eLjv0WMz0kOz+TX6MUXvP6cFeNbD + bz6YvQFm2Bk9PPByZO6jksLB5KvRTzTyLikIrG2ktsvXzd4g2hGjYP1ms4eHvb850qkl65LCQW/ntVs0 + 9HpMcPx0K1X4V1Ff/3NzhnphbVDsjBk8Lm/VE44s0ZJ1KS4Ie8uXUvPBE7Tn0ElCzTMqrV5BO/cfEaDG + TD5X6PFFONLygsTF7jj1vxihyPkYNTS1iFrFxm37KHIhJmp43L7qZxzp0pJ1SeHhQGgLJQaH6fb9R1QX + 2EB3Ek9FryLe95j8K9eLT/TB0FZcskOP1iRdkIh23aR7Ay9pzaZddKY9Jup8nIpeoXXhZlHD655b85Bj + p2npLOmCML+dD/iTZhaX3+UvbRB1PpzeygFnSUUvatecRUMzisoOc+x0LZ3FixxYhQyK1cxyZhkTYhqY + RgnM6hmcwVl4ljDI0KS4AC+Kmyli8Jv2MF7GNwXY4QzOwgNv5mWTL7CLpVQmO1hKZbKDpVR/1P8OcvwB + lh7gOXXZq9sAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkNDMTJDMTRENEFDOTExRTRCRDk4ODBFRTFERTlG + MzY1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkNDMTJDMTRDNEFDOTExRTRCRDk4ODBFRTFERTlG + MzY1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjYwQjFGREZDNjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4rRYZ8AAACEElEQVRIS2MQltOlCP///x8vxqqJFIzNUGSMVRMpmCDApokU + TBBg04SEpwHxfwJ4GtQo7ACoABfODY3N+P/773+82C88GWRJBtQ4TIBmKAyziCsa/L98/c5/37Ck/3Wt + fVixT2ji//OXr/8XU9T/zy0kzQo1EhVgMRyEm0uqW//vP3Lqv5Cs9ml+CZVp/OLKs/nFleYgY0EZzQt7 + Dh7/n1/eCFLXBjUSFWAxXENZ1/r/g6evgK5P/l/d1IMXe4ck/L//+MV/RW2r/0IyWppQYxEAiwWT+qfN + /7/7wHGQq84BXT9FQEq9S1Bas0VQWqMVFWu2ANWc2LbnyP/eKfNA6qdDjUUANMN9Tex8/j999eG/LzDy + yuo7icIeQfH/n7x8/x+kV0hGOwBqNASgWbBt+frt/7cCXQRko2Cg9xfCXA5io8uv37bv//J124G+0NkF + NJYRYjoQACWR8f97T99gxSA5oHIpECZCHTvIbDCAGgy34MaDF1ixo08k3LWO3hEY8jC9IBporBDEdCAA + CqBYcPnOU4ow1AKQTyEA3YKz1x9RhKEWyEBMBwJ0C05cvocVl9R3o2BsakCYoAWHz9+mCBO0YP/pGzhx + flUHGGOTg2GCFuw+cY0iTNCCHceuUIQJWUBMBYMX80uo7gQai9MCkJAoENsDcQiZGKQXZAYEYLEAlM1B + CkCuIAeD9EKLCgYGAMLPWmGxemtkAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY2MzBBRkRDNEFDOTExRTQ5Q0JEQkU0NDNBNTYy + QTY5IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY2MzBBRkRCNEFDOTExRTQ5Q0JEQkU0NDNBNTYy + QTY5IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjgwQjFGREZDNjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6+q/BOAAABR0lEQVRIS7WVTUvDQBCGe/PoQQQP4s2jv8E/4W/rXxEFQRAp + olCwfjRUJWK1ltJgNJh+6Toz7OCSzrIZFwce2LDzvs8hkDSMMf/K7wFmbWunCRgFTQp6RhKY+ZephSvh + Du7hoWf3AgPT+XcteLcqcUcUlNMFYYNLuPeVXZK4IwqKckZMZgsveO/u8jNKqMiOKHgrJrWQdqsSUTDO + Pwm7LBK6pzIYUTDMPoi8KGvB+4wVrGCfKHge5VFYwTr2iYLHQUbgWYObg6pN7BMFd/0RMczeVXAuKOim + r1EEBVf3LwSeNbg5qPIL2skTkQ7GKjgXFJzfpFEEBa3LBwLPGtwcVPkFJ+0ekcAL08C5oOD4IokiKDg6 + uyXwrMHNQZVfcNi6Jjq9vgrOBQX7p50oQgLtT3+J1Y3tA6iSBXbwS7gL7P0RzNqvqWn8AE4SSnpUkJk6 + AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFGMTBBQzY2NEFDQTExRTRBQTYyQjA5QjRFNjBF + MzcyIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFGMTBBQzY1NEFDQTExRTRBQTYyQjA5QjRFNjBF + MzcyIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6M0EzRTc1RjdDOTRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + 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 + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjg2NjBEMzE2NEFGRTExRTQ4NTY1QzE4RjMzMkM0 + NEY4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjg2NjBEMzE1NEFGRTExRTQ4NTY1QzE4RjMzMkM0 + NEY4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTU5NUNEQTdGQTRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz5BZhOvAAAD9ElEQVRIS7WWe0xbZRiH95+T6DQxcc7NLfrHTBaR4NyFmDAy + ljFwwERGpmRxxmyY6QbqgogDhqluOpFLlm6AFslGRVlXKISVS7tByzgUOF1vtLUtLVBogQ4YsLoN9ec5 + 3+xXyIiJWdrkyfed9/u979PLSdsVz6wPfyQA/Cehf3DPQsiBECHkBVj4CyGBn00E9xb+DglU4L/35xIM + 7j78qCpAlVqAg6KNkOtqMTPnx9TcLOzjFty5u4CJWR9u++/AM+NBh7WRnM3/cX/JHCqY899fwu35u/BN + z2HM60NcURjB7hwmNX4/PjmNWzPzZL/v3FPIEK9DQskTNOudmML0rD8oiD0d9hAutxej4z6yZ3pZaA0D + ZO8c8dDM8d9egtSxGxetMTiri8Ih8XpS79cZ4fZOBgVu7y2YrINg9QOIPvU4QcPqyWp1DJM6vwbOUivW + QGSMgdi8E7mqSGQqIpAoXE3OmuRtuKHRwjU6HhQMe6dgG/LA4hhBVM5KJJatJmsPa8TNARup8xm+1tnd + R9bkc88hicsllnGrcC2p1Te1QKliYLQ6SZ4KhriLYe80oaa9Ghk/JEMkqYJS3Q0DF3a4J7D9s1V4s2QN + Nmc+hviTLyOvIgv55SeQe/4YUgu3QlRXjbbrN6A12TDoniSzqMDh9lEszjEoGQbF4u/wa+tlmOxu2Ecm + 0dglR86FjxEteBZx2Zsgab4KhaoH17lXJFO04nKLDCrus+L7A7OowOLyUsxODwy2EaTm78BrWU/io6KD + YE126KxDaFDKEZ4Rhg8E+1HbKAOjNZP6TYsL0mtNaFYrUCmrAGu2YWBwLCgw2Ecf4qeGakRmPo203D1Q + dPWjz8TdBGYX0guSIK5vgLyDQa/BDr3NTdAYrYg68iI2HliJiitV6DM6ggLWwt0p/8J9PeFMsRDnJSLE + H38DsXEJSEhKAaOzod88hMjXt+KTz/PQ2WtCLyfl8wE2RbyKkyWFqJLUQdqu4ASvPBBojE4KH9wVtxel + v5Tj5zopuU5MSQOjt6NG0swJtmHtCxtwrUePHsMDQaA3J/9rfJpTgDY1CwWjDwq6dHYK37BzdwJqZe3I + E3yP9ENHsG//u+TsvcNH8dXZMryVlo4ioYjmA73ZnCA7T4BO1gqV1hp8izr6f6fwDafOlKLgdAlidsXj + 29JKJHOCFrWOnAXga4F8gIjN21Df1k1nUYFSY6bwwUvSVjy/bgN2cILKmnokvf0O8r8pRvr7H5JMcwdL + zvkcn1/cvxgqaGVMFL6BX6Nj9+BLQREuXLyCvSkHEB65BcXll2ju8LETyPqikOaXgwqudhlCQkAQ8p/M + R2K5fxKLWbbp/7Dc0CBY8Q+pPmOq0VkzzQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjIxNUQ2NkYyNEQyRDExRTQ5N0NDRjdBNTBDQjc0 + MUY3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjIxNUQ2NkYxNEQyRDExRTQ5N0NDRjdBNTBDQjc0 + MUY3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkU1NUY4OTYyQTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4lOJsMAAADqUlEQVRIS6WTf0hVdxjGj2beulPvD52aU6Np6tKBhUWsYjIH + prDYSlZjNPsjlUnkMmSx6eJqS/u5zXGtoKKEMaEt2lpZ20RX01Bjad31A8UakdZ0SyrLJfHueU7H0zl6 + U8QXPvCe933e5/3e8z1XCY5+dVKIyJh4HZoI48bQE5kU44a3ISM45TxQCTxgQIM5a/M0m+eHN1OC4TfB + 96mZ78reg9+I50qn3HvwSIU5a+xBcwyka3ajY3DoySgwUJ44P02O/vSz4HlMfqitk7mLlnLRNs3SHAOD + QzoQOYF7de4Gud17V1DTuf/wP7nScUOFubF3559+4QxngUOzfhr9DwZV0AgHVZ99/oXcvf9IUNPZd6hG + 5qS8Ic7IOb2EOWtGDWdKtuzmkj300uwVpa9/gOZTae6qqBQ8myjb4RZbeEyjJcBROt0W6rLaw4unBYYU + 2mfMrmNvpJ4ewdFJe+Hnry7o7rvHBV+v/7hUkJtoab8qobOSZarlhfX2iLhjS5d/IBkrsvlLDmPJEvao + GTlXsKmMS9zqApjnZWatkeu3+uSvnn9NlO2skqCwl2tt4bH7N7l26nXmzqgkFxZVUWOcIfSiZ3BU0odc + 0Hay/px03Px7FOuKXBIUOms/zDwn6pr0OnOcsN0ZlVhEjXFmGHpCc0n9BenvZMulzlvyZ1ePiZLySsG7 + /hYn3VpYXKHXmdtnxLmx4CtqjDOEXunLs3F3sS7lwrWbCoT71hYUC3ITJxta1TsIDImOh+ZA2rL3hdjC + Yhr8pwdlsUfNyLkceEFThxt4TWnxXFf8rTab46WEmo8+KRc8m9jwaQXed2I1Trw4IDgqx2oPK8EFb4T+ + KHsj9fSA+Rkf3ynvYUGi0tjWybv2DXBGxjsiEo7kF5XJ7xc6BHWdzdv3yOzk1/lOu3BxN5izZtRwJr+o + VDX3s1jz4ZkCHErD+WsqiCn4xuPsEfHfvbUqV2rPtgnqOvWtV6Xm+G8qzI09ajmjmvtPy4PXQhBCT+XX + 5ss6CD/wIl5H9SspaVLhrhbUx4QaavG1/YLZVWABPTQvRTnV5DGhNZyBITPz8cqaU1KXSeHmXXLgyGn5 + seEPFeassYfDXLTawr7EzNsgmbOax9M4cfbiKBC+IBDEYjgXn9spfKrduIPHBHkPXke9JcBZCs1KkEqt + NsPZZ4H/gVcQPsAC+HMTwCKQAXhSwpw19qihljPm8GZuBDG8yAZCQYQGc9a8Gw+HN9OJMG54G5oIY4ei + /A9dc78cqtG90gAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 + RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL + ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH + s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW + uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx + xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd + iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ + qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW + GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE + NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n + KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw + qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI + HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq + wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q + 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlDMzFEOUI4NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 + NEI4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlDMzFEOUI3NEFBRjExRTQ4OTA5OUYwQ0QzM0Q2 + NEI4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDk5Mzk2NTZBRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz73sIMwAAADIElEQVRIS7WVa0iTYRTH56Uiysvm3TkvpLl5DRIvQYWVWl+6 + iNEVg0yhQqloQZHkLT+Y0YdAs75IpEUhzERZoZhsRpZlS7soblotsRwoxhqWeTrnYZtv+u7NsB74cZ5z + zv89/z17HzYRAPxXeIv/EpFXcOyi4BvKhfehv4FvKBfeh+ayqIUDlIgBgT8whpRYoT2fhgvNVJKBQT9s + hB8/QZDPpnEIjEhg0J5Pw4Vm0mwygG9T06BSqQQhTUhUMoRGpyxYT7OZwfhXC6jVakFIYzNYqN5uMGKa + BI1GIwhpghXJaJJi13d0dEB2bj74hsWzSDlXbzfQG02g0+kEIU2wIomdovzKdVifngnFFytBeb4cLN+n + WaSc6hfKKqB/eHTWoHfwExgMBkFII5MnQUD4WlAWloO26wVs35MDmifPmQFFyqlO/aKKqlmDp31DYDKZ + BCGNTJ4IPqHx8LJvACbNUw7p6e2HuJQMNIhhBuaHj3vBYrEI0tb1BoIiE9kJ9h7Oh7EJM+g/jEJuwVlY + s24ri5RTnfo5BedAIoueIYPumvomuHzjzm9cq2uCq7UNUH2rEarr7kNd0yP26Y+eKoSWtk4wfpmAg7kn + ITY5DUorq1g8cOQEqze3aplOEhRtJoMcL1mMTixV9IgD5a/tSBVDYql8AKOBQLEJtTP08gY/jjFiktKg + 5FIV21Ok3NazvmR2AvrFkCAJyGYk1comZAuHDM/AyLvHThfBveZ26NOPwI59eey7LsbhFCmnOvVJ5+Ef + rrYZLEU8EZ85+HLwW7ZCLMVTFWdkHoLut+/hgbYHaE9XN31XNsupTrWV3jKVs+uS3cyAD0cLe331jW3Q + qRt0CPUlQVHDKI+fN9iGo4W90uNnyuA2vvRtWTlQgxeg/dk7FimnOvU9/CNqUe47b7ANRwt7AfjpKvAK + Gt18Qur35ymhRfsKKLr5hN7EyzDq7humWrrcfSfKxbz/QlwcLDck1snZJdUzYHUDmk57+K1qdXJyzsL6 + RmQD9ZmObygXB8sVIRO6fXQB4hC6eRQppzr1XXmHclnAckFomLc1Um5dItEvhZ97MQXP9N0AAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhDMTdBQjRENEFBRTExRTQ4QjQyODY0MDNBNTJE + NzNCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhDMTdBQjRDNEFBRTExRTQ4QjQyODY0MDNBNTJE + NzNCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NUQyMjc4QTlBQjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4eHsDfAAAB00lEQVRIS7XVWytEURQH8HniTTNHLs0NCXNcXjTN5dH9g/gM + 3jx590QhFDJS0gyTGmpqaqJIMW4hzlAoOaWISS7LWifntI3ddnTGrl92e/57/We/DBsA/CvuYSHZSr0t + lvCGsriX/oI3lMW9lM/SwgF9SEHwizs08IX2vAyLZvZRgXJ+cQWv7yB0q96Ds86voT0vw6KZNJsK4Pnl + DWKxmBBlqhpDUN0UNp2n2VrB/WMOEomEEGX0ArN5o+BGfYB0Oi1EGa8cwpKw6bxRcH6lQiaTEaKMVw5q + rzCbNwr2z65BURQhynh8Qe0VZvNGwdZBFlRVFaKMxxfQXmE2rxc8rW3sQy6XE0puHoG7IaC9YnV9j5th + pbZPqOCDCrbH5uIwOD7/zWgkDkNTizAyuwQjkWWIxFNQWduqmVxI/MiPz6/A8HTUuDMTTYLkbrqhgt5S + T3PG4ZJ3HE7focElZx0u3yn+VQiG1ZLymmm7s74f88f42S6bl9zyJZ6d6Xckd+Mt5ieogH4xJORHHajt + SzvqZPSgECpHZSiA2DztuxBlad+NgnpBEbIjusiiYboKRF+kGFHegUR5ImkFv7G0eAPzWVq8gfksLd5/ + oULiHhYS97BwwPYJlSCUgVubViQAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJEMDQyOEZBNEFEMjExRTRBN0MxRDBCNzJGRUND + MDEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJEMDQyOEY5NEFEMjExRTRBN0MxRDBCNzJGRUND + MDEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkRDRkI1RDVEMTRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz59jfe3AAAEbUlEQVRIS8WTeUybZRzHF48/pnFOuQRajkFLgQFb5iRLNJr4 + l/EPgsniUI4xZDAY1zyxwApsMJyIME61rByl3DfoYGBrgbWUY06FcZSCha4rQ8jYxkqPr2/fvkv8o2Sg + S/wkT970eb6/T5/39z7Prv8dt/Oql4mR4HZJ3ccoXFxhVCzB9DT9JueJdSq6c1wzVZFupepVzxu34XVj + CaEDi1jX6hF8ZQoeokl4iBVwzV9YdU1XRlIl28eVo8phCdXwGltEeOUsro6psaHVwcSDh5volc4iOO8X + 7KuVwb1hEi7J8myq9PEQO//I85oafr0KtEpUpNSETm+AwWDAvfv3YTQaybnm/t/AyO6Ga+UonJOnIijF + 1hA9tWI2qle9RxcI+RIpmZpTIfBULhIyyqHVahHPKcN70TmYnFFCp9OhqXcc9KwW0DOHVl3YU1aUyjJu + F1SpfhO3EM6bMMsVt+D8Zhz2HIpC4oU6bG5uIu4cD3tfTwAjIBNypQYbGxsISquBU34PaDHiVEplGXee + SuIjVaBv3Lz7gJg8vHg4FlZvc+ATVoLipiHsD8qCXWAO7IPK8MG5FjLXKboOeoYADkldUkplGWb7vOb4 + 4BzxIXXQE/1m59WDXdgBvxPfwz6UC4eQUth/WIBDZ2qQXj+K7IYRImeE5s5fOFrcDPvPapcJzVNmmwVY + VxWG9U09uau1tTVymPpc0iYFLew7OEUJ4BwtALfvJpl5xMrKCu6s3cUrn5YbCM1us80CrJZZVWjXr7j3 + 4CE0y8v4IrcaH+cK4Bv+DRyPl8ApphYuia3wZ3eCUzOA1PIfcVuzjHnlIgK/vgy7mHzTG+w12yzA5E53 + edYPo1c2i/X1dQTEfwvbwDQ4hhXg8OcN4P48Df+UTrgkNIAeW4Hg3Hbo9Xq0iGSgs4ls5CUhoXnObLOA + S8pkhG/bdZzgDZJnffT3GXieLAA9XgB2/RjZjuQqMWhxfBw824H55XWyhcfy+HDNqoB1SH4Codn6G7iw + p3d78EaVPlXX0CaZgkqlgly1gpCiK0htHCH/IL6oFcEF3ZjT3CUvXqv0DzDSS0FPq1a/8EbYS5Rqa+if + SAJ8KoeNR7gitEsnoVQqSbGOkJmYX1ggxaY70SabwIGMUrjn8I3WIXnBRPnWu/8nDnE9Sd7cAaP/ZSES + 6/rRKJRArpiHXC7HzekZNIukiCyrhW9mGZgXa4w2kUVnibJnzdXbxP5URzyDO4QjxGl5i9uNpMZeKP5U + IrywAq9yCnGAOGGMonbYxpVnEPGdyR9BO/MTj8kfgXeNFPt5IngVtoF1kQ9WcTs8qgfgmNreQMS21xZL + 0E6Ln6ef75tg8sfgXT8O77oReAkkYNXJ4PRV/4ztyfo9VPTf4xjdf9CpQKzdxxuGe6UMbhXEmc8V6mze + r3qNivx3HGN7UmglQ6CVDMIxXwybo5UcaunJQD8te9rhyx4JrWwItlGNUut3y5+hlp4cDhFCpl14k9jq + nR+Y1NTjIe7NlmMnWKoHsOtvjWYcKpheqFQAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERTg4QTFENEQyMjExRTRBODEyODk0M0RBMTc5 + Qjg3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERTg4QTFDNEQyMjExRTRBODEyODk0M0RBMTc5 + Qjg3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjJGOUEyRDEyMTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6wJF34AAACl0lEQVRIS62Vy08TURSH73/QhQtXVnBhxEcMiUkhbEg0hB1R + Q1i68C8wIW5cEqMLN7ho2Ji4YiEhWq0prYUhfULbadN3obTaChobtZEUsFY9nnPS6WM6HYowyZf87j33 + nG/amaai9geOBYA+4pTxihmBE8DcTQB4J8em/9IwSQyagmrtL+z9rMFmvnhkKvtV7tcVHPz6DVsftulA + AckdhUg8zf19eoLKAd597iMLMItewfOxUDTN/bqCH3tVSG8VWIBZ9AoJApEk9+sKvu/uQ2IjzwJkGtH8 + OrTwy3Hu77vIAnV9mgWlcgWiqRwLjAMmkOMbPbNTKnN/JJntqJGEBZ++7oKcyLLgLN4JrU8Cms2C4pcy + BKKZumCI18temQ/8DzSLZlBmQX7nG/jCKdpgAa0driCtY5iFHuqHSjNoFtaags1iCdzBBG+QgNY2aZ0F + mIUe6osENAtrTUEq/7kDq9PHAszU5yYoq9f1i9cUSCD5ozxDEeTsrhAoONwyxLLb8MrhYQFmZYCHsnpd + v3hNgQROb5hnKIK29944MAThTBEWbS4WYBZ6qC/sKSy5ZJ6BGUQg8b4Bbhjod4AZXlhXWdBa10LrIVul + AM9ggS+aa6AIMMO8ZYUO0KeyIOMtZyaQpXpNi4LFucYzMINwhbMNcMNw5oIJMMNKIA0LNg88mZuH/ssj + dPgBMnN+cBRmny1wrRtSMMMzWCCFMg0UAeY2Fh0+GL5xG8Zu3oHXUrCj3g0WONdTbeBm21/o1N17gPtg + 98Xh3VoS3qzKMDI22agfglnY/Uld8NDc/ZlZwAwvl4Ngun6LGh8rdfVDViNs3rguOOzq6XOD8PDpc7g2 + OkHDH7XWtYa2It66Y4eCQ8cRfpvUNa2hTUD8A6JMaBvCyTdJAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERjY3MEZENEQyMzExRTRCNDlGQUMwMzk0OTAw + Qzc4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERjY3MEZDNEQyMzExRTRCNDlGQUMwMzk0OTAw + Qzc4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjhGOUEyRDEyMTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6GKmpFAAAC+UlEQVRIS63T20vTYRzH8Yforj/Ei24UiSgKIygKi8oyxZQo + cvNYeXaesmzqPGu2POd0ulSsnIdaurTSTJ3O6UxTPGya5vCQx5AuPn39RbHop7nZxQt+z3ie93e/Z4w1 + p7nsCoBt8R6yBF/UHPv+Wb0rfFFzm99CRIwEW1gnqXzxTXxRc0ydctm4OlID2sxrw6iCtiwItC+A2P/D + frLnjwGNSZdMq6N1WOvLwFpP4l/WdRlY6Jaio9Ab7QXba8sVoDHZGdT8PYS9THDqMGnLsKpNw0qXGCua + BO55VZdNQ6U/DRRibVCGb+N1pH5bukoRqHmDHOIG1N8/X2F4I8WyNhtf2+9hqSsZxqZ4upbb6HsSZLHO + Im90ym6hNVcIaktYTexZyUelGEvaHMy/jcFiZxo0xX5Y7ivGcn8JkVmA9uvlWBmqwpJeAWovs+poR99O + eRgWtQWYVUdgrj0FH+i+F3XF3NoappZYGJrEoLaOVYpOOTY/FGJB+xjTqnDMtMTTAC/Ma/Ix/TLUKl9e + x0JfFQpql7PykBP7lWIXzPeUYLIhHCPKCLr/AMy2ZsKoDLTKdNNdvM8TgNpRTBZwfJ885CTmaIChPhwa + mS+GnkdhqjEWY9X+VplqvIMXEhdQ24mZeuSs0N/BNNWWj4k6EdSZHhhXxWH0aSCGFd4c4Tk7zk7XBlUM + FKLToK4Nm+0qYnneRzqGGiSYaIiiyZdhVCdgqFSIwRJPjucZW85O1pvnRmvDkO9zFNTdy2Y6HjGp4HCF + 5kk4xhoiURd/EROv4tBfeM0qAyUC9Mp9QM0+7o829T6LZV0/mNycS6+nFKFWfAGj9ZHozfGwil7miZYH + 7qCmghsw+S6VpV894KuUuKFbfhNNqa749CwY3dm0toK+VABl3HlQM5obYHybwFLc7W1y/Y5BlX6FfgNn + DNcEY0DhZZX+MiGKbh0DNR24AYYWMSfJzc6GZBApwS5skIzNODcg0dV2V36FtsJ7yBJ8UXO8hyzBFzXH + ++H/A/YDv9/V87iOlrYAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkVGN0NDMDNDRTA0QUU0MTE5NzRBQ0FBRUI0QjM1 + RDZFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFRUUzNDdFNEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFRUUzNDdENEFGMTExRTQ5M0I5QzUwRjVCODdC + MERFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI0NEVFQkRFRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUY3Q0MwM0NFMDRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4Ym8PVAAAC+UlEQVRIS6WVbUhTYRTHr5tuc073YoSmmyuwNPWLKdaHEgpL + ISg/VB8Ugj5oRi9C9iEDe8UKMzDKKRVIRfRCaR8Ko8xEK6PMbDInmqlroKit+YYiejrnaa47dreye+DH + s+f8z/M/57lw77jPV3Wi8BcAwHFtFdqlgqe4IERCe3/BGrwv1y4VIPC8CpEwJx/BGrRc1PwrAYjsTZkW + uh6vBPz91yaswatzal8oXp5R72k4q65FBnEPjaUasNTFgfNrGpjvxQDl0MdnE9ag/mSYF89KwnbiOvCx + xgj9zSkwZk2HKXsWTH7PhElbBoyZY+GHJQU+3dID1vm/yZPiUA/qjocewHWhr2kdTroZbO9SoeNBLDRd + iYCnpzTQdjsGRtqTofVmNGAdaFesAV30WgjXJ0K4IanSZfsnHhap3Nw/qsrFdWEQTTtr46G+dBncLVRZ + qvJDTBuSjdDd1QG1xWpoMUUB1oG1uwcGbHZwOCdgdm6eGtBtPOPO4ZBFopDxL48SANf5qjxl3aEseTaW + GDSRq2t00fFsUtQYGpxcGxUHOn0CM3ajT6z+7eyKG/uVjOv5StPrKiNU5ym78zPkO1EyIMuRMB1e/+fE + NIxPzQDWQu+3AcbwqAMmpmdhambOjdctru0LJpTIeMXe4IYkgzQO05GIGpHjRCb+hNSMbuI1OR/+LS7n + KrhLOYrs8hxFe5JeasQUTR2CSEmjA2POaTcjjkkYGnWylZ/nQ2fIm8WF3XLu/C552ZGtsjTc0sdFiUiw + qNI90f9TyZ3OlnElO2QFaEpTk7mUclRgG3aIgjy4E9tlXFGmLBWNFUgg7QkS++yjomANjm0L4vI2BWrI + HJHQniDR2j8kCtagcEsgt36VhF7zAIL2BInmXrsoWIOD6VJBSGzrGhQFa1CwUSoIia3mPg8o5w+henwq + wkFic3uPB0K5RXzVu+y8g8TGD1YPKOcPoXqXnXeQ+KLV4gHfTAihepedd5BY/7ZTFKwB/a3xWQwURX8q + 1BGxz38BvCwLsyQ3iHgAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA3MTZBNTkzNEEwMjExRTRBQjdERDhBQkEzMDEx + MzZEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA3MTZBNTkyNEEwMjExRTRBQjdERDhBQkEzMDEx + MzZEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTgxNjM4Q0YwMTRBRTQxMTk2M0JC + NEQ0MzNCOUIxQzgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + 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 + 0HWhD93n++Dbua+fK9NvoTM5+Udx5mye9NjgCZNf0HEnpN5U5RbPa9+0bdfQ+0eOPzp5ppvG96JfjFkM + nXR/vOP0ePOu/deyCuf8JVSorJny7HQdvR9MTCUm+fUYgyehazLBVCCd8ttpJbQANtO3cDjWbO9werzd + ruK5F9Ld3p7YBEdHCE/WMi0s0jf5mefm0e+ZCsXEf85i/98XsP4NaTpxka74X+IAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJBREU3RDk2NEFCMDExRTQ4OUM5QjZFOENGQzJF + MDk1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJBREU3RDk1NEFCMDExRTQ4OUM5QjZFOENGQzJF + MDk1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MEM5Mzk2NTZBRjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz52g1XsAAADeUlEQVRIS62Va0hTYRiAXzVNoQs6oUCttJu3aqatrLxr2k0n + W6bLLlLSxTKCKLoQQUg3IbLMflSgBRGRP7JSSzGnWalYdpnV1MQu1tBWWklqvr3fp2dsOytSfOFh3/l2 + eJ7tnDMGkkmzGCqigsARhPlUQqCi8nEd9v7GEYP5mFcI4K/e/hGHeQ2B7p4+1HV8Nf6Kw4a5GGxtCHzv + 7sU2nR4lbr4/AUBFKIeD4GKYBL79+IX6rm622U8nSgnX4SC4GCaBL50/OXwTwIUY1ohcQkCn/84ZDLBP + I5p16TBl7XYIoaXVwI54RC4h8LG9k/OvQPIOmEZUJW2F+XRoPbBrOiKXEGj9rOdYCqi2gxXhnLQNIo6f + n9tEa7ViI79PoojIJQSaP3RwjAOJaSAjjhL3N+9zrD+W499UVJnSeeVmWDvtlcWlgCedZnK5RC4h8KZV + x2FryQSYmrAVjh/MnP46/57yS7VmZ9+zxr1Yr92NtQ1pWFmfiBevL9QpUqE0JhHcyWuImLsMAU1zG4et + V6yHC1l5oe+evNmD1ZoteL9OgaW1K7GkRoF3H8ZigTocb5bFY8bZWbpoFVwh7yiCR8xdhsAz7XuOh9QD + D2R6twyIEzG/JApz88N7z+T5d+VcDezKL43Ea4UxeCjTqyNUDpUBYeBFXjvjgOAyCdS9asXDJ3NQFj3u + 7eWCyG/FjxR45OyMr6s3S1qCYqE8RA654Uq4dOiUV/v+E9P0i1ZA9Zwg8COnA2HyDZiLYRw4dyAjC50n + z8awBBvNbbWyZ+8x10+By+GONARCbe1gDBPJloCvfKODluQ10mD+qDK5LWFyD6pfvOUYBzydXL0v2I+V + rI9Mhud5BQE9i+RQPt2P30BBYrM4HmYSNf5REGS0b5CzYdKq+iaOITA44wmPiLXwaFfGhDbZMkinYxNJ + 8CpwXxgHobQcPbhv8XegrtNyzAPsOtqHJUPeml1jm/1jYDkdM5G5hB3bDL6KhknLal9xzAN8gpMgVZHm + oKUAuwx29H420c9O/l9KHms4bC0KLFCAY6CSHr+VoHJy88lWbEjHoqoXWPzw5ZCxGKCxkslBLo22L1+6 + ahPeUj/FwgfPh8zpSzfQ0cWrwVKAjfXcWFjjPm9isWSSbx/7JEPF0cWzcYzE7dTfAmysfSLB2z0Awm1H + 8ycnjrD4N/kX4gEg8A9sAFSe4VuPvgAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkEzN0Y5NjgxNEE5MDExRTRBMzU1RUM1MkVEQTU3 + REQxIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkEzN0Y5NjgwNEE5MDExRTRBMzU1RUM1MkVEQTU3 + REQxIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MUU1QUVCQUI4RjRBRTQxMUI2QTlC + RjEwMkVGQzEyNEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz4Oz1B+AAABO0lEQVRIS7WUP0sDQRDFt0snIcEiklhGJLH3k6bNp0ifYCUo + KWwMIRCx0EYxEEL+IOPO4SxzczN7d7gGfuzd7Hszd9nHOQD4V9RiStRiStQi0b68GXkgwkjzcdQigU1O + 32CC+9IjUYsENvjY7EySDHhev5skGXA3X5r8aYA3lx0wET1otYgmNMcOku+jXtMg4QJFJMb1a7uPmjUd + rVzHDfDy9pmJaZViCe5rPq7hYpgvXjPw2hNtTqBOevk+F8L0YRGQQosyHxfSf0jUegPLZwkrNedYfi6o + 9Y2RWP6cACPHYnf4XauQablfHYAxo6jt9sfwRGWgVvrVASKmdd7g2OoN4P5pVYhqbgCPmnPuzHPtua1C + s9OHyeyxEFU+IJcCb2p4zj3dKjQvrsat3jD4CwNCIcEv14/fpAfcDwXsled4Tu6+AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlGMEQ1RDBCNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 + MzBCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlGMEQ1RDBBNEFENzExRTRBNTYzOUQ5RUQ0RTQ0 + MzBCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzFDMDRERTRENjRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6zemTaAAABh0lEQVRIS7WUvUoDQRSFEwiBKPEHsRAkb+ArWIsv4CNYCSKI + jRD8a1S0m9QhdTobG5uARZogBJSkiLASFJJChQiRcJ2z2bnMZtbxCnrhY3YO556z1aSI6F9JFP+SRBEs + FFaUhoSopAyQKGIBi58jEuErcQSAhY/hyP5DL8Y7mQMcAcD8Phh+u2Tzk9cRAMz914G4wOd1BABzt/cm + LvB5HQHA3On2xQU+ryMAmB8en8UFPq8jAJjvWk/iAp/XEQDM9WZHXODzOgKAudZoiwt8XkcAMN/U78Ml + CcY7mQMcAWhz+FRc3zZFREXypwKYEiG/e+ykc1WYVRrCGUk8nGUHsyic6nKeetUK4dTESjjLDjZUlqaV + hiS8lEsh0Z1LTFYs2FBazFFwcUzB+YE+T8bffD+i4LRIwSV0jdZaO5vhHXtRPmfFgg1n81mlIQnt/W1q + bKyH34dz2XKUz1mxYBaFU5zJUG1tlXDu5TMcjuEsO5hF4exOpZWGtnLpWDiGs+xgFv9gxlmU+gIVyyIX + YCSg/AAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6npMy1AAAGEUlEQVRIS7WVeVDUZRjHf7Ase8ECu+wl4LIXcqyyHC783AWW + 5QaRFTHkMi9SQvE+UhLzwk0BUcQSgQBBgcYDzStMSzOPcpqcmo5pmqk/+rOapqb+iG/PbzfFcSz/6pn5 + zPN739/7fp/nvZn/3TSLjj+XJy2/RaItPCT5vaBd8m1+q2Qku1lcrcvki+iXr7fFU6ZZeOx5KDU1b7jU + 1Z2bVPMPWNMbRXrXkWAc+ywVLbcS8fKwFjlu8VdpW0XzSc6f8PEIPzJ19dFnU3WEJdHL9P3X9O1nkdB8 + CQrX7i3mKn9zfqsUq29ZsPfjRBx5aMO2cTMy94gm7FuF7XyJTwDJTo5GVdHxNALVgsPd5Ceye+9g8b0f + UXbjB8RtH4Msd+MeXS7f6twjxbILZiy7pEHDtTBsvG7BqivTUXpsClLWCbtJNpDwBlGVH3ySIFV520eW + nedRcf0HVJGwbeRrOHs/h2n1CGRZDe7wND/W1hiI8sEYlJ4KRcVpJcrfVqByNBILhqLh3KeA+UXBOpL2 + jkRZduARPGXZ/vH4pnMou/gd7INfIPn4QyQc/RSOzk9hrBtEiKPerUn1Y5PXBaDojWlwdgUjr0+G/H4Z + cnpCUNJrQNZ+LeLrBD/LYnixFEDAKFz7vJQ0r49dO4zikS8x8/ADxLd9jIT2B5ix/z7SX78Pw+K3EJy2 + wq1M4rEz6sRwthgw82Ag2KNS2I5JPZ4rZx00ImGNHIZSfisFkDGhxbs5AkKLd/3kaLkDlgTjXrsNc/Md + mPfeQeyOD2HbcRu6yi4E2Wrd8ngeG71IBPtePWa4JUhsD0DykQAkHQqApUWCFLcGyZvDoZ/P/5oCTGXk + hU2MvGB7rbGmG47dd2Fa+x6iX/kAMa/eQvS2m4jaeAPspvcROb8TQexid3CcL2usFCJjnwE5nQYU9RhR + PGDC7D4TCrqMyDqkR9oePbRz/SZEKh8rI8vdyshyXhmzLD8DS/1VGOquwtgw7glkXH0Nhvp3kbL2GrSl + hyC11ril03xZfbkQKZuVsDeq4NihRtYuDbJ2auBoUsO2TQXrJiWMlWIExflWMiHOjRzfJy0bg776HCKX + vANd7WXol1/xeN3Si7A2XIXW1YbAxAq3UO0zPTSd1yG38bplLK//vxBrffKY4PQ1HH9aKk8jonQUUyvO + Qlt9HtqaCx4/tXIMyXWXMXXOAQTEv+D2zCvDhBBTCN1zCGOCZq3k+DXO1YcpRYOY4hpF2LzTCCs74/VE + 3IvnEVd1EhGFblBbWot6BKXWQZq64tlYa2+TuJwQM9KU5cRL35hyOxCe2w913hA0hcPQFI16KRzxEFtO + a1Q9htSVN5C+5S5x7x/uIm3DR7CvuomUReOImt1FU7nwEolHECImMGkJE5i46EJkejNM+X1QOPqhzBqC + KvskVDmnJuHKT/K4bgjKzBMItXcjJv84NOwWiKPndJK40TOCgPgaRmIur1dZ1yM6txvyWT0ITR+AImOQ + gg39N1ybDBJP60PorC5My3oTwQm18FdNryBxbq0EJL6AEUTYZBTkF0NGKyKdvZDb3qJOAxSIOqcP/jtp + JyC3D1BSvYgp6EN4aiNlP/cTEk4gFASPEUeXkWd8RaY5jcrEBkTn9UCT4Q3gzfBfRvJE9rrsfpicHSRe + NsFXmJeSXhTBXXY+jMjk8uArVkpExuKb6pkbYJ7L7Ria37xTUBeMeCkcncRTN0z/TyLKNYy4khNQJq2G + IMLBXdUWQkXwCYYR6md7IPP1k8WEC3UFDzSpG2BZeAZJtXQWFpyls3HOC50JzkdQnbFqDInLLiC2rBcq + 6xoSzzzP+NDVwDBaQkx4XzahNv8xZH48sVotCHeOUnnCWNJG18Q4UjddB7vlfbBbPwC7+YannLTyIrS5 + OyHU5v3hr07poL7JBHe4Jh8bzgQROY8h46IKCAVfbi73D3PcpfoJlX0VtEVN0JXsQlj2ZoRaaynj7N/8 + NfZLPLFmHrXnpiWSCCL8iMl32T/M6YGMq+R+covD7QADwfoIgqt4QVGtfvIZJ4lRv5CY4zypbjfjy+eE + M4l4gtuSwYSQ4DS4EZAew/wNiCYQJlvQU3cAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVGNUQ0RjNENEQyRDExRTRBQ0ZFOEVGNkU4Rjcw + RkEzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVGNUQ0RjNDNEQyRDExRTRBQ0ZFOEVGNkU4Rjcw + RkEzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QzUxNUY0MjEyRDRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz7jldwbAAAEyklEQVRIS6WWDUzUdRjHoeXWVktIc74MLREMUxBQV4RYkBmL + SBwSoZIFCgULlOJFDJDxqkiAqGgoiIQ6jaFLB1EqUaC8iMgdL8cJB3fHwR13HO8Hh3x7fn+pwN01nM/2 + 2X77Pb/n+33+v/3/95zBbGOVnZM58QHhRKwgnp9KPXuQ2CtJ6ScOjGo0fcMjI93llVX55us3rqbUc49P + zDLyw9auL4iw5l+IsMY//BRujcygdcg+ug83rpzCsVhf3C6+hHg/W+R++985BtU3pey1cCCpOYQhJzo9 + 8kPX1tZcDoS0Jp2jrCgWmakhOJMVA4GwBd1KNSQ9veiUdeNifjqyMsJxveD7f8+z2rPBlg0kNZ9gJjMj + L8RqQlSegIbLX6CuYAcOBm9FHe8B2rt70SZTgNfehTphJ+paCaEYjSIJkmP24PaPnrhfsBP8okCcCbZ8 + RFLmxIuc6PTICV5Dh4IxNqSEemAA6adzwBdJ8VeDEL/XNqGkmo/iKh4HW5fWNCL7QiEqq2sw3N+Dijwf + nPx6FUjKkpjLiU6P7MDVqL/gj8nJSY4bpbcQnZyK8EOJCI2Ox3dRcY+JjkNYTAIi4w4j7+JlKBQKjI+P + 42qqJ9J832AGawkjTnR6ZPm/iXvn9+ARiWsnJjCu1YLeGshJQCKVolMs5hBLJOiSydAjl0OpUmFweBhj + ZJAfuxVJ3ub6DTJ9LVCd40Pij6AZ01IRoWVGumE5dmZEM45RjRbnolwR72Wm3yDt85W4e2o3FVLnGg1G + xsYwSvDEdxB03gEa6vJwSopOhkZHkRPhgkPbTfUbpOwwR+XxXdT9OM79EQ/lgBLNkjpsz1iMP5t/oU7H + dIoz+oeGcTbUGVHblus3SPJYgfI0LxLSIPmaL4LyHOB5bClK6gswNDLKoUucoezvx+n9W3Dg49f0G8S5 + LUfZEU8MkpC8T43YQi8UVp3kutOFenAIvep+dClUkClVOPXNZoQ6L9NvEE3uN+PdMUBvRXevCgqVmjob + gGpgEH1PwPZYTq7soy9bDolcgRNfOWL/ZhP9BpEfLsVvMW70kQ1C2qMgEyVnUiUoQ2CuPZTUra7rYYi6 + ZDi+910EvbdEv0GYkwlKIj+BijrL+jUKbdJO1LZWwD19EUrrr0Cu6tMpzhCKJcj40gEB9ov1G4RsWoLi + UBe6V7r/n70RkPMOPDJMcLXqLPc0DF3ijBaRCOneG+H31kL9BkF2i3B9nzN1qoagQ4yDlzxQUE6/lHRd + XfLeGbA9cbccwk4JHggegi8UIc3LDj7rFug3CNiwENcCt6CH3ojm9g7qqoN79HZpF9rpjjumYGu2x3I8 + 4UNU85pwv0WAox5vY7f1/xj42SxAkf/7kCmUuNfUiho+FTa3gtfaRh22o6lNxMHWbI/lKut5uFVdh7sN + jTiybQN2rpmv18DQ1+rViUJfRwia+bjXLEB1YxNqyai+VUiditDY1sHB1myP5e408FFR34Cb5WVIdLXF + Zxbz2DywJYw51WkxZ9eqebxUFyvk7rDHD24bkOhig4RZEM/4yAZhm1Ziq6lRG2mxscmm2owwdF72suOn + ZkZCTzNjuJsaYdtT4vr63E4L4xcCSYv9IXiJU30i2BxlzmzkWRHsLp8GVsNqp2aygcHfZtZtYIryU78A + AAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkUzNzJDMjE3NEFENjExRTRCNjE0OEVEQzI4MEM0 + RTZDIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkUzNzJDMjE2NEFENjExRTRCNjE0OEVEQzI4MEM0 + RTZDIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI3NUQ0QkNENDRBRTQxMTk3NEFD + QUFFQjRCMzVENkUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6PyaLfAAADMElEQVRIS6VUXUiTYRT+vi3Tzd+ps23+3KRigtiPkolEQReG + UYTkhWatpWlWGkRdddfdSPImqUAJjSIT00oxLJIk0cR+tFSyzDJtgaMkDEPkdM7ZPvm2vS6jBx6es3Pe + 8zzvtm+TohLS/ov+AACStLgEQuJyLRJWYK1yzh/+FgCoQrpnfM4fOGBhcUlIMkEVkma4H4i1y2kFcMD8 + wqKQZILKZqTqmlTAWrfvMjhgbv63Dwm0hLWQohn1eNEbzrlfPiTQAtZCKjP1GXdAIC+r4XD+9CGBFrDm + RVJ1re6pZ0GyHHMvIawauYVNCFPfvvuQQAtYC6meKXU0amNsaGN/ZR60xIf9aIgN3cpGE9OzZCZ85nEm + pGiWlLABmuJCnUOXrNB7chdct4TUo32ANDbp4NuielDpqWfePdaPX6GrohSK4uLhlCEo96YlZLbOFHzH + oJXjMSBcGn4/zQGovEDqXXtzeTb+BTrKj0J3+Q54djYP7EZdTU2MPjFSK8eieQR9QtLg6GcOQPWgqKeQ + ZyOfoK30CDw+lg2Ot3Z4VLoNqo269mCNHIa2WjYn9A1PcAAqU6m9VV3TF9psOwwPS3JgZugCdNoyocwU + jU+RlImWBpezGz0vxzkA1YOiHvPFO7Ca1kGHLQtmXp2HdutmqN+/F6JiU+h3kOpyVeHJwBgHoLIpqajm + 189HoaG4CNqsGTA1UAWth9Lg6r490PygGyLjUikgzuWqQlffCAegelDdUwLqigqhpXgjTPYeh+bCFCg2 + RkEk3vxuVz/P0c43oLP3DQegLhspNalSFxiNcLswHT48LYNbBUlQk7ebzenmyhm08w1o7xmiAP6hRZiT + 70eYkzpctUuJWdHmwWs74+F1Uz7cyE+E4ohQB5mHm9a3GywpTXzektyKduIAIsKI3ISkL4rIdYle05C9 + VrZVBmvtl7eboUyv7V4jSQdwRn8FdI72iErtCUxnIuifkJ5hUqUOq9Jr7OeCNU6bTpNVqtMcDJSldOwn + KnOk+jypJ5QANRWc0cs5SEelXr54QidfwVYAMoiHq4W/gNM6OaNCJ+diaUIqN/43+Atwg27t+9ZXBUn6 + A2MdqQeVc5pWAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjUzQzNGNDI5NEQyQzExRTQ4QkE1QUNCMEVDRDZF + MDVEIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjUzQzNGNDI4NEQyQzExRTQ4QkE1QUNCMEVDRDZF + MDVEIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkI1NUY4OTYyQTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + NEQ0MzNCOUIxQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/ + eHBhY2tldCBlbmQ9InIiPz6IsaOmAAADF0lEQVQ4T62U/UuTURTH+0nICqRI1ERMMyNQe8N0ChqBwQhN + yvwhEgJjVCqJ/qCibZo6tzQ339h6Nre5prapUzc1XzItX1ilzuWMLLVAen+xf6DTuTxjdxsFVj58ebjc + c+7nnud7z3228DbpIaDFH/CfoqCn72DIDvNfPDM2KAqyr8PcJxqY+QBTb8kkjocXQTsKigGwfqYJHqIg + 1OxHGHvlWPx4hXB1YyA3g4CBhqst+piEnrDA3rA95vBAY1x8d7lq/DVZwm5PQZNvoKYdypSgHgbVEIh1 + cLOZzOCbSSsyRQRba6uWtcpVLbPcwlglInNUCJNWWKqABqMLCGvGlfpJELaQ/V1Vd1lujAhe0chtUrH5 + ZExnmJ85MdomEa+qZMbIEF2BHGunILSjdZwYgTt4gJqjjj0Rltml1Zq9AeL0Mn71Wn2mtDU80MIvsFTw + O+KPIoWC8BNYRIUaqrRQroJKjQOk9N+xLBF2pXJFKfnsDGYa8gS6xOO2whyMuoHaHpGzZ/pBM0IMrtXD + nT4HqNHXe0lYoogMFeQP4jbSDkCPTUyXmnNoPutSo+9WN5DEQDyeWCWnhqm4p7Oimt3b54rzmmKPVHKz + 0Xg0AU1pz87VJp+yXOfd9t3mBmLXsGrsJhSsDtF4iOWxKdpzyQNnuRW7vEUp13obFG05OVUBPtO5V1Sn + k5q4SX8ENfWA6C7xHsP981Bb2sf38ZKd4JhSuXUJHPHhg/WJnAeZFw0Xzt/w8erRtLmBnB/CSmaC599I + 2PYVRl+CXigu3R9SfCC0Pf1MZ1oqvqvjogX7gtRFJfb1n24g7GblfQcFP2fkBYm5anxqQcbLKgzyK/Df + WRTkV5+RMTg84ZrgAOHo4ZIDVNdJw67CpsVLZ5gifj97Typlq2ZFQXj8LKh5EHpnaIar8N+Al5l9Y9Vs + T7OiIAzjqaMsa6QJnBkeWvgOHdPkAuIV67PSeQpCYYZplsZ+KyyWLRyFF8D553EDbURY770J0rrYJbda + SYE4iWb9NcgpRKDrOMAWwYP6d5BTaC52zyaAWDlAm/DweL8AX9zXukfxHsIAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2Jl + LnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi + Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENv + cmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJE + RiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8 + cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNv + bS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlw + ZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1w + TU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJGQzkyMzc0Rjk0OUU0MTE5NjNCQjRENDMzQjlC + MUM4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVENUYwQThBNEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVENUYwQTg5NEQyOTExRTQ5QzUzQzdFMkFGQkQy + NTA1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1N + OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkRGNkEzOUYyOTRERTQxMUIzNkJE + NUVDQjU5MzE1NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkZDOTIzNzRGOTQ5RTQxMTk2M0JC + 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 diff --git a/TreeUtils.cs b/TreeUtils.cs new file mode 100644 index 0000000..571fa7c --- /dev/null +++ b/TreeUtils.cs @@ -0,0 +1,152 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using GeoScene.Data; +using GeoScene.Globe; + +namespace Cyberpipe +{ + public class TreeUtils + { + /// + /// 构造图层tree,最多解析三层,若地球存在,则只构造指定地球上图层已存在的树节点,若地球不存在,则构造全部 + /// + /// 所属地球 + /// 要加载的树 + /// 数据来源,实测数据/施工数据/规划数据/红线数据,为空则展示全部 + public static void InitLayerTree(GSOGlobeControl gsoGlobeControl, TreeView treeView, string viewDatasrc) + { +// treeView.Nodes.Clear(); + LayerConfig layerConfig = Utility.layerConfig;//layertree所在的配置文件 + List datasrcs = layerConfig.datasrcs; + foreach (DataSrc datasrc in datasrcs) + { + if (viewDatasrc != null && !viewDatasrc.Trim().Equals("") && !datasrc.label.Equals(viewDatasrc)) continue; + TreeNode rootNode = treeView.Nodes.Add(datasrc.label); + List layerTypes = datasrc.layertypes; + foreach (LayerType layerType in layerTypes) + { + TreeNode secNode = rootNode.Nodes.Add(layerType.label); + List layers = layerType.layers; + foreach (Layer layer in layers) + { + if (gsoGlobeControl == null) + { + TreeNode node = new TreeNode(); + node.Text = layer.label; + secNode.Nodes.Add(node); + + } + else + { + GSOLayer gsoLayer = gsoGlobeControl.Globe.Layers.GetLayerByCaption(layer.layer); + if (gsoLayer == null) continue;//将不存在的去除 + TreeNode node = new TreeNode(); + node.Tag = gsoLayer; + node.Text = layer.label; + node.Checked = gsoLayer.Visible; + if (gsoLayer.Visible) + { + secNode.Checked = true; + rootNode.Checked = true; + } + secNode.Nodes.Add(node); + } + + } + } + } + } + + + /// + /// TreeNode选中状态改变,对其子节点和父节点的选中状态做相应改变 + /// + /// + /// + public static void TreeNodeCheckedChange(GSOGlobeControl globeControl, TreeNode node) + { + if (node.Tag != null) + { + if (node.Tag is GSOLayer)//图层 + { + GSOLayer layer = node.Tag as GSOLayer; + layer.Visible = node.Checked; + globeControl.Globe.Refresh(); + } + else if (node.Tag is GSOTerrain)//地形 + { + GSOTerrain feat = node.Tag as GSOTerrain; + feat.Visible = node.Checked; + globeControl.Globe.Refresh(); + }else if (node.Tag is GSOFeature)//特征点 + { + GSOFeature feature = node.Tag as GSOFeature; + feature.Visible = node.Checked; + globeControl.Globe.Refresh(); + } + } + + CheckParentNode(node); + if (node.Nodes.Count > 0) + CheckChildrenNode(globeControl, node, node.Checked); + } + /// + /// 树形结构中,根据parentNode的选中状态,更改其子节点的选中状态 + /// + /// + /// + /// + public static void CheckChildrenNode(GSOGlobeControl globeControl, TreeNode parentNode, bool isChecked) + { + foreach (TreeNode childNode in parentNode.Nodes) + { + childNode.Checked = isChecked; + if (childNode.Tag is GSOLayer) + { + GSOLayer layer = childNode.Tag as GSOLayer; + layer.Visible = isChecked; + globeControl.Globe.Refresh(); + } + else if (childNode.Tag is GSOTerrain) + { + GSOTerrain feat = childNode.Tag as GSOTerrain; + feat.Visible = isChecked; + globeControl.Globe.Refresh(); + } + else if (childNode.Tag is GSOFeature) + { + GSOFeature feature = childNode.Tag as GSOFeature; + feature.Visible = childNode.Checked; + globeControl.Globe.Refresh(); + } + if (childNode.Nodes.Count > 0) + CheckChildrenNode(globeControl, childNode, isChecked); + } + } + + /// + /// 子节点则父节点:一选则选,全不选才不选 + /// 改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改 + /// + /// 要检查的节点,更改其父节点状态 + public static void CheckParentNode(TreeNode curNode) + { + + if (curNode.Parent == null) return; + bool bChecked = false; + foreach (TreeNode node in curNode.Parent.Nodes) + { + if (!node.Checked) continue; + bChecked = true; + break; + } + curNode.Parent.Checked = bChecked; + CheckParentNode(curNode.Parent); + + } + + } +} diff --git a/Utility.cs b/Utility.cs index 68c90d1..f7aa6b7 100644 --- a/Utility.cs +++ b/Utility.cs @@ -228,30 +228,30 @@ LayerLabel_LayerIDs = new Hashtable(); if (File.Exists(filename)) { - XmlTextReader XmlReader = new XmlTextReader(filename); + XmlTextReader xmlReader = new XmlTextReader(filename); try { - while (XmlReader.Read()) + while (xmlReader.Read()) { - if (XmlReader.Name == "database") + if (xmlReader.Name == "database") { - dbdatabase = XmlReader.ReadElementString(); + dbdatabase = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "dbpassword") + else if (xmlReader.Name == "dbpassword") { - DBPassword = XmlReader.ReadElementString(); + DBPassword = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "user") + else if (xmlReader.Name == "user") { - userID = XmlReader.ReadElementString(); + userID = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "locaserverip") + else if (xmlReader.Name == "locaserverip") { - serverip = XmlReader.ReadElementString(); + serverip = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "locaserverport") + else if (xmlReader.Name == "locaserverport") { - serverport = Convert.ToInt32(XmlReader.ReadElementString()); + serverport = Convert.ToInt32(xmlReader.ReadElementString()); } //else if (XmlReader.Name == "localicenseserverip") //{ @@ -261,102 +261,51 @@ //{ // Utility.localicenseserverport = Convert.ToInt32(XmlReader.ReadElementString()); //} - else if (XmlReader.Name == "dbbackuppath") + else if (xmlReader.Name == "dbbackuppath") { - DBBackUp = XmlReader.ReadElementString(); + DBBackUp = xmlReader.ReadElementString(); } -// else if (XmlReader.Name == "layerchild") -// { -// var layername = XmlReader["layer"].Trim(); -// var label = XmlReader["label"].Trim(); -// var type = XmlReader["type"].Trim(); -// -// LayerChild child = new LayerChild(); -// child.attriLabel = label; -// child.attriLayer =layername; -// child.attriType = type; -// LayerChilds.Add(child); -// LayerLabels.Add(label); -// LayerNames.Add(layername); -// -// dictionaryNetLayerNameAndCaption.Add(layername, label); -// -// if (layername.EndsWith("管线")) -// { -// LayerNamesList.Add(layername.Substring(0, layername.Length - 2)); -// } -// if (!type.Equals("db")) -// { -// if (XmlReader["isRoad"] != null) -// { -// roadLayerName = label; -// } -// }else if (XmlReader["isPipeLine"] != null) -// { -// m_PipelineLayerNames.Add(label); -// } -// else if (XmlReader["isWorkWell"] != null) -// { -// workwellLayerNames.Add(label); -// } -// else if (XmlReader["isValve"] != null) -// { -// valueLayerNames.Add(label); -// } -// else if (XmlReader["isAccess"] != null) -// { -// instrumenLayerNames.Add(label); -// } -// else if (XmlReader["isCharacter"] != null) -// { -// pipefittingLayerNames.Add(label); -// } -// else if (XmlReader["isSgData"] != null) -// { -// sgPipeLayersNames.Add(label); -// } -// } - else if (XmlReader.Name == "Terrain") + else if (xmlReader.Name == "Terrain") { - TerrainsName.Add(XmlReader.ReadElementString()); + TerrainsName.Add(xmlReader.ReadElementString()); } - else if (XmlReader.Name == "dbserver") + else if (xmlReader.Name == "dbserver") { - DBServer = XmlReader.ReadElementString(); + DBServer = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "rooturl") + else if (xmlReader.Name == "rooturl") { - PicRootURL = XmlReader.ReadElementString(); + PicRootURL = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "defaultimgurl") + else if (xmlReader.Name == "defaultimgurl") { - PicDefaultURL = XmlReader.ReadElementString(); + PicDefaultURL = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "queryfield") + else if (xmlReader.Name == "queryfield") { - Query_Fields.Add(XmlReader["label"], XmlReader.ReadElementString()); + Query_Fields.Add(xmlReader["label"], xmlReader.ReadElementString()); } - else if (XmlReader.Name == "location") + else if (xmlReader.Name == "location") { - Query_Roads.Add(XmlReader["label"], XmlReader.ReadElementString()); + Query_Roads.Add(xmlReader["label"], xmlReader.ReadElementString()); } - else if (XmlReader.Name == "pipelineCode") + else if (xmlReader.Name == "pipelineCode") { - Pipe_Code.Add(XmlReader["label"], XmlReader.ReadElementString()); + Pipe_Code.Add(xmlReader["label"], xmlReader.ReadElementString()); } - else if (XmlReader.Name == "projectStr") + else if (xmlReader.Name == "projectStr") { - projectStr = XmlReader.ReadElementString(); + projectStr = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "backupserverurl") + else if (xmlReader.Name == "backupserverurl") { - backupurl = XmlReader.ReadElementString(); + backupurl = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "backuppath") + else if (xmlReader.Name == "backuppath") { - backuppath = XmlReader.ReadElementString(); + backuppath = xmlReader.ReadElementString(); } //else if (XmlReader.Name == "uploadpath") //{ @@ -366,41 +315,41 @@ //{ // Utility.udserviceurl = XmlReader.ReadElementString(); //} - else if (XmlReader.Name == "pipelinetype") + else if (xmlReader.Name == "pipelinetype") { - pipelinetype = XmlReader.ReadElementString(); + pipelinetype = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "shdbip") + else if (xmlReader.Name == "shdbip") { - sgdbip = XmlReader.ReadElementString(); + sgdbip = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "shdbname") + else if (xmlReader.Name == "shdbname") { - sgdbname = XmlReader.ReadElementString(); + sgdbname = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "shdbuser") + else if (xmlReader.Name == "shdbuser") { - sgdbuser = XmlReader.ReadElementString(); + sgdbuser = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "shdbpwd") + else if (xmlReader.Name == "shdbpwd") { - sgdbpwd = XmlReader.ReadElementString(); + sgdbpwd = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "ghdbip") + else if (xmlReader.Name == "ghdbip") { - ghdbip = XmlReader.ReadElementString(); + ghdbip = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "ghdbname") + else if (xmlReader.Name == "ghdbname") { - ghdbname = XmlReader.ReadElementString(); + ghdbname = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "ghdbuser") + else if (xmlReader.Name == "ghdbuser") { - ghdbuser = XmlReader.ReadElementString(); + ghdbuser = xmlReader.ReadElementString(); } - else if (XmlReader.Name == "ghdbpwd") + else if (xmlReader.Name == "ghdbpwd") { - ghdbpwd = XmlReader.ReadElementString(); + ghdbpwd = xmlReader.ReadElementString(); } } } @@ -410,7 +359,7 @@ } finally { - XmlReader.Close(); + xmlReader.Close(); } } else @@ -458,11 +407,12 @@ { sgPipeLayersNames.Add(layer.label); } -// else if (layer.flag.Equals("")) + //配置文件中不存在workwell和valve的,不起作用 +// else if (layer.flag.Equals("workwell")) // { // workwellLayerNames.Add(layer.label); // } -// else if (layer.flag.Equals("")) +// else if (layer.flag.Equals("valve")) // { // valueLayerNames.Add(layer.label); // } diff --git a/bin/x86/Debug/Config.xml b/bin/x86/Debug/Config.xml index 508515a..b7dafa9 100644 --- a/bin/x86/Debug/Config.xml +++ b/bin/x86/Debug/Config.xml @@ -2,10 +2,10 @@ LocaSpace三维地下管线信息系统 release - SZHTDB2 + szhtdb2 192.168.0.203 release - 192.168.0.203 + 127.0.0.1 1500 http://192.168.0.203/images/ http://192.168.0.203/images/default.jpg @@ -25,165 +25,6 @@ http://127.0.0.1/Cyberpipe.msi http://127.0.0.1/Config.xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 编号,管线编码,管径_毫米,材质,埋设方式,起始地面高程,起始埋深,终止地面高程,终止埋深,建设年代,使用年限,权属单位,设计单位,设计负责人,施工单位,施工负责人,监理单位,监理负责人,业务负责人,备注 编号,管线编码,管径_毫米,材质,埋设方式,起始地面高程,起始埋深,终止地面高程,终止埋深,建设年代,使用年限,权属单位,设计单位,设计负责人,施工单位,施工负责人,监理单位,监理负责人,业务负责人,备注 diff --git a/bin/x86/Debug/Cyberpipe.exe b/bin/x86/Debug/Cyberpipe.exe new file mode 100644 index 0000000..d81e34f --- /dev/null +++ b/bin/x86/Debug/Cyberpipe.exe Binary files differ diff --git a/bin/x86/Debug/Cyberpipe.pdb b/bin/x86/Debug/Cyberpipe.pdb new file mode 100644 index 0000000..1e4e6f8 --- /dev/null +++ b/bin/x86/Debug/Cyberpipe.pdb Binary files differ diff --git a/bin/x86/Debug/databaseConfig.xml b/bin/x86/Debug/databaseConfig.xml index 8d4d3bd..256cb30 100644 --- a/bin/x86/Debug/databaseConfig.xml +++ b/bin/x86/Debug/databaseConfig.xml @@ -7,10 +7,10 @@ release - 192.168.0.203 - scott - szsgdb2 - szsgdb2 + 127.0.0.1 + SZSG + scott + SZSG 127.0.0.1