2017-05-24 88 views
0

我想驗證我的自定義MPxEmitterNode屬性。Maya插件屬性驗證

我有force_min和force_max屬性是maya說法中double3類型,基本上是包含雙[3]數據的兩個對象。

我想確保force_min小於3個組件的每個組件的force_max。我想通過在屬性編輯器中的屬性中輸入一個值,或者爲這些屬性調用mels setAttr,然後通過「最大< max」檢查,只交換最小值和最大值來做到這一點。

我已經嘗試設置force_min,force_max和它們各自的組件x,y,z對象之間的ATTRIBUTE_AFFECTS關係。這似乎會導致一個循環問題導致瑪雅崩潰。我也嘗試編輯派生MPxEmitterNode的自定義計算函數,因此它將force_min和force_max值設置爲交換。在這種情況下,force_ *屬性似乎從不計算。

任何幫助將不勝感激。

回答

1

一般來說,'Maya'這樣做的方法是讓輸出看起來錯誤,如果最小和最大值設置不正確。你不知道誰會設置這些屬性 - 它可能是連接或腳本,甚至可能會在動畫幀之間重置 - 所以最好讓dag評估流過即使結果是無稽之談。這就像在球體節點上設置半徑爲零 - 即使認爲它是錯誤的,它是「正確的」。

但是,您可以交換compute()方法中的值,以獲得與交換值無關的重複插入值本身的效果。從內部計算設置輸入插頭是一個壞主意,因爲它會在dag評估流程中引入一個循環。 Dag節點必須是非循環的(這就是dag中的「a」:定向非循環圖