using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Controls; using ESRI.ArcGIS.Geodatabase; using KGIS.Framework.AE; using KGIS.Framework.Maps; using KGIS.Framework.Utils; using KGIS.Framework.Utils.ExtensionMethod; using KGIS.Framework.Utils.Helper; using KGIS.Framework.Views; using Kingo.PluginServiceInterface; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Windows; using System.Windows.Controls; using System.Windows.Input; namespace Kingo.Plugin.NYYP.View { /// /// UCNYYP.xaml 的交互逻辑 /// public partial class UCNYYP : UserControl, IElementInfo { List _Elements = null; IElementInfo _FeatureInfo = null; IElementInfo _NYYPInfo = null; IFeatureLayer _curFeatureLayer; IFeatureLayer _curJCTBFeatureLayer; public UCNYYP() { InitializeComponent(); Title = "图斑预判组件"; DockWidth = 550; this.Loaded += (s, e) => { MapsManager.Instance.MapService.OnSelectionChanged -= MapService_OnSelectionChanged; MapsManager.Instance.MapService.OnSelectionChanged += MapService_OnSelectionChanged; _curJCTBFeatureLayer = MapsManager.Instance.MapService.GetFeatureLayerByName("JCTB"); }; } private int CurShowJCOID = 0; private void MapService_OnSelectionChanged(object sender, EventArgs e) { try { if (!IsShow) { MapsManager.Instance.MapService.OnSelectionChanged -= MapService_OnSelectionChanged; return; }//当前窗口关闭时,注销触发事件 ISelectionSet pJCSelectionSetes = (_curJCTBFeatureLayer as IFeatureSelection).SelectionSet;//获取图层要素已被选择的 int oid = -1; if (pJCSelectionSetes != null && pJCSelectionSetes.Count != 0) { IEnumIDs enumIDs = pJCSelectionSetes.IDs; enumIDs.Reset(); oid = -1; while ((oid = enumIDs.Next()) >= 0) { if (CurShowJCOID == oid) break;//不重新绑定当前已选择行 IFeature f = _curJCTBFeatureLayer.FeatureClass.GetFeature(oid); BindData(f); Marshal.ReleaseComObject(f); Marshal.ReleaseComObject(enumIDs); CurShowJCOID = oid; break; } } Marshal.ReleaseComObject(pJCSelectionSetes); if (oid == -1) { BindData(null); return; } } catch (Exception ex) { LogAPI.Debug(ex.Message); } } public void BindData(object obj) { try { if (_curFeatureLayer == null) _curFeatureLayer = MapsManager.Instance.MapService.GetFeatureLayerByName("DLTBBG"); Init(); tvDataList.Items.Clear(); if (obj is IFeature) { IFeature tempFeature = obj as IFeature; string mFcName = (tempFeature.Class as FeatureClass).BrowseName; if (mFcName == "JCTB") { _FeatureInfo?.BindData(obj); _NYYPInfo?.BindData(obj); int SJLYIndex = _curJCTBFeatureLayer.FeatureClass.FindField("SJLY"); ListBoxItem item = new ListBoxItem { Margin = new Thickness(32, 0, 0, 0), Tag = obj }; if ((obj as IFeature).Value[SJLYIndex].ToString().Trim() == "ZZBG") item.Content = "自主变更图斑:" + (obj as IFeature).OID; else item.Content = "国家监测图斑:" + (obj as IFeature).OID; tvDataList.Items.Add(item); if (tvDataList.Items.Count > 0) { (tvDataList.Items[0] as ListBoxItem).IsSelected = true; } //GetBGTBForJCTB(tempFeature); if (tvDataList.SelectedItem is ListBoxItem itemSe) itemSe.FontStyle = FontStyles.Oblique; } else if (mFcName == "DLTBBG") { _FeatureInfo?.BindData(obj); _NYYPInfo?.BindData(obj); } return; } _FeatureInfo?.BindData(obj); _NYYPInfo?.BindData(obj); } catch (Exception ex) { LogAPI.Debug("加载图斑变更详情页面时发生异常,异常信息如下:"); LogAPI.Debug(ex); } } public void GetBGTBForJCTB(IFeature pJCTB) { if (pJCTB == null) return; List listBGFC = new List(); IFeatureClass featureClassBG = MapsManager.Instance.MapService.GetFeatureClassByName("DLTBBG"); int JCBHIndex = pJCTB.Fields.FindField("TBBH"); if (JCBHIndex == -1) return; string strJCBH = pJCTB.Value[JCBHIndex].ToTrim(); if (string.IsNullOrWhiteSpace(strJCBH)) return; IQueryFilter queryFilter = new QueryFilterClass() { WhereClause = string.Format("TBYBH='{0}'", strJCBH) }; if (featureClassBG.FeatureCount(queryFilter) == 0) { System.Windows.Forms.DialogResult result = MessageHelper.ShowYesNoCancelAndTips("无对应变更图斑数据,是否从监测图层中加载?"); if (result == System.Windows.Forms.DialogResult.Yes) { IFeatureClassAPI featureClassAPI_GJJCTB = new FeatureClassAPI(_curJCTBFeatureLayer.FeatureClass); int JCJCBHIndex = featureClassAPI_GJJCTB.FeatureClass.FindField("TBBH"); int JCBGDLIndex = featureClassAPI_GJJCTB.FeatureClass.FindField("BGDL"); int JCTZIndex = featureClassAPI_GJJCTB.FeatureClass.FindField("TZ"); int JCBGFWIndex = featureClassAPI_GJJCTB.FeatureClass.FindField("KZXX"); int JCWBGLXIndex = featureClassAPI_GJJCTB.FeatureClass.FindField("WBGLX"); int JCSJLYIndex = featureClassAPI_GJJCTB.FeatureClass.FindField("SJLY"); //AddFildsToBGTB(featureClassBG); int BGTBYBHIndex = featureClassBG.FindField("TBYBH"); int BGDLBMIndex = featureClassBG.FindField("DLBM"); int BGSFJCTBIndex = featureClassBG.FindField("SFJCTB"); int TZIndex = featureClassBG.FindField("TZ"); int BGDLIndex = featureClassBG.FindField("BGDL"); int BGFWIndex = featureClassBG.FindField("BGFW"); int WBGLXIndex = featureClassBG.FindField("WBGLX"); int SJLYIndex = featureClassBG.FindField("SJLY"); //检测图斑 IFeatureCursor T_Cursor = null; if (featureClassAPI_GJJCTB.FeatureClass != null) { IFeatureClassLoad pFclsLoad = featureClassBG as IFeatureClassLoad; if (pFclsLoad != null) pFclsLoad.LoadOnlyMode = true; //地类变更图斑 IFeatureBuffer buffer = featureClassBG.CreateFeatureBuffer(); T_Cursor = featureClassBG.Insert(true); buffer.Shape = pJCTB.ShapeCopy; buffer.Value[BGDLIndex] = pJCTB.Value[JCBGDLIndex]; buffer.Value[TZIndex] = pJCTB.Value[JCTZIndex]; buffer.Value[BGFWIndex] = pJCTB.Value[JCBGFWIndex]; buffer.Value[WBGLXIndex] = pJCTB.Value[JCWBGLXIndex]; buffer.Value[SJLYIndex] = "1"; buffer.Value[BGTBYBHIndex] = pJCTB.Value[JCJCBHIndex]; buffer.Value[BGDLBMIndex] = pJCTB.Value[JCBGDLIndex]; buffer.Value[BGSFJCTBIndex] = "1"; T_Cursor.InsertFeature(buffer); T_Cursor.Flush(); if (pFclsLoad != null) pFclsLoad.LoadOnlyMode = false; Marshal.ReleaseComObject(T_Cursor); Marshal.ReleaseComObject(buffer); Marshal.ReleaseComObject(pFclsLoad); } } } IFeatureCursor featureCursorBG = featureClassBG.Search(queryFilter, false); IFeature bgF = null; while ((bgF = featureCursorBG.NextFeature()) != null) { ListBoxItem item = new ListBoxItem(); item.Margin = new Thickness(32, 0, 0, 0); item.Content = "图斑:" + bgF.OID; item.Tag = bgF; tvDataList.Items.Add(item); } Marshal.ReleaseComObject(featureCursorBG); Marshal.ReleaseComObject(featureClassBG); if (tvDataList.Items.Count > 0) { (tvDataList.Items[0] as ListBoxItem).IsSelected = true; } } ControlsEditingSaveCommandClass saveCmd = null; bool IsSave = false; public void SaveEdit() { IsSave = true; if (saveCmd == null) { saveCmd = new ControlsEditingSaveCommandClass(); saveCmd.OnCreate(MapsManager.Instance.MapService.Hook); } if (saveCmd.Enabled) { saveCmd.OnClick(); } IsSave = false; _FeatureInfo?.SaveEdit(); _NYYPInfo?.SaveEdit(); } public void Init() { try { if (_Elements == null) { _Elements = UIShell.OSGi.BundleRuntime.Instance.GetService(); } if (_Elements == null) return; if (_NYYPInfo == null) { _NYYPInfo = _Elements.FirstOrDefault(f => f.Title == "内业预判"); } if ((_NYYPInfo as UserControl).Parent != null) { ((_NYYPInfo as UserControl).Parent as Grid).Children.Clear(); } if (_NYYPInfo != null) NYYPInfoPanel.Children.Add(_NYYPInfo as UIElement); if (_FeatureInfo == null) { _FeatureInfo = _Elements.FirstOrDefault(f => f.Title == "要素属性"); } if ((_FeatureInfo as UserControl).Parent != null) { ((_FeatureInfo as UserControl).Parent as Grid).Children.Clear(); } TBInfo.Children.Add(_FeatureInfo as UIElement); } catch (Exception ex) { LogAPI.Debug("初始化图斑详情页面失败!"); LogAPI.Debug(ex); } } private void tvDataList_PreviewMouseUp(object sender, MouseButtonEventArgs e) { try { //ListBoxItem item = tvDataList.SelectedItem as ListBoxItem; foreach (ListBoxItem itemBOX in tvDataList.Items) { if (itemBOX.IsSelected == true) itemBOX.FontStyle = FontStyles.Oblique; else itemBOX.FontStyle = FontStyles.Normal; } } catch (Exception ex) { LogAPI.Debug("要素属性中 元素树操作时鼠标抬起 时异常,异常信息如下:"); LogAPI.Debug(ex); } } private void tvDataList_SelectionChanged(object sender, SelectionChangedEventArgs e) { try { if (tvDataList.SelectedItem == null) return; ListBoxItem item = tvDataList.SelectedItem as ListBoxItem; if (item == null || item.Tag == null) { return; } object Data = null; if (item.Tag is IFeature) { Data = item.Tag; } _FeatureInfo?.BindData(item.Tag); _NYYPInfo?.BindData(item.Tag); } catch (Exception ex) { LogAPI.Debug(ex.Message); throw; } } public bool IsShow { get; set; } public int ShowIndex { get; set; } public bool ResetSize { get; set; } public bool AllowEdit { get; set; } public Guid ID { get; set; } public DockStyle DockAreas { get; set; } public System.Drawing.Size FloatSize { get; set; } public int DockWidth { get; set; } public int DockHeight { get; set; } public DockStyle DefaultArea { get; set; } public bool ShowCloseButton { get; set; } public bool ShowAutoHideButton { get; set; } public string Title { get; set; } } public class TBInfo { public string Caption { get; set; } public object Data { get; set; } public TBInfo(IFeature pFeature) { Caption = pFeature.OID.ToString(); Data = pFeature; } } }