QCAD
Open Source 2D CAD
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
RPolylineEntity.h
Go to the documentation of this file.
1 
20 #ifndef RPOLYLINEENTITY_H
21 #define RPOLYLINEENTITY_H
22 
23 #include "entity_global.h"
24 
25 #include "REntity.h"
26 #include "RPolylineData.h"
27 
28 class RDocument;
29 class RExporter;
30 class RArc;
31 class RLine;
32 
41 
42 public:
52 
58 
59 public:
60  RPolylineEntity(RDocument* document, const RPolylineData& data,
61  RObject::Id objectId = RObject::INVALID_ID);
62  virtual ~RPolylineEntity();
63 
64  static void init();
65 
66  static QSet<RPropertyTypeId> getStaticPropertyTypeIds() {
68  }
69 
70  virtual RPolylineEntity* clone() const {
71  return new RPolylineEntity(*this);
72  }
73 
74  virtual RS::EntityType getType() const {
75  return RS::EntityPolyline;
76  }
77 
78  void setShape(const RPolyline& l);
79 
80  bool setProperty(RPropertyTypeId propertyTypeId, const QVariant& value,
81  RTransaction* transaction=NULL);
82  QPair<QVariant, RPropertyAttributes> getProperty(
83  RPropertyTypeId& propertyTypeId,
84  bool humanReadable = false, bool noAttributes = false);
85 
86  virtual void exportEntity(RExporter& e, bool preview=false) const;
87 
88  virtual RPolylineData& getData() {
89  return data;
90  }
91 
92  virtual const RPolylineData& getData() const {
93  return data;
94  }
95 
97  return data.getPolylineShape();
98  }
99 
100  void clear() {
101  data.clear();
102  }
103 
104  void normalize() {
105  data.normalize();
106  }
107 
108  int countVertices() const {
109  return data.countVertices();
110  }
111 
112  void appendVertex(const RVector& vertex, double bulge = 0.0) {
113  data.appendVertex(vertex, bulge);
114  }
115 
116  void prependVertex(const RVector& vertex, double bulge = 0.0) {
117  data.prependVertex(vertex, bulge);
118  }
119 
120  void insertVertex(int index, const RVector& vertex) {
121  data.insertVertex(index, vertex);
122  }
123 
124  RVector getVertexAt(int i) const {
125  return data.getVertexAt(i);
126  }
127 
129  data.removeLastVertex();
130  }
131 
132  void removeVertex(int index) {
133  data.removeVertex(index);
134  }
135 
136  int countSegments() const {
137  return data.countSegments();
138  }
139 
140  QSharedPointer<RShape> getSegmentAt(int i) const {
141  return data.getSegmentAt(i);
142  }
143 
144  double getBulgeAt(int i) const {
145  return data.getBulgeAt(i);
146  }
147 
148  void setBulgeAt(int i, double b) {
149  data.setBulgeAt(i, b);
150  }
151 
152  double getDirection1() const {
153  return data.getDirection1();
154  }
155 
156  double getDirection2() const {
157  return data.getDirection2();
158  }
159 
160  bool reverse() {
161  return data.reverse();
162  }
163 
165  return data.getEndPoint();
166  }
167 
169  return data.getStartPoint();
170  }
171 
172  void setClosed(bool on) {
173  data.setClosed(on);
174  }
175 
176  bool isClosed() const {
177  return data.isClosed();
178  }
179 
180  bool isLogicallyClosed() const {
181  return data.isLogicallyClosed();
182  }
183 
184  QList<QSharedPointer<RShape> > getExploded() const {
185  return data.getExploded();
186  }
187 
188  virtual int getComplexity() const {
189  return countSegments();
190  }
191 
192  void simplify(double angleTolerance) {
193  data.simplify(angleTolerance);
194  }
195 
196 protected:
197  virtual void print(QDebug dbg) const;
198 
199 protected:
201 };
202 
204 Q_DECLARE_METATYPE(QSharedPointer<RPolylineEntity>)
205 Q_DECLARE_METATYPE(QSharedPointer<RPolylineEntity>*)
206 
207 #endif