Off by default is fine, but removal all together i will not allow, it has helped me and many other users immensely modelling a symmetrical object but having each side independently animated, all this does is mirror weights in vgroup .L to vgroup .R
On 30/12/11 09:24, Daniel Salazar - 3Developer.com wrote: > maybe bmesh is an opportunity to kill vertex group mirroring in vgroup > modifier or at least have it off by default. I still can't imagine any real > use for this > > cheers > > Daniel Salazar > 3Developer.com > > > On Thu, Dec 29, 2011 at 3:15 AM, Campbell Barton<ideasma...@gmail.com>wrote: > >> Revision: 42970 >> >> http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42970 >> Author: campbellbarton >> Date: 2011-12-29 09:15:06 +0000 (Thu, 29 Dec 2011) >> Log Message: >> ----------- >> bmesh mirror modifier cleanup >> * vertex map was a dynamicly realloc'd array when the final size was >> known, use a fixed array instead. >> * vertex map was being calculated even when not used. >> * face tesselation was being called twice. >> * an unused deform group array was being created. >> >> Modified Paths: >> -------------- >> branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c >> branches/bmesh/blender/source/blender/modifiers/intern/MOD_mirror.c >> >> Modified: >> branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c >> =================================================================== >> --- >> branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c >> 2011-12-29 07:29:44 UTC (rev 42969) >> +++ >> branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c >> 2011-12-29 09:15:06 UTC (rev 42970) >> @@ -2268,15 +2268,16 @@ >> } >> >> #if 1 >> -/*merge verts >> - >> - vtargetmap is a table that maps vertices to target vertices. a value >> of -1 >> - indicates a vertex is a target, and is to be kept. >> - >> - this frees dm, and returns a new one. >> - >> - this is a really horribly written function. ger. - joeedh >> - >> +/* merge verts >> + * >> + * vtargetmap is a table that maps vertices to target vertices. a value >> of -1 >> + * indicates a vertex is a target, and is to be kept. >> + * >> + * this frees dm, and returns a new one. >> + * >> + * this is a really horribly written function. ger. - joeedh >> + * >> + * note, CDDM_recalc_tesselation has to run on the returned DM if you >> want to access tessfaces. >> */ >> DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, int *vtargetmap) >> { >> @@ -2437,8 +2438,6 @@ >> memcpy(cddm2->mloop, mloop, sizeof(MLoop)*BLI_array_count(mloop)); >> memcpy(cddm2->mpoly, mpoly, sizeof(MPoly)*BLI_array_count(mpoly)); >> BLI_array_free(mvert); BLI_array_free(medge); >> BLI_array_free(mloop); BLI_array_free(mpoly); >> - >> - CDDM_recalc_tesselation((DerivedMesh*)cddm2); >> >> if (newv) >> MEM_freeN(newv); >> >> Modified: >> branches/bmesh/blender/source/blender/modifiers/intern/MOD_mirror.c >> =================================================================== >> --- branches/bmesh/blender/source/blender/modifiers/intern/MOD_mirror.c >> 2011-12-29 07:29:44 UTC (rev 42969) >> +++ branches/bmesh/blender/source/blender/modifiers/intern/MOD_mirror.c >> 2011-12-29 09:15:06 UTC (rev 42970) >> @@ -100,37 +100,22 @@ >> { >> float tolerance_sq; >> DerivedMesh *cddm, *origdm; >> - bDeformGroup *def; >> - bDeformGroup **vector_def = NULL; >> MVert *mv, *ov; >> MEdge *me; >> MLoop *ml; >> MPoly *mp; >> float mtx[4][4]; >> - int i, j, *vtargetmap = NULL; >> - BLI_array_declare(vtargetmap); >> - int vector_size=0, a, totshape; >> + int i, j; >> + int a, totshape; >> + int *vtargetmap, *vtmap_a, *vtmap_b; >> + const int do_vtargetmap = !(mmd->flag& MOD_MIR_NO_MERGE); >> >> tolerance_sq = mmd->tolerance * mmd->tolerance; >> >> origdm = dm; >> if (!CDDM_Check(dm)) >> dm = CDDM_copy(dm, 0); >> - >> - if (mmd->flag& MOD_MIR_VGROUP) { >> - /* calculate the number of deformedGroups */ >> - for(vector_size = 0, def = ob->defbase.first; def; >> - def = def->next, vector_size++); >> >> - /* load the deformedGroups for fast access */ >> - vector_def = >> - (bDeformGroup **)MEM_mallocN(sizeof(bDeformGroup*) >> * vector_size, >> - >> "group_index"); >> - for(a = 0, def = ob->defbase.first; def; def = def->next, >> a++) { >> - vector_def[a] = def; >> - } >> - } >> - >> /*mtx is the mirror transformation*/ >> unit_m4(mtx); >> mtx[axis][axis] = -1.0; >> @@ -166,20 +151,30 @@ >> CustomData_copy_data(&dm->vertData,&cddm->vertData, 0, >> dm->numVertData, dm->numVertData); >> CustomData_copy_data(&dm->edgeData,&cddm->edgeData, 0, >> dm->numEdgeData, dm->numEdgeData); >> CustomData_copy_data(&dm->polyData,&cddm->polyData, 0, >> dm->numPolyData, dm->numPolyData); >> - >> + >> + if (do_vtargetmap) { >> + /* second half is filled with -1 */ >> + vtargetmap = MEM_mallocN(sizeof(int) * dm->numVertData * >> 2, "MOD_mirror tarmap"); >> + >> + vtmap_a = vtargetmap; >> + vtmap_b = vtargetmap + dm->numVertData; >> + } >> + >> /*mirror vertex coordinates*/ >> ov = CDDM_get_verts(cddm); >> mv = ov + dm->numVertData; >> for (i=0; i<dm->numVertData; i++, mv++, ov++) { >> mul_m4_v3(mtx, mv->co); >> - /*compare location of the original and mirrored vertex, to >> see if they >> - should be mapped for merging*/ >> - if (len_squared_v3v3(ov->co, mv->co)< tolerance_sq) { >> - BLI_array_append(vtargetmap, i+dm->numVertData); >> + >> + if (do_vtargetmap) { >> + /* compare location of the original and mirrored >> vertex, to see if they >> + * should be mapped for merging */ >> + *vtmap_a = (len_squared_v3v3(ov->co, mv->co)< >> tolerance_sq) ? dm->numVertData + i : -1; >> + *vtmap_b = -1; /* fill here to avoid 2x loops */ >> + >> + vtmap_a++; >> + vtmap_b++; >> } >> - else { >> - BLI_array_append(vtargetmap, -1); >> - } >> } >> >> /*handle shape keys*/ >> @@ -191,10 +186,6 @@ >> } >> } >> >> - for (i=0; i<dm->numVertData; i++) { >> - BLI_array_append(vtargetmap, -1); >> - } >> - >> /*adjust mirrored edge vertex indices*/ >> me = CDDM_get_edges(cddm) + dm->numEdgeData; >> for (i=0; i<dm->numEdgeData; i++, me++) { >> @@ -250,8 +241,6 @@ >> } >> } >> >> - CDDM_recalc_tesselation(cddm); >> - >> /*handle vgroup stuff*/ >> if ((mmd->flag& MOD_MIR_VGROUP)&& >> CustomData_has_layer(&cddm->vertData, CD_MDEFORMVERT)) { >> MDeformVert *dvert = CustomData_get_layer(&cddm->vertData, >> CD_MDEFORMVERT); >> @@ -259,18 +248,19 @@ >> >> flip_map= defgroup_flip_map(ob,&flip_map_len, FALSE); >> >> - for (i=0; i<dm->numVertData; i++, dvert++) { >> + for (i = dm->numVertData; i--> 0; dvert++) { >> defvert_flip(dvert, flip_map, flip_map_len); >> } >> } >> - >> - if (!(mmd->flag& MOD_MIR_NO_MERGE)) >> + >> + if (do_vtargetmap) { >> + /* this calls CDDM_recalc_tesselation, so dont do twice */ >> cddm = CDDM_merge_verts(cddm, vtargetmap); >> + MEM_freeN(vtargetmap); >> + } >> + >> + CDDM_recalc_tesselation(cddm); >> >> - BLI_array_free(vtargetmap); >> - >> - if (vector_def) MEM_freeN(vector_def); >> - >> if (dm != origdm) { >> dm->needsFree = 1; >> dm->release(dm); >> >> _______________________________________________ >> Bf-blender-cvs mailing list >> bf-blender-...@blender.org >> http://lists.blender.org/mailman/listinfo/bf-blender-cvs >> > _______________________________________________ > Bf-committers mailing list > Bf-committers@blender.org > http://lists.blender.org/mailman/listinfo/bf-committers > _______________________________________________ Bf-committers mailing list Bf-committers@blender.org http://lists.blender.org/mailman/listinfo/bf-committers