diff options
Diffstat (limited to 'source/blender/src/editmesh_tools.c')
-rw-r--r-- | source/blender/src/editmesh_tools.c | 174 |
1 files changed, 98 insertions, 76 deletions
diff --git a/source/blender/src/editmesh_tools.c b/source/blender/src/editmesh_tools.c index 613ee79340c..ffb10a215ab 100644 --- a/source/blender/src/editmesh_tools.c +++ b/source/blender/src/editmesh_tools.c @@ -259,7 +259,7 @@ int removedoublesflag(short flag, float limit) /* return amount */ dist= (float)fabs(v1->co[2]-eve->co[2]); if(dist<=limit) { v1->f|= 128; - v1->vn= eve; + v1->tmp.v = eve; } } } @@ -285,8 +285,8 @@ int removedoublesflag(short flag, float limit) /* return amount */ if( (eed->v1->f & 128) || (eed->v2->f & 128) ) { remedge(eed); - if(eed->v1->f & 128) eed->v1= eed->v1->vn; - if(eed->v2->f & 128) eed->v2= eed->v2->vn; + if(eed->v1->f & 128) eed->v1 = eed->v1->tmp.v; + if(eed->v2->f & 128) eed->v2 = eed->v2->tmp.v; e1= addedgelist(eed->v1, eed->v2, eed); if(e1) e1->f2= 1; @@ -316,10 +316,10 @@ int removedoublesflag(short flag, float limit) /* return amount */ nextvl= efa->next; if(efa->f1==1) { - if(efa->v1->f & 128) efa->v1= efa->v1->vn; - if(efa->v2->f & 128) efa->v2= efa->v2->vn; - if(efa->v3->f & 128) efa->v3= efa->v3->vn; - if(efa->v4 && (efa->v4->f & 128)) efa->v4= efa->v4->vn; + if(efa->v1->f & 128) efa->v1= efa->v1->tmp.v; + if(efa->v2->f & 128) efa->v2= efa->v2->tmp.v; + if(efa->v3->f & 128) efa->v3= efa->v3->tmp.v; + if(efa->v4 && (efa->v4->f & 128)) efa->v4= efa->v4->tmp.v; test= 0; if(efa->v1==efa->v2) test+=1; @@ -1061,8 +1061,8 @@ void fill_mesh(void) while(eve) { if(eve->f & SELECT) { v1= BLI_addfillvert(eve->co); - eve->vn= v1; - v1->vn= eve; + eve->tmp.v= v1; + v1->tmp.v= eve; v1->xs= 0; // used for counting edges } eve= eve->next; @@ -1071,7 +1071,7 @@ void fill_mesh(void) eed= em->edges.first; while(eed) { if( (eed->v1->f & SELECT) && (eed->v2->f & SELECT) ) { - e1= BLI_addfilledge(eed->v1->vn, eed->v2->vn); + e1= BLI_addfilledge(eed->v1->tmp.v, eed->v2->tmp.v); e1->v1->xs++; e1->v2->xs++; } @@ -1085,10 +1085,10 @@ void fill_mesh(void) while(efa) { nextvl= efa->next; if( faceselectedAND(efa, 1) ) { - efa->v1->vn->xs--; - efa->v2->vn->xs--; - efa->v3->vn->xs--; - if(efa->v4) efa->v4->vn->xs--; + efa->v1->tmp.v->xs--; + efa->v2->tmp.v->xs--; + efa->v3->tmp.v->xs--; + if(efa->v4) efa->v4->tmp.v->xs--; ok= 1; } @@ -1108,7 +1108,9 @@ void fill_mesh(void) if(BLI_edgefill(0, (G.obedit && G.obedit->actcol)?(G.obedit->actcol-1):0)) { efa= fillfacebase.first; while(efa) { - efan= addfacelist(efa->v3->vn, efa->v2->vn, efa->v1->vn, 0, NULL, NULL); // normals default pointing up + /* normals default pointing up */ + efan= addfacelist(efa->v3->tmp.v, efa->v2->tmp.v, + efa->v1->tmp.v, 0, NULL, NULL); EM_select_face(efan, 1); efa= efa->next; } @@ -2626,7 +2628,7 @@ static int count_selected_edges(EditEdge *ed) { int totedge = 0; while(ed) { - ed->vn= 0; + ed->tmp.p = 0; if( ed->f & SELECT ) totedge++; ed= ed->next; } @@ -2653,10 +2655,10 @@ static int collect_quadedges(EVPTuple *efaa, EditEdge *eed, EditFace *efa) eed->f2= 0; eed->f1= 0; if( eed->f & SELECT ) { - eed->vn= (EditVert *) (&efaa[i]); + eed->tmp.p = (EditVert *) (&efaa[i]); i++; } - else eed->vn= NULL; + else eed->tmp.p = NULL; eed= eed->next; } @@ -2676,23 +2678,23 @@ static int collect_quadedges(EVPTuple *efaa, EditEdge *eed, EditFace *efa) e1= efa->e1; e2= efa->e2; e3= efa->e3; - if(e1->f2<3 && e1->vn) { + if(e1->f2<3 && e1->tmp.p) { if(e1->f2<2) { - evp= (EVPtr *) e1->vn; - evp[(int)e1->f2]= efa; + evp= (EVPtr *) e1->tmp.p; + evp[(int)e1->f2] = efa; } e1->f2+= 1; } - if(e2->f2<3 && e2->vn) { + if(e2->f2<3 && e2->tmp.p) { if(e2->f2<2) { - evp= (EVPtr *) e2->vn; + evp= (EVPtr *) e2->tmp.p; evp[(int)e2->f2]= efa; } e2->f2+= 1; } - if(e3->f2<3 && e3->vn) { + if(e3->f2<3 && e3->tmp.p) { if(e3->f2<2) { - evp= (EVPtr *) e3->vn; + evp= (EVPtr *) e3->tmp.p; evp[(int)e3->f2]= efa; } e3->f2+= 1; @@ -2904,7 +2906,7 @@ void beauty_fill(void) /* f2 is set in collect_quadedges() */ if(eed->f2==2 && eed->h==0) { - efaa = (EVPtr *) eed->vn; + efaa = (EVPtr *) eed->tmp.p; /* none of the faces should be treated before, nor be part of fgon */ ok= 1; @@ -3076,7 +3078,7 @@ void join_triangles(void) if(eed->f2==2) { /* points to 2 faces */ - efaa= (EVPtr *) eed->vn; + efaa= (EVPtr *) eed->tmp.p; /* don't do it if flagged */ @@ -3173,7 +3175,7 @@ void edge_flip(void) if(eed->f2==2) { /* points to 2 faces */ - efaa= (EVPtr *) eed->vn; + efaa= (EVPtr *) eed->tmp.p; /* don't do it if flagged */ @@ -4041,7 +4043,7 @@ static void bevel_mesh(float bsize, int allfaces) efa->f1-= 1; v1= addvertlist(efa->v1->co); v1->f= efa->v1->f & ~128; - efa->v1->vn= v1; + efa->v1->tmp.v = v1; #ifdef __NLA v1->totweight = efa->v1->totweight; if (efa->v1->totweight) { @@ -4053,7 +4055,7 @@ static void bevel_mesh(float bsize, int allfaces) #endif v1= addvertlist(efa->v2->co); v1->f= efa->v2->f & ~128; - efa->v2->vn= v1; + efa->v2->tmp.v = v1; #ifdef __NLA v1->totweight = efa->v2->totweight; if (efa->v2->totweight) { @@ -4065,7 +4067,7 @@ static void bevel_mesh(float bsize, int allfaces) #endif v1= addvertlist(efa->v3->co); v1->f= efa->v3->f & ~128; - efa->v3->vn= v1; + efa->v3->tmp.v = v1; #ifdef __NLA v1->totweight = efa->v3->totweight; if (efa->v3->totweight) { @@ -4078,7 +4080,7 @@ static void bevel_mesh(float bsize, int allfaces) if (efa->v4) { v1= addvertlist(efa->v4->co); v1->f= efa->v4->f & ~128; - efa->v4->vn= v1; + efa->v4->tmp.v = v1; #ifdef __NLA v1->totweight = efa->v4->totweight; if (efa->v4->totweight) { @@ -4091,21 +4093,29 @@ static void bevel_mesh(float bsize, int allfaces) } /* Needs better adaption of creases? */ - addedgelist(efa->e1->v1->vn, efa->e1->v2->vn, efa->e1); - addedgelist(efa->e2->v1->vn,efa->e2->v2->vn, efa->e2); - addedgelist(efa->e3->v1->vn,efa->e3->v2->vn, efa->e3); - if (efa->e4) addedgelist(efa->e4->v1->vn,efa->e4->v2->vn, efa->e4); + addedgelist(efa->e1->v1->tmp.v, + efa->e1->v2->tmp.v, + efa->e1); + addedgelist(efa->e2->v1->tmp.v, + efa->e2->v2->tmp.v, + efa->e2); + addedgelist(efa->e3->v1->tmp.v, + efa->e3->v2->tmp.v, + efa->e3); + if (efa->e4) addedgelist(efa->e4->v1->tmp.v, + efa->e4->v2->tmp.v, + efa->e4); if(efa->v4) { - v1= efa->v1->vn; - v2= efa->v2->vn; - v3= efa->v3->vn; - v4= efa->v4->vn; + v1 = efa->v1->tmp.v; + v2 = efa->v2->tmp.v; + v3 = efa->v3->tmp.v; + v4 = efa->v4->tmp.v; addfacelist(v1, v2, v3, v4, efa,NULL); } else { - v1= efa->v1->vn; - v2= efa->v2->vn; - v3= efa->v3->vn; + v1= efa->v1->tmp.v; + v2= efa->v2->tmp.v; + v3= efa->v3->tmp.v; addfacelist(v1, v2, v3, 0, efa,NULL); } @@ -4141,8 +4151,9 @@ static void bevel_mesh(float bsize, int allfaces) eed= em->edges.first; while(eed) { eed->f2= eed->f1= 0; - if ( ((eed->v1->f & eed->v2->f) & 1) || allfaces) eed->f1 |= 4; /* original edges */ - eed->vn= 0; + if ( ((eed->v1->f & eed->v2->f) & 1) || allfaces) + eed->f1 |= 4; /* original edges */ + eed->tmp.v = 0; eed= eed->next; } @@ -4220,7 +4231,7 @@ static void bevel_mesh(float bsize, int allfaces) eed->f1= 0; eed->v1->f1 &= ~1; eed->v2->f1 &= ~1; - eed->vn= 0; + eed->tmp.v = 0; eed= eed->next; } @@ -4233,11 +4244,11 @@ static void bevel_mesh(float bsize, int allfaces) eve= em->verts.first; while (eve) { eve->f &= ~(64|128); - eve->vn= NULL; + eve->tmp.v = NULL; eve= eve->next; } - /* eve->f: 128: first vertex in a list (->vn) */ + /* eve->f: 128: first vertex in a list (->tmp.v) */ /* 64: vertex is in a list */ eve= em->verts.first; @@ -4250,11 +4261,11 @@ static void bevel_mesh(float bsize, int allfaces) if ((eve->f & (128|64)) == 0) { /* fprintf(stderr,"Found vertex cluster:\n *\n *\n"); */ eve->f |= 128; - eve->vn= eve2; + eve->tmp.v = eve2; eve3= eve2; } else if ((eve->f & 64) == 0) { /* fprintf(stderr," *\n"); */ - if (eve3) eve3->vn= eve2; + if (eve3) eve3->tmp.v = eve2; eve2->f |= 64; eve3= eve2; } @@ -4262,7 +4273,7 @@ static void bevel_mesh(float bsize, int allfaces) } eve2= eve2->next; if (!eve2) { - if (eve3) eve3->vn= NULL; + if (eve3) eve3->tmp.v = NULL; } } eve= eve->next; @@ -4292,11 +4303,11 @@ static void bevel_mesh(float bsize, int allfaces) eve->f &= ~128; a= 0; neweve[a]= eve; - eve2= eve->vn; + eve2 = eve->tmp.v; while (eve2) { a++; neweve[a]= eve2; - eve2= eve2->vn; + eve2 = eve2->tmp.v; } a++; efa= NULL; @@ -4379,7 +4390,7 @@ static void bevel_mesh(float bsize, int allfaces) while (eve) { eve->f1= 0; eve->f &= ~(128|64); - eve->vn= NULL; + eve->tmp.v= NULL; eve= eve->next; } @@ -5144,10 +5155,10 @@ static float mesh_rip_edgedist(float mat[][4], float *co1, float *co2, short *mv static void mesh_rip_setface(EditFace *sefa) { /* put new vertices & edges in best face */ - if(sefa->v1->vn) sefa->v1= sefa->v1->vn; - if(sefa->v2->vn) sefa->v2= sefa->v2->vn; - if(sefa->v3->vn) sefa->v3= sefa->v3->vn; - if(sefa->v4 && sefa->v4->vn) sefa->v4= sefa->v4->vn; + if(sefa->v1->tmp.v) sefa->v1= sefa->v1->tmp.v; + if(sefa->v2->tmp.v) sefa->v2= sefa->v2->tmp.v; + if(sefa->v3->tmp.v) sefa->v3= sefa->v3->tmp.v; + if(sefa->v4 && sefa->v4->tmp.v) sefa->v4= sefa->v4->tmp.v; sefa->e1= addedgelist(sefa->v1, sefa->v2, sefa->e1); sefa->e2= addedgelist(sefa->v2, sefa->v3, sefa->e2); @@ -5213,11 +5224,11 @@ void mesh_rip(void) /* duplicate vertices, new vertices get selected */ for(eve = em->verts.last; eve; eve= eve->prev) { - eve->vn= NULL; + eve->tmp.v = NULL; if(eve->f & SELECT) { - eve->vn= addvertlist(eve->co); + eve->tmp.v = addvertlist(eve->co); eve->f &= ~SELECT; - eve->vn->f |= SELECT; + eve->tmp.v->f |= SELECT; } } @@ -5231,29 +5242,37 @@ void mesh_rip(void) /* or we do the distance trick */ if(seed==NULL) { mindist= 1000000.0f; - if(sefa->e1->v1->vn || sefa->e1->v2->vn) { - dist= mesh_rip_edgedist(projectMat, sefa->e1->v1->co, sefa->e1->v2->co, mval); + if(sefa->e1->v1->tmp.v || sefa->e1->v2->tmp.v) { + dist = mesh_rip_edgedist(projectMat, + sefa->e1->v1->co, + sefa->e1->v2->co, mval); if(dist<mindist) { seed= sefa->e1; mindist= dist; } } - if(sefa->e2->v1->vn || sefa->e2->v2->vn) { - dist= mesh_rip_edgedist(projectMat, sefa->e2->v1->co, sefa->e2->v2->co, mval); + if(sefa->e2->v1->tmp.v || sefa->e2->v2->tmp.v) { + dist = mesh_rip_edgedist(projectMat, + sefa->e2->v1->co, + sefa->e2->v2->co, mval); if(dist<mindist) { seed= sefa->e2; mindist= dist; } } - if(sefa->e3->v1->vn || sefa->e3->v2->vn) { - dist= mesh_rip_edgedist(projectMat, sefa->e3->v1->co, sefa->e3->v2->co, mval); + if(sefa->e3->v1->tmp.v || sefa->e3->v2->tmp.v) { + dist= mesh_rip_edgedist(projectMat, + sefa->e3->v1->co, + sefa->e3->v2->co, mval); if(dist<mindist) { seed= sefa->e3; mindist= dist; } } - if(sefa->e4 && (sefa->e4->v1->vn || sefa->e4->v2->vn)) { - dist= mesh_rip_edgedist(projectMat, sefa->e4->v1->co, sefa->e4->v2->co, mval); + if(sefa->e4 && (sefa->e4->v1->tmp.v || sefa->e4->v2->tmp.v)) { + dist= mesh_rip_edgedist(projectMat, + sefa->e4->v1->co, + sefa->e4->v2->co, mval); if(dist<mindist) { seed= sefa->e4; mindist= dist; @@ -5270,16 +5289,17 @@ void mesh_rip(void) /* duplicate edges in the loop, with at least 1 vertex selected, needed for selection flip */ for(eed = em->edges.last; eed; eed= eed->prev) { - eed->vn= NULL; - if((eed->v1->vn) || (eed->v2->vn)) { + eed->tmp.v = NULL; + if((eed->v1->tmp.v) || (eed->v2->tmp.v)) { EditEdge *newed; - newed= addedgelist(eed->v1->vn?eed->v1->vn:eed->v1, eed->v2->vn?eed->v2->vn:eed->v2, eed); + newed= addedgelist(eed->v1->tmp.v?eed->v1->tmp.v:eed->v1, + eed->v2->tmp.v?eed->v2->tmp.v:eed->v2, eed); if(eed->f & SELECT) { eed->f &= ~SELECT; newed->f |= SELECT; } - eed->vn= (EditVert *)newed; + eed->tmp.v = (EditVert *)newed; } } @@ -5297,7 +5317,8 @@ void mesh_rip(void) for(efa= em->faces.first; efa; efa=efa->next) { /* new vert in face */ - if(efa->v1->vn || efa->v2->vn || efa->v3->vn || (efa->v4 && efa->v4->vn)) { + if (efa->v1->tmp.v || efa->v2->tmp.v || + efa->v3->tmp.v || (efa->v4 && efa->v4->tmp.v)) { /* face is tagged with loop */ if(efa->f1==1) { mesh_rip_setface(efa); @@ -5321,7 +5342,8 @@ void mesh_rip(void) for(eed = em->edges.last; eed; eed= seed) { seed= eed->prev; if(eed->f1==0) { - if(eed->v1->vn || eed->v2->vn || (eed->v1->f & SELECT) || (eed->v2->f & SELECT)) { + if(eed->v1->tmp.v || eed->v2->tmp.v || + (eed->v1->f & SELECT) || (eed->v2->f & SELECT)) { remedge(eed); free_editedge(eed); eed= NULL; @@ -5336,7 +5358,7 @@ void mesh_rip(void) /* and remove loose selected vertices, that got duplicated accidentally */ for(eve = em->verts.first; eve; eve= nextve) { nextve= eve->next; - if(eve->f1==0 && (eve->vn || (eve->f & SELECT))) { + if(eve->f1==0 && (eve->tmp.v || (eve->f & SELECT))) { BLI_remlink(&em->verts,eve); free_editvert(eve); } |