2017-06-20 41 views
0

我遇到了由MDataHandle.data()返回的MObject是空指針時出現問題的問題從輔助函數中調用。嘗試從MDataHandle傳遞給自定義節點(Maya 2016 SP6,Python API)中的助手函數時發生空指針錯誤

我有一個自定義節點具有幾個通用屬性(支持kDouble,k3Double和k3Float),需要根據它們是簡單數字數據還是數組數據來進行不同處理。我在自定義節點類中創建了一個定義爲@classmethod的幫助函數,該函數用於根據需要從通用屬性中提取數據。一個適當屬性的MDataHandle被傳遞給函數(是否最好傳遞MDataBlock ..?),並用isGeneric()檢查屬性。如果發現它是非數字的(在這種情況下是數組),則調用MDataHandle.data()函數以獲取MObject以附加到MFnNmericData對象,該對象就是問題出現的位置。

@classmethod 
def getDataHandleValue(obj, dataHandle): 

    print 'getDataHandleValue called' # DEBUG 

    # Script util objects for creating pointers 
    isNumericUtil = OpenMaya.MScriptUtil(False) 
    isNullUtil = OpenMaya.MScriptUtil(False) 

    isNumericPtr = isNumericUtil.asBoolPtr() 
    isNullPtr = isNullUtil.asBoolPtr() 

    if dataHandle.isGeneric(isNumericPtr, isNullPtr): 

     if isNumericUtil.getBool(isNumericPtr): 

      print 'Generic data is numeric' # DEBUG 

      return dataHandle.asGenericDouble() 

     else: 

      print 'Generic data is not numeric' # DEBUG 

      dataObj = dataHandle.data() 

      print 'Got data object' # DEBUG 

      nDataFn = OpenMaya.MFnNumericData() 

      print 'Attempting to set object...' # DEBUG 
      nDataFn.setObject(dataObj) 

      val0 = 0.0 
      val1 = 0.0 
      val2 = 0.0 

      print [val0, val1, val2] # DEBUG 

      nDataFn.getData3Double(val0, val1, val2) 

      return [val0, val1, val2] 

    else: 

     raise ValueError('Data handle to non-generic attribute') 

當我試圖創建從MDataHandle.data經過MObject()我得到一個空指針錯誤設置的功能...

我想知道是否有某種範圍的問題,因爲文檔中提到MDataBlock僅在節點的計算函數中有效,但我認爲在計算函數內運行的輔助函數可以。

任何幫助將不勝感激。謝謝!

更新:它看起來像我的問題可能是通用屬性尚未初始化爲默認值,因此,該屬性的數據句柄是空指針。如果是這樣,爲通用屬性設置默認值的最佳方法是什麼?

回答

0

據我所知,獲取MDataHandle到一個未用某個值初始化的泛型屬性會導致返回一個空指針。

相關問題