ARCGIS PRO DSK GraphicsLayer创建文本要素

一、判断GraphicsLayer层【地块注记】是否存在,如果不存在则新建、如果存在则删除所有要素

复制代码
Dim GraphicsLayer = pmap.GetLayersAsFlattenedList().OfType(Of ArcGIS.Desktop.Mapping.GraphicsLayer).FirstOrDefault() '获取当前map对象中的GetLayer图层
Await QueuedTask.Run(Sub()
                         If GraphicsLayer Is Nothing = True Then
                             '创建 GraphicsLayer
                             If pmap.MapType <> MapType.Map Then Exit Sub       ' Not 2D
                             Dim gl_param = New GraphicsLayerCreationParams
                             gl_param.Name = "地块注记"
                             '默认情况下会添加到目录的顶部
                             GraphicsLayer = LayerFactory.Instance.CreateLayer(Of ArcGIS.Desktop.Mapping.GraphicsLayer)(gl_param, pmap)
                         Else
                             '全选文本
                             Dim zj_zdmane As String = ""
                                 zj_zdmane = "地块注记"
                             Dim elements = GraphicsLayer.GetElementsAsFlattenedList().Where(Function(gele As GraphicElement) gele.Name.StartsWith(zj_zdmane)) '获取GetLayer图层中定义的元素(本例为text)
                             '删除选择text
                             GraphicsLayer.SelectElements(elements)
                             GraphicsLayer.RemoveElements(GraphicsLayer.GetSelectedElements())
                         End If
                         MapView.Active.Redraw(True)  '视图刷新
                     End Sub)

二、CreateTextGraphicElement 方法

​GraphicElement CreateTextGraphicElement(

IElementContainer elementContainer,

TextType textType,

Geometry geometry,

CIMTextSymbol textSymbol,

string text,

string elementName,

bool select, 【可选】

ElementInfo elementInfo 【可选】

)

textType:要创建的文本图形的类型​

|--------------------|-------------|
| 成员 | 描述 |
| CircleParagraph | 圆文本 |
| EllipseParagraph | 椭圆文本 |
| None | None- 默认 |
| PointText | 点文本 |
| PolygonParagraph | 多边形文本 |
| RectangleParagraph | 矩形文本 |
| SplinedText | 沿直线或曲线样条的文本 |

三、检查应用程序中是否有特定字体可用于 Pro 会话。 必须在 MCT 上调用此方法。IsFontAvailable 方法 (SymbolFactory)

public bool IsFontAvailable(

string fontName,

string fontStyle,

FontType fontType,

List<CIMFontVariation> fontVariationSettings

)

fontName:字体簇的名称。

fontStyle :字体样式的名称。

fontType:字体类型。

fontVariationSettings:要应用的任何字体变体设置。可以为 null。

返回值:一个布尔值,表示字体是否可用。例如:

复制代码
Dim BOOT=SymbolFactory.Instance.IsFontAvailable("Arial", "Bold", FontType.Unspecified, null)

四、创建文本

1、创建简单的文本符号(Creates a simple text symbol)创建一个大小为8.5、字体系列为"Corbel"、字体样式为"Regular"的简单黑色文本符号。

复制代码
Await QueuedTask.Run(Sub()
                         pmap = MapView.Active.Map  '获取激活的map对象
                         Dim GraphicsLayer = pmap.GetLayersAsFlattenedList().OfType(Of ArcGIS.Desktop.Mapping.GraphicsLayer).FirstOrDefault()  '获取的GraphicsLayer对象
                         Dim TextSymbol =SymbolFactory.Instance.ConstructTextSymbol(ColorFactory.Instance.BlackRGB, 8.5, "Corbel", "Regular")
                         '文本的偏移量
                         TextSymbol.OffsetX = 0.5
                         TextSymbol.OffsetY = 0.5
                         Dim Location As MapPoint = MapPointBuilderEx.CreateMapPoint(PX,PY)
                         Dim text As String = "Forest Grove"
                         Dim polyTxtElm As GraphicElement = ElementFactory.Instance.CreateTextGraphicElement(GraphicsLayer, TextType.PointText, Location, TextSymbol, text, "地块注记")
                     End Sub)

效果:

2、创建创建带有光晕环的文本符号(Creates a text symbol with a halo)

复制代码
Await QueuedTask.Run(Sub()
                         pmap = MapView.Active.Map  '获取激活的map对象
                         Dim GraphicsLayer = pmap.GetLayersAsFlattenedList().OfType(Of ArcGIS.Desktop.Mapping.GraphicsLayer).FirstOrDefault()  '获取的GraphicsLayer对象
                         
                         Dim haloPoly = SymbolFactory.Instance.ConstructPolygonSymbol(ColorFactory.Instance.RedRGB, SimpleFillStyle.Solid)

                         Dim TextSymbol = SymbolFactory.Instance.ConstructTextSymbol(haloPoly, 10, "Arial", "Bold")
                         '文本的偏移量
                         TextSymbol.OffsetX = 0.5
                         TextSymbol.OffsetY = 0.5
                         Dim Location As MapPoint = MapPointBuilderEx.CreateMapPoint(PX,PY)
                         Dim text As String = "Portland"
                         Dim polyTxtElm As GraphicElement = ElementFactory.Instance.CreateTextGraphicElement(GraphicsLayer, TextType.PointText, Location, TextSymbol, text, "地块注记")
                     End Sub)

效果:

3、创建简单的牵引文本符号(Creates a text symbol with a halo)

复制代码
Await QueuedTask.Run(Sub()
                         pmap = MapView.Active.Map  '获取激活的map对象
                         Dim GraphicsLayer = pmap.GetLayersAsFlattenedList().OfType(Of ArcGIS.Desktop.Mapping.GraphicsLayer).FirstOrDefault()  '获取的GraphicsLayer对象
                         
                         Dim textSymbol = SymbolFactory.Instance.ConstructTextSymbol(ColorFactory.Instance.BlackRGB, 10, "Verdana", "Regular")

                         Dim lineCalloutSymbol = new CIMSimpleLineCallout()
                         Dim lineSymbol = SymbolFactory.Instance.ConstructLineSymbol(ColorFactory.Instance.BlackRGB, 1, SimpleLineStyle.DashDotDot)
                         lineCalloutSymbol.LineSymbol = lineSymbol
                         '文本的偏移量
                         TextSymbol.OffsetX = 10
                         TextSymbol.OffsetY = 10
                         textSymbol.Callout = lineCalloutSymbol
                         Dim Location As MapPoint = MapPointBuilderEx.CreateMapPoint(PX,PY)
                         Dim text As String = "Forest Grove"
                         Dim polyTxtElm As GraphicElement = ElementFactory.Instance.CreateTextGraphicElement(GraphicsLayer, TextType.PointText, Location, TextSymbol, text, "地块注记")
                     End Sub)

效果:

4、创建圆角矩形的牵引文本框符号(Creates a balloon callout text symbol)

复制代码
Await QueuedTask.Run(Sub()
                         pmap = MapView.Active.Map  '获取激活的map对象
                         Dim GraphicsLayer = pmap.GetLayersAsFlattenedList().OfType(Of ArcGIS.Desktop.Mapping.GraphicsLayer).FirstOrDefault()  '获取的GraphicsLayer对象
                         Dim Location As MapPoint = MapPointBuilderEx.CreateMapPoint(PX,PY)
                         Dim textSymbol = SymbolFactory.Instance.ConstructTextSymbol(ColorFactory.Instance.WhiteRGB, 11, "Corbel", "Regular")
                         Dim balloonCallout = new CIMBalloonCallout()
                         BalloonCallout.BalloonStyle = BalloonCalloutStyle.RoundedRectangle

                         Dim polySymbol = SymbolFactory.Instance.ConstructPolygonSymbol(ColorFactory.Instance.BlackRGB, SimpleFillStyle.Solid)
                         BalloonCallout.BackgroundSymbol = polySymbol
                         BalloonCallout.Margin = new CIMTextMargin
                         With BalloonCallout.Margin
                            .Left = 5
                            .Right = 5
                            .Bottom = 5
                            .Top = 5
                        End With
                        TextSymbol.Callout = balloonCallout
                        Dim text As String = "Forest Grove"
                        Dim polyTxtElm As GraphicElement = ElementFactory.Instance.CreateTextGraphicElement(GraphicsLayer, TextType.RectangleParagraph, Location, TextSymbol, text, "地块注记")
                     End Sub)

效果:

5、创建点符号的文本符号(Creates a point callout text symbol)

复制代码
Await QueuedTask.Run(Sub()
                         pmap = MapView.Active.Map  '获取激活的map对象
                         Dim GraphicsLayer = pmap.GetLayersAsFlattenedList().OfType(Of ArcGIS.Desktop.Mapping.GraphicsLayer).FirstOrDefault()  '获取的GraphicsLayer对象
                         
                         Dim textSymbol = SymbolFactory.Instance.ConstructTextSymbol(ColorFactory.Instance.WhiteRGB, 6, "Tahoma", "Bold")
                         Dim shieldCalloutSymbol = new CIMPointSymbolCallout()
                         Dim symbolStyleItem = GetPointSymbol("ArcGIS 2D", "Shield 1")             
                         ShieldCalloutSymbol.PointSymbol = symbolStyleItem.Symbol as CIMPointSymbol
                         ShieldCalloutSymbol.PointSymbol.SetSize(18.0)
                         TextSymbol.Callout = shieldCalloutSymbol
                         Dim Location As MapPoint = MapPointBuilderEx.CreateMapPoint(PX,PY)
                         Dim text As String = "I5"
                         Dim polyTxtElm As GraphicElement = ElementFactory.Instance.CreateTextGraphicElement(GraphicsLayer, TextType.PointText, Location, TextSymbol, text, "地块注记")
                     End Sub)

效果:

6、创建设置矩形背景色的牵引文本框符号(Creates a background callout text symbol)

复制代码
Await QueuedTask.Run(Sub()
                         pmap = MapView.Active.Map  '获取激活的map对象
                         Dim GraphicsLayer = pmap.GetLayersAsFlattenedList().OfType(Of ArcGIS.Desktop.Mapping.GraphicsLayer).FirstOrDefault()  '获取的GraphicsLayer对象
                         Dim Location As MapPoint = MapPointBuilderEx.CreateMapPoint(PX,PY)
                         Dim textSymbol = SymbolFactory.Instance.ConstructTextSymbol(ColorFactory.Instance.BlackRGB, 8, "Tahoma", "Bold")
                         Dim backgroundCalloutSymbol = new CIMBackgroundCallout()
                         Dim lineSymbol = SymbolFactory.Instance.ConstructLineSymbol(ColorFactory.Instance.BlackRGB, 1, SimpleLineStyle.DashDotDot)
                         Dim aquaBackground = ColorFactory.Instance.CreateRGBColor(190, 255, 232, 100)
                         Dim polySymbol = SymbolFactory.Instance.ConstructPolygonSymbol(aquaBackground, SimpleFillStyle.Solid)
                         BackgroundCalloutSymbol.LeaderLineSymbol = lineSymbol
                         TextSymbol.OffsetX = 10
                         TextSymbol.OffsetY = 10
                         BackgroundCalloutSymbol.BackgroundSymbol = polySymbol
                         Dim accentSymbol = SymbolFactory.Instance.ConstructLineSymbol(ColorFactory.Instance.BlackRGB, 2, SimpleLineStyle.Solid)
                         BackgroundCalloutSymbol.AccentBarSymbol = accentSymbol
                         BackgroundCalloutSymbol.Margin = new CIMTextMargin
                         With BalloonCallout.Margin
                              .Left = 5
                              .Right = 5
                              .Bottom = 5
                              .Top = 5
                        End With
                        TextSymbol.Callout = backgroundCalloutSymbol
                        Dim text As String = "Forest Grove"
                        Dim polyTxtElm As GraphicElement = ElementFactory.Instance.CreateTextGraphicElement(GraphicsLayer,TextType.RectangleParagraph, poly, TextSymbol, text, "地块注记")
                     End Sub)

效果:

相关推荐
凌虚6 小时前
面向 MySQL 用户的 PostgreSQL 快速上手指南
数据库·后端·架构
五阿哥永琪6 小时前
MySQL中操作json的函数!
数据库·mysql·json
来者皆善6 小时前
了解Mysql优化吗?如何优化索引?
数据库·mysql
赤壁小虾9 小时前
【渲染流水线】[逐片元阶段]-[透明度测试]以UnityURP为例
java·前端·数据库
MC皮蛋侠客9 小时前
SQLAlchemy 系列(七):高级建模与高效写入——批量 DML、方言与扩展
数据库·python
奈斯先生Vector10 小时前
把 Midjourney 二次编辑做成生产系统:customId 能力令牌、Action Graph 与 WebUI 精修工作台
数据库·人工智能·架构·aigc·音视频·midjourney
Lethehong10 小时前
双擎并驱·全链路并行:KFS让TB级异构增量同步秒级到达
数据库
MC皮蛋侠客11 小时前
SQLAlchemy 系列(八):AsyncIO、并发与 Web 生命周期——让每个并发任务持有自己的 Session
数据库·python
一水11 小时前
Redis实战:一个AI工作流系统里的五个应用场景,从传参到限流的完整链路
数据库·redis·wpf
Ai拆代码的曹操11 小时前
MySQL GROUP BY 性能优化:执行计划分析 + 索引重构实战
mysql·性能优化·重构