AutoCAD .NET API:パージ処理の実装

Autodesk Support

2020年5月3日


Issue

PURGE コマンド相当の機能を AutoCAD .NET API で実装したいと考えていますが、Database.Purge メソッドがありますが利⽤⽅法がわかりませ ん。 どのように利⽤すればいいでしょうか?

 

Solution

atabase.Purge() メソッドには、2 つのオーバーロードが存在します。もっとも⼀般的なのは、 Database.Purge(ObjectIdCollection) です。この メソッドは、事前に設定された ObjectIdCollection から、他のオブジェクトから参照されていて、パージ出来ないオブジェクトの ObjectId を削除し ます。

なお、PURGE コマンドとは異なり、Database.Purge() 関数⾃体は図⾯データベースを調節操作することはありません。あくまで、削除可能なオブ ジェクトの ObjectId を選別するのみです。不要なオブジェクトを削除する場合には、DBObject.Erase メソッドを利⽤して明⽰的に削除してくださ い。

次のコードは、不要な BlockTableRecord を削除する機能を実装しています。

 

C# コード

Database oDb = Application.DocumentManager.MdiActiveDocument.Database;
Editor oEd = Application.DocumentManager.MdiActiveDocument.Editor;
try {
    using (Transaction oTr = oDb.TransactionManager.StartTransaction()) {
        ObjectIdCollection oObjIds = new ObjectIdCollection();
        BlockTable oTbl = oTr.GetObject(oDb.BlockTableId, OpenMode.ForRead, false) as BlockTable;
        IEnumerator oEnu1 = oTbl.GetEnumerator();
        while (oEnu1.MoveNext()) {
            oObjIds.Add((ObjectId)oEnu1.Current);
        }

        oDb.Purge(oObjIds);
        ObjectId oObjId;
        BlockTableRecord oRec;
        IEnumerator oEnu2 = oObjIds.GetEnumerator();
        while (oEnu2.MoveNext()) {
            oObjId = (ObjectId)oEnu2.Current;
            oRec = oTr.GetObject(oObjId, OpenMode.ForWrite, false) as BlockTableRecord;
            oRec.Erase();
            oEd.WriteMessage( "\nパージ対象ブロック定義 = " + oRec.Name);
        }
        oTr.Commit();
    }
} catch (Autodesk.AutoCAD.Runtime.Exception ex) {
    oEd.WriteMessage(ex.Message);
} finally {
}

 

VB.NET コード

Dim oDb As Database = Application.DocumentManager.MdiActiveDocument.Database
Dim oEd As Editor = Application.DocumentManager.MdiActiveDocument.Editor
Try
    Using oTr As Transaction = oDb.TransactionManager.StartTransaction()
        Dim oObjIds As New ObjectIdCollection()
        Dim oTbl As BlockTable = TryCast(oTr.GetObject(oDb.BlockTableId, OpenMode.ForRead, False), BlockTable)
        Dim oEnu1 As IEnumerator = oTbl.GetEnumerator()
        While oEnu1.MoveNext()
            oObjIds.Add(DirectCast(oEnu1.Current, ObjectId))
        End While

        oDb.Purge(oObjIds)
        Dim oObjId As ObjectId
        Dim oRec As BlockTableRecord
        Dim oEnu2 As IEnumerator = oObjIds.GetEnumerator()
        While oEnu2.MoveNext()
            oObjId = DirectCast(oEnu2.Current, ObjectId)
            oRec = TryCast(oTr.GetObject(oObjId, OpenMode.ForWrite, False), BlockTableRecord)
            oRec.Erase()
            oEd.WriteMessage(vbLf & "パージ対象ブロック定義 = " + oRec.Name)
        End While
        oTr.Commit()
    End Using
Catch ex As Autodesk.AutoCAD.Runtime.Exception
    oEd.WriteMessage(ex.Message)
Finally
End Try

 



この情報は役に立ちましたか?


サポートが必要な場合は、Autodesk Assistant にお問い合わせください!

Assistant が回答を見つけたり、担当者に連絡するお手伝いをします。


オートデスクではどのようなサポートが提供されますか?

ご利用可能なサポートの種類は、サブスクリプションのプランによって異なります。現在のプランでご利用可能なサポート レベルをご確認ください。

サポート レベルを確認