Public feed #378013

pynode stuff 003

public text v1 · immutable
Raw Edit
·published 2007-03-02 05:37 UTC
rendered paste body
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)) {//<rcruiz>
				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++;
					}
				}//</rcruiz>
				/*
				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;
}