如何正确删除 ACAD DBObjects?
How do I properly delete ACAD DBObjects?
这是我在网上找了一些东西后自己发现的。花了我一段时间,但对于任何想知道如何做的人来说,请看下面。
另外,我发布的代码有一个很大的问题,它从未在其中声明过 acText。我还错误地将其设置为 acadObj。它需要根据具体情况进行设置。下面是我的删除代码。它与打开工作数据库编辑器有关。
Public Sub deleteDBObject(ByRef dbObj As DBObject)
Dim ed As Editor = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor
Dim db As Database = HostApplicationServices.WorkingDatabase
Dim tm As Transaction = db.TransactionManager.StartTransaction()
Try
Dim ent As Entity = CType(tm.GetObject(dbObj.Id, OpenMode.ForWrite), Entity)
ent.Erase()
ent = Nothing
dbObj = Nothing
tm.Commit()
Catch
Finally
tm.Dispose()
End Try
Autodesk.AutoCAD.ApplicationServices.Application.UpdateScreen()
End Sub
如果有人知道如何以更好的方式做到这一点,或者如果他们能解释为什么这样做会很热门。
抱歉,我不明白。由于你已经有一个DBObject(dbObj),如果它是一个数据库常驻对象,调用它的Erase方法(dbObj.Erase());如果不是,就别管它,.NET Framework 的 gc 会处理它。
这是我在网上找了一些东西后自己发现的。花了我一段时间,但对于任何想知道如何做的人来说,请看下面。 另外,我发布的代码有一个很大的问题,它从未在其中声明过 acText。我还错误地将其设置为 acadObj。它需要根据具体情况进行设置。下面是我的删除代码。它与打开工作数据库编辑器有关。
Public Sub deleteDBObject(ByRef dbObj As DBObject)
Dim ed As Editor = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor
Dim db As Database = HostApplicationServices.WorkingDatabase
Dim tm As Transaction = db.TransactionManager.StartTransaction()
Try
Dim ent As Entity = CType(tm.GetObject(dbObj.Id, OpenMode.ForWrite), Entity)
ent.Erase()
ent = Nothing
dbObj = Nothing
tm.Commit()
Catch
Finally
tm.Dispose()
End Try
Autodesk.AutoCAD.ApplicationServices.Application.UpdateScreen()
End Sub
如果有人知道如何以更好的方式做到这一点,或者如果他们能解释为什么这样做会很热门。
抱歉,我不明白。由于你已经有一个DBObject(dbObj),如果它是一个数据库常驻对象,调用它的Erase方法(dbObj.Erase());如果不是,就别管它,.NET Framework 的 gc 会处理它。