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