Я часто использую библиотеку .NET для получения ссылок на блоки, однако я никогда не получал их с помощью COM-объекта. Следующий метод, который у меня был, - это взять имя и местоположение блока и вернуть ссылку на блок. Я изменил его здесь, чтобы получить AcadBlockReference, и я использую его свойство Name, чтобы найти его в BlockTable. Я не проверял это, поскольку у меня нет времени на это, но просто подумал, что выкину это здесь и надеюсь, что это поможет вам двигаться вперед.
Извините, что мой пример на C #, но это должно быть достаточно легко переписать в VB.NET.
public BlockReference GetBlockReferenceFromCOM(AcadBlockReference comReference, Point3d location)
{
using (Database database = Application.DocumentManager.MdiActiveDocument.Database)
{
using (Transaction transaction = database.TransactionManager.StartTransaction())
{
BlockTable blockTable = transaction.GetObject(database.BlockTableId, OpenMode.ForRead) as BlockTable;
BlockTableRecord acBlkTblRecNewDoc = (BlockTableRecord)transaction.GetObject(blockTable[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
BlockReference newBlockReference = new BlockReference(location, blockTable[comReference.Name]);
transaction.Commit();
return newBlockReference;
}
}
}
EDIT
У вас есть идентификатор объекта для этих предметов? Если это так, вы можете сделать что-то вроде этого:
public DBObject GetBlockReferenceFromCOM(ObjectId id)
{
using (Database database = Application.DocumentManager.MdiActiveDocument.Database)
{
using (Transaction transaction = database.TransactionManager.StartTransaction())
{
return transaction.GetObject(id, OpenMode.ForRead);
}
}
}