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  };
58  Q_DECLARE_FLAGS(Modes, Mode)
59 
60 public:
61  RPainterPath();
62  RPainterPath(const QPainterPath& path);
63  virtual ~RPainterPath();
64 
65  QList<QSharedPointer<RShape> > getShapes() const;
66 
67  void moveTo(const RVector& v) {
68  QPainterPath::moveTo(v.x, v.y);
69  }
70 
71  void moveTo(qreal x, qreal y) {
72  QPainterPath::moveTo(x, y);
73  }
74 
75  void lineTo(const RVector& v) {
76  QPainterPath::lineTo(v.x, v.y);
77  }
78 
79  void lineTo(qreal x, qreal y) {
80  QPainterPath::lineTo(x, y);
81  }
82 
83  void quadTo(const RVector& cp, const RVector& v) {
84  QPainterPath::quadTo(cp.x, cp.y, v.x, v.y);
85  }
86 
87  void quadTo(qreal ctrlPtx, qreal ctrlPty, qreal endPtx, qreal endPty) {
88  QPainterPath::quadTo(ctrlPtx, ctrlPty, endPtx, endPty);
89  }
90 
91  void cubicTo(const RVector& cp1, const RVector& cp2, const RVector& v) {
92  QPainterPath::cubicTo(cp1.x, cp1.y, cp2.x, cp2.y, v.x, v.y);
93  }
94 
95  void cubicTo(qreal ctrlPt1x, qreal ctrlPt1y, qreal ctrlPt2x, qreal ctrlPt2y, qreal endPtx, qreal endPty) {
96  QPainterPath::cubicTo(ctrlPt1x, ctrlPt1y, ctrlPt2x, ctrlPt2y, endPtx, endPty);
97  }
98 
99  void closeSubpath() {
100  QPainterPath::closeSubpath();
101  }
102 
103 // bool contains(const QPointF& point) const {
104 // return QPainterPath::contains(point);
105 // }
106 
107 // bool contains(const QRectF& rectangle) const {
108 // return QPainterPath::contains(rectangle);
109 // }
110 
111 // bool contains(const QPainterPath& p) const {
112 // return QPainterPath::contains(p);
113 // }
114 
115  bool containsPoint(const RVector& v) const {
116  return QPainterPath::contains(QPointF(v.x, v.y));
117  }
118 
119  void addPath(const RPainterPath& path);
120  void addArc(const RArc& arc);
121  void addSpline(const RSpline& spline);
122 
123  void addRect(double x1, double y1, double x2, double y2);
124  void addRect(const QRectF& rect);
125  void addBox(const RBox& box);
126 
127  RBox getBoundingBox() const;
128 
129  RVector getStartPoint() const;
130  RVector getEndPoint() const;
131 
132  bool isValid();
133  void setValid(bool on);
134 
135  int getZLevel() const;
136  void setZLevel(int zl);
137 
138  //bool hasPen() const;
139  QPen getPen() const;
140  void setPen(const QPen& p);
141 
142  QBrush getBrush() const;
143  void setBrush(const QBrush& b);
144 
145  void setMode(RPainterPath::Mode mode, bool on = true);
146  bool getMode(RPainterPath::Mode mode) const;
147 
148  void setHighlighted(bool on);
149  bool isHighlighted() const;
150 
151  void setSelected(bool on);
152  bool isSelected() const;
153 
154  void setFixedPenColor(bool on);
155  bool isFixedPenColor() const;
156 
157  void setFixedBrushColor(bool on);
158  bool isFixedBrushColor() const;
159 
160  void setAutoRegen(bool on);
161  bool getAutoRegen() const;
162 
163  void setAlwaysRegen(bool on);
164  bool getAlwaysRegen() const;
165 
166  void setFeatureSize(double s);
167  double getFeatureSize() const;
168 
169  void setPixelSizeHint(double s);
170  double getPixelSizeHint() const;
171 
172  double getDistanceTo(const RVector& point) const;
173 
174  void addPoint(const RVector& position);
175  bool hasPoints();
176  void setPoints(const QList<RVector>& p);
177  QList<RVector> getPoints() const;
178 
179  void transform(const QTransform& t);
180 
181  int getElementCount() const;
182  double getXAt(int i) const;
183  double getYAt(int i) const;
184  QPainterPath::ElementType getTypeAt(int i) const;
185  bool isEmpty() const;
186 
187  void addShape(QSharedPointer<RShape> shape);
188 
189 private:
190  int zLevel;
191  QPen pen;
192  QBrush brush;
193  Modes modes;
194  QList<RVector> points;
195  double featureSize;
197 };
198 
199 QCADCORE_EXPORT QDebug operator<<(QDebug dbg, RPainterPath& p);
200 
201 //QDataStream& operator<< (QDataStream& stream, const RPainterPath& path);
202 //QDataStream& operator>> (QDataStream& stream, RPainterPath& path);
203 QCADCORE_EXPORT bool operator< (const RPainterPath& p1, const RPainterPath& p2);
204 
205 Q_DECLARE_OPERATORS_FOR_FLAGS(RPainterPath::Modes)
212 
213 #endif