degate 0.1.1
Line.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 
00007  Degate is free software: you can redistribute it and/or modify
00008  it under the terms of the GNU General Public License as published by
00009  the Free Software Foundation, either version 3 of the License, or
00010  any later version.
00011 
00012  Degate is distributed in the hope that it will be useful,
00013  but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015  GNU General Public License for more details.
00016 
00017  You should have received a copy of the GNU General Public License
00018  along with degate. If not, see <http://www.gnu.org/licenses/>.
00019 
00020  */
00021 
00022 #ifndef __LINE_H__
00023 #define __LINE_H__
00024 
00025 #include <BoundingBox.h>
00026 #include <Shape.h>
00027 #include <Point.h>
00028 
00029 namespace degate {
00030 
00031   class Line : public AbstractShape {
00032 
00033   private:
00034     int from_x, from_y, to_x, to_y;
00035     unsigned int diameter;
00036 
00037     double d_x, d_y;
00038 
00039     BoundingBox bounding_box;
00040 
00041   private:
00042 
00043     /**
00044      * Recalulate the bounding box of a line.
00045      * If the line is either horizontally nor vertically
00046      * aligned, the bounding box corresponds exactly to
00047      * the area, the line spans. If the line is horizontal
00048      * or vertical, the bounding box also depends on the
00049      * diameter.
00050      */
00051     void calculate_bounding_box();
00052 
00053   public:
00054 
00055     Line();
00056     Line(int from_x, int from_y, int to_x, int to_y, unsigned int diameter);
00057 
00058     virtual ~Line() {}
00059 
00060     virtual bool in_shape(int x, int y, int max_distance = 0) const;
00061     virtual bool in_bounding_box(BoundingBox const& bbox) const;
00062     virtual BoundingBox const& get_bounding_box() const;
00063 
00064 
00065     virtual int get_from_x() const;
00066     virtual int get_to_x() const;
00067     virtual int get_from_y() const;
00068     virtual int get_to_y() const;
00069 
00070     virtual void set_from_x(int min_x);
00071     virtual void set_from_y(int min_y);
00072     virtual void set_to_x(int max_x);
00073     virtual void set_to_y(int max_y);
00074 
00075     virtual void shift_x(int delta_x);
00076     virtual void shift_y(int delta_y);
00077 
00078     virtual unsigned int get_diameter() const;
00079     virtual void set_diameter(unsigned int diameter);
00080 
00081     virtual bool is_vertical() const;
00082     virtual bool is_horizontal() const;
00083 
00084     virtual unsigned int get_length() const;
00085 
00086     virtual Point get_p1() const;
00087     virtual Point get_p2() const;
00088 
00089     virtual void set_p1(Point const& p);
00090     virtual void set_p2(Point const& p);
00091 
00092   };
00093 
00094 }
00095 
00096 #endif