Saya memiliki alat khusus di ArcMap 10. Alur kerjanya adalah sebagai berikut:
- Pilih Fitur dalam Layer dengan alat "Select Features by Rectangle"
- Salin Fitur ke Clipboard menggunakan STRG + c
- Pilih alat kustom
- Alat memeriksa Papan Klip. Jika menemukan Fitur yang disalin di Clipboard, Workflow akan berubah
Saya menemukan contoh di http://kiwigis.blogspot.com/2011/07/how-to-create-drop-target-for-layers-in.html di mana hal serupa diimplementasikan menggunakan seret dan lepas.
Mengikuti dan mengadaptasi contoh dan mencoba menyalin lapisan di TOC di ArcMap ke clipboard menggunakan STRG + c bekerja untuk saya:
//Get the Data from the Clipboard
IDataObject clipBoardDataObject = Clipboard.GetDataObject();
//The format of the object data is "ESRI Layers" (this can be checked using clipBoardDataObject.GetFormats();)
MemoryStream geomStream = clipBoardDataObject.GetData("ESRI Layers") as MemoryStream;
byte[] bytes = geomStream.ToArray();
IMemoryBlobStreamVariant memoryBlobStreamVariant = new MemoryBlobStreamClass();
memoryBlobStreamVariant.ImportFromVariant(bytes);
IMemoryBlobStream2 memoryBlobStream = memoryBlobStreamVariant as IMemoryBlobStream2;
IStream stream = memoryBlobStream as IStream;
IObjectStream objectStream = new ObjectStreamClass();
objectStream.Stream = stream;
byte pv;
uint cb = sizeof(int);
uint pcbRead;
objectStream.RemoteRead(out pv, cb, out pcbRead);
int count = Convert.ToInt32(pv);
//Guid you find in the ESRI ILayer Interface
Guid iLayerGuid = new Guid("34C20002-4D3C-11D0-92D8-00805F7C28B0");
for (int i = 0; i < count; i++)
{
object o = objectStream.LoadObject(ref iLayerGuid, null);
ILayer layer = o as ILayer;
}
Saya dapat melemparkan objek ke ILayer, ini berfungsi!
Mencoba mencapai hal yang sama dengan Fitur yang disalin tidak berfungsi untuk saya, setidaknya saya tidak benar-benar tahu harus berbuat apa.
//Get the Data from the Clipboard
IDataObject clipBoardDataObject = Clipboard.GetDataObject();
MemoryStream geomStream = clipBoardDataObject.GetData("ESRI Geometry List") as MemoryStream;
byte[] bytes = geomStream.ToArray();
IMemoryBlobStreamVariant memoryBlobStreamVariant = new MemoryBlobStreamClass();
memoryBlobStreamVariant.ImportFromVariant(bytes);
IMemoryBlobStream2 memoryBlobStream = memoryBlobStreamVariant as IMemoryBlobStream2;
IStream stream = memoryBlobStream as IStream;
IObjectStream objectStream = new ObjectStreamClass();
objectStream.Stream = stream;
byte pv;
uint cb = sizeof(int);
uint pcbRead;
objectStream.RemoteRead(out pv, cb, out pcbRead);
int count = Convert.ToInt32(pv);
//What to do next? What object do I need to unpack to?
Anda lihat di sini bahwa format objek adalah "Daftar Geometri ESRI" (yang saya tidak dapat menemukan informasi online). Jadi bagaimana saya bisa "membongkar" objek ini? Pemilihan IFeature, IFeature, IGeometry tidak akan berfungsi.
Ada Ide?