QCAD
Open Source 2D CAD
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
RPainterPath.h
Go to the documentation of this file.
1 
20 #ifndef RPAINTERPATH_H
21 #define RPAINTERPATH_H
22 
23 #include "core_global.h"
24 
25 #include <QBrush>
26 #include <QFlags>
27 #include <QPainterPath>
28 #include <QPen>
29 #include <QSharedPointer>
30 
31 #include "RVector.h"
32 
33 class RArc;
34 class RShape;
35 class RSpline;
36 
37 
45 class QCADCORE_EXPORT RPainterPath : public QPainterPath {
46 
47 public:
48  enum Mode {
49  NoModes = 0x00,
50  Selected = 0x01,
51  Highlighted = 0x02,
52  Invalid = 0x04,
53  FixedPenColor = 0x08,
54  FixedBrushColor = 0x10,
55  AutoRegen = 0x20, // arcs (regen on zoom change)
56  AlwaysRegen = 0x40,
57  InheritPen = 0x80
58  };
59  Q_DECLARE_FLAGS(Modes, Mode)
60 
61 public:
62  RPainterPath();
63  RPainterPath(const QPainterPath& path);
64  virtual ~RPainterPath();
65 
66  QList<QSharedPointer<RShape> > getShapes() const;
67 
68  void moveTo(const RVector& v) {
69  QPainterPath::moveTo(v.x, v.y);
70  }
71 
72  void moveTo(qreal x, qreal y) {
73  QPainterPath::moveTo(x, y);
74  }
75 
79  void moveTo(const QPointF& p) {
80  QPainterPath::moveTo(p);
81  }
82 
83  void lineTo(const RVector& v) {
84  QPainterPath::lineTo(v.x, v.y);
85  }
86 
87  void lineTo(qreal x, qreal y) {
88  QPainterPath::lineTo(x, y);
89  }
90 
94  void lineTo(const QPointF& p) {
95  QPainterPath::lineTo(p);
96  }
97 
98  void quadTo(const RVector& cp, const RVector& v) {
99  QPainterPath::quadTo(cp.x, cp.y, v.x, v.y);
100  }
101 
102  void quadTo(qreal ctrlPtx, qreal ctrlPty, qreal endPtx, qreal endPty) {
103  QPainterPath::quadTo(ctrlPtx, ctrlPty, endPtx, endPty);
104  }
105 
106  void cubicTo(const RVector& cp1, const RVector& cp2, const RVector& v) {
107  QPainterPath::cubicTo(cp1.x, cp1.y, cp2.x, cp2.y, v.x, v.y);
108  }
109 
110  void cubicTo(qreal ctrlPt1x, qreal ctrlPt1y, qreal ctrlPt2x, qreal ctrlPt2y, qreal endPtx, qreal endPty) {
111  QPainterPath::cubicTo(ctrlPt1x, ctrlPt1y, ctrlPt2x, ctrlPt2y, endPtx, endPty);
112  }
113 
114  void closeSubpath() {
115  QPainterPath::closeSubpath();
116  }
117 
118 // bool contains(const QPointF& point) const {
119 // return QPainterPath::contains(point);
120 // }
121 
122 // bool contains(const QRectF& rectangle) const {
123 // return QPainterPath::contains(rectangle);
124 // }
125 
126 // bool contains(const QPainterPath& p) const {
127 // return QPainterPath::contains(p);
128 // }
129 
130  bool containsPoint(const RVector& v) const {
131  return QPainterPath::contains(QPointF(v.x, v.y));
132  }
133 
134  void addPath(const RPainterPath& path);
135  void addArc(const RArc& arc);
136  void addSpline(const RSpline& spline);
137 
138  void addRect(double x1, double y1, double x2, double y2);
139  void addRect(const QRectF& rect);
140  void addBox(const RBox& box);
141 
142  RBox getBoundingBox() const;
143 
144  RVector getStartPoint() const;
145  RVector getEndPoint() const;
146 
147  bool isValid();
148  void setValid(bool on);
149 
150  int getZLevel() const;
151  void setZLevel(int zl);
152 
153  //bool hasPen() const;
154  QPen getPen() const;
155  void setPen(const QPen& p);
156 
157  QBrush getBrush() const;
158  void setBrush(const QBrush& b);
159 
160  void setMode(RPainterPath::Mode mode, bool on = true);
161  bool getMode(RPainterPath::Mode mode) const;
162 
163  void setHighlighted(bool on);
164  bool isHighlighted() const;
165 
166  void setSelected(bool on);
167  bool isSelected() const;
168 
169  void setFixedPenColor(bool on);
170  bool isFixedPenColor() const;
171 
172  void setFixedBrushColor(bool on);
173  bool isFixedBrushColor() const;
174 
175  void setAutoRegen(bool on);
176  bool getAutoRegen() const;
177 
178  void setAlwaysRegen(bool on);
179  bool getAlwaysRegen() const;
180 
181  void setInheritPen(bool on);
182  bool getInheritPen() const;
183 
184  void setFeatureSize(double s);
185  double getFeatureSize() const;
186 
187  void setPixelSizeHint(double s);
188  double getPixelSizeHint() const;
189 
190  double getDistanceTo(const RVector& point) const;
191 
192  void addPoint(const RVector& position);
193  bool hasPoints();
194  void setPoints(const QList<RVector>& p);
195  QList<RVector> getPoints() const;
196 
197  void transform(const QTransform& t);
198 
199  int getElementCount() const;
200  double getXAt(int i) const;
201  double getYAt(int i) const;
202  QPainterPath::ElementType getTypeAt(int i) const;
203  bool isEmpty() const;
204 
205  void addShape(QSharedPointer<RShape> shape);
206 
207 private:
208  int zLevel;
209  QPen pen;
210  QBrush brush;
211  Modes modes;
212  QList<RVector> points;
213  double featureSize;
215 };
216 
217 QCADCORE_EXPORT QDebug operator<<(QDebug dbg, RPainterPath& p);
218 
219 //QDataStream& operator<< (QDataStream& stream, const RPainterPath& path);
220 //QDataStream& operator>> (QDataStream& stream, RPainterPath& path);
221 QCADCORE_EXPORT bool operator< (const RPainterPath& p1, const RPainterPath& p2);
222 
223 Q_DECLARE_OPERATORS_FOR_FLAGS(RPainterPath::Modes)
230 
231 #endif