[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41428] branches/bmesh/blender/source/ blender/editors: BMesh todo - mirror vertex groups back.
Campbell Barton
ideasman42 at gmail.com
Tue Nov 1 06:43:37 CET 2011
Revision: 41428
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41428
Author: campbellbarton
Date: 2011-11-01 05:43:35 +0000 (Tue, 01 Nov 2011)
Log Message:
-----------
BMesh todo - mirror vertex groups back.
Modified Paths:
--------------
branches/bmesh/blender/source/blender/editors/include/ED_mesh.h
branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
branches/bmesh/blender/source/blender/editors/object/object_vgroup.c
branches/bmesh/blender/source/blender/editors/transform/transform_conversions.c
Modified: branches/bmesh/blender/source/blender/editors/include/ED_mesh.h
===================================================================
--- branches/bmesh/blender/source/blender/editors/include/ED_mesh.h 2011-11-01 05:17:46 UTC (rev 41427)
+++ branches/bmesh/blender/source/blender/editors/include/ED_mesh.h 2011-11-01 05:43:35 UTC (rev 41428)
@@ -120,12 +120,13 @@
note: why do we only allow x axis mirror editing?
*/
-void EDBM_CacheMirrorVerts(struct BMEditMesh *em);
+void EDBM_CacheMirrorVerts(struct BMEditMesh *em, const short use_select); /* note, replaces EM_cache_x_mirror_vert in trunk */
/*retrieves mirrored cache vert, or NULL if there isn't one.
note: calling this without ensuring the mirror cache state
is bad.*/
struct BMVert *EDBM_GetMirrorVert(struct BMEditMesh *em, struct BMVert *v);
+void EDBM_ClearMirrorVert(struct BMEditMesh *em, struct BMVert *v);
void EDBM_EndMirrorCache(struct BMEditMesh *em);
void EDBM_ApplyMirrorCache(struct BMEditMesh *em, const int sel_from, const int sel_to);
@@ -200,8 +201,6 @@
intptr_t mesh_octree_table(struct Object *ob, struct BMEditMesh *em, float *co, char mode);
long mesh_mirrtopo_table(struct Object *ob, char mode);
-//BMESH_TODO void EM_cache_x_mirror_vert(struct Object *ob, struct BMEditMesh *em);
-
int mouse_mesh(struct bContext *C, const int mval[2], short extend);
struct BMVert *editbmesh_get_x_mirror_vert(struct Object *ob, struct BMEditMesh *em, struct BMVert *eve, float *co, int index);
Modified: branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c 2011-11-01 05:17:46 UTC (rev 41427)
+++ branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c 2011-11-01 05:43:35 UTC (rev 41428)
@@ -1616,7 +1616,7 @@
/* mirror before smooth */
if (((Mesh *)obedit->data)->editflag & ME_EDIT_MIRROR_X) {
- EDBM_CacheMirrorVerts(em);
+ EDBM_CacheMirrorVerts(em, TRUE);
}
/* if there is a mirror modifier with clipping, flag the verts that
Modified: branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c 2011-11-01 05:17:46 UTC (rev 41427)
+++ branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c 2011-11-01 05:43:35 UTC (rev 41428)
@@ -795,7 +795,7 @@
* preference */
#define BM_SEARCH_MAXDIST_MIRR 0.00002f
#define BM_CD_LAYER_ID "__mirror_index"
-void EDBM_CacheMirrorVerts(BMEditMesh *em)
+void EDBM_CacheMirrorVerts(BMEditMesh *em, const short use_select)
{
Mesh *me = em->me;
BMBVHTree *tree = BMBVH_NewBVH(em, 0, NULL, NULL);
@@ -837,7 +837,7 @@
float co[3] = {-v->co[0], v->co[1], v->co[2]};
//temporary for testing, check for selection
- if (!BM_TestHFlag(v, BM_SELECT))
+ if (use_select && !BM_TestHFlag(v, BM_SELECT))
continue;
mirr = topo ?
@@ -878,6 +878,17 @@
return NULL;
}
+void EDBM_ClearMirrorVert(BMEditMesh *em, BMVert *v)
+{
+ int *mirr = CustomData_bmesh_get_layer_n(&em->bm->vdata, v->head.data, em->mirror_cdlayer);
+
+ BLI_assert(em->mirror_cdlayer != -1); /* invalid use */
+
+ if (mirr) {
+ *mirr= -1;
+ }
+}
+
void EDBM_EndMirrorCache(BMEditMesh *em)
{
if (em->mirr_free_arrays) {
Modified: branches/bmesh/blender/source/blender/editors/object/object_vgroup.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/object/object_vgroup.c 2011-11-01 05:17:46 UTC (rev 41427)
+++ branches/bmesh/blender/source/blender/editors/object/object_vgroup.c 2011-11-01 05:43:35 UTC (rev 41428)
@@ -1562,9 +1562,7 @@
{
#define VGROUP_MIRR_OP dvert_mirror_op(dvert, dvert_mirr, sel, sel_mirr, flip_map, flip_map_len, mirror_weights, flip_vgroups)
-#if 0
- EditVert *eve, *eve_mirr;
-#endif
+ BMVert *eve, *eve_mirr;
MDeformVert *dvert, *dvert_mirr;
short sel, sel_mirr;
@@ -1577,42 +1575,38 @@
/* only the active group */
if(ob->type == OB_MESH) {
-#if 1 //BMESH_TODO
- (void)dvert;
- (void)dvert_mirr;
- (void)flip_map;
-#else
Mesh *me= ob->data;
- EditMesh *em = BKE_mesh_get_editmesh(me);
+ BMEditMesh *em = me->edit_btmesh;
+ BMIter iter;
-
- if(!CustomData_has_layer(&em->vdata, CD_MDEFORMVERT)) {
+ if(!CustomData_has_layer(&em->bm->vdata, CD_MDEFORMVERT)) {
MEM_freeN(flip_map);
return;
}
- EM_cache_x_mirror_vert(ob, em);
+ EDBM_CacheMirrorVerts(em, FALSE);
/* Go through the list of editverts and assign them */
- for(eve=em->verts.first; eve; eve=eve->next){
- if((eve_mirr=eve->tmp.v)) {
- sel= eve->f & SELECT;
- sel_mirr= eve_mirr->f & SELECT;
+ BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) {
+ if((eve_mirr= EDBM_GetMirrorVert(em, eve))) {
+ sel= BM_TestHFlag(eve, BM_SELECT);
+ sel_mirr= BM_TestHFlag(eve_mirr, BM_SELECT);
if((sel || sel_mirr) && (eve != eve_mirr)) {
- dvert= CustomData_em_get(&em->vdata, eve->data, CD_MDEFORMVERT);
- dvert_mirr= CustomData_em_get(&em->vdata, eve_mirr->data, CD_MDEFORMVERT);
+ dvert= CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT);
+ dvert_mirr= CustomData_bmesh_get(&em->bm->vdata, eve_mirr->head.data, CD_MDEFORMVERT);
if(dvert && dvert_mirr) {
VGROUP_MIRR_OP;
}
}
- eve->tmp.v= eve_mirr->tmp.v= NULL;
+ /* don't use these again */
+ EDBM_ClearMirrorVert(em, eve);
+ EDBM_ClearMirrorVert(em, eve_mirr);
}
}
- BKE_mesh_end_editmesh(me, em);
-#endif // BMESH_TODO
+ EDBM_EndMirrorCache(em);
}
else if (ob->type == OB_LATTICE) {
Lattice *lt= ob->data;
Modified: branches/bmesh/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/transform/transform_conversions.c 2011-11-01 05:17:46 UTC (rev 41427)
+++ branches/bmesh/blender/source/blender/editors/transform/transform_conversions.c 2011-11-01 05:43:35 UTC (rev 41428)
@@ -2075,7 +2075,7 @@
if (t->flag & T_MIRROR)
{
- EDBM_CacheMirrorVerts(em);
+ EDBM_CacheMirrorVerts(em, TRUE);
mirror = 1;
}
More information about the Bf-blender-cvs
mailing list