QCAD
Open Source 2D CAD
RDimensionData.h
Go to the documentation of this file.
1 
20 #ifndef RDIMENSIONDATA_H
21 #define RDIMENSIONDATA_H
22 
23 #include "entity_global.h"
24 
25 #include "RDocument.h"
26 #include "REntityData.h"
27 #include "RTextData.h"
28 #include "RVector.h"
29 
39  friend class RDimensionEntity;
40 
41 protected:
43 
44 public:
46  RDimensionData(const RVector& definitionPoint,
47  const RVector& textPositionCenter,
48  RS::VAlign valign,
49  RS::HAlign halign,
50  RS::TextLineSpacingStyle lineSpacingStyle,
51  double lineSpacingFactor,
52  const QString& text,
53  const QString& fontName,
54  double textAngle);
55 
56  virtual RS::EntityType getType() const {
57  return RS::EntityDimension;
58  }
59  virtual RBox getBoundingBox(bool ignoreEmpty=false) const;
60 
61  virtual RVector getPointOnEntity() const;
62 
63  virtual bool isValid() const;
64  virtual bool isSane() const;
65 
66  virtual void setDefinitionPoint(const RVector& p) {
67  definitionPoint = p;
68  update();
69  }
70 
72  return definitionPoint;
73  }
74 
75  void setText(const QString& t) {
76  text = t;
77  update();
78  }
79 
80  QString getText() const {
81  return text;
82  }
83 
84  void setUpperTolerance(const QString& t) {
85  upperTolerance = t;
86  }
87 
88  void setLowerTolerance(const QString& t) {
89  lowerTolerance = t;
90  }
91 
92  void setTextPosition(const RVector& p) {
93  if (p.isSane()) {
94  textPositionCenter = p;
95  }
96  textPositionSide = RVector::invalid;
97  update();
98  }
99 
101  if (textPositionSide.isValid()) {
102  return textPositionSide;
103  }
104  else {
105  return textPositionCenter;
106  }
107  }
108 
109  void setFontName(const QString& fn) {
110  fontName = fn;
111  update();
112  }
113 
114  QString getFontName() const {
115  return fontName;
116  }
117 
118 // void setTextColor(const RColor& tc) {
119 // textColor = tc;
120 // update();
121 // }
122 
123 // RColor getTextColor() const {
124 // return textColor;
125 // }
126 
127  void setDimBlockName(const QString& bn) {
128  dimBlockName = bn;
129  //update();
130  }
131 
132  QString getDimBlockName() const {
133  return dimBlockName;
134  }
135 
136  double getLinearFactor() const {
137  return linearFactor;
138  }
139 
140  void setLinearFactor(double f) {
141  linearFactor = f;
142  }
143 
144  double getDimScale(bool fromDocument=true) const;
145 
146  void setDimScale(double f) {
147  dimScaleOverride = f;
148  update();
149  }
150 
151  bool isArrow1Flipped() const {
152  return arrow1Flipped;
153  }
154  void setArrow1Flipped(bool on) {
155  arrow1Flipped = on;
156  }
157  bool isArrow2Flipped() const {
158  return arrow2Flipped;
159  }
160  void setArrow2Flipped(bool on) {
161  arrow2Flipped = on;
162  }
163 
164  bool isExtLineFix() const {
165  return extLineFix;
166  }
167  void setExtLineFix(bool on) {
168  extLineFix = on;
169  }
170 
171  double getExtLineFixLength() const {
172  return extLineFixLength;
173  }
174  void setExtLineFixLength(double v) {
175  extLineFixLength = v;
176  }
177 
178  void adjustExtensionLineFixLength(RLine& extLine1, RLine& extLine2, bool addDimExe = true) const;
179 
180  bool hasSpaceForArrows() const;
181 
182  virtual double getDistanceTo(const RVector& point, bool limited = true, double range = 0.0, bool draft = false, double strictRange = RMAXDOUBLE) const;
183  virtual bool intersectsWith(const RShape& shape) const;
184 
185  virtual QList<RRefPoint> getReferencePoints(RS::ProjectionRenderingHint hint = RS::RenderTop) const;
186 
187  virtual bool clickReferencePoint(const RVector& referencePoint);
188  virtual bool moveReferencePoint(const RVector& referencePoint, const RVector& targetPoint, Qt::KeyboardModifiers modifiers = Qt::NoModifier);
189 
190  virtual bool move(const RVector& offset);
191  virtual bool rotate(double rotation, const RVector& center);
192  virtual bool scale(const RVector& scaleFactors, const RVector& center);
193  virtual void scaleVisualProperties(double scaleFactor);
194  virtual bool mirror(const RLine& axis);
195 
196  double getDimexo() const;
197  double getDimexe() const;
198  double getDimasz() const;
199  double getDimgap() const;
200  double getDimtxt() const;
201  bool useArchTick() const;
202  bool hasCustomTextPosition() const;
203  void setCustomTextPosition(bool on);
204 
206  return lineSpacingStyle;
207  }
208 
209  double getLineSpacingFactor() const {
210  return lineSpacingFactor;
211  }
212 
213  double getTextAngle() const {
214  return textAngle;
215  }
216 
217  QList<QSharedPointer<RShape> > getDimensionLineShapes(
218  const RVector& p1, const RVector& p2,
219  bool arrow1, bool arrow2) const;
220  virtual QList<QSharedPointer<RShape> > getArrow(
221  const RVector& position, double direction) const;
222  RTextData& getTextData() const;
223  void initTextData() const;
224  virtual void updateTextData() const;
225  virtual QString getMeasurement(bool resolveAutoMeasurement = true) const;
226  virtual double getMeasuredValue() const { return 0.0; }
227  virtual QString getAutoLabel() const { return ""; }
228  QString formatLabel(double distance) const;
229  QString formatAngleLabel(double textAngle) const;
230  //virtual void updateFromTextPosition() = 0;
231 
232  virtual void update() const;
233 
234  QSharedPointer<RBlockReferenceEntity> getDimensionBlockReference() const;
235  bool hasDimensionBlockReference() const;
236 
237 protected:
260  QString text;
262  QString upperTolerance;
264  QString lowerTolerance;
266  QString fontName;
268  //RColor textColor;
270  mutable QString dimBlockName;
271 
272  mutable double defaultAngle;
274  double textAngle;
275 
276  double linearFactor;
280 
283 
284  mutable bool dirty;
286  mutable RBox boundingBox;
287  mutable double dimLineLength;
290 
292  mutable bool autoTextPos;
293 };
294 
297 Q_DECLARE_METATYPE(QSharedPointer<RDimensionData>)
298 
299 #endif
RDimensionData::setFontName
void setFontName(const QString &fn)
Definition: RDimensionData.h:109
RDimensionData::getLinearFactor
double getLinearFactor() const
Definition: RDimensionData.h:136
RDimensionData::textPositionCenter
RVector textPositionCenter
Middle point of dimension text.
Definition: RDimensionData.h:241
REntityData::update
virtual void update() const
Entities can reimplement this function to invalidate any internal cache (mark the entity as dirty).
Definition: REntityData.h:408
RDimensionEntity::getDimScale
double getDimScale(bool fromDocument=true) const
Definition: RDimensionEntity.h:185
RDimensionData::textPositionSide
RVector textPositionSide
Middle point of dimension text when automatically moved to the side for lack of space.
Definition: RDimensionData.h:246
RDimensionData::linearFactor
double linearFactor
Definition: RDimensionData.h:276
RDimensionData::setDimScale
void setDimScale(double f)
Definition: RDimensionData.h:146
RDimensionData::getTextAngle
double getTextAngle() const
Definition: RDimensionData.h:213
RDimensionEntity
Base class for dimension entity classes.
Definition: RDimensionEntity.h:38
RDimensionData::dirty
bool dirty
Definition: RDimensionData.h:284
RTextData.h
RDimensionData::setArrow1Flipped
void setArrow1Flipped(bool on)
Definition: RDimensionData.h:154
RDimensionData::extLineFixLength
double extLineFixLength
Definition: RDimensionData.h:282
REntityData::getBoundingBox
virtual RBox getBoundingBox(bool ignoreEmpty=false) const
Definition: REntityData.cpp:303
RDimensionData::upperTolerance
QString upperTolerance
Upper tolerance limit.
Definition: RDimensionData.h:262
REntityData::scaleVisualProperties
virtual void scaleVisualProperties(double scaleFactor)
Definition: REntityData.cpp:605
RS::HAlign
HAlign
Horizontal alignments.
Definition: RS.h:234
RDimensionData::getDefinitionPoint
RVector getDefinitionPoint() const
Definition: RDimensionData.h:71
RDimensionData::getType
virtual RS::EntityType getType() const
Definition: RDimensionData.h:56
RVector::isSane
bool isSane() const
Definition: RVector.cpp:67
RDimensionData::getExtLineFixLength
double getExtLineFixLength() const
Definition: RDimensionData.h:171
RDimensionData::setTextPosition
void setTextPosition(const RVector &p)
Definition: RDimensionData.h:92
REntityData::isSane
virtual bool isSane() const
Definition: REntityData.h:102
RVector
Represents a 3d vector (x/y/z).
Definition: RVector.h:46
RDimensionData::extLineFix
bool extLineFix
Definition: RDimensionData.h:281
REntityData::intersectsWith
virtual bool intersectsWith(const RShape &shape) const
Definition: REntityData.cpp:499
RDimensionData::definitionPoint
RVector definitionPoint
Definition point.
Definition: RDimensionData.h:239
RDimensionData::boundingBox
RBox boundingBox
Definition: RDimensionData.h:286
RDimensionData::lowerTolerance
QString lowerTolerance
Lower tolerance limit.
Definition: RDimensionData.h:264
RDimensionData::arrow2Pos
RVector arrow2Pos
Definition: RDimensionData.h:289
RS::EntityType
EntityType
Entity types used for property handling / filtering.
Definition: RS.h:125
RDimensionData::setDefinitionPoint
virtual void setDefinitionPoint(const RVector &p)
Definition: RDimensionData.h:66
RObject::document
RDocument * document
Definition: RObject.h:341
REntityData::isValid
virtual bool isValid() const
Definition: REntityData.h:99
RDimensionData::autoTextPos
bool autoTextPos
True if the textPosition should be automatically calculated.
Definition: RDimensionData.h:292
RDimensionData::textData
RTextData textData
Definition: RDimensionData.h:285
QCADENTITY_EXPORT
#define QCADENTITY_EXPORT
Definition: entity_global.h:10
RDimensionData::setExtLineFix
void setExtLineFix(bool on)
Definition: RDimensionData.h:167
RDimensionEntity::setCustomTextPosition
void setCustomTextPosition(bool on)
Definition: RDimensionEntity.h:161
RDimensionEntity::getTextData
RTextData getTextData() const
Definition: RDimensionEntity.h:129
RS::TextLineSpacingStyle
TextLineSpacingStyle
Line spacing style for texts.
Definition: RS.h:255
RLine
Low-level mathematical representation of a line.
Definition: RLine.h:41
RDimensionData::setExtLineFixLength
void setExtLineFixLength(double v)
Definition: RDimensionData.h:174
RDimensionData::lineSpacingFactor
double lineSpacingFactor
Line spacing factor.
Definition: RDimensionData.h:254
RShape
Interface for geometrical shape classes.
Definition: RShape.h:72
RTextData
Copyright (c) 2011-2018 by Andrew Mustun.
Definition: RTextData.h:37
RDimensionEntity::hasCustomTextPosition
bool hasCustomTextPosition() const
Definition: RDimensionEntity.h:157
RDocument.h
RDimensionData::fontName
QString fontName
Dimension font name.
Definition: RDimensionData.h:266
RVector.h
Q_DECLARE_METATYPE
Q_DECLARE_METATYPE(RMath *)
RDimensionData::halign
RS::HAlign halign
Horizontal alignment.
Definition: RDimensionData.h:250
RDimensionData::getLineSpacingFactor
double getLineSpacingFactor() const
Definition: RDimensionData.h:209
RDimensionData::setLinearFactor
void setLinearFactor(double f)
Definition: RDimensionData.h:140
RDimensionData::dimScaleOverride
double dimScaleOverride
Definition: RDimensionData.h:277
REntityData::getReferencePoints
virtual QList< RRefPoint > getReferencePoints(RS::ProjectionRenderingHint hint=RS::RenderTop) const =0
REntityData
Base class for all entity data classes.
Definition: REntityData.h:67
RDimensionData::dimLineLength
double dimLineLength
Definition: RDimensionData.h:287
RS::EntityDimension
@ EntityDimension
Any Dimension.
Definition: RS.h:158
RDimensionData::setArrow2Flipped
void setArrow2Flipped(bool on)
Definition: RDimensionData.h:160
RDimensionData::setDimBlockName
void setDimBlockName(const QString &bn)
Definition: RDimensionData.h:127
RDimensionData::arrow1Pos
RVector arrow1Pos
Definition: RDimensionData.h:288
RDocument
A graphics document contains and owns entities, layers, user coordinate systems, variables,...
Definition: RDocument.h:72
REntityData::move
virtual bool move(const RVector &offset)
Moves this entity by the given offset.
Definition: REntityData.cpp:571
RMAXDOUBLE
#define RMAXDOUBLE
Definition: RMath.h:63
RDimensionData::setLowerTolerance
void setLowerTolerance(const QString &t)
Definition: RDimensionData.h:88
RDimensionData::getLineSpacingStyle
RS::TextLineSpacingStyle getLineSpacingStyle() const
Definition: RDimensionData.h:205
REntityData::scale
virtual bool scale(const RVector &scaleFactors, const RVector &center=RDEFAULT_RVECTOR)
Definition: REntityData.cpp:591
RDimensionData::getMeasuredValue
virtual double getMeasuredValue() const
Definition: RDimensionData.h:226
RDimensionData::getAutoLabel
virtual QString getAutoLabel() const
Definition: RDimensionData.h:227
RDimensionData::arrow1Flipped
bool arrow1Flipped
Definition: RDimensionData.h:278
REntityData::mirror
virtual bool mirror(const RLine &axis)
Definition: REntityData.cpp:611
RDimensionData::isArrow1Flipped
bool isArrow1Flipped() const
Definition: RDimensionData.h:151
RDimensionData::getFontName
QString getFontName() const
Definition: RDimensionData.h:114
REntityData::rotate
virtual bool rotate(double rotation, const RVector &center=RDEFAULT_RVECTOR)
Definition: REntityData.cpp:581
RDimensionData::text
QString text
Text string entered explicitly by user or null or "<>" for the actual measurement or " " (one blank s...
Definition: RDimensionData.h:260
RDimensionData::isArrow2Flipped
bool isArrow2Flipped() const
Definition: RDimensionData.h:157
RDimensionData::setText
void setText(const QString &t)
Definition: RDimensionData.h:75
RDimensionData::getTextPosition
RVector getTextPosition() const
Definition: RDimensionData.h:100
RDimensionData
Copyright (c) 2011-2018 by Andrew Mustun.
Definition: RDimensionData.h:38
RDimensionData::arrow2Flipped
bool arrow2Flipped
Definition: RDimensionData.h:279
REntityData::clickReferencePoint
virtual bool clickReferencePoint(const RVector &referencePoint)
Called when user clicks a reference point.
Definition: REntityData.h:379
RS::ProjectionRenderingHint
ProjectionRenderingHint
Sets the current rendering hint for exports.
Definition: RS.h:185
REntityData::getPointOnEntity
virtual RVector getPointOnEntity() const
Definition: REntityData.cpp:362
RDimensionEntity::hasDimensionBlockReference
bool hasDimensionBlockReference() const
Definition: RDimensionEntity.h:197
RDimensionData::lineSpacingStyle
RS::TextLineSpacingStyle lineSpacingStyle
Line spacing style.
Definition: RDimensionData.h:252
RDimensionData::textAngle
double textAngle
Rotation angle of dimension text away from default orientation.
Definition: RDimensionData.h:274
RDimensionData::setUpperTolerance
void setUpperTolerance(const QString &t)
Definition: RDimensionData.h:84
RDimensionData::isExtLineFix
bool isExtLineFix() const
Definition: RDimensionData.h:164
RDimensionData::defaultAngle
double defaultAngle
Definition: RDimensionData.h:272
RDimensionData::getText
QString getText() const
Definition: RDimensionData.h:80
RDimensionEntity::getMeasurement
QString getMeasurement(bool resolveAutoMeasurement=true) const
Definition: RDimensionEntity.h:125
RS::RenderTop
@ RenderTop
Definition: RS.h:186
RBox
Represents a box e.g.
Definition: RBox.h:43
REntityData::getDistanceTo
virtual double getDistanceTo(const RVector &point, bool limited=true, double range=0.0, bool draft=false, double strictRange=RMAXDOUBLE) const
Definition: REntityData.cpp:289
RVector::invalid
static const RVector invalid
invalid vector
Definition: RVector.h:322
entity_global.h
RDimensionData::getDimBlockName
QString getDimBlockName() const
Definition: RDimensionData.h:132
RDimensionData::dimBlockName
QString dimBlockName
Dimension text color.
Definition: RDimensionData.h:270
REntityData::moveReferencePoint
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...
RDimensionData::valign
RS::VAlign valign
Vertical alignment.
Definition: RDimensionData.h:248
REntityData.h
RS::VAlign
VAlign
Vertical alignments.
Definition: RS.h:224