[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54347] trunk/blender/source/blender: fix for crashes running some operators in background mode and some divide by zero errors .

Campbell Barton ideasman42 at gmail.com
Wed Feb 6 03:48:06 CET 2013


Revision: 54347
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54347
Author:   campbellbarton
Date:     2013-02-06 02:48:03 +0000 (Wed, 06 Feb 2013)
Log Message:
-----------
fix for crashes running some operators in background mode and some divide by zero errors.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/curve.c
    trunk/blender/source/blender/editors/armature/editarmature.c
    trunk/blender/source/blender/editors/mesh/editmesh_tools.c
    trunk/blender/source/blender/editors/object/object_add.c
    trunk/blender/source/blender/editors/object/object_transform.c
    trunk/blender/source/blender/editors/space_info/info_ops.c
    trunk/blender/source/blender/editors/transform/transform.c
    trunk/blender/source/blender/render/intern/source/rayshade.c

Modified: trunk/blender/source/blender/blenkernel/intern/curve.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/curve.c	2013-02-06 01:53:09 UTC (rev 54346)
+++ trunk/blender/source/blender/blenkernel/intern/curve.c	2013-02-06 02:48:03 UTC (rev 54347)
@@ -3436,7 +3436,9 @@
 		}
 	}
 
-	mul_v3_fl(cent, 1.0f / (float)total);
+	if (total) {
+		mul_v3_fl(cent, 1.0f / (float)total);
+	}
 
 	return (total != 0);
 }

Modified: trunk/blender/source/blender/editors/armature/editarmature.c
===================================================================
--- trunk/blender/source/blender/editors/armature/editarmature.c	2013-02-06 01:53:09 UTC (rev 54346)
+++ trunk/blender/source/blender/editors/armature/editarmature.c	2013-02-06 02:48:03 UTC (rev 54347)
@@ -563,7 +563,9 @@
 				add_v3_v3(cent, ebone->head);
 				add_v3_v3(cent, ebone->tail);
 			}
-			mul_v3_fl(cent, 1.0f / (float)total);
+			if (total) {
+				mul_v3_fl(cent, 1.0f / (float)total);
+			}
 		}
 		else {
 			float min[3], max[3];

Modified: trunk/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2013-02-06 01:53:09 UTC (rev 54346)
+++ trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2013-02-06 02:48:03 UTC (rev 54347)
@@ -3955,9 +3955,11 @@
 	BMEditMesh *em = BMEdit_FromObject(obedit);
 	int extend = RNA_boolean_get(op->ptr, "extend");
 
-	EDBM_select_mirrored(obedit, em, extend);
-	EDBM_selectmode_flush(em);
-	WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit->data);
+	if (em->bm->totvert && em->bm->totvertsel) {
+		EDBM_select_mirrored(obedit, em, extend);
+		EDBM_selectmode_flush(em);
+		WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit->data);
+	}
 
 	return OPERATOR_FINISHED;
 }

Modified: trunk/blender/source/blender/editors/object/object_add.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_add.c	2013-02-06 01:53:09 UTC (rev 54346)
+++ trunk/blender/source/blender/editors/object/object_add.c	2013-02-06 02:48:03 UTC (rev 54347)
@@ -2005,7 +2005,8 @@
 
 static int add_named_exec(bContext *C, wmOperator *op)
 {
-	wmEvent *event = CTX_wm_window(C)->eventstate;
+	wmWindow *win = CTX_wm_window(C);
+	wmEvent *event = win ? win->eventstate : NULL;
 	Main *bmain = CTX_data_main(C);
 	Scene *scene = CTX_data_scene(C);
 	Base *basen, *base;
@@ -2037,8 +2038,10 @@
 
 	basen->lay = basen->object->lay = scene->lay;
 
-	ED_object_location_from_view(C, basen->object->loc);
-	ED_view3d_cursor3d_position(C, basen->object->loc, event->x, event->y);
+	if (event) {
+		ED_object_location_from_view(C, basen->object->loc);
+		ED_view3d_cursor3d_position(C, basen->object->loc, event->x, event->y);
+	}
 	
 	ED_base_object_activate(C, basen);
 

Modified: trunk/blender/source/blender/editors/object/object_transform.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_transform.c	2013-02-06 01:53:09 UTC (rev 54346)
+++ trunk/blender/source/blender/editors/object/object_transform.c	2013-02-06 02:48:03 UTC (rev 54347)
@@ -700,9 +700,11 @@
 			}
 			else {
 				if (around == V3D_CENTROID) {
-					const float total_div = 1.0f / (float)em->bm->totvert;
-					BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) {
-						madd_v3_v3fl(cent, eve->co, total_div);
+					if (em->bm->totvert) {
+						const float total_div = 1.0f / (float)em->bm->totvert;
+						BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) {
+							madd_v3_v3fl(cent, eve->co, total_div);
+						}
 					}
 				}
 				else {

Modified: trunk/blender/source/blender/editors/space_info/info_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_info/info_ops.c	2013-02-06 01:53:09 UTC (rev 54346)
+++ trunk/blender/source/blender/editors/space_info/info_ops.c	2013-02-06 02:48:03 UTC (rev 54347)
@@ -266,10 +266,10 @@
 {
 	Main *bmain = CTX_data_main(C);
 	ID *id;
-	char idname[BKE_ST_MAXNAME];
+	char idname[MAX_ID_NAME - 2];
 	int type = RNA_int_get(op->ptr, "id_type");
 	int method = RNA_enum_get(op->ptr, "method");
-	
+
 	RNA_string_get(op->ptr, "id_name", idname);
 	id = BKE_libblock_find_name(type, idname);
 
@@ -319,7 +319,7 @@
 	/* properties */
 	RNA_def_enum(ot->srna, "method", unpack_item_method_items, PF_USE_LOCAL, "Method", "How to unpack");
 	RNA_def_string(ot->srna, "id_name", "", BKE_ST_MAXNAME, "ID name", "Name of ID block to unpack");
-	RNA_def_int(ot->srna, "id_type", 0, 0, INT_MAX, "ID Type", "Identifier type of ID block", 0, INT_MAX);
+	RNA_def_int(ot->srna, "id_type", ID_IM, 0, INT_MAX, "ID Type", "Identifier type of ID block", 0, INT_MAX);
 }
 
 

Modified: trunk/blender/source/blender/editors/transform/transform.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.c	2013-02-06 01:53:09 UTC (rev 54346)
+++ trunk/blender/source/blender/editors/transform/transform.c	2013-02-06 02:48:03 UTC (rev 54347)
@@ -6023,7 +6023,7 @@
 	if (t->spacetype == SPACE_VIEW3D) {
 		/* background mode support */
 //		v3d = t->sa ? t->sa->spacedata.first : NULL;
-		rv3d = t->ar ? t->ar->regiondata : NULL;
+		rv3d = ar ? ar->regiondata : NULL;
 	}
 
 	sld->is_proportional = true;
@@ -6089,18 +6089,30 @@
 				if (!BM_elem_flag_test(e, BM_ELEM_HIDDEN)) {
 					BMVert *v_other = BM_edge_other_vert(e, v);
 					copy_v3_v3(sv_array[j].co_link_orig_3d[k], v_other->co);
-					ED_view3d_project_float_v2_m4(ar,
-					                              sv_array[j].co_link_orig_3d[k],
-					                              sv_array[j].co_link_orig_2d[k],
-					                              projectMat);
+					if (ar) {
+						ED_view3d_project_float_v2_m4(ar,
+						                              sv_array[j].co_link_orig_3d[k],
+						                              sv_array[j].co_link_orig_2d[k],
+						                              projectMat);
+					}
+					else {
+						copy_v2_v2(sv_array[j].co_link_orig_2d[k],
+						           sv_array[j].co_link_orig_3d[k]);
+					}
 					k++;
 				}
 			}
 
-			ED_view3d_project_float_v2_m4(ar,
-			                              sv_array[j].co_orig_3d,
-			                              sv_array[j].co_orig_2d,
-			                              projectMat);
+			if (ar) {
+				ED_view3d_project_float_v2_m4(ar,
+				                              sv_array[j].co_orig_3d,
+				                              sv_array[j].co_orig_2d,
+				                              projectMat);
+			}
+			else {
+				copy_v2_v2(sv_array[j].co_orig_2d,
+				           sv_array[j].co_orig_3d);
+			}
 
 			j++;
 		}

Modified: trunk/blender/source/blender/render/intern/source/rayshade.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/rayshade.c	2013-02-06 01:53:09 UTC (rev 54346)
+++ trunk/blender/source/blender/render/intern/source/rayshade.c	2013-02-06 02:48:03 UTC (rev 54347)
@@ -433,14 +433,18 @@
 		 * This is ONLY needed to kept a bogus behavior of SUN and HEMI lights */
 		INIT_MINMAX(min, max);
 		RE_rayobject_merge_bb(re->raytree, min, max);
+		if (min[0] > max[0]) {  /* empty raytree */
+			zero_v3(min);
+			zero_v3(max);
+		}
 		for (i=0; i<3; i++) {
+			/* TODO: explain why add top both min and max??? */
 			min[i] += 0.01f;
 			max[i] += 0.01f;
 			sub[i] = max[i]-min[i];
 		}
 
-		re->maxdist = dot_v3v3(sub, sub);
-		if (re->maxdist > 0.0f) re->maxdist= sqrt(re->maxdist);
+		re->maxdist = len_v3(sub);
 
 		re->i.infostr= "Raytree finished";
 		re->stats_draw(re->sdh, &re->i);




More information about the Bf-blender-cvs mailing list