标签:重命名 AutoCAD 删除 ObjectOverrule UI NET 图层
出处
https://forums.autodesk.com/t5/net/disable-layer-edit-functionality/m-p/7180169
问题
在我们的自定义应用程序中,我们不希望用户能够从autocad图层选项板中创建/重命名/删除现有图层。
我们希望保留图层调色板,但只是阻止这些功能。
回答
阻止AutoCAD执行某些操作的通常方法是处理DocumentLockModeChanged事件并否决特定命令。但是,在您的情况下,无法使用这种方法,因为命令“Layer”除了创建/重命名图层外,还有更多选项,并且还可以从AutoCAD内置UI(图层管理器)中创建、重命名甚至删除图层。
为了防止层被重命名或删除(当然,假设层是空层),您可能可以使用ObjectOverrule。即:
1.为了防止重命名,在重写的Open()方法中,您可以观察正在打开的层以进行写入,并将层名称保存在类级别。然后在Close()方法中,比较层的OBjectId和名称,以确定名称是否已更改。如果是,你可以把它们换回来。
2.为了防止删除,在重写的Erase()方法中,可以引发ENOTAPlicable异常,如Kean的文章所示。
我写了一些代码来快速测试ObjectOverrule的想法,并成功地防止了层被重命名和擦除。
然而,很难防止创建层。在这种情况下,ObjectOverrule不适用,因为它仅适用于现有对象(即在创建层之后)。我想您可能需要观察数据库事件,以确定是否已将新层添加到数据库中,然后可以立即以某种方式删除它(当然,如果您已经实现了ObjectOverrule来防止删除,则需要暂时禁用它)。
即使您成功地完成了上述所有操作,如果用户使用AutoCAD UI(图层管理器)创建/重命名/删除图层,图层可能保持不变,UI可能会显示用户所做的更改,关闭并重新打开它可能需要重新同步/恢复UI以显示正确的、未更改的图层信息。
标签:重命名,AutoCAD,删除,ObjectOverrule,UI,NET,图层 来源: https://www.cnblogs.com/redcode/p/16484145.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。