QCAD
Open Source 2D CAD
Loading...
Searching...
No Matches
RLine.h
Go to the documentation of this file.
1
20#ifndef RLINE_H
21#define RLINE_H
22
23#include "../core_global.h"
24
25#include "RS.h"
26#include "RShape.h"
27#include "RVector.h"
28
29class RBox;
30class RPolyline;
31
42public:
43 RLine();
44 RLine(double x1, double y1, double x2, double y2);
45 RLine(const RVector& startPoint, const RVector& endPoint);
46 RLine(const RVector& startPoint, double angle, double distance);
47
48 virtual RShape::Type getShapeType() const {
49 return Line;
50 }
51
52 virtual QSharedPointer<RShape> clone() const {
53 return QSharedPointer<RShape>(new RLine(*this));
54 }
55
56 QSharedPointer<RLine> cloneToLine() const {
57 return QSharedPointer<RLine>(new RLine(*this));
58 }
59
60 virtual bool isDirected() const {
61 return true;
62 }
63
64 virtual void setZ(double z);
65
66 virtual QList<RVector> getVectorProperties() const;
67
68 virtual bool isValid() const;
69
70 virtual RBox getBoundingBox() const;
71
72 virtual QList<RVector> getEndPoints() const;
73 virtual QList<RVector> getMiddlePoints() const;
74 virtual QList<RVector> getCenterPoints() const;
75 virtual QList<RVector> getPointsWithDistanceToEnd(
76 double distance, int from = RS::FromAny) const;
77 virtual QList<RVector> getPointCloud(double segmentLength) const;
78
79 virtual double getAngleAt(double distance, RS::From from = RS::FromStart) const;
80
81 virtual RVector getVectorTo(const RVector& point,
82 bool limited = true, double strictRange = RMAXDOUBLE) const;
83
84 virtual RVector getStartPoint() const;
85 void setStartPoint(const RVector& vector);
86 virtual RVector getEndPoint() const;
87 void setEndPoint(const RVector& vector);
88
89 virtual RVector getMiddlePoint() const;
90
91 double getLength() const;
92 double getAngle() const;
93
94 void setLength(double l, bool fromStart = true);
95 void setAngle(double a);
96
97 bool isParallel(const RLine& line) const;
98 bool isCollinear(const RLine& line) const;
99
100 bool isVertical(double tolerance = RS::PointTolerance) const;
101 bool isHorizontal(double tolerance = RS::PointTolerance) const;
102
103 virtual double getDirection1() const;
104 virtual double getDirection2() const;
105
106 virtual RS::Side getSideOfPoint(const RVector& point) const;
107
108 void clipToXY(const RBox& box);
109
110 virtual bool move(const RVector& offset);
111 virtual bool rotate(double rotation, const RVector& center = RDEFAULT_RVECTOR);
112 virtual bool scale(const RVector& scaleFactors, const RVector& center = RDEFAULT_RVECTOR);
113 virtual bool mirror(const RLine& axis);
114 virtual bool flipHorizontal();
115 virtual bool flipVertical();
116 virtual bool reverse();
117 virtual bool stretch(const RPolyline& area, const RVector& offset);
118
119 virtual bool moveTo(const RVector& dest);
120
121 virtual QSharedPointer<RShape> getTransformed(const QTransform& transform) const;
122
123 virtual RS::Ending getTrimEnd(const RVector& trimPoint, const RVector& clickPoint);
124 virtual bool trimStartPoint(const RVector& trimPoint, const RVector& clickPoint = RVector::invalid, bool extend = false);
125 virtual bool trimEndPoint(const RVector& trimPoint, const RVector& clickPoint = RVector::invalid, bool extend = false);
126 virtual bool trimStartPoint(double trimDist) {
127 return RShape::trimStartPoint(trimDist);
128 }
129 virtual bool trimEndPoint(double trimDist) {
130 return RShape::trimEndPoint(trimDist);
131 }
132 virtual double getDistanceFromStart(const RVector& p) const;
133
134 virtual QList<QSharedPointer<RShape> > getOffsetShapes(double distance, int number, RS::Side side, const RVector& position = RVector::invalid) {
135 return RShape::getOffsetLines(*this, distance, number, side, position);
136 }
137
138 virtual QList<QSharedPointer<RShape> > splitAt(const QList<RVector>& points) const;
139
140#if QT_VERSION >= 0x060000
145 RLine copy() const {
146 return *this;
147 }
148#endif
149
150protected:
151 virtual void print(QDebug dbg) const;
152
153public:
164};
165
169Q_DECLARE_METATYPE(QSharedPointer<RLine>)
170Q_DECLARE_METATYPE(QSharedPointer<RLine>*)
171
172#endif
Q_DECLARE_METATYPE(RMath *)
#define RMAXDOUBLE
Definition RMath.h:66
#define RDEFAULT_RVECTOR
Definition RVector.h:38
Represents a box e.g.
Definition RBox.h:46
Low-level mathematical representation of a line.
Definition RLine.h:41
virtual bool trimEndPoint(double trimDist)
Definition RLine.h:129
virtual bool isDirected() const
Definition RLine.h:60
RVector startPoint
Getter function for this property: getStartPoint Setter function for this property: setStartPoint
Definition RLine.h:158
virtual RShape::Type getShapeType() const
Definition RLine.h:48
virtual QList< QSharedPointer< RShape > > getOffsetShapes(double distance, int number, RS::Side side, const RVector &position=RVector::invalid)
Definition RLine.h:134
QSharedPointer< RLine > cloneToLine() const
Definition RLine.h:56
virtual bool trimStartPoint(double trimDist)
Definition RLine.h:126
RVector endPoint
Getter function for this property: getEndPoint Setter function for this property: setEndPoint
Definition RLine.h:163
virtual QSharedPointer< RShape > clone() const
Definition RLine.h:52
Low-level mathematical representation of an open polyline or closed polyline (= polygon).
Definition RPolyline.h:50
From
End used to specify from which end of a shape to measure a distance.
Definition RS.h:371
@ FromStart
Definition RS.h:372
@ FromAny
Start or end.
Definition RS.h:374
static const double PointTolerance
Copyright (c) 2011-2018 by Andrew Mustun.
Definition RS.h:920
Side
Side used for side of a point relative to an entity (right hand or left hand side)
Definition RS.h:313
Ending
Entity ending.
Definition RS.h:323
Interface for geometrical shape classes.
Definition RShape.h:72
virtual bool isValid() const
Definition RShape.h:92
virtual double getDistanceFromStart(const RVector &p) const
Definition RShape.h:356
virtual RVector getVectorTo(const RVector &point, bool limited=true, double strictRange=RMAXDOUBLE) const =0
virtual QList< RVector > getPointCloud(double segmentLength) const =0
virtual bool trimStartPoint(const RVector &trimPoint, const RVector &clickPoint=RVector::invalid, bool extend=false)
Definition RShape.h:309
virtual RVector getStartPoint() const
Definition RShape.h:289
virtual bool stretch(const RBox &area, const RVector &offset)
Definition RShape.cpp:1741
virtual QList< RVector > getPointsWithDistanceToEnd(double distance, int from=RS::FromAny) const =0
virtual RVector getEndPoint() const
Definition RShape.h:292
virtual bool trimEndPoint(const RVector &trimPoint, const RVector &clickPoint=RVector::invalid, bool extend=false)
Definition RShape.h:328
Type
Definition RShape.h:74
@ Line
Definition RShape.h:77
virtual QList< RVector > getCenterPoints() const =0
virtual bool move(const RVector &offset)=0
virtual double getAngleAt(double distance, RS::From from=RS::FromStart) const
Definition RShape.h:249
virtual bool rotate(double rotation, const RVector &center=RDEFAULT_RVECTOR)=0
virtual void print(QDebug dbg) const
Definition RShape.cpp:1760
virtual QList< QSharedPointer< RShape > > splitAt(const QList< RVector > &points) const
Definition RShape.cpp:2234
virtual bool mirror(const RLine &axis)=0
virtual double getDirection1() const
Definition RShape.h:277
virtual QList< RVector > getEndPoints() const =0
virtual RVector getMiddlePoint() const
Definition RShape.h:295
virtual double getDirection2() const
Definition RShape.h:280
virtual RS::Side getSideOfPoint(const RVector &point) const
Definition RShape.h:284
virtual QList< RVector > getVectorProperties() const
Definition RShape.h:170
static QList< QSharedPointer< RShape > > getOffsetLines(const RShape &shape, double distance, int number, RS::Side side, const RVector &position=RVector::invalid)
Definition RShape.cpp:2070
virtual QList< RVector > getMiddlePoints() const =0
virtual bool flipHorizontal()
Definition RShape.cpp:1733
virtual bool reverse()
Definition RShape.h:299
virtual void setZ(double z)=0
virtual QSharedPointer< RShape > getTransformed(const QTransform &transform) const =0
virtual RBox getBoundingBox() const =0
virtual bool flipVertical()
Definition RShape.cpp:1737
virtual RS::Ending getTrimEnd(const RVector &trimPoint, const RVector &clickPoint)
Definition RShape.h:345
virtual bool scale(double scaleFactor, const RVector &center=RVector())
Definition RShape.cpp:1756
virtual double getLength() const =0
Represents a 3d vector (x/y/z).
Definition RVector.h:47
static const RVector invalid
invalid vector
Definition RVector.h:335
#define QCADCORE_EXPORT
Definition core_global.h:10