2

VB.NET で記述された AutoCAD 2008 プラグインがあります。このプラグインは、主に COM インターフェイスを使用して ACAD オブジェクトにアクセスします。

現在、COM インターフェースからマネージ インターフェースに切り替えており、次の質問があります。特定の COM ACAD オブジェクトから一致するマネージ ACAD オブジェクトを取得するにはどうすればよいですか。

例: 私はオブジェクトを持っていますが、図面内の同じオブジェクトを指すオブジェクトをAcadBlockReference持ちたくありません。BlockReferenceこのオブジェクトまたはそのオブジェクトを取得するにはどうすればよいObjectIDですか?

4

2 に答える 2

2

ブロック参照を取得するために .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);
            }
        }
    } 
于 2010-11-09T14:01:58.913 に答える
1

HandleCOM オブジェクトのまたはプロパティを調べて、それらを.NET オブジェクトの またはプロパティObjectIDと一致させることができるかどうかを確認することができます。 ObjectIdHandleObjectId

于 2010-11-09T18:11:08.583 に答える