home *** CD-ROM | disk | FTP | other *** search
/ Power Programming / powerprogramming1994.iso / progtool / microcrn / issue_44.arc / MICROCAD.ARC / SHAPELST.CPP < prev    next >
C/C++ Source or Header  |  1988-08-08  |  1KB  |  52 lines

  1. // Figure 12 for "A Little CAD with C++"
  2. // Copyright 1988 Bruce Eckel
  3. // Permission required to distribute source
  4.  
  5. // file: shapelst.cpp
  6. #include "shapelst.hpp"
  7.  
  8. cadshape * shapelist::next() {
  9.     cadshape * r = current->shp;
  10.     if ( r != (cadshape *)0 )
  11.         current = current->next;
  12.     return r;
  13. }
  14.  
  15. void shapelist::remove(cadshape * s) {
  16.     shapelist_element * pp = head, * qq;
  17.     if ( pp->shp == s) {  // check head
  18.         head = pp->next;
  19.         delete pp;
  20.     } else 
  21.     while ( pp->next->shp != 0 ) { 
  22.         // (the next element isn't the last)
  23.         if ( pp->next->shp == s) {
  24.             // unlink the matching element:
  25.             qq = pp->next;
  26.             pp->next = pp->next->next;
  27.             delete qq;
  28.             return;
  29.         }
  30.         pp++;
  31.     }
  32. }
  33.  
  34. // Find the nearest shape to co-ordinates (x,y) :
  35. cadshape * 
  36. shapelist::nearest(unsigned x, unsigned y) { 
  37.   cadshape * kk;
  38.   cadshape * cshape;
  39.   unsigned long distance;
  40.  
  41.   reset();  // start at beginning of list
  42.   cshape = next(); // test the first element
  43.   distance = cshape->range(x,y);
  44.   while ((kk = next()) != 0) {
  45.     if ( kk->range(x,y) < distance ) {
  46.        cshape = kk;
  47.        distance = cshape->range(x,y);
  48.     }
  49.   }
  50.   return cshape;
  51. }
  52.