• AE中的面符号(填充符号)渲染


    窗口设计:

     

    所用到的控件:axSymbolControl、groupBox、MarkerSymbol(Button)、Label、Button、NumericUpDown

    符号窗口代码(记得绑定【确定】【取消】窗口加载等事件):

        public partial class SymbolForm : Form

        {

            private IMapControlDefault m_mapControl;

            private ILayer m_Layer;

            private ILegendClass m_LegendClass;

            private ISymbologyStyleClass m_SymbologyStyleClass;

     

            /// <summary>

            /// 符号属性集合

            /// </summary>

            private Dictionary<int, double> outlineWidths;

            private Dictionary<int, Color> outlineColors;

            private Dictionary<int, Color> fillColors;

     

     

            public SymbolForm(IMapControlDefault m_mapControl, ILayer m_Layer, ILegendClass m_LegendClass)

            {

                InitializeComponent();

                            // 初始化地图符号对象

                this.m_mapControl = m_mapControl;

                this.m_Layer = m_Layer;

                this.m_LegendClass = m_LegendClass;

     

                // 初始化符号属性集合

                this.outlineWidths = new Dictionary<int, double>();

                this.outlineColors = new Dictionary<int, Color>();

                this.fillColors = new Dictionary<int, Color>();

     

                // 初始化符号控件

                Init();

            }

            private void Init()

            {

                //此处需要在文件中找到ESRI.ServerStyle文件复制到文件夹下

                axSymbologyControl1.LoadStyleFile(AppDomain.CurrentDomain.BaseDirectory + " ESRI.ServerStyle");

                axSymbologyControl1.StyleClass = esriSymbologyStyleClass.esriStyleClassFillSymbols;

                m_SymbologyStyleClass = axSymbologyControl1.GetStyleClass(axSymbologyControl1.StyleClass);

     

                // 添加当前符号

                IStyleGalleryItem pStyleGalleryItem = new ServerStyleGalleryItem();

                pStyleGalleryItem.Name = "当前符号";

                pStyleGalleryItem.Item = m_LegendClass.Symbol;

                m_SymbologyStyleClass.AddItem(pStyleGalleryItem, 0);

     

                // 符号属性集合

                for (int i = 0; i < m_SymbologyStyleClass.get_ItemCount(); i++)

                {

                    IStyleGalleryItem item = m_SymbologyStyleClass.GetItem(i);

                    IFillSymbol pFillSymbol = item.Item as IFillSymbol;

                    ILineSymbol pLineSymbol = pFillSymbol.Outline;

                    if (!outlineWidths.ContainsKey(item.ID))

                    {

                        outlineWidths.Add(item.ID, pLineSymbol.Width);

                    }

                    if (!outlineColors.ContainsKey(item.ID))

                    {

                        outlineColors.Add(item.ID, ConvertToColor(pLineSymbol.Color));

                    }

                    if (!fillColors.ContainsKey(item.ID))

                    {

                        if (pFillSymbol.Color == null)

                        {

                            fillColors.Add(item.ID, this.BackColor);

                        }

                        else

                        {

                            fillColors.Add(item.ID, ConvertToColor(pFillSymbol.Color));

                        }

                    }

                }

                m_SymbologyStyleClass.SelectItem(0);

            }

     

            /// <summary>

            /// 双击选中符号

            /// </summary>

            /// <param name="sender"></param>

            /// <param name="e"></param>

            private void axSymbologyControl1_OnDoubleClick(object sender, ISymbologyControlEvents_OnDoubleClickEvent e)

            {

                btnOK.PerformClick();

            }

     

            /// <summary>

            /// 切换符号

            /// </summary>

            /// <param name="sender"></param>

            /// <param name="e"></param>

            private void axSymbologyControl1_OnItemSelected(object sender, ISymbologyControlEvents_OnItemSelectedEvent e)

            {

                IStyleGalleryItem pStyleGalleryItem = e.styleGalleryItem as IStyleGalleryItem;

                numLineWidth.Value = (decimal)outlineWidths[pStyleGalleryItem.ID];

                LineColor.BackColor = outlineColors[pStyleGalleryItem.ID];

                FillColor.BackColor = fillColors[pStyleGalleryItem.ID];

     

                // 预览

                IFillSymbol pFillSymbol = pStyleGalleryItem.Item as IFillSymbol;

                ILineSymbol pLineSymbol = pFillSymbol.Outline;

                pLineSymbol.Width = outlineWidths[pStyleGalleryItem.ID];

                pLineSymbol.Color = ConvertToRgbColor(outlineColors[pStyleGalleryItem.ID]);

                pFillSymbol.Color = ConvertToRgbColor(fillColors[pStyleGalleryItem.ID]);

                pFillSymbol.Outline = pLineSymbol;

                PreviewSymbol(pStyleGalleryItem);

            }

     

            /// <summary>

            /// 切换填充颜色

            /// </summary>

            /// <param name="sender"></param>

            /// <param name="e"></param>

            private void FillColor_Click(object sender, EventArgs e)

            {

                ColorDialog colorDialog = new ColorDialog();

                if (colorDialog.ShowDialog() == DialogResult.OK)

                {

                    FillColor.BackColor = colorDialog.Color;

     

                    // 预览

                    IStyleGalleryItem pStyleGalleryItem = m_SymbologyStyleClass.GetSelectedItem();

                    IFillSymbol pFillSymbol = pStyleGalleryItem.Item as IFillSymbol;

                    ILineSymbol pLineSymbol = pFillSymbol.Outline;

                    pLineSymbol.Width = (double)numLineWidth.Value;

                    pLineSymbol.Color = ConvertToRgbColor(LineColor.BackColor);

                    pFillSymbol.Color = ConvertToRgbColor(FillColor.BackColor);

                    pFillSymbol.Outline = pLineSymbol;

                    PreviewSymbol(pStyleGalleryItem);

                }

            }

     

            /// <summary>

            /// 切换边框颜色

            /// </summary>

            /// <param name="sender"></param>

            /// <param name="e"></param>

            private void LineColor_Click(object sender, EventArgs e)

            {

                ColorDialog colorDialog = new ColorDialog();

                if (colorDialog.ShowDialog() == DialogResult.OK)

                {

                    LineColor.BackColor = colorDialog.Color;

     

                    // 预览

                    IStyleGalleryItem pStyleGalleryItem = m_SymbologyStyleClass.GetSelectedItem();

                    IFillSymbol pFillSymbol = pStyleGalleryItem.Item as IFillSymbol;

                    ILineSymbol pLineSymbol = pFillSymbol.Outline;

                    pLineSymbol.Width = (double)numLineWidth.Value;

                    pLineSymbol.Color = ConvertToRgbColor(LineColor.BackColor);

                    pFillSymbol.Color = ConvertToRgbColor(FillColor.BackColor);

                    pFillSymbol.Outline = pLineSymbol;

                    PreviewSymbol(pStyleGalleryItem);

                }

            }

     

            /// <summary>

            /// 切换边框宽度

            /// </summary>

            /// <param name="sender"></param>

            /// <param name="e"></param>

            private void numLineWidth_ValueChanged(object sender, EventArgs e)

            {

                // 预览

                IStyleGalleryItem pStyleGalleryItem = m_SymbologyStyleClass.GetSelectedItem();

                IFillSymbol pFillSymbol = pStyleGalleryItem.Item as IFillSymbol;

                ILineSymbol pLineSymbol = pFillSymbol.Outline;

                pLineSymbol.Width = (double)numLineWidth.Value;

                pLineSymbol.Color = ConvertToRgbColor(LineColor.BackColor);

                pFillSymbol.Color = ConvertToRgbColor(FillColor.BackColor);

                pFillSymbol.Outline = pLineSymbol;

                PreviewSymbol(pStyleGalleryItem);

            }

     

            /// <summary>

            /// 确定

            /// </summary>

            /// <param name="sender"></param>

            /// <param name="e"></param>

            private void btnOK_Click(object sender, EventArgs e)

            {

                IGeoFeatureLayer pGeoFeatureLayer = m_Layer as IGeoFeatureLayer;

                IFeatureRenderer pFeatureRenderer = pGeoFeatureLayer.Renderer;

                ISimpleRenderer pSimpleRenderer = pFeatureRenderer as ISimpleRenderer;

                pSimpleRenderer.Symbol = m_SymbologyStyleClass.GetSelectedItem().Item as ISymbol;

                m_mapControl.Refresh();

                this.Close();

            }

     

            /// <summary>

            /// 取消

            /// </summary>

            /// <param name="sender"></param>

            /// <param name="e"></param>

            private void btnCancel_Click(object sender, EventArgs e)

            {

                this.Close();

            }

     

            /// <summary>

            /// Color转换为IColor

            /// </summary>

            /// <param name="color"></param>

            /// <returns></returns>

            private IColor ConvertToRgbColor(Color color)

            {

                IColor pColor = new RgbColor();

                pColor.RGB = color.R + color.G * 256 + color.B * 65536;

                return pColor;

            }

     

            /// <summary>

            /// IColor转换为Color

            /// </summary>

            /// <param name="pColor"></param>

            /// <returns></returns>

            private Color ConvertToColor(IColor pColor)

            {

                return ColorTranslator.FromOle(pColor.RGB);

            }

     

            /// <summary>

            /// 预览符号

            /// </summary>

            private void PreviewSymbol(IStyleGalleryItem pStyleGalleryItem)

            {

                IPictureDisp pPictureDisp = m_SymbologyStyleClass.PreviewItem(pStyleGalleryItem, MarkerSymbol.Width, MarkerSymbol.Height);

                Image priviewImage = Image.FromHbitmap(new IntPtr(pPictureDisp.Handle));

                MarkerSymbol.Image = priviewImage;

            }

    }

    系统主窗口代码:(记得绑定TOCControl事件,这里为了测试方便,添加了右键等功能代码)

            private void axTOCControl1_OnMouseDown(object sender, ITOCControlEvents_OnMouseDownEvent e)

            {

                ESRI.ArcGIS.Controls.esriTOCControlItem Item = ESRI.ArcGIS.Controls.esriTOCControlItem.esriTOCControlItemNone;

                IBasicMap pBasicMap = null;

                ILayer pLayer = null;

                object other = null;

                object index = null;

                axTOCControl1.HitTest(e.x, e.y, ref Item, ref pBasicMap, ref pLayer, ref other, ref index);          //实现赋值

                //图层左键

                if (e.button == 1)

                {

                    if (Item == esriTOCControlItem.esriTOCControlItemLegendClass)

                    {

                        if (pLayer is IFeatureLayer)

                        {

                            IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer;

                            if (pFeatureLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPolygon)

                            {

                                ILegendGroup pLegendGroup = other as ILegendGroup;

                                ILegendClass pLegendClass = pLegendGroup.get_Class((int)index);

                                SymbolForm frm = new SymbolForm(axMapControl1.Object as IMapControlDefault, pLayer, pLegendClass);

                                frm.ShowDialog();

                            }

                           

                        }

                    }

                }

            }

    运行图:

    说明:包括后文中的点符号、面符号(填充符号)都需要此文件:ESRI.ServerStyle。只要装过ArcGIS就会有此文件,可电脑搜索,也可到此链接下载

    https://download.csdn.net/download/say_book/85001155

  • 相关阅读:
    我的php学习笔记(三十六)PHP中开发自己的UBB代码
    Eclipse和MyEclipse安装和使用git(egit)图解笔记
    在ECSHOP首页增加一个浏览排行
    计算机网络
    游戏系统开发笔记(四)——游戏程序简介
    【自考】操作系统概论
    ZOJ 3700 Ever Dream 文章中单词的处理
    【自考】计算机网络技术
    Lvm 折腾小记
    UbuntuKylin的美好前景
  • 原文地址:https://www.cnblogs.com/pygisxss/p/16051667.html
Copyright © 2020-2023  润新知