Revision: 16242
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16242
Author:   theeth
Date:     2008-08-24 22:57:56 +0200 (Sun, 24 Aug 2008)

Log Message:
-----------
Little feature request

Adding numerical input support to edge slide (and at the same time, loop cut).

Also clean up NumInput functions for external use. I might have a second pass 
at this to make it even easier.

Modified Paths:
--------------
    trunk/blender/source/blender/include/transform.h
    trunk/blender/source/blender/src/editmesh_tools.c
    trunk/blender/source/blender/src/transform_generics.c
    trunk/blender/source/blender/src/transform_numinput.c

Modified: trunk/blender/source/blender/include/transform.h
===================================================================
--- trunk/blender/source/blender/include/transform.h    2008-08-24 15:22:44 UTC 
(rev 16241)
+++ trunk/blender/source/blender/include/transform.h    2008-08-24 20:57:56 UTC 
(rev 16242)
@@ -466,7 +466,6 @@
 /*********************** Generics ********************************/
 
 void initTrans(TransInfo *t);
-void initTransModeFlags(TransInfo *t, int mode);
 void postTrans (TransInfo *t);
 
 void drawLine(float *center, float *dir, char axis, short options);
@@ -498,6 +497,7 @@
 
 /*********************** NumInput ********************************/
 
+void initNumInput(NumInput *n);
 void outputNumInput(NumInput *n, char *str);
 short hasNumInput(NumInput *n);
 void applyNumInput(NumInput *n, float *vec);

Modified: trunk/blender/source/blender/src/editmesh_tools.c
===================================================================
--- trunk/blender/source/blender/src/editmesh_tools.c   2008-08-24 15:22:44 UTC 
(rev 16241)
+++ trunk/blender/source/blender/src/editmesh_tools.c   2008-08-24 20:57:56 UTC 
(rev 16242)
@@ -4667,6 +4667,7 @@
 
 int EdgeSlide(short immediate, float imperc)
 {
+       NumInput num;
        EditMesh *em = G.editMesh;
        EditFace *efa;
        EditEdge *eed,*first=NULL,*last=NULL, *temp = NULL;
@@ -4683,6 +4684,8 @@
        char str[128]; 
        float labda = 0.0f;
        
+       initNumInput(&num);
+               
        view3d_get_object_project_mat(curarea, G.obedit, projectMat, viewMat);
        
        mvalo[0] = -1; mvalo[1] = -1; 
@@ -4994,17 +4997,84 @@
                float v2[2], v3[2];
                EditVert *centerVert, *upVert, *downVert;
                
-               
-
                getmouseco_areawin(mval);  
                
                if (!immediate && (mval[0] == mvalo[0] && mval[1] ==  
mvalo[1])) {
                        PIL_sleep_ms(10);
                } else {
+                       char *p = str;;
 
                        mvalo[0] = mval[0];
                        mvalo[1] = mval[1];
                        
+
+                       tempsv = BLI_ghash_lookup(vertgh,nearest);
+
+                       centerVert = editedge_getSharedVert(tempsv->up, 
tempsv->down);
+                       upVert = editedge_getOtherVert(tempsv->up, centerVert);
+                       downVert = editedge_getOtherVert(tempsv->down, 
centerVert);
+
+                       view3d_project_float(curarea, upVert->co, v2, 
projectMat);
+                       view3d_project_float(curarea, downVert->co, v3, 
projectMat);
+
+                       /* Determine the % on which the loop should be cut */   
+
+                       rc[0]= v3[0]-v2[0];   
+                       rc[1]= v3[1]-v2[1];   
+                       len= rc[0]*rc[0]+ rc[1]*rc[1];
+                       if (len==0) {len = 0.0001;}
+
+                       if ((G.qual & LR_SHIFTKEY)==0) {
+                               wasshift = 0;
+                               labda= ( rc[0]*((mval[0]-v2[0])) + 
rc[1]*((mval[1]-v2[1])) )/len;   
+                       }
+                       else {
+                               if (wasshift==0) {
+                                       wasshift = 1;
+                                       shiftlabda = labda;
+                               }                                               
        
+                               labda= ( rc[0]*((mval[0]-v2[0])) + 
rc[1]*((mval[1]-v2[1])) )/len / 10.0 + shiftlabda;                           
+                       }
+                       
+
+                       if(labda<=0.0) labda=0.0;   
+                       else if(labda>=1.0)labda=1.0;   
+
+                       perc=((1-labda)*2)-1;             
+                       
+                       if(G.qual == 0) {
+                               perc *= 100;
+                               perc = floor(perc);
+                               perc /= 100;
+                       } else if (G.qual == LR_CTRLKEY) {
+                               perc *= 10;
+                               perc = floor(perc);
+                               perc /= 10;                                
+                       }                       
+                       
+                       if(prop == 0) {
+                               len = 
VecLenf(upVert->co,downVert->co)*((perc+1)/2);
+                               if(flip == 1) {
+                                       len = VecLenf(upVert->co,downVert->co) 
- len;
+                               } 
+                       }
+                       
+                       if (hasNumInput(&num))
+                       {
+                               applyNumInput(&num, &perc);
+                               
+                               if (prop)
+                               {
+                                       perc = MIN2(perc, 1);
+                                       perc = MAX2(perc, -1);
+                               }
+                               else
+                               {
+                                       len = MIN2(perc, 
VecLenf(upVert->co,downVert->co));
+                                       len = MAX2(len, 0);
+                               }
+                       }
+
                        //Adjust Edgeloop
                        if(immediate) {
                                perc = imperc;   
@@ -5043,13 +5113,7 @@
 
                        }
                        
-                       tempsv = BLI_ghash_lookup(vertgh,nearest);
-
-                       centerVert = editedge_getSharedVert(tempsv->up, 
tempsv->down);
-                       upVert = editedge_getOtherVert(tempsv->up, centerVert);
-                       downVert = editedge_getOtherVert(tempsv->down, 
centerVert);
                         // Highlight the Control Edges
-       
                        scrarea_do_windraw(curarea);   
                        persp(PERSP_VIEW);   
                        glPushMatrix();   
@@ -5077,55 +5141,36 @@
                        
                        glPopMatrix();           
 
-                       view3d_project_float(curarea, upVert->co, v2, 
projectMat);
-                       view3d_project_float(curarea, downVert->co, v3, 
projectMat);
-
-                       /* Determine the % on which the loop should be cut */   
-
-                       rc[0]= v3[0]-v2[0];   
-                       rc[1]= v3[1]-v2[1];   
-                       len= rc[0]*rc[0]+ rc[1]*rc[1];
-                       if (len==0) {len = 0.0001;}
-
-                       if ((G.qual & LR_SHIFTKEY)==0) {
-                               wasshift = 0;
-                               labda= ( rc[0]*((mval[0]-v2[0])) + 
rc[1]*((mval[1]-v2[1])) )/len;   
+                       if(prop) {
+                               p += sprintf(str, "(P)ercentage: ");
+                       } else {
+                               p += sprintf(str, "Non (P)rop Length: ");
                        }
-                       else {
-                               if (wasshift==0) {
-                                       wasshift = 1;
-                                       shiftlabda = labda;
-                               }                                               
        
-                               labda= ( rc[0]*((mval[0]-v2[0])) + 
rc[1]*((mval[1]-v2[1])) )/len / 10.0 + shiftlabda;                           
+                       
+                       if (hasNumInput(&num))
+                       {
+                               char num_str[20];
+                               
+                               outputNumInput(&num, num_str);
+                               p += sprintf(p, "%s", num_str);
                        }
+                       else
+                       {
+                               if (prop)
+                               {
+                                       p += sprintf(p, "%f", perc);
+                               }
+                               else
+                               {
+                                       p += sprintf(p, "%f", len);
+                               }
+                       }
                        
-
-                       if(labda<=0.0) labda=0.0;   
-                       else if(labda>=1.0)labda=1.0;   
-
-                       perc=((1-labda)*2)-1;             
                        
-                       if(G.qual == 0) {
-                               perc *= 100;
-                               perc = floor(perc);
-                               perc /= 100;
-                       } else if (G.qual == LR_CTRLKEY) {
-                               perc *= 10;
-                               perc = floor(perc);
-                               perc /= 10;                                
-                       }                       
-                       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);
+                       if (prop == 0) {
+                               p += sprintf(p, ", Press (F) to flip control 
side");
                        }
 
-                       
-                       
                        headerprint(str);
                        screen_swapbuffers();                   
                }
@@ -5148,7 +5193,14 @@
                                                        perc = 0;  
                                                        immediate = 1;
                                        } else if(event==PKEY) {
-                                                       (prop == 1) ? (prop = 
0):(prop = 1);
+                                                       initNumInput(&num); /* 
reset num input */
+                                                       if (prop) {
+                                                               prop = 0;
+                                                               num.flag |= 
NUM_NO_NEGATIVE;
+                                                       }
+                                                       else {
+                                                               prop = 1;
+                                                       }
                                                        mvalo[0] = -1;  
                                        } else if(event==FKEY) {
                                                        (flip == 1) ? (flip = 
0):(flip = 1); 
@@ -5186,7 +5238,13 @@
                                                        look = look->next;   
                                                }         
                                        }
+                                       
+                                       if (handleNumInput(&num, event))
+                                       {
+                                               mvalo[0] = -1; /* NEED A BETTER 
WAY TO TRIGGER REDRAW */
+                                       }
                                }
+                               
                        } 
                } else {
                        draw = 0;

Modified: trunk/blender/source/blender/src/transform_generics.c
===================================================================
--- trunk/blender/source/blender/src/transform_generics.c       2008-08-24 
15:22:44 UTC (rev 16241)
+++ trunk/blender/source/blender/src/transform_generics.c       2008-08-24 
20:57:56 UTC (rev 16242)
@@ -583,39 +583,6 @@
                reshadeall_displist();
 }
 
-void initTransModeFlags(TransInfo *t, int mode) 
-{
-       t->mode = mode;
-       t->num.flag = 0;
-
-       /* REMOVING RESTRICTIONS FLAGS */
-       t->flag &= ~T_ALL_RESTRICTIONS;
-       
-       switch (mode) {
-       case TFM_RESIZE:
-               t->flag |= T_NULL_ONE;
-               t->num.flag |= NUM_NULL_ONE;
-               t->num.flag |= NUM_AFFECT_ALL;
-               if (!G.obedit) {
-                       t->flag |= T_NO_ZERO;
-                       t->num.flag |= NUM_NO_ZERO;
-               }
-               break;
-       case TFM_TOSPHERE:
-               t->num.flag |= NUM_NULL_ONE;
-               t->num.flag |= NUM_NO_NEGATIVE;
-               t->flag |= T_NO_CONSTRAINT;
-               break;
-       case TFM_SHEAR:
-       case TFM_CREASE:
-       case TFM_BONE_ENVELOPE:
-       case TFM_CURVE_SHRINKFATTEN:
-       case TFM_BONE_ROLL:
-               t->flag |= T_NO_CONSTRAINT;
-               break;
-       }
-}
-
 void drawLine(float *center, float *dir, char axis, short options)
 {
        extern void make_axis_color(char *col, char *col2, char axis);  // 
drawview.c
@@ -674,19 +641,10 @@
        t->transform            = NULL;
        t->handleEvent          = NULL;
 
-       t->total                        =
-               t->num.idx              =
-               t->num.idx_max  =
-               t->num.ctrl[0]  = 
-               t->num.ctrl[1]  = 
-               t->num.ctrl[2]  = 0;
+       t->total                        = 0;
 
        t->val = 0.0f;
 
-       t->num.val[0]           = 
-               t->num.val[1]   = 
-               t->num.val[2]   = 0.0f;
-
        t->vec[0]                       =
                t->vec[1]               =
                t->vec[2]               = 0.0f;
@@ -708,7 +666,8 @@
                t->around = V3D_CENTER;
 
        setTransformViewMatrices(t);
-       initNDofInput(&(t->ndof));
+       initNumInput(&t->num);
+       initNDofInput(&t->ndof);
 }
 
 /* Here I would suggest only TransInfo related issues, like free data & reset 
vars. Not redraws */

Modified: trunk/blender/source/blender/src/transform_numinput.c
===================================================================
--- trunk/blender/source/blender/src/transform_numinput.c       2008-08-24 
15:22:44 UTC (rev 16241)
+++ trunk/blender/source/blender/src/transform_numinput.c       2008-08-24 
20:57:56 UTC (rev 16242)
@@ -41,6 +41,20 @@
 
 /* ************************** NUMINPUT **************************** */
 
+void initNumInput(NumInput *n)
+{
+       n->flag         =
+       n->idx          =
+       n->idx_max      =
+       n->ctrl[0]      = 
+       n->ctrl[1]      = 
+       n->ctrl[2]      = 0;
+
+       n->val[0]               = 
+       n->val[1]       = 
+       n->val[2]       = 0.0f;
+}
+
 void outputNumInput(NumInput *n, char *str)
 {
        char cur;


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to