Hi Luis,
I had a chance to play around with this a little. Here is an example of how to do AcDbObjectIdArray <--> ObjectIdCollection
extern "C" __declspec(dllexport)
void pTest(AcDbObjectIdArray &ids)
{
Acad::ErrorStatus es;
int counter = 0;
AcDbBlockTableRecord *pTableRecord;
AcDbDatabase *pDatabase =
acdbHostApplicationServices()->workingDatabase();
AcDbBlockTablePointer
pBlockTable(pDatabase,AcDb::kForRead);
AcDbBlockTableIterator *pBlockTableIterator;
pBlockTable->newIterator(pBlockTableIterator);
for (pBlockTableIterator->start();
!pBlockTableIterator->done();
pBlockTableIterator->step())
{
es = pBlockTableIterator->getRecord(pTableRecord, AcDb::kForRead,Adesk::kFalse);
if (es == Acad::eOk && pTableRecord->hasAttributeDefinitions() == Adesk::kTrue)
{
AcDbObjectIdArray blockReferenceIds;
pTableRecord->getBlockReferenceIds(blockReferenceIds);
ids.append(blockReferenceIds);
pTableRecord->close();
}
}
delete pBlockTableIterator;
}
public class Commands
{
[DllImport("LuisArx.arx",CallingConvention = CallingConvention.Cdecl)]
static extern IntPtr pTest(IntPtr ptrIds);
[CommandMethod("doit")]
static public void test()
{
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
try
{
ObjectIdCollection ids = new ObjectIdCollection();
pTest(ids.UnmanagedObject);
ed.WriteMessage(ids.Count.ToString());
}
catch (System.Exception ex)
{
ed.WriteMessage(ex.Message);
}
}
}