LibreCAD
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
lc::geo::Area Class Reference

#include <geoarea.h>

Inheritance diagram for lc::geo::Area:
Collaboration diagram for lc::geo::Area:

Public Member Functions

 Area (const Coordinate &coordA, const Coordinate &coordB)
 
 Area ()
 
 Area (const Coordinate &coord, double width, double height)
 Area given at a coordinate with a given width and height. More...
 
Areaoperator= (const Area &other)
 
const Coordinate minP () const
 
const Coordinate maxP () const
 
double width () const
 width Returns the width of this area More...
 
double height () const
 height Returns the height of this area More...
 
bool inArea (const Coordinate &point, double tolerance=0.) const
 Test of a specific point lies within area. More...
 
bool inArea (const Area &area) const
 inArea test if this object's fits fully in area More...
 
bool overlaps (const Area &otherArea) const
 overlaps returns true if any overlap is happening between the two area's, even if otherArea fits within this area More...
 
short numCornersInside (const Area &otherArea) const
 numCornersInside count the number of corners this object has in otherArea More...
 
Area merge (const Area &other) const
 merge two area's and expand if required to largest containing area More...
 
Area merge (const Coordinate &other) const
 merge two area's and expand if required to largest containing area More...
 
Area intersection (const Area &other, double tolerance=0.) const
 merge two area's and expand if required to largest containing area More...
 
Vector top () const
 top vector of this area More...
 
Vector left () const
 left vector for this area More...
 
Vector bottom () const
 bottom vector of this area More...
 
Area increaseBy (double increaseBy) const
 
bool operator== (const Area &ar) const
 checks for the equality of Area More...
 
Vector right () const
 right vector of this area More...
 
virtual void accept (GeoEntityVisitor &v) const override
 
- Public Member Functions inherited from lc::geo::Base
virtual ~Base ()=default
 
- Public Member Functions inherited from lc::Visitable
virtual ~Visitable ()=default
 

Private Attributes

Coordinate _minP
 
Coordinate _maxP
 

Friends

std::ostream & operator<< (std::ostream &os, const Area &area)
 

Detailed Description

Class that describes an area or window.

Definition at line 15 of file geoarea.h.

Constructor & Destructor Documentation

lc::geo::Area::Area ( const Coordinate coordA,
const Coordinate coordB 
)
inlineexplicit

Create a new Area. The coordinates coordA and coordB will be ordered so that minP will always be < maxP The coordinates are not allowed to describe a volume

Parameters
CoordAFirst coordinate of a area
CoordBSecond coordinate of a area

Definition at line 24 of file geoarea.h.

24  :
25  _minP(Coordinate(std::min(coordA.x(), coordB.x()), std::min(coordA.y(), coordB.y()), std::min(coordA.z(), coordB.z()))),
26  _maxP(Coordinate(std::max(coordA.x(), coordB.x()), std::max(coordA.y(), coordB.y()), std::max(coordA.z(), coordB.z()))) {
27  if (coordA.x() != coordB.x() && coordA.y() != coordB.y() && coordA.z() != coordB.z()) {
28  throw "Points describe a volume, not a area.";
29  }
30 
31  }
Coordinate _minP
Definition: geoarea.h:255
Coordinate _maxP
Definition: geoarea.h:256
lc::geo::Area::Area ( )
inlineexplicit

Definition at line 33 of file geoarea.h.

33  : _minP(0., 0.), _maxP(0., 0.) {
34  }
Coordinate _minP
Definition: geoarea.h:255
Coordinate _maxP
Definition: geoarea.h:256
lc::geo::Area::Area ( const Coordinate coord,
double  width,
double  height 
)
inlineexplicit

Area given at a coordinate with a given width and height.

Parameters
coordA
width
height

Definition at line 43 of file geoarea.h.

43  : Area(coord, Coordinate(coord.x() + width, coord.y() + height)) {
44  }
double height() const
height Returns the height of this area
Definition: geoarea.h:85
double width() const
width Returns the width of this area
Definition: geoarea.h:76

Member Function Documentation

virtual void lc::geo::Area::accept ( GeoEntityVisitor v) const
inlineoverridevirtual

Implements lc::Visitable.

Definition at line 246 of file geoarea.h.

246 { v.visit(*this); }
Vector lc::geo::Area::bottom ( ) const
inline

bottom vector of this area

Returns

Definition at line 216 of file geoarea.h.

216  {
217  return Vector(Coordinate(_minP.x(), _minP.y()), Coordinate(_maxP.x(), _minP.y()));
218  }
double x() const
Returns x of Coordinate.
Definition: geocoordinate.h:26
Coordinate _minP
Definition: geoarea.h:255
double y() const
Returns y of Coordinate.
Definition: geocoordinate.h:34
Coordinate _maxP
Definition: geoarea.h:256
double lc::geo::Area::height ( ) const
inline

height Returns the height of this area

Returns

Definition at line 85 of file geoarea.h.

85  {
86  return _maxP.y() - _minP.y();
87  }
Coordinate _minP
Definition: geoarea.h:255
double y() const
Returns y of Coordinate.
Definition: geocoordinate.h:34
Coordinate _maxP
Definition: geoarea.h:256
bool lc::geo::Area::inArea ( const Coordinate point,
double  tolerance = 0. 
) const
inline

Test of a specific point lies within area.

Parameters
pointPoint to test against
Returns
boolean true of the point is within the area

Definition at line 94 of file geoarea.h.

94  {
95  return (point.x() >= _minP.x() - tolerance && point.x() <= _maxP.x() + tolerance && point.y() >= _minP.y() - tolerance && point.y() <= _maxP.y() + tolerance);
96  }
double x() const
Returns x of Coordinate.
Definition: geocoordinate.h:26
Coordinate _minP
Definition: geoarea.h:255
double y() const
Returns y of Coordinate.
Definition: geocoordinate.h:34
Coordinate _maxP
Definition: geoarea.h:256
bool lc::geo::Area::inArea ( const Area area) const
inline

inArea test if this object's fits fully in area

Parameters
area
Returns

Definition at line 104 of file geoarea.h.

104  {
105  return _minP.x() >= area._minP.x() && _minP.y() >= area._minP.y() && _maxP.x() <= area._maxP.x() && _maxP.y() <= area._maxP.y();
106  }
double x() const
Returns x of Coordinate.
Definition: geocoordinate.h:26
Coordinate _minP
Definition: geoarea.h:255
double y() const
Returns y of Coordinate.
Definition: geocoordinate.h:34
Coordinate _maxP
Definition: geoarea.h:256
Area lc::geo::Area::increaseBy ( double  increaseBy) const
inline

Increase the area on each side by increaseBy

Definition at line 223 of file geoarea.h.

223  {
224  return Area(geo::Coordinate(_minP.x() - increaseBy, _minP.y() - increaseBy, _minP.z()),
225  geo::Coordinate(_maxP.x() + increaseBy, _maxP.y() + increaseBy, _maxP.z()));
226  }
double x() const
Returns x of Coordinate.
Definition: geocoordinate.h:26
Area increaseBy(double increaseBy) const
Definition: geoarea.h:223
Coordinate _minP
Definition: geoarea.h:255
double y() const
Returns y of Coordinate.
Definition: geocoordinate.h:34
double z() const
Returns z of Coordinate.
Definition: geocoordinate.h:42
Coordinate _maxP
Definition: geoarea.h:256
Area lc::geo::Area::intersection ( const Area other,
double  tolerance = 0. 
) const
inline

merge two area's and expand if required to largest containing area

Parameters
other
tolerance,toleranceto detect zero size intersection
Returns

Definition at line 181 of file geoarea.h.

181  {
182  Area ret(
183  Coordinate(std::max(other.minP().x(), this->minP().x()), std::max(other.minP().y(), this->minP().y())),
184  Coordinate(std::min(other.maxP().x(), this->maxP().x()), std::min(other.maxP().y(), this->maxP().y())));
185 
186  if (ret.width() < tolerance || ret.height() < tolerance) {
187  return Area();
188  }
189 
190  return ret;
191  }
const Coordinate minP() const
Definition: geoarea.h:60
double x() const
Returns x of Coordinate.
Definition: geocoordinate.h:26
double y() const
Returns y of Coordinate.
Definition: geocoordinate.h:34
const Coordinate maxP() const
Definition: geoarea.h:67
Vector lc::geo::Area::left ( ) const
inline

left vector for this area

Returns

Definition at line 207 of file geoarea.h.

207  {
208  return Vector(Coordinate(_minP.x(), _minP.y()), Coordinate(_minP.x(), _maxP.y()));
209  }
double x() const
Returns x of Coordinate.
Definition: geocoordinate.h:26
Coordinate _minP
Definition: geoarea.h:255
double y() const
Returns y of Coordinate.
Definition: geocoordinate.h:34
Coordinate _maxP
Definition: geoarea.h:256
const Coordinate lc::geo::Area::maxP ( ) const
inline

Return the highest corner

Definition at line 67 of file geoarea.h.

67  {
68  return _maxP;
69  }
Coordinate _maxP
Definition: geoarea.h:256
Area lc::geo::Area::merge ( const Area other) const
inline

merge two area's and expand if required to largest containing area

Parameters
other
Returns

Definition at line 156 of file geoarea.h.

156  {
157  return Area(
158  Coordinate(std::min(other.minP().x(), this->minP().x()), std::min(other.minP().y(), this->minP().y())),
159  Coordinate(std::max(other.maxP().x(), this->maxP().x()), std::max(other.maxP().y(), this->maxP().y())));
160  }
const Coordinate minP() const
Definition: geoarea.h:60
double x() const
Returns x of Coordinate.
Definition: geocoordinate.h:26
double y() const
Returns y of Coordinate.
Definition: geocoordinate.h:34
const Coordinate maxP() const
Definition: geoarea.h:67
Area lc::geo::Area::merge ( const Coordinate other) const
inline

merge two area's and expand if required to largest containing area

Parameters
other
Returns

Definition at line 168 of file geoarea.h.

168  {
169  return Area(
170  Coordinate(std::min(other.x(), this->minP().x()), std::min(other.y(), this->minP().y())),
171  Coordinate(std::max(other.x(), this->maxP().x()), std::max(other.y(), this->maxP().y())));
172  }
const Coordinate minP() const
Definition: geoarea.h:60
double x() const
Returns x of Coordinate.
Definition: geocoordinate.h:26
double y() const
Returns y of Coordinate.
Definition: geocoordinate.h:34
const Coordinate maxP() const
Definition: geoarea.h:67
const Coordinate lc::geo::Area::minP ( ) const
inline

Return the smallest corner (closest to (0,0,0) )

Definition at line 60 of file geoarea.h.

60  {
61  return _minP;
62  }
Coordinate _minP
Definition: geoarea.h:255
short lc::geo::Area::numCornersInside ( const Area otherArea) const
inline

numCornersInside count the number of corners this object has in otherArea

Parameters
other
Returns

Definition at line 128 of file geoarea.h.

128  {
129  short pointsInside = 0;
130 
131  if (otherArea.inArea(_minP)) {
132  pointsInside++;
133  }
134 
135  if (otherArea.inArea(_maxP)) {
136  pointsInside++;
137  }
138 
139  if (otherArea.inArea(Coordinate(_minP.x(), _maxP.y()))) {
140  pointsInside++;
141  }
142 
143  if (otherArea.inArea(Coordinate(_maxP.x(), _minP.y()))) {
144  pointsInside++;
145  }
146 
147  return pointsInside;
148  }
double x() const
Returns x of Coordinate.
Definition: geocoordinate.h:26
Coordinate _minP
Definition: geoarea.h:255
double y() const
Returns y of Coordinate.
Definition: geocoordinate.h:34
Coordinate _maxP
Definition: geoarea.h:256
Area& lc::geo::Area::operator= ( const Area other)
inline

Definition at line 48 of file geoarea.h.

48  {
49  if (this != &other) {
50  _minP = other._minP;
51  _maxP = other._maxP;
52  }
53 
54  return *this;
55  }
Coordinate _minP
Definition: geoarea.h:255
Coordinate _maxP
Definition: geoarea.h:256
bool lc::geo::Area::operator== ( const Area ar) const
inline

checks for the equality of Area

Parameters
Area
Returns
bool equality

Definition at line 232 of file geoarea.h.

232  {
233  return this->minP() == ar.minP() && this->maxP() == ar.maxP();
234  }
const Coordinate minP() const
Definition: geoarea.h:60
const Coordinate maxP() const
Definition: geoarea.h:67
bool lc::geo::Area::overlaps ( const Area otherArea) const
inline

overlaps returns true if any overlap is happening between the two area's, even if otherArea fits within this area

Parameters
other
Returns

Definition at line 114 of file geoarea.h.

114  {
115  if (otherArea._maxP.x() < _minP.x() || otherArea._minP.x() > _maxP.x() || otherArea._maxP.y() < _minP.y() || otherArea._minP.y() > _maxP.y()) {
116  return false;
117  } else {
118  return true;
119  }
120  }
double x() const
Returns x of Coordinate.
Definition: geocoordinate.h:26
Coordinate _minP
Definition: geoarea.h:255
double y() const
Returns y of Coordinate.
Definition: geocoordinate.h:34
Coordinate _maxP
Definition: geoarea.h:256
Vector lc::geo::Area::right ( ) const
inline

right vector of this area

Returns

Definition at line 242 of file geoarea.h.

242  {
243  return Vector(Coordinate(_maxP.x(), _minP.y()), Coordinate(_maxP.x(), _maxP.y()));
244  }
double x() const
Returns x of Coordinate.
Definition: geocoordinate.h:26
Coordinate _minP
Definition: geoarea.h:255
double y() const
Returns y of Coordinate.
Definition: geocoordinate.h:34
Coordinate _maxP
Definition: geoarea.h:256
Vector lc::geo::Area::top ( ) const
inline

top vector of this area

Returns

Definition at line 198 of file geoarea.h.

198  {
199  return Vector(Coordinate(_minP.x(), _maxP.y()), Coordinate(_maxP.x(), _maxP.y()));
200  }
double x() const
Returns x of Coordinate.
Definition: geocoordinate.h:26
Coordinate _minP
Definition: geoarea.h:255
double y() const
Returns y of Coordinate.
Definition: geocoordinate.h:34
Coordinate _maxP
Definition: geoarea.h:256
double lc::geo::Area::width ( ) const
inline

width Returns the width of this area

Returns

Definition at line 76 of file geoarea.h.

76  {
77  return _maxP.x() - _minP.x();
78  }
double x() const
Returns x of Coordinate.
Definition: geocoordinate.h:26
Coordinate _minP
Definition: geoarea.h:255
Coordinate _maxP
Definition: geoarea.h:256

Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream &  os,
const Area area 
)
friend

Definition at line 249 of file geoarea.h.

249  {
250  os << "Area(" << area.minP() << " " << area.maxP() << ")";
251  return os;
252  }

Member Data Documentation

Coordinate lc::geo::Area::_maxP
private

Definition at line 256 of file geoarea.h.

Coordinate lc::geo::Area::_minP
private

Definition at line 255 of file geoarea.h.


The documentation for this class was generated from the following file: