From ec2cbb268906faf81c4808ede188d9ecf9bf4129 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Fri, 13 May 2005 14:10:34 +0000 Subject: [PATCH] Bug fix: Beauty Fill crashed on non-regular geometry. Pointers NULL... Also: fixed tooltips for icon buttons for Transform Widgets --- source/blender/src/editmesh_tools.c | 146 ++++++++++++++-------------- source/blender/src/header_view3d.c | 8 +- 2 files changed, 78 insertions(+), 76 deletions(-) diff --git a/source/blender/src/editmesh_tools.c b/source/blender/src/editmesh_tools.c index db3cfc5c255..4228b9681aa 100644 --- a/source/blender/src/editmesh_tools.c +++ b/source/blender/src/editmesh_tools.c @@ -2256,98 +2256,100 @@ void beauty_fill(void) if(ok) { /* test convex */ givequadverts(efaa[0], efaa[1], &v1, &v2, &v3, &v4, uv, col); - if( convex(v1->co, v2->co, v3->co, v4->co) ) { + if(v1 && v2 && v3 && v4) { + if( convex(v1->co, v2->co, v3->co, v4->co) ) { - /* test edges */ - if( ((long)v1) > ((long)v3) ) { - dia1.v1= v3; - dia1.v2= v1; - } - else { - dia1.v1= v1; - dia1.v2= v3; - } + /* test edges */ + if( ((long)v1) > ((long)v3) ) { + dia1.v1= v3; + dia1.v2= v1; + } + else { + dia1.v1= v1; + dia1.v2= v3; + } - if( ((long)v2) > ((long)v4) ) { - dia2.v1= v4; - dia2.v2= v2; - } - else { - dia2.v1= v2; - dia2.v2= v4; - } + if( ((long)v2) > ((long)v4) ) { + dia2.v1= v4; + dia2.v2= v2; + } + else { + dia2.v1= v2; + dia2.v2= v4; + } - /* testing rule: - * the area divided by the total edge lengths - */ + /* testing rule: + * the area divided by the total edge lengths + */ - len1= VecLenf(v1->co, v2->co); - len2= VecLenf(v2->co, v3->co); - len3= VecLenf(v3->co, v4->co); - len4= VecLenf(v4->co, v1->co); - len5= VecLenf(v1->co, v3->co); - len6= VecLenf(v2->co, v4->co); + len1= VecLenf(v1->co, v2->co); + len2= VecLenf(v2->co, v3->co); + len3= VecLenf(v3->co, v4->co); + len4= VecLenf(v4->co, v1->co); + len5= VecLenf(v1->co, v3->co); + len6= VecLenf(v2->co, v4->co); - opp1= AreaT3Dfl(v1->co, v2->co, v3->co); - opp2= AreaT3Dfl(v1->co, v3->co, v4->co); + opp1= AreaT3Dfl(v1->co, v2->co, v3->co); + opp2= AreaT3Dfl(v1->co, v3->co, v4->co); - fac1= opp1/(len1+len2+len5) + opp2/(len3+len4+len5); + fac1= opp1/(len1+len2+len5) + opp2/(len3+len4+len5); - opp1= AreaT3Dfl(v2->co, v3->co, v4->co); - opp2= AreaT3Dfl(v2->co, v4->co, v1->co); + opp1= AreaT3Dfl(v2->co, v3->co, v4->co); + opp2= AreaT3Dfl(v2->co, v4->co, v1->co); - fac2= opp1/(len2+len3+len6) + opp2/(len4+len1+len6); + fac2= opp1/(len2+len3+len6) + opp2/(len4+len1+len6); - ok= 0; - if(fac1 > fac2) { - if(dia2.v1==eed->v1 && dia2.v2==eed->v2) { - eed->f1= 1; - efa= efaa[0]; - efa->f1= 1; - efa= efaa[1]; - efa->f1= 1; + ok= 0; + if(fac1 > fac2) { + if(dia2.v1==eed->v1 && dia2.v2==eed->v2) { + eed->f1= 1; + efa= efaa[0]; + efa->f1= 1; + efa= efaa[1]; + efa->f1= 1; - w= addfacelist(v1, v2, v3, 0, efa, NULL); + w= addfacelist(v1, v2, v3, 0, efa, NULL); - UVCOPY(w->tf.uv[0], uv[0]); - UVCOPY(w->tf.uv[1], uv[1]); - UVCOPY(w->tf.uv[2], uv[2]); + UVCOPY(w->tf.uv[0], uv[0]); + UVCOPY(w->tf.uv[1], uv[1]); + UVCOPY(w->tf.uv[2], uv[2]); - w->tf.col[0] = col[0]; w->tf.col[1] = col[1]; w->tf.col[2] = col[2]; - w= addfacelist(v1, v3, v4, 0, efa, NULL); + w->tf.col[0] = col[0]; w->tf.col[1] = col[1]; w->tf.col[2] = col[2]; + w= addfacelist(v1, v3, v4, 0, efa, NULL); - UVCOPY(w->tf.uv[0], uv[0]); - UVCOPY(w->tf.uv[1], uv[2]); - UVCOPY(w->tf.uv[2], uv[3]); + UVCOPY(w->tf.uv[0], uv[0]); + UVCOPY(w->tf.uv[1], uv[2]); + UVCOPY(w->tf.uv[2], uv[3]); - w->tf.col[0] = col[0]; w->tf.col[1] = col[2]; w->tf.col[2] = col[3]; + w->tf.col[0] = col[0]; w->tf.col[1] = col[2]; w->tf.col[2] = col[3]; - onedone= 1; - } - } - else if(fac1 < fac2) { - if(dia1.v1==eed->v1 && dia1.v2==eed->v2) { - eed->f1= 1; - efa= efaa[0]; - efa->f1= 1; - efa= efaa[1]; - efa->f1= 1; + onedone= 1; + } + } + else if(fac1 < fac2) { + if(dia1.v1==eed->v1 && dia1.v2==eed->v2) { + eed->f1= 1; + efa= efaa[0]; + efa->f1= 1; + efa= efaa[1]; + efa->f1= 1; - w= addfacelist(v2, v3, v4, 0, efa, NULL); + w= addfacelist(v2, v3, v4, 0, efa, NULL); - UVCOPY(w->tf.uv[0], uv[1]); - UVCOPY(w->tf.uv[1], uv[3]); - UVCOPY(w->tf.uv[2], uv[4]); + UVCOPY(w->tf.uv[0], uv[1]); + UVCOPY(w->tf.uv[1], uv[3]); + UVCOPY(w->tf.uv[2], uv[4]); - w= addfacelist(v1, v2, v4, 0, efa, NULL); + w= addfacelist(v1, v2, v4, 0, efa, NULL); - UVCOPY(w->tf.uv[0], uv[0]); - UVCOPY(w->tf.uv[1], uv[1]); - UVCOPY(w->tf.uv[2], uv[3]); + UVCOPY(w->tf.uv[0], uv[0]); + UVCOPY(w->tf.uv[1], uv[1]); + UVCOPY(w->tf.uv[2], uv[3]); - onedone= 1; - } - } + onedone= 1; + } + } + } } } diff --git a/source/blender/src/header_view3d.c b/source/blender/src/header_view3d.c index 72bdd51fb58..5c61e541918 100644 --- a/source/blender/src/header_view3d.c +++ b/source/blender/src/header_view3d.c @@ -4163,13 +4163,13 @@ void view3d_buttons(void) xco+= XIC; if(G.vd->twflag & V3D_USE_MANIPULATOR) { - uiDefIconButS(block, TOG|BIT|0, B_MAN_TRANS, ICON_MAN_TRANS, xco,0,XIC,YIC, &G.vd->twtype, 1.0, 0.0, 0, 0, "Translate widget mode (CTRL click cycles)"); + uiDefIconButS(block, TOG|BIT|0, B_MAN_TRANS, ICON_MAN_TRANS, xco,0,XIC,YIC, &G.vd->twtype, 1.0, 0.0, 0, 0, "Translate widget mode (CTRL+Space)"); xco+= XIC; - uiDefIconButS(block, TOG|BIT|1, B_MAN_ROT, ICON_MAN_ROT, xco,0,XIC,YIC, &G.vd->twtype, 1.0, 0.0, 0, 0, "Rotate widget mode (CTRL click cycles)"); + uiDefIconButS(block, TOG|BIT|1, B_MAN_ROT, ICON_MAN_ROT, xco,0,XIC,YIC, &G.vd->twtype, 1.0, 0.0, 0, 0, "Rotate widget mode (CTRL+Space)"); xco+= XIC; - uiDefIconButS(block, TOG|BIT|2, B_MAN_SCALE, ICON_MAN_SCALE, xco,0,XIC,YIC, &G.vd->twtype, 1.0, 0.0, 0, 0, "Scale widget mode (CTRL click cycles)"); + uiDefIconButS(block, TOG|BIT|2, B_MAN_SCALE, ICON_MAN_SCALE, xco,0,XIC,YIC, &G.vd->twtype, 1.0, 0.0, 0, 0, "Scale widget mode (CTRL+Space)"); xco+= XIC; - uiDefButS(block, MENU, REDRAWVIEW3D, "Orientation%t|Global%x0|Local%x1|Normal%x2", xco,0,60,YIC, &G.vd->twmode, 0, 0, 0, 0, "Current color"); + uiDefButS(block, MENU, REDRAWVIEW3D, "Orientation%t|Global%x0|Local%x1|Normal%x2", xco,0,60,YIC, &G.vd->twmode, 0, 0, 0, 0, "Widget orientation (ALT+Space)"); xco+= 60; } uiBlockEndAlign(block);