我遇到了由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僅在節點的計算函數中有效,但我認爲在計算函數內運行的輔助函數可以。
任何幫助將不勝感激。謝謝!
更新:它看起來像我的問題可能是通用屬性尚未初始化爲默認值,因此,該屬性的數據句柄是空指針。如果是這樣,爲通用屬性設置默認值的最佳方法是什麼?