实现CAD中的purge命令清理块时遇到的问题(已解决-结贴)
本帖最后由 chmenf087 于 2011-8-13 00:48 编辑情况是这样的,不知道大家有没有这样的情况在重载drawJig类实现拖拽的时候如果打开捕捉那么Jig的对象会飘走(呃,这点先不谈)。所以我用entityJig把对象加入block用块来实现拖拽,但是问题出现了,我想用一个固定的块名(blockJig)来实现很多个块的拖拽,所以拖拽完成一次后我会用以下代码删除没有了引用的块(blockJig)
Dim db As Database = Application.DocumentManager.MdiActiveDocument.Database
Dim ids As New ObjectIdCollection()
Using trans As Transaction = db.TransactionManager.StartTransaction
Dim bt As BlockTable = trans.GetObject(db.BlockTableId, OpenMode.ForWrite, False, True)
If bt.Has(blockName) = True Then
Try
ids.Add(bt(blockName))
db.Purge(ids)
trans.GetObject(ids(0), OpenMode.ForWrite, True, True).Erase(True)
trans.Commit()
Return True
Catch ex As Autodesk.AutoCAD.Runtime.Exception
trans.Dispose()
Return False
End Try
Else : Return False
trans.Dispose()
End If
End Using
但是当我再次拖拽创建(blockJig)名称的块时候错误出现了错误描述是“eDuplicateObjectName”,呃,反正就是说这个块名被占用了,不能创建。忘了从神马地方看到的,块表记录删除后必须dispose 掉database对象然后重新打开才能更新块名,这个我就有点奇怪了那么cad中的Purge命令清理未引用的块表记录时是怎么处理的呢。我到底该怎么实现我想要的效果呢——(blockJig)多次使用。
还有不知道为甚么有时候CAD的application.showmodellessdialog()显示不出窗体?
ObjectArx的东西不要用Purge来清理,清理后经常会出错,版主们好像都说过这样的话! .net 的purge 是返回能被删除的ObjectID集合,然后用erase删除,不是CAD的purge命令 顶一下,这个也许很多新人都会以为Purge()的参数是用来清理的id,而不是用来返回可清理的。
完整的说明应该是 Purge()
页:
[1]