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椭圆文本
NoneNone- 默认
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)

效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值