[Bf-committers] what's wrong with my edgecollapse program
xiang liang
xlvector at gmail.com
Sat Mar 25 02:54:19 CET 2006
I use EditMesh structure write a edge collapse function, but I am not
very familiar with this structure. the algorithm is very simple, can
someone help me.
int XL_collapseEdges(EditEdge *eed)
{
extern float doublimit;
EditEdge *ee;
EditFace *ef;
int i;
float avgCount[3];
if(eed==NULL) return 0;
avgCount[0] = (eed->v1->co[0] + eed->v2->co[0])/2.0;
avgCount[1] = (eed->v1->co[1] + eed->v2->co[1])/2.0;
avgCount[2] = (eed->v1->co[2] + eed->v2->co[2])/2.0;
VECCOPY(eed->v1->co,avgCount);
for(ee=G.editMesh->edges.first;ee;ee=ee->next)
{
if(ee == eed) continue;
if(ee->v1 == eed->v2){
ee->v1 = eed->v1;
}
if(ee->v2 == eed->v2){
ee->v2 = eed->v1;
}
}
for(ef=G.editMesh->faces.first;ef;ef=ef->next)
{
if(ef->v1 == eed->v2){
ef->v1 = eed->v1;
}
if(ef->v2 == eed->v2){
ef->v2 = eed->v1;
}
if(ef->v3 == eed->v2){
ef->v3 = eed->v1;
}
if(ef->e1 == eed || ef->e2 == eed || ef->e3 == eed){
if(ef==G.editMesh->faces.first){
printf("first face\n");
G.editMesh->faces.first = ef->next;
}
else{
ef->prev->next = ef->next;
}
//MEM_freeN(ef);
}
}
VECCOPY(eed->v2->co,avgCount);
if(eed->v2 == G.editMesh->verts.first){
printf("first vertex\n");
G.editMesh->verts.first = eed->v2->next;
}
else{
eed->v2->prev->next = eed->v2->next;
}
if(eed == G.editMesh->edges.first){
printf("first edge\n");
G.editMesh->edges.first = eed->next;
}
else{
eed->prev->next = eed->next;
}
return 2;
}
More information about the Bf-committers
mailing list