using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Controls; using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.Geometry; using KGIS.Framework.Maps; using KGIS.Framework.Platform; using KGIS.Framework.Utils; using KGIS.Framework.Utils.Helper; using KGIS.Framework.Views; using Kingo.Plugin.General.Helper; using Kingo.PluginServiceInterface; using Kingo.RuleCheck; using KUI.Windows; using System; using System.Collections.Generic; using System.Linq; using System.Windows; using System.Windows.Controls; using UIShell.OSGi; namespace Kingo.Plugin.General.ViewDTBResultCheck { /// /// UCCheckResults.xaml 的交互逻辑 /// public partial class UCCheckResults : UserControl, IDockPanel3 { private IHookHelper hookHelper { get; set; } private IFeatureLayer BgfeatureLayer = null; private IFeatureLayer DtbfeatureLayer = null; public UCCheckResults(IHookHelper _hookHelper = null, IFeatureLayer _featureLayer = null, IFeatureLayer _DfeatureLayer = null) { DevExpress.Xpf.Core.ThemeManager.SetTheme(this, DevExpress.Xpf.Core.Theme.Office2013LightGray); InitializeComponent(); ID = new Guid("A947BF3F-B0BE-4895-A061-5981C34CAA53");//继承与IDockPanel1属性 this.DockAreas = DockStyle.DockBottom | DockStyle.Float; this.FloatSize = new System.Drawing.Size(600, 670); this.DockHeight = 200; this.DefaultArea = DockStyle.DockBottom; this.ShowCloseButton = true; this.ShowAutoHideButton = true; this.IsShowInMap = true; this.Title = "质检检查结果"; this.ShowCloseButton = true; this.Loaded += (s, e) => { hookHelper = _hookHelper; BgfeatureLayer = _featureLayer; DtbfeatureLayer = _DfeatureLayer; }; } public void InitData(List lstResult) { try { int i = 1; if (lstResult != null) { //lstResult.OrderBy(x => x.XH).ThenBy(x => x.ErrorId).ThenBy(x => x.RuleCode).ToList().ForEach(x => x.XH = i++); lstResult.OrderBy(x => x.XH).ThenBy(x => x.ErrorId).ToList().ForEach(x => x.XH = i++); } this.Dispatcher.Invoke(new Action(delegate { gridPackage.ItemsSource = null; gridPackage.ItemsSource = lstResult; })); } catch (Exception ex) { LogAPI.Debug(ex); } } private void gcAttr_SelectionChanged(object sender, DevExpress.Xpf.Grid.GridSelectionChangedEventArgs e) { try { if (!gridPackage.IsMouseOver) { return; } if (gridPackage.SelectedItems == null || gridPackage.SelectedItems.Count <= 0) { return; } if (gridPackage.SelectedItems.Count > 1) { MessageHelper.Show("请选择单条数据查看!"); return; } RuleEntity ruleEntity = gridPackage.SelectedItems[0] as RuleEntity; if (ruleEntity == null) { return; } if (ruleEntity.RuleCode == "TX003") { Repair.Visibility = Visibility.Visible; } else { Repair.Visibility = Visibility.Collapsed; } Guid guid = new Guid(); int oid = 0; if (!Guid.TryParse(ruleEntity.ErrorId, out guid) && int.TryParse(ruleEntity.ErrorId, out oid)) { IFeatureLayer featureLayer = MapsManager.Instance.MapService.GetFeatureLayerByName("N"); if (featureLayer != null && featureLayer.FeatureClass != null) { IFeature feature = null; try { if (!featureLayer.Visible) { featureLayer.Visible = true; } feature = featureLayer.FeatureClass.GetFeature(oid);//选中并居中 MapsManager.Instance.MapService.SelectFeature(featureLayer.Name, oid.ToString()); Location(ruleEntity); return; } catch { } finally { if (feature != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(feature); } } } } if (!string.IsNullOrWhiteSpace(ruleEntity.ErrorId)) { //通知主任务树定位图斑 Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "CheckResultLocation", Content = ruleEntity.ErrorId }); Location(ruleEntity); } } catch (Exception ex) { MessageHelper.ShowError(ex.Message); } } IMapService _mapService = null; private void Location(RuleEntity ruleEntity) { IPointCollection poly2 = new PolygonClass(); IGeometry tempgeometry = null; try { if (_mapService == null) _mapService = MapsManager.Instance.MapService; _mapService.ClearFeatureSelection(this.hookHelper.Hook as IMapControlDefault); if (ruleEntity.Geometry != null && !string.IsNullOrWhiteSpace(ruleEntity.Geometry.ToString())) { ESRI.ArcGIS.Geometry.IGeometry geometry = null; switch (ruleEntity.GeometryType) { case 1: geometry = GeometryConvertHelper.ConverJsonToIGeoemtry(ruleEntity.Geometry.ToString(), ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint); geometry.Project(this.hookHelper.FocusMap.SpatialReference); _mapService.DrawGraph(geometry, true); //IArray geoArray = new ArrayClass();//声明一个几何的集合 //geoArray.Add(geometry);//向几何集合中添加几何对象 //IHookActions hookActions = (IHookActions)hookHelper;//通过IHookActions闪烁要素集合 //hookActions.DoActionOnMultiple(geoArray, esriHookActions.esriHookActionsZoom); //System.Windows.Forms.Application.DoEvents(); //hookHelper.ActiveView.ScreenDisplay.UpdateWindow(); //((hookHelper.Hook) as IMapControl2).CenterAt((IPoint)geometry); //hookActions.DoActionOnMultiple(geoArray, esriHookActions.esriHookActionsFlash); //为了实现地图界面放大效果 poly2.AddPoint(new PointClass() { X = geometry.Envelope.XMin - 10, Y = geometry.Envelope.YMax + 10 }); poly2.AddPoint(new PointClass() { X = geometry.Envelope.XMax + 10, Y = geometry.Envelope.YMax + 10 }); poly2.AddPoint(new PointClass() { X = geometry.Envelope.XMax + 10, Y = geometry.Envelope.YMin - 10 }); poly2.AddPoint(new PointClass() { X = geometry.Envelope.XMin - 10, Y = geometry.Envelope.YMin - 10 }); poly2.AddPoint(new PointClass() { X = geometry.Envelope.XMin - 10, Y = geometry.Envelope.YMax + 10 }); tempgeometry = poly2 as IGeometry; _mapService.Zoom(tempgeometry); //MapsManager.Instance.MapService.Zoom(geometry.Envelope); //this.hookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphicSelection, null, geometry.Envelope); break; case 2: geometry = GeometryConvertHelper.ConverJsonToIGeoemtry(ruleEntity.Geometry.ToString(), ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline); geometry.Project(this.hookHelper.FocusMap.SpatialReference); //MapsManager.Instance.MapService.ClearFeatureSelection(this.hookHelper.Hook as IMapControlDefault); //MapsManager.Instance.MapService.Zoom(geometry); break; case 3: geometry = GeometryConvertHelper.ConverJsonToIGeoemtry(ruleEntity.Geometry.ToString()); geometry.Project(this.hookHelper.FocusMap.SpatialReference); //MapsManager.Instance.MapService.ClearFeatureSelection(this.hookHelper.Hook as IMapControlDefault); //MapsManager.Instance.MapService.Zoom(geometry); break; } if (ruleEntity.GeometryType != 1) { _mapService.DrawGraph(geometry, true); _mapService.Zoom(geometry); } } } catch (Exception ex) { throw ex; } finally { System.Runtime.InteropServices.Marshal.ReleaseComObject(poly2); if (tempgeometry != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(tempgeometry); } } #region IDockPanel3 public KGIS.Framework.Views.DockStyle DockAreas { get; set; } public System.Drawing.Size FloatSize { get; set; } public int DockWidth { get; set; } public int DockHeight { get; set; } public KGIS.Framework.Views.DockStyle DefaultArea { get; set; } public bool ShowCloseButton { get; set; } public bool ShowAutoHideButton { get; set; } public string Title { get; set; } private Grid currentheadergrid { get; set; } public bool IsShowInMap { get; set; } public bool IsDockToPanel { get; set; } public DockStyle DockToPanelStyle { get; set; } public Guid ID { get; set; } public bool IsShow { get; set; } public event EventHandler CloseViewHandler; public void Close() { //Env.Instance.KMap.LoadProjectCompleteEvent -= Platform_LoadProjectEvent; //Env.Instance.KMap.CloseProjectCompleteEvent -= Platform_CloseProjectEvent; this.ClosePanel(); } private void Platform_CloseProjectEvent(object sender, object e) { try { this.Close(); } catch (Exception ex) { MessageHelper.ShowError(ex.Message); } } public void ShowPanel() { Platform.Instance.OpenView(this, false); } public void ClosePanel() { Platform.Instance.CloseView(this); } public void ClosePanelInvoke() { CloseViewHandler?.Invoke(this, null); } #endregion /// /// 导出质检结果 /// /// /// private void BtnExprotResult_Click(object sender, RoutedEventArgs e) { System.Windows.Forms.SaveFileDialog saveFileDialog = null; try { saveFileDialog = new System.Windows.Forms.SaveFileDialog(); saveFileDialog.Title = "导出Excel"; saveFileDialog.Filter = "Excel文件(*.xlsx)|*.xlsx"; saveFileDialog.FileName = "变更检查结果-" + DateTime.Now.ToString("yyyyMMddHHmmss"); if (saveFileDialog.ShowDialog() != System.Windows.Forms.DialogResult.OK) { return; } this.ShowLoading("正在导出......", 0, 0); //KGIS.Framework.Platform.Helper.ProgressHelper.ShowProcessBar("正在导出......"); DevExpress.XtraPrinting.XlsxExportOptionsEx op = new DevExpress.XtraPrinting.XlsxExportOptionsEx(); this.viewPackage.ExportToXlsx(saveFileDialog.FileName, op); KGIS.Framework.Platform.Helper.ProgressHelper.CloseProcessBar(); if (MessageHelper.ShowYesNoAndTips("导出成功!是否查看文件?") != System.Windows.Forms.DialogResult.Yes) { return; } System.Diagnostics.Process.Start("explorer.exe", System.IO.Path.GetDirectoryName(saveFileDialog.FileName)); } catch (Exception ex) { this.CloseLoading(); //KGIS.Framework.Platform.Helper.ProgressHelper.CloseProcessBar(); LogAPI.Debug(ex); MessageHelper.ShowError("导出质检结果异常:" + ex.Message); } finally { this.CloseLoading(); //KGIS.Framework.Platform.Helper.ProgressHelper.CloseProcessBar(); if (saveFileDialog != null) { saveFileDialog.Dispose(); } } } /// /// 例外 /// /// /// private void MenuItem_Click(object sender, RoutedEventArgs e) { try { if (!gridPackage.IsMouseOver) { return; } if (gridPackage.SelectedItems == null || gridPackage.SelectedItems.Count <= 0) { return; } if (gridPackage.SelectedItems.Count > 1) { MessageHelper.Show("请选择单条数据!"); return; } RuleEntity ruleEntity = gridPackage.SelectedItems[0] as RuleEntity; if (!ruleEntity.ErrorType.Equals("二类错误")) { MessageHelper.Show("例外只适用于二类错误!"); return; } //通知主任务树定位图斑 Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "CheckResultLW", Content = ruleEntity }); } catch (Exception ex) { MessageHelper.Show(ex.Message); } } //修复 private void Repair_Click(object sender, RoutedEventArgs e) { try { if (!gridPackage.IsMouseOver) { return; } if (gridPackage.SelectedItems == null || gridPackage.SelectedItems.Count <= 0) { return; } if (gridPackage.SelectedItems.Count > 1) { MessageHelper.Show("请选择单条数据!"); return; } RuleEntity ruleEntity = gridPackage.SelectedItems[0] as RuleEntity; if (ruleEntity == null || !ruleEntity.ErrorType.Equals("一类错误") && ruleEntity.RuleCode != "TX003") { MessageHelper.Show("修复只适用于TX003类型的错误!"); return; } Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "RefreshGeometry", Content = ruleEntity }); } catch (Exception ex) { this.CloseLoading(); LogAPI.Debug("质检图形节点密度修复 异常:" + ex.Message); LogAPI.Debug("质检图形节点密度修复 异常:" + ex.StackTrace); MessageHelper.Show(ex.Message); } finally { this.CloseLoading(); } } } }