123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
-
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Linq;
- using Tofly.Core.Context.Support;
- using Tofly.Core.Context;
- using Tofly.Core.ServiceLocator;
- using Tofly.CoreUI.Plot;
- using Tofly.CoreUI.Control;
- using Tofly.CoreUI.Message;
- using Tofly.CoreUI.Win.Form.Forms;
- using Tofly.CoreUI.Utils;
- using Tofly.Data.Metadata;
- using Tofly.GIS.Display;
- using Tofly.GISUI.Content;
- using Tofly.GISUI.Controls;
- using Tofly.GIS.Geometry;
- using Tofly.GIS.Carto;
- using Tofly.GIS.SpatialDatabase;
- using Tofly.GIS.Util;
- using Tofly.DataEditUI.Properties;
- using Tofly.GISUI.Plugin;
- using Tofly.Data.General;
- using Tofly.GISUI.Utils;
- namespace Tofly.DataEditUI
- {
-
-
-
- [PluginComponentAttribute((long)Core.SysRegist.ModuleKey.Edit, PluginGISType.ArcGIS, GroupName = "编辑", Caption = "删除", Describe = "删除所选元素", IsCreate = true, States = Tofly.CoreUI.Control.Status.STATE_EDIT)]
- [Tofly.Core.Stereotype.Component(IsSingleton = "false", Name = "Tofly.DataEditUI.FeatureDeleteCommand")]
- public class FeatureDeleteCommand : EditCommand
- {
- public FeatureDeleteCommand()
- : base()
- {
- EditType = EditTaskType.Delete;
- base.editName = "GeoEditDelete";
- editTableTypes = new List<TableType>();
- editTableTypes.Add(TableType.PolylineFeatureClass);
- editTableTypes.Add(TableType.PolygoneFeatureClass);
- editTableTypes.Add(TableType.PointFeatureClass);
- selType = selectType.HaveTo;
- pViewDrawPhase = ViewDrawPhase.ViewGeography | ViewDrawPhase.ViewGeoSelection;
- }
- public override void DoTask()
- {
- try
- {
- if (this.pMap.SelectionCount == 0)
- {
- return;
- }
- List<IFeatureLayer> __lstMapLayers = new List<IFeatureLayer>(this.pMap.GetFeatureLayersByMap());
- DataEdit.GeoEdit.FeatureLayerSel[] __arrEditableLayers = ServiceLocatorFactory.ServiceLocator.GetInstance<DataEdit.GeoEdit.FeatureLayerSel[]>(ServiceLocatorKeys.EditFeatureLayers);
- List<IFeatureLayer> __lstEditableFeatureLayer = new List<IFeatureLayer>(__arrEditableLayers.Select(featLayerSel => featLayerSel.FeatureLayer));
- List<IFeatureLayer> __lstUneditableLayer = (from flayer in __lstMapLayers
- where __lstEditableFeatureLayer.Where(elayer => elayer.FeatureClass.ObjectClassID == flayer.FeatureClass.ObjectClassID).Count() == 0
- select flayer).ToList();
- Dictionary <IFeatureLayer, List<IFeature>> __dicEditableFeaturesByLayer = MapSelectionHelper.GetSelectedFeaturesByLayer(this.pMap, __lstEditableFeatureLayer);
- Dictionary<IFeatureLayer, List<IFeature>> __dicUneidtableSelFeatures = MapSelectionHelper.GetSelectedFeaturesByLayer(this.pMap, __lstUneditableLayer);
- if (__dicEditableFeaturesByLayer.Count > 0)
- {
- #region 不可编辑图层要素的处理
- if (__dicUneidtableSelFeatures.Count > 0)
- {
- foreach (var __kvUneditableLayer in __dicUneidtableSelFeatures)
- {
- __kvUneditableLayer.Key.ClearSelection();
- }
- this.pMap.ActiveView.PartialRefresh(ViewDrawPhase.ViewGeoSelection, null, this.pMap.ActiveView.Extent);
- }
- #endregion
- IEnvelope __gEnvRefreshed = MapSelectionHelper.GetMapSelectionEnvelope(this.pMap);
- if (__dicEditableFeaturesByLayer.Count > 1 || __dicEditableFeaturesByLayer.ElementAt(0).Value.Count > 1)
- {
-
-
-
-
-
-
-
-
- ISelectMultiEditFeature __frmSelMultiEditFeature = ContextRegistry.GetContext().GetObject("Tofly.DataEditUI.Win.FormSelectMultiEditFeature") as ISelectMultiEditFeature;
- __frmSelMultiEditFeature.CMap = this.pMap;
- __frmSelMultiEditFeature.LoadSelectableFeatures(__dicEditableFeaturesByLayer);
- if (__frmSelMultiEditFeature.ShowDialog(this.content.PluginMainForm) == DialogResult.OK)
- {
- var __dicSelFeaturesByLayer = __frmSelMultiEditFeature.SelectedLayerFeatues;
- System.Windows.Forms.Application.DoEvents();
- if (__dicSelFeaturesByLayer.Count > 0 && MessageManager.Show("是否确定删除?", "要素删除", MessageButton.YesNo, MessageType.Question) == MessageResult.Yes)
- {
- WaitManager.Show("正在删除要素……");
- this.DoDeleteAction(__dicSelFeaturesByLayer, this.pMap, __gEnvRefreshed);
- }
- }
- __frmSelMultiEditFeature.Dispose();
- __frmSelMultiEditFeature = null;
- __dicUneidtableSelFeatures.Clear();
- }
- else
- {
- if (MessageManager.Show("是否确定删除?", "要素删除", MessageButton.YesNo, MessageType.Question) == MessageResult.Yes)
- {
- WaitManager.Show("正在删除要素……");
- base.DoTask();
- this.DeleteSelectedElements(this.pMap.ActiveView);
- }
- else
- {
- __dicUneidtableSelFeatures.Clear();
- }
- }
- this.pMap.ActiveView.PartialRefresh(ViewDrawPhase.ViewGeoSelection | ViewDrawPhase.ViewGraphics, null, __gEnvRefreshed);
- var __docContent = content.ServiceLocator.GetInstance<IDocumentContent>(ServiceLocatorKeys.DocumentContent);
- IActiveView __viewSelction = __docContent.ActiveViewContent.ActiveView;
- __viewSelction.PartialRefresh(ViewDrawPhase.ViewGeoSelection, null, __gEnvRefreshed);
- WaitManager.Close();
- }
- bool __bExistUnEditableGW = (__dicUneidtableSelFeatures.Keys.Count(flayer => flayer.FeatureClass.FeatureDataset != null && flayer.FeatureClass.FeatureDataset.InnerObject != null && flayer.FeatureClass.FeatureDataset.ShortName.Equals(AppConfig.GWDatasetName, StringComparison.OrdinalIgnoreCase)) > 0);
- if (__dicUneidtableSelFeatures.Count > 0 && __bExistUnEditableGW)
- {
- MessageManager.Show("删除错误: 选择集中包含不在管辖片区内管网数据,这部分数据无权删除!", "删除");
- }
- }
- catch(System.Exception ex)
- {
- WaitManager.Close();
- if (ex is System.Runtime.InteropServices.COMException && (ex as System.Runtime.InteropServices.COMException).ErrorCode == -2147205088)
- {
- MessageManager.Show("删除失败: 选择要素中存在错误连接关系的数据,请先纠正处理后,再进行删除.", "删除要素");
- }
- else
- {
- MessageManager.Show("删除失败:" + ex.Message, "删除要素");
- }
- var __docContent = content.ServiceLocator.GetInstance<IDocumentContent>(ServiceLocatorKeys.DocumentContent);
- IActiveView __viewSelction = __docContent.ActiveViewContent.ActiveView;
- __viewSelction.PartialRefresh(ViewDrawPhase.ViewGeoSelection | ViewDrawPhase.ViewGeography, null, __viewSelction.Extent);
- }
- }
-
-
-
-
-
-
- private void DoDeleteAction(Dictionary<IFeatureLayer, List<IFeature>> layerFeatures, IMap cmap, IEnvelope envelope)
- {
- try
- {
- if (layerFeatures.Count > 0)
- {
- cmap.ClearSelection();
- cmap.ActiveView.PartialRefresh(ViewDrawPhase.ViewGeoSelection, null, envelope);
- List<int> __lstFeatureOIDs;
- foreach (var __kvLayerFeature in layerFeatures)
- {
- __lstFeatureOIDs = __kvLayerFeature.Value.Select(ftrItem => ftrItem.OID).ToList();
- __kvLayerFeature.Key.AddSelectFeatureList(__lstFeatureOIDs);
- __lstFeatureOIDs.Clear();
- }
- cmap.ActiveView.PartialRefresh(ViewDrawPhase.ViewGeoSelection, null, envelope);
- System.Windows.Forms.Application.DoEvents();
- base.DoTask();
- this.DeleteSelectedElements(this.pMap.ActiveView);
- }
- }
- catch (System.Exception ex)
- {
- if (ex is System.Runtime.InteropServices.COMException && (ex as System.Runtime.InteropServices.COMException).ErrorCode == -2147205088)
- {
- MessageManager.Show("删除失败: 选择要素中存在错误连接关系的数据,请先纠正处理后,再进行删除.", "删除要素");
- }
- else
- {
- MessageManager.Show("删除失败:" + ex.Message, "删除要素");
- }
- var __docContent = content.ServiceLocator.GetInstance<IDocumentContent>(ServiceLocatorKeys.DocumentContent);
- IActiveView __viewSelction = __docContent.ActiveViewContent.ActiveView;
- __viewSelction.PartialRefresh(ViewDrawPhase.ViewGeoSelection | ViewDrawPhase.ViewGeography, null, __viewSelction.Extent);
- }
- }
-
-
-
-
- private void DeleteSelectedElements(IActiveView acView)
- {
- IElement[] __arrElement = (acView as IGraphicsContainerSelect).SelectedElements;
- IGraphicsContainer __graContainer = acView.GraphicsContainer;
- foreach(var __element in __arrElement)
- {
- __graContainer.DeleteElement(__element);
- }
- }
- }
- }
|