public static void CopyToEditLayer(Collection <FeatureLayer> selectionLayers) { GisEditorEditInteractiveOverlay overlay = GisEditor.ActiveMap.FeatureLayerEditOverlay; if (overlay != null) { FeatureLayer editingLayer = overlay.EditTargetLayer; Collection <FeatureLayer> sourceLayers = new Collection <FeatureLayer>(selectionLayers.Except(editingLayer).ToList()); if (sourceLayers.Count > 1) { ChooseExportLayerWindow chooseExportLayerWindow = new ChooseExportLayerWindow(sourceLayers, new Collection <FeatureLayer> { editingLayer }); chooseExportLayerWindow.SelectedTargetFeatureLayer = editingLayer; if (chooseExportLayerWindow.ShowDialog().GetValueOrDefault()) { AddSelectedFeaturesToEditingLayer(chooseExportLayerWindow.SelectedSourceFeatureLayer); } else { return; } } else if (selectionLayers.Count == 1) { AddSelectedFeaturesToEditingLayer(selectionLayers[0]); } else if (selectionLayers.Count == 2 && sourceLayers.Count == 1) { AddSelectedFeaturesToEditingLayer(sourceLayers[0]); } } }
private static void AddSelectedFeaturesToEditingLayer(FeatureLayer sourceLayer) { GisEditorEditInteractiveOverlay overlay = GisEditor.ActiveMap.FeatureLayerEditOverlay; if (overlay != null) { FeatureLayer editingLayer = overlay.EditTargetLayer; Collection <Feature> features = GisEditor.SelectionManager.GetSelectedFeatures(sourceLayer); foreach (var feature in features) { feature.Id = Guid.NewGuid().ToString(); overlay.NewFeatureIds.Add(feature.Id); overlay.EditShapesLayer.InternalFeatures.Add(feature); } sourceLayer.SafeProcess(() => { Collection <FeatureSourceColumn> columns = sourceLayer.FeatureSource.GetColumns(); overlay.EditShapesLayer.Columns.Clear(); foreach (var column in columns) { overlay.EditShapesLayer.Columns.Add(column); } }); overlay.TakeSnapshot(); overlay.Refresh(); GisEditor.SelectionManager.ClearSelectedFeatures(sourceLayer); } }
protected override Collection <MenuItem> GetMapContextMenuItemsCore(GetMapContextMenuParameters parameters) { cursorWorldPoint = parameters.WorldCoordinates; Collection <MenuItem> menuItems = new Collection <MenuItem>(); GisEditorEditInteractiveOverlay editOverlay = GisEditor.ActiveMap.FeatureLayerEditOverlay; if (editOverlay != null && !editOverlay.IsEmpty) { var intersectingFeatures = editOverlay.GetEditingFeaturesInterseting(); if (intersectingFeatures.Count > 0) { selectedFeature = intersectingFeatures.OrderBy(f => f.GetShape().GetDistanceTo(editOverlay.CurrentWorldCoordinate, GeographyUnit.Meter, DistanceUnit.Meter)).FirstOrDefault(); foreach (var item in GetEditMenuItems(selectedFeature, editOverlay.CanReshape, intersectingFeatures.Count)) { menuItems.Add(item); } } else if (clickCopy) { InitializeCopyPasteMenuItems(); menuItems.Add(copyFeatureMenuItem); menuItems.Add(pasteFeatureMenuItem); } else { selectedFeature = null; } } else { selectedFeature = null; } return(menuItems); }
private void GridCellEditing(DataGridCellEditEndingEventArgs e) { GisEditorEditInteractiveOverlay editOverlay = GisEditor.ActiveMap.FeatureLayerEditOverlay; InMemoryFeatureLayer layer = editOverlay != null ? editOverlay.EditShapesLayer : null; if (layer != null) { try { FeatureViewModel entity = featuresList.SelectedValue as FeatureViewModel; string columnName = ((DataRowView)e.Row.Item)[0].ToString(); string columnValue = (e.EditingElement as TextBox).Text; if (columnValue != originalColumnValue) { layer.Open(); Feature feature = layer.QueryTools.GetFeatureById(entity.FeatureId, layer.GetDistinctColumnNames()); feature.ColumnValues[columnName] = columnValue; if (!layer.EditTools.IsInTransaction) { layer.EditTools.BeginTransaction(); } layer.EditTools.Update(feature); TransactionResult result = layer.EditTools.CommitTransaction(); if (result.TotalFailureCount != 0) { string failureReasonString = null; Dictionary <string, string> failureReasons = result.FailureReasons; foreach (string key in failureReasons.Keys) { failureReasonString += "\r\n\r\n" + failureReasons[key]; } System.Windows.Forms.MessageBox.Show(GisEditor.LanguageManager.GetStringResource("FeatureAttibuteWindowUpdateFailedText") + failureReasonString, GisEditor.LanguageManager.GetStringResource("FeatureAttibuteWindowUpdateFailedCaption")); (e.EditingElement as TextBox).Text = originalColumnValue; } else { // Update the selected value entity.Feature.ColumnValues[columnName] = columnValue; } } } catch (UnauthorizedAccessException unauthorizedAccessException) { GisEditor.LoggerManager.Log(LoggerLevel.Debug, unauthorizedAccessException.Message, new ExceptionInfo(unauthorizedAccessException)); System.Windows.Forms.MessageBox.Show(string.Format("{0} {1}", unauthorizedAccessException.Message, GisEditor.LanguageManager.GetStringResource("FeatureAttributeWindowRestartAdminText")), GisEditor.LanguageManager.GetStringResource("MessageBoxWarningTitle"), System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning); } catch (Exception ex) { GisEditor.LoggerManager.Log(LoggerLevel.Debug, ex.Message, new ExceptionInfo(ex)); System.Windows.Forms.MessageBox.Show(ex.Message); } finally { layer.Close(); } } }
private void removeVertexMenuItem_Click(object sender, RoutedEventArgs e) { GisEditorEditInteractiveOverlay editOverlay = GisEditor.ActiveMap.FeatureLayerEditOverlay; if (editOverlay != null && selectedFeature.GetShape() != null) { editOverlay.RemoveVertex(cursorWorldPoint); editOverlay.CalculateVertexControlPoints(); GisEditor.ActiveMap.Refresh(); } }
private static void ClearEditOverlay(GisEditorEditInteractiveOverlay editOverlay) { editOverlay.EditTargetLayer.FeatureIdsToExclude.Clear(); editOverlay.EditShapesLayer.InternalFeatures.Clear(); editOverlay.AssociateControlPointsLayer.InternalFeatures.Clear(); editOverlay.ReshapeControlPointsLayer.InternalFeatures.Clear(); editOverlay.EditShapesLayer.BuildIndex(); editOverlay.AssociateControlPointsLayer.BuildIndex(); editOverlay.ReshapeControlPointsLayer.BuildIndex(); GisEditor.ActiveMap.Refresh(editOverlay); }
private void IdentifyMenuItem_Click(object sender, RoutedEventArgs e) { GisEditorEditInteractiveOverlay editOverlay = GisEditor.ActiveMap.FeatureLayerEditOverlay; if (editOverlay != null && selectedFeature.GetShape() != null) { var identifyWindow = FeatureInfoWindow.Instance; identifyWindow.Show(DockWindowPosition.Right); Dictionary <FeatureLayer, Collection <Feature> > features = new Dictionary <FeatureLayer, Collection <Feature> >(); features[editOverlay.EditTargetLayer] = new Collection <Feature>() { selectedFeature }; identifyWindow.Refresh(features); } }
private static void AddFeaturesToEditingLayer(IEnumerable <Feature> features) { GisEditorEditInteractiveOverlay editOverlay = GisEditor.ActiveMap.FeatureLayerEditOverlay; if (editOverlay != null) { FeatureLayer editingLayer = editOverlay.EditTargetLayer; foreach (var feature in features) { feature.Id = Guid.NewGuid().ToString(); editOverlay.NewFeatureIds.Add(feature.Id); editOverlay.EditShapesLayer.InternalFeatures.Add(feature); } editOverlay.TakeSnapshot(); editOverlay.Refresh(); } }
private void RemoveMenuItem_Click(object sender, RoutedEventArgs e) { GisEditorEditInteractiveOverlay editOverlay = GisEditor.ActiveMap.FeatureLayerEditOverlay; if (editOverlay != null && selectedFeature.GetShape() != null) { lock (editOverlay.EditShapesLayer) { if (!editOverlay.EditShapesLayer.IsOpen) { editOverlay.EditShapesLayer.Open(); } editOverlay.EditShapesLayer.EditTools.BeginTransaction(); editOverlay.EditShapesLayer.EditTools.Delete(selectedFeature.Id); editOverlay.EditShapesLayer.EditTools.CommitTransaction(); } editOverlay.ClearVertexControlPoints(); editOverlay.TakeSnapshot(); editOverlay.Refresh(); } }
public override ValidationResult Validate(object value, CultureInfo cultureInfo) { ValidationResult result = null; double inputValue = 0; bool isDouble = double.TryParse(value.ToString(), out inputValue); if (isDouble && GisEditor.ActiveMap != null) { GisEditorEditInteractiveOverlay editOverlay = GisEditor.ActiveMap.FeatureLayerEditOverlay; if (editOverlay != null) { SnappingDistanceUnit unit = editOverlay.SnappingDistanceUnit; if (distanceMaxValues.ContainsKey(unit)) { double maxValue = distanceMaxValues[unit]; if (inputValue > maxValue) { result = new ValidationResult(false, null); } else { result = new ValidationResult(true, null); } } else { result = new ValidationResult(true, null); } } } else { result = new ValidationResult(false, null); } return(result); }