chmenf087 发表于 2011-7-24 18:20:53

实现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()显示不出窗体?

single-yu 发表于 2011-7-26 20:41:31

ObjectArx的东西不要用Purge来清理,清理后经常会出错,版主们好像都说过这样的话!

chmenf087 发表于 2011-7-26 22:06:56

.net 的purge 是返回能被删除的ObjectID集合,然后用erase删除,不是CAD的purge命令

zjh2785 发表于 2018-5-5 13:04:43

顶一下,这个也许很多新人都会以为Purge()的参数是用来清理的id,而不是用来返回可清理的。
完整的说明应该是   Purge()
页: [1]
查看完整版本: 实现CAD中的purge命令清理块时遇到的问题(已解决-结贴)