public PasteResult Paste(int layerHandle, Shapefile sf) { if (sf == null || IsEmpty) { return(PasteResult.NoInput); } if (!sf.InteractiveEditing) { return(PasteResult.NoInput); } if (IsEmpty) { return(PasteResult.NoInput); } if (_buffer.ShapefileType != sf.ShapefileType) { return(PasteResult.ShapeTypeMismatch); } var fieldMap = _buffer.BuildFieldMap(sf); var undoList = App.Map.UndoList; undoList.BeginBatch(); sf.SelectNone(); for (int i = 0; i < _buffer.NumShapes; i++) { int shapeIndex = sf.EditAddShape(_buffer.Shape[i].Clone()); // don't create a copy, buffer won't be used any more _buffer.CopyAttributes(i, sf, shapeIndex, fieldMap); // TODO: don't use field map for the same shapefile undoList.Add(tkUndoOperation.uoAddShape, layerHandle, shapeIndex); sf.ShapeSelected[shapeIndex] = true; } undoList.EndBatch(); Clear(); return(PasteResult.Ok); }