У меня есть сценарий, который я хотел бы рассказать, где бы я хотел сделать то, что спрашивает Алексей. В плагине Maya C ++ я должен сделать следующий синаниган, чтобы получить значение в атрибуте узла:
MFnDoubleArrayData myArrayData;
MObject myArrayObj = myArrayData.create(myArray);
MPlug myPlug = myNode.findPlug(attributeName);
myPlug.setValue(myArrayObj);
Это утомительно писать, поэтому я написал следующие вспомогательные функции:
MPlug operator | (MFnDependencyNode& node, MObject& attribute){
MStatus status;
MPlug returnValue = node.findPlug(attribute, &status);
return returnValue;
}
void operator << (MPlug& plug, MDoubleArray& doubleArray){
MStatus status;
MFnDoubleArrayData doubleArrayData;
MObject doubleArrayObject = doubleArrayData.create(doubleArray, &status);
status = plug.setValue(doubleArrayObject);
}
И теперь я могу написать код с начала сообщения как:
(myNode | attributeName) << myArray;
Проблема в том, что он не компилируется вне Visual C ++, потому что он пытается привязать временную переменную, возвращенную из | оператора к ссылке MPlug & lt; оператор. Я бы хотел, чтобы это была ссылка, потому что этот код вызывается много раз, и я бы предпочел не копировать MPlug. Мне нужен только временный объект для жизни до конца второй функции.
Ну, это мой сценарий. Просто подумал, что я приведу пример, где хочется сделать то, что описывает Алексей. Я приветствую все критические замечания и предложения!
Спасибо.
Я попытался бы принудительно перезагрузить модуль
import importlib
from main import satisfaction
for i in range(10):
subprocess.call('python main.py', shell=True)
importlib.reload('satisfaction')
print('SATISFACTION:',satisfaction)