QCAD
Open Source 2D CAD
Loading...
Searching...
No Matches
RTextBasedData.h
Go to the documentation of this file.
1
20#ifndef RTEXTBASEDDATA_H
21#define RTEXTBASEDDATA_H
22
23#include "core_global.h"
24
25#include "REntityData.h"
26#include "RPainterPath.h"
27#include "RPainterPathSource.h"
28#include "RVector.h"
29#include "RTextLayout.h"
30#include "RTextProxy.h"
31
32class QTextDocument;
33
34class RBox;
35class RColor;
36class RDebug;
37class RDocument;
38class RDxfServices;
39class REntityData;
40class RFontList;
41class RLine;
42class RMath;
43class RObject;
44class RPainterPath;
46class RPolyline;
47class RRefPoint;
48class RShape;
49class RTextBasedData;
51class RTextLayout;
52class RTextProxy;
53class RTextRenderer;
54class RUnit;
55class RVector;
56
57
58
69 friend class RTextBasedEntity;
70
71public:
72 enum TextFlag {
73 NoFlags = 0x000,
74 Bold = 0x001,
75 Italic = 0x002,
76 Simple = 0x004,
77 DimensionLabel = 0x008,
78 Highlighted = 0x010,
79 Backward = 0x020,
80 UpsideDown = 0x040
81 };
82 Q_DECLARE_FLAGS(TextFlags, TextFlag)
83
84protected:
85 RTextBasedData(RDocument* document, const RTextBasedData& data);
86
87public:
88 RTextBasedData(RDocument* document = NULL);
89 RTextBasedData(const RVector& position,
90 const RVector& alignmentPoint,
91 double textHeight,
92 double textWidth,
93 RS::VAlign verticalAlignment,
94 RS::HAlign horizontalAlignment,
95 RS::TextDrawingDirection drawingDirection,
96 RS::TextLineSpacingStyle lineSpacingStyle,
97 double lineSpacingFactor,
98 const QString& text,
99 const QString& fontName,
100 bool bold,
101 bool italic,
102 double angle,
103 bool simple);
104 virtual ~RTextBasedData() {}
105
107 return RS::EntityTextBased;
108 }
109
110 virtual RS::EntityType getType() const {
111 return RS::EntityTextBased;
112 }
113
114 void setFlag(RTextBasedData::TextFlag flag, bool on = true) {
115 if (on) {
116 flags |= flag;
117 } else {
118 flags &= ~flag;
119 }
120 }
122 return (flags & flag) == flag;
123 }
124
125 virtual bool isValid() const {
126 return !text.isNull();
127 }
128 virtual bool isSane() const;
129
130 virtual RBox getBoundingBox(bool ignoreEmpty=false) const;
131 QList<RVector> getRotatedBoundingBox() const;
132
133 double getWidth() const;
134 double getHeight() const;
135
136 void sync(const RTextBasedData& other);
137
138 virtual RVector getPointOnEntity() const;
139
140 virtual QList<RVector> getEndPoints(const RBox& queryBox = RDEFAULT_RBOX) const {
141 Q_UNUSED(queryBox);
142 return QList<RVector>();
143 }
144 virtual QList<RVector> getMiddlePoints(const RBox& queryBox = RDEFAULT_RBOX) const {
145 Q_UNUSED(queryBox);
146 return QList<RVector>();
147 }
148 virtual QList<RVector> getCenterPoints(const RBox& queryBox = RDEFAULT_RBOX) const {
149 Q_UNUSED(queryBox);
150 return QList<RVector>();
151 }
152 virtual QList<RVector> getPointsWithDistanceToEnd(
153 double distance, int from = RS::FromAny, const RBox& queryBox = RDEFAULT_RBOX) const {
154 Q_UNUSED(distance);
155 Q_UNUSED(from);
156 Q_UNUSED(queryBox);
157
158 return QList<RVector>();
159 }
160
161 virtual double getDistanceTo(const RVector& point, bool limited = true, double range = 0.0, bool draft = false, double strictRange = RMAXDOUBLE) const;
162 virtual bool intersectsWith(const RShape& shape) const;
163
168 return position;
169 }
170
171 void setPosition(const RVector& position) {
172 this->position = position;
173 }
174
180 return alignmentPoint;
181 }
182
183 void setAlignmentPoint(const RVector& alignmentPoint) {
184 this->alignmentPoint = alignmentPoint;
185 }
186
187 void setText(const QString& text);
188
189 QString getFontName() const {
190 return fontName;
191 }
192
193 void setFontName(const QString& fontName);
194
195 QString getFontFile() const {
196 return fontFile;
197 }
198
199 void setFontFile(const QString& fontFile) {
200 this->fontFile = fontFile;
201 }
202
203 bool isBold() const {
204 return getFlag(Bold);
205 }
206
207 void setBold(bool on) {
208 setFlag(Bold, on);
209 update();
210 }
211
212 bool isItalic() const {
213 return getFlag(Italic);
214 }
215
216 void setItalic(bool on) {
217 setFlag(Italic, on);
218 update();
219 }
220
221 double getTextHeight() const {
222 return textHeight;
223 }
224
225 void setTextHeight(double h) {
226 this->textHeight = h;
227 update();
228 }
229
233 double getTextWidth() const {
234 return textWidth;
235 }
236
237 void setTextWidth(double w) {
238 this->textWidth = w;
239 update();
240 }
241
242 void setVAlign(RS::VAlign valign) {
243 this->verticalAlignment = valign;
244 update();
245 }
246
248 return this->verticalAlignment;
249 }
250
251 void setHAlign(RS::HAlign halign) {
252 this->horizontalAlignment = halign;
253 update();
254 }
255
257 return this->horizontalAlignment;
258 }
259
261 this->drawingDirection = drawingDirection;
262 update();
263 }
264
266 return drawingDirection;
267 }
268
270 this->lineSpacingStyle = lineSpacingStyle;
271 update();
272 }
273
275 return lineSpacingStyle;
276 }
277
278 void setLineSpacingFactor(double lineSpacingFactor) {
279 if (lineSpacingFactor<0) {
280 return;
281 }
282 this->lineSpacingFactor = lineSpacingFactor;
283 update();
284 }
285
286 double getLineSpacingFactor() const {
287 return lineSpacingFactor;
288 }
289
290 void setAngle(double angle) {
291 this->angle = angle;
292 update();
293 }
294
295 double getAngle() const {
296 return angle;
297 }
298
299 void setXScale(double xScale) {
300 // only positive xScale for MText:
301 if (xScale<=0) {
302 xScale = 1;
303 }
304 this->xScale = xScale;
305 update();
306 }
307
308 double getXScale() const {
309 return xScale;
310 }
311
312 void setSimple(bool on) {
313 setFlag(Simple, on);
314 update();
315 }
316
317 bool isSimple() const {
318 return getFlag(Simple);
319 }
320
321 void setBackward(bool on) {
322 setFlag(Backward, isSimple() && on);
323 update();
324 }
325
326 bool isBackward() const {
327 return isSimple() && getFlag(Backward);
328 }
329
330 void setUpsideDown(bool on) {
331 setFlag(UpsideDown, isSimple() && on);
332 update();
333 }
334
335 bool isUpsideDown() const {
336 return isSimple() && getFlag(UpsideDown);
337 }
338
339 void setDimensionLabel(bool on) {
340 setFlag(DimensionLabel, on);
341 update();
342 }
343
344 bool isDimensionLabel() const {
345 return getFlag(DimensionLabel);
346 }
347
348 void setSelected(bool on) {
350 update();
351 }
352
353 void setHighlighted(bool on) {
354 setFlag(Highlighted, on);
355 }
356
357 bool isHighlighted() const {
358 return getFlag(Highlighted);
359 }
360
361 virtual QList<RRefPoint> getReferencePoints(RS::ProjectionRenderingHint hint = RS::RenderTop) const;
362
363 virtual bool moveReferencePoint(const RVector& referencePoint, const RVector& targetPoint, Qt::KeyboardModifiers modifiers = Qt::NoModifier);
364
365 virtual bool move(const RVector& offset);
366 virtual bool rotate(double rotation, const RVector& center);
367 virtual bool scale(const RVector& scaleFactors, const RVector& center);
368 virtual bool mirror(const RLine& axis);
369 virtual bool flipHorizontal();
370 virtual bool flipVertical();
371
372 virtual QString getText() const {
373 return text;
374 }
375 virtual QString getRenderedText(bool escapeUnicode = false) const;
376 virtual QString getPlainText() const;
377 virtual QString getEscapedText(bool escapeUnicode = false) const;
378 static QString escapeUnicode(const QString& str);
379 virtual QFont getMainFont() const;
380
381 virtual void update(bool layout) const;
382 virtual void update() const {
383 update(true);
384 }
385 virtual bool isDirty() const;
386
387 virtual QList<RPainterPath> getPainterPaths(bool draft = false, double pixelSizeHint = RDEFAULT_MIN1) const;
388 virtual QList<QSharedPointer<RShape> > getShapes(const RBox& queryBox = RDEFAULT_RBOX, bool ignoreComplex = false, bool segment = false, QList<RObject::Id>* entityIds = NULL) const;
389 virtual QList<QSharedPointer<RShape> > getExploded() const;
390
391 virtual QSharedPointer<RShape> getClosestShape(const RVector& pos, double range = RNANDOUBLE, bool ignoreComplex = false) const {
392 Q_UNUSED(pos);
393 Q_UNUSED(range);
394 Q_UNUSED(ignoreComplex)
395 return QSharedPointer<RShape>();
396 }
397
398 virtual RVector getClosestPointOnEntity(const RVector& point, double range, bool limited) const;
399
400 QList<RTextLayout> getTextLayouts() const;
401
402 QList<RTextBasedData> getSimpleTextBlocks();
403
404// virtual RTextBasedData getRenderedTextData() const {
405// return *this;
406// }
407
408 static bool hasProxy() {
409 return textProxy!=NULL;
410 }
411
415 static void setTextProxy(RTextProxy* p) {
416 if (textProxy!=NULL) {
417 delete textProxy;
418 }
419 textProxy = p;
420 }
421
426 return textProxy;
427 }
428
429 static QString toEscapedText(const QTextDocument& textDocument, const RColor& initialColor, double fontHeightFactor=1.0, bool simpleText = false);
430 static QString toRichText(const QString& escapedText, const QFont& mainFont, double fontHeightFactor=1.0);
431
432 virtual void to2D();
433
434protected:
435 QString text;
439 double textWidth;
445 QString fontName;
446 QString fontFile;
447 double angle;
448 double xScale;
449 TextFlags flags;
450
451 mutable double height;
452 mutable double width;
454 mutable QList<RPainterPath> painterPaths;
455 mutable bool dirty;
456 mutable bool gotDraft;
457 mutable QList<RTextLayout> textLayouts;
458
459private:
461};
462
463QCADCORE_EXPORT QDebug operator<<(QDebug dbg, const RTextBasedData& t);
464
468Q_DECLARE_METATYPE(QSharedPointer<RTextBasedData>)
469Q_DECLARE_METATYPE(QSharedPointer<RTextBasedData>*)
472
473#endif
#define RDEFAULT_RBOX
Definition RBox.h:35
#define RDEFAULT_MIN1
Copyright (c) 2011-2018 by Andrew Mustun.
Definition RExplodable.h:30
#define RNANDOUBLE
Definition RMath.h:74
Q_DECLARE_METATYPE(RMath *)
#define RMAXDOUBLE
Definition RMath.h:66
QCADCORE_EXPORT QDebug operator<<(QDebug dbg, const RTextBasedData &t)
Definition RTextBasedData.cpp:1098
Represents a box e.g.
Definition RBox.h:46
Color.
Definition RColor.h:43
This class provides some static methods for printing debugging information to stderr.
Definition RDebug.h:66
A graphics document contains and owns entities, layers, user coordinate systems, variables,...
Definition RDocument.h:78
DXF support tools, mainly for QCAD 2 DXF imports.
Definition RDxfServices.h:46
Base class for all entity data classes.
Definition REntityData.h:65
virtual void setSelected(bool on)
Selects or deselects this entity.
Definition REntityData.h:198
virtual RVector getClosestPointOnEntity(const RVector &point, double range=RNANDOUBLE, bool limited=true, RObject::Id *subEntityId=NULL) const
Definition REntityData.cpp:517
virtual void to2D()
Definition REntityData.cpp:342
virtual bool isSane() const
Definition REntityData.h:100
virtual bool move(const RVector &offset)
Moves this entity by the given offset.
Definition REntityData.cpp:675
virtual bool flipHorizontal()
Definition REntityData.cpp:729
virtual RVector getPointOnEntity() const
Definition REntityData.cpp:372
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 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 bool flipVertical()
Definition REntityData.cpp:733
virtual bool mirror(const RLine &axis)
Definition REntityData.cpp:715
virtual bool rotate(double rotation, const RVector &center=RDEFAULT_RVECTOR)
Definition REntityData.cpp:685
virtual QList< RRefPoint > getReferencePoints(RS::ProjectionRenderingHint hint=RS::RenderTop) const =0
virtual RBox getBoundingBox(bool ignoreEmpty=false) const
Definition REntityData.cpp:313
virtual void update() const
Entities can reimplement this function to invalidate any internal cache (mark the entity as dirty).
Definition REntityData.h:415
virtual bool scale(const RVector &scaleFactors, const RVector &center=RDEFAULT_RVECTOR)
Definition REntityData.cpp:695
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
Copyright (c) 2011-2018 by Andrew Mustun.
Definition RFontList.h:34
Low-level mathematical representation of a line.
Definition RLine.h:41
Math functions.
Definition RMath.h:88
Abstract base class for all objects.
Definition RObject.h:64
Extended painter path with a z-level and a pen.
Definition RPainterPath.h:48
Interface for entity data classes that can deliver painter paths.
Definition RPainterPathSource.h:40
virtual QList< RPainterPath > getPainterPaths(bool draft=false, double pixelSizeHint=RDEFAULT_MIN1) const =0
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
VAlign
Vertical alignments.
Definition RS.h:332
EntityType
Entity types used for property handling / filtering.
Definition RS.h:227
@ EntityTextBased
Any text based entity (text, attribute def, attribute)
Definition RS.h:258
TextLineSpacingStyle
Line spacing style for texts.
Definition RS.h:363
HAlign
Horizontal alignments.
Definition RS.h:342
ProjectionRenderingHint
Sets the current rendering hint for exports.
Definition RS.h:293
@ RenderTop
Definition RS.h:294
TextDrawingDirection
Text drawing direction.
Definition RS.h:354
Interface for geometrical shape classes.
Definition RShape.h:72
Stores and manages all data that defines the geometry and appearance of a text based entity (text,...
Definition RTextBasedData.h:68
QString fontName
Definition RTextBasedData.h:445
double angle
Definition RTextBasedData.h:447
QString getFontFile() const
Definition RTextBasedData.h:195
virtual ~RTextBasedData()
Definition RTextBasedData.h:104
virtual QList< RVector > getMiddlePoints(const RBox &queryBox=RDEFAULT_RBOX) const
Definition RTextBasedData.h:144
bool gotDraft
Definition RTextBasedData.h:456
double getTextWidth() const
Width of the text box used for line wrapping.
Definition RTextBasedData.h:233
void setHAlign(RS::HAlign halign)
Definition RTextBasedData.h:251
RS::VAlign getVAlign() const
Definition RTextBasedData.h:247
RS::TextLineSpacingStyle lineSpacingStyle
Definition RTextBasedData.h:443
double height
Definition RTextBasedData.h:451
double getAngle() const
Definition RTextBasedData.h:295
bool isItalic() const
Definition RTextBasedData.h:212
QString getFontName() const
Definition RTextBasedData.h:189
bool isBackward() const
Definition RTextBasedData.h:326
RS::HAlign getHAlign() const
Definition RTextBasedData.h:256
void setAngle(double angle)
Definition RTextBasedData.h:290
void setItalic(bool on)
Definition RTextBasedData.h:216
RS::VAlign verticalAlignment
Definition RTextBasedData.h:440
void setBold(bool on)
Definition RTextBasedData.h:207
QList< RTextLayout > textLayouts
Definition RTextBasedData.h:457
bool isHighlighted() const
Definition RTextBasedData.h:357
RBox boundingBox
Definition RTextBasedData.h:453
void setVAlign(RS::VAlign valign)
Definition RTextBasedData.h:242
virtual QList< RVector > getCenterPoints(const RBox &queryBox=RDEFAULT_RBOX) const
Definition RTextBasedData.h:148
double textWidth
Definition RTextBasedData.h:439
void setTextHeight(double h)
Definition RTextBasedData.h:225
virtual bool isValid() const
Definition RTextBasedData.h:125
RVector getPosition() const
Definition RTextBasedData.h:167
virtual QString getText() const
Definition RTextBasedData.h:372
QString fontFile
Definition RTextBasedData.h:446
void setHighlighted(bool on)
Definition RTextBasedData.h:353
void setDimensionLabel(bool on)
Definition RTextBasedData.h:339
TextFlags flags
Definition RTextBasedData.h:449
bool getFlag(RTextBasedData::TextFlag flag) const
Definition RTextBasedData.h:121
void setFontFile(const QString &fontFile)
Definition RTextBasedData.h:199
RVector getAlignmentPoint() const
Definition RTextBasedData.h:179
RS::TextDrawingDirection getDrawingDirection() const
Definition RTextBasedData.h:265
bool isDimensionLabel() const
Definition RTextBasedData.h:344
virtual QSharedPointer< RShape > getClosestShape(const RVector &pos, double range=RNANDOUBLE, bool ignoreComplex=false) const
Definition RTextBasedData.h:391
double lineSpacingFactor
Definition RTextBasedData.h:444
double getTextHeight() const
Definition RTextBasedData.h:221
double width
Definition RTextBasedData.h:452
TextFlag
Definition RTextBasedData.h:72
QString text
Definition RTextBasedData.h:435
void setDrawingDirection(RS::TextDrawingDirection drawingDirection)
Definition RTextBasedData.h:260
static RTextProxy * textProxy
Copyright (c) 2011-2018 by Andrew Mustun.
Definition RTextBasedData.h:460
virtual void update() const
Entities can reimplement this function to invalidate any internal cache (mark the entity as dirty).
Definition RTextBasedData.h:382
RVector position
Definition RTextBasedData.h:436
bool isUpsideDown() const
Definition RTextBasedData.h:335
virtual QList< RVector > getEndPoints(const RBox &queryBox=RDEFAULT_RBOX) const
Definition RTextBasedData.h:140
double getLineSpacingFactor() const
Definition RTextBasedData.h:286
void setBackward(bool on)
Definition RTextBasedData.h:321
void setAlignmentPoint(const RVector &alignmentPoint)
Definition RTextBasedData.h:183
void setUpsideDown(bool on)
Definition RTextBasedData.h:330
double getXScale() const
Definition RTextBasedData.h:308
virtual RS::EntityType getType() const
Definition RTextBasedData.h:110
void setTextWidth(double w)
Definition RTextBasedData.h:237
void setLineSpacingStyle(RS::TextLineSpacingStyle lineSpacingStyle)
Definition RTextBasedData.h:269
void setPosition(const RVector &position)
Definition RTextBasedData.h:171
void setSimple(bool on)
Definition RTextBasedData.h:312
RS::HAlign horizontalAlignment
Definition RTextBasedData.h:441
void setSelected(bool on)
Selects or deselects this entity.
Definition RTextBasedData.h:348
bool isBold() const
Definition RTextBasedData.h:203
virtual QList< RVector > getPointsWithDistanceToEnd(double distance, int from=RS::FromAny, const RBox &queryBox=RDEFAULT_RBOX) const
Definition RTextBasedData.h:152
double xScale
Definition RTextBasedData.h:448
RS::TextDrawingDirection drawingDirection
Definition RTextBasedData.h:442
static void setTextProxy(RTextProxy *p)
Definition RTextBasedData.h:415
RS::TextLineSpacingStyle getLineSpacingStyle() const
Definition RTextBasedData.h:274
void setLineSpacingFactor(double lineSpacingFactor)
Definition RTextBasedData.h:278
static RTextProxy * getTextProxy()
Definition RTextBasedData.h:425
bool isSimple() const
Definition RTextBasedData.h:317
void setXScale(double xScale)
Definition RTextBasedData.h:299
void setFlag(RTextBasedData::TextFlag flag, bool on=true)
Definition RTextBasedData.h:114
QList< RPainterPath > painterPaths
Definition RTextBasedData.h:454
static bool hasProxy()
Definition RTextBasedData.h:408
double textHeight
Definition RTextBasedData.h:438
static RS::EntityType getRtti()
Definition RTextBasedData.h:106
RVector alignmentPoint
Definition RTextBasedData.h:437
bool dirty
Definition RTextBasedData.h:455
Text entity.
Definition RTextBasedEntity.h:38
Copyright (c) 2011-2018 by Andrew Mustun.
Definition RTextLayout.h:37
Proxy for advanced text functionality.
Definition RTextProxy.h:36
Renders formatted text into painter paths.
Definition RTextRenderer.h:41
Conversion methods for units.
Definition RUnit.h:43
Represents a 3d vector (x/y/z).
Definition RVector.h:47
#define QCADCORE_EXPORT
Definition core_global.h:10
#define NULL
Definition opennurbs_system.h:256