diff options
author | Ton Roosendaal <ton@blender.org> | 2004-12-09 19:43:37 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2004-12-09 19:43:37 +0300 |
commit | 2de89e2a353d251fce88c06da1a6a38cc770cf62 (patch) | |
tree | bfc0bf84b4fd1c2a8394b11811a36d8d9c8981ee /source/blender/src/drawview.c | |
parent | add697407af6e71f62744aa47141ffc0a8f24e1a (diff) |
Three fixes in edge/crease edit for Transform Properties Panel (NKEY)
- code wasn't edge-select aware yet
- the "Median" button now allows to move a "median" correctly around, also
to 0 or 1 in a single step
- missing undo push here.
Diffstat (limited to 'source/blender/src/drawview.c')
-rw-r--r-- | source/blender/src/drawview.c | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/source/blender/src/drawview.c b/source/blender/src/drawview.c index 24cf6b04af5..3692e5c0e5f 100644 --- a/source/blender/src/drawview.c +++ b/source/blender/src/drawview.c @@ -1088,7 +1088,7 @@ static void v3d_editvertex_buts(uiBlock *block, Object *ob, float lim) if(me->medge) { eed= em->edges.first; while(eed) { - if((eed->v1->f & 1) && (eed->v2->f & 1)) { + if((eed->f & SELECT)) { totedge++; median[3]+= eed->crease; } @@ -1184,6 +1184,8 @@ static void v3d_editvertex_buts(uiBlock *block, Object *ob, float lim) median[3]= ve_median[3]-median[3]; if(ob->type==OB_MESH) { + float diffac= 1.0; + eve= em->verts.first; while(eve) { if(eve->f & 1) { @@ -1192,14 +1194,29 @@ static void v3d_editvertex_buts(uiBlock *block, Object *ob, float lim) eve= eve->next; } - eed= em->edges.first; - while(eed) { - if((eed->v1->f & 1) && (eed->v2->f & 1)) { - totedge++; + /* calculate the differences to squeeze a range smaller when values are close to 1 or 0 */ + /* this way you can edit a median value which is applied on clipped values :) */ + if(totedge>1) { + float max= 0.0; + for(eed= em->edges.first; eed; eed= eed->next) { + if(eed->f & SELECT) { + if(max < ABS(eed->crease-ve_median[3])) max= ABS(eed->crease-ve_median[3]); + } + } + if(max>0.0) { + if(ve_median[3]> 0.5) diffac= (1.0-ve_median[3])/max; + else diffac= (ve_median[3])/max; + if(diffac>1.0) diffac= 1.0; + } + } + + for(eed= em->edges.first; eed; eed= eed->next) { + if(eed->f & SELECT) { eed->crease+= median[3]; + eed->crease= ve_median[3] + diffac*(eed->crease-ve_median[3]); + CLAMP(eed->crease, 0.0, 1.0); } - eed= eed->next; } } else if(ob->type==OB_CURVE || ob->type==OB_SURF) { @@ -1249,6 +1266,7 @@ static void v3d_editvertex_buts(uiBlock *block, Object *ob, float lim) nu= nu->next; } } + BIF_undo_push("Transform properties"); } } |