laptop and a wrench

Erro

The annotation feature created by ArcGIS Pro SDK fails to rotate when MapView is rotated by a specified angle.

Última Publicação: March 30, 2020 ArcGIS Pro SDK for .NET
Número de ID do Erro BUG-000129683
EnviadoMarch 26, 2020
Última ModificaçãoJune 5, 2024
Aplica-se àArcGIS Pro SDK for .NET
Versão encontrada2.5
Sistema OperacionalWindows OS
Versão do Sistema Operacional10.0 64 Bit
StatusWill Not Be Addressed

Informações Adicionais

The code here is for creating a point annotation. Create a two-point annotation if staying horizontal with the map is not desired. A replacement C# file doing this is as below: using System; using System.Linq; using System.Threading.Tasks; using System.Collections.Generic; using ArcGIS.Core.CIM; using ArcGIS.Core.Data; using ArcGIS.Core.Geometry; using ArcGIS.Desktop.Editing; using ArcGIS.Desktop.Framework.Dialogs; using ArcGIS.Desktop.Framework.Threading.Tasks; using ArcGIS.Desktop.Mapping; using ArcGIS.Desktop.Editing.Attributes; namespace AGP_AnnoEdit { internal class AddAnnoTool : MapTool { private int _seq = 0; public AddAnnoTool() { IsSketchTool = true; UseSnapping = true; SketchOutputMode = ArcGIS.Desktop.Mapping.SketchOutputMode.Map; SketchType = SketchGeometryType.Point; } protected override Task OnToolActivateAsync(bool active) { return base.OnToolActivateAsync(active); } protected override async Task OnSketchCompleteAsync(Geometry geometry) { bool creationResult = false; await QueuedTask.Run(() => { var map = ArcGIS.Desktop.Mapping.MapView.Active.Map; AnnotationLayer annoLayer = map.GetLayersAsFlattenedList().OfType().FirstOrDefault(); creationResult = StoreNewFeatureAnno(annoLayer, geometry, (++_seq).ToString()); }); return creationResult; } // patterned after https://github.com/Esri/arcgis-pro-sdk/wiki/ProConcepts-Editing-Annotation internal static bool StoreNewFeatureAnno(AnnotationLayer annoLayer, ArcGIS.Core.Geometry.Geometry geometry, string textStr) { bool creationResult = false; string message = String.Empty; // Create an edit operation var createOperation = new EditOperation(); createOperation.Name = string.Format("Create {0}", annoLayer.Name); createOperation.SelectNewFeatures = false; // get the anno feature class var fc = annoLayer.GetFeatureClass() as ArcGIS.Core.Data.Mapping.AnnotationFeatureClass; // get the featureclass CIM definition which contains the labels, symbols var fcDefinition = fc.GetDefinition() as ArcGIS.Core.Data.Mapping.AnnotationFeatureClassDefinition; var labels = fcDefinition.GetLabelClassCollection(); var symbols = fcDefinition.GetSymbolCollection(); // make sure there are labels, symbols if ((labels.Count == 0) || (symbols.Count == 0)) return false; // use the first label class var label = labels[0]; // each label has a textSymbol // the symbolName *should* be the symbolID to be used var symbolName = label.TextSymbol.SymbolName; int symbolID = -1; if (!int.TryParse(symbolName, out symbolID)) { // int.TryParse fails - attempt to find the symbolName in the symbol collection foreach (var symbol in symbols) { if (symbol.Name == symbolName) { symbolID = symbol.ID; break; } } } // no symbol? if (symbolID == -1) return false; // load the schema Inspector insp = new Inspector(true); insp.LoadSchema(annoLayer); // ok to access AnnotationClassID this way - it is guaranteed to exist insp["AnnotationClassID"] = label.ID; insp["SymbolID"] = symbolID; CIMTextSymbol textSymbol = SymbolFactory.Instance.ConstructTextSymbol(CIMColor.CreateRGBColor(0, 0, 0), 12, "Arial", "normal"); double tolerance = geometry.SpatialReference?.XYTolerance ?? 0.001; // Create a two point line from the input point so that it remains in a fixed position when the map is rotated. Polyline polyline = Create2PointPolylineFromPoint(geometry as MapPoint, tolerance * 2.0, 0); // y=0 so horizontal // set up some properties AnnotationProperties annoProperties = insp.GetAnnotationProperties(); annoProperties.FontName = textSymbol.FontFamilyName; annoProperties.FontSize = textSymbol.GetSize(); annoProperties.TextString = textStr; annoProperties.VerticalAlignment = ArcGIS.Core.CIM.VerticalAlignment.Bottom; annoProperties.HorizontalAlignment = ArcGIS.Core.CIM.HorizontalAlignment.Center; annoProperties.Shape = polyline as Geometry; insp.SetAnnotationProperties(annoProperties); // Queue feature creation createOperation.Create(annoLayer, insp); try { // Execute the operation creationResult = createOperation.Execute(); if (!creationResult) message = createOperation.ErrorMessage; } catch (GeodatabaseException exObj) { message = exObj.Message; } if (!string.IsNullOrEmpty(message)) MessageBox.Show(message); return creationResult; } internal static Polyline Create2PointPolylineFromPoint(MapPoint point, double xtol, double ytol) { if (point == null) return null; // use the starting point and offsets to construct the points var point1 = GeometryEngine.Instance.Move(MapPointBuilder.CreateMapPoint(point), -xtol, -ytol) as MapPoint; var point2 = GeometryEngine.Instance.Move(MapPointBuilder.CreateMapPoint(point), xtol, ytol) as MapPoint; return PolylineBuilder.CreatePolyline(new List() { point1, point2 }); } } }

Etapas para Reproduzir

ID do Erro: BUG-000129683

Software:

  • ArcGIS Pro SDK for .NET

Seja notificado quando o status de um erro mudar

Baixe o Aplicativo de Suporte da Esri

Descubra mais sobre este tema

Obtenha ajuda de especialistas do ArcGIS

Entre em contato com Suporte Técnico

Baixe o Aplicativo de Suporte da Esri

Ir para as opções de download