using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Controls; using KGIS.Framework.AE.ExtensionMethod; using KGIS.Framework.Maps; using KGIS.Framework.Platform; using KGIS.Framework.Utils; using KGIS.Framework.Utils.Helper; using Kingo.PluginServiceInterface; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Windows.Forms; using UIShell.OSGi; namespace Kingo.Plugin.MapView.Commands { //[PathAttribute("Kingo.Plugin.MapView.Commands.CmdRemoveLayer")] public class CmdRemoveLayer : BaseMapMenuCommand { private LayerCfg StrLayerInfo = null; public override void OnClick() { try { if (m_hookHelper == null) return; object layer = m_hookHelper.GetCustomProperty(); if (layer is ILayer) { if (MessageHelper.ShowYesNoAndTips("是否确定移除该图层?") == DialogResult.Yes) { string strMxdPath = Path.Combine(SysAppPath.GetCurrentAppPath() + "工作空间DTBJK\\初始化工程模板\\LatersToXMLForDTBJK" + ".xml"); if (File.Exists(strMxdPath)) StrLayerInfo = SerializeAPI.DeserializeToObject2(strMxdPath); if (StrLayerInfo == null) return; ILayer layerTemp = layer as ILayer; IDataCatalogService _DataCatalog = BundleRuntime.Instance.GetFirstOrDefaultService(); if (_DataCatalog == null) return; List Layers = (_DataCatalog.CurrentLayers as LayerCfg).GetAllItem(); LayerCfg info2 = Layers.FirstOrDefault(x => x.LayerName == layerTemp.Name); LayerCfg infoTemp = Layers.FirstOrDefault(x => x.ID == info2.PID); if (ContainsLayerRecursive(StrLayerInfo.Layers, info2.LayerName)) { MessageHelper.ShowWarning("基础配置图层不能移除!"); return; } infoTemp.Layers.Remove(info2); _DataCatalog.UpdateTree(); Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "SaveProject" }); m_hookHelper.FocusMap.DeleteLayer(layer as ILayer); m_hookHelper.ActiveView.Refresh(); //Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "RefreshLayer" }); } } } catch (Exception ex) { LogAPI.Debug(ex.Message); } } private bool ContainsLayerRecursive(IEnumerable layers, string targetName) { return layers?.Any(layer => layer.LayerName == targetName || (layer.Layers != null && ContainsLayerRecursive(layer.Layers, targetName))) ?? false; } public override void OnCreate(object Hook) { try { if (m_hookHelper == null) { m_hookHelper = new HookHelper(); m_hookHelper.Hook = Hook; } } catch (Exception ex) { LogAPI.Debug("加载 移除图层 命令时发生异常,异常信息如下:"); LogAPI.Debug(ex); LogAPI.Debug("异常信息结束"); } } public override bool Enabled { get { return ReomveISEnabled(); } } private bool ReomveISEnabled() { bool iSEnabled = true; try { object layer = m_hookHelper.GetCustomProperty(); if (layer is ILayer) { IFeatureLayer featurelayer = layer as IFeatureLayer; if (featurelayer is ESRI.ArcGIS.Geodatabase.IDataset) { ESRI.ArcGIS.Geodatabase.IDataset dataset = featurelayer as ESRI.ArcGIS.Geodatabase.IDataset; string layername = dataset.BrowseName; if (layername == "BHTB" || layername == "DHCG") { iSEnabled = false; } else { iSEnabled = true; } } } else { iSEnabled = true; } return iSEnabled; } catch (Exception ex) { LogAPI.Debug(ex.Message); return iSEnabled; } } } }