[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [52592] trunk/blender: fix for asserts added in own recent commit with more strict type-checking

Campbell Barton ideasman42 at gmail.com
Tue Nov 27 03:34:45 CET 2012


Revision: 52592
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=52592
Author:   campbellbarton
Date:     2012-11-27 02:34:40 +0000 (Tue, 27 Nov 2012)
Log Message:
-----------
fix for asserts added in own recent commit with more strict type-checking
- BMO_slot_copy now only copies compatible elements.

other minor changes
- don't use text.format(...), convention for UI scripts is C style string formatting.
- rename bmo_edgenet_prepare --> bmo_edgenet_prepare_exec
- float/double warning in bevel.

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_ui/properties_particle.py
    trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c
    trunk/blender/source/blender/bmesh/intern/bmesh_operator_api.h
    trunk/blender/source/blender/bmesh/intern/bmesh_operators.c
    trunk/blender/source/blender/bmesh/intern/bmesh_operators_private.h
    trunk/blender/source/blender/bmesh/operators/bmo_create.c
    trunk/blender/source/blender/bmesh/tools/bmesh_bevel.c
    trunk/blender/source/blender/editors/mesh/editmesh_utils.c

Modified: trunk/blender/release/scripts/startup/bl_ui/properties_particle.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/properties_particle.py	2012-11-27 01:18:54 UTC (rev 52591)
+++ trunk/blender/release/scripts/startup/bl_ui/properties_particle.py	2012-11-27 02:34:40 UTC (rev 52592)
@@ -148,7 +148,7 @@
             #row.label(text="Render")
 
             if part.is_fluid:
-                layout.label(text="{} fluid particles for this frame".format(str(part.count)))
+                layout.label(text="%d fluid particles for this frame" % part.count)
                 return
 
             row = col.row()

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c	2012-11-27 01:18:54 UTC (rev 52591)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_opdefines.c	2012-11-27 02:34:40 UTC (rev 52592)
@@ -569,7 +569,7 @@
 	{{"edges.out", BMO_OP_SLOT_ELEMENT_BUF, {BM_EDGE}},  /* new edges */
 	 {{'\0'}},
 	},
-	bmo_edgenet_prepare,
+	bmo_edgenet_prepare_exec,
 	0,
 };
 

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_operator_api.h
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_operator_api.h	2012-11-27 01:18:54 UTC (rev 52591)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_operator_api.h	2012-11-27 02:34:40 UTC (rev 52592)
@@ -136,8 +136,8 @@
 } eBMOpSlotSubType_Ptr;
 
 typedef union eBMOpSlotSubType_Union {
-	eBMOpSlotSubType_Map elem;
-	eBMOpSlotSubType_Map ptr;
+	eBMOpSlotSubType_Elem elem;
+	eBMOpSlotSubType_Ptr ptr;
 	eBMOpSlotSubType_Map map;
 } eBMOpSlotSubType_Union;
 

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_operators.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_operators.c	2012-11-27 01:18:54 UTC (rev 52591)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_operators.c	2012-11-27 02:34:40 UTC (rev 52592)
@@ -288,9 +288,49 @@
 		slot_dst->data.buf = NULL;
 		slot_dst->len = slot_src->len;
 		if (slot_dst->len) {
-			const int slot_alloc_size = BMO_OPSLOT_TYPEINFO[slot_dst->slot_type] * slot_dst->len;
-			slot_dst->data.buf = BLI_memarena_alloc(arena_dst, slot_alloc_size);
-			memcpy(slot_dst->data.buf, slot_src->data.buf, slot_alloc_size);
+			/* check dest has all flags enabled that the source has */
+			const eBMOpSlotSubType_Elem src_elem_flag = (slot_src->slot_subtype.elem & BM_ALL_NOLOOP);
+			const eBMOpSlotSubType_Elem dst_elem_flag = (slot_dst->slot_subtype.elem & BM_ALL_NOLOOP);
+
+			if ((src_elem_flag | dst_elem_flag) == dst_elem_flag) {
+				/* pass */
+			}
+			else {
+				/* check types */
+				const unsigned int tot = slot_src->len;
+				unsigned int i;
+				unsigned int out = 0;
+				BMElem **ele_src = (BMElem **)slot_src->data.buf;
+				for (i = 0; i < tot; i++, ele_src++) {
+					if ((*ele_src)->head.htype & dst_elem_flag) {
+						out++;
+					}
+				}
+				if (out != tot) {
+					slot_dst->len = out;
+				}
+			}
+
+			if (slot_dst->len) {
+				const int slot_alloc_size = BMO_OPSLOT_TYPEINFO[slot_dst->slot_type] * slot_dst->len;
+				slot_dst->data.buf = BLI_memarena_alloc(arena_dst, slot_alloc_size);
+				if (slot_src->len == slot_dst->len) {
+					memcpy(slot_dst->data.buf, slot_src->data.buf, slot_alloc_size);
+				}
+				else {
+					/* only copy compatible elements */
+					const unsigned int tot = slot_src->len;
+					unsigned int i;
+					BMElem **ele_src = (BMElem **)slot_src->data.buf;
+					BMElem **ele_dst = (BMElem **)slot_dst->data.buf;
+					for (i = 0; i < tot; i++, ele_src++) {
+						if ((*ele_src)->head.htype & dst_elem_flag) {
+							*ele_dst = *ele_src;
+							ele_dst++;
+						}
+					}
+				}
+			}
 		}
 	}
 	else if (slot_dst->slot_type == BMO_OP_SLOT_MAPPING) {

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_operators_private.h
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_operators_private.h	2012-11-27 01:18:54 UTC (rev 52591)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_operators_private.h	2012-11-27 02:34:40 UTC (rev 52592)
@@ -61,7 +61,7 @@
 void bmo_dissolve_verts_exec(BMesh *bm, BMOperator *op);
 void bmo_duplicate_exec(BMesh *bm, BMOperator *op);
 void bmo_edgenet_fill_exec(BMesh *bm, BMOperator *op);
-void bmo_edgenet_prepare(BMesh *bm, BMOperator *op);
+void bmo_edgenet_prepare_exec(BMesh *bm, BMOperator *op);
 void bmo_extrude_discrete_faces_exec(BMesh *bm, BMOperator *op);
 void bmo_extrude_edge_only_exec(BMesh *bm, BMOperator *op);
 void bmo_extrude_face_region_exec(BMesh *bm, BMOperator *op);

Modified: trunk/blender/source/blender/bmesh/operators/bmo_create.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_create.c	2012-11-27 01:18:54 UTC (rev 52591)
+++ trunk/blender/source/blender/bmesh/operators/bmo_create.c	2012-11-27 02:34:40 UTC (rev 52592)
@@ -1098,7 +1098,7 @@
 	return NULL;
 }
 
-void bmo_edgenet_prepare(BMesh *bm, BMOperator *op)
+void bmo_edgenet_prepare_exec(BMesh *bm, BMOperator *op)
 {
 	BMOIter siter;
 	BMEdge *e;

Modified: trunk/blender/source/blender/bmesh/tools/bmesh_bevel.c
===================================================================
--- trunk/blender/source/blender/bmesh/tools/bmesh_bevel.c	2012-11-27 01:18:54 UTC (rev 52591)
+++ trunk/blender/source/blender/bmesh/tools/bmesh_bevel.c	2012-11-27 02:34:40 UTC (rev 52592)
@@ -663,7 +663,7 @@
 
 	sub_v3_v3v3(va_vmid, vmid, va);
 	sub_v3_v3v3(vb_vmid, vmid, vb);
-	if (fabs(angle_v3v3(va_vmid, vb_vmid) - (float)M_PI) > 100.f *(float)BEVEL_EPSILON) {
+	if (fabsf(angle_v3v3(va_vmid, vb_vmid) - (float)M_PI) > 100.f *(float)BEVEL_EPSILON) {
 		sub_v3_v3v3(vo, va, vb_vmid);
 		cross_v3_v3v3(vddir, vb_vmid, va_vmid);
 		normalize_v3(vddir);

Modified: trunk/blender/source/blender/editors/mesh/editmesh_utils.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_utils.c	2012-11-27 01:18:54 UTC (rev 52591)
+++ trunk/blender/source/blender/editors/mesh/editmesh_utils.c	2012-11-27 02:34:40 UTC (rev 52592)
@@ -265,9 +265,11 @@
 
 int EDBM_op_call_and_selectf(BMEditMesh *em, wmOperator *op, const char *select_slot_out, const char *fmt, ...)
 {
+	BMOpSlot *slot_select_out;
 	BMesh *bm = em->bm;
 	BMOperator bmop;
 	va_list list;
+	char hflag;
 
 	va_start(list, fmt);
 
@@ -283,9 +285,12 @@
 
 	BMO_op_exec(bm, &bmop);
 
+	slot_select_out = BMO_slot_get(bmop.slots_out, select_slot_out);
+	hflag = slot_select_out->slot_subtype.elem & BM_ALL_NOLOOP;
+
 	BM_mesh_elem_hflag_disable_all(em->bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_SELECT, FALSE);
 
-	BMO_slot_buffer_hflag_enable(em->bm, bmop.slots_out, select_slot_out, BM_ALL_NOLOOP, BM_ELEM_SELECT, TRUE);
+	BMO_slot_buffer_hflag_enable(em->bm, bmop.slots_out, select_slot_out, hflag, BM_ELEM_SELECT, TRUE);
 
 	va_end(list);
 	return EDBM_op_finish(em, &bmop, op, TRUE);




More information about the Bf-blender-cvs mailing list