static int dict_socks_to_typeinfo(PyObject *dict, bNodeSocketType **socks, int len, int stage) { int a = 0, pos = 0; PyObject *key = NULL, *value = NULL, *list = NULL; int i, n; bNodeSocketType *newsocks = NULL; if(stage!=SH_NODE_SCRIPT_READY) { newsocks = MEM_callocN(sizeof(bNodeSocketType)*(len+1), "bNodeSocketType"); if (dict) { if(PyDict_Check(dict)) {// list=PyDict_Keys(dict); PyList_Sort(list); n = PyList_Size(list); for (i = 0; i < n; i++) { key = PyList_GetItem(list, i); value=PyDict_GetItem(dict,key); if(PyTuple_Check(value) && PyTuple_Size(value)==7) { newsocks[a].name = BLI_strdup(PyString_AsString(key)); newsocks[a].type = (int)(PyInt_AsLong(PyTuple_GetItem(value, 0))); newsocks[a].val1 = (float)(PyFloat_AsDouble(PyTuple_GetItem(value, 1))); newsocks[a].val2 = (float)(PyFloat_AsDouble(PyTuple_GetItem(value, 2))); newsocks[a].val3 = (float)(PyFloat_AsDouble(PyTuple_GetItem(value, 3))); newsocks[a].val4 = (float)(PyFloat_AsDouble(PyTuple_GetItem(value, 4))); newsocks[a].min = (float)(PyFloat_AsDouble(PyTuple_GetItem(value, 5))); newsocks[a].max = (float)(PyFloat_AsDouble(PyTuple_GetItem(value, 6))); a++; } }// /* while(PyDict_Next(dict, &pos, &key, &value)) { if(PyTuple_Check(value) && PyTuple_Size(value)==7) { newsocks[a].name = BLI_strdup(PyString_AsString(key)); newsocks[a].type = (int)(PyInt_AsLong(PyTuple_GetItem(value, 0))); newsocks[a].val1 = (float)(PyFloat_AsDouble(PyTuple_GetItem(value, 1))); newsocks[a].val2 = (float)(PyFloat_AsDouble(PyTuple_GetItem(value, 2))); newsocks[a].val3 = (float)(PyFloat_AsDouble(PyTuple_GetItem(value, 3))); newsocks[a].val4 = (float)(PyFloat_AsDouble(PyTuple_GetItem(value, 4))); newsocks[a].min = (float)(PyFloat_AsDouble(PyTuple_GetItem(value, 5))); newsocks[a].max = (float)(PyFloat_AsDouble(PyTuple_GetItem(value, 6))); a++; } } */ } else { return(EXPP_ReturnIntError( PyExc_AttributeError, "INPUT must be a dict")); } } newsocks[a].type = -1; if(*socks) { int b = 0; while((*socks)[b].type!=-1) { MEM_freeN((*socks)[b].name); (*socks)[b].name = NULL; b++; } MEM_freeN(*socks); } *socks = newsocks; } return 0; }