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