[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57856] trunk/blender: Fix #35551: the topology mirror setting affected shape key and vertex group but

Brecht Van Lommel brechtvanlommel at pandora.be
Fri Jun 28 19:13:09 CEST 2013


Revision: 57856
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57856
Author:   blendix
Date:     2013-06-28 17:13:09 +0000 (Fri, 28 Jun 2013)
Log Message:
-----------
Fix #35551: the topology mirror setting affected shape key and vertex group but
this was confusing as there was no setting visible for it. Now these menus
contain an entry to mirror without and with topology mirror.

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_ui/properties_data_mesh.py
    trunk/blender/release/scripts/startup/bl_ui/space_view3d_toolbar.py
    trunk/blender/source/blender/editors/armature/armature_skinning.c
    trunk/blender/source/blender/editors/armature/meshlaplacian.c
    trunk/blender/source/blender/editors/include/ED_mesh.h
    trunk/blender/source/blender/editors/mesh/editmesh_select.c
    trunk/blender/source/blender/editors/mesh/editmesh_tools.c
    trunk/blender/source/blender/editors/mesh/editmesh_utils.c
    trunk/blender/source/blender/editors/mesh/meshtools.c
    trunk/blender/source/blender/editors/object/object_shapekey.c
    trunk/blender/source/blender/editors/object/object_vgroup.c
    trunk/blender/source/blender/editors/sculpt_paint/paint_vertex.c
    trunk/blender/source/blender/editors/transform/transform_conversions.c

Modified: trunk/blender/release/scripts/startup/bl_ui/properties_data_mesh.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/properties_data_mesh.py	2013-06-28 17:10:25 UTC (rev 57855)
+++ trunk/blender/release/scripts/startup/bl_ui/properties_data_mesh.py	2013-06-28 17:13:09 UTC (rev 57856)
@@ -34,6 +34,7 @@
         layout.operator("object.vertex_group_copy_to_linked", icon='LINK_AREA')
         layout.operator("object.vertex_group_copy_to_selected", icon='LINK_AREA')
         layout.operator("object.vertex_group_mirror", icon='ARROW_LEFTRIGHT')
+        layout.operator("object.vertex_group_mirror", text="Mirror Vertex Group (Topology)", icon='ARROW_LEFTRIGHT').use_topology = True
         layout.operator("object.vertex_group_remove_from", icon='X', text="Remove from All Groups").use_all_groups = True
         layout.operator("object.vertex_group_remove_from", icon='X', text="Clear Active Group").use_all_verts = True
         layout.operator("object.vertex_group_remove", icon='X', text="Delete All Groups").all = True
@@ -53,6 +54,7 @@
         layout.operator("object.shape_key_transfer", icon='COPY_ID')  # icon is not ideal
         layout.operator("object.join_shapes", icon='COPY_ID')  # icon is not ideal
         layout.operator("object.shape_key_mirror", icon='ARROW_LEFTRIGHT')
+        layout.operator("object.shape_key_mirror", text="Mirror Shape Key (Topology)", icon='ARROW_LEFTRIGHT').use_topology = True
         layout.operator("object.shape_key_add", icon='ZOOMIN', text="New Shape From Mix").from_mix = True
         layout.operator("object.shape_key_remove", icon='X', text="Delete All Shapes").all = True
 

Modified: trunk/blender/release/scripts/startup/bl_ui/space_view3d_toolbar.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_view3d_toolbar.py	2013-06-28 17:10:25 UTC (rev 57855)
+++ trunk/blender/release/scripts/startup/bl_ui/space_view3d_toolbar.py	2013-06-28 17:13:09 UTC (rev 57856)
@@ -1153,7 +1153,9 @@
         if obj.type == 'MESH':
             mesh = obj.data
             col.prop(mesh, "use_mirror_x")
-            col.prop(mesh, "use_mirror_topology")
+            row = col.row()
+            row.active = mesh.use_mirror_x
+            row.prop(mesh, "use_mirror_topology")
 
         col.prop(wpaint, "input_samples")
 

Modified: trunk/blender/source/blender/editors/armature/armature_skinning.c
===================================================================
--- trunk/blender/source/blender/editors/armature/armature_skinning.c	2013-06-28 17:10:25 UTC (rev 57855)
+++ trunk/blender/source/blender/editors/armature/armature_skinning.c	2013-06-28 17:13:09 UTC (rev 57856)
@@ -199,10 +199,11 @@
 	bDeformGroup *dgroup;
 	float distance;
 	int i, iflip, j;
+	bool use_topology = (mesh->editflag & ME_EDIT_MIRROR_TOPO) != 0;
 
 	/* for each vertex in the mesh */
 	for (i = 0; i < mesh->totvert; i++) {
-		iflip = (dgroupflip) ? mesh_get_x_mirror_vert(ob, i) : 0;
+		iflip = (dgroupflip) ? mesh_get_x_mirror_vert(ob, i, use_topology) : 0;
 		
 		/* for each skinnable bone */
 		for (j = 0; j < numbones; ++j) {

Modified: trunk/blender/source/blender/editors/armature/meshlaplacian.c
===================================================================
--- trunk/blender/source/blender/editors/armature/meshlaplacian.c	2013-06-28 17:10:25 UTC (rev 57855)
+++ trunk/blender/source/blender/editors/armature/meshlaplacian.c	2013-06-28 17:13:09 UTC (rev 57856)
@@ -652,6 +652,7 @@
 	float solution, weight;
 	int *vertsflipped = NULL, *mask = NULL;
 	int a, tottri, j, bbone, firstsegment, lastsegment;
+	bool use_topology = (me->editflag & ME_EDIT_MIRROR_TOPO) != 0;
 
 	MVert *mvert = me->mvert;
 	int use_vert_sel = FALSE;
@@ -716,7 +717,7 @@
 	if (dgroupflip) {
 		vertsflipped = MEM_callocN(sizeof(int) * me->totvert, "vertsflipped");
 		for (a = 0; a < me->totvert; a++)
-			vertsflipped[a] = mesh_get_x_mirror_vert(ob, a);
+			vertsflipped[a] = mesh_get_x_mirror_vert(ob, a, use_topology);
 	}
 	
 	/* compute weights per bone */

Modified: trunk/blender/source/blender/editors/include/ED_mesh.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_mesh.h	2013-06-28 17:10:25 UTC (rev 57855)
+++ trunk/blender/source/blender/editors/include/ED_mesh.h	2013-06-28 17:13:09 UTC (rev 57856)
@@ -77,9 +77,9 @@
 /* editmesh_utils.c */
 void           EDBM_verts_mirror_cache_begin_ex(struct BMEditMesh *em, const int axis,
                                                 const bool use_self, const bool use_select,
-                                                const bool is_topo, float maxdist, int *r_index);
+                                                const bool use_topology, float maxdist, int *r_index);
 void           EDBM_verts_mirror_cache_begin(struct BMEditMesh *em, const int axis,
-                                             const bool use_self, const bool use_select);
+                                             const bool use_self, const bool use_select, const bool use_toplogy);
 void           EDBM_verts_mirror_apply(struct BMEditMesh *em, const int sel_from, const int sel_to);
 struct BMVert *EDBM_verts_mirror_get(struct BMEditMesh *em, struct BMVert *v);
 void           EDBM_verts_mirror_cache_clear(struct BMEditMesh *em, struct BMVert *v);
@@ -241,7 +241,8 @@
 bool                 ED_vgroup_give_array(struct ID *id, struct MDeformVert **dvert_arr, int *dvert_tot);
 bool                 ED_vgroup_copy_array(struct Object *ob, struct Object *ob_from);
 void                 ED_vgroup_mirror(struct Object *ob,
-                                      const bool mirror_weights, const bool flip_vgroups, const bool all_vgroups,
+                                      const bool mirror_weights, const bool flip_vgroups,
+                                      const bool all_vgroups, const bool use_topology,
                                       int *r_totmirr, int *r_totfail);
 
 bool                 ED_vgroup_object_is_edit_mode(struct Object *ob);
@@ -304,8 +305,10 @@
 /* retrieves mirrored cache vert, or NULL if there isn't one.
  * note: calling this without ensuring the mirror cache state
  * is bad.*/
-int            mesh_get_x_mirror_vert(struct Object *ob, int index);
-struct BMVert *editbmesh_get_x_mirror_vert(struct Object *ob, struct BMEditMesh *em, struct BMVert *eve, const float co[3], int index);
+int            mesh_get_x_mirror_vert(struct Object *ob, int index, const bool use_topology);
+struct BMVert *editbmesh_get_x_mirror_vert(struct Object *ob, struct BMEditMesh *em,
+                                           struct BMVert *eve, const float co[3],
+                                           int index, const bool use_topology);
 int           *mesh_get_x_mirror_faces(struct Object *ob, struct BMEditMesh *em);
 
 bool ED_mesh_pick_vert(struct bContext *C,      struct Object *ob, const int mval[2], unsigned int *index, int size, bool use_zbuf);

Modified: trunk/blender/source/blender/editors/mesh/editmesh_select.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_select.c	2013-06-28 17:10:25 UTC (rev 57855)
+++ trunk/blender/source/blender/editors/mesh/editmesh_select.c	2013-06-28 17:13:09 UTC (rev 57856)
@@ -59,8 +59,9 @@
 
 #include "BIF_gl.h"
 
+#include "DNA_mesh_types.h"
+#include "DNA_meshdata_types.h"
 #include "DNA_object_types.h"
-#include "DNA_meshdata_types.h"
 
 #include "GPU_extensions.h"
 
@@ -76,10 +77,12 @@
 void EDBM_select_mirrored(BMEditMesh *em, bool extend,
                           int *r_totmirr, int *r_totfail)
 {
+	Mesh *me = (Mesh *)em->ob->data;
 	BMVert *v1, *v2;
 	BMIter iter;
 	int totmirr = 0;
 	int totfail = 0;
+	bool use_topology = (me && (me->editflag & ME_EDIT_MIRROR_TOPO));
 
 	*r_totmirr = *r_totfail = 0;
 
@@ -92,7 +95,7 @@
 		}
 	}
 
-	EDBM_verts_mirror_cache_begin(em, 0, true, true);
+	EDBM_verts_mirror_cache_begin(em, 0, true, true, use_topology);
 
 	if (!extend)
 		EDBM_flag_disable_all(em, BM_ELEM_SELECT);

Modified: trunk/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2013-06-28 17:10:25 UTC (rev 57855)
+++ trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2013-06-28 17:13:09 UTC (rev 57856)
@@ -1099,11 +1099,13 @@
 static int edbm_do_smooth_vertex_exec(bContext *C, wmOperator *op)
 {
 	Object *obedit = CTX_data_edit_object(C);
+	Mesh *me = obedit->data;
 	BMEditMesh *em = BKE_editmesh_from_object(obedit);
 	ModifierData *md;
 	int mirrx = false, mirry = false, mirrz = false;
 	int i, repeat;
 	float clip_dist = 0.0f;
+	bool use_topology = (me->editflag & ME_EDIT_MIRROR_TOPO) != 0;
 
 	const bool xaxis = RNA_boolean_get(op->ptr, "xaxis");
 	const bool yaxis = RNA_boolean_get(op->ptr, "yaxis");
@@ -1111,7 +1113,7 @@
 
 	/* mirror before smooth */
 	if (((Mesh *)obedit->data)->editflag & ME_EDIT_MIRROR_X) {
-		EDBM_verts_mirror_cache_begin(em, 0, false, true);
+		EDBM_verts_mirror_cache_begin(em, 0, false, true, use_topology);
 	}
 
 	/* if there is a mirror modifier with clipping, flag the verts that
@@ -1183,6 +1185,8 @@
 {
 	Object *obedit = CTX_data_edit_object(C);
 	BMEditMesh *em = BKE_editmesh_from_object(obedit);
+	Mesh *me = obedit->data;
+	bool use_topology = (me->editflag & ME_EDIT_MIRROR_TOPO) != 0;
 	int usex = true, usey = true, usez = true, preserve_volume = true;
 	int i, repeat;
 	float lambda_factor;
@@ -1202,7 +1206,7 @@
 
 	/* mirror before smooth */
 	if (((Mesh *)obedit->data)->editflag & ME_EDIT_MIRROR_X) {
-		EDBM_verts_mirror_cache_begin(em, 0, false, true);
+		EDBM_verts_mirror_cache_begin(em, 0, false, true, use_topology);
 	}
 
 	repeat = RNA_int_get(op->ptr, "repeat");
@@ -4257,7 +4261,7 @@
 	BMEditMesh *em = BKE_editmesh_from_object(obedit);
 	BMesh *bm = em->bm;
 	int *index = MEM_mallocN(bm->totvert * sizeof(*index), __func__);
-	const bool is_topo = false;
+	const bool use_topology = false;
 
 	const float thresh = RNA_float_get(op->ptr, "threshold");
 	const float fac = RNA_float_get(op->ptr, "factor");
@@ -4276,7 +4280,7 @@
 	BMVert *v;
 	int i;
 
-	EDBM_verts_mirror_cache_begin_ex(em, axis, true, true, is_topo, thresh, index);

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list