[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