ArcEngine符号化——填充符号

1、前言

这篇博客来介绍一下ArcEngine中的填充符号。填充符号一般有简单填充点填充线填充等等,有一类特殊的点密度填充将在下一篇博客介绍。

2、常用的填充符号

2.1、简单填充符号
在这里插入图片描述

2.2、点填充符号
在这里插入图片描述

2.3、线填充符号
在这里插入图片描述

2.4、叠加填充符号
在这里插入图片描述

2.5、图片填充符号
在这里插入图片描述

2.6、渐变填充符号在这里插入图片描述

3、实现代码

using System;
using System.Windows.Forms;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Display;
using stdole;
using ESRI.ArcGIS.Geodatabase;

namespace Win
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
            axMapControl1.AddShapeFile(@"C:\Users\DSF\Desktop\data", @"polygon.shp");
        }

        /// <summary>
        /// 简单填充符号
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSimpleFillSymbol_Click(object sender, EventArgs e)
        {
            // 创建线符号
            ISimpleLineSymbol pSimpleLineSymbol = new SimpleLineSymbol();
            pSimpleLineSymbol.Color = CreateRgbColor(0, 255, 0);
            pSimpleLineSymbol.Style = esriSimpleLineStyle.esriSLSSolid;
            pSimpleLineSymbol.Width = 2;

            // 创建填充符号
            ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbol();
            pSimpleFillSymbol.Color = CreateRgbColor(255, 0, 0);
            pSimpleFillSymbol.Outline = pSimpleLineSymbol;
            pSimpleFillSymbol.Style = esriSimpleFillStyle.esriSFSSolid;

            // 设置符号
            IGeoFeatureLayer pGeoFeatureLayer = axMapControl1.get_Layer(0) as IGeoFeatureLayer;
            IFeatureRenderer pFeatureRenderer = pGeoFeatureLayer.Renderer;
            ISimpleRenderer pSimpleRenderer = pFeatureRenderer as ISimpleRenderer;
            pSimpleRenderer.Symbol = pSimpleFillSymbol as ISymbol;

            // 刷新地图
            axMapControl1.Refresh();
            axTOCControl1.Update();
        }

        /// <summary>
        /// 点填充符号
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnMarkerFillSymbol_Click(object sender, EventArgs e)
        {
            // 创建点符号
            ISimpleMarkerSymbol pSimpleMarkerSymbol = new SimpleMarkerSymbol();
            pSimpleMarkerSymbol.Angle = 45;
            pSimpleMarkerSymbol.Color = CreateRgbColor(255, 0, 0);
            pSimpleMarkerSymbol.Size = 15;
            pSimpleMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSCross;

            // 创建填充符号
            IMarkerFillSymbol pMarkerFillSymbol = new MarkerFillSymbol();
            pMarkerFillSymbol.MarkerSymbol = pSimpleMarkerSymbol;
            pMarkerFillSymbol.Style = esriMarkerFillStyle.esriMFSGrid;

            // 设置符号
            IGeoFeatureLayer pGeoFeatureLayer = axMapControl1.get_Layer(0) as IGeoFeatureLayer;
            IFeatureRenderer pFeatureRenderer = pGeoFeatureLayer.Renderer;
            ISimpleRenderer pSimpleRenderer = pFeatureRenderer as ISimpleRenderer;
            pSimpleRenderer.Symbol = pMarkerFillSymbol as ISymbol;

            // 刷新地图
            axMapControl1.Refresh();
            axTOCControl1.Update();
        }

        /// <summary>
        /// 线填充符号
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnLineFillSymbol_Click(object sender, EventArgs e)
        {
            // 创建线符号
            ISimpleLineSymbol pSimpleLineSymbol = new SimpleLineSymbol();
            pSimpleLineSymbol.Color = CreateRgbColor(255, 0, 0);
            pSimpleLineSymbol.Style = esriSimpleLineStyle.esriSLSSolid;
            pSimpleLineSymbol.Width = 1;

            // 创建填充符号
            ILineFillSymbol pLineFillSymbol = new LineFillSymbol();
            pLineFillSymbol.Angle = 0;
            pLineFillSymbol.LineSymbol = pSimpleLineSymbol;

            // 设置符号
            IGeoFeatureLayer pGeoFeatureLayer = axMapControl1.get_Layer(0) as IGeoFeatureLayer;
            IFeatureRenderer pFeatureRenderer = pGeoFeatureLayer.Renderer;
            ISimpleRenderer pSimpleRenderer = pFeatureRenderer as ISimpleRenderer;
            pSimpleRenderer.Symbol = pLineFillSymbol as ISymbol;

            // 刷新地图
            axMapControl1.Refresh();
            axTOCControl1.Update();
        }

        /// <summary>
        /// 叠加填充符号
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnMultiLayerFillSymbol_Click(object sender, EventArgs e)
        {
            // 创建垂直填充符号
            ISimpleFillSymbol pVerticalFillSymbol = new SimpleFillSymbol();
            pVerticalFillSymbol.Color = CreateRgbColor(255, 0, 0);
            pVerticalFillSymbol.Style = esriSimpleFillStyle.esriSFSVertical;

            // 创建水平填充符号
            ISimpleFillSymbol pHorizontalFillSymbol = new SimpleFillSymbol();
            pHorizontalFillSymbol.Color = CreateRgbColor(0, 255, 0);
            pHorizontalFillSymbol.Style = esriSimpleFillStyle.esriSFSHorizontal;

            // 创建叠加填充符号
            IMultiLayerFillSymbol pMultiLayerFillSymbol = new MultiLayerFillSymbol();
            pMultiLayerFillSymbol.AddLayer(pVerticalFillSymbol);
            pMultiLayerFillSymbol.AddLayer(pHorizontalFillSymbol);

            // 设置符号
            IGeoFeatureLayer pGeoFeatureLayer = axMapControl1.get_Layer(0) as IGeoFeatureLayer;
            IFeatureRenderer pFeatureRenderer = pGeoFeatureLayer.Renderer;
            ISimpleRenderer pSimpleRenderer = pFeatureRenderer as ISimpleRenderer;
            pSimpleRenderer.Symbol = pMultiLayerFillSymbol as ISymbol;

            // 刷新地图
            axMapControl1.Refresh();
            axTOCControl1.Update();
        }

        /// <summary>
        /// 图片填充符号
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnPictureFillSymbol_Click(object sender, EventArgs e)
        {
            IPictureFillSymbol pPictureFillSymbol = new PictureFillSymbol();
            pPictureFillSymbol.Angle = 0;
            pPictureFillSymbol.CreateFillSymbolFromFile(esriIPictureType.esriIPicturePNG, @"C:\Users\DSF\Desktop\Driving_Directions16.png");

            // 设置符号
            IGeoFeatureLayer pGeoFeatureLayer = axMapControl1.get_Layer(0) as IGeoFeatureLayer;
            IFeatureRenderer pFeatureRenderer = pGeoFeatureLayer.Renderer;
            ISimpleRenderer pSimpleRenderer = pFeatureRenderer as ISimpleRenderer;
            pSimpleRenderer.Symbol = pPictureFillSymbol as ISymbol;

            // 刷新地图
            axMapControl1.Refresh();
            axTOCControl1.Update();
        }

        /// <summary>
        /// 渐变填充符号
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnGradientFillSymbol_Click(object sender, EventArgs e)
        {
            // 创建色带
            IAlgorithmicColorRamp pAlgorithmicColorRamp = new AlgorithmicColorRamp();
            pAlgorithmicColorRamp.Algorithm = esriColorRampAlgorithm.esriHSVAlgorithm;
            pAlgorithmicColorRamp.FromColor = CreateRgbColor(255, 0, 0);
            pAlgorithmicColorRamp.ToColor = CreateRgbColor(0, 255, 0);

            // 创建渐变填充符号
            IGradientFillSymbol pGradientFillSymbol = new GradientFillSymbol();
            pGradientFillSymbol.ColorRamp = pAlgorithmicColorRamp;
            pGradientFillSymbol.IntervalCount = 100;
            pGradientFillSymbol.Style = esriGradientFillStyle.esriGFSLinear;

            // 设置符号
            IGeoFeatureLayer pGeoFeatureLayer = axMapControl1.get_Layer(0) as IGeoFeatureLayer;
            IFeatureRenderer pFeatureRenderer = pGeoFeatureLayer.Renderer;
            ISimpleRenderer pSimpleRenderer = pFeatureRenderer as ISimpleRenderer;
            pSimpleRenderer.Symbol = pGradientFillSymbol as ISymbol;

            // 刷新地图
            axMapControl1.Refresh();
            axTOCControl1.Update();
        }

        /// <summary>
        /// 创建RGB颜色
        /// </summary>
        /// <param name="R"></param>
        /// <param name="G"></param>
        /// <param name="B"></param>
        /// <returns></returns>
        private IRgbColor CreateRgbColor(int R, int G, int B)
        {
            IRgbColor pRgbColor = new RgbColor();
            pRgbColor.Red = R;
            pRgbColor.Green = G;
            pRgbColor.Blue = B;
            return pRgbColor;
        }
    }
}
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值