using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; using DevExpress.XtraEditors; using DevExpress.XtraEditors.Controls; using DevExpress.XtraTreeList; using DevExpress.XtraTreeList.Columns; using DevExpress.XtraTreeList.Nodes; using ESRI.ArcGIS.Carto; using KGIS.Plugin.LayerProperty.Interface; namespace KGIS.Plugin.LayerProperty.View.UC_Controls { internal class UCRasterRenderProperty : XtraUserControl, IUCPropertyPageEx, IPropertyPage { private List ucList; private IPropertyPage ucRasterRGBRenderer; private IPropertyPage UCRasterStretchRenderer; private IRasterLayer m_RasterLayer; private ILayer m_LayerProperty; private IPropertyPage m_CurrentProperty; private bool isDirty; private IContainer components; private PanelControl panelleft; private TextEdit lblRenderDesc; private SimpleButton btnImportFormLayer; private PictureEdit picRenderType; private TreeList tlstRendererType; private TreeListColumn colName; private TreeListColumn colType; private Panel pnRenderPage; public event System.EventHandler EditorChanged; public bool IsPageDirty { get { return this.isDirty; } set { this.isDirty = value; } } public int Priority { get { throw new NotImplementedException(); } set { throw new NotImplementedException(); } } public string Title { get { throw new NotImplementedException(); } set { throw new NotImplementedException(); } } public UCRasterRenderProperty() { this.InitializeComponent(); this.ucList = new List(); } public void InitUC(object layerProperty) { this.m_LayerProperty = (layerProperty as ILayer); this.m_RasterLayer = (layerProperty as IRasterLayer); if (this.m_RasterLayer == null) { return; } this.InitRenderTree(); this.ucRasterRGBRenderer = null; this.ucList = new List(); IRasterRenderer renderer = this.m_RasterLayer.Renderer; enumRasterRendererType rasterRendererType = this.GetRasterRendererType(renderer); switch (rasterRendererType) { case enumRasterRendererType.RasterRGBRenderer: if (this.ucRasterRGBRenderer == null) { this.pnRenderPage.Controls.Clear(); this.AddRasterRGBRendererUC(); } break; case enumRasterRendererType.RasterStretchColorRampRenderer: if (this.UCRasterStretchRenderer == null) { this.pnRenderPage.Controls.Clear(); this.AddRasterStretchRendererUC(); } break; } this.SelectNode(rasterRendererType); this.CurrentRenderChanged(); } private void AddUc(IPropertyPage uc) { if (!this.ucList.Contains(uc)) { this.ucList.Add(uc); } } public bool CanWrite2Prop() { return this.m_CurrentProperty.CanWrite2Prop(); } public void Write2Prop() { if (this.m_CurrentProperty != null) { this.m_CurrentProperty.Write2Prop(); this.isDirty = false; } } public void SetDefaultValue(object value) { } private void InitRenderTree() { try { this.tlstRendererType.Nodes.Clear(); TreeListNode treeListNode = this.tlstRendererType.AppendNode(new object[] { "拉伸", enumRasterRendererType.RasterStretchColorRampRenderer }, null); treeListNode.Tag = enumRasterRendererType.RasterStretchColorRampRenderer; if (this.m_RasterLayer.BandCount == 3) { TreeListNode treeListNode2 = this.tlstRendererType.AppendNode(new object[] { "RGB综合", enumRasterRendererType.RasterRGBRenderer }, null); treeListNode2.Tag = enumRasterRendererType.RasterRGBRenderer; } } catch { } } private enumRasterRendererType GetRasterRendererType(IRasterRenderer featureRenderer) { enumRasterRendererType result = enumRasterRendererType.RasterRGBRenderer; try { if (featureRenderer is IRasterClassifyColorRampRenderer) { result = enumRasterRendererType.RasterClassifyColorRampRenderer; } else { if (featureRenderer is IRasterDiscreteColorRenderer) { result = enumRasterRendererType.RasterDiscreteColorRenderer; } else { if (featureRenderer is IRasterRGBRenderer) { result = enumRasterRendererType.RasterRGBRenderer; } else { if (featureRenderer is IRasterStretchColorRampRenderer) { result = enumRasterRendererType.RasterStretchColorRampRenderer; } else { if (featureRenderer is IRasterUniqueValueRenderer) { result = enumRasterRendererType.RasterUniqueValueRenderer; } } } } } } catch (Exception ex) { //RdbUtil.AddException(ex); } return result; } private void SelectNode(enumRasterRendererType 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 ucRender_EditorChanged(object sender, System.EventArgs e) { this.InvokeEditValueChanged(sender, e); } 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 CurrentRenderChanged() { try { if (this.m_CurrentProperty == this.ucRasterRGBRenderer) { this.lblRenderDesc.Text = "通过三原色合成进行图像显示"; } } catch (Exception ex) { //RdbUtil.AddException(ex); } } private void tlstRendererType_FocusedNodeChanged(object sender, FocusedNodeChangedEventArgs e) { try { if (e.Node != null) { TreeListNode node = e.Node; if (node.Tag == null) return; switch ((enumRasterRendererType)node.Tag) { case enumRasterRendererType.RasterRGBRenderer: if (this.m_CurrentProperty != this.ucRasterRGBRenderer) { this.pnRenderPage.Controls.Clear(); this.AddRasterRGBRendererUC(); } break; case enumRasterRendererType.RasterStretchColorRampRenderer: if (this.m_CurrentProperty != this.UCRasterStretchRenderer) { this.pnRenderPage.Controls.Clear(); this.AddRasterStretchRendererUC(); } break; } this.InvokeEditValueChanged(null, null); this.CurrentRenderChanged(); } } catch { } } private void AddRasterRGBRendererUC() { if (this.ucRasterRGBRenderer == null) { this.ucRasterRGBRenderer = new UCRasterRGBRenderer(); this.ucRasterRGBRenderer.Dock = DockStyle.Fill; this.ucRasterRGBRenderer.EditorChanged += new System.EventHandler(this.ucRender_EditorChanged); this.AddUc(this.ucRasterRGBRenderer); } this.m_CurrentProperty = this.ucRasterRGBRenderer; this.ucRasterRGBRenderer.InitUC(this.m_LayerProperty); this.pnRenderPage.Controls.Add(this.ucRasterRGBRenderer as System.Windows.Forms.Control); } private void AddRasterStretchRendererUC() { if (this.UCRasterStretchRenderer == null) { this.UCRasterStretchRenderer = new UCRasterStretchRenderer(); this.UCRasterStretchRenderer.Dock = DockStyle.Fill; this.UCRasterStretchRenderer.EditorChanged += new System.EventHandler(this.ucRender_EditorChanged); this.AddUc(this.UCRasterStretchRenderer); } this.m_CurrentProperty = this.UCRasterStretchRenderer; this.UCRasterStretchRenderer.InitUC(this.m_LayerProperty); this.pnRenderPage.Controls.Add(this.UCRasterStretchRenderer as System.Windows.Forms.Control); } public int Activate() { return 0; } public void Deactivate() { } public void Cancel() { } private void btnImportFormLayer_Click(object sender, System.EventArgs e) { FormImportRasterRender formImportRasterRender = new FormImportRasterRender(); formImportRasterRender.InitForm(this.m_RasterLayer); DialogResult dialogResult = formImportRasterRender.ShowDialog(); if (dialogResult == DialogResult.OK) { IRasterRenderer rasterRenderer = formImportRasterRender.RasterRenderer; this.m_RasterLayer.Renderer = rasterRenderer; if (this.m_CurrentProperty != null) { this.m_CurrentProperty.SetDefaultValue(rasterRenderer); } } } protected override void Dispose(bool disposing) { if (disposing && this.components != null) { this.components.Dispose(); } base.Dispose(disposing); } private void InitializeComponent() { this.panelleft = new DevExpress.XtraEditors.PanelControl(); this.tlstRendererType = new DevExpress.XtraTreeList.TreeList(); this.colName = new DevExpress.XtraTreeList.Columns.TreeListColumn(); this.colType = new DevExpress.XtraTreeList.Columns.TreeListColumn(); this.picRenderType = new DevExpress.XtraEditors.PictureEdit(); this.lblRenderDesc = new DevExpress.XtraEditors.TextEdit(); this.btnImportFormLayer = new DevExpress.XtraEditors.SimpleButton(); this.pnRenderPage = new System.Windows.Forms.Panel(); ((System.ComponentModel.ISupportInitialize)(this.panelleft)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.tlstRendererType)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.picRenderType.Properties)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.lblRenderDesc.Properties)).BeginInit(); this.SuspendLayout(); // // panelleft // this.panelleft.Appearance.BackColor = System.Drawing.Color.Transparent; this.panelleft.Appearance.Options.UseBackColor = true; this.panelleft.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; this.panelleft.Controls.Add(this.tlstRendererType); this.panelleft.Controls.Add(this.picRenderType); this.panelleft.Dock = System.Windows.Forms.DockStyle.Left; this.panelleft.Location = new System.Drawing.Point(0, 0); this.panelleft.Name = "panelleft"; this.panelleft.Size = new System.Drawing.Size(157, 425); this.panelleft.TabIndex = 1; // // tlstRendererType // this.tlstRendererType.Columns.AddRange(new DevExpress.XtraTreeList.Columns.TreeListColumn[] { this.colName, this.colType}); this.tlstRendererType.Location = new System.Drawing.Point(6, 7); this.tlstRendererType.Name = "tlstRendererType"; this.tlstRendererType.Size = new System.Drawing.Size(148, 299); this.tlstRendererType.TabIndex = 5; this.tlstRendererType.FocusedNodeChanged += new DevExpress.XtraTreeList.FocusedNodeChangedEventHandler(this.tlstRendererType_FocusedNodeChanged); // // colName // this.colName.Caption = "名称"; this.colName.FieldName = "F_Name"; this.colName.MinWidth = 46; this.colName.Name = "colName"; this.colName.Visible = true; this.colName.VisibleIndex = 0; // // colType // this.colType.Caption = "渲染类型"; this.colType.FieldName = "F_Type"; this.colType.Name = "colType"; // // picRenderType // this.picRenderType.Location = new System.Drawing.Point(6, 309); this.picRenderType.Name = "picRenderType"; // // // this.picRenderType.Properties.Appearance.BackColor = System.Drawing.Color.Transparent; this.picRenderType.Properties.Appearance.Options.UseBackColor = true; this.picRenderType.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; this.picRenderType.Size = new System.Drawing.Size(145, 108); this.picRenderType.TabIndex = 4; // // lblRenderDesc // this.lblRenderDesc.EditValue = "根据字段值到符号库中进行符号匹配"; this.lblRenderDesc.Location = new System.Drawing.Point(159, 3); this.lblRenderDesc.Name = "lblRenderDesc"; // // // this.lblRenderDesc.Properties.ReadOnly = true; this.lblRenderDesc.Size = new System.Drawing.Size(385, 20); this.lblRenderDesc.TabIndex = 39; // // btnImportFormLayer // this.btnImportFormLayer.Location = new System.Drawing.Point(551, 1); this.btnImportFormLayer.Name = "btnImportFormLayer"; this.btnImportFormLayer.Size = new System.Drawing.Size(67, 27); this.btnImportFormLayer.TabIndex = 40; this.btnImportFormLayer.Text = "导入..."; this.btnImportFormLayer.Click += new System.EventHandler(this.btnImportFormLayer_Click); // // pnRenderPage // this.pnRenderPage.AutoScroll = true; this.pnRenderPage.BackColor = System.Drawing.Color.Transparent; this.pnRenderPage.Location = new System.Drawing.Point(157, 41); this.pnRenderPage.Name = "pnRenderPage"; this.pnRenderPage.Size = new System.Drawing.Size(484, 384); this.pnRenderPage.TabIndex = 41; // // UCRasterRenderProperty // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.pnRenderPage); this.Controls.Add(this.lblRenderDesc); this.Controls.Add(this.btnImportFormLayer); this.Controls.Add(this.panelleft); this.Name = "UCRasterRenderProperty"; this.Size = new System.Drawing.Size(642, 425); ((System.ComponentModel.ISupportInitialize)(this.panelleft)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.tlstRendererType)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.picRenderType.Properties)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.lblRenderDesc.Properties)).EndInit(); this.ResumeLayout(false); } void IUCPropertyPageEx.Hide() { base.Hide(); } void IUCPropertyPageEx.Show() { base.Show(); } } public enum enumRasterRendererType { RasterClassifyColorRampRenderer, RasterColormapRenderer, RasterRGBRenderer, RasterStretchColorRampRenderer, RasterUniqueValueRenderer, RasterDiscreteColorRenderer } }