home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_07_06 / v7n6051a.txt < prev    next >
Text File  |  1989-07-25  |  1KB  |  64 lines

  1.  
  2.  
  3.                             Listing 2 
  4.  
  5. /*
  6.      clipLine() = draws the portion of a line that is      
  7.                   within specified boundaries              
  8. */
  9.  
  10. void clipLine(int x1,int y1,int x2,int y2,int color)
  11. {
  12.     int xa,ya,xb,yb;
  13.  
  14.     if (x1 < x2)
  15.     {
  16.         xa = x1;
  17.         ya = y1;
  18.         xb = x2;
  19.         yb = y2;
  20.     }
  21.     else
  22.     {
  23.         xa = x2;
  24.         ya = y2;
  25.         xb = x1;
  26.         yb = y1;
  27.     }
  28.     if ((xa > xmax) || (xb < xmin))
  29.         return(0);
  30.     if (xa < xmin)
  31.     {
  32.         ya = ya + (long)(xmin - xa)*(yb - ya)/(xb - xa);
  33.         xa = xmin;
  34.     }
  35.     if (ya < ymin)
  36.     {
  37.         xa = xa + (long)(ymin - ya)*(xb - xa)/(yb - ya);
  38.         ya = ymin;
  39.     }
  40.     if (ya > ymax)
  41.     {
  42.         xa = xa + (long)(ymax - ya)*(xb - xa)/(yb - ya);
  43.         ya = ymax;
  44.     }
  45.     if (xb > xmax)
  46.     {
  47.         yb = ya + (long)(xmax - xa)*(yb - ya)/(xb - xa);
  48.         xb = xmax;
  49.     }
  50.     if (yb < ymin)
  51.     {
  52.         xb = xa + (long)(ymin - ya)*(xb - xa)/(yb - ya);
  53.         yb = ymin;
  54.     }
  55.     if (yb > ymax)
  56.     {
  57.         xb = xa + (long)(ymax - ya)*(xb - xa)/(yb - ya);
  58.         yb = ymax;
  59.     }
  60.     drawLine(xa,ya,xb,yb,color);
  61. }
  62.  
  63.  
  64.