मैं ArcMap 10 में एक कस्टम उपकरण है। वर्कफ़्लो निम्नलिखित है:
- "आयत द्वारा चयन करें सुविधाएँ" उपकरण के साथ एक परत में सुविधाओं का चयन करें
- STRG + c का उपयोग करके क्लिपबोर्ड में सुविधाओं की प्रतिलिपि बनाएँ
- कस्टम टूल का चयन करें
- टूल क्लिपबोर्ड की जांच करता है। क्लिपबोर्ड में कॉपी किए गए फ़ीचर को खोजने के मामले में वर्कफ़्लो बदल जाता है
मुझे http://kiwigis.blogspot.com/2011/07/how-to-create-drop-target-for-layers-in.html पर एक उदाहरण मिला जहां ड्रैग और ड्रॉप का उपयोग करके समान सामान लागू किया जाता है।
उदाहरण का पालन करना और उसका पालन करना और STRG + c का उपयोग करते हुए क्लिपबोर्ड में TOC की परतों में प्रतिलिपि बनाने की कोशिश करना इसके लिए कारगर नहीं है:
//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;
}
मैं ILayer को ऑब्जेक्ट डाल सकता हूं, यह काम कर रहा है!
कॉपी की गई विशेषताओं के साथ ही इसे प्राप्त करने की कोशिश करना मेरे लिए काम नहीं कर रहा है, कम से कम मुझे वास्तव में नहीं पता कि क्या करना है।
//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?
आप यहाँ देखते हैं कि ऑब्जेक्ट प्रारूप "ESRI ज्यामिति सूची" है (जिसमें से मुझे कोई जानकारी ऑनलाइन नहीं मिल सकती है)। तो मैं इस वस्तु को "अनपैक" कैसे कर सकता हूं? IFeatureSelection, IFeature, IGeometry अभ्यस्त काम करते हैं।
कोई विचार?