QCAD
Open Source 2D CAD
Loading...
Searching...
No Matches
RArc.h
Go to the documentation of this file.
1
20#ifndef RARC_H
21#define RARC_H
22
23#include "../core_global.h"
24
25#include "RShape.h"
26#include "RVector.h"
27#include "RArcProxy.h"
28
29class RBox;
30class RLine;
31class RPolyline;
32
43public:
44 RArc();
45 RArc(double cx, double cy, double radius, double startAngle,
46 double endAngle, bool reversed = false);
47 RArc(const RVector& center, double radius, double startAngle,
48 double endAngle, bool reversed = false);
49
50 virtual RShape::Type getShapeType() const {
51 return Arc;
52 }
53
54 virtual QSharedPointer<RShape> clone() const {
55 return QSharedPointer<RShape>(new RArc(*this));
56 }
57
58 QSharedPointer<RArc> cloneToArc() const {
59 return QSharedPointer<RArc>(new RArc(*this));
60 }
61
62 virtual bool isDirected() const {
63 return true;
64 }
65
66 virtual void setZ(double z);
67
68 virtual QList<RVector> getVectorProperties() const;
69 virtual QList<double> getDoubleProperties() const;
70 virtual QList<bool> getBoolProperties() const;
71
72 virtual bool isValid() const;
73 bool isFullCircle(double tolerance = RS::AngleTolerance) const;
74
75 static RArc createFrom3Points(const RVector& startPoint,
76 const RVector& point,
77 const RVector& endPoint);
78 static RArc createFrom2PBulge(const RVector& startPoint,
79 const RVector& endPoint,
80 double bulge);
81 static RArc createTangential(const RVector& startPoint,
82 const RVector& pos,
83 double direction,
84 double radius = 0.0,
85 double sweep = 0.0);
86 static QList<RArc> createBiarc(const RVector& startPoint, double startDirection,
87 const RVector& endPoint, double endDirection, bool secondTry = false);
88
89 virtual RBox getBoundingBox() const;
90
91 virtual QList<RVector> getEndPoints() const;
92 virtual QList<RVector> getMiddlePoints() const;
93 virtual QList<RVector> getCenterPoints() const;
94 virtual QList<RVector> getArcReferencePoints() const;
95 virtual QList<RVector> getPointsWithDistanceToEnd(
96 double distance, int from = RS::FromAny) const;
97 virtual QList<RVector> getPointCloud(double segmentLength) const;
98
99 virtual RVector getVectorTo(const RVector& point,
100 bool limited = true, double strictRange = RMAXDOUBLE) const;
101
102 RVector getCenter() const;
103 void setCenter(const RVector& vector);
104 double getRadius() const;
105 void setRadius(double radius);
106 double getStartAngle() const;
107 void setStartAngle(double startAngle);
108 double getEndAngle() const;
109 void setEndAngle(double endAngle);
110 bool isReversed() const;
111 void setReversed(bool reversed);
112 double getAngleLength(bool allowForZeroLength = false) const;
113 bool isAngleWithinArc(double a) const {
114 return RMath::isAngleBetween(a, startAngle, endAngle, reversed);
115 }
116
117 double getDiameter() const;
118 void setDiameter(double d);
119 void setLength(double l);
120 double getArea() const;
121 void setArea(double a);
122 double getChordArea() const;
123
124 virtual double getDirection1() const;
125 virtual double getDirection2() const;
126
127 virtual RS::Side getSideOfPoint(const RVector& point) const;
128
129 double getSweep() const;
130 void setSweep(double s);
131 double getLength() const;
132
133 virtual RVector getStartPoint() const;
134 virtual RVector getEndPoint() const;
135 RVector getPointAtAngle(double a) const;
136 virtual double getAngleAt(double distance, RS::From from = RS::FromStart) const;
137 virtual RVector getMiddlePoint() const;
138
139 void moveStartPoint(const RVector& pos, bool keepRadius = true);
140 void moveEndPoint(const RVector& pos, bool keepRadius = true);
141 void moveMiddlePoint(const RVector& pos);
142 double getBulge() const;
143
144 virtual bool move(const RVector& offset);
145 virtual bool rotate(double rotation, const RVector& center = RDEFAULT_RVECTOR);
146 virtual bool scale(const RVector& scaleFactors, const RVector& center = RDEFAULT_RVECTOR);
147 virtual bool mirror(const RLine& axis);
148 virtual bool reverse();
149 virtual bool stretch(const RPolyline& area, const RVector& offset);
150
151 virtual QSharedPointer<RShape> getTransformed(const QTransform& transform) const;
152
153 virtual RS::Ending getTrimEnd(const RVector& trimPoint, const RVector& clickPoint);
154 virtual bool trimStartPoint(const RVector& trimPoint, const RVector& clickPoint = RVector::invalid, bool extend = false);
155 virtual bool trimEndPoint(const RVector& trimPoint, const RVector& clickPoint = RVector::invalid, bool extend = false);
156 virtual bool trimStartPoint(double trimDist) {
157 return RShape::trimStartPoint(trimDist);
158 }
159 virtual bool trimEndPoint(double trimDist) {
160 return RShape::trimEndPoint(trimDist);
161 }
162 virtual double getDistanceFromStart(const RVector& p) const;
163
164 RPolyline approximateWithLines(double segmentLength, double angle = 0.0) const;
165 RPolyline approximateWithLinesTan(double segmentLength, double angle = 0.0) const;
166
167 QList<RLine> getTangents(const RVector& point) const;
168
169 virtual QList<QSharedPointer<RShape> > getOffsetShapes(double distance, int number, RS::Side side, const RVector& position = RVector::invalid) {
170 return RShape::getOffsetArcs(*this, distance, number, side, position);
171 }
172
173 virtual QList<QSharedPointer<RShape> > splitAt(const QList<RVector>& points) const;
174
175 QList<RArc> splitAtQuadrantLines() const;
176
177 static bool hasProxy() {
178 return arcProxy!=NULL;
179 }
180
184 static void setArcProxy(RArcProxy* p) {
185 if (arcProxy!=NULL) {
186 delete arcProxy;
187 }
188 arcProxy = p;
189 }
190
195 return arcProxy;
196 }
197
198#if QT_VERSION >= 0x060000
203 RArc copy() const {
204 return *this;
205 }
206#endif
207
208protected:
209 virtual void print(QDebug dbg) const;
210
211private:
213
214public:
224 double radius;
234 double endAngle;
240};
241
245Q_DECLARE_METATYPE(QSharedPointer<RArc>)
246Q_DECLARE_METATYPE(QSharedPointer<RArc>*)
247
248#endif
Q_DECLARE_METATYPE(RMath *)
#define RMAXDOUBLE
Definition RMath.h:66
#define RDEFAULT_RVECTOR
Definition RVector.h:38
Low-level mathematical representation of an arc.
Definition RArc.h:42
virtual QSharedPointer< RShape > clone() const
Definition RArc.h:54
double radius
Getter function for this property: getRadius Setter function for this property: setRadius
Definition RArc.h:224
bool reversed
Getter function for this property: isReversed Setter function for this property: setReversed
Definition RArc.h:239
virtual bool trimStartPoint(double trimDist)
Definition RArc.h:156
QSharedPointer< RArc > cloneToArc() const
Definition RArc.h:58
virtual bool isDirected() const
Definition RArc.h:62
bool isAngleWithinArc(double a) const
Definition RArc.h:113
virtual QList< QSharedPointer< RShape > > getOffsetShapes(double distance, int number, RS::Side side, const RVector &position=RVector::invalid)
Definition RArc.h:169
static void setArcProxy(RArcProxy *p)
Definition RArc.h:184
double startAngle
Getter function for this property: getStartAngle Setter function for this property: setStartAngle
Definition RArc.h:229
RVector center
Getter function for this property: getCenter Setter function for this property: setCenter
Definition RArc.h:219
static RArcProxy * getArcProxy()
Definition RArc.h:194
static bool hasProxy()
Definition RArc.h:177
virtual bool trimEndPoint(double trimDist)
Definition RArc.h:159
double endAngle
Getter function for this property: getEndAngle Setter function for this property: setEndAngle
Definition RArc.h:234
static RArcProxy * arcProxy
Copyright (c) 2011-2018 by Andrew Mustun.
Definition RArc.h:212
virtual RShape::Type getShapeType() const
Definition RArc.h:50
Proxy for advanced arc functionality.
Definition RArcProxy.h:37
Represents a box e.g.
Definition RBox.h:46
Low-level mathematical representation of a line.
Definition RLine.h:41
static bool isAngleBetween(double a, double a1, double a2, bool reversed)
Tests if angle a is between a1 and a2.
Definition RMath.cpp:683
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 AngleTolerance
Definition RS.h:921
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 > getArcReferencePoints() const
Definition RShape.h:216
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
@ Arc
Definition RShape.h:78
virtual QList< RVector > getCenterPoints() const =0
virtual bool move(const RVector &offset)=0
virtual QList< double > getDoubleProperties() const
Definition RShape.h:172
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
virtual QList< RVector > getMiddlePoints() const =0
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
static QList< QSharedPointer< RShape > > getOffsetArcs(const RShape &shape, double distance, int number, RS::Side side, const RVector &position=RVector::invalid)
Definition RShape.cpp:2114
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 QList< bool > getBoolProperties() const
Definition RShape.h:173
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
char s
Definition opennurbs_string.cpp:32
#define NULL
Definition opennurbs_system.h:256