Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2013-12-29 05:51:27 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-12-29 05:51:27 +0400
commiteb4090dadf31ccaf5277db6306302d70cc81d820 (patch)
treec03d14b3a262caa7e028142afb9d19864e8a8c8c /source/blender/python/mathutils/mathutils_geometry.c
parent3f39af9cc2765c2cf3daab30c4ad0be58e341e19 (diff)
Fix missing check if isect_plane_plane_v3 fails to find an intersection.
Diffstat (limited to 'source/blender/python/mathutils/mathutils_geometry.c')
-rw-r--r--source/blender/python/mathutils/mathutils_geometry.c27
1 files changed, 19 insertions, 8 deletions
diff --git a/source/blender/python/mathutils/mathutils_geometry.c b/source/blender/python/mathutils/mathutils_geometry.c
index 53e428cf73c..29e7779b89a 100644
--- a/source/blender/python/mathutils/mathutils_geometry.c
+++ b/source/blender/python/mathutils/mathutils_geometry.c
@@ -626,11 +626,11 @@ PyDoc_STRVAR(M_Geometry_intersect_plane_plane_doc,
" :arg plane_b_no: Normal of the second plane\n"
" :type plane_b_no: :class:`mathutils.Vector`\n"
" :return: The line of the intersection represented as a point and a vector\n"
-" :rtype: tuple pair of :class:`mathutils.Vector`\n"
+" :rtype: tuple pair of :class:`mathutils.Vector` or None if the intersection can't be calculated\n"
);
static PyObject *M_Geometry_intersect_plane_plane(PyObject *UNUSED(self), PyObject *args)
{
- PyObject *ret;
+ PyObject *ret, *ret_co, *ret_no;
VectorObject *plane_a_co, *plane_a_no, *plane_b_co, *plane_b_no;
float isect_co[3];
@@ -660,15 +660,26 @@ static PyObject *M_Geometry_intersect_plane_plane(PyObject *UNUSED(self), PyObje
return NULL;
}
- isect_plane_plane_v3(isect_co, isect_no,
- plane_a_co->vec, plane_a_no->vec,
- plane_b_co->vec, plane_b_no->vec);
+ if (isect_plane_plane_v3(isect_co, isect_no,
+ plane_a_co->vec, plane_a_no->vec,
+ plane_b_co->vec, plane_b_no->vec))
+ {
+ normalize_v3(isect_no);
+
+ ret_co = Vector_CreatePyObject(isect_co, 3, Py_NEW, NULL);
+ ret_no = Vector_CreatePyObject(isect_no, 3, Py_NEW, NULL);
+ }
+ else {
+ ret_co = Py_None;
+ ret_no = Py_None;
- normalize_v3(isect_no);
+ Py_INCREF(ret_co);
+ Py_INCREF(ret_no);
+ }
ret = PyTuple_New(2);
- PyTuple_SET_ITEM(ret, 0, Vector_CreatePyObject(isect_co, 3, Py_NEW, NULL));
- PyTuple_SET_ITEM(ret, 1, Vector_CreatePyObject(isect_no, 3, Py_NEW, NULL));
+ PyTuple_SET_ITEM(ret, 0, ret_co);
+ PyTuple_SET_ITEM(ret, 1, ret_no);
return ret;
}