Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/src/editmesh_tools.c')
-rw-r--r--source/blender/src/editmesh_tools.c174
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);
}