diff options
author | Campbell Barton <ideasman42@gmail.com> | 2008-07-14 17:39:48 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2008-07-14 17:39:48 +0400 |
commit | a1fea54c185527a13aad3c3e5da81786fae3e13d (patch) | |
tree | 06cf1d93307e649b8bb7b927fe5cb208b8fc82c4 /source/blender/src | |
parent | 00c4265bda4eda13ae52c6b2082edf69239aab9f (diff) |
svn merge -r15560:HEAD https://svn.blender.org/svnroot/bf-blender/trunk/blender
Also topology mirror crashed when using smooth + mirror. use eve->hash rather them eve->tmp.l for storing edit vert indices's.
Diffstat (limited to 'source/blender/src')
-rw-r--r-- | source/blender/src/editmesh_mods.c | 12 | ||||
-rw-r--r-- | source/blender/src/meshtools.c | 24 | ||||
-rw-r--r-- | source/blender/src/transform_conversions.c | 2 |
3 files changed, 21 insertions, 17 deletions
diff --git a/source/blender/src/editmesh_mods.c b/source/blender/src/editmesh_mods.c index e4a7bc6da13..0ebbaf18aee 100644 --- a/source/blender/src/editmesh_mods.c +++ b/source/blender/src/editmesh_mods.c @@ -117,10 +117,10 @@ void EM_select_mirrored(void) if(G.scene->selectmode & SCE_SELECT_VERTEX) { EditMesh *em = G.editMesh; EditVert *eve, *v1; - - for(eve= em->verts.first; eve; eve= eve->next) { + int a; + for(eve= em->verts.first, a=0; eve; eve= eve->next, a++) { if(eve->f & SELECT) { - v1= editmesh_get_x_mirror_vert(G.obedit, eve); + v1= editmesh_get_x_mirror_vert(G.obedit, eve, a); if(v1) { eve->f &= ~SELECT; v1->f |= SELECT; @@ -4168,7 +4168,7 @@ void vertexsmooth(void) EditEdge *eed; float *adror, *adr, fac; float fvec[3]; - int teller=0; + int teller=0, a; ModifierData *md= G.obedit->modifiers.first; if(G.obedit==0) return; @@ -4243,13 +4243,14 @@ void vertexsmooth(void) eed= eed->next; } + a = 0; eve= em->verts.first; while(eve) { if(eve->f & SELECT) { if(eve->f1) { if (G.scene->toolsettings->editbutflag & B_MESH_X_MIRROR) { - eve_mir= editmesh_get_x_mirror_vert(G.obedit, eve); + eve_mir= editmesh_get_x_mirror_vert(G.obedit, eve, a); } adr = eve->tmp.p; @@ -4283,6 +4284,7 @@ void vertexsmooth(void) eve->tmp.p= NULL; } eve= eve->next; + a++; } MEM_freeN(adror); diff --git a/source/blender/src/meshtools.c b/source/blender/src/meshtools.c index 9c002f1f7fb..12fc3c15625 100644 --- a/source/blender/src/meshtools.c +++ b/source/blender/src/meshtools.c @@ -899,7 +899,7 @@ long mesh_mirrtopo_table(Object *ob, char mode) EditVert *eve; totvert= 0; for(eve= G.editMesh->verts.first; eve; eve= eve->next) { - eve->tmp.l = totvert++; + eve->hash = totvert++; } } else { totvert = me->totvert; @@ -910,8 +910,8 @@ long mesh_mirrtopo_table(Object *ob, char mode) /* Initialize the vert-edge-user counts used to detect unique topology */ if(ob==G.obedit) { for(eed=G.editMesh->edges.first; eed; eed= eed->next) { - MirrTopoHash[eed->v1->tmp.l]++; - MirrTopoHash[eed->v2->tmp.l]++; + MirrTopoHash[eed->v1->hash]++; + MirrTopoHash[eed->v2->hash]++; } } else { for(a=0, medge=me->medge; a<me->totedge; a++, medge++) { @@ -928,8 +928,8 @@ long mesh_mirrtopo_table(Object *ob, char mode) if(ob==G.obedit) { for(eed=G.editMesh->edges.first; eed; eed= eed->next) { - MirrTopoHash[eed->v1->tmp.l] += MirrTopoHash_Prev[eed->v2->tmp.l]; - MirrTopoHash[eed->v2->tmp.l] += MirrTopoHash_Prev[eed->v1->tmp.l]; + MirrTopoHash[eed->v1->hash] += MirrTopoHash_Prev[eed->v2->hash]; + MirrTopoHash[eed->v2->hash] += MirrTopoHash_Prev[eed->v1->hash]; } } else { for(a=0, medge=me->medge; a<me->totedge; a++, medge++) { @@ -1086,14 +1086,16 @@ static EditVert *editmesh_get_x_mirror_vert_spacial(Object *ob, float *co) return NULL; } -static EditVert *editmesh_get_x_mirror_vert_topo(Object *ob, EditVert *eve) +static EditVert *editmesh_get_x_mirror_vert_topo(Object *ob, EditVert *eve, int index) { long poinval; - int index; if (mesh_mirrtopo_table(ob, 'u')==-1) return NULL; - index = BLI_findindex(&G.editMesh->verts, eve); + if (index!=-1) { + index = BLI_findindex(&G.editMesh->verts, eve); + } + if (index==-1) return NULL; @@ -1104,12 +1106,12 @@ static EditVert *editmesh_get_x_mirror_vert_topo(Object *ob, EditVert *eve) return NULL; } -EditVert *editmesh_get_x_mirror_vert(Object *ob, EditVert *eve) +EditVert *editmesh_get_x_mirror_vert(Object *ob, EditVert *eve, int index) { if (G.scene->toolsettings->editbutflag & B_MIRROR_TOPO) { - return editmesh_get_x_mirror_vert_topo(ob, eve); + return editmesh_get_x_mirror_vert_topo(ob, eve, index); } else { - return editmesh_get_x_mirror_vert_spacial(ob, eve); + return editmesh_get_x_mirror_vert_spacial(ob, eve->co); } } diff --git a/source/blender/src/transform_conversions.c b/source/blender/src/transform_conversions.c index a9cdd95a699..31a59601448 100644 --- a/source/blender/src/transform_conversions.c +++ b/source/blender/src/transform_conversions.c @@ -2168,7 +2168,7 @@ static void createTransEditVerts(TransInfo *t) /* Mirror? */ if( (mirror>0 && tob->iloc[0]>0.0f) || (mirror<0 && tob->iloc[0]<0.0f)) { - EditVert *vmir= editmesh_get_x_mirror_vert(G.obedit, eve); /* initializes octree on first call */ + EditVert *vmir= editmesh_get_x_mirror_vert(G.obedit, eve, a); /* initializes octree on first call */ if(vmir != eve) tob->tdmir = vmir; } tob++; |