You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
575 lines
21 KiB
575 lines
21 KiB
using ESRI.ArcGIS.Carto; |
|
using ESRI.ArcGIS.Geodatabase; |
|
using ESRI.ArcGIS.Geometry; |
|
using KGIS.Framework.Maps; |
|
using KGIS.Framework.Platform; |
|
using KGIS.Framework.Utils; |
|
using KGIS.Framework.Utils.ExtensionMethod; |
|
using KGIS.Framework.Views; |
|
using Kingo.PluginServiceInterface; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.Collections.ObjectModel; |
|
using System.ComponentModel; |
|
using System.Data; |
|
using System.Linq; |
|
using System.Runtime.InteropServices; |
|
using System.Text; |
|
using System.Threading.Tasks; |
|
using System.Windows; |
|
using System.Windows.Controls; |
|
using System.Windows.Data; |
|
using System.Windows.Documents; |
|
using System.Windows.Input; |
|
using System.Windows.Media; |
|
using System.Windows.Media.Imaging; |
|
using System.Windows.Navigation; |
|
using System.Windows.Shapes; |
|
using UIShell.OSGi; |
|
|
|
namespace Kingo.Plugin.BHTB_Extract.View |
|
{ |
|
/// <summary> |
|
/// UcZYQMagr.xaml 的交互逻辑 |
|
/// </summary> |
|
public partial class UcZYQMagr : UserControl, IDockPanel3 |
|
{ |
|
private IFeatureLayer _Layer = null; |
|
private DataTable _Data = new DataTable(); |
|
private string queryWhere = string.Empty; |
|
|
|
public event EventHandler CloseViewHandler; |
|
|
|
public bool IsDockToPanel { get; set; } |
|
public DockStyle DockToPanelStyle { get; set; } |
|
public bool IsShowInMap { 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 string packUri { get { return @"/KUI;component/Themes/Generic"; } } |
|
|
|
private static UcZYQMagr instance; |
|
public static UcZYQMagr Instance |
|
{ |
|
get |
|
{ |
|
if (instance == null) |
|
{ |
|
instance = new UcZYQMagr(); |
|
} |
|
return instance; |
|
} |
|
} |
|
private UcZYQMagr() |
|
{ |
|
InitializeComponent(); |
|
|
|
|
|
//System.Reflection.Assembly assembly = System.Reflection.Assembly.LoadFrom("KUI.dll"); |
|
//System.Windows.ResourceDictionary myResourceDictionary = System.Windows.Application.LoadComponent(new Uri(packUri + ".xaml", UriKind.Relative)) as System.Windows.ResourceDictionary; |
|
//this.Resources.MergedDictionaries.Add(myResourceDictionary); |
|
|
|
this.DockAreas = KGIS.Framework.Views.DockStyle.DockLeft; |
|
|
|
this.FloatSize = new System.Drawing.Size(230, 160); |
|
this.DefaultArea = KGIS.Framework.Views.DockStyle.DockLeft; |
|
this.ShowCloseButton = false; |
|
this.ShowAutoHideButton = true; |
|
this.Title = "作业区管理"; |
|
this.IsShowInMap = false; |
|
this.DockHeight = 160; |
|
this.DockWidth = 230; |
|
this.IsDockToPanel = false; |
|
this.DockToPanelStyle = KGIS.Framework.Views.DockStyle.DockLeft | KGIS.Framework.Views.DockStyle.Document; |
|
|
|
_Layer = MapsManager.Instance.MapService.GetFeatureLayerByName("ZYQ"); |
|
} |
|
|
|
private void ConstructColumn(IFields fields) |
|
{ |
|
if (fields != null) |
|
{ |
|
_Data.Clear(); |
|
_Data.PrimaryKey = null; |
|
_Data.Columns.Clear(); |
|
|
|
AddInitFieldData(fields); |
|
string oidField = "OBJECTID"; |
|
if (!_Data.Columns.Contains(oidField) && _Data.Columns.Contains("FID")) |
|
{ |
|
oidField = "FID"; |
|
} |
|
_Data.PrimaryKey = new DataColumn[] { _Data.Columns[oidField] }; |
|
} |
|
} |
|
private void AddInitFieldData(IFields fields) |
|
{ |
|
try |
|
{ |
|
for (int i = 0; i < fields.FieldCount; i++) |
|
{ |
|
IField field = fields.get_Field(i); |
|
if (field.Name.ToUpper().EndsWith("SHAPE")) |
|
continue; |
|
DataColumn col = new DataColumn(); |
|
col.ExtendedProperties.Add("index", i); |
|
col.ColumnName = field.Name; |
|
col.Caption = field.AliasName; |
|
switch (field.Type) |
|
{ |
|
case esriFieldType.esriFieldTypeSmallInteger: |
|
col.DataType = typeof(short); |
|
break; |
|
case esriFieldType.esriFieldTypeInteger: |
|
col.DataType = typeof(int); |
|
break; |
|
case esriFieldType.esriFieldTypeSingle: |
|
break; |
|
case esriFieldType.esriFieldTypeDouble: |
|
col.DataType = typeof(double); |
|
break; |
|
case esriFieldType.esriFieldTypeString: |
|
col.DataType = typeof(string); |
|
break; |
|
case esriFieldType.esriFieldTypeDate: |
|
col.DataType = typeof(DateTime); |
|
break; |
|
case esriFieldType.esriFieldTypeOID: |
|
col.DataType = typeof(Int32); |
|
break; |
|
case esriFieldType.esriFieldTypeGeometry: |
|
break; |
|
case esriFieldType.esriFieldTypeBlob: |
|
break; |
|
case esriFieldType.esriFieldTypeRaster: |
|
break; |
|
case esriFieldType.esriFieldTypeGUID: |
|
break; |
|
case esriFieldType.esriFieldTypeGlobalID: |
|
break; |
|
case esriFieldType.esriFieldTypeXML: |
|
break; |
|
default: |
|
break; |
|
} |
|
col.ReadOnly = !field.Editable;//编辑状态启用默认是否可以编辑 |
|
if (_Data.Columns.Contains(col.ColumnName) == false)//不存在则添加 |
|
{ |
|
_Data.Columns.Add(col); |
|
} |
|
Marshal.ReleaseComObject(field); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("加载表格数据失败!" + ex); |
|
return; |
|
} |
|
|
|
} |
|
public TreeNode node = null; |
|
public void InitTreeView() |
|
{ |
|
try |
|
{ |
|
_Layer = MapsManager.Instance.MapService.GetFeatureLayerByName("ZYQ"); |
|
if (_Layer == null) return; |
|
ConstructColumn(this._Layer.FeatureClass.Fields); |
|
|
|
IAttributeTable AttrTable = _Layer as IAttributeTable; |
|
IQueryFilter queryfilter = new QueryFilterClass |
|
{ |
|
WhereClause = queryWhere |
|
}; |
|
//ITable table = SourceFeature as ITable; |
|
ICursor cursor = AttrTable.AttributeTable.Search(queryfilter, true); |
|
|
|
int count = AttrTable.AttributeTable.RowCount(queryfilter); |
|
IRow row = null; |
|
DataTable tempDt = _Data.Copy(); |
|
tempDt.Rows.Clear(); |
|
bool isExitFeatureXML = false;// JudgeExistsCurrentFeatureXML(); |
|
int columnCount = 0; |
|
int fieldIndex = 0; |
|
while ((row = cursor.NextRow()) != null) |
|
{ |
|
DataRow dr = tempDt.NewRow(); |
|
if (isExitFeatureXML) columnCount = tempDt.Columns.Count - 1; |
|
else columnCount = tempDt.Columns.Count; |
|
for (int i = 0; i < columnCount; i++) |
|
{ |
|
if (isExitFeatureXML) |
|
fieldIndex = (int)tempDt.Columns[row.Fields.FindField(tempDt.Columns[i].ColumnName)].ExtendedProperties["index"]; |
|
else |
|
fieldIndex = (int)tempDt.Columns[i].ExtendedProperties["index"]; |
|
object obj = row.get_Value(fieldIndex); |
|
if (obj == null) |
|
{ |
|
continue; |
|
} |
|
else |
|
{ |
|
if (obj.ToString().Contains("1899/12/30 0:00:00")) |
|
{ |
|
obj = DBNull.Value; |
|
} |
|
} |
|
dr[i] = obj; |
|
} |
|
tempDt.Rows.Add(dr); |
|
if (tempDt.Rows.Count == 10000) |
|
{ |
|
|
|
} |
|
} |
|
_Data = tempDt.Copy(); |
|
Marshal.ReleaseComObject(AttrTable); |
|
Marshal.ReleaseComObject(_Layer); |
|
_Data = tempDt.Copy(); |
|
ObservableCollection<TreeNode> itemList = new ObservableCollection<TreeNode>(); |
|
node = new TreeNode() |
|
{ |
|
Name = "作业区列表", |
|
Paixu = 0, |
|
IsExpanded = true, |
|
Icon = "/Kingo.Plugin.BHTB_Extract;component/Resources/标记.png", |
|
IsParent = true, |
|
Data = null |
|
}; |
|
node.Nodes = new ObservableCollection<TreeNode>(); |
|
foreach (DataRow _dr in _Data.Rows) |
|
{ |
|
TreeNode zyqNode = new TreeNode() |
|
{ |
|
Name = _dr["ZYQBH"] is DBNull ? _dr["ZYQMC"].ToTrim() : _dr["ZYQBH"].ToString(), |
|
Paixu = 0, |
|
IsExpanded = true, |
|
Icon = "pack://application:,,,/Kingo.Plugin.DataDictionary;component/Resources/zrz.png", |
|
IsParent = true, |
|
Data = _dr["OBJECTID"] |
|
}; |
|
switch (_dr["ZYQZT"].ToTrim()) |
|
{ |
|
case "0": |
|
zyqNode.Icon = "/Kingo.Plugin.BHTB_Extract;component/Resources/未完成.png"; |
|
break; |
|
case "1": |
|
zyqNode.Icon = "/Kingo.Plugin.BHTB_Extract;component/Resources/进行中.png"; |
|
break; |
|
case "2": |
|
zyqNode.Icon = "/Kingo.Plugin.BHTB_Extract;component/Resources/已完成.png"; |
|
break; |
|
} |
|
zyqNode.cMenu = new ContextMenu(); |
|
MenuItem tmpitem = new MenuItem(); |
|
tmpitem.Tag = zyqNode; |
|
tmpitem.Header = "已完成"; |
|
tmpitem.Click += (s, e) => |
|
{ |
|
MenuItem item = s as MenuItem; |
|
if (item.Tag == null) return; |
|
|
|
TreeNode tempNode = item.Tag as TreeNode; |
|
int idx = _Layer.FeatureClass.FindField("ZYQZT"); |
|
if (idx == -1) return; |
|
|
|
IFeature f = _Layer.FeatureClass.GetFeature(tempNode.Data.ToInt()); |
|
f.Value[idx] = 2; |
|
f.Store(); |
|
tempNode.Icon = "/Kingo.Plugin.BHTB_Extract;component/Resources/已完成.png"; |
|
Marshal.ReleaseComObject(f); |
|
|
|
}; |
|
zyqNode.cMenu.Items.Add(tmpitem); |
|
tmpitem = new MenuItem(); |
|
tmpitem.Tag = zyqNode; |
|
tmpitem.Header = "进行中"; |
|
tmpitem.Click += (s, e) => |
|
{ |
|
MenuItem item = s as MenuItem; |
|
if (item.Tag == null) return; |
|
|
|
TreeNode tempNode = item.Tag as TreeNode; |
|
int idx = _Layer.FeatureClass.FindField("ZYQZT"); |
|
if (idx == -1) return; |
|
|
|
IFeature f = _Layer.FeatureClass.GetFeature(tempNode.Data.ToInt()); |
|
f.Value[idx] = 1; |
|
f.Store(); |
|
tempNode.Icon = "/Kingo.Plugin.BHTB_Extract;component/Resources/进行中.png"; |
|
Marshal.ReleaseComObject(f); |
|
}; |
|
zyqNode.cMenu.Items.Add(tmpitem); |
|
tmpitem = new MenuItem(); |
|
tmpitem.Tag = zyqNode; |
|
tmpitem.Header = "未开始"; |
|
tmpitem.Click += (s, e) => |
|
{ |
|
MenuItem item = s as MenuItem; |
|
if (item.Tag == null) return; |
|
|
|
TreeNode tempNode = item.Tag as TreeNode; |
|
int idx = _Layer.FeatureClass.FindField("ZYQZT"); |
|
if (idx == -1) return; |
|
|
|
IFeature f = _Layer.FeatureClass.GetFeature(tempNode.Data.ToInt()); |
|
f.Value[idx] = 0; |
|
f.Store(); |
|
tempNode.Icon = "/Kingo.Plugin.BHTB_Extract;component/Resources/未完成.png"; |
|
Marshal.ReleaseComObject(f); |
|
}; |
|
zyqNode.cMenu.Items.Add(tmpitem); |
|
node.Nodes.Add(zyqNode); |
|
//TreeNode subNode = new TreeNode(); |
|
//subNode.Text = _dr["ZYQBH"] is DBNull ? "" : _dr["ZYQBH"].ToString(); |
|
//subNode.Tag = _dr["OBJECTID"]; |
|
//node.Nodes.Add(subNode); |
|
} |
|
itemList.Add(node); |
|
this.tvTypes.ItemsSource = null; |
|
tvTypes.ItemsSource = itemList; |
|
//tvDirectory.Nodes.Add(node); |
|
if (node.Nodes.Count != 0) |
|
node.Nodes[0].Checked = true; |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("初始化作业区列表时发生异常,异常信息如下:" + ex); |
|
return; |
|
} |
|
} |
|
private bool isUpdatingSelection = false; |
|
private void tvTypes_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e) |
|
{ |
|
try |
|
{ |
|
if (!isUpdatingSelection) |
|
{ |
|
// 标记正在更新选择 |
|
isUpdatingSelection = true; |
|
|
|
TreeNode node = e.NewValue as TreeNode; |
|
if (node == null || node.Data == null) return; |
|
if (_Layer == null) return; |
|
IGeometry currentGeo = _Layer.FeatureClass.GetFeature(node.Data.ToInt()).ShapeCopy; |
|
MapsManager.Instance.MapService.Zoom(currentGeo); |
|
//遮罩 |
|
//MaskRectangleHelper.ShowMask(node.Data.ToInt()); |
|
|
|
//有问题 列表选择 此执行两次 |
|
IUcMulitMapControlHelper ucMulitMapControlHelper = BundleRuntime.Instance.GetFirstOrDefaultService<IUcMulitMapControlHelper>(); |
|
if (ucMulitMapControlHelper != null) |
|
{ |
|
ucMulitMapControlHelper.SetMask(currentGeo); |
|
} |
|
ShowMaskHelper showMaskForBHTBHelper = new ShowMaskHelper(); |
|
showMaskForBHTBHelper.axMapControl = MapsManager.Instance.MapService.getAxMapControl(); |
|
showMaskForBHTBHelper.ShowMask(currentGeo); |
|
//showMaskForBHTBHelper.ShowAllMask(null, currentGeo); |
|
|
|
// 取消标记更新选择 |
|
isUpdatingSelection = false; |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("点击作业区列表刷新时发生异常,异常信息如下:" + ex); |
|
return; |
|
} |
|
} |
|
|
|
private void tvTypes_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) |
|
{ |
|
var treeViewItem = VisualUpwardSearch<TreeViewItem>(e.OriginalSource as DependencyObject) as TreeViewItem; |
|
if (treeViewItem != null) |
|
{ |
|
treeViewItem.Focus(); |
|
e.Handled = true; |
|
} |
|
} |
|
|
|
private void tvTypes_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e) |
|
{ |
|
var treeViewItem = VisualUpwardSearch<TreeViewItem>(e.OriginalSource as DependencyObject) as TreeViewItem; |
|
if (treeViewItem != null) |
|
{ |
|
treeViewItem.Focus(); |
|
e.Handled = true; |
|
} |
|
} |
|
static DependencyObject VisualUpwardSearch<T>(DependencyObject source) |
|
{ |
|
while (source != null && source.GetType() != typeof(T)) |
|
source = VisualTreeHelper.GetParent(source); |
|
|
|
return source; |
|
} |
|
|
|
public void AddMask(int selectIdZYQ) |
|
{ |
|
try |
|
{ |
|
if (selectIdZYQ < 0) return; |
|
_Layer = MapsManager.Instance.MapService.GetFeatureLayerByName("ZYQ"); |
|
if (_Layer == null) return; |
|
selectIdZYQ++; |
|
IGeometry currentGeo = _Layer.FeatureClass.GetFeature(selectIdZYQ).ShapeCopy; |
|
if (currentGeo == null || currentGeo.IsEmpty) return; |
|
ShowMaskHelper showMaskForBHTBHelper = new ShowMaskHelper(); |
|
showMaskForBHTBHelper.axMapControl = MapsManager.Instance.MapService.getAxMapControl(); |
|
showMaskForBHTBHelper.ShowMask(currentGeo, false); |
|
} |
|
catch (Exception ex) |
|
{ |
|
|
|
return; |
|
} |
|
|
|
|
|
} |
|
|
|
public void ShowPanel() |
|
{ |
|
Platform.Instance.OpenView(this, false); |
|
//MapsManager.Instance.MapService.ProjectClosed += (s, e) => |
|
//{ |
|
// this.ClosePanel(); |
|
//}; |
|
} |
|
|
|
public void ClosePanel() |
|
{ |
|
Platform.Instance.CloseView(this); |
|
} |
|
|
|
public void ClosePanelInvoke() |
|
{ |
|
CloseViewHandler?.Invoke(null, null); |
|
} |
|
|
|
public void ClearData() |
|
{ |
|
this.tvTypes.ItemsSource = null; |
|
} |
|
|
|
public int GetCheckedID() |
|
{ |
|
if (tvTypes.ItemsSource != null) |
|
{ |
|
ObservableCollection<TreeNode> tvTreeNode = tvTypes.ItemsSource as ObservableCollection<TreeNode>; |
|
if (tvTreeNode != null) |
|
return tvTreeNode[0].Nodes.FindIndex(a => a.Checked == true); |
|
} |
|
return -1; |
|
} |
|
|
|
} |
|
public class TreeNode : System.ComponentModel.INotifyPropertyChanged |
|
{ |
|
public event PropertyChangedEventHandler PropertyChanged; |
|
|
|
private void PropertyChange(string pProperty) |
|
{ |
|
if (this.PropertyChanged != null) |
|
{ |
|
this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs(pProperty)); |
|
} |
|
} |
|
#region Property |
|
|
|
private string _Text; |
|
/// <summary> |
|
/// 显示的文本值 |
|
/// </summary> |
|
public string Name |
|
{ |
|
get { return this._Text; } |
|
set |
|
{ |
|
this._Text = value; |
|
PropertyChange("Name"); |
|
} |
|
} |
|
|
|
private ContextMenu _cMenu; |
|
public ContextMenu cMenu |
|
{ |
|
get { return this._cMenu; } |
|
set { this._cMenu = value; } |
|
} |
|
private bool? _Checked; |
|
/// <summary> |
|
/// 是否选中 |
|
/// </summary> |
|
public bool? Checked |
|
{ |
|
get { return this._Checked; } |
|
set { this._Checked = value; } |
|
} |
|
|
|
private bool _IsExpanded; |
|
private string icon; |
|
|
|
|
|
/// <summary> |
|
/// 是否展开 |
|
/// </summary> |
|
public bool IsExpanded |
|
{ |
|
get { return this._IsExpanded; } |
|
set { this._IsExpanded = value; } |
|
} |
|
|
|
/// <summary> |
|
/// 节点图标:相对路径 |
|
/// </summary> |
|
public string Icon |
|
{ |
|
get { return icon; } |
|
set |
|
{ |
|
icon = value; |
|
|
|
PropertyChange("Icon"); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 子节点,默认null |
|
/// </summary> |
|
public IList<TreeNode> Nodes { get; set; } |
|
|
|
/// <summary> |
|
/// 该节点数据项,默认null |
|
/// </summary> |
|
public virtual object Data { get; set; } |
|
|
|
public virtual bool IsOpenEdit { get; set; } |
|
public object Paixu { get; internal set; } |
|
public bool IsParent { get; internal set; } |
|
|
|
#endregion |
|
|
|
#region NodeX-构造函数(初始化) |
|
|
|
/// <summary> |
|
/// NodeX-构造函数(初始化) |
|
/// </summary> |
|
public TreeNode() |
|
{ |
|
this.Name = string.Empty; |
|
this.Icon = string.Empty; |
|
this.Checked = false; |
|
|
|
} |
|
|
|
#endregion |
|
} |
|
}
|
|
|