ARCGIS PRO DSK GraphicsLayer创建文本要素

avatar
作者
猴君
阅读量:0

一、判断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)

效果:

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!