using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Controls; using ESRI.ArcGIS.Display; using KGIS.Framework.AE.ExtensionMethod; using KGIS.Framework.Commands; using KGIS.Framework.Maps; using KGIS.Framework.Platform; using KGIS.Framework.Utils; using KGIS.Framework.Utils.Helper; using Kingo.Framework.LayerStyleConvert; using Kingo.Framework.LayerStyleConvert.Common; using Kingo.Framework.LayerStyleConvert.XSDClass; using Kingo.PluginServiceInterface; using System; using System.Collections.Generic; using System.IO; using UIShell.OSGi; namespace Kingo.Plugin.MapView.Commands { /// /// 保存工程-功能点 /// public class CmdSaveProject : BaseMenuCommand { IHookHelper m_hookHelper = null; private IDataCatalogService _DataCatalog = null; public override void OnClick() { try { Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "SaveProject" }); } catch (Exception ex) { LogAPI.Debug("保存工程时发生异常,异常信息如下:" + ex.Message); } } private void GetLayersSymbol() { try { if (_DataCatalog == null) _DataCatalog = BundleRuntime.Instance.GetFirstOrDefaultService(); ProjectInfo projectInfo = MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo; if (projectInfo == null || _DataCatalog.CurrentLayers == null) return; //获取图层样式 LayerCfg layerInfo = _DataCatalog.CurrentLayers as LayerCfg; List list = layerInfo.GetAllItem(); if (list != null && list.Count != 0) { foreach (var item in list) { ILayer layer = item.Data as ILayer; if (layer != null) { if (layer is IFeatureLayer) { if (layer.Name == "变更范围图斑") { } Renderer randerer = SymbolConvert.Instance().GetRenderer((layer as IGeoFeatureLayer).Renderer); LabelingInfo labelingInfo = null; LabelStyleConvert styleConvert = new LabelStyleConvert(); List labelInfo = styleConvert.EsriLabelToCustomLabels((layer as IGeoFeatureLayer).AnnotationProperties); if (labelInfo != null && labelInfo.Count > 0) labelingInfo = labelInfo[0]; if (labelingInfo != null) { //AdvancedDrawimgInfoManager ad = new AdvancedDrawimgInfoManager(); //string jsons = ad.GetRenderer(randerer, labelingInfo); //item.Symbol = jsons; AdvancedDrawingInfo adi = new AdvancedDrawingInfo(); adi.DrawingInfo.Renderer = randerer; adi.DrawingInfo.LabelingInfo = labelInfo; item.Symbol = adi.ToJson(); } } } } } } catch (Exception ex) { throw ex; } } private void SaveLayersToXML() { try { if (_DataCatalog == null) _DataCatalog = BundleRuntime.Instance.GetFirstOrDefaultService(); ProjectInfo projectInfo = MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo; if (projectInfo == null || _DataCatalog.CurrentLayers == null) return; //获取图层样式 LayerCfg layerInfo = _DataCatalog.CurrentLayers as LayerCfg; List list = layerInfo.GetAllItem(); if (list != null && list.Count != 0) { foreach (var item in list) { ILayer layer = item.Data as ILayer; if (layer != null) { if (layer is IFeatureLayer) { if (layer.Name == "变更范围图斑") { } Renderer randerer = SymbolConvert.Instance().GetRenderer((layer as IGeoFeatureLayer).Renderer); LabelingInfo labelingInfo = null; LabelStyleConvert styleConvert = new LabelStyleConvert(); List labelInfo = styleConvert.EsriLabelToCustomLabels((layer as IGeoFeatureLayer).AnnotationProperties); if (labelInfo != null && labelInfo.Count > 0) labelingInfo = labelInfo[0]; if (labelingInfo != null) { //AdvancedDrawimgInfoManager ad = new AdvancedDrawimgInfoManager(); //string jsons = ad.GetRenderer(randerer, labelingInfo); //item.Symbol = jsons; AdvancedDrawingInfo adi = new AdvancedDrawingInfo(); adi.DrawingInfo.Renderer = randerer; adi.DrawingInfo.LabelingInfo = labelInfo; item.Symbol = adi.ToJson(); } } } } } //设置图层样式 string layerStylePath = System.IO.Path.Combine(projectInfo.ProjDir, "LatersToXML.xml"); if (System.IO.File.Exists(layerStylePath)) { LayerCfg layerInfoClass = SerializeAPI.DeserializeToObject2(layerStylePath); if (layerInfoClass != null && layerInfoClass.Layers != null) { List layerInfolist = layerInfo.GetAllItem(); foreach (var item in layerInfolist) { ILayer layer = item.Data as ILayer; if (layer != null) { if (layer is IFeatureLayer) { if (layer.Name == "变更范围图斑") { } if (!string.IsNullOrWhiteSpace(item.Symbol)) { AdvancedDrawingInfo ad = AdvancedDrawingInfo.FromJson(item.Symbol); //ItemInfo itemInfo = ItemInfo.FromJson(item.Symbol); if (ad != null) { //Symbol symbol = (ad.DrawingInfo.Renderer as Framework.LayerStyleConvert.XSDClass.SimpleRenderer).Symbol; //Renderer rander = SymbolConvert.Instance().GetItemInfoRenderer((layer as IGeoFeatureLayer).Renderer); if (ad.DrawingInfo.Renderer is Framework.LayerStyleConvert.XSDClass.SimpleRenderer) { Symbol symbol1 = (ad.DrawingInfo.Renderer as Framework.LayerStyleConvert.XSDClass.SimpleRenderer).Symbol; //if (symbol1 is CIMSymbolReference) //{ ISimpleRenderer simpleRander2 = SymbolConvert.Instance().GetSimpleRenderer(symbol1, SymbolTypeEnum.Fill); (layer as IGeoFeatureLayer).Renderer = simpleRander2 as IFeatureRenderer; continue; //} } else if (ad.DrawingInfo.Renderer is Framework.LayerStyleConvert.XSDClass.UniqueValueRenderer) { //Symbol symbol = (ad.DrawingInfo.Renderer as Framework.LayerStyleConvert.XSDClass.UniqueValueRenderer).DefaultSymbol; //ISimpleRenderer simpleRander2 = SymbolConvert.Instance().GetSimpleRenderer(symbol, SymbolTypeEnum.Fill); //(layer as IGeoFeatureLayer).Renderer = simpleRander2 as IFeatureRenderer; continue; } //if (symbol != null) //{ // ISymbol gisSymbol = null; // IFeatureLayer2 featureLayer = layer as IFeatureLayer2; // ESRI.ArcGIS.Geometry.esriGeometryType geometryType = featureLayer.ShapeType; // ISimpleRenderer simpleRenderer = (featureLayer as IGeoFeatureLayer).Renderer as ISimpleRenderer; // if (simpleRenderer != null) // { // gisSymbol = simpleRenderer.Symbol; // } // else // { // gisSymbol = GetDefaultSymbol(geometryType); // } // ISimpleRenderer simpleRander = null; // //面 // if (gisSymbol is IFillSymbol) // { // simpleRander = SymbolConvert.Instance().GetSimpleRenderer(symbol, SymbolTypeEnum.Fill); // } // //线 // else if (gisSymbol is ILineSymbol) // { // simpleRander = SymbolConvert.Instance().GetSimpleRenderer(symbol, SymbolTypeEnum.Line); // } // //点 // else if (gisSymbol is IMarkerSymbol) // { // simpleRander = SymbolConvert.Instance().GetSimpleRenderer(symbol, SymbolTypeEnum.Point); // } //(layer as IGeoFeatureLayer).Renderer = simpleRander as IFeatureRenderer; //} } } //IFillSymbol fillSymbol = getLayerFillSymbol(item.Layer as ILayer); //if (fillSymbol != null) //{ // System.Drawing.Color fillColor = Converter.FromRGBColor(fillSymbol.Color as IRgbColor); // System.Drawing.Color borderColor = Converter.FromRGBColor(fillSymbol.Outline.Color as IRgbColor); // layerInfo.layerBorderColor = System.Windows.Media.Color.FromArgb(borderColor.A, borderColor.R, borderColor.G, borderColor.B).ToString(); // layerInfo.layerFillColor = System.Windows.Media.Color.FromArgb(fillColor.A, fillColor.R, fillColor.G, fillColor.B).ToString(); // if (fillSymbol.Outline is ISimpleLineSymbol) // { // ISimpleLineSymbol esriSymbol = fillSymbol.Outline as ISimpleLineSymbol; // if (esriSymbol != null) // { // layerInfo.LayerBorderStyle = (int)esriSymbol.Style; // layerInfo.layerBorderWidth = esriSymbol.Width; // } // } //} } } } } } //将对象序列化成字符串 string Str = SerializeAPI.SerializeToXML(_DataCatalog.CurrentLayers as LayerCfg); Byte[] bytearr = System.Text.Encoding.Default.GetBytes(Str);//Encoding.UTF8.GetBytes(Str); using (Stream stream = new System.IO.FileStream(projectInfo.ProjDir + "\\" + "LatersToXML.xml", FileMode.Create, FileAccess.Write, FileShare.None)) { stream.Write(bytearr, 0, bytearr.Length); stream.Close(); } } catch (Exception) { throw; } } private ISymbol GetDefaultSymbol(ESRI.ArcGIS.Geometry.esriGeometryType geometryType) { try { ISymbol result = null; IRgbColor rgbColor = new RgbColorClass(); rgbColor.Red = 184; rgbColor.Green = 242; rgbColor.Blue = 200; switch (geometryType) { case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint: result = (new SimpleMarkerSymbolClass { Color = rgbColor, Style = ESRI.ArcGIS.Display.esriSimpleMarkerStyle.esriSMSCircle } as ISymbol); goto IL_B3; case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryMultipoint: goto IL_B3; case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline: break; case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon: result = (new SimpleFillSymbolClass { Color = rgbColor, Style = ESRI.ArcGIS.Display.esriSimpleFillStyle.esriSFSSolid } as ISymbol); goto IL_B3; default: if (geometryType != ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryLine) { goto IL_B3; } break; } result = (new SimpleLineSymbolClass { Color = rgbColor, Width = 1.0, Style = ESRI.ArcGIS.Display.esriSimpleLineStyle.esriSLSSolid } as ISymbol); IL_B3: return result; } catch (Exception ex) { LogAPI.Debug(ex.Message); } return null; } public override void OnCreate(object Hook) { try { if (m_hookHelper == null) { m_hookHelper = new HookHelper { Hook = Hook }; } } catch (Exception ex) { LogAPI.Debug("初始化 保存 命令时异常,异常信息如下:" + ex.Message); } } public override bool Enabled { get { //验证是否打开工程 if (!(KGIS.Framework.Maps.MapsManager.Instance.MapService.GetProjectInfo() is ProjectInfo ProInfo)) return false; else return true; } } } }