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;
}
}
}