[Bf-blender-cvs] [5c4ea86] custom-normals-bmesh: Use mathutils_array_parse instead of inline array parsing
Campbell Barton
noreply at git.blender.org
Thu Jun 9 17:45:31 CEST 2016
Commit: 5c4ea862b179332cad4cb9631542bd6b6accf9c3
Author: Campbell Barton
Date: Fri Jun 10 01:46:45 2016 +1000
Branches: custom-normals-bmesh
https://developer.blender.org/rB5c4ea862b179332cad4cb9631542bd6b6accf9c3
Use mathutils_array_parse instead of inline array parsing
Also fixes decref bug when None was given.
===================================================================
M source/blender/python/bmesh/bmesh_py_types_customdata.c
===================================================================
diff --git a/source/blender/python/bmesh/bmesh_py_types_customdata.c b/source/blender/python/bmesh/bmesh_py_types_customdata.c
index 8d54345..c4a3e29 100644
--- a/source/blender/python/bmesh/bmesh_py_types_customdata.c
+++ b/source/blender/python/bmesh/bmesh_py_types_customdata.c
@@ -395,91 +395,43 @@ static PyObject *bpy_bmlayeritem_from_array__clnors(BPy_BMLayerItem *self, PyObj
PyObject *py_vec = value_items[i];
if (py_vec == Py_None) {
- clnors[i][0] = clnors[i][1] = 0.0f;
+ zero_v2(clnors[i]);
}
else {
- py_vec = PySequence_Fast(py_vec, "");
- if (!py_vec || PySequence_Fast_GET_SIZE(py_vec) != 2) {
- PyErr_Format(PyExc_TypeError,
- "clnor's from_array(): clnors are expected to be pairs of floats "
- "in [-1.0, 1.0] range, clnor %d is not", i);
+ if (mathutils_array_parse(
+ clnors[i], 2, 2, py_vec,
+ "clnor's from_array(): clnors are expected to be pairs of floats "
+ "in [-1.0, 1.0] range") == -1)
+ {
MEM_freeN(clnors);
Py_DECREF(value);
- Py_XDECREF(py_vec);
return NULL;
}
for (int j = 0; j < 2; j++) {
- PyObject *py_float = PyNumber_Float(PySequence_Fast_GET_ITEM(py_vec, j));
-
- if (!py_float || !PyFloat_Check(py_float)) {
- PyErr_Format(PyExc_TypeError,
- "clnor's from_array(): clnors are expected to be pairs of floats "
- "in [-1.0, 1.0] range, clnor %d is not", i);
- MEM_freeN(clnors);
- Py_DECREF(value);
- Py_DECREF(py_vec);
- Py_XDECREF(py_float);
- return NULL;
- }
-
- clnors[i][j] = (float)PyFloat_AS_DOUBLE(py_float);
- if (clnors[i][j] < -1.0f || clnors[i][j] > 1.0f) {
- PyErr_Format(PyExc_TypeError,
- "clnor's from_array(): clnors are expected to be pairs of floats "
- "in [-1.0, 1.0] range, clnor %d is not", i);
- MEM_freeN(clnors);
- Py_DECREF(value);
- Py_DECREF(py_vec);
- Py_DECREF(py_float);
- return NULL;
- }
- Py_DECREF(py_float);
+ CLAMP(clnors[i][j], -1.0, 1.0f);
}
}
- Py_DECREF(py_vec);
}
}
else {
nors = MEM_mallocN(sizeof(*nors) * value_len, __func__);
for (Py_ssize_t i = 0; i < value_len; i++) {
PyObject *py_vec = value_items[i];
-
if (py_vec == Py_None) {
zero_v3(nors[i]);
}
else {
- py_vec = PySequence_Fast(py_vec, "");
- if (!py_vec || PySequence_Fast_GET_SIZE(py_vec) != 3) {
- PyErr_Format(PyExc_TypeError,
- "clnor's from_array(): "
- "normals are expected to be triplets of floats, normal %d is not", i);
- MEM_freeN(nors);
+ if (mathutils_array_parse(
+ nors[i], 3, 3, py_vec,
+ "clnor's from_array(): clnors are expected to be triplets of floats") == -1)
+ {
+ MEM_freeN(clnors);
Py_DECREF(value);
- Py_XDECREF(py_vec);
return NULL;
}
-
- for (int j = 0; j < 3; j++) {
- PyObject *py_float = PyNumber_Float(PySequence_Fast_GET_ITEM(py_vec, j));
-
- if (!py_float || !PyFloat_Check(py_float)) {
- PyErr_Format(PyExc_TypeError,
- "clnor's from_array(): "
- "normals are expected to be triplets of floats, normal %d is not", i);
- MEM_freeN(nors);
- Py_DECREF(value);
- Py_DECREF(py_vec);
- Py_XDECREF(py_float);
- return NULL;
- }
-
- nors[i][j] = (float)PyFloat_AS_DOUBLE(py_float);
- Py_DECREF(py_float);
- }
normalize_v3(nors[i]); /* Just in case... */
}
- Py_DECREF(py_vec);
}
}
More information about the Bf-blender-cvs
mailing list