如何检查一个图元是否包含在当前工作集
用.net开发Autocad时,自己写的命令在Refedit中使用时,
工作集外被选中的物体也会被修改,
这时就先需要判断一个物体是否包含在当前工作集,
然后决定要不要对其进行修改。
原文链接:Résolu : How to check if entity is part of "Working Set"? - Autodesk Community - AutoCAD
原文中使用扩展方法,在使用时出来些问题,改为类后就没有问题了,
首先需要定义两个类:
Public Class MyDocumentExtensions Public Shared Function WorkSetHas(ByVal doc As acapps.Document, ByVal entityId As ObjectId, ByVal Optional includingErased As Boolean = True) As Boolean Dim id As ObjectId = acapps.Application.LongTransactionManager.CurrentLongTransactionFor(doc) If Not id.IsNull Then Using trans = New ReadOnlyTransaction() Dim ltr As LongTransaction = CType(trans.GetObject(id, OpenMode.ForRead), LongTransaction) Return ltr.WorkSetHas(entityId, includingErased) End Using End If Return False End Function End Class Public Class ReadOnlyTransaction Inherits OpenCloseTransaction Protected Overrides Sub DeleteUnmanagedObject() Commit() MyBase.DeleteUnmanagedObject() End Sub Public Overrides Sub Abort() Commit() End Sub End Class
在使用时先通过CAD系统变量确定是否正在Refedit命令中,
如果是,再检查指定物体是否在当前工作集
Dim RefeditName As String = AcApps.Application.GetSystemVariable("REFEDITNAME") If RefeditName <> "" Then If MyDocumentExtensions.WorkSetHas(doc, id, False) Then ‘在这里对物体进行修改’ End If End If
分类:
AutoCAD
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!