0

我试图避免用户在使用 Rhinocommon 编写的 Rhino 插件中锁定图层。当插件被初始化时,一个事件处理程序被耦合到 LayerTableEvent 使用

RhinoDoc.LayerTableEvent += this.OnLayerEvent;

事件处理程序定义为

public void OnLayerEvent(object sender, Rhino.DocObjects.Tables.LayerTableEventArgs e)
{
    if (e.NewState.IsLocked)
    {
        e.Document.Layers[e.LayerIndex].IsLocked = false;
        e.Document.Layers[e.LayerIndex].CommitChanges();
    }
}

单击 Rhino 图层面板中的锁定时触发该事件,并且if条件评估为true图层是否被锁定(if到达语句内的断点)。但是,事件发生后,图层仍保持锁定状态。是否有可能e.Document.Layers[e.LayerIndex].IsLocked = false;不锁定图层。还是我在这里错过了其他东西?

4

1 回答 1

0

该文档在设置层的锁定状态方面略有误导。对于 Rhino 5,您需要创建一个新图层并修改图层表。我没有准确地测试过你的代码,但是我已经测试了创建新的通用方法Rhino.DocObjects.Layer并使用它来修改图层表。这是您的代码中的样子:

public void OnLayerEvent(object sender, Rhino.DocObjects.Tables.LayerTableEventArgs e)
{
    if (e.NewState.IsLocked)
    {
        var newLayerSettings = new Rhino.DocObjects.Layer();
        newLayerSettings.Name = e.Document.Layers[e.LayerIndex].Name;
        newLayerSettings.IsVisible = true;
        e.Document.Layers.Modify(newLayerSettings, e.LayerIndex, true);
    }
}

执行此操作的过程已更改,以便下一个版本的 Rhino 更像您的原始示例。如果您拥有有效的 Rhino 5 许可证,您可以在 RhinoWIP 中进行测试。

作为最后的建议,您还可以在https://discourse.mcneel.com/c/rhino-developer上提出您的问题,在那里您可能会获得更多的流量,并且可能会更快地响应您的查询。

于 2016-08-03T09:01:03.943 回答