예제 #1
0
        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);
        }