2016-01-25 38 views
0

我試圖避免用戶鎖定使用Rhinocommon編寫的Rhino插件中的圖層。當插件被初始化時,事件處理程序被耦合到使用Rhinocommon鎖層

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(); 
    } 
} 

被點擊在犀牛層面板的鎖定時,則觸發事件和LayerTableEvent如果圖層被鎖定(達到if語句內的斷點),則if條件的計算結果爲true。但是,事件發生後,圖層保持鎖定狀態。 e.Document.Layers[e.LayerIndex].IsLocked = false;是否可能不鎖定圖層。或者我在這裏錯過了其他的東西?

回答

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上提出您的問題,您可能會在此處獲得更多的流量,並且可能會更快地響應您的查詢。