【AutoCAD .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以显示正确的、未更改的图层信息。