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)

效果:

相关推荐
sleepcattt1 分钟前
Spring-全面详解(学习总结)
数据库·sql·spring·spring事务·spring详解
Volunteer Technology4 分钟前
Spring AI MCP案例
java·开发语言·数据库
神明9317 分钟前
CSS 背景图滑动切换:纯 CSS 实现右进左出轮播效果
jvm·数据库·python
星栈7 分钟前
投影挂了怎么办?我的 CQRS 三层容错方案
数据库·后端·开源
东风破13711 分钟前
DM8数据库读写分离集群安装部署
数据库·oracle·dm达梦数据库
IT研究所12 分钟前
从系统选型到ITR智能服务流落地的关键一步
大数据·运维·服务器·数据库·人工智能·科技·自动化
wang3zc12 分钟前
CSS如何让最后一行项目左对齐_利用flex布局配合伪元素空项填充
jvm·数据库·python
2303_8212873813 分钟前
如何用 Chrome 的 Rendering 面板监控页面的重排频率
jvm·数据库·python
m0_6315298218 分钟前
C#怎么解析XML文件 C#如何用XmlDocument和LINQ to XML读写XML数据【基础】
jvm·数据库·python
六月雨滴21 分钟前
Oracle 数据库用户管理
数据库·oracle·dba