符号化面状图层,不填充,只符号化边线。
代码如下:
/// <summary>
/// 要素图层符号化类
/// </summary>
public class FeatureLayerSymbolizationHelper
{
/// <summary>
/// 根据RGB分量构造颜色对象
/// </summary>
/// <param name="R">R分量</param>
/// <param name="G">G分量</param>
/// <param name="B">B分量</param>
/// <returns>颜色对象</returns>
private static IRgbColor GetRGBColor(int R, int G, int B) => new RgbColorClass { Red = R, Green = G, Blue = B };
/// <summary>
/// 空心样式符号化
/// </summary>
/// <param name="pFeatureLayer">要素图层</param>
/// <param name="nColorR">边线颜色R分量</param>
/// <param name="nColorG">边线颜色G分量</param>
/// <param name="nColorB">边线颜色B分量</param>
/// <param name="nOutLineWidth">边线宽度</param>
public static void HollowSymbol(IFeatureLayer pFeatureLayer, int nColorR, int nColorG, int nColorB, int nOutLineWidth = 1)
{
SimpleFillSymbol(pFeatureLayer, esriSimpleFillStyle.esriSFSHollow, new RgbColorClass() { Red = 0, Green = 0, Blue = 0 }, GetRGBColor(nColorR, nColorG, nColorB), nOutLineWidth);
}
/// <summary>
/// 空心样式符号化
/// </summary>
/// <param name="pFeatureLayer">要素图层</param>
/// <param name="pOutLineColor">边线颜色</param>
/// <param name="nOutLineWidth">边线宽度</param>
public static void HollowSymbol(IFeatureLayer pFeatureLayer, IColor pOutLineColor, int nOutLineWidth = 1)
{
SimpleFillSymbol(pFeatureLayer, esriSimpleFillStyle.esriSFSHollow, new RgbColorClass() { Red = 0, Green = 0, Blue = 0 }, pOutLineColor, nOutLineWidth);
}
/// <summary>
/// 简单符号化
/// </summary>
/// <param name="pFeatureLayer">要素图层</param>
/// <param name="FillStyle">填充样式</param>
/// <param name="pFillColor">填充颜色</param>
/// <param name="pOutLineColor">边线颜色</param>
/// <param name="nOutLineWidth">边线宽度</param>
/// <param name="sRenderLabel">符号化标注</param>
/// <param name="sDescripition">符号化描述</param>
public static void SimpleFillSymbol(IFeatureLayer pFeatureLayer, esriSimpleFillStyle FillStyle, IColor pFillColor, IColor pOutLineColor,
int nOutLineWidth = 1, string sRenderLabel = "", string sDescripition = "")
{
ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass
{
Style = FillStyle
};
if (null != pFillColor)
{
pSimpleFillSymbol.Color = pFillColor;
}
ISimpleLineSymbol pSimpleLineSymbol = new SimpleLineSymbolClass
{
Style = esriSimpleLineStyle.esriSLSSolid,
Color = pOutLineColor,
Width = nOutLineWidth > 0 ? nOutLineWidth : 1
};
ISymbol pSymbol = pSimpleLineSymbol as ISymbol;
//pSymbol.ROP2 = esriRasterOpCode.esriROPNotXOrPen;
pSimpleFillSymbol.Outline = pSimpleLineSymbol;
ISimpleRenderer simpleRender = new SimpleRendererClass
{
Symbol = pSimpleFillSymbol as ISymbol,
Label = sRenderLabel,
Description = sDescripition
};
if (pFeatureLayer is IGeoFeatureLayer pGeoFeatureLayer)
{
pGeoFeatureLayer.Renderer = simpleRender as IFeatureRenderer;
}
}
}