Add bool parser for PyArg_ParseTuple
Use for mathutils.bvhtree
This commit is contained in:
@@ -1024,3 +1024,21 @@ int PyC_RunString_AsNumber(const char *expr, double *value, const char *filename
|
|||||||
|
|
||||||
return error_ret;
|
return error_ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use with PyArg_ParseTuple's "O&" formatting.
|
||||||
|
*/
|
||||||
|
int PyC_ParseBool(PyObject *o, void *p)
|
||||||
|
{
|
||||||
|
bool *bool_p = p;
|
||||||
|
long value;
|
||||||
|
if (((value = PyLong_AsLong(o)) == -1) || !ELEM(value, 0, 1)) {
|
||||||
|
PyErr_Format(PyExc_ValueError,
|
||||||
|
"expected a bool or int (0/1), got %s",
|
||||||
|
Py_TYPE(o)->tp_name);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
*bool_p = value ? true : false;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
@@ -81,4 +81,6 @@ PyObject *PyC_FlagSet_FromBitfield(PyC_FlagSet *items, int flag);
|
|||||||
|
|
||||||
int PyC_RunString_AsNumber(const char *expr, double *value, const char *filename);
|
int PyC_RunString_AsNumber(const char *expr, double *value, const char *filename);
|
||||||
|
|
||||||
|
int PyC_ParseBool(PyObject *o, void *p);
|
||||||
|
|
||||||
#endif /* __PY_CAPI_UTILS_H__ */
|
#endif /* __PY_CAPI_UTILS_H__ */
|
||||||
|
@@ -563,7 +563,7 @@ static PyObject *C_BVHTree_FromPolygons(PyObject *UNUSED(cls), PyObject *args, P
|
|||||||
unsigned int (*tris)[3] = NULL;
|
unsigned int (*tris)[3] = NULL;
|
||||||
unsigned int coords_len, tris_len;
|
unsigned int coords_len, tris_len;
|
||||||
float epsilon = 0.0f;
|
float epsilon = 0.0f;
|
||||||
int all_triangles = 0;
|
bool all_triangles = false;
|
||||||
|
|
||||||
/* when all_triangles is False */
|
/* when all_triangles is False */
|
||||||
int *orig_index = NULL;
|
int *orig_index = NULL;
|
||||||
@@ -574,8 +574,10 @@ static PyObject *C_BVHTree_FromPolygons(PyObject *UNUSED(cls), PyObject *args, P
|
|||||||
|
|
||||||
|
|
||||||
if (!PyArg_ParseTupleAndKeywords(
|
if (!PyArg_ParseTupleAndKeywords(
|
||||||
args, kwargs, (char *)"OO|$if:BVHTree.FromPolygons", (char **)keywords,
|
args, kwargs, (char *)"OO|$O&f:BVHTree.FromPolygons", (char **)keywords,
|
||||||
&py_coords, &py_tris, &all_triangles, &epsilon))
|
&py_coords, &py_tris,
|
||||||
|
PyC_ParseBool, &all_triangles,
|
||||||
|
&epsilon))
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -996,9 +998,9 @@ static PyObject *C_BVHTree_FromObject(PyObject *UNUSED(cls), PyObject *args, PyO
|
|||||||
Object *ob;
|
Object *ob;
|
||||||
struct Scene *scene;
|
struct Scene *scene;
|
||||||
DerivedMesh *dm;
|
DerivedMesh *dm;
|
||||||
int use_deform = true;
|
bool use_deform = true;
|
||||||
int use_render = false;
|
bool use_render = false;
|
||||||
int use_cage = false;
|
bool use_cage = false;
|
||||||
|
|
||||||
const MLoopTri *lt;
|
const MLoopTri *lt;
|
||||||
const MLoop *mloop;
|
const MLoop *mloop;
|
||||||
@@ -1009,8 +1011,12 @@ static PyObject *C_BVHTree_FromObject(PyObject *UNUSED(cls), PyObject *args, PyO
|
|||||||
float epsilon = 0.0f;
|
float epsilon = 0.0f;
|
||||||
|
|
||||||
if (!PyArg_ParseTupleAndKeywords(
|
if (!PyArg_ParseTupleAndKeywords(
|
||||||
args, kwargs, (char *)"OO|$iiif:BVHTree.FromObject", (char **)keywords,
|
args, kwargs, (char *)"OO|$O&O&O&f:BVHTree.FromObject", (char **)keywords,
|
||||||
&py_ob, &py_scene, &use_deform, &use_render, &use_cage, &epsilon) ||
|
&py_ob, &py_scene,
|
||||||
|
PyC_ParseBool, &use_deform,
|
||||||
|
PyC_ParseBool, &use_render,
|
||||||
|
PyC_ParseBool, &use_cage,
|
||||||
|
&epsilon) ||
|
||||||
((ob = PyC_RNA_AsPointer(py_ob, "Object")) == NULL) ||
|
((ob = PyC_RNA_AsPointer(py_ob, "Object")) == NULL) ||
|
||||||
((scene = PyC_RNA_AsPointer(py_scene, "Scene")) == NULL))
|
((scene = PyC_RNA_AsPointer(py_scene, "Scene")) == NULL))
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user