QCAD
Open Source 2D CAD
RSplineEntity.h
Go to the documentation of this file.
1 
20 #ifndef RSPLINEENTITY_H
21 #define RSPLINEENTITY_H
22 
23 #include "entity_global.h"
24 
25 #include "REntity.h"
26 #include "RSplineData.h"
27 
28 class RDocument;
29 class RExporter;
30 
31 #ifndef RDEFAULT_MIN1
32 #define RDEFAULT_MIN1 -1
33 #endif
34 
43 
44 public:
58 
68 
77 
80 
81 public:
82  RSplineEntity(RDocument* document, const RSplineData& data);
83  RSplineEntity(const RSplineEntity& other);
84  virtual ~RSplineEntity();
85 
86  static void init();
87 
88  static QSet<RPropertyTypeId> getStaticPropertyTypeIds() {
90  }
91 
92  virtual RSplineEntity* clone() const {
93  return new RSplineEntity(*this);
94  }
95 
96  virtual bool setProperty(RPropertyTypeId propertyTypeId, const QVariant& value,
97  RTransaction* transaction=NULL);
98  virtual QPair<QVariant, RPropertyAttributes> getProperty(
99  RPropertyTypeId& propertyTypeId,
100  bool humanReadable = false, bool noAttributes = false, bool showOnRequest = false);
101 
102  virtual void exportEntity(RExporter& e, bool preview=false, bool forceSelected=false) const;
103 
104  virtual void setUndone(bool on) {
105  REntity::setUndone(on);
106  data.update();
107  }
108 
109  virtual RSplineData& getData() {
110  return data;
111  }
112 
113  virtual const RSplineData& getData() const {
114  return data;
115  }
116 
117  void setShape(const RSpline& s);
118 
119  bool isValid() const {
120  return data.isValid();
121  }
122 
123  double getTDelta() const {
124  return data.getTDelta();
125  }
126 
127  double getTMin() const {
128  return data.getTMin();
129  }
130 
131  double getTMax() const {
132  return data.getTMax();
133  }
134 
135  double getTAtPoint(const RVector& point) const {
136  return data.getTAtPoint(point);
137  }
138 
139  double getTAtDistance(double distance) const {
140  return data.getTAtDistance(distance);
141  }
142 
143  int getDegree() const {
144  return data.getDegree();
145  }
146 
147  double getDirection1() const {
148  return data.getDirection1();
149  }
150 
151  double getDirection2() const {
152  return data.getDirection2();
153  }
154 
155  RS::Ending getTrimEnd(const RVector& trimPoint, const RVector& clickPoint) {
156  return data.getTrimEnd(trimPoint, clickPoint);
157  }
158 
159  bool trimStartPoint(const RVector& trimPoint, const RVector& clickPoint = RVector::invalid, bool extend = false) {
160  return data.trimStartPoint(trimPoint, clickPoint, extend);
161  }
162  bool trimEndPoint(const RVector& trimPoint, const RVector& clickPoint = RVector::invalid, bool extend = false) {
163  return data.trimEndPoint(trimPoint, clickPoint, extend);
164  }
165 
166  QList<RSpline> splitAtPoints(const QList<RVector>& points) const {
167  return data.splitAtPoints(points);
168  }
169  QList<RSpline> splitAtParams(const QList<double>& params) const {
170  return data.splitAtParams(params);
171  }
172 
174  return data.getTangentAtStart();
175  }
176 
178  return data.getTangentAtEnd();
179  }
180 
181  bool isClosed() const {
182  return data.isClosed();
183  }
184 
185  bool isGeometricallyClosed(double tolerance=RS::PointTolerance) const {
186  return data.isGeometricallyClosed(tolerance);
187  }
188 
189  bool isPeriodic() const {
190  return data.isPeriodic();
191  }
192 
193  void appendControlPoint(const RVector& point) {
194  data.appendControlPoint(point);
195  }
196 
197  void appendFitPoint(const RVector& point) {
198  data.appendFitPoint(point);
199  }
200 
201  void prependFitPoint(const RVector& point) {
202  data.prependFitPoint(point);
203  }
204 
205  void insertFitPointAt(const RVector& point) {
206  data.insertFitPointAt(point);
207  }
208 
209  void removeFitPointAt(const RVector& point) {
210  data.removeFitPointAt(point);
211  }
212 
213  void setPeriodic(bool on) {
214  data.setPeriodic(on);
215  }
216 
217  QList<RVector> getControlPoints() const {
218  return data.getControlPoints();
219  }
220 
221  QList<RVector> getControlPointsWrapped() const {
222  return data.getControlPointsWrapped();
223  }
224 
225  int countControlPoints() const {
226  return data.countControlPoints();
227  }
228 
230  return data.getControlPointAt(i);
231  }
232 
233  QList<RVector> getFitPoints() const {
234  return data.getFitPoints();
235  }
236 
237  bool hasFitPoints() const {
238  return data.hasFitPoints();
239  }
240 
241  int countFitPoints() const {
242  return data.countFitPoints();
243  }
244 
245  RVector getFitPointAt(int i) const {
246  return data.getFitPointAt(i);
247  }
248 
249  QList<double> getKnotVector() const {
250  return data.getKnotVector();
251  }
252 
253  QList<double> getActualKnotVector() const {
254  return data.getActualKnotVector();
255  }
256 
257  QList<double> getWeights() const {
258  return data.getWeights();
259  }
260 
261  //RSpline getSubSpline(double d1, double d2) const {
262  // return data.getSubSpline(d1, d2);
263  //}
264 
265  double getLength() const {
266  return data.getLength();
267  }
268 
269  RVector getPointAt(double t) const {
270  return data.getPointAt(t);
271  }
272 
273  RVector getPointAtDistance(double distance) const {
274  return data.getPointAtDistance(distance);
275  }
276 
277  double getAngleAt(double distance, RS::From from = RS::FromStart) const {
278  return data.getAngleAt(distance, from);
279  }
280 
282  return data.getStartPoint();
283  }
284 
286  return data.getEndPoint();
287  }
288 
289  void setStartPoint(const RVector& sp) {
290  return data.setStartPoint(sp);
291  }
292 
293  void setEndPoint(const RVector& ep) {
294  return data.setEndPoint(ep);
295  }
296 
297  RPolyline toPolyline(int segments) const {
298  return data.toPolyline(segments);
299  }
300 
301  RPolyline approximateWithArcs(double tolerance, double radiusLimit=RDEFAULT_MIN1) const {
302  return data.approximateWithArcs(tolerance, radiusLimit);
303  }
304 
305  bool reverse() {
306  return data.reverse();
307  }
308 
309  RS::Side getSideOfPoint(const RVector& point) const {
310  return data.getSideOfPoint(point);
311  }
312 
313  virtual int getComplexity() const;
314 
315  QList<QSharedPointer<RShape> > getExploded(int segments = RDEFAULT_MIN1) const {
316  return data.getExploded(segments);
317  }
318 
319  void simplify(double tolerance) {
320  data.simplify(tolerance);
321  }
322 
323  QList<RSpline> getBezierSegments(const RBox& queryBox = RDEFAULT_RBOX) const {
324  return data.getBezierSegments(queryBox);
325  }
326 
327  /*
328  double getAngle() const {
329  return data.getAngle();
330  }
331 
332  double getDirection1() const {
333  return data.getDirection1();
334  }
335 
336  double getDirection2() const {
337  return data.getDirection2();
338  }
339 
340  RS::Side getSideOfPoint(const RVector& point) const {
341  return data.getSideOfPoint(point);
342  }
343  */
344 
345 protected:
346  virtual void print(QDebug dbg) const;
347 
348 protected:
350 };
351 
353 Q_DECLARE_METATYPE(QSharedPointer<RSplineEntity>)
354 Q_DECLARE_METATYPE(QSharedPointer<RSplineEntity>*)
355 
356 #endif
RSplineEntity::PropertyTotalLength
static RPropertyTypeId PropertyTotalLength
Definition: RSplineEntity.h:79
RSplineEntity::getKnotVector
QList< double > getKnotVector() const
Definition: RSplineEntity.h:249
RSplineEntity::getDegree
int getDegree() const
Definition: RSplineEntity.h:143
RSplineEntity::getFitPointAt
RVector getFitPointAt(int i) const
Definition: RSplineEntity.h:245
REntity.h
RSplineEntity::PropertyDegree
static RPropertyTypeId PropertyDegree
Definition: RSplineEntity.h:67
RSplineEntity::getDirection2
double getDirection2() const
Definition: RSplineEntity.h:151
RSplineEntity::PropertyStartTangentZ
static RPropertyTypeId PropertyStartTangentZ
Definition: RSplineEntity.h:72
RSplineEntity::isClosed
bool isClosed() const
Definition: RSplineEntity.h:181
RSplineEntity::insertFitPointAt
void insertFitPointAt(const RVector &point)
Definition: RSplineEntity.h:205
RSplineData
Copyright (c) 2011-2018 by Andrew Mustun.
Definition: RSplineData.h:39
RSplineEntity::getTangentAtStart
RVector getTangentAtStart() const
Definition: RSplineEntity.h:173
RSplineEntity::PropertyEndTangentX
static RPropertyTypeId PropertyEndTangentX
Definition: RSplineEntity.h:74
RSplineEntity::PropertyProtected
static RPropertyTypeId PropertyProtected
Definition: RSplineEntity.h:47
RSplineEntity::isValid
bool isValid() const
Definition: RSplineEntity.h:119
RSplineEntity::PropertyLinetypeScale
static RPropertyTypeId PropertyLinetypeScale
Definition: RSplineEntity.h:53
RSpline
Copyright (c) 2011-2018 by Andrew Mustun.
Definition: RSpline.h:54
RSplineEntity::PropertyLayer
static RPropertyTypeId PropertyLayer
Definition: RSplineEntity.h:51
RSplineEntity::getPointAt
RVector getPointAt(double t) const
Definition: RSplineEntity.h:269
RSplineEntity::appendControlPoint
void appendControlPoint(const RVector &point)
Definition: RSplineEntity.h:193
RSplineEntity::approximateWithArcs
RPolyline approximateWithArcs(double tolerance, double radiusLimit=RDEFAULT_MIN1) const
Definition: RSplineEntity.h:301
RSplineEntity::PropertyControlPointNX
static RPropertyTypeId PropertyControlPointNX
Definition: RSplineEntity.h:59
RSplineEntity::removeFitPointAt
void removeFitPointAt(const RVector &point)
Definition: RSplineEntity.h:209
RSplineEntity::PropertyEndTangentZ
static RPropertyTypeId PropertyEndTangentZ
Definition: RSplineEntity.h:76
RSplineEntity::PropertyBlock
static RPropertyTypeId PropertyBlock
Definition: RSplineEntity.h:50
RS::Side
Side
Side used for side of a point relative to an entity (right hand or left hand side)
Definition: RS.h:205
RSplineEntity::getControlPoints
QList< RVector > getControlPoints() const
Definition: RSplineEntity.h:217
RS::PointTolerance
static const double PointTolerance
Copyright (c) 2011-2018 by Andrew Mustun.
Definition: RS.h:699
RVector
Represents a 3d vector (x/y/z).
Definition: RVector.h:46
RS::Ending
Ending
Entity ending.
Definition: RS.h:215
RS::FromStart
@ FromStart
Definition: RS.h:264
i
int i
Copyright (c) 2011-2018 by Andrew Mustun.
Definition: autostart.js:49
RSplineEntity::reverse
bool reverse()
Definition: RSplineEntity.h:305
RSplineEntity::getWeights
QList< double > getWeights() const
Definition: RSplineEntity.h:257
RSplineEntity::splitAtParams
QList< RSpline > splitAtParams(const QList< double > &params) const
Definition: RSplineEntity.h:169
RSplineEntity::prependFitPoint
void prependFitPoint(const RVector &point)
Definition: RSplineEntity.h:201
RSplineEntity::getTangentAtEnd
RVector getTangentAtEnd() const
Definition: RSplineEntity.h:177
RSplineEntity::data
RSplineData data
Definition: RSplineEntity.h:349
RSplineEntity
Spline entity.
Definition: RSplineEntity.h:42
RSplineEntity::PropertyLineweight
static RPropertyTypeId PropertyLineweight
Definition: RSplineEntity.h:54
QCADENTITY_EXPORT
#define QCADENTITY_EXPORT
Definition: entity_global.h:10
REntity::exportEntity
virtual void exportEntity(RExporter &e, bool preview=false, bool forceSelected=false) const =0
Exports the entity to the given exporter.
RSplineEntity::PropertyType
static RPropertyTypeId PropertyType
Definition: RSplineEntity.h:49
RSplineEntity::getControlPointsWrapped
QList< RVector > getControlPointsWrapped() const
Definition: RSplineEntity.h:221
RSplineEntity::splitAtPoints
QList< RSpline > splitAtPoints(const QList< RVector > &points) const
Definition: RSplineEntity.h:166
RSplineEntity::PropertyFitPointNX
static RPropertyTypeId PropertyFitPointNX
Definition: RSplineEntity.h:62
RSplineEntity::PropertyFitPointNY
static RPropertyTypeId PropertyFitPointNY
Definition: RSplineEntity.h:63
RSplineEntity::getTrimEnd
RS::Ending getTrimEnd(const RVector &trimPoint, const RVector &clickPoint)
Definition: RSplineEntity.h:155
REntity
Base class for all entity classes.
Definition: REntity.h:65
RSplineEntity::getBezierSegments
QList< RSpline > getBezierSegments(const RBox &queryBox=RDEFAULT_RBOX) const
Definition: RSplineEntity.h:323
RSplineEntity::PropertyDrawOrder
static RPropertyTypeId PropertyDrawOrder
Definition: RSplineEntity.h:57
Q_DECLARE_METATYPE
Q_DECLARE_METATYPE(RMath *)
RSplineEntity::getTMin
double getTMin() const
Definition: RSplineEntity.h:127
RSplineEntity::PropertyControlPointNY
static RPropertyTypeId PropertyControlPointNY
Definition: RSplineEntity.h:60
RSplineEntity::getAngleAt
double getAngleAt(double distance, RS::From from=RS::FromStart) const
Definition: RSplineEntity.h:277
RSplineEntity::hasFitPoints
bool hasFitPoints() const
Definition: RSplineEntity.h:237
RSplineEntity::getControlPointAt
RVector getControlPointAt(int i) const
Definition: RSplineEntity.h:229
RSplineEntity::appendFitPoint
void appendFitPoint(const RVector &point)
Definition: RSplineEntity.h:197
REntity::init
static void init()
Definition: REntity.cpp:88
REntity::print
virtual void print(QDebug dbg) const
Stream operator for QDebug.
Definition: REntity.cpp:455
RPropertyTypeId
Copyright (c) 2011-2018 by Andrew Mustun.
Definition: RPropertyTypeId.h:59
RSplineEntity::getSideOfPoint
RS::Side getSideOfPoint(const RVector &point) const
Definition: RSplineEntity.h:309
RSplineEntity::isGeometricallyClosed
bool isGeometricallyClosed(double tolerance=RS::PointTolerance) const
Definition: RSplineEntity.h:185
RSplineEntity::simplify
void simplify(double tolerance)
Definition: RSplineEntity.h:319
RSplineEntity::getFitPoints
QList< RVector > getFitPoints() const
Definition: RSplineEntity.h:233
RSplineEntity::getTAtPoint
double getTAtPoint(const RVector &point) const
Definition: RSplineEntity.h:135
RSplineEntity::trimStartPoint
bool trimStartPoint(const RVector &trimPoint, const RVector &clickPoint=RVector::invalid, bool extend=false)
Definition: RSplineEntity.h:159
RSplineEntity::getDirection1
double getDirection1() const
Definition: RSplineEntity.h:147
RExporter
Abstract base class for exporters.
Definition: RExporter.h:72
REntity::setProperty
virtual bool setProperty(RPropertyTypeId propertyTypeId, const QVariant &value, RTransaction *transaction=NULL)
Sets the given property to the given value.
Definition: REntity.cpp:323
RSplineData.h
RDocument
A graphics document contains and owns entities, layers, user coordinate systems, variables,...
Definition: RDocument.h:72
RSplineEntity::getTDelta
double getTDelta() const
Definition: RSplineEntity.h:123
RSplineEntity::getData
virtual RSplineData & getData()
Definition: RSplineEntity.h:109
RSplineEntity::getTMax
double getTMax() const
Definition: RSplineEntity.h:131
RSplineEntity::PropertyUseEndTangent
static RPropertyTypeId PropertyUseEndTangent
Definition: RSplineEntity.h:73
RSplineEntity::getActualKnotVector
QList< double > getActualKnotVector() const
Definition: RSplineEntity.h:253
RSplineEntity::getStaticPropertyTypeIds
static QSet< RPropertyTypeId > getStaticPropertyTypeIds()
Definition: RSplineEntity.h:88
RSplineEntity::getData
virtual const RSplineData & getData() const
Definition: RSplineEntity.h:113
RSplineEntity::PropertyLength
static RPropertyTypeId PropertyLength
Definition: RSplineEntity.h:78
RSplineEntity::PropertyKnotN
static RPropertyTypeId PropertyKnotN
Definition: RSplineEntity.h:65
RSplineEntity::PropertyPeriodic
static RPropertyTypeId PropertyPeriodic
Definition: RSplineEntity.h:66
RSplineEntity::isPeriodic
bool isPeriodic() const
Definition: RSplineEntity.h:189
RSplineEntity::PropertyEndTangentY
static RPropertyTypeId PropertyEndTangentY
Definition: RSplineEntity.h:75
RSplineEntity::PropertyStartTangentX
static RPropertyTypeId PropertyStartTangentX
Definition: RSplineEntity.h:70
RSplineEntity::clone
virtual RSplineEntity * clone() const
Definition: RSplineEntity.h:92
RSplineEntity::getEndPoint
RVector getEndPoint() const
Definition: RSplineEntity.h:285
REntity::getComplexity
virtual int getComplexity() const
Definition: REntity.h:659
RSplineEntity::PropertyStartTangentY
static RPropertyTypeId PropertyStartTangentY
Definition: RSplineEntity.h:71
RSplineEntity::countControlPoints
int countControlPoints() const
Definition: RSplineEntity.h:225
RSplineEntity::trimEndPoint
bool trimEndPoint(const RVector &trimPoint, const RVector &clickPoint=RVector::invalid, bool extend=false)
Definition: RSplineEntity.h:162
RSplineEntity::PropertyLinetype
static RPropertyTypeId PropertyLinetype
Definition: RSplineEntity.h:52
RSplineEntity::PropertyUseStartTangent
static RPropertyTypeId PropertyUseStartTangent
Definition: RSplineEntity.h:69
RSplineEntity::PropertyCustom
static RPropertyTypeId PropertyCustom
Copyright (c) 2011-2018 by Andrew Mustun.
Definition: RSplineEntity.h:45
RSplineEntity::getStartPoint
RVector getStartPoint() const
Definition: RSplineEntity.h:281
REntity::getProperty
virtual QPair< QVariant, RPropertyAttributes > getProperty(RPropertyTypeId &propertyTypeId, bool humanReadable=false, bool noAttributes=false, bool showOnRequest=false)
Definition: REntity.cpp:230
RDEFAULT_RBOX
#define RDEFAULT_RBOX
Definition: RBox.h:32
RSplineEntity::getPointAtDistance
RVector getPointAtDistance(double distance) const
Definition: RSplineEntity.h:273
RTransaction
Transaction implementation.
Definition: RTransaction.h:74
RPropertyTypeId::getPropertyTypeIds
static QSet< RPropertyTypeId > getPropertyTypeIds(const std::type_info &classInfo, RPropertyAttributes::Option=RPropertyAttributes::NoOptions)
Gets all property type IDs that where registered for the given class.
Definition: RPropertyTypeId.cpp:273
RSplineEntity::setEndPoint
void setEndPoint(const RVector &ep)
Definition: RSplineEntity.h:293
RSplineEntity::getLength
double getLength() const
Definition: RSplineEntity.h:265
RSplineEntity::getExploded
QList< QSharedPointer< RShape > > getExploded(int segments=RDEFAULT_MIN1) const
Definition: RSplineEntity.h:315
RBox
Represents a box e.g.
Definition: RBox.h:43
RObject::setUndone
void setUndone(bool on)
Definition: RObject.cpp:77
RSplineEntity::toPolyline
RPolyline toPolyline(int segments) const
Definition: RSplineEntity.h:297
RSplineEntity::setUndone
virtual void setUndone(bool on)
Definition: RSplineEntity.h:104
RSplineEntity::PropertyControlPointNZ
static RPropertyTypeId PropertyControlPointNZ
Definition: RSplineEntity.h:61
RVector::invalid
static const RVector invalid
invalid vector
Definition: RVector.h:322
entity_global.h
RS::From
From
End used to specify from which end of a shape to measure a distance.
Definition: RS.h:263
RSplineEntity::PropertyHandle
static RPropertyTypeId PropertyHandle
Definition: RSplineEntity.h:46
RPolyline
Low-level mathematical representation of an open polyline or closed polyline (= polygon).
Definition: RPolyline.h:49
RSplineEntity::getTAtDistance
double getTAtDistance(double distance) const
Definition: RSplineEntity.h:139
RSplineEntity::PropertyFitPointNZ
static RPropertyTypeId PropertyFitPointNZ
Definition: RSplineEntity.h:64
RDEFAULT_MIN1
#define RDEFAULT_MIN1
Definition: RSplineEntity.h:32
RSplineEntity::setPeriodic
void setPeriodic(bool on)
Definition: RSplineEntity.h:213
RSplineEntity::PropertyDisplayedColor
static RPropertyTypeId PropertyDisplayedColor
Definition: RSplineEntity.h:56
RSplineEntity::PropertyWorkingSet
static RPropertyTypeId PropertyWorkingSet
Definition: RSplineEntity.h:48
RSplineEntity::setStartPoint
void setStartPoint(const RVector &sp)
Definition: RSplineEntity.h:289
RSplineEntity::countFitPoints
int countFitPoints() const
Definition: RSplineEntity.h:241
RSplineEntity::PropertyColor
static RPropertyTypeId PropertyColor
Definition: RSplineEntity.h:55