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

#include <geovector.h>

Inheritance diagram for lc::geo::Vector:
Collaboration diagram for lc::geo::Vector:

Public Member Functions

 Vector (const Coordinate &start, const Coordinate &end)
 
 Vector (const Vector &v)
 
const Coordinate start () const
 
const Coordinate end () const
 
Vectoroperator= (const Vector &v)
 
const Coordinate nearestPointOnPath (const Coordinate &coord) const
 
const Coordinate nearestPointOnEntity (const Coordinate &coord) const
 
double Angle1 () const
 
double Angle2 () const
 
const maths::Equation equation () const
 
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 _start
 
Coordinate _end
 

Friends

std::ostream & operator<< (std::ostream &os, const Vector &e)
 

Detailed Description

Definition at line 12 of file geovector.h.

Constructor & Destructor Documentation

lc::geo::Vector::Vector ( const Coordinate start,
const Coordinate end 
)
inlineexplicit

Definition at line 15 of file geovector.h.

15 : _start(start), _end(end) {}
const Coordinate end() const
Definition: geovector.h:23
Coordinate _end
Definition: geovector.h:130
Coordinate _start
Definition: geovector.h:129
const Coordinate start() const
Definition: geovector.h:20
lc::geo::Vector::Vector ( const Vector v)
inline

Definition at line 18 of file geovector.h.

18 : _start(v._start), _end(v._end) {}
Coordinate _end
Definition: geovector.h:130
Coordinate _start
Definition: geovector.h:129

Member Function Documentation

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

Implements lc::Visitable.

Reimplemented in lc::entity::Line.

Definition at line 121 of file geovector.h.

121 { v.visit(*this); }
double lc::geo::Vector::Angle1 ( ) const
inline

Use nearestPointOnEntity or nearestPointOnPath and test for the distance inline bool isCoordinateOnPath(const Coordinate& coord) const {

geo::Coordinate minP(Coordinate(std::min(_start.x()-LCTOLERANCE, _end.x()-LCTOLERANCE), std::min(_start.y()-LCTOLERANCE, _end.y()-LCTOLERANCE)));
geo::Coordinate maxP(Coordinate(std::max(_start.x()+LCTOLERANCE, _end.x()+LCTOLERANCE), std::max(_start.y()+LCTOLERANCE, _end.y()+LCTOLERANCE)));

bool inArea = (coord.x() >= minP.x() && coord.x() <= maxP.x() && coord.y() >= minP.y() && coord.y() <= maxP.y());

We might need a other cunction called 'isCoordinateOnEntity' and we use the below condition if (inArea && ((nearestPointOnPath(coord) - coord).magnitude() < LCTOLERANCE)) { return true; }

                if ((nearestPointOnPath(coord) - coord).magnitude() < LCTOLERANCE) {
                    return true;
                }

                return false;
            }                  
Returns
The angle of the line (from start to endpoint).

Definition at line 104 of file geovector.h.

104  {
105  return _start.angleTo(_end);
106  }
double angleTo(const Coordinate &v) const
Returns angle To the coordinate.
Definition: geocoordinate.h:77
Coordinate _end
Definition: geovector.h:130
Coordinate _start
Definition: geovector.h:129
double lc::geo::Vector::Angle2 ( ) const
inline
Returns
The angle of the line (from end to startpoint).

Definition at line 111 of file geovector.h.

111  {
112  return _end.angleTo(_start);
113  }
double angleTo(const Coordinate &v) const
Returns angle To the coordinate.
Definition: geocoordinate.h:77
Coordinate _end
Definition: geovector.h:130
Coordinate _start
Definition: geovector.h:129
const Coordinate lc::geo::Vector::end ( ) const
inline

Definition at line 23 of file geovector.h.

23  {
24  return _end;
25  }
Coordinate _end
Definition: geovector.h:130
const maths::Equation lc::geo::Vector::equation ( ) const
inline

Definition at line 115 of file geovector.h.

115  {
116  auto&& dvp = this->_end - this->_start;
117  geo::Coordinate normal(-dvp.y(), dvp.x());
118  return maths::Equation(0,0,0,normal.x(),normal.y(),- normal.dot(this->end()));
119  }
const Coordinate end() const
Definition: geovector.h:23
Coordinate _end
Definition: geovector.h:130
Coordinate _start
Definition: geovector.h:129
const Coordinate lc::geo::Vector::nearestPointOnEntity ( const Coordinate coord) const
inline

Return the nearest point on the entity

Definition at line 49 of file geovector.h.

49  {
50  const auto vpc = nearestPointOnPath(coord);
51  // Note, I could use Area for this but didn't want that dependency here
52  const geo::Coordinate minP(Coordinate(std::min(_start.x()- LCTOLERANCE, _end.x()- LCTOLERANCE), std::min(_start.y()-
53  LCTOLERANCE, _end.y()-
54  LCTOLERANCE)));
55  const geo::Coordinate maxP(Coordinate(std::max(_start.x()+ LCTOLERANCE, _end.x()+ LCTOLERANCE), std::max(_start.y()+
56  LCTOLERANCE, _end.y()+
57  LCTOLERANCE)));
58 
59  bool inArea = (vpc.x() >= minP.x() && vpc.x() <= maxP.x() && vpc.y() >= minP.y() && vpc.y() <= maxP.y());
60  if (inArea) {
61  return vpc;
62  } else {
63  const double dStart = coord.distanceTo(start());
64  const double dEnd = coord.distanceTo(end());
65  return dStart < dEnd?start():end();
66  }
67  }
const Coordinate end() const
Definition: geovector.h:23
double x() const
Returns x of Coordinate.
Definition: geocoordinate.h:26
double y() const
Returns y of Coordinate.
Definition: geocoordinate.h:34
Coordinate _end
Definition: geovector.h:130
const Coordinate nearestPointOnPath(const Coordinate &coord) const
Definition: geovector.h:39
#define LCTOLERANCE
Definition: const.h:6
Coordinate _start
Definition: geovector.h:129
const Coordinate start() const
Definition: geovector.h:20
const Coordinate lc::geo::Vector::nearestPointOnPath ( const Coordinate coord) const
inline

Return the neatrest point on the entities path

Definition at line 39 of file geovector.h.

39  {
40  Coordinate direction = this->end() - this->start();
41  Coordinate vpc = coord - this->start();
42  vpc = start() + direction * Coordinate(vpc).dot(direction) / direction.squared();
43  return vpc;
44  }
const Coordinate end() const
Definition: geovector.h:23
double dot(const Coordinate &coord) const
const Coordinate start() const
Definition: geovector.h:20
Vector& lc::geo::Vector::operator= ( const Vector v)
inline

Definition at line 27 of file geovector.h.

27  {
28  if (this != &v) {
29  _start = v._start;
30  _end = v._end;
31  }
32 
33  return *this;
34  }
Coordinate _end
Definition: geovector.h:130
Coordinate _start
Definition: geovector.h:129
const Coordinate lc::geo::Vector::start ( ) const
inline

Definition at line 20 of file geovector.h.

20  {
21  return _start;
22  }
Coordinate _start
Definition: geovector.h:129

Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream &  os,
const Vector e 
)
friend

Definition at line 124 of file geovector.h.

124  {
125  os << "Vector(start=" << e._start << " end=" << e._end << ")";
126  return os;
127  }

Member Data Documentation

Coordinate lc::geo::Vector::_end
private

Definition at line 130 of file geovector.h.

Coordinate lc::geo::Vector::_start
private

Definition at line 129 of file geovector.h.


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