PIE SDK面元素的绘制
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 |
示例代码 |
|
1 /// <summary> 2 /// 简单填充样式的面元素 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private void toolStripButton_DrawSimpleFillSyPolygon_Click(object sender, EventArgs e) 7 { 8 //定义空间位置 9 IPointCollection polygon = new PIE.Geometry.Polygon(); 10 polygon.AddPoint(100, 100, 0); 11 polygon.AddPoint(100, 300, 0); 12 polygon.AddPoint(300, 300, 0); 13 polygon.AddPoint(300, 100, 0); 14 (polygon as IPolygon).CloseRings(); 15 //定义面元素 16 IPolygonElement polyElement = new PIE.Carto.PolygonElement(); 17 polyElement.Geometry = polygon as IGeometry; 18 19 ISimpleFillSymbol simpleFillSymbol = new SimpleFillSymbol(); 20 simpleFillSymbol.Style = SimpleFillStyle.SFSDense2Pattern; 21 IFillSymbol fillSybol = simpleFillSymbol as IFillSymbol; 22 fillSybol.Color = Color.Green; 23 24 polyElement.Symbol = fillSybol; mapControlMain.ActiveView.GraphicsContainer.AddElement(polyElement); mapControlMain.PartialRefresh(ViewDrawPhaseType.ViewAll); 25 } |
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 |
示例代码 |
|
1 /// <summary> 2 /// 由点状符号填充的面符号的面元素 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private void toolStripButton_DrawMarkerSyPolygon_Click(object sender, EventArgs e) 7 { 8 IPointCollection polygon = new PIE.Geometry.Polygon(); 9 polygon.AddPoint(100, 100, 0); 10 polygon.AddPoint(100, 300, 0); 11 polygon.AddPoint(300, 300, 0); 12 polygon.AddPoint(300, 100, 0); 13 (polygon as IPolygon).CloseRings(); 14 //定义面元素 15 IPolygonElement polyElement = new PIE.Carto.PolygonElement(); 16 polyElement.Geometry = polygon as IGeometry; 17 18 IMarkerFillSymbol markerFillSymbol = new MarkerFillSymbol(); 19 20 //ICharacterMarkerSymbol字符点状符号 21 ICharacterMarkerSymbol characterMSymbol = new CharacterMarkerSymbol(); 22 characterMSymbol.CharacterIndex = 111;//飞机 23 System.Drawing.Font font = new Font("ESRI Default Marker", 20); 24 characterMSymbol.Font = font; 25 //设置符号的大小,颜色,偏移量 26 IMarkerSymbol markSymbol = characterMSymbol as IMarkerSymbol; 27 markSymbol.XOffset = 0; 28 markSymbol.YOffset = 0; 29 markSymbol.Size = 20; 30 markSymbol.Color = Color.Red; 31 32 markerFillSymbol.MarkerSymbol = markSymbol; 33 IFillSymbol fillSymbol = markerFillSymbol as IFillSymbol; 34 35 polyElement.Symbol = fillSymbol; 36 mapControlMain.ActiveView.GraphicsContainer.AddElement(polyElement); 37 mapControlMain.PartialRefresh(ViewDrawPhaseType.ViewAll); 38 } |
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 |
示例代码 |
|
1 /// <summary> 2 /// 线状填充样式的面元素 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private void toolStripButton3_DrawLineSyPolygon_Click(object sender, EventArgs e) 7 { 8 //设置空间信息 9 IPointCollection polygon = new PIE.Geometry.Polygon(); 10 polygon.AddPoint(100, 100, 0); 11 polygon.AddPoint(100, 300, 0); 12 polygon.AddPoint(300, 300, 0); 13 polygon.AddPoint(300, 100, 0); 14 (polygon as IPolygon).CloseRings(); 15 //定义面元素 16 IPolygonElement polyElement = new PIE.Carto.PolygonElement(); 17 polyElement.Geometry = polygon as IGeometry; 18 19 ILineFillSymbol lineFillSymbol = new LineFillSymbol(); 20 ISimpleLineSymbol simpleLineSymbol = new SimpleLineSymbol(); 21 simpleLineSymbol.Style = SimpleLineStyle.SLSDashDot; 22 ILineSymbol lineSymbol = simpleLineSymbol as ILineSymbol; 23 lineSymbol.Join = LineJoinStyle.LJSBevel; 24 lineSymbol.Color = Color.Green; 25 lineSymbol.Cap = LineCapStyle.LCSRound; 26 27 lineFillSymbol.LineSymbol = lineSymbol; 28 lineFillSymbol.Rotate = 20; 29 lineFillSymbol.Separation = 20; 30 31 IFillSymbol fillSymbol = lineFillSymbol as IFillSymbol; 32 polyElement.Symbol = fillSymbol; 33 mapControlMain.ActiveView.GraphicsContainer.AddElement(polyElement); 34 mapControlMain.PartialRefresh(ViewDrawPhaseType.ViewAll); 35 } |
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 |
示例代码 |
|
1 /// <summary> 2 /// 图片填充样式的面元素 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private void toolStripButton_DrawPicSyPolygon_Click(object sender, EventArgs e) 7 { 8 //设置空间信息 9 IPointCollection polygon = new PIE.Geometry.Polygon(); 10 polygon.AddPoint(100, 100, 0); 11 polygon.AddPoint(100, 300, 0); 12 polygon.AddPoint(300, 300, 0); 13 polygon.AddPoint(300, 100, 0); 14 (polygon as IPolygon).CloseRings(); 15 //定义面元素 16 IPolygonElement polyElement = new PIE.Carto.PolygonElement(); 17 polyElement.Geometry = polygon as IGeometry; 18 19 IPictureFillSymbol picFillSymbol = new PictureFillSymbol(); 20 OpenFileDialog openFileDialog = new OpenFileDialog(); 21 openFileDialog.Filter = "Picture File|*.bmp"; 22 openFileDialog.Title = "选择一张图片:"; 23 if (openFileDialog.ShowDialog() != DialogResult.OK) return; 24 picFillSymbol.CreateFromFile(openFileDialog.FileName); 25 picFillSymbol.XOffset = 10; 26 picFillSymbol.YOffset = 10; 27 picFillSymbol.XSeparation = 10; 28 picFillSymbol.YSeparation = 10; 29 picFillSymbol.XScale = 3; 30 picFillSymbol.YScale = 3; 31 picFillSymbol.Rotate = 0; 32 33 IFillSymbol fillSymbol = picFillSymbol as IFillSymbol; 34 polyElement.Symbol = fillSymbol; mapControlMain.ActiveView.GraphicsContainer.AddElement(polyElement); mapControlMain.PartialRefresh(ViewDrawPhaseType.ViewAll); 35 } 36 IFillSymbol fillSymbol = picFillSymbol as IFillSymbol; 37 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 |
示例代码 |
|
1 /// <summary> 2 /// 多个符号叠加生成的样式的面元素 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private void toolStripButton_DrawMultiSyPolygon_Click(object sender, EventArgs e) 7 { 8 IPointCollection polygon = new PIE.Geometry.Polygon(); 9 polygon.AddPoint(100, 100, 0); 10 polygon.AddPoint(100, 300, 0); 11 polygon.AddPoint(300, 300, 0); 12 polygon.AddPoint(300, 100, 0); 13 (polygon as IPolygon).CloseRings(); 14 //定义面元素 15 IPolygonElement polyElement = new PIE.Carto.PolygonElement(); 16 polyElement.Geometry = polygon as IGeometry; 17 18 IMultiLayerFillSymbol multiLayerFillSymbol = new MultiLayerFillSymbol(); 19 20 //ISimpleFillSymbol简单填充符号 21 ISimpleFillSymbol simpleFillSymbol = new SimpleFillSymbol(); 22 simpleFillSymbol.Style = SimpleFillStyle.SFSDense2Pattern; 23 IFillSymbol fillSybol = simpleFillSymbol as IFillSymbol; 24 fillSybol.Color = Color.Pink; 25 26 //ILineFillSymbol 线填充符号 27 ILineFillSymbol lineFillSymbol = new LineFillSymbol(); 28 29 //设置简单的线符号 30 ISimpleLineSymbol simpleLineSymbol = new SimpleLineSymbol(); 31 simpleLineSymbol.Style = SimpleLineStyle.SLSDashDot; 32 ILineSymbol lineSymbol = simpleLineSymbol as ILineSymbol; 33 lineSymbol.Color = Color.Green; 34 lineSymbol.Join = LineJoinStyle.LJSMitre; 35 lineSymbol.Width = 4; 36 lineSymbol.Cap = LineCapStyle.LCSSquare; 37 38 lineFillSymbol.LineSymbol = lineSymbol; 39 IFillSymbol fillSymbol2 = lineFillSymbol as IFillSymbol; 40 41 multiLayerFillSymbol.AddLayer(fillSybol, false); 42 multiLayerFillSymbol.AddLayer(fillSymbol2, false); 43 polyElement.Symbol = multiLayerFillSymbol as IFillSymbol; mapControlMain.ActiveView.GraphicsContainer.AddElement(polyElement); mapControlMain.PartialRefresh(ViewDrawPhaseType.ViewAll); 44 } |
2.5.4. 示例截图