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:
authorJohnny Matthews <johnny.matthews@gmail.com>2005-08-31 00:33:35 +0400
committerJohnny Matthews <johnny.matthews@gmail.com>2005-08-31 00:33:35 +0400
commitc9eb15714cd6e559a03a09c277294c7f184eb008 (patch)
tree2f1a26aac32059b7b48d6f1f86d01e9bdb942f02
parent3b96d6584fe1f6c82eecc49f3bf0279e2f5a27a7 (diff)
Nonproportional mode for loopcut
while sliding the edge, press P this will swap modes. while in Non prop mode, press F to change the control "side". You can still change the control edge too.
-rw-r--r--source/blender/src/editmesh_tools.c38
1 files changed, 35 insertions, 3 deletions
diff --git a/source/blender/src/editmesh_tools.c b/source/blender/src/editmesh_tools.c
index 283c1ae0bf9..bce995d5bc3 100644
--- a/source/blender/src/editmesh_tools.c
+++ b/source/blender/src/editmesh_tools.c
@@ -4453,8 +4453,8 @@ int EdgeSlide(short immediate, float imperc)
LinkNode *edgelist = NULL, *vertlist=NULL, *look;
GHash *vertgh;
SlideVert *tempsv;
- float perc = 0, percp = 0,vertdist, projectMat[4][4], viewMat[4][4];
- int i = 0,j, numsel, numadded=0, timesthrough = 0, vertsel=0, prop=1, cancel = 0;
+ float perc = 0, percp = 0,vertdist, projectMat[4][4], viewMat[4][4], len;
+ int i = 0,j, numsel, numadded=0, timesthrough = 0, vertsel=0, prop=1, cancel = 0,flip=0;
short event, draw=1;
short mval[2], mvalo[2];
char str[128];
@@ -4795,6 +4795,23 @@ int EdgeSlide(short immediate, float imperc)
}
else {
//Non prop code
+ look = vertlist;
+ while(look){
+ float newlen;
+ EditVert *tempev;
+ ev = look->link;
+ tempsv = BLI_ghash_lookup(vertgh,ev);
+ newlen = (len / VecLenf(editedge_getOtherVert(tempsv->up,ev)->co,editedge_getOtherVert(tempsv->down,ev)->co));
+ if(newlen > 1.0){newlen = 1.0;}
+ if(newlen < 0.0){newlen = 0.0;}
+ if(flip == 0){
+ VecLerpf(ev->co, editedge_getOtherVert(tempsv->down,ev)->co, editedge_getOtherVert(tempsv->up,ev)->co, fabs(newlen));
+ } else{
+ VecLerpf(ev->co, editedge_getOtherVert(tempsv->up,ev)->co, editedge_getOtherVert(tempsv->down,ev)->co, fabs(newlen));
+ }
+ look = look->next;
+ }
+
}
tempsv = BLI_ghash_lookup(vertgh,nearest);
@@ -4841,7 +4858,18 @@ int EdgeSlide(short immediate, float imperc)
perc = floor(perc);
perc /= 10;
}
- sprintf(str, "Percentage %f", perc);
+ if(prop){
+ sprintf(str, "(P)ercentage: %f", perc);
+ } else {
+ len = VecLenf(upVert->co,downVert->co)*((perc+1)/2);
+ if(flip == 1){
+ len = VecLenf(upVert->co,downVert->co) - len;
+ }
+ sprintf(str, "Non (P)rop Length: %f, Press (F) to flip control side", len);
+ }
+
+
+
headerprint(str);
screen_swapbuffers();
}
@@ -4862,6 +4890,10 @@ int EdgeSlide(short immediate, float imperc)
} else if(event==MIDDLEMOUSE) {
perc = 0;
immediate = 1;
+ } else if(event==PKEY) {
+ (prop == 1) ? (prop = 0):(prop = 1);
+ } else if(event==FKEY) {
+ (flip == 1) ? (flip = 0):(flip = 1);
} else if(ELEM(event, RIGHTARROWKEY, WHEELUPMOUSE)) { // Scroll through Control Edges
look = vertlist;
while(look){