degate  0.1.2
Rectangle.h
Go to the documentation of this file.
00001 /* -*-c++-*-
00002 
00003  This file is part of the IC reverse engineering tool degate.
00004 
00005  Copyright 2008, 2009, 2010 by Martin Schobert
00006  Copyright 2012 Robert Nitsch
00007 
00008  Degate is free software: you can redistribute it and/or modify
00009  it under the terms of the GNU General Public License as published by
00010  the Free Software Foundation, either version 3 of the License, or
00011  any later version.
00012 
00013  Degate is distributed in the hope that it will be useful,
00014  but WITHOUT ANY WARRANTY; without even the implied warranty of
00015  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016  GNU General Public License for more details.
00017 
00018  You should have received a copy of the GNU General Public License
00019  along with degate. If not, see <http://www.gnu.org/licenses/>.
00020 
00021 */
00022 
00023 #ifndef __RECTANGLE_H__
00024 #define __RECTANGLE_H__
00025 
00026 #include "BoundingBox.h"
00027 #include "DeepCopyable.h"
00028 #include "Shape.h"
00029 
00030 namespace degate {
00031 
00032   class Rectangle : public AbstractShape, public DeepCopyableBase {
00033 
00034   private:
00035     int min_x, max_x, min_y, max_y;
00036 
00037     BoundingBox bounding_box;
00038 
00039     void calculate_bounding_box();
00040 
00041   public:
00042 
00043     Rectangle();
00044 
00045     Rectangle(int min_x, int max_x, int min_y, int max_y);
00046     Rectangle(const Rectangle&);
00047 
00048     virtual ~Rectangle();
00049     
00050     void cloneDeepInto(DeepCopyable_shptr destination, oldnew_t *oldnew) const;
00051 
00052     virtual bool in_shape(int x, int y, int max_distance = 0) const;
00053     virtual bool in_bounding_box(BoundingBox const& bbox) const;
00054     virtual BoundingBox const& get_bounding_box() const;
00055 
00056     virtual bool operator==(const Rectangle& other) const;
00057     virtual bool operator!=(const Rectangle& other) const;
00058 
00059     virtual bool intersects(Rectangle const & rect) const;
00060     virtual bool complete_within(Rectangle const & rect) const;
00061 
00062     virtual unsigned int get_width() const;
00063     virtual unsigned int get_height() const;
00064 
00065     virtual int get_min_x() const;
00066     virtual int get_max_x() const;
00067     virtual int get_min_y() const;
00068     virtual int get_max_y() const;
00069 
00070     virtual int get_center_x() const;
00071     virtual int get_center_y() const;
00072 
00073     virtual void set_min_x(int min_x);
00074     virtual void set_min_y(int min_y);
00075     virtual void set_max_x(int max_x);
00076     virtual void set_max_y(int max_y);
00077 
00078     virtual void set_position(int min_x, int max_x, int min_y, int max_y);
00079 
00080     virtual void shift_x(int delta_x);
00081     virtual void shift_y(int delta_y);
00082 
00083   };
00084 
00085 }
00086 
00087 #endif