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:
authorGeoffrey Bantle <hairbat@yahoo.com>2006-10-18 10:06:15 +0400
committerGeoffrey Bantle <hairbat@yahoo.com>2006-10-18 10:06:15 +0400
commite259923340c932c1507da92aadd510b8844d0beb (patch)
tree5157e692857533c87d7b52e2c928c0288f2c87dd
parent88446eeca4b6f9d31928a538e3a39d04f1d06976 (diff)
-> Triangle to Quad bugfix
Last minute bugfixing for last commit introduced a brand new bug causing Crashes, whoops! Fixed now.
-rw-r--r--source/blender/src/editmesh_tools.c57
1 files changed, 26 insertions, 31 deletions
diff --git a/source/blender/src/editmesh_tools.c b/source/blender/src/editmesh_tools.c
index dac812e5c77..254e240b44e 100644
--- a/source/blender/src/editmesh_tools.c
+++ b/source/blender/src/editmesh_tools.c
@@ -3363,8 +3363,8 @@ void beauty_fill(void)
/* ******************** BEGIN TRIANGLE TO QUAD ************************************* */
/*move these macros to a header file along with notes on how they should be used*/
-#define FILL_FACEVERTS(face, arr) { arr[0] = face->v1; arr[1] = face->v2; arr[2] = face->v3; arr[3] = face->v4; arr[4] = NULL;}
-#define FILL_FACEEDGES(face, arr) { arr[0] = face->e1; arr[1] = face->e2; arr[2] = face->e3; arr[3] = face->e4; arr[4] = NULL;}
+#define FILL_FACEVERTS(face, arr) { if(face){ arr[0] = face->v1; arr[1] = face->v2; arr[2] = face->v3; arr[3] = face->v4; arr[4] = NULL;}}
+#define FILL_FACEEDGES(face, arr) { if(face){arr[0] = face->e1; arr[1] = face->e2; arr[2] = face->e3; arr[3] = face->e4; arr[4] = NULL;}}
typedef struct FacePairL{
EditFace *face1, *face2;
@@ -3398,7 +3398,7 @@ static float isfaceCoLin(float fake[4][3]){
fabs(VecAngle2(edgeVec2, edgeVec3) - 90) +
fabs(VecAngle2(edgeVec3, edgeVec4) - 90) +
fabs(VecAngle2(edgeVec4, edgeVec1) - 90)) / 360;
- if(!diff) return 0.0; //what? this makes no sense
+ if(!diff) return 0.0;
return diff;
}
@@ -3413,7 +3413,7 @@ static float isfaceNoDiff(float fake[4][3])
if(noA1[0] == noA2[0] && noA1[1] == noA2[1] && noA1[2] == noA2[2]) normalADiff = 0.0;
else{
normalADiff = VecAngle2(noA1, noA2);
- //if(!normalADiff) normalADiff = 179; not sure about this bit
+ //if(!normalADiff) normalADiff = 179;
}
CalcNormFloat(fake[1], fake[2], fake[3], noB1);
@@ -3422,7 +3422,7 @@ static float isfaceNoDiff(float fake[4][3])
if(noB1[0] == noB2[0] && noB1[1] == noB2[1] && noB1[2] == noB2[2]) normalBDiff = 0.0;
else{
normalBDiff = VecAngle2(noB1, noB2);
- //if(!normalBDiff) normalBDiff = 179; not sure about this bit
+ //if(!normalBDiff) normalBDiff = 179;
}
return (normalADiff/360) + (normalBDiff/360);
}
@@ -3588,14 +3588,11 @@ static void meshJoinFaces(EditEdge *joined)
EditVert *v1free, *v2free;
int i;
-
face1 = fpl->face1;
face2 = fpl->face2;
v1free = fpl->f1free;
v2free = fpl->f2free;
-
-
face1->v1->f1 = 0;
face1->v2->f1 = 1;
face1->v3->f1 = 2;
@@ -3604,8 +3601,7 @@ static void meshJoinFaces(EditEdge *joined)
face2->v2->f1 = 1;
face2->v3->f1 = 2;
-
- switch(v1free->f1){
+switch(v1free->f1){
case 0:
i = 2;
break;
@@ -3794,30 +3790,29 @@ void join_triangles(void)
f1free = ((FacePairL*)(eed->tmp.p))->f1free;
f2 = ((FacePairL*)(eed->tmp.p))->face2;
f2free = ((FacePairL*)(eed->tmp.p))->f2free;
-
- /*test for two editfaces with same vertices but different order. Should never happen but does sometimes!*/
- FILL_FACEVERTS(f1,faceVerts1);
- FILL_FACEVERTS(f2,faceVerts2);
- faceVert1 = faceVerts1;
- i = 0;
- while(*faceVert1){
- match = 0;
- faceVert2 = faceVerts2;
- while(*faceVert2){
- if(*faceVert2 == *faceVert1){
- match = 1;
- break;
+ if(f1 && f2){
+ /*test for two editfaces with same vertices but different order. Should never happen but does sometimes!*/
+ FILL_FACEVERTS(f1,faceVerts1);
+ FILL_FACEVERTS(f2,faceVerts2);
+ faceVert1 = faceVerts1;
+ i = 0;
+ while(*faceVert1){
+ match = 0;
+ faceVert2 = faceVerts2;
+ while(*faceVert2){
+ if(*faceVert2 == *faceVert1){
+ match = 1;
+ break;
+ }
+ else faceVert2++;
}
- else faceVert2++;
- }
- matchar[i] = match;
- faceVert1++;
- i++;
- }
+ matchar[i] = match;
+ faceVert1++;
+ i++;
+ }
- if(!(matchar[0] == 1 && matchar[1] == 1 && matchar[2] == 1)){
- if(f1 && f2){
+ if(!(matchar[0] == 1 && matchar[1] == 1 && matchar[2] == 1)){
/*do tests to disqualify potential face pairs from the sort.*/
if(f1->mat_nr != f2->mat_nr); /*do nothing*/
else if(eed->sharp); /*do nothing*/