internal static bool CommitTextAnnotations() { bool isChanged = false; //if (CurrentMarkerOverlay != null && !ViewModel.IsInSelectMoveMode) if (CurrentMarkerOverlay != null) { var markerResults = CurrentMarkerOverlay.Markers .Where(marker => !string.IsNullOrEmpty((marker.Content as TextBox).Text)) .Select(marker => { TextBox textBox = (TextBox)marker.Content; string text = textBox.Text; string styleValue = textBox.Tag.ToString(); return(new { Text = text, WorldX = marker.Position.X, WorldY = marker.Position.Y, Id = (string)(marker.Tag ?? ViewModel.CurrentAnnotationOverlay.NewFeatureName()), StyleValue = styleValue }); }).ToArray(); shouldAddTextBoxWhenNextClick = markerResults.Length == 0; foreach (var markerResult in markerResults) { var currentTrackShapeLayer = ViewModel.CurrentAnnotationOverlay.TrackShapeLayer; var correspondFeature = currentTrackShapeLayer.InternalFeatures.FirstOrDefault(f => f.Id.Equals(markerResult.Id)); int index = -1; if (correspondFeature != null) { index = currentTrackShapeLayer.InternalFeatures.IndexOf(correspondFeature); currentTrackShapeLayer.InternalFeatures.Remove(correspondFeature); } var newFeature = new Feature(new Vertex(markerResult.WorldX, markerResult.WorldY), markerResult.Id); if (index > -1) { currentTrackShapeLayer.InternalFeatures.Insert(index, newFeature); } else { currentTrackShapeLayer.InternalFeatures.Add(markerResult.Id, newFeature); } if (currentTrackShapeLayer.FeatureIdsToExclude.Contains(markerResult.Id)) { currentTrackShapeLayer.FeatureIdsToExclude.Remove(markerResult.Id); } ViewModel.CurrentAnnotationOverlay.StyleLastTextAnnotation(newFeature, markerResult.Text, markerResult.StyleValue); isChanged = true; } CurrentMarkerOverlay.Markers.Clear(); CurrentMarkerOverlay.Refresh(); ViewModel.CurrentAnnotationOverlay.Refresh(); ViewModel.SyncUIState(); GisEditor.UIManager.RefreshPlugins(new RefreshArgs(CurrentMarkerOverlay, RefreshArgsDescription.CommitTextAnnotationsDescription)); } return(isChanged); }
private static void CancelTextAnnotation() { CurrentMarkerOverlay.Markers.Clear(); CurrentMarkerOverlay.Refresh(); }