warper.h

Go to the documentation of this file.
00001 #ifndef RECTANGLE_WARPER_CLASS
00002 #define RECTANGLE_WARPER_CLASS
00003 
00004 /*****************************************************************************\
00005 *                                                                             *
00006 *  Name   : rectangle_warper                                                  *
00007 *  Author : Chris Koeritz                                                     *
00008 *                                                                             *
00009 *******************************************************************************
00010 * Copyright (c) 1992-$now By Author.  This program is free software; you can  *
00011 * redistribute it and/or modify it under the terms of the GNU General Public  *
00012 * License as published by the Free Software Foundation; either version 2 of   *
00013 * the License or (at your option) any later version.  This is online at:      *
00014 *     http://www.fsf.org/copyleft/gpl.html                                    *
00015 * Please send any updates to: fred@gruntose.com                               *
00016 \*****************************************************************************/
00017 
00019 
00028 #include "rectangle.h"
00029 
00030 namespace geometric {
00031 
00032 template <class numeric_type>
00033 class rectangle_warper
00034 {
00035 public:
00037 
00043   enum origin_vertex { BOTTOM_LEFT, TOP_LEFT, TOP_RIGHT, BOTTOM_RIGHT };
00044 
00045   rectangle_warper(const rectangle<numeric_type> &system_1,
00046           const rectangle<numeric_type> &system_2,
00047           origin_vertex system_1_origin = BOTTOM_LEFT,
00048           origin_vertex system_2_origin = BOTTOM_LEFT);
00050 
00054   ~rectangle_warper();
00055 
00056   point<numeric_type> to_system_1(const point<numeric_type> &in_system_2) const;
00058 
00062   point<numeric_type> to_system_2(const point<numeric_type> &in_system_1) const;
00064 
00068   rectangle<numeric_type> to_system_1
00069           (const rectangle<numeric_type> &in_system_2) const;
00071   rectangle<numeric_type> to_system_2
00072           (const rectangle<numeric_type> &in_system_1) const;
00074 
00075   rectangle<numeric_type> system_1() const { return _system_1; }
00076   rectangle<numeric_type> system_2() const { return _system_2; }
00077   origin_vertex origin_1() const { return _vert_1; }
00078   origin_vertex origin_2() const { return _vert_2; }
00079 
00080   void system_1(const rectangle<numeric_type> &to_set,
00081           origin_vertex origin_corner = BOTTOM_LEFT);
00082   void system_2(const rectangle<numeric_type> &to_set,
00083           origin_vertex origin_corner = BOTTOM_LEFT);
00084 
00085   istring text_form() const;
00087 
00088   istring vertex_name(origin_vertex v) const;
00090 
00091   enum vertical_component { RW_BOTTOM, RW_TOP };
00092   enum horizontal_component { RW_LEFT, RW_RIGHT };
00093 
00094   void separate_vertical(origin_vertex v, vertical_component &to_set) const;
00095   void separate_horizontal(origin_vertex v, horizontal_component &to_set) const;
00097 
00098 private:
00099   rectangle<numeric_type> _system_1;
00100   rectangle<numeric_type> _system_2;
00101   origin_vertex _vert_1;
00102   origin_vertex _vert_2;
00103 
00104   point<numeric_type> scale_point(const rectangle<numeric_type> &source,
00105           const rectangle<numeric_type> &target,
00106           origin_vertex v1, origin_vertex v2,
00107           const point<numeric_type> &old) const;
00108   rectangle<numeric_type> scale_rectangle(const rectangle<numeric_type> &source,
00109           const rectangle<numeric_type> &target,
00110           origin_vertex v1, origin_vertex v2,
00111           const rectangle<numeric_type> &old) const;
00112   rectangle<numeric_type> flip_accordingly
00113           (const rectangle<numeric_type> &to_flip, origin_vertex to_flip_origin,
00114           origin_vertex target_origin) const;
00116 
00119 };
00120 
00121 } // namespace.
00122 
00123 #endif
00124 

Generated on Fri Nov 28 04:29:15 2008 for HOOPLE Libraries by  doxygen 1.5.1