QCAD
Open Source 2D CAD
Loading...
Searching...
No Matches
RBlockReferenceData.h
Go to the documentation of this file.
1
20#ifndef RBLOCKREFERENCEDATA_H
21#define RBLOCKREFERENCEDATA_H
22
23#include "core_global.h"
24
25#include "RBox.h"
26#include "REntityData.h"
27#include "RVector.h"
28
29class RDocument;
30class RExporter;
31class REntity;
32class RLine;
33class RTransform;
34class RRefPoint;
35
44
46friend class RViewportEntity;
47
48protected:
50
51public:
53 RBlockReferenceData(RObject::Id referencedBlockId,
54 const RVector& position, const RVector& scaleFactors,
55 double angle,
56 int columnCount=1, int rowCount=1,
57 double columnSpacing=0, double rowSpacing=0,
58 double visualPropertiesScale=1.0);
59
61 return RS::EntityBlockRef;
62 }
63
64 virtual RS::EntityType getType() const {
65 return RS::EntityBlockRef;
66 }
67
68 virtual bool isPointType() const;
69
70 virtual QList<RBox> getBoundingBoxes(bool ignoreEmpty=false) const;
71 virtual RBox getBoundingBox(bool ignoreEmpty=false) const;
72
73 virtual void to2D();
74
75 virtual RVector getPointOnEntity() const;
76
77 virtual QList<RRefPoint> getInternalReferencePoints(RS::ProjectionRenderingHint hint = RS::RenderTop, QList<RObject::Id>* subEntityIds = NULL) const;
78 virtual QList<RRefPoint> getReferencePoints(RS::ProjectionRenderingHint hint = RS::RenderTop) const;
79 virtual RVector getVectorTo(const RVector& point, bool limited = true, double strictRange = RMAXDOUBLE) const;
80 virtual double getDistanceTo(const RVector& point, bool limited = true, double range = 0.0,
81 bool draft = false, double strictRange = RMAXDOUBLE) const;
82
83 RBox getQueryBoxInBlockCoordinates(const RBox& box) const;
84 virtual QList<QSharedPointer<RShape> > getShapes(const RBox& queryBox = RDEFAULT_RBOX, bool ignoreComplex = false, bool segment = false, QList<RObject::Id>* entityIds = NULL) const;
85
86 //virtual void setSelected(bool on);
87
88 virtual bool moveReferencePoint(const RVector& referencePoint, const RVector& targetPoint, Qt::KeyboardModifiers modifiers = Qt::NoModifier);
89 virtual bool move(const RVector& offset);
90 virtual bool rotate(double rotation, const RVector& center = RDEFAULT_RVECTOR);
91 virtual bool mirror(const RLine& axis);
92 virtual bool scale(const RVector& scaleFactors,
93 const RVector& center = RDEFAULT_RVECTOR);
94
95 virtual void scaleVisualProperties(double scaleFactor);
96
97 void setReferencedBlockId(RObject::Id blockId);
98
99 void groundReferencedBlockId() const;
100
102 return referencedBlockId;
103 }
104
105 bool hasBlockOwnership() const;
106
107 void setReferencedBlockName(const QString& blockName);
108 QString getReferencedBlockName() const;
109
111 return position;
112 }
113 void setPosition(const RVector& p);
114
116 return scaleFactors;
117 }
118 void setScaleFactors(const RVector& sf);
119
120 double getRotation() const {
121 return rotation;
122 }
123 void setRotation(double r);
124
125 int getColumnCount() const {
126 return columnCount;
127 }
128 void setColumnCount(int c) {
129 columnCount = c;
130 }
131
132 int getRowCount() const {
133 return rowCount;
134 }
135 void setRowCount(int c) {
136 rowCount = c;
137 }
138
139 double getColumnSpacing() const {
140 return columnSpacing;
141 }
142 void setColumnSpacing(double s) {
143 columnSpacing = s;
144 }
145
146 double getRowSpacing() const {
147 return rowSpacing;
148 }
149 void setRowSpacing(double s) {
150 rowSpacing = s;
151 }
152
153 virtual void update() const;
154 virtual void update(RObject::Id entityId) const;
155
156 QSharedPointer<REntity> queryEntity(RObject::Id entityId, bool transform = false, bool ignoreAttDef = true) const;
157 bool applyTransformationTo(REntity& entity) const;
161 bool applyTransformationTo(QSharedPointer<REntity>& entity) const;
162
163 QSharedPointer<REntity> getTransformed(QSharedPointer<REntity>& entity) const {
164 applyTransformationTo(entity);
165 return entity;
166 }
167
168 RTransform getTransform() const;
169
170 RVector getColumnRowOffset(int col, int row, bool rotated = false) const;
171 void applyColumnRowOffsetTo(REntity& entity, int col, int row, bool rotated = false) const;
172 RVector mapToBlock(const RVector& v) const;
173
174 bool isPixelUnit() const;
175
176#if QT_VERSION >= 0x060000
181 RBlockReferenceData copy() const {
182 return *this;
183 }
184#endif
185
186private:
190 double rotation;
195
197
198 mutable QList<RBox> boundingBoxes;
199 mutable QList<RBox> boundingBoxesIgnoreEmpty;
201};
202
206Q_DECLARE_METATYPE(QSharedPointer<RBlockReferenceData>)
207
208#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
Definition RDebug.h:38
Defines the geometry and appearance of a block reference entity.
Definition RBlockReferenceData.h:43
double columnSpacing
Definition RBlockReferenceData.h:193
void setRowSpacing(double s)
Definition RBlockReferenceData.h:149
double rowSpacing
Definition RBlockReferenceData.h:194
RObject::Id getReferencedBlockId() const
Definition RBlockReferenceData.h:101
double getRotation() const
Definition RBlockReferenceData.h:120
void setColumnSpacing(double s)
Definition RBlockReferenceData.h:142
void setRowCount(int c)
Definition RBlockReferenceData.h:135
QList< RBox > boundingBoxesIgnoreEmpty
Definition RBlockReferenceData.h:199
virtual RS::EntityType getType() const
Definition RBlockReferenceData.h:64
RObject::Id referencedBlockId
Definition RBlockReferenceData.h:187
RVector position
Definition RBlockReferenceData.h:188
RVector getScaleFactors() const
Definition RBlockReferenceData.h:115
static RS::EntityType getRtti()
Definition RBlockReferenceData.h:60
double rotation
Definition RBlockReferenceData.h:190
void setColumnCount(int c)
Definition RBlockReferenceData.h:128
int getColumnCount() const
Definition RBlockReferenceData.h:125
RVector scaleFactors
Definition RBlockReferenceData.h:189
QList< RBox > boundingBoxes
Definition RBlockReferenceData.h:198
double getColumnSpacing() const
Definition RBlockReferenceData.h:139
QMap< RObject::Id, QSharedPointer< REntity > > cache
Definition RBlockReferenceData.h:200
int rowCount
Definition RBlockReferenceData.h:192
int getRowCount() const
Definition RBlockReferenceData.h:132
int columnCount
Definition RBlockReferenceData.h:191
double getRowSpacing() const
Definition RBlockReferenceData.h:146
RVector getPosition() const
Definition RBlockReferenceData.h:110
QSharedPointer< REntity > getTransformed(QSharedPointer< REntity > &entity) const
Definition RBlockReferenceData.h:163
double visualPropertiesScale
Definition RBlockReferenceData.h:196
Block reference entity.
Definition RBlockReferenceEntity.h:38
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< RRefPoint > getInternalReferencePoints(RS::ProjectionRenderingHint hint=RS::RenderTop, QList< RObject::Id > *subEntityIds=NULL) const
Can be overwritten to return internal, resolved reference points.
Definition REntityData.cpp:157
virtual void to2D()
Definition REntityData.cpp:342
virtual QList< RBox > getBoundingBoxes(bool ignoreEmpty=false) const
Definition REntityData.h:160
virtual bool move(const RVector &offset)
Moves this entity by the given offset.
Definition REntityData.cpp:675
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 void scaleVisualProperties(double scaleFactor)
Definition REntityData.cpp:709
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
virtual RVector getVectorTo(const RVector &point, bool limited=true, double strictRange=RMAXDOUBLE) const
Definition REntityData.cpp:551
virtual bool isPointType() const
Definition REntityData.h:93
Base class for all entity classes.
Definition REntity.h:63
Abstract base class for exporters.
Definition RExporter.h:78
Low-level mathematical representation of a line.
Definition RLine.h:41
int Id
Definition RObject.h:69
Represents a reference point of an entity.
Definition RRefPoint.h:18
EntityType
Entity types used for property handling / filtering.
Definition RS.h:227
@ EntityBlockRef
Block reference.
Definition RS.h:246
ProjectionRenderingHint
Sets the current rendering hint for exports.
Definition RS.h:293
@ RenderTop
Definition RS.h:294
Copyright (c) 2011-2020 by Andrew Mustun.
Definition RTransform.h:37
Represents a 3d vector (x/y/z).
Definition RVector.h:47
Viewport entity.
Definition RViewportEntity.h:38
#define QCADCORE_EXPORT
Definition core_global.h:10
char s
Definition opennurbs_string.cpp:32
#define NULL
Definition opennurbs_system.h:256