home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Linux / Divers / freedraft.tar.gz / freedraft.tar / FREEdraft-050298 / GEOMLIB2D / pickgeom.cpp < prev    next >
C/C++ Source or Header  |  1998-04-19  |  4KB  |  114 lines

  1. // pickgeom.cpp
  2.  
  3.  
  4. // Copyright (C) 1998  Cliff Johnson                                       //
  5. //                                                                         //
  6. // This program is free software; you can redistribute it and/or           //
  7. // modify it under the terms of the GNU  General Public                    //
  8. // License as published by the Free Software Foundation; either            //
  9. // version 2 of the License, or (at your option) any later version.        //
  10. //                                                                         //
  11. // This software is distributed in the hope that it will be useful,        //
  12. // but WITHOUT ANY WARRANTY; without even the implied warranty of          //
  13. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU       //
  14. // General Public License for more details.                                //
  15. //                                                                         //
  16. // You should have received a copy of the GNU General Public License       //
  17. // along with this software (see COPYING.LIB); if not, write to the        //
  18. // Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. //
  19.  
  20. #include "pickgeom.h"
  21.  
  22.  
  23. #include"point.h"
  24. #include"line.h"
  25. #include"segment.h"
  26. #include"circle.h"
  27. #include"arc.h"
  28. #include"pick.h"
  29. #include"geomexception.h"
  30. #include"geom_enum.h"
  31.  
  32.  
  33. //***********************************************************************************
  34. Point GetPointFromPick(const Pick& p ) throw(GeomException) 
  35. {
  36.     if(p.Type() != POINT)
  37.         throw GeomException("GetPointFromPick() : Pick is not a point");
  38.     const Point* px;
  39.     if((px = dynamic_cast<const Point*>(p.PointsAt()))==0)
  40.         throw GeomException("GetPointFromPick() : Pick->const Point* dynamic_cast returns 0");
  41.     return Point(*px);
  42. }
  43.  
  44. //***********************************************************************************
  45. Line GetLineFromPick(const Pick& p) throw (GeomException)
  46. {
  47.     Line l;
  48.     if(p.Type() != LINE && p.Type() != SEGMENT)
  49.         throw GeomException("GetLineFromPick() : Pick is not a Segment or a Line");
  50.  
  51.     if(p.Type() == SEGMENT)
  52.     {
  53.         const Segment* sx;
  54.         if((sx = dynamic_cast<const Segment*>(p.PointsAt()))==0)
  55.             throw GeomException("GetLineFromPick() : Pick->const Segment* dynamic_cast returns 0");
  56.         l = (*sx).Support();
  57.     }
  58.     else             
  59.     {
  60.         const Line* lx;
  61.         if((lx = dynamic_cast<const Line*>(p.PointsAt()))==0)
  62.             throw GeomException("GetLineFromPick() : Pick->const Line* dynamic_cast returns 0");
  63.         l = Line(*lx);
  64.     }
  65.     return l;
  66. }
  67. //***********************************************************************************
  68. Segment GetSegmentFromPick(const Pick& p ) throw(GeomException) 
  69. {
  70.     if(p.Type() != SEGMENT)
  71.         throw GeomException("GetSegmentFromPick() : Pick is not a segment");
  72.     const Segment* sx;
  73.     if((sx = dynamic_cast<const Segment*>(p.PointsAt()))==0)
  74.         throw GeomException("GetPointFromPick() : Pick->const Segment* dynamic_cast returns 0");
  75.     return Segment(*sx);
  76. }
  77.  
  78. //***********************************************************************************
  79. Circle GetCircleFromPick(const Pick& p) throw (GeomException)
  80. {
  81.     if(p.Type() != CIRCLE && p.Type() != ARC)
  82.         throw GeomException("GetCircleFromPick() : Pick is not a Circle or an Arc");
  83.  
  84.     Circle c;
  85.     if(p.Type() == ARC){
  86.         const Arc* ax;
  87.         if((ax = dynamic_cast<const Arc*>(p.PointsAt()))==0)
  88.             throw GeomException("GetCircleFromPick() : Pick->const Arc* dynamic_cast returns 0");
  89.         c = (*ax).Support();
  90.     }
  91.     else             
  92.     {
  93.         const Circle* cx;
  94.         if((cx = dynamic_cast<const Circle*>(p.PointsAt()))==0)
  95.             throw GeomException("GetCircleFromPick() : Pick->const Circle* dynamic_cast returns 0");
  96.         c = Circle(*cx);
  97.     }
  98.     return c;
  99. }
  100.  
  101. //***********************************************************************************
  102.  
  103. Arc GetArcFromPick(const Pick& p )throw(GeomException) 
  104. {
  105.     if(p.Type() != ARC)
  106.         throw GeomException("GetArcFromPick() : Pick is not a segment");
  107.     const Arc* ax;
  108.     if((ax = dynamic_cast<const Arc*>(p.PointsAt()))==0)
  109.         throw GeomException("GetPointFromPick() : Pick->const Arc* dynamic_cast returns 0");
  110.     return Arc(*ax);
  111. }
  112.  
  113.  
  114.