QCAD
Open Source 2D CAD
Loading...
Searching...
No Matches
RArcData.h
Go to the documentation of this file.
1
20#ifndef RARCDATA_H
21#define RARCDATA_H
22
23#include "entity_global.h"
24
25#include "RBox.h"
26#include "REntityData.h"
27#include "RVector.h"
28#include "RPolyline.h"
29#include "RArc.h"
30
31class RDocument;
32class REntity;
33class RLine;
34class RRefPoint;
35class RPolyline;
36
46
47 friend class RArcEntity;
48
49protected:
50 RArcData(RDocument* document, const RArcData& data);
51
52public:
53 RArcData();
54 RArcData(const RArc& arc);
55 RArcData(const RVector& center, double radius, double startAngle,
56 double endAngle, bool reversed = false);
57
58 virtual RS::EntityType getType() const {
59 return RS::EntityArc;
60 }
62 return *this;
63 }
64
65
66 bool isValid() const {
67 return RArc::isValid();
68 }
69 virtual QList<RVector> getEndPoints(const RBox& queryBox = RDEFAULT_RBOX, QList<RObject::Id>* subEntityIds = NULL) const {
70 return REntityData::getEndPoints(queryBox, subEntityIds);
71 }
72 virtual void setZ(double z) {
73 RArc::setZ(z);
74 }
75 virtual void to2D() {
76 RArc::to2D();
77 }
78 virtual RBox getBoundingBox(bool ignoreEmpty=false) const {
80 }
81 virtual QList<RVector> getMiddlePoints(const RBox& queryBox = RDEFAULT_RBOX, QList<RObject::Id>* subEntityIds = NULL) const {
82 return REntityData::getMiddlePoints(queryBox, subEntityIds);
83 }
84 virtual QList<RVector> getCenterPoints(const RBox& queryBox = RDEFAULT_RBOX, QList<RObject::Id>* subEntityIds = NULL) const {
85 return REntityData::getCenterPoints(queryBox, subEntityIds);
86 }
87 virtual QList<RVector> getArcReferencePoints(const RBox& queryBox = RDEFAULT_RBOX) const {
89 }
90 virtual QList<RVector> getPointsWithDistanceToEnd(double distance, int from = RS::FromAny, const RBox& queryBox = RDEFAULT_RBOX, QList<RObject::Id>* subEntityIds = NULL) const {
91 return REntityData::getPointsWithDistanceToEnd(distance, from, queryBox, subEntityIds);
92 }
93 virtual QList<RVector> getIntersectionPoints(const REntityData& other, bool limited = true, bool same = false, const RBox& queryBox = RDEFAULT_RBOX, bool ignoreComplex = true, QList<QPair<RObject::Id, RObject::Id> >* entityIds = NULL) const {
94 return REntityData::getIntersectionPoints(other, limited, same, queryBox, ignoreComplex, entityIds);
95 }
96 virtual QList<RVector> getIntersectionPoints(const RShape& shape, bool limited = true, const RBox& queryBox = RDEFAULT_RBOX, bool ignoreComplex = true) const {
97 return REntityData::getIntersectionPoints(shape, limited, queryBox, ignoreComplex);
98 }
99 virtual RVector getVectorTo(const RVector& point, bool limited=true, double strictRange = RMAXDOUBLE) const {
100 return REntityData::getVectorTo(point, limited, strictRange);
101 }
102 virtual double getDistanceTo(const RVector& point, bool limited = true, double range = 0.0, bool draft = false, double strictRange = RMAXDOUBLE) const {
103 return REntityData::getDistanceTo(point, limited, range, draft, strictRange);
104 }
105 virtual bool intersectsWith(const RShape& shape) const {
106 return REntityData::intersectsWith(shape);
107 }
108 virtual bool move(const RVector& offset) {
109 return RArc::move(offset);
110 }
111 virtual bool rotate(double rotation, const RVector& center = RDEFAULT_RVECTOR) {
112 return RArc::rotate(rotation, center);
113 }
114 virtual bool scale(const RVector& scaleFactors, const RVector& center = RDEFAULT_RVECTOR) {
115 return RArc::scale(scaleFactors, center);
116 }
117 virtual bool mirror(const RLine& axis) {
118 return RArc::mirror(axis);
119 }
120 virtual bool mirror(const RVector& axis1, const RVector& axis2) {
121 return REntityData::mirror(axis1, axis2);
122 }
123 virtual bool flipHorizontal() {
125 }
126 virtual bool flipVertical() {
128 }
129 virtual bool stretch(const RPolyline& area, const RVector& offset) {
130 return RArc::stretch(area, offset);
131 }
132
133
135 return RArc::getCenter();
136 }
137 double getRadius() const {
138 return RArc::getRadius();
139 }
140 double getBulge() const {
141 return RArc::getBulge();
142 }
143 double getStartAngle() const {
144 return RArc::getStartAngle();
145 }
146 double getEndAngle() const {
147 return RArc::getEndAngle();
148 }
149 bool isReversed() const {
150 return RArc::isReversed();
151 }
152 double getDirection1() const {
153 return RArc::getDirection1();
154 }
155 double getDirection2() const {
156 return RArc::getDirection2();
157 }
158 bool reverse() {
159 return RArc::reverse();
160 }
161
162 RS::Ending getTrimEnd(const RVector& trimPoint, const RVector& clickPoint) {
163 return RArc::getTrimEnd(trimPoint, clickPoint);
164 }
165 bool trimStartPoint(const RVector& trimPoint, const RVector& clickPoint = RVector::invalid, bool extend = false) {
166 return RArc::trimStartPoint(trimPoint, clickPoint, extend);
167 }
168 bool trimEndPoint(const RVector& trimPoint, const RVector& clickPoint = RVector::invalid, bool extend = false) {
169 return RArc::trimEndPoint(trimPoint, clickPoint, extend);
170 }
171
172 double getLength() const {
173 return RArc::getLength();
174 }
175 double getAngleLength(bool allowForZeroLength = false) const {
176 return RArc::getAngleLength(allowForZeroLength);
177 }
178
179 virtual QList<RRefPoint> getReferencePoints(RS::ProjectionRenderingHint hint = RS::RenderTop) const;
180
181 virtual bool moveReferencePoint(const RVector& referencePoint, const RVector& targetPoint, Qt::KeyboardModifiers modifiers = Qt::NoModifier);
182
183 RPolyline approximateWithLines(double segmentLength) {
184 return RArc::approximateWithLines(segmentLength);
185 }
186
187 virtual RShape* castToShape() {
188 return this;
189 }
190
191 virtual QList<QSharedPointer<RShape> > getShapes(const RBox& queryBox = RDEFAULT_RBOX, bool ignoreComplex = false, bool segment = false, QList<RObject::Id>* entityIds = NULL) const {
192 Q_UNUSED(queryBox)
193 Q_UNUSED(ignoreComplex)
194 Q_UNUSED(segment)
195 Q_UNUSED(entityIds)
196
197 return QList<QSharedPointer<RShape> >() <<
198 QSharedPointer<RShape>(new RArc(*this));
199 }
200};
201
205Q_DECLARE_METATYPE(QSharedPointer<RArcData>)
206
207#endif
#define RDEFAULT_RBOX
Definition RBox.h:35
Q_DECLARE_METATYPE(RMath *)
#define RMAXDOUBLE
Definition RMath.h:66
#define RDEFAULT_RVECTOR
Definition RVector.h:38
Stores and manages all data that defines the geometry and appearance of an arc entity.
Definition RArcData.h:45
virtual RBox getBoundingBox(bool ignoreEmpty=false) const
Definition RArcData.h:78
virtual bool rotate(double rotation, const RVector &center=RDEFAULT_RVECTOR)
Definition RArcData.h:111
bool trimStartPoint(const RVector &trimPoint, const RVector &clickPoint=RVector::invalid, bool extend=false)
Definition RArcData.h:165
virtual QList< RVector > getArcReferencePoints(const RBox &queryBox=RDEFAULT_RBOX) const
Definition RArcData.h:87
virtual bool flipVertical()
Definition RArcData.h:126
double getRadius() const
Definition RArcData.h:137
virtual QList< RVector > getIntersectionPoints(const RShape &shape, bool limited=true, const RBox &queryBox=RDEFAULT_RBOX, bool ignoreComplex=true) const
Definition RArcData.h:96
virtual QList< RVector > getIntersectionPoints(const REntityData &other, bool limited=true, bool same=false, const RBox &queryBox=RDEFAULT_RBOX, bool ignoreComplex=true, QList< QPair< RObject::Id, RObject::Id > > *entityIds=NULL) const
Definition RArcData.h:93
virtual RVector getVectorTo(const RVector &point, bool limited=true, double strictRange=RMAXDOUBLE) const
Definition RArcData.h:99
bool isValid() const
Definition RArcData.h:66
RVector getCenter() const
Definition RArcData.h:134
virtual QList< RVector > getEndPoints(const RBox &queryBox=RDEFAULT_RBOX, QList< RObject::Id > *subEntityIds=NULL) const
Definition RArcData.h:69
virtual double getDistanceTo(const RVector &point, bool limited=true, double range=0.0, bool draft=false, double strictRange=RMAXDOUBLE) const
Definition RArcData.h:102
bool trimEndPoint(const RVector &trimPoint, const RVector &clickPoint=RVector::invalid, bool extend=false)
Definition RArcData.h:168
double getBulge() const
Definition RArcData.h:140
virtual bool scale(const RVector &scaleFactors, const RVector &center=RDEFAULT_RVECTOR)
Definition RArcData.h:114
RArc getArc()
Definition RArcData.h:61
double getLength() const
Definition RArcData.h:172
virtual bool mirror(const RLine &axis)
Definition RArcData.h:117
double getAngleLength(bool allowForZeroLength=false) const
Definition RArcData.h:175
virtual bool move(const RVector &offset)
Moves this entity by the given offset.
Definition RArcData.h:108
virtual bool mirror(const RVector &axis1, const RVector &axis2)
Definition RArcData.h:120
double getDirection2() const
Definition RArcData.h:155
RPolyline approximateWithLines(double segmentLength)
Definition RArcData.h:183
virtual RShape * castToShape()
Definition RArcData.h:187
virtual RS::EntityType getType() const
Definition RArcData.h:58
virtual bool stretch(const RPolyline &area, const RVector &offset)
Stretches the end points of this entity that are inside area by offset.
Definition RArcData.h:129
virtual QList< RVector > getPointsWithDistanceToEnd(double distance, int from=RS::FromAny, const RBox &queryBox=RDEFAULT_RBOX, QList< RObject::Id > *subEntityIds=NULL) const
Definition RArcData.h:90
virtual void to2D()
Definition RArcData.h:75
virtual bool flipHorizontal()
Definition RArcData.h:123
virtual QList< RVector > getCenterPoints(const RBox &queryBox=RDEFAULT_RBOX, QList< RObject::Id > *subEntityIds=NULL) const
Definition RArcData.h:84
bool isReversed() const
Definition RArcData.h:149
double getEndAngle() const
Definition RArcData.h:146
RS::Ending getTrimEnd(const RVector &trimPoint, const RVector &clickPoint)
Definition RArcData.h:162
virtual bool intersectsWith(const RShape &shape) const
Definition RArcData.h:105
virtual void setZ(double z)
Definition RArcData.h:72
double getStartAngle() const
Definition RArcData.h:143
virtual QList< RVector > getMiddlePoints(const RBox &queryBox=RDEFAULT_RBOX, QList< RObject::Id > *subEntityIds=NULL) const
Definition RArcData.h:81
bool reverse()
Definition RArcData.h:158
virtual QList< QSharedPointer< RShape > > getShapes(const RBox &queryBox=RDEFAULT_RBOX, bool ignoreComplex=false, bool segment=false, QList< RObject::Id > *entityIds=NULL) const
Definition RArcData.h:191
double getDirection1() const
Definition RArcData.h:152
Arc entity.
Definition RArcEntity.h:38
Low-level mathematical representation of an arc.
Definition RArc.h:42
RArc()
Creates an arc shape with an invalid center.
Definition RArc.cpp:35
double getRadius() const
Definition RArc.cpp:474
virtual bool trimStartPoint(const RVector &trimPoint, const RVector &clickPoint=RVector::invalid, bool extend=false)
Definition RArc.cpp:827
double getLength() const
Definition RArc.cpp:343
virtual bool scale(const RVector &scaleFactors, const RVector &center=RDEFAULT_RVECTOR)
Definition RArc.cpp:715
virtual double getDirection2() const
Definition RArc.cpp:260
virtual bool move(const RVector &offset)
Definition RArc.cpp:691
virtual bool stretch(const RPolyline &area, const RVector &offset)
Definition RArc.cpp:762
virtual RS::Ending getTrimEnd(const RVector &trimPoint, const RVector &clickPoint)
Definition RArc.cpp:808
virtual bool mirror(const RLine &axis)
Definition RArc.cpp:733
virtual bool reverse()
Definition RArc.cpp:754
double getStartAngle() const
Definition RArc.cpp:482
bool isReversed() const
Definition RArc.cpp:526
virtual bool rotate(double rotation, const RVector &center=RDEFAULT_RVECTOR)
Definition RArc.cpp:699
double getAngleLength(bool allowForZeroLength=false) const
Definition RArc.cpp:414
RVector getCenter() const
Definition RArc.cpp:466
virtual double getDirection1() const
Definition RArc.cpp:251
double getBulge() const
Definition RArc.cpp:334
double getEndAngle() const
Definition RArc.cpp:490
virtual bool isValid() const
Definition RArc.cpp:77
RPolyline approximateWithLines(double segmentLength, double angle=0.0) const
Definition RArc.cpp:856
virtual void setZ(double z)
Definition RArc.cpp:61
virtual bool trimEndPoint(const RVector &trimPoint, const RVector &clickPoint=RVector::invalid, bool extend=false)
Definition RArc.cpp:834
Represents a box e.g.
Definition RBox.h:46
A graphics document contains and owns entities, layers, user coordinate systems, variables,...
Definition RDocument.h:78
Base class for all entity data classes.
Definition REntityData.h:65
virtual QList< RVector > getCenterPoints(const RBox &queryBox=RDEFAULT_RBOX, QList< RObject::Id > *subEntityIds=NULL) const
Definition REntityData.cpp:443
virtual QList< RVector > getMiddlePoints(const RBox &queryBox=RDEFAULT_RBOX, QList< RObject::Id > *subEntityIds=NULL) const
Definition REntityData.cpp:413
virtual bool flipHorizontal()
Definition REntityData.cpp:729
virtual double getDistanceTo(const RVector &point, bool limited=true, double range=0.0, bool draft=false, double strictRange=RMAXDOUBLE) const
Definition REntityData.cpp:299
virtual QList< RVector > getIntersectionPoints(const REntityData &other, bool limited=true, bool same=false, const RBox &queryBox=RDEFAULT_RBOX, bool ignoreComplex=true, QList< QPair< RObject::Id, RObject::Id > > *entityIds=NULL) const
Definition REntityData.cpp:601
virtual bool moveReferencePoint(const RVector &referencePoint, const RVector &targetPoint, Qt::KeyboardModifiers modifiers=Qt::NoModifier)=0
Moves the given reference point to the given target point or does nothing if this entity has no refer...
virtual bool intersectsWith(const RShape &shape) const
Definition REntityData.cpp:582
virtual QList< RVector > getPointsWithDistanceToEnd(double distance, int from=RS::FromAny, const RBox &queryBox=RDEFAULT_RBOX, QList< RObject::Id > *subEntityIds=NULL) const
Definition REntityData.cpp:487
virtual bool flipVertical()
Definition REntityData.cpp:733
virtual bool mirror(const RLine &axis)
Definition REntityData.cpp:715
virtual QList< RVector > getArcReferencePoints(const RBox &queryBox=RDEFAULT_RBOX) const
Definition REntityData.cpp:474
virtual QList< RRefPoint > getReferencePoints(RS::ProjectionRenderingHint hint=RS::RenderTop) const =0
virtual RBox getBoundingBox(bool ignoreEmpty=false) const
Definition REntityData.cpp:313
virtual QList< RVector > getEndPoints(const RBox &queryBox=RDEFAULT_RBOX, QList< RObject::Id > *subEntityIds=NULL) const
Definition REntityData.cpp:383
virtual RVector getVectorTo(const RVector &point, bool limited=true, double strictRange=RMAXDOUBLE) const
Definition REntityData.cpp:551
Base class for all entity classes.
Definition REntity.h:63
Low-level mathematical representation of a line.
Definition RLine.h:41
Low-level mathematical representation of an open polyline or closed polyline (= polygon).
Definition RPolyline.h:50
Represents a reference point of an entity.
Definition RRefPoint.h:18
@ FromAny
Start or end.
Definition RS.h:374
EntityType
Entity types used for property handling / filtering.
Definition RS.h:227
@ EntityArc
Arc.
Definition RS.h:253
ProjectionRenderingHint
Sets the current rendering hint for exports.
Definition RS.h:293
@ RenderTop
Definition RS.h:294
Ending
Entity ending.
Definition RS.h:323
Interface for geometrical shape classes.
Definition RShape.h:72
virtual void to2D()
Flattens this shape to the X/Y plane.
Definition RShape.h:158
Represents a 3d vector (x/y/z).
Definition RVector.h:47
static const RVector invalid
invalid vector
Definition RVector.h:335
#define QCADENTITY_EXPORT
Definition entity_global.h:10
#define NULL
Definition opennurbs_system.h:256