ブロック参照を取得するために .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
これらのアイテムのオブジェクト ID はありますか? もしそうなら、あなたはこのようなことをすることができます:
public DBObject GetBlockReferenceFromCOM(ObjectId id)
{
using (Database database = Application.DocumentManager.MdiActiveDocument.Database)
{
using (Transaction transaction = database.TransactionManager.StartTransaction())
{
return transaction.GetObject(id, OpenMode.ForRead);
}
}
}