[Bf-blender-cvs] [c61eb64] master: Fix T39635: Crash convening curve to mesh

Campbell Barton noreply at git.blender.org
Mon Apr 7 23:43:45 CEST 2014


Commit: c61eb64f066bd101731ff389fd3534f73509106e
Author: Campbell Barton
Date:   Tue Apr 8 07:28:14 2014 +1000
https://developer.blender.org/rBc61eb64f066bd101731ff389fd3534f73509106e

Fix T39635: Crash convening curve to mesh

===================================================================

M	source/blender/blenkernel/BKE_curve.h
M	source/blender/blenkernel/intern/curve.c
M	source/blender/blenkernel/intern/displist.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_curve.h b/source/blender/blenkernel/BKE_curve.h
index c4dfd9d..0f9f8cb 100644
--- a/source/blender/blenkernel/BKE_curve.h
+++ b/source/blender/blenkernel/BKE_curve.h
@@ -149,6 +149,7 @@ void BKE_nurb_knot_calc_v(struct Nurb *nu);
 /* nurb checks if they can be drawn, also clamp order func */
 bool BKE_nurb_check_valid_u(struct Nurb *nu);
 bool BKE_nurb_check_valid_v(struct Nurb *nu);
+bool BKE_nurb_check_valid_uv(struct Nurb *nu);
 
 bool BKE_nurb_order_clamp_u(struct Nurb *nu);
 bool BKE_nurb_order_clamp_v(struct Nurb *nu);
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index ae45ca5..4ad844d 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -3801,6 +3801,16 @@ bool BKE_nurb_check_valid_v(struct Nurb *nu)
 	return true;
 }
 
+bool BKE_nurb_check_valid_uv(struct Nurb *nu)
+{
+	if (!BKE_nurb_check_valid_u(nu))
+		return false;
+	if ((nu->pntsv > 1) && !BKE_nurb_check_valid_v(nu))
+		return false;
+
+	return true;
+}
+
 bool BKE_nurb_order_clamp_u(struct Nurb *nu)
 {
 	bool changed = false;
diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c
index cdff6e2..eeb4f0d 100644
--- a/source/blender/blenkernel/intern/displist.c
+++ b/source/blender/blenkernel/intern/displist.c
@@ -1216,7 +1216,7 @@ void BKE_displist_make_surf(Scene *scene, Object *ob, ListBase *dispbase,
 		curve_calc_modifiers_pre(scene, ob, &nubase, for_render, use_render_resolution);
 
 	for (nu = nubase.first; nu; nu = nu->next) {
-		if (for_render || nu->hide == 0) {
+		if ((for_render || nu->hide == 0) && BKE_nurb_check_valid_uv(nu)) {
 			int resolu = nu->resolu, resolv = nu->resolv;
 
 			if (use_render_resolution) {




More information about the Bf-blender-cvs mailing list