Cleaned up new constraint line drawing while grab/rot/scale
authorTon Roosendaal <ton@blender.org>
Thu, 23 Oct 2003 16:15:05 +0000 (16:15 +0000)
committerTon Roosendaal <ton@blender.org>
Thu, 23 Oct 2003 16:15:05 +0000 (16:15 +0000)
- uses callback mechanism to tell main drawing routine what to do
- for that reason it doesn't use frontbuffer drawing anymore
  and it shows up in all 3d windows as well
- it uses the same colors as for the grid axes (I tweaked it a bit,
  this is based at themecolors, and also should work in different
  background and grid color)
- I disabled drawing lines through every object or every vertex.
  The current display method is clear and not distracting
- when in 'local' transform (double press X/Y/Z), it displays a nice
  axis in the center of transform for vertices.
  In object-mode, local transform differs per object, so constraint lines
  and axes are drawn for each individually...

Also:

- fixed an old bug in rotate transform(). Using a constraint for
  rotation (X, Y, Z) didn't work for multiple objects at all!

source/blender/include/BDR_drawobject.h
source/blender/include/BSE_view.h
source/blender/src/drawobject.c
source/blender/src/drawview.c
source/blender/src/editobject.c
source/blender/src/view.c

index d8b27f528abdf8b43e1543e10a76ba8c703f857a..9733cb71a20313d313665ed95aafea8ce8b29360 100644 (file)
@@ -47,7 +47,6 @@ struct Base;
 
 void init_draw_rects(void);
 void helpline(float *vec);
-void constline(float *center, float *dir, int col);
 void drawaxes(float size);
 void drawcamera(struct Object *ob);
 void calc_lattverts_ext(void);
index 4da0c33131811fa274eb3eaf9c3d23d7782dceb0..49a41e26ab185fa68fa38fd7e8ce75dc3487a60d 100644 (file)
@@ -50,7 +50,6 @@ void initgrabz(float x, float y, float z);
 void window_to_3d(float *vec, short mx, short my);
 void project_short(float *vec, short *adr);
 void project_short_noclip(float *vec, short *adr);
-void project_short_infiniteline(float *vec, float *dir, short *adr1, short *adr2);     /* clips infinite line to screen border */
 void project_float(float *vec, float *adr);
 int boundbox_clip(float obmat[][4], struct BoundBox *bb);
 void fdrawline(float x1, float y1, float x2, float y2);
index e9d1a93830957efd27d9c4779040e0547ac6773d..3702ea0b53e4568d23b1a37b1424cdb7efc1935f 100644 (file)
@@ -269,40 +269,6 @@ void helpline(float *vec)
        glDrawBuffer(GL_BACK);
 }
 
-void constline(float *center, float *dir, int col)
-{
-       float v1[3], v2[3];
-       short val1[2], val2[2];
-
-
-       VecCopyf(v1, center);
-       VecCopyf(v2, dir);
-       if(G.obedit){
-               Mat4Mul3Vecfl(G.obedit->obmat, v1);
-               VecAddf(v1, v1, G.obedit->obmat[3]);
-       }
-       if(G.obedit) Mat4Mul3Vecfl(G.obedit->obmat, v2);
-
-       project_short_infiniteline(v1, v2, val1, val2);
-
-       persp(0);
-       
-       glDrawBuffer(GL_FRONT);
-       
-       cpack(col);
-
-       setlinestyle(0);
-       glBegin(GL_LINE_STRIP); 
-               glVertex2sv(val1); 
-               glVertex2sv(val2); 
-       glEnd();
-       
-       persp(PERSP_VIEW);
-
-       glFinish(); // flush display for frontbuffer
-       glDrawBuffer(GL_BACK);
-}
-
 void drawaxes(float size)
 {
        int axis;
index 20359360ef153ccad64e5e98547e2ce6f9cada44..40c93dbc705d36e8c7fce700895c0edb7e71b1bd 100644 (file)
@@ -434,12 +434,33 @@ static void drawgrid_draw(float wx, float wy, float x, float y, float dx)
 
 }
 
+// not intern, called in editobject for constraint axis too
+void make_axis_color(char *col, char *col2, char axis)
+{
+       if(axis=='x') {
+               col2[0]= col[0]>219?255:col[0]+36;
+               col2[1]= col[1]<26?0:col[1]-26;
+               col2[2]= col[2]<26?0:col[2]-26;
+       }
+       else if(axis=='y') {
+               col2[0]= col[0]<46?0:col[0]-36;
+               col2[1]= col[1]>189?255:col[1]+66;
+               col2[2]= col[2]<46?0:col[2]-36; 
+       }
+       else {
+               col2[0]= col[0]<26?0:col[0]-26; 
+               col2[1]= col[1]<26?0:col[1]-26; 
+               col2[2]= col[2]>209?255:col[2]+46;
+       }
+       
+}
+
 static void drawgrid(void)
 {
        /* extern short bgpicmode; */
        float wx, wy, x, y, fw, fx, fy, dx;
        float vec4[4];
-       char col[3];
+       char col[3], col2[3];
        
        vec4[0]=vec4[1]=vec4[2]=0.0; 
        vec4[3]= 1.0;
@@ -537,13 +558,15 @@ static void drawgrid(void)
        BIF_GetThemeColor3ubv(TH_GRID, col);
        
        /* center cross */
-       if(G.vd->view==3) glColor3ub(col[0]<36?0:col[0]-36, col[1]>199?255:col[1]+56, col[2]<36?0:col[2]-36); /* y-as */
-       else glColor3ub(col[0]>219?255:col[0]+36, col[1]<26?0:col[1]-26, col[2]<26?0:col[2]-26);        /* x-as */
-
+       if(G.vd->view==3) make_axis_color(col, col2, 'y');
+       else make_axis_color(col, col2, 'x');
+       glColor3ubv(col2);
+       
        fdrawline(0.0,  y,  (float)curarea->winx,  y); 
        
-       if(G.vd->view==7) glColor3ub(col[0]<36?0:col[0]-36, col[1]>199?255:col[1]+56, col[2]<36?0:col[2]-36);   /* y-as */
-       else glColor3ub(col[0]<36?0:col[0]-36, col[1]<36?0:col[1]-36, col[2]>209?255:col[2]+46);        /* z-as */
+       if(G.vd->view==7) make_axis_color(col, col2, 'y');
+       else make_axis_color(col, col2, 'z');
+       glColor3ubv(col2);
 
        fdrawline(x, 0.0, x, (float)curarea->winy); 
 
@@ -557,7 +580,7 @@ static void drawfloor(void)
        View3D *vd;
        float vert[3], grid;
        int a, gridlines;
-       char col[3];
+       char col[3], col2[3];
        
        vd= curarea->spacedata.first;
 
@@ -573,7 +596,8 @@ static void drawfloor(void)
        for(a= -gridlines;a<=gridlines;a++) {
 
                if(a==0) {
-                       glColor3ub(col[0]<36?0:col[0]-36, col[1]>199?255:col[1]+56, col[2]<36?0:col[2]-36);     /* y-as */
+                       make_axis_color(col, col2, 'y');
+                       glColor3ubv(col2);
                }
                else if( (a % 10)==0) {
                        BIF_ThemeColorShade(TH_GRID, -10);
@@ -592,7 +616,8 @@ static void drawfloor(void)
        
        for(a= -gridlines;a<=gridlines;a++) {
                if(a==0) {
-                       glColor3ub(col[0]>219?255:col[0]+36, col[1]<26?0:col[1]-26, col[2]<26?0:col[2]-26);     /* x-as */
+                       make_axis_color(col, col2, 'x');
+                       glColor3ubv(col2);
                }
                else if( (a % 10)==0) {
                        BIF_ThemeColorShade(TH_GRID, -10);
@@ -1215,6 +1240,7 @@ static void view3d_blockhandlers(ScrArea *sa)
 
 void drawview3dspace(ScrArea *sa, void *spacedata)
 {
+       extern void constline_callback(void);   // editobject.c helpline
        Base *base;
        Object *ob;
        
@@ -1364,6 +1390,8 @@ void drawview3dspace(ScrArea *sa, void *spacedata)
                base= base->next;
        }
 
+       if(G.moving) constline_callback();
+
        /* duplis, draw as last to make sure the displists are ok */
        base= G.scene->base.first;
        while(base) {
index 4e79082448f51048b5c743c6a0244bacc369ef81..8204507aa97b7f8bfa6a8f73bf3e499dd017d1e5 100644 (file)
@@ -3745,15 +3745,7 @@ int my_clock(void)
        return (int)ftime;
 }
 
-#define XTRANS         0x01
-#define YTRANS         0x02
-#define ZTRANS         0x04
-#define TRANSLOCAL     0x80
-#define XTRANSLOCAL    (XTRANS|TRANSLOCAL)
-#define YTRANSLOCAL    (YTRANS|TRANSLOCAL)
-#define ZTRANSLOCAL    (ZTRANS|TRANSLOCAL)
-
-void view_editmove(unsigned char event)
+static void view_editmove(unsigned char event)
 {
        /* Regular:   Zoom in */
        /* Shift:     Scroll up */
@@ -3812,7 +3804,127 @@ void view_editmove(unsigned char event)
        }
 }
 
-char *transform_mode_to_string(int mode)
+/* *********************** AXIS CONSTRAINT HELPER LINE *************** */
+
+static void constline(float *center, float *dir, char axis, float axismat[][3])
+{
+       extern void make_axis_color(char *col, char *col2, char axis);  // drawview.c
+       float v1[3], v2[3], v3[3];
+       char col[3], col2[2];
+       
+       if(G.obedit) mymultmatrix(G.obedit->obmat);     // sets opengl viewing
+
+       VecCopyf(v3, dir);
+       VecMulf(v3, G.vd->far);
+       
+       VecSubf(v2, center, v3);
+       VecAddf(v1, center, v3);
+
+       BIF_GetThemeColor3ubv(TH_GRID, col);
+       make_axis_color(col, col2, axis);
+       glColor3ubv(col2);
+
+       setlinestyle(0);
+       glBegin(GL_LINE_STRIP); 
+               glVertex3fv(v1); 
+               glVertex3fv(v2); 
+       glEnd();
+       
+       if(axismat) {
+               float mat[4][4];
+               
+               Mat4CpyMat3(mat, axismat);
+               VecAddf(mat[3], mat[3], center);
+               
+               mymultmatrix(mat);
+               BIF_ThemeColor(TH_TEXT);
+               drawaxes(2.0);
+       }
+       
+       myloadmatrix(G.vd->viewmat);
+       
+}
+
+
+#define XTRANS         0x01
+#define YTRANS         0x02
+#define ZTRANS         0x04
+#define TRANSLOCAL     0x80
+#define XTRANSLOCAL    (XTRANS|TRANSLOCAL)
+#define YTRANSLOCAL    (YTRANS|TRANSLOCAL)
+#define ZTRANSLOCAL    (ZTRANS|TRANSLOCAL)
+
+/* temporal storage for callback */
+struct constline_temp {
+       int mode, axismode, midtog;
+       float *centre, *vx, *vy, *vz;
+       float *imat;
+};
+
+static struct constline_temp cnst={0,0}; // init
+
+/* called while transform(), store the relevant values in struct  */
+static void set_constline_callback(int mode, int axismode, int midtog, 
+                                               float *centre, float imat[][3], float *vx, float *vy, float *vz)
+{
+       cnst.mode= mode;
+       cnst.axismode= axismode;
+       cnst.midtog= midtog;
+       cnst.centre= centre;
+       cnst.imat= (float *)imat;
+       cnst.vx= vx;
+       cnst.vy= vy;
+       cnst.vz= vz;
+}
+
+/* is called from drawview.c after drawing objects */
+void constline_callback(void)
+{
+       TransOb *tob;
+       int a;
+       
+       if(cnst.mode==0 || cnst.axismode==0) return;    // uninitialized or no helpline
+       
+       // check further:
+       if( (cnst.mode == 'C') || (cnst.mode == 'w') || (cnst.mode=='N') ) return; 
+       if( ((cnst.mode=='R')||(cnst.mode=='r')) && (cnst.midtog) ) return;
+               
+       if(G.obedit) {  // only one helpline in editmode
+               float matone[3][3];
+               Mat3One(matone);
+               
+               switch (cnst.axismode) {
+               case XTRANSLOCAL: constline(cnst.centre, cnst.vx, 'x', matone); break;
+               case YTRANSLOCAL: constline(cnst.centre, cnst.vy, 'y', matone); break;
+               case ZTRANSLOCAL: constline(cnst.centre, cnst.vz, 'z', matone); break;
+               case XTRANS: constline(cnst.centre, cnst.imat, 'x', NULL); break;
+               case YTRANS: constline(cnst.centre, cnst.imat+3, 'y', NULL); break;
+               case ZTRANS: constline(cnst.centre, cnst.imat+6, 'z', NULL); break;
+               }
+       }
+       else if(cnst.axismode < TRANSLOCAL) {   // for multiple objects one helpline...
+               switch (cnst.axismode) {
+               case XTRANS: constline(cnst.centre, cnst.vx, 'x', NULL); break;
+               case YTRANS: constline(cnst.centre, cnst.vy, 'y', NULL); break;
+               case ZTRANS: constline(cnst.centre, cnst.vz, 'z', NULL); break;
+               }
+       }
+       else {  // unless it's local transform
+               tob= transmain;
+               for(a=0; a<tottrans; a++, tob++) {
+                       switch (cnst.axismode) {
+                       case XTRANSLOCAL: constline(tob->loc, tob->axismat[0], 'x', tob->axismat); break;
+                       case YTRANSLOCAL: constline(tob->loc, tob->axismat[1], 'y', tob->axismat); break;
+                       case ZTRANSLOCAL: constline(tob->loc, tob->axismat[2], 'z', tob->axismat); break;
+                       }
+               }
+       }
+}
+
+/* *********************** END AXIS CONSTRAINT HELPER LINE *************** */
+/* *********************** TRANSFORM()  *************** */
+
+static char *transform_mode_to_string(int mode)
 {
        switch(mode) {
                case 'g':       return("Grab"); break;
@@ -4224,6 +4336,8 @@ void transform(int mode)
                                        if(G.obedit) calc_trans_verts();
                                        special_trans_update(keyflags);
                                        
+                                       set_constline_callback(mode, axismode, midtog, centre, imat, vx, vy, vz);
+
                                        if(fast==0) {
                                                force_draw();
                                                time= my_clock()-time;
@@ -4351,21 +4465,22 @@ void transform(int mode)
                                                                                VecRotToMat3(vec, addvec[0] * M_PI / 180.0, mat);
                                                                        else
                                                                                VecRotToMat3(vec, phi, mat);
+                                                                               
                                                                }
                                                        }
-                                                               Mat3MulSerie(smat, tob->parmat, mat, tob->parinv, 0, 0, 0, 0, 0);
+                                                       Mat3MulSerie(smat, tob->parmat, mat, tob->parinv, 0, 0, 0, 0, 0);
 
-                                                               /* 2 */
-                                                               if( (tob->ob->transflag & OB_QUAT) == 0 && tob->rot){
-                                                                       Mat3ToEul(smat, eul);
-                                                                       EulToMat3(eul, smat);
-                                                               }
-                                                       
-                                                               /* 3 */
-                                                               /* we now work with rot+drot */
+                                                       /* 2 */
+                                                       if( (tob->ob->transflag & OB_QUAT) == 0 && tob->rot){
+                                                               Mat3ToEul(smat, eul);
+                                                               EulToMat3(eul, smat);
+                                                       }
+                                               
+                                                       /* 3 */
+                                                       /* we now work with rot+drot */
                                                                
-                                                       if(tob->ob->transflag & OB_QUAT || !tob->rot)
-                                                       {
+                                                       if(tob->ob->transflag & OB_QUAT || !tob->rot) {
+                                                       
                                                                /* drot+rot TO DO! */
                                                                Mat3ToQuat(smat, quat); // Original
                                                                QuatMul(tob->quat, quat, tob->oldquat);
@@ -4435,24 +4550,26 @@ void transform(int mode)
                                                        }
                                                        
                                                        if(G.vd->around!=V3D_LOCAL && (!G.obpose))  {
-                                                                       /* translation */
-                                                                       VecSubf(vec, tob->obvec, centre);
-                                                                       Mat3MulVecfl(mat, vec);
-                                                                       VecAddf(vec, vec, centre);
-                                                                       /* vec now is the location where the object has to be */
-                                                                       VecSubf(vec, vec, tob->obvec);
-                                                                       Mat3MulVecfl(tob->parinv, vec);
-                                                                       
-                                                                       if(tob->flag & TOB_IPO) {
-                                                                               add_ipo_tob_poin(tob->locx, tob->oldloc, vec[0]);
-                                                                               add_ipo_tob_poin(tob->locy, tob->oldloc+1, vec[1]);
-                                                                               add_ipo_tob_poin(tob->locz, tob->oldloc+2, vec[2]);
-                                                                       }
-                                                                       else if(tob->loc) {
-                                                                               VecAddf(tob->loc, tob->oldloc, vec);
-                                                                       }
+                                                               float vec[3];   // make local, the other vec stores rot axis
+                                                               
+                                                               /* translation */
+                                                               VecSubf(vec, tob->obvec, centre);
+                                                               Mat3MulVecfl(mat, vec);
+                                                               VecAddf(vec, vec, centre);
+                                                               /* vec now is the location where the object has to be */
+                                                               VecSubf(vec, vec, tob->obvec);
+                                                               Mat3MulVecfl(tob->parinv, vec);
+                                                               
+                                                               if(tob->flag & TOB_IPO) {
+                                                                       add_ipo_tob_poin(tob->locx, tob->oldloc, vec[0]);
+                                                                       add_ipo_tob_poin(tob->locy, tob->oldloc+1, vec[1]);
+                                                                       add_ipo_tob_poin(tob->locz, tob->oldloc+2, vec[2]);
+                                                               }
+                                                               else if(tob->loc) {
+                                                                       VecAddf(tob->loc, tob->oldloc, vec);
                                                                }
                                                        }
+                                               }
                                                else {
                                                        if(mode=='t') {
                                                                if(tv->val) *(tv->val)= tv->oldval-phi;
@@ -4534,7 +4651,9 @@ void transform(int mode)
 
                                        if(G.obedit) calc_trans_verts();
                                        special_trans_update(keyflags);
-
+                                       
+                                       set_constline_callback(mode, axismode, midtog, centre, imat, vx, vy, vz);
+                                       
                                        if(fast==0) {
                                                force_draw();
                                                time= my_clock()-time;
@@ -4743,7 +4862,8 @@ void transform(int mode)
                                        if(G.obedit) calc_trans_verts();
                                        special_trans_update(keyflags);
                                
-
+                                       set_constline_callback(mode, axismode, midtog, centre, imat, vx, vy, vz);
+                               
                                        if(fast==0) {
                                                force_draw();
                                                time= my_clock()-time;
@@ -4833,70 +4953,6 @@ void transform(int mode)
                                }
                        }
                        /* Help line drawing starts here */
-                       /* Drawing stuff I choose to put it in here so it can draw one line per object or per vertex */
-                       if (((drawhelpline)||(axismode)) && (mode != 'C') && (mode != 'w') && (mode!='N') && (! (((mode=='R')||(mode=='r')) && (midtog)) ) ){
-                               if (G.obedit && ((mode=='R')||(mode=='r')||(G.totvertsel > 5))){
-                                       if(axismode==XTRANSLOCAL) constline(centre, vx, 0xFF);
-                                       if(axismode==YTRANSLOCAL) constline(centre, vy, 0xFF00);
-                                       if(axismode==ZTRANSLOCAL) constline(centre, vz, 0xFF0000);
-                                       if(axismode==XTRANS) constline(centre, imat[0], 0xFF);
-                                       if(axismode==YTRANS) constline(centre, imat[1], 0xFF00);
-                                       if(axismode==ZTRANS) constline(centre, imat[2], 0xFF0000);
-                                       if((axismode==0)&&(drawhelpline==2)){
-                                               constline(centre, vx, 0xFF);
-                                               constline(centre, vy, 0xFF00);
-                                               constline(centre, vz, 0xFF0000);
-                                       }
-                                       if((axismode==0)&&(drawhelpline==1)){
-                                               constline(centre, imat[0], 0xFF);
-                                               constline(centre, imat[1], 0xFF00);
-                                               constline(centre, imat[2], 0xFF0000);
-                                       }
-                               }
-                               else {
-                                       tob= transmain;
-                                       tv= transvmain;
-                                       for(a=0; a<tottrans; a++, tob++, tv++) {
-                                               if(transmain) {
-                                                       if(axismode==XTRANSLOCAL) constline(tob->loc, tob->axismat[0], 0xFF);
-                                                       if(axismode==YTRANSLOCAL) constline(tob->loc, tob->axismat[1], 0xFF00);
-                                                       if(axismode==ZTRANSLOCAL) constline(tob->loc, tob->axismat[2], 0xFF0000);
-                                                       if(axismode==XTRANS) constline(tob->loc, vx, 0xFF);
-                                                       if(axismode==YTRANS) constline(tob->loc, vy, 0xFF00);
-                                                       if(axismode==ZTRANS) constline(tob->loc, vz, 0xFF0000);
-                                                       if((axismode==0)&&(drawhelpline==1)){
-                                                               constline(tob->oldloc, vx, 0xFF);
-                                                               constline(tob->oldloc, vy, 0xFF00);
-                                                               constline(tob->oldloc, vz, 0xFF0000);
-                                                       }
-                                                       if((axismode==0)&&(drawhelpline==2)){
-                                                               constline(tob->oldloc, tob->axismat[0], 0xFF);
-                                                               constline(tob->oldloc, tob->axismat[1], 0xFF00);
-                                                               constline(tob->oldloc, tob->axismat[2], 0xFF0000);
-                                                       }
-                                               }
-                                               else {
-                                                       if(axismode==XTRANSLOCAL) constline(tv->loc, vx, 0xFF);
-                                                       if(axismode==YTRANSLOCAL) constline(tv->loc, vy, 0xFF00);
-                                                       if(axismode==ZTRANSLOCAL) constline(tv->loc, vz, 0xFF0000);
-                                                       if(axismode==XTRANS) constline(tv->loc, imat[0], 0xFF);
-                                                       if(axismode==YTRANS) constline(tv->loc, imat[1], 0xFF00);
-                                                       if(axismode==ZTRANS) constline(tv->loc, imat[2], 0xFF0000);
-                                                       if((axismode==0)&&(drawhelpline==2)){
-                                                               constline(G.obedit->obmat[4], vx, 0xFF);
-                                                               constline(G.obedit->obmat[4], vy, 0xFF00);
-                                                               constline(G.obedit->obmat[4], vz, 0xFF0000);
-                                                       }
-                                                       if((axismode==0)&&(drawhelpline==1)){
-                                                               constline(G.obedit->obmat[4], imat[0], 0xFF);
-                                                               constline(G.obedit->obmat[4], imat[1], 0xFF00);
-                                                               constline(G.obedit->obmat[4], imat[2], 0xFF0000);
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-
 
                }
                
index 8b8f11bd2ff47d75ee2981851a157e1c1dc91ab9..6bfd945537e792c7bbde4e7c45b90454be77f739 100644 (file)
@@ -227,61 +227,6 @@ void project_float(float *vec, float *adr)
        }
 }
 
-void project_short_infiniteline(float *vec, float *dir, short *adr1, short *adr2)      /* clips infinite line to screen border */
-{
-       float vp[2], vd[2], temp[2];
-       short min, max;
-       float tvec[3], tmp;
-
-       project_float(vec, vp);
-       VecMulf(dir, 10);
-       VecAddf(tvec, vec, dir);
-       project_float(tvec, temp);
-
-       vd[0] = temp[0] - vp[0];
-       vd[1] = temp[1] - vp[1];
-
-       if ((vd[0] == 0) && (vd[1] == 0)){
-               adr1[0] = adr2[0] = vp[0];
-               adr1[1] = adr2[1] = vp[1];
-       }
-       else if (vd[0] == 0){
-               adr1[0] = adr2[0] = vp[0];
-               adr1[1] = 0;
-               adr2[1] = curarea->winy; 
-       }
-       else if (vd[1] == 0){
-               adr1[0] = 0;
-               adr2[0] = curarea->winx; 
-               adr1[1] = adr2[1] = vp[1];
-       }
-       else{
-               tmp = vd[0];
-               max = (curarea->winx - vp[0]) / tmp * vd[1] + vp[1];
-               if (max > curarea->winy){
-                       tmp = vd[1];
-                       adr2[0] = ((curarea->winy) - vp[1]) / tmp * vd[0] + vp[0];
-                       adr2[1] = curarea->winy;
-               }
-               else{
-                       adr2[0] = curarea->winx;
-                       adr2[1] = max;
-               }
-
-               tmp = vd[0];
-               min = (-vp[0]) / tmp * vd[1] + vp[1];
-               if (min < 0){
-                       tmp = vd[1];
-                       adr1[0] = (-vp[1]) / tmp * vd[0] + vp[0];
-                       adr1[1] = 0;
-               }
-               else{
-                       adr1[0] = 0;
-                       adr1[1] = min;
-               }
-       }
-}
-
 int boundbox_clip(float obmat[][4], BoundBox *bb)
 {
        /* return 1: draw */