1. 功能简介
在数据的处理中会用到线元素的绘制,目前PIE SDK支持IFillSymbol接口,FillSymbol对象是用于修饰填充面状对象的符号,它包括MarkerFillSymbol(由点状符号形成的填充面符号)、LineFillSymbol(由线状符号形成的填充面符号)、MultiLayerFillSymbol(多个符号叠加生成的新的填充面符号)、PictureFillSymbol(以图片为背景的填充面符号)、SimpleFillSymbol(简单类型的填充面符号)这5个不同类型填充面符号的子类。
2. 功能实现说明
2.1. SimpleFillSymbol类型的线元素的绘制
2.1.1. 实现思路及原理说明
第一步 | 设置点的Geometry信息 |
第二步 | 设置面的符号 |
第三步 | 绘制元素 |
2.1.2. 核心接口与方法
接口/类 | 方法/属性 | 说明 |
IPolygonElement | Geometry属性 | 获取或设置Geometry |
Symbol属性 | 获取或设置符号样式 |
IGraphicsContainer | AddElement(IElement element) | 添加元素 |
ISimpleFillSymbol | Style属性 | 获取或设置简单的面样式 |
IFillSymbol | Color属性 | 获取或设置面的颜色 |
2.1.3. 示例代码
项目路径 | 百度云盘地址下/PIE示例程序/08元素绘制/03面的绘制 |
视频路径 | 百度云盘地址下/PIE视频教程/08元素绘制/03面的绘制.avi |
示例代码 |
/// <summary>
/// 简单填充样式的面元素
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void toolStripButton_DrawSimpleFillSyPolygon_Click(object sender, EventArgs e)
{
//定义空间位置
IPointCollection polygon = new PIE.Geometry.Polygon();
polygon.AddPoint(, , );
polygon.AddPoint(, , );
polygon.AddPoint(, , );
polygon.AddPoint(, , );
(polygon as IPolygon).CloseRings();
//定义面元素
IPolygonElement polyElement = new PIE.Carto.PolygonElement();
polyElement.Geometry = polygon as IGeometry;
ISimpleFillSymbol simpleFillSymbol = new SimpleFillSymbol();
simpleFillSymbol.Style = SimpleFillStyle.SFSDense2Pattern;
IFillSymbol fillSybol = simpleFillSymbol as IFillSymbol;
fillSybol.Color = Color.Green;
polyElement.Symbol = fillSybol; mapControlMain.ActiveView.GraphicsContainer.AddElement(polyElement); mapControlMain.PartialRefresh(ViewDrawPhaseType.ViewAll);
} |
2.1.4. 示例截图
2.2. MarkerFillSymbol类型的点元素的绘制
2.2.1. 实现思路及原理说明
第一步 | 设置点的Geometry信息 |
第二步 | 设置面的符号 |
第三步 | 绘制元素 |
2.2.2. 核心接口与方法
接口/类 | 方法/属性 | 说明 |
IPolygonElement | Geometry属性 | 获取或设置Geometry |
Symbol属性 | 获取或设置符号样式 |
IGraphicsContainer | AddElement(IElement element) | 添加元素 |
IMarkerFillSymbol | MarkerSymbol属性 | 获取或设置点的符号样式 |
IFillSymbol | Color属性 | 获取或设置面的颜色 |
IMarkerSymbol | Size | 获取或设置点的大小 |
Color | 获取或设置颜色 |
2.2.3. 示例代码
项目路径 | 百度云盘地址下/PIE示例程序/08元素绘制/03面的绘制 |
视频路径 | 百度云盘地址下/PIE视频教程/08元素绘制/03面的绘制.avi |
示例代码 |
/// <summary>
/// 由点状符号填充的面符号的面元素
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void toolStripButton_DrawMarkerSyPolygon_Click(object sender, EventArgs e)
{
IPointCollection polygon = new PIE.Geometry.Polygon();
polygon.AddPoint(, , );
polygon.AddPoint(, , );
polygon.AddPoint(, , );
polygon.AddPoint(, , );
(polygon as IPolygon).CloseRings();
//定义面元素
IPolygonElement polyElement = new PIE.Carto.PolygonElement();
polyElement.Geometry = polygon as IGeometry;
IMarkerFillSymbol markerFillSymbol = new MarkerFillSymbol();
//ICharacterMarkerSymbol字符点状符号
ICharacterMarkerSymbol characterMSymbol = new CharacterMarkerSymbol();
characterMSymbol.CharacterIndex = ;//飞机
System.Drawing.Font font = new Font("ESRI Default Marker", );
characterMSymbol.Font = font;
//设置符号的大小,颜色,偏移量
IMarkerSymbol markSymbol = characterMSymbol as IMarkerSymbol;
markSymbol.XOffset = ;
markSymbol.YOffset = ;
markSymbol.Size = ;
markSymbol.Color = Color.Red;
markerFillSymbol.MarkerSymbol = markSymbol;
IFillSymbol fillSymbol = markerFillSymbol as IFillSymbol;
polyElement.Symbol = fillSymbol;
mapControlMain.ActiveView.GraphicsContainer.AddElement(polyElement);
mapControlMain.PartialRefresh(ViewDrawPhaseType.ViewAll);
} |
2.2.4 . 示例截图
2.3. LineFillSymbol类型的点元素的绘制
2.3.1. 实现思路及原理说明
第一步 | 设置点的Geometry信息 |
第二步 | 设置面的符号 |
第三步 | 绘制元素 |
2.3.2. 核心接口与方法
接口/类 | 方法/属性 | 说明 |
IPolygonElement | Geometry属性 | 获取或设置Geometry |
Symbol属性 | 获取或设置符号样式 |
IGraphicsContainer | AddElement(IElement element) | 添加元素 |
ILineFillSymbol | LineSymbol属性 | 获取或设置简单的面样式 |
Rotate | 获取或设置旋转角度 |
Separation | 获取或设置间距 |
IFillSymbol | Color属性 | 获取或设置面的颜色 |
ISimpleLineSymbol | style | 获取或设置简单点的样式 |
ILineSymbol | Join | 获取或设置线的连接方式 |
Color | 获取或设置线的颜色 |
Cap | 获取或设置线的线帽样式 |
2.3.3. 示例代码
项目路径 | 百度云盘地址下/PIE示例程序/08元素绘制/03面的绘制 |
视频路径 | 百度云盘地址下/PIE视频教程/08元素绘制/03面的绘制.avi |
示例代码 |
/// <summary>
/// 线状填充样式的面元素
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void toolStripButton3_DrawLineSyPolygon_Click(object sender, EventArgs e)
{
//设置空间信息
IPointCollection polygon = new PIE.Geometry.Polygon();
polygon.AddPoint(, , );
polygon.AddPoint(, , );
polygon.AddPoint(, , );
polygon.AddPoint(, , );
(polygon as IPolygon).CloseRings();
//定义面元素
IPolygonElement polyElement = new PIE.Carto.PolygonElement();
polyElement.Geometry = polygon as IGeometry;
ILineFillSymbol lineFillSymbol = new LineFillSymbol();
ISimpleLineSymbol simpleLineSymbol = new SimpleLineSymbol();
simpleLineSymbol.Style = SimpleLineStyle.SLSDashDot;
ILineSymbol lineSymbol = simpleLineSymbol as ILineSymbol;
lineSymbol.Join = LineJoinStyle.LJSBevel;
lineSymbol.Color = Color.Green;
lineSymbol.Cap = LineCapStyle.LCSRound;
lineFillSymbol.LineSymbol = lineSymbol;
lineFillSymbol.Rotate = ;
lineFillSymbol.Separation = ;
IFillSymbol fillSymbol = lineFillSymbol as IFillSymbol;
polyElement.Symbol = fillSymbol;
mapControlMain.ActiveView.GraphicsContainer.AddElement(polyElement);
mapControlMain.PartialRefresh(ViewDrawPhaseType.ViewAll);
} |
2.3.4. 示例截图
2.4. PictureFillSymbol类型的点元素的绘制
2.4.1. 实现思路及原理说明
第一步 | 设置点的Geometry信息 |
第二步 | 设置面的符号 |
第三步 | 绘制元素 |
2.4.2. 核心接口与方法
接口/类 | 方法/属性 | 说明 |
IPolygonElement | Geometry属性 | 获取或设置Geometry |
Symbol属性 | 获取或设置符号样式 |
IGraphicsContainer | AddElement(IElement element) | 添加元素 |
IPictureFillSymbol | CreateFromFile(string path) | 获取或设置简单的面样式 |
XSeparation | 获取或设置X方向间距 |
YSeparation | 获取或设置Y方向缩放比例 |
XScale | 获取或设X方向缩放比例 |
YScale | 获取或设Y方向缩放比例 |
IFillSymbol | Color属性 | 获取或设置面的颜色 |
2.4.3. 示例代码
项目路径 | 百度云盘地址下/PIE示例程序/08元素绘制/03面的绘制 |
视频路径 | 百度云盘地址下/PIE视频教程/08元素绘制/03面的绘制.avi |
示例代码 |
/// <summary>
/// 图片填充样式的面元素
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void toolStripButton_DrawPicSyPolygon_Click(object sender, EventArgs e)
{
//设置空间信息
IPointCollection polygon = new PIE.Geometry.Polygon();
polygon.AddPoint(, , );
polygon.AddPoint(, , );
polygon.AddPoint(, , );
polygon.AddPoint(, , );
(polygon as IPolygon).CloseRings();
//定义面元素
IPolygonElement polyElement = new PIE.Carto.PolygonElement();
polyElement.Geometry = polygon as IGeometry;
IPictureFillSymbol picFillSymbol = new PictureFillSymbol();
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Picture File|*.bmp";
openFileDialog.Title = "选择一张图片:";
if (openFileDialog.ShowDialog() != DialogResult.OK) return;
picFillSymbol.CreateFromFile(openFileDialog.FileName);
picFillSymbol.XOffset = ;
picFillSymbol.YOffset = ;
picFillSymbol.XSeparation = ;
picFillSymbol.YSeparation = ;
picFillSymbol.XScale = ;
picFillSymbol.YScale = ;
picFillSymbol.Rotate = ;
IFillSymbol fillSymbol = picFillSymbol as IFillSymbol;
polyElement.Symbol = fillSymbol; mapControlMain.ActiveView.GraphicsContainer.AddElement(polyElement); mapControlMain.PartialRefresh(ViewDrawPhaseType.ViewAll);
}
IFillSymbol fillSymbol = picFillSymbol as IFillSymbol;
polyElement.Symbol = fillSymbol; m_mapControl.ActiveView.GraphicsContainer.AddElement(polyElement); m_mapControl.PartialRefresh(ViewDrawPhaseType.ViewAll); |
2.4.4. 示例截图
2.5. MultiLayerFillSymbol类型的点元素的绘制
2.5.1 实现思路及原理说明
第一步 | 设置点的Geometry信息 |
第二步 | 设置面的符号 |
第三步 | 绘制元素 |
2.5.2. 核心接口与方法
接口/类 | 方法/属性 | 说明 |
IPolygonElement | Geometry属性 | 获取或设置Geometry |
Symbol属性 | 获取或设置符号样式 |
IGraphicsContainer | AddElement(IElement element) | 添加元素 |
IMultiLayerFillSymbol | AddLayer(…) | 添加填充面符号图层 |
IFillSymbol | Color属性 | 获取或设置面的颜色 |
2.5.3. 示例代码
数据路径 | 百度云盘地址下/PIE示例程序/08元素绘制/03面的绘制 |
视频路径 | 百度云盘地址下/PIE视频教程/08元素绘制/03面的绘制.avi |
示例代码 |
/// <summary>
/// 多个符号叠加生成的样式的面元素
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void toolStripButton_DrawMultiSyPolygon_Click(object sender, EventArgs e)
{
IPointCollection polygon = new PIE.Geometry.Polygon();
polygon.AddPoint(, , );
polygon.AddPoint(, , );
polygon.AddPoint(, , );
polygon.AddPoint(, , );
(polygon as IPolygon).CloseRings();
//定义面元素
IPolygonElement polyElement = new PIE.Carto.PolygonElement();
polyElement.Geometry = polygon as IGeometry;
IMultiLayerFillSymbol multiLayerFillSymbol = new MultiLayerFillSymbol();
//ISimpleFillSymbol简单填充符号
ISimpleFillSymbol simpleFillSymbol = new SimpleFillSymbol();
simpleFillSymbol.Style = SimpleFillStyle.SFSDense2Pattern;
IFillSymbol fillSybol = simpleFillSymbol as IFillSymbol;
fillSybol.Color = Color.Pink;
//ILineFillSymbol 线填充符号
ILineFillSymbol lineFillSymbol = new LineFillSymbol();
//设置简单的线符号
ISimpleLineSymbol simpleLineSymbol = new SimpleLineSymbol();
simpleLineSymbol.Style = SimpleLineStyle.SLSDashDot;
ILineSymbol lineSymbol = simpleLineSymbol as ILineSymbol;
lineSymbol.Color = Color.Green;
lineSymbol.Join = LineJoinStyle.LJSMitre;
lineSymbol.Width = ;
lineSymbol.Cap = LineCapStyle.LCSSquare;
lineFillSymbol.LineSymbol = lineSymbol;
IFillSymbol fillSymbol2 = lineFillSymbol as IFillSymbol;
multiLayerFillSymbol.AddLayer(fillSybol, false);
multiLayerFillSymbol.AddLayer(fillSymbol2, false);
polyElement.Symbol = multiLayerFillSymbol as IFillSymbol; mapControlMain.ActiveView.GraphicsContainer.AddElement(polyElement); mapControlMain.PartialRefresh(ViewDrawPhaseType.ViewAll);
} |
2.5.4. 示例截图