Пример #1
0
static PyObject *Color_div(PyObject *v1, PyObject *v2)
{
	ColorObject *color1 = NULL;
	float scalar;

	if (ColorObject_Check(v1)) {
		color1 = (ColorObject *)v1;
		if (BaseMath_ReadCallback(color1) == -1)
			return NULL;
	}
	else {
		PyErr_SetString(PyExc_TypeError,
		                "Color division not supported in this order");
		return NULL;
	}

	/* make sure v1 is always the vector */
	if (((scalar = PyFloat_AsDouble(v2)) == -1.0f && PyErr_Occurred()) == 0) { /* COLOR * FLOAT */
		if (scalar == 0.0f) {
			PyErr_SetString(PyExc_ZeroDivisionError,
			                "Color division: divide by zero error");
			return NULL;
		}
		return color_mul_float(color1, 1.0f / scalar);
	}

	PyErr_Format(PyExc_TypeError,
	             "Color multiplication: not supported between "
	             "'%.200s' and '%.200s' types",
	             Py_TYPE(v1)->tp_name, Py_TYPE(v2)->tp_name);
	return NULL;
}
Пример #2
0
static PyObject *Color_mul(PyObject *v1, PyObject *v2)
{
	ColorObject *color1 = NULL, *color2 = NULL;
	float scalar;

	if ColorObject_Check(v1) {
		color1= (ColorObject *)v1;
		if (BaseMath_ReadCallback(color1) == -1)
			return NULL;
	}
	if ColorObject_Check(v2) {
		color2= (ColorObject *)v2;
		if (BaseMath_ReadCallback(color2) == -1)
			return NULL;
	}


	/* make sure v1 is always the vector */
	if (color1 && color2) {
		/* col * col, dont support yet! */
	}
	else if (color1) {
		if (((scalar= PyFloat_AsDouble(v2)) == -1.0f && PyErr_Occurred())==0) { /* COLOR * FLOAT */
			return color_mul_float(color1, scalar);
		}
	}
	else if (color2) {
		if (((scalar= PyFloat_AsDouble(v1)) == -1.0f && PyErr_Occurred())==0) { /* FLOAT * COLOR */
			return color_mul_float(color2, scalar);
		}
	}
	else {
		BLI_assert(!"internal error");
	}

	PyErr_Format(PyExc_TypeError,
	             "Color multiplication: not supported between "
	             "'%.200s' and '%.200s' types",
	             Py_TYPE(v1)->tp_name, Py_TYPE(v2)->tp_name);
	return NULL;
}