QCAD
Open Source 2D CAD
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 "RBlock.h"
26 #include "RBox.h"
27 #include "REntity.h"
28 #include "RTransform.h"
29 #include "RVector.h"
30 
31 class RDocument;
32 class RExporter;
33 
42 
43 friend class RBlockReferenceEntity;
44 friend class RViewportEntity;
45 
46 protected:
48 
49 public:
51  RBlockReferenceData(RBlock::Id referencedBlockId,
52  const RVector& position, const RVector& scaleFactors,
53  double angle,
54  int columnCount=1, int rowCount=1,
55  double columnSpacing=0, double rowSpacing=0);
56 
57  virtual RS::EntityType getType() const {
58  return RS::EntityBlockRef;
59  }
60 
61  virtual bool isPointType() const;
62 
63  virtual QList<RBox> getBoundingBoxes(bool ignoreEmpty=false) const;
64  virtual RBox getBoundingBox(bool ignoreEmpty=false) const;
65 
66  virtual void to2D();
67 
68  virtual RVector getPointOnEntity() const;
69 
70  virtual QList<RRefPoint> getInternalReferencePoints(RS::ProjectionRenderingHint hint = RS::RenderTop) const;
71  virtual QList<RRefPoint> getReferencePoints(RS::ProjectionRenderingHint hint = RS::RenderTop) const;
72  virtual RVector getVectorTo(const RVector& point, bool limited = true, double strictRange = RMAXDOUBLE) const;
73  virtual double getDistanceTo(const RVector& point, bool limited = true, double range = 0.0,
74  bool draft = false, double strictRange = RMAXDOUBLE) const;
75 
76  RBox getQueryBoxInBlockCoordinates(const RBox& box) const;
77  virtual QList<QSharedPointer<RShape> > getShapes(const RBox& queryBox = RDEFAULT_RBOX, bool ignoreComplex = false, bool segment = false) const;
78 
79  //virtual void setSelected(bool on);
80 
81  virtual bool moveReferencePoint(const RVector& referencePoint, const RVector& targetPoint, Qt::KeyboardModifiers modifiers = Qt::NoModifier);
82  virtual bool move(const RVector& offset);
83  virtual bool rotate(double rotation, const RVector& center = RDEFAULT_RVECTOR);
84  virtual bool mirror(const RLine& axis);
85  virtual bool scale(const RVector& scaleFactors,
86  const RVector& center = RDEFAULT_RVECTOR);
87 
88  virtual void scaleVisualProperties(double scaleFactor);
89 
90  void setReferencedBlockId(RBlock::Id blockId);
91 
92  void groundReferencedBlockId() const;
93 
95  return referencedBlockId;
96  }
97 
98  void setReferencedBlockName(const QString& blockName);
99  QString getReferencedBlockName() const;
100 
102  return position;
103  }
104  void setPosition(const RVector& p);
105 
107  return scaleFactors;
108  }
109  void setScaleFactors(const RVector& sf);
110 
111  double getRotation() const {
112  return rotation;
113  }
114  void setRotation(double r);
115 
116  int getColumnCount() const {
117  return columnCount;
118  }
119  void setColumnCount(int c) {
120  columnCount = c;
121  }
122 
123  int getRowCount() const {
124  return rowCount;
125  }
126  void setRowCount(int c) {
127  rowCount = c;
128  }
129 
130  double getColumnSpacing() const {
131  return columnSpacing;
132  }
133  void setColumnSpacing(double s) {
134  columnSpacing = s;
135  }
136 
137  double getRowSpacing() const {
138  return rowSpacing;
139  }
140  void setRowSpacing(double s) {
141  rowSpacing = s;
142  }
143 
144  virtual void update() const;
145  virtual void update(RObject::Id entityId) const;
146 
147  QSharedPointer<REntity> queryEntity(REntity::Id entityId, bool transform = false, bool ignoreAttDef = true) const;
148  bool applyTransformationTo(REntity& entity) const;
152  bool applyTransformationTo(QSharedPointer<REntity>& entity) const;
153 
154  RTransform getTransform() const;
155 
156  RVector getColumnRowOffset(int col, int row, bool rotated = false) const;
157  void applyColumnRowOffsetTo(REntity& entity, int col, int row, bool rotated = false) const;
158  RVector mapToBlock(const RVector& v) const;
159 
160  bool isPixelUnit() const;
161 
162 private:
166  double rotation;
168  int rowCount;
170  double rowSpacing;
171 
173 
174  mutable QList<RBox> boundingBoxes;
175  mutable QList<RBox> boundingBoxesIgnoreEmpty;
176  mutable QMap<REntity::Id, QSharedPointer<REntity> > cache;
177 };
178 
182 Q_DECLARE_METATYPE(QSharedPointer<RBlockReferenceData>)
183 
184 #endif
RBlockReferenceData::setRowSpacing
void setRowSpacing(double s)
Definition: RBlockReferenceData.h:140
RBlockReferenceData::getType
virtual RS::EntityType getType() const
Definition: RBlockReferenceData.h:57
REntity.h
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
RBlockReferenceData::getPosition
RVector getPosition() const
Definition: RBlockReferenceData.h:101
RBlockReferenceData::cache
QMap< REntity::Id, QSharedPointer< REntity > > cache
Definition: RBlockReferenceData.h:176
RBlockReferenceData::boundingBoxes
QList< RBox > boundingBoxes
Definition: RBlockReferenceData.h:174
RS::EntityBlockRef
@ EntityBlockRef
Block reference.
Definition: RS.h:142
RViewportEntity::data
RViewportData data
Definition: RViewportEntity.h:205
RBlockReferenceData::visualPropertiesScale
double visualPropertiesScale
Definition: RBlockReferenceData.h:172
REntityData::getBoundingBox
virtual RBox getBoundingBox(bool ignoreEmpty=false) const
Definition: REntityData.cpp:303
RBox.h
REntityData::scaleVisualProperties
virtual void scaleVisualProperties(double scaleFactor)
Definition: REntityData.cpp:605
RBlockReferenceData::setColumnCount
void setColumnCount(int c)
Definition: RBlockReferenceData.h:119
RVector
Represents a 3d vector (x/y/z).
Definition: RVector.h:46
REntityData::isPointType
virtual bool isPointType() const
Definition: REntityData.h:95
REntityData::getInternalReferencePoints
virtual QList< RRefPoint > getInternalReferencePoints(RS::ProjectionRenderingHint hint=RS::RenderTop) const
Can be overwritten to return internal, resolved reference points.
Definition: REntityData.h:322
RS::EntityType
EntityType
Entity types used for property handling / filtering.
Definition: RS.h:125
RObject::document
RDocument * document
Definition: RObject.h:341
RBlockReferenceData::getRowCount
int getRowCount() const
Definition: RBlockReferenceData.h:123
RTransform
Copyright (c) 2011-2020 by Andrew Mustun.
Definition: RTransform.h:38
RLine
Low-level mathematical representation of a line.
Definition: RLine.h:41
RBlockReferenceData::position
RVector position
Definition: RBlockReferenceData.h:164
RBlockReferenceData::setColumnSpacing
void setColumnSpacing(double s)
Definition: RBlockReferenceData.h:133
RBlock.h
RDEFAULT_RVECTOR
#define RDEFAULT_RVECTOR
Definition: RVector.h:37
RBlockReferenceData::rowSpacing
double rowSpacing
Definition: RBlockReferenceData.h:170
RViewportEntity::setRotation
void setRotation(double r)
Definition: RViewportEntity.h:169
REntity
Base class for all entity classes.
Definition: REntity.h:65
RBlockReferenceData::getRowSpacing
double getRowSpacing() const
Definition: RBlockReferenceData.h:137
RVector.h
RBlockReferenceData::columnSpacing
double columnSpacing
Definition: RBlockReferenceData.h:169
Q_DECLARE_METATYPE
Q_DECLARE_METATYPE(RMath *)
RBlockReferenceData::getColumnSpacing
double getColumnSpacing() const
Definition: RBlockReferenceData.h:130
RBlockReferenceData::rowCount
int rowCount
Definition: RBlockReferenceData.h:168
RBlockReferenceData::setRowCount
void setRowCount(int c)
Definition: RBlockReferenceData.h:126
REntityData::getReferencePoints
virtual QList< RRefPoint > getReferencePoints(RS::ProjectionRenderingHint hint=RS::RenderTop) const =0
RBlockReferenceData
Defines the geometry and appearance of a block reference entity.
Definition: RBlockReferenceData.h:41
REntityData
Base class for all entity data classes.
Definition: REntityData.h:67
RObject::Id
int Id
Definition: RObject.h:66
RBlockReferenceData::referencedBlockId
RBlock::Id referencedBlockId
Definition: RBlockReferenceData.h:163
core_global.h
RExporter
Abstract base class for exporters.
Definition: RExporter.h:72
RDocument
A graphics document contains and owns entities, layers, user coordinate systems, variables,...
Definition: RDocument.h:72
REntityData::getVectorTo
virtual RVector getVectorTo(const RVector &point, bool limited=true, double strictRange=RMAXDOUBLE) const
Definition: REntityData.cpp:468
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
REntityData::scale
virtual bool scale(const RVector &scaleFactors, const RVector &center=RDEFAULT_RVECTOR)
Definition: REntityData.cpp:591
RBlockReferenceData::rotation
double rotation
Definition: RBlockReferenceData.h:166
REntityData::mirror
virtual bool mirror(const RLine &axis)
Definition: REntityData.cpp:611
RViewportEntity
Viewport entity.
Definition: RViewportEntity.h:38
REntityData::rotate
virtual bool rotate(double rotation, const RVector &center=RDEFAULT_RVECTOR)
Definition: REntityData.cpp:581
REntityData::getBoundingBoxes
virtual QList< RBox > getBoundingBoxes(bool ignoreEmpty=false) const
Definition: REntityData.h:152
REntityData::to2D
virtual void to2D()
Definition: REntityData.cpp:332
RTransform.h
RS::ProjectionRenderingHint
ProjectionRenderingHint
Sets the current rendering hint for exports.
Definition: RS.h:185
RDEFAULT_RBOX
#define RDEFAULT_RBOX
Definition: RBox.h:32
REntityData::getPointOnEntity
virtual RVector getPointOnEntity() const
Definition: REntityData.cpp:362
RBlockReferenceData::getScaleFactors
RVector getScaleFactors() const
Definition: RBlockReferenceData.h:106
RBlockReferenceData::getRotation
double getRotation() const
Definition: RBlockReferenceData.h:111
RBlockReferenceData::getColumnCount
int getColumnCount() const
Definition: RBlockReferenceData.h:116
REntityData::getShapes
virtual QList< QSharedPointer< RShape > > getShapes(const RBox &queryBox=RDEFAULT_RBOX, bool ignoreComplex=false, bool segment=false) const
Definition: REntityData.h:113
RS::RenderTop
@ RenderTop
Definition: RS.h:186
RBox
Represents a box e.g.
Definition: RBox.h:43
RBlockReferenceData::getReferencedBlockId
RBlock::Id getReferencedBlockId() const
Definition: RBlockReferenceData.h:94
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
RBlockReferenceEntity
Block reference entity.
Definition: RBlockReferenceEntity.h:38
RViewportEntity::setPosition
void setPosition(const RVector &p)
Definition: RViewportEntity.h:197
QCADCORE_EXPORT
#define QCADCORE_EXPORT
Definition: core_global.h:10
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...
RBlockReferenceData::boundingBoxesIgnoreEmpty
QList< RBox > boundingBoxesIgnoreEmpty
Definition: RBlockReferenceData.h:175
RBlockReferenceData::scaleFactors
RVector scaleFactors
Definition: RBlockReferenceData.h:165
RBlockReferenceData::columnCount
int columnCount
Definition: RBlockReferenceData.h:167