using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using DevExpress.XtraEditors; using KGIS.Plugin.LayerProperty.Interface; using ESRI.ArcGIS.Carto; using KGIS.Plugin.LayerProperty.Enum; using KGIS.Plugin.LayerProperty.Properties; using DevExpress.XtraTreeList.Nodes; using DevExpress.XtraTreeList; namespace KGIS.Plugin.LayerProperty.View.UC_Controls { public partial class UCFeatureRenderProperty : XtraUserControl, IUCPropertyPageEx, IPropertyPage { private IPropertyPage ucSimpleRender; private IPropertyPage ucUniqueValueRenderer; private IPropertyPage ucSymbolMatch; private IPropertyPage ucGraduateColorsRenderer; private IPropertyPage ucUniqueValueManyFieldsRenderer; private ILayer m_LayerProperty; private List ucList; private IPropertyPage m_CurrentProperty; private bool isDirty; public event System.EventHandler EditorChanged; public bool IsPageDirty { get { return this.isDirty; } set { this.isDirty = value; } } public int Priority { get { throw new Exception("The method or operation is not implemented."); } set { throw new Exception("The method or operation is not implemented."); } } public string Title { get { throw new Exception("The method or operation is not implemented."); } set { throw new Exception("The method or operation is not implemented."); } } public UCFeatureRenderProperty() { InitializeComponent(); this.ucList = new List(); } public void InitUC(object layerProperty) { try { this.m_LayerProperty = (layerProperty as ILayer); this.InitRenderTree(); this.ucSimpleRender = null; this.ucUniqueValueRenderer = null; this.ucSymbolMatch = null; this.ucList = new List(); IGeoFeatureLayer geoFeatureLayer = layerProperty as IGeoFeatureLayer; IFeatureRenderer renderer = geoFeatureLayer.Renderer; enumFeatureRendererType featureRendererType = this.GetFeatureRendererType(renderer); switch (featureRendererType) { case enumFeatureRendererType.SimpleRenderer: if (this.ucSimpleRender == null) { this.pnRenderPage.Controls.Clear(); this.ucSimpleRender = new UCSimpleRender(); this.ucSimpleRender.Dock = DockStyle.Fill; this.ucSimpleRender.EditorChanged += new System.EventHandler(this.ucRender_EditorChanged); this.pnRenderPage.Controls.Add(this.ucSimpleRender as System.Windows.Forms.Control); this.AddUc(this.ucSimpleRender); this.picRenderType.Image = Resources.single; this.ucSimpleRender.IsPageDirty = false; } this.m_CurrentProperty = this.ucSimpleRender; break; case enumFeatureRendererType.UniqueValueRenderer: if (this.ucUniqueValueRenderer == null) { this.pnRenderPage.Controls.Clear(); this.ucUniqueValueRenderer = new UCUniqueValueRenderer(); this.ucUniqueValueRenderer.Dock = DockStyle.Fill; this.ucUniqueValueRenderer.EditorChanged += new System.EventHandler(this.ucRender_EditorChanged); this.pnRenderPage.Controls.Add(this.ucUniqueValueRenderer as System.Windows.Forms.Control); this.AddUc(this.ucUniqueValueRenderer); this.picRenderType.Image = Resources.unique; this.ucUniqueValueRenderer.IsPageDirty = false; } this.m_CurrentProperty = this.ucUniqueValueRenderer; break; case enumFeatureRendererType.UniqueValueManyFieldsRenderer: if (this.ucUniqueValueManyFieldsRenderer == null) { this.pnRenderPage.Controls.Clear(); this.ucUniqueValueManyFieldsRenderer = new UCUniqueValueManyFieldsRenderer(); this.ucUniqueValueManyFieldsRenderer.Dock = DockStyle.Fill; this.ucUniqueValueManyFieldsRenderer.EditorChanged += new System.EventHandler(this.ucRender_EditorChanged); this.pnRenderPage.Controls.Add(this.ucUniqueValueManyFieldsRenderer as System.Windows.Forms.Control); this.picRenderType.Image = Resources.unique; this.AddUc(this.ucUniqueValueManyFieldsRenderer); this.ucUniqueValueManyFieldsRenderer.IsPageDirty = false; } this.m_CurrentProperty = this.ucUniqueValueManyFieldsRenderer; break; case enumFeatureRendererType.MatchSymbolInStyleFieldRenderer: if (this.ucSymbolMatch == null) { this.pnRenderPage.Controls.Clear(); this.ucSymbolMatch = new UCSymbolMatch(); this.ucSymbolMatch.Dock = DockStyle.Fill; this.ucSymbolMatch.EditorChanged += new System.EventHandler(this.ucRender_EditorChanged); this.pnRenderPage.Controls.Add(this.ucSymbolMatch as System.Windows.Forms.Control); this.picRenderType.Image = Resources.unique; this.AddUc(this.ucSymbolMatch); this.ucSymbolMatch.IsPageDirty = false; } this.m_CurrentProperty = this.ucSymbolMatch; break; case enumFeatureRendererType.GraduatedColorsRenderer: if (this.ucGraduateColorsRenderer == null) { this.pnRenderPage.Controls.Clear(); this.ucGraduateColorsRenderer = new UCGraduateColorsRenderer(); this.ucGraduateColorsRenderer.Dock = DockStyle.Fill; this.ucGraduateColorsRenderer.EditorChanged += new System.EventHandler(this.ucRender_EditorChanged); this.pnRenderPage.Controls.Add(this.ucGraduateColorsRenderer as System.Windows.Forms.Control); this.picRenderType.Image = Resources.unique; this.AddUc(this.ucGraduateColorsRenderer); this.ucGraduateColorsRenderer.IsPageDirty = false; } this.m_CurrentProperty = this.ucGraduateColorsRenderer; break; } this.SelectNode(featureRendererType); this.m_CurrentProperty.InitUC(layerProperty); this.CurrentRenderChanged(); } catch (Exception ex) { //RdbUtil.AddException(ex); } } public void Write2Prop() { if (this.m_CurrentProperty != null) { this.m_CurrentProperty.Write2Prop(); this.isDirty = false; } } private void ucRender_EditorChanged(object sender, System.EventArgs e) { this.InvokeEditValueChanged(sender, e); } public bool CanWrite2Prop() { return this.m_CurrentProperty.CanWrite2Prop(); } public void SetDefaultValue(object value) { } private void InvokeEditValueChanged(object sender, System.EventArgs e) { if (this.EditorChanged != null) { this.EditorChanged(sender, e); } this.m_CurrentProperty.IsPageDirty = true; this.isDirty = true; } private void AddUc(IPropertyPage uc) { if (!this.ucList.Contains(uc)) { this.ucList.Add(uc); } } private void InitRenderTree() { try { this.tlstRendererType.Nodes.Clear(); TreeListNode treeListNode = this.tlstRendererType.AppendNode(new object[] { "特征", enumFeatureRendererType.None }, null); treeListNode.Tag = null; TreeListNode treeListNode2 = this.tlstRendererType.AppendNode(new object[] { "单值", enumFeatureRendererType.SimpleRenderer }, treeListNode); treeListNode2.Tag = enumFeatureRendererType.SimpleRenderer; treeListNode = this.tlstRendererType.AppendNode(new object[] { "种类", enumFeatureRendererType.None }, null); treeListNode.Tag = null; treeListNode2 = this.tlstRendererType.AppendNode(new object[] { "唯一值", enumFeatureRendererType.UniqueValueRenderer }, treeListNode); treeListNode2.Tag = enumFeatureRendererType.UniqueValueRenderer; treeListNode2 = this.tlstRendererType.AppendNode(new object[] { "唯一值,多字段", enumFeatureRendererType.UniqueValueManyFieldsRenderer }, treeListNode); treeListNode2.Tag = enumFeatureRendererType.UniqueValueManyFieldsRenderer; treeListNode2 = this.tlstRendererType.AppendNode(new object[] { "符号匹配", enumFeatureRendererType.MatchSymbolInStyleFieldRenderer }, treeListNode); treeListNode2.Tag = enumFeatureRendererType.MatchSymbolInStyleFieldRenderer; treeListNode = this.tlstRendererType.AppendNode(new object[] { "数量", enumFeatureRendererType.None }, null); treeListNode.Tag = null; treeListNode2 = this.tlstRendererType.AppendNode(new object[] { "等级颜色", enumFeatureRendererType.GraduatedColorsRenderer }, treeListNode); treeListNode2.Tag = enumFeatureRendererType.GraduatedColorsRenderer; } catch (Exception ex) { //RdbUtil.AddException(ex); } } private void SelectNode(enumFeatureRendererType type) { try { TreeListNode focusedNode = this.tlstRendererType.FindNodeByFieldValue(this.colType.FieldName, type); this.tlstRendererType.FocusedNode = null; this.tlstRendererType.FocusedNode = focusedNode; } catch (Exception ex) { //RdbUtil.AddException(ex); } } private void tlstRendererType_FocusedNodeChanged(object sender, FocusedNodeChangedEventArgs e) { try { if (e.Node != null) { TreeListNode treeListNode = e.Node; if (e.Node.HasChildren) { this.tlstRendererType.CollapseAll(); e.Node.ExpandAll(); e.Node.FirstNode.Selected = true; this.tlstRendererType.FocusedNode = e.Node.FirstNode; treeListNode = e.Node.FirstNode; } if (treeListNode.Tag == null) return; switch ((enumFeatureRendererType)treeListNode.Tag) { case enumFeatureRendererType.SimpleRenderer: if (this.m_CurrentProperty != this.ucSimpleRender) { this.pnRenderPage.Controls.Clear(); if (this.ucSimpleRender == null) { this.ucSimpleRender = new UCSimpleRender(); this.ucSimpleRender.Dock = DockStyle.Fill; this.ucSimpleRender.EditorChanged += new System.EventHandler(this.ucRender_EditorChanged); this.AddUc(this.ucSimpleRender); } this.ucSimpleRender.InitUC(this.m_LayerProperty); this.picRenderType.Image = Resources.unique; this.pnRenderPage.Controls.Add(this.ucSimpleRender as System.Windows.Forms.Control); this.m_CurrentProperty = this.ucSimpleRender; } break; case enumFeatureRendererType.UniqueValueRenderer: if (this.m_CurrentProperty != this.ucUniqueValueRenderer) { this.pnRenderPage.Controls.Clear(); if (this.ucUniqueValueRenderer == null) { this.ucUniqueValueRenderer = new UCUniqueValueRenderer(); this.ucUniqueValueRenderer.Dock = DockStyle.Fill; this.ucUniqueValueRenderer.EditorChanged += new System.EventHandler(this.ucRender_EditorChanged); this.AddUc(this.ucUniqueValueRenderer); } this.ucUniqueValueRenderer.InitUC(this.m_LayerProperty); this.picRenderType.Image = Resources.unique; this.pnRenderPage.Controls.Add(this.ucUniqueValueRenderer as System.Windows.Forms.Control); this.m_CurrentProperty = this.ucUniqueValueRenderer; } break; case enumFeatureRendererType.UniqueValueManyFieldsRenderer: if (this.m_CurrentProperty != this.ucUniqueValueManyFieldsRenderer) { this.pnRenderPage.Controls.Clear(); if (this.ucUniqueValueManyFieldsRenderer == null) { this.ucUniqueValueManyFieldsRenderer = new UCUniqueValueManyFieldsRenderer(); this.ucUniqueValueManyFieldsRenderer.Dock = DockStyle.Fill; this.ucUniqueValueManyFieldsRenderer.EditorChanged += new System.EventHandler(this.ucRender_EditorChanged); this.AddUc(this.ucUniqueValueManyFieldsRenderer); } this.ucUniqueValueManyFieldsRenderer.InitUC(this.m_LayerProperty); this.picRenderType.Image = Resources.unique; this.pnRenderPage.Controls.Add(this.ucUniqueValueManyFieldsRenderer as System.Windows.Forms.Control); this.m_CurrentProperty = this.ucUniqueValueManyFieldsRenderer; } break; case enumFeatureRendererType.MatchSymbolInStyleFieldRenderer: if (this.m_CurrentProperty != this.ucSymbolMatch) { this.pnRenderPage.Controls.Clear(); if (this.ucSymbolMatch == null) { this.ucSymbolMatch = new UCSymbolMatch(); this.ucSymbolMatch.Dock = DockStyle.Fill; this.ucSymbolMatch.EditorChanged += new System.EventHandler(this.ucRender_EditorChanged); this.AddUc(this.ucSymbolMatch); } this.ucSymbolMatch.InitUC(this.m_LayerProperty); this.picRenderType.Image = Resources.unique; this.pnRenderPage.Controls.Add(this.ucSymbolMatch as System.Windows.Forms.Control); this.m_CurrentProperty = this.ucSymbolMatch; } break; case enumFeatureRendererType.GraduatedColorsRenderer: if (this.m_CurrentProperty != this.ucGraduateColorsRenderer) { this.pnRenderPage.Controls.Clear(); if (this.ucGraduateColorsRenderer == null) { this.ucGraduateColorsRenderer = new UCGraduateColorsRenderer(); this.ucGraduateColorsRenderer.Dock = DockStyle.Fill; this.ucGraduateColorsRenderer.EditorChanged += new System.EventHandler(this.ucRender_EditorChanged); this.AddUc(this.ucGraduateColorsRenderer); } this.ucGraduateColorsRenderer.InitUC(this.m_LayerProperty); this.picRenderType.Image = Resources.unique; this.pnRenderPage.Controls.Add(this.ucGraduateColorsRenderer as System.Windows.Forms.Control); this.m_CurrentProperty = this.ucGraduateColorsRenderer; } break; } this.InvokeEditValueChanged(null, null); this.CurrentRenderChanged(); } } catch (Exception ex) { //RdbUtil.AddException(ex); } } private void CurrentRenderChanged() { try { if (this.m_CurrentProperty == this.ucSimpleRender) { this.lblRenderDesc.Text = "简单符号化"; } else { if (this.m_CurrentProperty == this.ucSymbolMatch) { this.lblRenderDesc.Text = "根据字段值到符号库中进行符号匹配"; } else { if (this.m_CurrentProperty == this.ucUniqueValueManyFieldsRenderer) { this.lblRenderDesc.Text = "通过三个字段值的组合对图层要素进行分类符号化"; } else { if (this.m_CurrentProperty == this.ucUniqueValueRenderer) { this.lblRenderDesc.Text = "唯一值符号化:按照唯一字段的字段值对图层要素进行分类符号化"; } else { if (this.m_CurrentProperty == this.ucGraduateColorsRenderer) { this.lblRenderDesc.Text = "颜色分级"; } } } } } } catch (Exception ex) { //RdbUtil.AddException(ex); } } private void btnImportFormLayer_Click(object sender, System.EventArgs e) { try { FormImportFeatureSymbology formImportFeatureSymbology = new FormImportFeatureSymbology(); if (this.m_LayerProperty != null) { formImportFeatureSymbology.Init(null, this.m_LayerProperty as IFeatureLayer); if (formImportFeatureSymbology.ShowDialog(base.FindForm()) == DialogResult.OK) { IFeatureRenderer featureRenderer = formImportFeatureSymbology.FeatureRenderer; if (featureRenderer is ISimpleRenderer) { this.SelectNode(enumFeatureRendererType.SimpleRenderer); } else { if (featureRenderer is IUniqueValueRenderer) { IUniqueValueRenderer uniqueValueRenderer = featureRenderer as IUniqueValueRenderer; if (uniqueValueRenderer.FieldCount > 1) { this.SelectNode(enumFeatureRendererType.UniqueValueManyFieldsRenderer); } else { if (uniqueValueRenderer.LookupStyleset != "") { this.SelectNode(enumFeatureRendererType.MatchSymbolInStyleFieldRenderer); } else { this.SelectNode(enumFeatureRendererType.UniqueValueRenderer); } } } else { if (!(featureRenderer is IClassBreaksRenderer) && !(featureRenderer is IProportionalSymbolRenderer)) { IChartRenderer arg_AA_0 = featureRenderer as IChartRenderer; } } } if (this.m_CurrentProperty != null) { this.m_CurrentProperty.SetDefaultValue(featureRenderer); } } } } catch (Exception ex) { //RdbUtil.AddException(ex); } } private enumFeatureRendererType GetFeatureRendererType(IFeatureRenderer featureRenderer) { enumFeatureRendererType result = enumFeatureRendererType.SimpleRenderer; try { if (featureRenderer is IUniqueValueRenderer) { IUniqueValueRenderer uniqueValueRenderer = featureRenderer as IUniqueValueRenderer; if (uniqueValueRenderer.FieldCount == 1 && uniqueValueRenderer.LookupStyleset == "") { result = enumFeatureRendererType.UniqueValueRenderer; } else { if (uniqueValueRenderer.FieldCount > 1) { result = enumFeatureRendererType.UniqueValueManyFieldsRenderer; } else { result = enumFeatureRendererType.MatchSymbolInStyleFieldRenderer; } } } else { if (featureRenderer is IBivariateRenderer) { result = enumFeatureRendererType.BiUniqueValueRenderer; } else { if (featureRenderer is ISimpleRenderer) { result = enumFeatureRendererType.SimpleRenderer; } else { if (featureRenderer is IChartRenderer) { result = enumFeatureRendererType.ChartRenderer; } else { if (featureRenderer is IPieChartRenderer) { result = enumFeatureRendererType.PieChartRenderer; } else { if (featureRenderer is IClassBreaksRenderer) { result = enumFeatureRendererType.GraduatedColorsRenderer; } } } } } } } catch (Exception ex) { //RdbUtil.AddException(ex); } return result; } public int Activate() { throw new Exception("The method or operation is not implemented."); } public void Deactivate() { throw new Exception("The method or operation is not implemented."); } public void Cancel() { throw new Exception("The method or operation is not implemented."); } } }