QCAD
Open Source 2D CAD
Loading...
Searching...
No Matches
RSplineData.h
Go to the documentation of this file.
1
20#ifndef RSPLINEDATA_H
21#define RSPLINEDATA_H
22
23#include "entity_global.h"
24
25#include "RBox.h"
26#include "REntityData.h"
27#include "RSpline.h"
28#include "RVector.h"
29
30class RBox;
31class RDocument;
32class REntityData;
33class RLine;
34class RObject;
35class RPolyline;
36class RRefPoint;
37class RShape;
38class RSpline;
39class RSplineData;
40class RSplineEntity;
41class RVector;
42class RArc;
43
44
54
55 friend class RSplineEntity;
56
57protected:
58 RSplineData(RDocument* document, const RSplineData& data);
59
60public:
62 RSplineData(const RSpline& spline);
63
64 virtual RS::EntityType getType() const {
65 return RS::EntitySpline;
66 }
67 virtual RBox getBoundingBox(bool ignoreEmpty=false) const;
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) {
74 }
75 virtual void to2D() {
77 }
78 virtual QList<RVector> getMiddlePoints(const RBox& queryBox = RDEFAULT_RBOX, QList<RObject::Id>* subEntityIds = NULL) const {
79 return REntityData::getMiddlePoints(queryBox, subEntityIds);
80 }
81 virtual QList<RVector> getCenterPoints(const RBox& queryBox = RDEFAULT_RBOX, QList<RObject::Id>* subEntityIds = NULL) const {
82 return REntityData::getCenterPoints(queryBox, subEntityIds);
83 }
84 virtual QList<RVector> getArcReferencePoints(const RBox& queryBox = RDEFAULT_RBOX) const {
86 }
87 virtual QList<RVector> getPointsWithDistanceToEnd(double distance, int from = RS::FromAny, const RBox& queryBox = RDEFAULT_RBOX, QList<RObject::Id>* subEntityIds = NULL) const {
88 return REntityData::getPointsWithDistanceToEnd(distance, from, queryBox, subEntityIds);
89 }
90 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 {
91 return REntityData::getIntersectionPoints(other, limited, same, queryBox, ignoreComplex, entityIds);
92 }
93 virtual QList<RVector> getIntersectionPoints(const RShape& shape, bool limited = true, const RBox& queryBox = RDEFAULT_RBOX, bool ignoreComplex = true) const {
94 return REntityData::getIntersectionPoints(shape, limited, queryBox, ignoreComplex);
95 }
96 virtual RVector getVectorTo(const RVector& point, bool limited=true, double strictRange = RMAXDOUBLE) const {
97 return REntityData::getVectorTo(point, limited, strictRange);
98 }
99 virtual double getDistanceTo(const RVector& point, bool limited = true, double range = 0.0, bool draft = false, double strictRange = RMAXDOUBLE) const {
100 return REntityData::getDistanceTo(point, limited, range, draft, strictRange);
101 }
102 virtual bool intersectsWith(const RShape& shape) const {
103 return REntityData::intersectsWith(shape);
104 }
105 virtual bool move(const RVector& offset) {
106 return RSpline::move(offset);
107 }
108 virtual bool rotate(double rotation, const RVector& center = RDEFAULT_RVECTOR) {
109 return RSpline::rotate(rotation, center);
110 }
111 virtual bool scale(const RVector& scaleFactors, const RVector& center = RDEFAULT_RVECTOR) {
112 return RSpline::scale(scaleFactors, center);
113 }
114 virtual bool mirror(const RLine& axis) {
115 return RSpline::mirror(axis);
116 }
117 virtual bool mirror(const RVector& axis1, const RVector& axis2) {
118 return REntityData::mirror(axis1, axis2);
119 }
120 virtual bool flipHorizontal() {
122 }
123 virtual bool flipVertical() {
125 }
126 virtual bool stretch(const RPolyline& area, const RVector& offset) {
127 return RSpline::stretch(area, offset);
128 }
129
130 virtual QList<RRefPoint> getReferencePoints(RS::ProjectionRenderingHint hint = RS::RenderTop) const;
131
132 virtual bool moveReferencePoint(const RVector& referencePoint, const RVector& targetPoint, Qt::KeyboardModifiers modifiers = Qt::NoModifier);
133
134 void setShape(const RSpline& s) {
135 copySpline(s);
136 }
137
138 void appendControlPoint(const RVector& point) {
140 }
141
142 void appendFitPoint(const RVector& point) {
144 }
145
146 void prependFitPoint(const RVector& point) {
148 }
149
150 void insertFitPointAt(const RVector& point) {
152 }
153
154 void removeFitPointAt(const RVector& point) {
156 }
157
158 void setPeriodic(bool on) {
160 }
161
162 bool isValid() const {
163 return RSpline::isValid();
164 }
165
166 int getDegree() const {
167 return RSpline::getDegree();
168 }
169
170 double getDirection1() const {
171 return RSpline::getDirection1();
172 }
173
174 double getDirection2() const {
175 return RSpline::getDirection2();
176 }
177
179 return RSpline::getStartPoint();
180 }
181
183 return RSpline::getEndPoint();
184 }
185
186 void setStartPoint(const RVector& sp) {
188 }
189
190 void setEndPoint(const RVector& ep) {
192 }
193
194 bool reverse() {
195 return RSpline::reverse();
196 }
197
198 RS::Ending getTrimEnd(const RVector& trimPoint, const RVector& clickPoint) {
199 return RSpline::getTrimEnd(trimPoint, clickPoint);
200 }
201 bool trimStartPoint(const RVector& trimPoint, const RVector& clickPoint = RVector::invalid, bool extend = false) {
202 return RSpline::trimStartPoint(trimPoint, clickPoint, extend);
203 }
204 bool trimEndPoint(const RVector& trimPoint, const RVector& clickPoint = RVector::invalid, bool extend = false) {
205 return RSpline::trimEndPoint(trimPoint, clickPoint, extend);
206 }
207
208 bool isClosed() const {
209 return RSpline::isClosed();
210 }
211
212 bool isPeriodic() const {
213 return RSpline::isPeriodic();
214 }
215
219
222 }
223
224 //void updateTangentsPeriodic() {
225 // RSpline::updateTangentsPeriodic();
226 //}
227
228 QList<RVector> getControlPoints() const {
230 }
231
232 QList<RVector> getControlPointsWrapped() const {
234 }
235
236 QList<RVector> getFitPoints() const {
237 return RSpline::getFitPoints();
238 }
239
240 QList<double> getKnotVector() const {
241 return RSpline::getKnotVector();
242 }
243
244 QList<double> getActualKnotVector() const {
246 }
247
248 QList<double> getWeights() const {
249 return RSpline::getWeights();
250 }
251
252 double getLength() const {
253 return RSpline::getLength();
254 }
255 RVector getPointAt(double t) const {
256 return RSpline::getPointAt(t);
257 }
258 RVector getPointAtDistance(double distance) const {
259 return RSpline::getPointAtDistance(distance);
260 }
261 double getAngleAt(double distance, RS::From from = RS::FromStart) const {
262 return RSpline::getAngleAt(distance, from);
263 }
264
265 RPolyline toPolyline(int segments) const;
266
267 RPolyline approximateWithArcs(double tolerance, double radiusLimit=RDEFAULT_MIN1) const;
268
269 void simplify(double tolerance) {
270 RSpline s = RSpline::simplify(tolerance);
271 setShape(s);
272 }
273
274 //RSpline getSubSpline(double d1, double d2) const {
275 // return RSpline::getSubSpline(d1, d2);
276 //}
277
278 virtual RShape* castToShape() {
279 return this;
280 }
281
282 virtual QList<QSharedPointer<RShape> > getShapes(const RBox& queryBox = RDEFAULT_RBOX, bool ignoreComplex = false, bool segment = false, QList<RObject::Id>* entityIds = NULL) const;
283
284 virtual void update() const {
285 //RSpline::update();
286 }
287};
288
292Q_DECLARE_METATYPE(QSharedPointer<RSplineData>)
293
294#endif
#define RDEFAULT_RBOX
Definition RBox.h:35
#define RDEFAULT_MIN1
Copyright (c) 2011-2018 by Andrew Mustun.
Definition RExplodable.h:30
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
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 QList< QSharedPointer< RShape > > getShapes(const RBox &queryBox=RDEFAULT_RBOX, bool ignoreComplex=false, bool segment=false, QList< RObject::Id > *entityIds=NULL) const
Definition REntityData.h:111
virtual RVector getVectorTo(const RVector &point, bool limited=true, double strictRange=RMAXDOUBLE) const
Definition REntityData.cpp:551
Low-level mathematical representation of a line.
Definition RLine.h:41
Abstract base class for all objects.
Definition RObject.h:64
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
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
EntityType
Entity types used for property handling / filtering.
Definition RS.h:227
@ EntitySpline
Spline.
Definition RS.h:276
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
Stores and manages all data that defines the geometry and appearance of a spline entity.
Definition RSplineData.h:53
double getLength() const
Definition RSplineData.h:252
void setEndPoint(const RVector &ep)
Definition RSplineData.h:190
virtual bool move(const RVector &offset)
Moves this entity by the given offset.
Definition RSplineData.h:105
QList< double > getActualKnotVector() const
Definition RSplineData.h:244
double getDirection1() const
Definition RSplineData.h:170
virtual bool intersectsWith(const RShape &shape) const
Definition RSplineData.h:102
virtual QList< RVector > getCenterPoints(const RBox &queryBox=RDEFAULT_RBOX, QList< RObject::Id > *subEntityIds=NULL) const
Definition RSplineData.h:81
int getDegree() const
Definition RSplineData.h:166
virtual void to2D()
Definition RSplineData.h:75
virtual bool mirror(const RLine &axis)
Definition RSplineData.h:114
bool isClosed() const
Definition RSplineData.h:208
QList< RVector > getControlPointsWrapped() const
Definition RSplineData.h:232
virtual double getDistanceTo(const RVector &point, bool limited=true, double range=0.0, bool draft=false, double strictRange=RMAXDOUBLE) const
Definition RSplineData.h:99
virtual QList< RVector > getPointsWithDistanceToEnd(double distance, int from=RS::FromAny, const RBox &queryBox=RDEFAULT_RBOX, QList< RObject::Id > *subEntityIds=NULL) const
Definition RSplineData.h:87
QList< RVector > getControlPoints() const
Definition RSplineData.h:228
void setShape(const RSpline &s)
Definition RSplineData.h:134
RVector getTangentAtStart() const
Definition RSplineData.h:216
RVector getEndPoint() const
Definition RSplineData.h:182
void appendFitPoint(const RVector &point)
Definition RSplineData.h:142
QList< double > getKnotVector() const
Definition RSplineData.h:240
bool trimEndPoint(const RVector &trimPoint, const RVector &clickPoint=RVector::invalid, bool extend=false)
Definition RSplineData.h:204
void setPeriodic(bool on)
Definition RSplineData.h:158
void removeFitPointAt(const RVector &point)
Definition RSplineData.h:154
virtual bool stretch(const RPolyline &area, const RVector &offset)
Stretches the end points of this entity that are inside area by offset.
Definition RSplineData.h:126
bool isPeriodic() const
Definition RSplineData.h:212
void setStartPoint(const RVector &sp)
Definition RSplineData.h:186
bool reverse()
Definition RSplineData.h:194
virtual bool mirror(const RVector &axis1, const RVector &axis2)
Definition RSplineData.h:117
void prependFitPoint(const RVector &point)
Definition RSplineData.h:146
virtual bool flipVertical()
Definition RSplineData.h:123
virtual RS::EntityType getType() const
Definition RSplineData.h:64
virtual RShape * castToShape()
Definition RSplineData.h:278
double getAngleAt(double distance, RS::From from=RS::FromStart) const
Definition RSplineData.h:261
virtual void update() const
Entities can reimplement this function to invalidate any internal cache (mark the entity as dirty).
Definition RSplineData.h:284
bool trimStartPoint(const RVector &trimPoint, const RVector &clickPoint=RVector::invalid, bool extend=false)
Definition RSplineData.h:201
virtual QList< RVector > getArcReferencePoints(const RBox &queryBox=RDEFAULT_RBOX) const
Definition RSplineData.h:84
RVector getPointAt(double t) const
Definition RSplineData.h:255
virtual RVector getVectorTo(const RVector &point, bool limited=true, double strictRange=RMAXDOUBLE) const
Definition RSplineData.h:96
RVector getTangentAtEnd() const
Definition RSplineData.h:220
void simplify(double tolerance)
Definition RSplineData.h:269
virtual void setZ(double z)
Definition RSplineData.h:72
virtual QList< RVector > getMiddlePoints(const RBox &queryBox=RDEFAULT_RBOX, QList< RObject::Id > *subEntityIds=NULL) const
Definition RSplineData.h:78
double getDirection2() const
Definition RSplineData.h:174
virtual bool scale(const RVector &scaleFactors, const RVector &center=RDEFAULT_RVECTOR)
Definition RSplineData.h:111
QList< RVector > getFitPoints() const
Definition RSplineData.h:236
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 RSplineData.h:90
QList< double > getWeights() const
Definition RSplineData.h:248
virtual QList< RVector > getIntersectionPoints(const RShape &shape, bool limited=true, const RBox &queryBox=RDEFAULT_RBOX, bool ignoreComplex=true) const
Definition RSplineData.h:93
bool isValid() const
Definition RSplineData.h:162
virtual bool flipHorizontal()
Definition RSplineData.h:120
RVector getPointAtDistance(double distance) const
Definition RSplineData.h:258
virtual bool rotate(double rotation, const RVector &center=RDEFAULT_RVECTOR)
Definition RSplineData.h:108
void insertFitPointAt(const RVector &point)
Definition RSplineData.h:150
virtual QList< RVector > getEndPoints(const RBox &queryBox=RDEFAULT_RBOX, QList< RObject::Id > *subEntityIds=NULL) const
Definition RSplineData.h:69
RS::Ending getTrimEnd(const RVector &trimPoint, const RVector &clickPoint)
Definition RSplineData.h:198
RVector getStartPoint() const
Definition RSplineData.h:178
void appendControlPoint(const RVector &point)
Definition RSplineData.h:138
Spline entity.
Definition RSplineEntity.h:42
Low-level mathematical representation of a spline.
Definition RSpline.h:59
RVector getPointAt(double t) const
Definition RSpline.cpp:1052
virtual bool trimEndPoint(const RVector &trimPoint, const RVector &clickPoint=RVector::invalid, bool extend=false)
Definition RSpline.cpp:1823
RSpline simplify(double tolerance)
Definition RSpline.cpp:1483
void prependFitPoint(const RVector &point)
Prepends a fit point.
Definition RSpline.cpp:368
void setEndPoint(const RVector &v)
Definition RSpline.cpp:745
void setStartPoint(const RVector &v)
Definition RSpline.cpp:727
virtual void setZ(double z)
Definition RSpline.cpp:237
virtual double getDirection1() const
Definition RSpline.cpp:677
virtual RVector getEndPoint() const
Definition RSpline.cpp:733
void copySpline(const RSpline &other)
Definition RSpline.cpp:87
virtual bool move(const RVector &offset)
Definition RSpline.cpp:1180
void removeFitPointAt(const RVector &point)
Definition RSpline.cpp:418
QList< RVector > getFitPoints() const
Definition RSpline.cpp:464
virtual double getLength() const
Definition RSpline.cpp:1023
virtual bool reverse()
Definition RSpline.cpp:1270
virtual RVector getStartPoint() const
Definition RSpline.cpp:715
RPolyline toPolyline(int segments) const
Definition RSpline.cpp:863
virtual bool mirror(const RLine &axis)
Definition RSpline.cpp:1218
void appendFitPoint(const RVector &point)
Appends a fit point.
Definition RSpline.cpp:360
void insertFitPointAt(const RVector &point)
Inserts a fit point at the point on the spline closest to the given position.
Definition RSpline.cpp:376
virtual bool scale(const RVector &scaleFactors, const RVector &center=RDEFAULT_RVECTOR)
Definition RSpline.cpp:1207
void appendControlPoint(const RVector &point)
Disabled for splines (bad performance).
Definition RSpline.cpp:286
RVector getTangentAtStart() const
Definition RSpline.cpp:771
virtual bool isValid() const
Definition RSpline.cpp:1354
virtual bool trimStartPoint(const RVector &trimPoint, const RVector &clickPoint=RVector::invalid, bool extend=false)
Definition RSpline.cpp:1801
virtual RS::Ending getTrimEnd(const RVector &trimPoint, const RVector &clickPoint)
Definition RSpline.cpp:1789
RPolyline approximateWithArcs(double tolerance, double radiusLimit=RDEFAULT_MIN1) const
Definition RSpline.cpp:856
QList< double > getKnotVector() const
Definition RSpline.cpp:493
virtual bool stretch(const RPolyline &area, const RVector &offset)
Definition RSpline.cpp:1325
QList< double > getWeights() const
Definition RSpline.cpp:526
virtual double getAngleAt(double distance, RS::From from=RS::FromStart) const
Definition RSpline.cpp:1074
virtual double getDirection2() const
Definition RSpline.cpp:695
QList< RVector > getControlPoints() const
Definition RSpline.cpp:320
virtual bool rotate(double rotation, const RVector &center=RDEFAULT_RVECTOR)
Definition RSpline.cpp:1191
int getDegree() const
Definition RSpline.cpp:555
RVector getTangentAtEnd() const
Definition RSpline.cpp:786
RVector getPointAtDistance(double distance) const
Definition RSpline.cpp:1069
bool isClosed() const
Definition RSpline.cpp:587
bool isPeriodic() const
Definition RSpline.cpp:625
void setPeriodic(bool on)
Definition RSpline.cpp:566
QList< RVector > getControlPointsWrapped() const
Definition RSpline.cpp:327
QList< double > getActualKnotVector() const
Definition RSpline.cpp:497
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
char s
Definition opennurbs_string.cpp:32
#define NULL
Definition opennurbs_system.h:256