ccanvas.h Source File¶

API: ccanvas.h Source File
API
ccanvas.h
1//==========================================================================
2// CCANVAS.H - header for
3// OMNeT++/OMNEST
4// Discrete System Simulation in C++
5//
6//==========================================================================
7
8/*--------------------------------------------------------------*
9 Copyright (C) 1992-2017 Andras Varga
10 Copyright (C) 2006-2017 OpenSim Ltd.
11
12 This file is distributed WITHOUT ANY WARRANTY. See the file
13 `license' for details on this and other legal matters.
14*--------------------------------------------------------------*/
15
16#ifndef __OMNETPP_CCANVAS_H
17#define __OMNETPP_CCANVAS_H
18
19#include <string>
20#include <map>
21#include <vector>
22#include <cmath>
23#include "cownedobject.h"
24#include "opp_pooledstring.h"
25
26namespace omnetpp {
27
28class cCanvas;
29class cProperty;
30class cProperties;
31class cObjectFactory;
32class cHasher;
33
34//TODO: doc: default values as precise enum names
35//TODO: doc: @figure attributes for each figure type
36//TODO: doc: revise class descriptions
37
60class SIM_API cFigure : public cOwnedObject
61{
62 public:
67 struct SIM_API Point {
70 double x = 0, y = 0;
72
74 Point() {}
75 Point(double x, double y) : x(x), y(y) {}
76 Point operator + (const Point& p) const;
77 Point operator - (const Point& p) const;
78 Point operator * (double s) const;
79 Point operator / (double s) const;
80 double operator * (const Point& p) const;
81 double distanceTo(const Point& p) const;
82 double getLength() const;
83 double getAngle() const {return std::atan2(y,x);}
84 Point& translate(double dx, double dy) {x += dx; y += dy; return *this;}
85 bool operator==(const Point& other) const {return x == other.x && y == other.y;}
86 std::string str() const;
88 };
89
94 struct SIM_API Rectangle {
97 double x = 0, y = 0, width = 0, height = 0;
99
101 Rectangle() {}
102 Rectangle(double x, double y, double width, double height) : x(x), y(y), width(width), height(height) {}
103 Point getCenter() const;
104 Point getSize() const;
105 Rectangle& translate(double dx, double dy) {x += dx; y += dy; return *this;}
106 bool operator==(const Rectangle& other) const {return x == other.x && y == other.y && width == other.width && height == other.height;}
107 std::string str() const;
109 };
110
124 struct SIM_API Color {
127 uint8_t red = 0, green = 0, blue = 0;
129
131 Color() {}
132 Color(uint8_t red, uint8_t green, uint8_t blue) : red(red), green(green), blue(blue) {}
133 Color(const char *color) {*this = parseColor(color);}
134 Color(const Color& other) = default;
135 bool operator==(const Color& other) const {return red == other.red && green == other.green && blue == other.blue;}
136 std::string str() const;
138 };
139
142 static const Color BLACK;
143 static const Color WHITE;
144 static const Color GREY;
145 static const Color RED;
146 static const Color GREEN;
147 static const Color BLUE;
148 static const Color YELLOW;
149 static const Color CYAN;
150 static const Color MAGENTA;
151
152 static const int NUM_GOOD_DARK_COLORS;
153 static const int NUM_GOOD_LIGHT_COLORS;
154 static const Color GOOD_DARK_COLORS[14];
155 static const Color GOOD_LIGHT_COLORS[10];
157
162 struct SIM_API Font {
165 std::string typeface;
166 int pointSize = 0;
167 uint8_t style = FONT_NONE;
169
171 Font() {}
172 Font(std::string typeface, int pointSize=-1, uint8_t style=FONT_NONE) : typeface(typeface), pointSize(pointSize), style(style) {}
173 Font(const Font& other) = default;
174 bool operator==(const Font& other) const {return typeface == other.typeface && pointSize == other.pointSize && style == other.style;}
175 std::string str() const;
177 };
178
180 enum FontStyle { FONT_NONE=0, FONT_BOLD=1, FONT_ITALIC=2, FONT_UNDERLINE=4 };
181
183 enum LineStyle { LINE_SOLID, LINE_DOTTED, LINE_DASHED };
184
186 enum CapStyle { CAP_BUTT, CAP_SQUARE, CAP_ROUND };
187
189 enum JoinStyle { JOIN_BEVEL, JOIN_MITER, JOIN_ROUND };
190
192 enum FillRule { FILL_EVENODD, FILL_NONZERO };
193
195 enum Arrowhead { ARROW_NONE, ARROW_SIMPLE, ARROW_TRIANGLE, ARROW_BARBED };
196
198 enum Interpolation { INTERPOLATION_NONE, INTERPOLATION_FAST, INTERPOLATION_BEST };
199
201 enum Anchor {ANCHOR_CENTER, ANCHOR_N, ANCHOR_E, ANCHOR_S, ANCHOR_W, ANCHOR_NW, ANCHOR_NE, ANCHOR_SE, ANCHOR_SW, ANCHOR_BASELINE_START, ANCHOR_BASELINE_MIDDLE, ANCHOR_BASELINE_END };
202
204 enum Alignment { ALIGN_LEFT, ALIGN_RIGHT, ALIGN_CENTER };
205
218 struct SIM_API Transform {
221 double a = 1, b = 0, c = 0, d = 1, t1 = 0, t2 = 0;
223
226 Transform() {}
227 Transform(double a, double b, double c, double d, double t1, double t2) : a(a), b(b), c(c), d(d), t1(t1), t2(t2) {}
228 Transform(const Transform& t) = default;
229 Transform& operator=(const Transform& t) = default;
230 Transform& translate(double dx, double dy);
231 Transform& translate(const Point& p) {return translate(p.x, p.y);}
232 Transform& scale(double s) {return scale(s,s);}
233 Transform& scale(double sx, double sy);
234 Transform& scale(double sx, double sy, double cx, double cy);
235 Transform& scale(double sx, double sy, const Point& c) {return scale(sx, sy, c.x, c.y);}
236 Transform& rotate(double phi);
237 Transform& rotate(double phi, double cx, double cy);
238 Transform& rotate(double phi, const Point& c) {return rotate(phi, c.x, c.y);}
239 Transform& skewx(double coeff); // note: if you want to skew by an angle, use coeff = tan(phi)
240 Transform& skewy(double coeff);
241 Transform& skewx(double coeff, double cy);
242 Transform& skewy(double coeff, double cx);
243 Transform& multiply(const Transform& t); // left-multiply: *this = t * (*this)
244 Transform& rightMultiply(const Transform& t); // *this = (*this) * t
245 Point applyTo(const Point& p) const;
246 bool operator==(const Transform& o) const {return a == o.a && b == o.b && c == o.c && d == o.d && t1 == o.t1 && t2 == o.t2;}
247 std::string str() const;
249 };
250
255 struct SIM_API RGBA {
258 uint8_t red = 0, green = 0, blue = 0, alpha = 0;
260
262 RGBA() {}
263 RGBA(uint8_t red, uint8_t green, uint8_t blue, uint8_t alpha) : red(red), green(green), blue(blue), alpha(alpha) {}
264 explicit RGBA(const Color& color, double opacity=1) : red(color.red), green(color.green), blue(color.blue), alpha(toAlpha(opacity)) {}
265 RGBA(const RGBA& other) = default;
266 void set(uint8_t r, uint8_t g, uint8_t b, uint8_t a) {red=r; green=g; blue=b; alpha=a;}
267 void operator=(const Color& color) {red = color.red; green = color.green; blue = color.blue; alpha = 255;}
268 operator Color() const {return Color(red, green, blue);}
269 bool operator==(const RGBA& o) const {return red == o.red && green == o.green && blue == o.blue && alpha == o.alpha;}
270 static uint8_t toAlpha(double opacity) {return opacity<=0 ? 0 : opacity>=1.0 ? 255 : (uint8_t)(opacity*255+0.5);}
271 std::string str() const;
273 };
274
280 class SIM_API Pixmap {
281 private:
282 int width = 0, height = 0; // zero is allowed
283 RGBA *data = nullptr;
284 private:
285 void allocate(int width, int height);
286 public:
289 Pixmap() {}
290 Pixmap(int width, int height, const RGBA& fill=RGBA(BLACK,0));
291 Pixmap(int width, int height, const Color& color, double opacity=1) : Pixmap(width, height, RGBA(color, opacity)) {}
292 Pixmap(const Pixmap& other);
293 ~Pixmap();
294 Pixmap& operator=(const Pixmap& other);
295 void setSize(int width, int height, const RGBA& fill_); // nondestructive
296 void setSize(int width, int height, const Color& color, double opacity); // nondestructive
297 void fill(const RGBA& fill_);
298 void fill(const Color& color, double opacity);
299 int getWidth() const {return width;}
300 int getHeight() const {return height;}
301 RGBA& pixel(int x, int y);
302 const RGBA pixel(int x, int y) const {return const_cast<Pixmap*>(this)->pixel(x,y);}
303 void setPixel(int x, int y, const Color& color, double opacity=1.0) {RGBA& p = pixel(x,y); p.set(color.red, color.green, color.blue, RGBA::toAlpha(opacity));}
304 const Color getColor(int x, int y) const {return (Color)pixel(x,y);}
305 void setColor(int x, int y, const Color& color) {RGBA& p = pixel(x,y); p.red = color.red; p.green = color.green; p.blue = color.blue;}
306 double getOpacity(int x, int y) const {return pixel(x,y).alpha / 255.0;}
307 void setOpacity(int x, int y, double opacity) {pixel(x,y).alpha = RGBA::toAlpha(opacity);}
308 const uint8_t *buffer() const {return (uint8_t*)data;} // direct access for low-level manipulation
309 std::string str() const;
311 };
312
313 // internal:
314 enum {
315 CHANGE_STRUCTURAL = 1, // child added, removed, or reordered, shown/hidden
316 CHANGE_TRANSFORM = 2, // transform change
317 CHANGE_GEOMETRY = 4, // geometry information (bounds, position, start/end angle, etc)
318 CHANGE_VISUAL = 8, // styling
319 CHANGE_INPUTDATA = 16, // text, image name or pixmap data, value to be displayed, etc
320 CHANGE_TAGS = 32, // figure tags
321 CHANGE_ZINDEX = 64, // zIndex
322 CHANGE_OTHER = 128 // tooltip, associated object
323 };
324
325 private:
326 static int lastId;
327 int id;
328 bool visible = true; // treated as structural change, for simpler handling
329 bool hasTooltip = false;
330 double zIndex = 0;
331 opp_pooledstring tooltip;
332 cObject *associatedObject = nullptr;
333 Transform transform;
334 std::vector<cFigure*> children;
335 opp_pooledstring tags;
336 uint64_t tagBits = 0; // bit-to-tagname mapping is stored in cCanvas. Note: change to std::bitset if 64 tags are not enough
337 uint8_t localChanges = 0;
338 uint8_t subtreeChanges = 0;
339 mutable bool cachedHashValid = false; // separate flag needed because zero hash is also a valid value
340 mutable uint32_t cachedHash = 0;
341
342 protected:
343 // internal:
344 virtual void validatePropertyKeys(cProperty *property) const; // relies on isAllowedPropertyKey()
345 virtual bool isAllowedPropertyKey(const char *key) const; // allows "x-*" keys, plus the ones returned by getAllowedPropertyKeys()
346 virtual cFigure *getRootFigure() const;
347 void fireStructuralChange() {fire(CHANGE_STRUCTURAL);}
348 void fireTransformChange() {fire(CHANGE_TRANSFORM);}
349 void fireGeometryChange() {fire(CHANGE_GEOMETRY);}
350 void fireVisualChange() {fire(CHANGE_VISUAL);}
351 void fireInputDataChange() {fire(CHANGE_INPUTDATA);}
352 virtual void fire(uint8_t flags);
353 virtual void hashTo(cHasher& hasher) const;
354
355 protected:
356 // helpers for parse(cProperty*)
357 static Point parsePoint(cProperty *property, const char *key, int index);
358 static std::vector<Point> parsePoints(cProperty *property, const char *key);
359 static Rectangle parseBounds(cProperty *property, const Rectangle& defaults);
360 static Transform parseTransform(cProperty *property, const char *key);
361 static Font parseFont(cProperty *property, const char *key);
362 static Rectangle computeBoundingBox(const Point& position, const Point& size, double ascent, Anchor anchor);
363 static void concatArrays(const char **dest, const char **first, const char **second); // concatenates nullptr-terminated arrays
364
365 public:
366 // helpers for class descriptors and parse(cProperty*)
367 static Point parsePoint(const char *s); // parse Point::str() format
368 static Rectangle parseRectangle(const char *s); // parse Rectangle::str() format
369 static Transform parseTransform(const char *s); // parse Transform::str() format
370 static Font parseFont(const char *s); // parse Font::str() format
371 static Color parseColor(const char *s);
372 static bool parseBool(const char *s);
373 static LineStyle parseLineStyle(const char *s);
374 static CapStyle parseCapStyle(const char *s);
375 static JoinStyle parseJoinStyle(const char *s);
376 static FillRule parseFillRule(const char *s);
377 static Arrowhead parseArrowhead(const char *s);
378 static Interpolation parseInterpolation(const char *s);
379 static Anchor parseAnchor(const char *s);
380 static Alignment parseAlignment(const char *s);
381
382 public:
383 // internal, mostly used by runtime GUIs:
384 virtual void updateParentTransform(Transform& transform) {transform.rightMultiply(getTransform());}
385 virtual void callRefreshDisplay(); // call refreshDisplay(), and recurse to its children
386 uint8_t getLocalChangeFlags() const {return localChanges;}
387 uint8_t getSubtreeChangeFlags() const {return subtreeChanges;}
388 void clearChangeFlags();
389 void refreshTagBitsRec(cCanvas *ownerCanvas);
390 int64_t getTagBits() const {return tagBits;}
391 void setTagBits(uint64_t tagBits) {this->tagBits = tagBits;}
392 uint32_t getHash() const;
393 void clearCachedHash(); // for debugging
394
395 private:
396 void copy(const cFigure& other);
397
398 public:
401
404 explicit cFigure(const char *name=nullptr);
405
409 cFigure(const cFigure& other) : cOwnedObject(other) {copy(other);}
410
414 virtual ~cFigure();
415
421 cFigure& operator=(const cFigure& other);
423
426
431 virtual cFigure *dup() const override {throw cRuntimeError(this, E_CANTDUP);}
432
437 virtual void forEachChild(cVisitor *v) override;
438
442 virtual std::string str() const override;
444
447
451 int getId() const {return id;}
452
456 virtual bool isVisible() const {return visible;}
457
463 virtual void setVisible(bool visible);
464
468 virtual const Transform& getTransform() const {return transform;}
469
476 virtual void setTransform(const Transform& transform);
477
483
489 virtual double getZIndex() const {return zIndex;}
490
501 virtual void setZIndex(double zIndex);
502
509 virtual double getEffectiveZIndex() const;
510
514 virtual const char *getTooltip() const {return hasTooltip ? tooltip.c_str() : nullptr;}
515
522 virtual void setTooltip(const char *tooltip);
523
530 virtual cObject *getAssociatedObject() const {return associatedObject;}
531
537 virtual void setAssociatedObject(cObject *obj);
538
544 virtual const char *getTags() const {return tags.c_str();}
545
551 virtual void setTags(const char *tags);
553
556
559 virtual cFigure *getParentFigure() const {return dynamic_cast<cFigure*>(getOwner());}
560
566 virtual cCanvas *getCanvas() const;
567
571 virtual int getNumFigures() const {return children.size();}
572
578 virtual cFigure *getFigure(int pos) const;
579
584 virtual cFigure *getFigure(const char *name) const;
585
590 virtual int findFigure(const char *name) const;
591
596 virtual int findFigure(const cFigure *figure) const;
597
601 virtual bool containsFigures() const {return !children.empty();}
602
607 virtual cFigure *findFigureRecursively(const char *name) const;
608
627 virtual cFigure *getFigureByPath(const char *path) const;
629
632
635 virtual void addFigure(cFigure *figure);
636
643 virtual void addFigure(cFigure *figure, int pos);
644
651 virtual cFigure *removeFigure(cFigure *figure);
652
659 virtual cFigure *removeFigure(int pos);
660
667
670
676 virtual bool isAbove(const cFigure *figure) const;
677
684 virtual bool isBelow(const cFigure *figure) const;
685
698 virtual void insertAbove(cFigure *referenceFigure);
699
712 virtual void insertBelow(cFigure *referenceFigure);
713
719 virtual void insertAfter(const cFigure *referenceFigure);
720
726 virtual void insertBefore(const cFigure *referenceFigure);
727
734 virtual void raiseAbove(cFigure *figure);
735
742 virtual void lowerBelow(cFigure *figure);
743
750 virtual void raiseToTop();
751
758 virtual void lowerToBottom();
759
763 virtual cFigure *dupTree() const;
765
768 virtual void translate(double dx, double dy) {transform.translate(dx,dy); fireTransformChange();}
769 virtual void scale(double s) {transform.scale(s); fireTransformChange();}
770 virtual void scale(double sx, double sy) {transform.scale(sx,sy); fireTransformChange();}
771 virtual void scale(double sx, double sy, double cx, double cy) {transform.scale(sx,sy,cx,cy); fireTransformChange();}
772 virtual void scale(double sx, double sy, const Point& c) {scale(sx, sy, c.x, c.y);}
773 virtual void rotate(double phi) {transform.rotate(phi); fireTransformChange();}
774 virtual void rotate(double phi, double cx, double cy) {transform.rotate(phi,cx,cy); fireTransformChange();}
775 virtual void rotate(double phi, const Point& c) {rotate(phi, c.x, c.y);}
776 virtual void skewx(double coeff) {transform.skewx(coeff); fireTransformChange();}
777 virtual void skewy(double coeff) {transform.skewy(coeff); fireTransformChange();}
778 virtual void skewx(double coeff, double cy) {transform.skewx(coeff,cy); fireTransformChange();}
779 virtual void skewy(double coeff, double cx) {transform.skewy(coeff,cx); fireTransformChange();}
781
784
794 virtual void parse(cProperty *property);
795
806 virtual const char **getAllowedPropertyKeys() const;
807
812 virtual void moveLocal(double dx, double dy) = 0;
813
820 virtual void move(double dx, double dy);
821
829 virtual void refreshDisplay() {}
830
836 virtual const char *getRendererClassName() const = 0;
838};
839
840// import the namespace to be able to use the stream write operators
841namespace canvas_stream_ops {
842#define STREAMOP(CLASS) inline std::ostream& operator<<(std::ostream& os, const CLASS& x) { return os << x.str(); }
843STREAMOP(cFigure::Point);
844STREAMOP(cFigure::Rectangle);
845STREAMOP(cFigure::Color);
846STREAMOP(cFigure::Font);
847STREAMOP(cFigure::Transform);
848STREAMOP(cFigure::RGBA);
849STREAMOP(cFigure::Pixmap);
850#undef STREAMOP
851};
852
853
864class SIM_API cGroupFigure : public cFigure
865{
866 private:
867 void copy(const cGroupFigure& other) {}
868 public:
871 explicit cGroupFigure(const char *name=nullptr) : cFigure(name) {}
872 cGroupFigure(const cGroupFigure& other) : cFigure(other) {copy(other);}
873 cGroupFigure& operator=(const cGroupFigure& other);
875
878 virtual cGroupFigure *dup() const override {return new cGroupFigure(*this);}
879 virtual std::string str() const override;
880 virtual const char *getRendererClassName() const override {return "GroupFigureRenderer";}
881 virtual void moveLocal(double dx, double dy) override {}
883};
884
898class SIM_API cPanelFigure : public cFigure
899{
900 private:
901 Point position;
902 Point anchorPoint;
903 protected:
904 virtual const char **getAllowedPropertyKeys() const override;
905 virtual void parse(cProperty *property) override;
906 virtual void hashTo(cHasher& hasher) const override;
907
908 private:
909 void copy(const cPanelFigure& other);
910 public:
913 explicit cPanelFigure(const char *name=nullptr) : cFigure(name) {}
914 cPanelFigure(const cPanelFigure& other) : cFigure(other) {copy(other);}
915 cPanelFigure& operator=(const cPanelFigure& other);
917
920 virtual cPanelFigure *dup() const override {return new cPanelFigure(*this);}
921 virtual std::string str() const override;
922 virtual const char *getRendererClassName() const override {return "";} // non-visual figure
923 virtual void updateParentTransform(Transform& transform) override;
924 virtual void move(double dx, double dy) override { moveLocal(dx, dy); }
925 virtual void moveLocal(double dx, double dy) override {position.x += dx; position.y += dy; fireTransformChange();}
927
930 virtual const Point& getPosition() const {return position;}
931 virtual void setPosition(const Point& position) {this->position = position; fireTransformChange();}
932
942 virtual const Point& getAnchorPoint() const {return anchorPoint;}
943 virtual void setAnchorPoint(const Point& anchorPoint) {this->anchorPoint = anchorPoint; fireTransformChange();}
944
946};
947
964class SIM_API cAbstractLineFigure : public cFigure
965{
966 private:
967 Color lineColor;
968 LineStyle lineStyle = LINE_SOLID;
969 double lineWidth = 1;
970 double lineOpacity = 1;
971 CapStyle capStyle = CAP_BUTT;
972 Arrowhead startArrowhead = ARROW_NONE, endArrowhead = ARROW_NONE;
973 bool zoomLineWidth = false;
974 private:
975 void copy(const cAbstractLineFigure& other);
976 protected:
977 virtual const char **getAllowedPropertyKeys() const override;
978 virtual void hashTo(cHasher& hasher) const override;
979 public:
982 explicit cAbstractLineFigure(const char *name=nullptr) : cFigure(name), lineColor(BLACK) {}
983 cAbstractLineFigure(const cAbstractLineFigure& other) : cFigure(other) {copy(other);}
984 cAbstractLineFigure& operator=(const cAbstractLineFigure& other);
986
989 virtual cAbstractLineFigure *dup() const override {throw cRuntimeError(this, E_CANTDUP);}
990 virtual std::string str() const override;
991 virtual void parse(cProperty *property) override;
993
996
999 virtual const Color& getLineColor() const {return lineColor;}
1000
1004 virtual void setLineColor(const Color& lineColor);
1005
1011 virtual double getLineWidth() const {return lineWidth;}
1012
1018 virtual void setLineWidth(double lineWidth);
1019
1023 virtual double getLineOpacity() const {return lineOpacity;}
1024
1029 virtual void setLineOpacity(double lineOpacity);
1030
1034 virtual LineStyle getLineStyle() const {return lineStyle;}
1035
1040 virtual void setLineStyle(LineStyle lineStyle);
1041
1045 virtual CapStyle getCapStyle() const {return capStyle;}
1046
1051 virtual void setCapStyle(CapStyle capStyle);
1052
1056 virtual Arrowhead getStartArrowhead() const {return startArrowhead;}
1057
1062 virtual void setStartArrowhead(Arrowhead startArrowhead);
1063
1067 virtual Arrowhead getEndArrowhead() const {return endArrowhead;}
1068
1073 virtual void setEndArrowhead(Arrowhead endArrowhead);
1074
1079 virtual bool getZoomLineWidth() const {return zoomLineWidth;}
1080
1086 virtual void setZoomLineWidth(bool zoomLineWidth);
1088};
1089
1098class SIM_API cLineFigure : public cAbstractLineFigure
1099{
1100 private:
1101 Point start, end;
1102 private:
1103 void copy(const cLineFigure& other);
1104 protected:
1105 virtual const char **getAllowedPropertyKeys() const override;
1106 virtual void hashTo(cHasher& hasher) const override;
1107 public:
1110 explicit cLineFigure(const char *name=nullptr) : cAbstractLineFigure(name) {}
1111 cLineFigure(const cLineFigure& other) : cAbstractLineFigure(other) {copy(other);}
1112 cLineFigure& operator=(const cLineFigure& other);
1114
1117 virtual cLineFigure *dup() const override {return new cLineFigure(*this);}
1118 virtual std::string str() const override;
1119 virtual void parse(cProperty *property) override;
1120 virtual void moveLocal(double dx, double dy) override;
1121 virtual const char *getRendererClassName() const override {return "LineFigureRenderer";}
1123
1126
1129 virtual const Point& getStart() const {return start;}
1130
1134 virtual void setStart(const Point& start);
1135
1139 virtual const Point& getEnd() const {return end;}
1140
1144 virtual void setEnd(const Point& end);
1146};
1147
1167class SIM_API cArcFigure : public cAbstractLineFigure
1168{
1169 private:
1170 Rectangle bounds; // bounding box of the oval that arc is part of
1171 double startAngle = 0, endAngle = 0; // in radians, CCW, 0=east
1172 private:
1173 void copy(const cArcFigure& other);
1174 protected:
1175 virtual const char **getAllowedPropertyKeys() const override;
1176 virtual void hashTo(cHasher& hasher) const override;
1177 public:
1180 explicit cArcFigure(const char *name=nullptr) : cAbstractLineFigure(name) {}
1181 cArcFigure(const cArcFigure& other) : cAbstractLineFigure(other) {copy(other);}
1182 cArcFigure& operator=(const cArcFigure& other);
1184
1187 virtual cArcFigure *dup() const override {return new cArcFigure(*this);}
1188 virtual std::string str() const override;
1189 virtual void parse(cProperty *property) override;
1190 virtual void moveLocal(double dx, double dy) override;
1191 virtual const char *getRendererClassName() const override {return "ArcFigureRenderer";}
1193
1196
1200 virtual const Rectangle& getBounds() const {return bounds;}
1201
1206 virtual void setBounds(const Rectangle& bounds);
1207
1212 virtual void setPosition(const Point& position, Anchor anchor);
1213
1218 virtual double getStartAngle() const {return startAngle;}
1219
1224 virtual void setStartAngle(double startAngle);
1225
1230 virtual double getEndAngle() const {return endAngle;}
1231
1236 virtual void setEndAngle(double endAngle);
1238};
1239
1257class SIM_API cPolylineFigure : public cAbstractLineFigure
1258{
1259 private:
1260 std::vector<Point> points;
1261 bool smooth = false;
1262 JoinStyle joinStyle = JOIN_MITER;
1263 private:
1264 void copy(const cPolylineFigure& other);
1265 void checkIndex(int i) const;
1266 void checkInsIndex(int i) const;
1267 protected:
1268 virtual const char **getAllowedPropertyKeys() const override;
1269 virtual void hashTo(cHasher& hasher) const override;
1270 public:
1273 explicit cPolylineFigure(const char *name=nullptr) : cAbstractLineFigure(name) {}
1274 cPolylineFigure(const cPolylineFigure& other) : cAbstractLineFigure(other) {copy(other);}
1275 cPolylineFigure& operator=(const cPolylineFigure& other);
1277
1280 virtual cPolylineFigure *dup() const override {return new cPolylineFigure(*this);}
1281 virtual std::string str() const override;
1282 virtual void parse(cProperty *property) override;
1283 virtual void moveLocal(double dx, double dy) override;
1284 virtual const char *getRendererClassName() const override {return "PolylineFigureRenderer";}
1286
1289
1292 virtual const std::vector<Point>& getPoints() const {return points;}
1293
1297 virtual void setPoints(const std::vector<Point>& points);
1298
1302 virtual int getNumPoints() const {return points.size();}
1303
1308 virtual const Point& getPoint(int i) const {checkIndex(i); return points[i];}
1309
1314 virtual void setNumPoints(int size); // primarily for sim_std.msg
1315
1319 virtual void setPoint(int i, const Point& point);
1320
1324 virtual void addPoint(const Point& point);
1325
1329 virtual void removePoint(int i);
1330
1335 virtual void insertPoint(int i, const Point& point);
1336
1343 virtual bool getSmooth() const {return smooth;}
1344
1351 virtual void setSmooth(bool smooth);
1353
1356
1359 virtual JoinStyle getJoinStyle() const {return joinStyle;}
1360
1365 virtual void setJoinStyle(JoinStyle joinStyle);
1367};
1368
1389class SIM_API cAbstractShapeFigure : public cFigure
1390{
1391 private:
1392 bool outlined = true;
1393 bool filled = false;
1394 Color lineColor;
1395 Color fillColor;
1396 LineStyle lineStyle = LINE_SOLID;
1397 double lineWidth = 1;
1398 double lineOpacity = 1;
1399 double fillOpacity = 1;
1400 bool zoomLineWidth = false;
1401 bool clipChildren = false;
1402 private:
1403 void copy(const cAbstractShapeFigure& other);
1404 protected:
1405 virtual const char **getAllowedPropertyKeys() const override;
1406 virtual void hashTo(cHasher& hasher) const override;
1407 public:
1410 explicit cAbstractShapeFigure(const char *name=nullptr) : cFigure(name), lineColor(BLACK), fillColor(BLUE) {}
1411 cAbstractShapeFigure(const cAbstractShapeFigure& other) : cFigure(other) {copy(other);}
1412 cAbstractShapeFigure& operator=(const cAbstractShapeFigure& other);
1414
1417 virtual cAbstractShapeFigure *dup() const override {throw cRuntimeError(this, E_CANTDUP);}
1418 virtual std::string str() const override;
1419 virtual void parse(cProperty *property) override;
1421
1424
1427 virtual bool isFilled() const {return filled;}
1428
1433 virtual void setFilled(bool filled);
1434
1438 virtual bool isOutlined() const {return outlined;}
1439
1444 virtual void setOutlined(bool outlined);
1445
1449 virtual const Color& getLineColor() const {return lineColor;}
1450
1455 virtual void setLineColor(const Color& lineColor);
1456
1460 virtual const Color& getFillColor() const {return fillColor;}
1461
1467 virtual void setFillColor(const Color& fillColor);
1468
1472 virtual LineStyle getLineStyle() const {return lineStyle;}
1473
1478 virtual void setLineStyle(LineStyle lineStyle);
1479
1485 virtual double getLineWidth() const {return lineWidth;}
1486
1492 virtual void setLineWidth(double lineWidth);
1493
1498 virtual double getLineOpacity() const {return lineOpacity;}
1499
1504 virtual void setLineOpacity(double lineOpacity);
1505
1510 virtual double getFillOpacity() const {return fillOpacity;}
1511
1516 virtual void setFillOpacity(double fillOpacity);
1517
1522 virtual bool getZoomLineWidth() const {return zoomLineWidth;}
1523
1529 virtual void setZoomLineWidth(bool zoomLineWidth);
1531
1534
1538 virtual bool getClipChildren() const {return clipChildren;}
1539
1569 virtual void setClipChildren(bool clipChildren);
1571};
1572
1582class SIM_API cRectangleFigure : public cAbstractShapeFigure
1583{
1584 private:
1585 Rectangle bounds;
1586 double cornerRx = 0, cornerRy = 0;
1587 protected:
1588 virtual const char **getAllowedPropertyKeys() const override;
1589 virtual void hashTo(cHasher& hasher) const override;
1590 private:
1591 void copy(const cRectangleFigure& other);
1592 public:
1595 explicit cRectangleFigure(const char *name=nullptr) : cAbstractShapeFigure(name) {}
1596 cRectangleFigure(const cRectangleFigure& other) : cAbstractShapeFigure(other) {copy(other);}
1597 cRectangleFigure& operator=(const cRectangleFigure& other);
1599
1602 virtual cRectangleFigure *dup() const override {return new cRectangleFigure(*this);}
1603 virtual std::string str() const override;
1604 virtual void parse(cProperty *property) override;
1605 virtual void moveLocal(double dx, double dy) override;
1606 virtual const char *getRendererClassName() const override {return "RectangleFigureRenderer";}
1608
1611
1614 virtual const Rectangle& getBounds() const {return bounds;}
1615
1619 virtual void setBounds(const Rectangle& bounds);
1620
1625 virtual void setPosition(const Point& position, Anchor anchor);
1626
1631 virtual void setCornerRadius(double r) {setCornerRx(r);setCornerRy(r);}
1632
1636 virtual double getCornerRx() const {return cornerRx;}
1637
1642 virtual void setCornerRx(double rx);
1643
1647 virtual double getCornerRy() const {return cornerRy;}
1648
1653 virtual void setCornerRy(double ry);
1655};
1656
1666class SIM_API cOvalFigure : public cAbstractShapeFigure
1667{
1668 private:
1669 Rectangle bounds; // bounding box
1670 private:
1671 void copy(const cOvalFigure& other);
1672 protected:
1673 virtual const char **getAllowedPropertyKeys() const override;
1674 virtual void hashTo(cHasher& hasher) const override;
1675 public:
1678 explicit cOvalFigure(const char *name=nullptr) : cAbstractShapeFigure(name) {}
1679 cOvalFigure(const cOvalFigure& other) : cAbstractShapeFigure(other) {copy(other);}
1680 cOvalFigure& operator=(const cOvalFigure& other);
1682
1685 virtual cOvalFigure *dup() const override {return new cOvalFigure(*this);}
1686 virtual std::string str() const override;
1687 virtual void parse(cProperty *property) override;
1688 virtual void moveLocal(double dx, double dy) override;
1689 virtual const char *getRendererClassName() const override {return "OvalFigureRenderer";}
1691
1694
1697 virtual const Rectangle& getBounds() const {return bounds;}
1698
1702 virtual void setBounds(const Rectangle& bounds);
1703
1708 virtual void setPosition(const Point& position, Anchor anchor);
1710};
1711
1722class SIM_API cRingFigure : public cAbstractShapeFigure
1723{
1724 private:
1725 Rectangle bounds; // bounding box
1726 double innerRx = 0, innerRy = 0;
1727 private:
1728 void copy(const cRingFigure& other);
1729 protected:
1730 virtual const char **getAllowedPropertyKeys() const override;
1731 virtual void hashTo(cHasher& hasher) const override;
1732 public:
1735 explicit cRingFigure(const char *name=nullptr) : cAbstractShapeFigure(name) {}
1736 cRingFigure(const cRingFigure& other) : cAbstractShapeFigure(other) {copy(other);}
1737 cRingFigure& operator=(const cRingFigure& other);
1739
1742 virtual cRingFigure *dup() const override {return new cRingFigure(*this);}
1743 virtual std::string str() const override;
1744 virtual void parse(cProperty *property) override;
1745 virtual void moveLocal(double dx, double dy) override;
1746 virtual const char *getRendererClassName() const override {return "RingFigureRenderer";}
1748
1751
1754 virtual const Rectangle& getBounds() const {return bounds;}
1755
1759 virtual void setBounds(const Rectangle& bounds);
1760
1765 virtual void setPosition(const Point& position, Anchor anchor);
1766
1772 virtual void setInnerRadius(double r) {setInnerRx(r);setInnerRy(r);}
1773
1777 virtual double getInnerRx() const {return innerRx;}
1778
1782 virtual void setInnerRx(double rx);
1783
1787 virtual double getInnerRy() const {return innerRy;}
1788
1792 virtual void setInnerRy(double ry);
1794};
1795
1823class SIM_API cPieSliceFigure : public cAbstractShapeFigure
1824{
1825 private:
1826 Rectangle bounds; // bounding box of the oval that the pie slice is part of
1827 double startAngle = 0, endAngle = 0; // in radians, CCW, 0=east
1828 private:
1829 void copy(const cPieSliceFigure& other);
1830 protected:
1831 virtual const char **getAllowedPropertyKeys() const override;
1832 virtual void hashTo(cHasher& hasher) const override;
1833 public:
1836 explicit cPieSliceFigure(const char *name=nullptr) : cAbstractShapeFigure(name) {}
1837 cPieSliceFigure(const cPieSliceFigure& other) : cAbstractShapeFigure(other) {copy(other);}
1838 cPieSliceFigure& operator=(const cPieSliceFigure& other);
1840
1843 virtual cPieSliceFigure *dup() const override {return new cPieSliceFigure(*this);}
1844 virtual std::string str() const override;
1845 virtual void parse(cProperty *property) override;
1846 virtual void moveLocal(double dx, double dy) override;
1847 virtual const char *getRendererClassName() const override {return "PieSliceFigureRenderer";}
1849
1852
1856 virtual const Rectangle& getBounds() const {return bounds;}
1857
1862 virtual void setBounds(const Rectangle& bounds);
1863
1868 virtual void setPosition(const Point& position, Anchor anchor);
1869
1874 virtual double getStartAngle() const {return startAngle;}
1875
1880 virtual void setStartAngle(double startAngle);
1881
1886 virtual double getEndAngle() const {return endAngle;}
1887
1892 virtual void setEndAngle(double endAngle);
1894};
1895
1909class SIM_API cPolygonFigure : public cAbstractShapeFigure
1910{
1911 private:
1912 std::vector<Point> points;
1913 bool smooth = false;
1914 JoinStyle joinStyle = JOIN_MITER;
1915 FillRule fillRule = FILL_EVENODD;
1916 private:
1917 void copy(const cPolygonFigure& other);
1918 void checkIndex(int i) const;
1919 void checkInsIndex(int i) const;
1920 protected:
1921 virtual const char **getAllowedPropertyKeys() const override;
1922 virtual void hashTo(cHasher& hasher) const override;
1923 public:
1926 explicit cPolygonFigure(const char *name=nullptr) : cAbstractShapeFigure(name) {}
1927 cPolygonFigure(const cPolygonFigure& other) : cAbstractShapeFigure(other) {copy(other);}
1928 cPolygonFigure& operator=(const cPolygonFigure& other);
1930
1933 virtual cPolygonFigure *dup() const override {return new cPolygonFigure(*this);}
1934 virtual std::string str() const override;
1935 virtual void parse(cProperty *property) override;
1936 virtual void moveLocal(double dx, double dy) override;
1937 virtual const char *getRendererClassName() const override {return "PolygonFigureRenderer";}
1939
1942
1945 virtual const std::vector<Point>& getPoints() const {return points;}
1946
1950 virtual void setPoints(const std::vector<Point>& points);
1951
1955 virtual int getNumPoints() const {return points.size();}
1956
1961 virtual const Point& getPoint(int i) const {checkIndex(i); return points[i];}
1962
1967 virtual void setNumPoints(int size); // primarily for sim_std.msg
1968
1972 virtual void setPoint(int i, const Point& point);
1973
1977 virtual void addPoint(const Point& point);
1978
1982 virtual void removePoint(int i);
1983
1988 virtual void insertPoint(int i, const Point& point);
1989
1994 virtual bool getSmooth() const {return smooth;}
1995
2001 virtual void setSmooth(bool smooth);
2003
2006
2009 virtual JoinStyle getJoinStyle() const {return joinStyle;}
2010
2015 virtual void setJoinStyle(JoinStyle joinStyle);
2016
2023 virtual FillRule getFillRule() const {return fillRule;}
2024
2032 virtual void setFillRule(FillRule fillRule);
2034};
2035
2052class SIM_API cPathFigure : public cAbstractShapeFigure
2053{
2054 public:
2055 struct PathItem { char code; };
2056 struct MoveTo : PathItem { double x; double y; };
2057 struct MoveRel : PathItem { double dx; double dy; };
2058 struct LineTo : PathItem { double x; double y; };
2059 struct LineRel : PathItem { double dx; double dy; };
2060 struct HorizontalLineTo : PathItem { double x; };
2061 struct HorizontalLineRel : PathItem { double dx; };
2062 struct VerticalLineTo : PathItem { double y; };
2063 struct VerticalLineRel : PathItem { double dy; };
2064 struct ArcTo : PathItem { double rx; double ry; double phi; bool largeArc; bool sweep; double x; double y; };
2065 struct ArcRel : PathItem { double rx; double ry; double phi; bool largeArc; bool sweep; double dx; double dy; };
2066 struct CurveTo : PathItem { double x1; double y1; double x; double y; };
2067 struct CurveRel : PathItem { double dx1; double dy1; double dx; double dy; };
2068 struct SmoothCurveTo : PathItem { double x; double y; };
2069 struct SmoothCurveRel : PathItem { double dx; double dy; };
2070 struct CubicBezierCurveTo : PathItem { double x1; double y1; double x2; double y2; double x; double y; };
2071 struct CubicBezierCurveRel : PathItem { double dx1; double dy1; double dx2; double dy2; double dx; double dy; };
2072 struct SmoothCubicBezierCurveTo : PathItem { double x2; double y2; double x; double y; };
2073 struct SmoothCubicBezierCurveRel : PathItem { double dx2; double dy2; double dx; double dy; };
2074 struct ClosePath : PathItem { };
2075
2076 private:
2077 std::vector<PathItem*> path;
2078 mutable std::string cachedPathString;
2079 JoinStyle joinStyle = JOIN_MITER;
2080 CapStyle capStyle = CAP_BUTT;
2081 Point offset;
2082 FillRule fillRule = FILL_EVENODD;
2083
2084 private:
2085 void copy(const cPathFigure& other);
2086 void addItem(PathItem *item);
2087 void doClearPath();
2088
2089 protected:
2090 virtual const char **getAllowedPropertyKeys() const override;
2091 virtual void hashTo(cHasher& hasher) const override;
2092
2093 public:
2096 explicit cPathFigure(const char *name=nullptr) : cAbstractShapeFigure(name) {}
2097 cPathFigure(const cPathFigure& other) : cAbstractShapeFigure(other) {copy(other);}
2098 virtual ~cPathFigure() {doClearPath();}
2099 cPathFigure& operator=(const cPathFigure& other);
2101
2104 virtual cPathFigure *dup() const override {return new cPathFigure(*this);}
2105 virtual std::string str() const override;
2106 virtual void parse(cProperty *property) override;
2110 virtual void moveLocal(double dx, double dy) override;
2111 virtual const char *getRendererClassName() const override {return "PathFigureRenderer";}
2113
2116
2119 virtual JoinStyle getJoinStyle() const {return joinStyle;}
2120
2125 virtual void setJoinStyle(JoinStyle joinStyle);
2126
2130 virtual CapStyle getCapStyle() const {return capStyle;}
2131
2136 virtual void setCapStyle(CapStyle capStyle);
2137
2144 virtual FillRule getFillRule() const {return fillRule;}
2145
2154 virtual void setFillRule(FillRule fillRule);
2156
2159
2164 virtual const Point& getOffset() const {return offset;}
2165
2173 virtual void setOffset(const Point& offset);
2175
2178
2181 virtual const char *getPath() const;
2182
2188 virtual void setPath(const char *path);
2189
2193 virtual int getNumPathItems() const {return path.size();}
2194
2200 virtual const PathItem *getPathItem(int k) const {return path[k];}
2201
2205 virtual void clearPath();
2206
2213 virtual void addMoveTo(double x, double y); // M x y
2214
2222 virtual void addMoveRel(double dx, double dy); // m dx dy
2223
2230 virtual void addLineTo(double x, double y); // L x y
2231
2238 virtual void addLineRel(double dx, double dy); // l dx dy
2239
2246 virtual void addHorizontalLineTo(double x); // H x
2247
2254 virtual void addHorizontalLineRel(double dx); // h dx
2255
2262 virtual void addVerticalLineTo(double y); // V y
2263
2270 virtual void addVerticalLineRel(double dy); // v dy
2271
2286 virtual void addArcTo(double rx, double ry, double phi, bool largeArc, bool sweep, double x, double y); // A rx ry phi largeArc sweep x y
2287
2303 virtual void addArcRel(double rx, double ry, double phi, bool largeArc, bool sweep, double dx, double dy); // a rx ry phi largeArc sweep dx dy
2304
2311 virtual void addCurveTo(double x1, double y1, double x, double y); // Q x1 y1 x y
2312
2320 virtual void addCurveRel(double dx1, double dy1, double dx, double dy); // q dx1 dy1 dx dy
2321
2333 virtual void addSmoothCurveTo(double x, double y); // T x y
2334
2346 virtual void addSmoothCurveRel(double dx, double dy); // t dx dy
2347
2356 virtual void addCubicBezierCurveTo(double x1, double y1, double x2, double y2, double x, double y); // C x1 y1 x2 y2 x y
2357
2367 virtual void addCubicBezierCurveRel(double dx1, double dy1, double dx2, double dy2, double dx, double dy); // c dx1 dy1 dx2 dy2 dx dy
2368
2381 virtual void addSmoothCubicBezierCurveTo(double x2, double y2, double x, double y); // S x2 y2 x y
2382
2395 virtual void addSmoothCubicBezierCurveRel(double dx2, double dy2, double dx, double dy); // s dx2 dy2 dx dy
2396
2404 virtual void addClosePath(); // Z
2406};
2407
2427class SIM_API cAbstractTextFigure : public cFigure
2428{
2429 private:
2430 Point position;
2431 Color color; // note: tkpath's text supports separate colors and opacity for fill and outline -- ignore because probably SWT doesn't support it!
2432 double opacity = 1;
2433 bool halo = false;
2434 Font font;
2435 std::string text;
2436 Anchor anchor = ANCHOR_NW;
2437 Alignment alignment = ALIGN_LEFT;
2438 private:
2439 void copy(const cAbstractTextFigure& other);
2440 protected:
2441 virtual const char **getAllowedPropertyKeys() const override;
2442 virtual void hashTo(cHasher& hasher) const override;
2443 public:
2446 explicit cAbstractTextFigure(const char *name=nullptr) : cFigure(name), color(BLACK) {}
2447 cAbstractTextFigure(const cAbstractTextFigure& other) : cFigure(other) {copy(other);}
2448 cAbstractTextFigure& operator=(const cAbstractTextFigure& other);
2450
2453 virtual cAbstractTextFigure *dup() const override {throw cRuntimeError(this, E_CANTDUP);}
2454 virtual std::string str() const override;
2455 virtual void parse(cProperty *property) override;
2459 virtual void moveLocal(double dx, double dy) override;
2461
2464
2469 virtual const Point& getPosition() const {return position;}
2470
2476 virtual void setPosition(const Point& position);
2477
2483 virtual Anchor getAnchor() const {return anchor;}
2484
2490 virtual void setAnchor(Anchor anchor);
2491
2499 virtual Alignment getAlignment() const {return alignment;}
2500
2508 virtual void setAlignment(Alignment alignment);
2509
2526 virtual Rectangle getBounds() const;
2527
2542 virtual Point getTextExtent() const;
2543
2557 virtual double getFontAscent() const;
2559
2562
2565 virtual const Color& getColor() const {return color;}
2566
2570 virtual void setColor(const Color& color);
2571
2575 virtual double getOpacity() const {return opacity;}
2576
2581 virtual void setOpacity(double opacity);
2582
2586 virtual bool getHalo() const {return halo;}
2587
2599 virtual void setHalo(bool enabled);
2600
2604 virtual const Font& getFont() const {return font;}
2605
2611 virtual void setFont(Font font);
2613
2616
2619 virtual const char *getText() const {return text.c_str();}
2620
2625 virtual void setText(const char* text);
2627};
2628
2637class SIM_API cTextFigure : public cAbstractTextFigure
2638{
2639 private:
2640 void copy(const cTextFigure& other) {}
2641 public:
2644 explicit cTextFigure(const char *name=nullptr) : cAbstractTextFigure(name) {}
2645 cTextFigure(const cTextFigure& other) : cAbstractTextFigure(other) {copy(other);}
2646 cTextFigure& operator=(const cTextFigure& other);
2648
2651 virtual cTextFigure *dup() const override {return new cTextFigure(*this);}
2652 virtual const char *getRendererClassName() const override {return "TextFigureRenderer";}
2654};
2655
2665class SIM_API cLabelFigure : public cAbstractTextFigure
2666{
2667 private:
2668 double angle = 0.0; // in radians, positive is CCW, 0 is "horizontal" or "unrotated"
2669 private:
2670 void copy(const cLabelFigure& other);
2671 protected:
2672 virtual const char **getAllowedPropertyKeys() const override;
2673 virtual void hashTo(cHasher& hasher) const override;
2674 public:
2677 explicit cLabelFigure(const char *name=nullptr) : cAbstractTextFigure(name) {}
2678 cLabelFigure(const cLabelFigure& other) : cAbstractTextFigure(other) {copy(other);}
2679 cLabelFigure& operator=(const cLabelFigure& other);
2681
2684 virtual cLabelFigure *dup() const override {return new cLabelFigure(*this);}
2685 virtual void parse(cProperty *property) override;
2686 virtual const char *getRendererClassName() const override {return "LabelFigureRenderer";}
2688
2691 virtual double getAngle() const {return angle;}
2692 virtual void setAngle(double angle);
2693 virtual Rectangle getBounds() const override;
2695};
2696
2722class SIM_API cAbstractImageFigure : public cFigure
2723{
2724 private:
2725 Point position;
2726 Anchor anchor = ANCHOR_CENTER; // note: do not use the ANCHOR_BASELINE_START/MIDDLE/END constants, as they are for text items
2727 double width = 0, height = 0; // zero or negative values mean using the image's own size
2728 Interpolation interpolation = INTERPOLATION_FAST;
2729 double opacity = 1;
2730 Color tintColor;
2731 double tintAmount = 0; // in the range 0..1
2732 private:
2733 void copy(const cAbstractImageFigure& other);
2734 protected:
2735 virtual const char **getAllowedPropertyKeys() const override;
2736 virtual void hashTo(cHasher& hasher) const override;
2737 virtual Point getDefaultSize() const = 0;
2738 public:
2741 explicit cAbstractImageFigure(const char *name=nullptr) : cFigure(name), tintColor(BLUE) { }
2742 cAbstractImageFigure(const cAbstractImageFigure& other) : cFigure(other) {copy(other);}
2743 cAbstractImageFigure& operator=(const cAbstractImageFigure& other);
2745
2748 virtual cAbstractImageFigure *dup() const override {throw cRuntimeError(this, E_CANTDUP);}
2749 virtual void parse(cProperty *property) override;
2753 virtual void moveLocal(double dx, double dy) override;
2755
2758
2763 virtual const Point& getPosition() const {return position;}
2764
2770 virtual void setPosition(const Point& position);
2771
2777 virtual Anchor getAnchor() const {return anchor;}
2778
2784 virtual void setAnchor(Anchor anchor);
2785
2790 virtual double getWidth() const {return width;}
2791
2798 virtual void setWidth(double width);
2799
2804 virtual double getHeight() const {return height;}
2805
2812 virtual void setHeight(double height); // zero means "unset"
2813
2818 virtual void setSize(double width, double height) {setWidth(width); setHeight(height);}
2819
2831 virtual Rectangle getBounds() const;
2833
2836
2841 virtual Interpolation getInterpolation() const {return interpolation;}
2842
2848 virtual void setInterpolation(Interpolation interpolation);
2849
2853 virtual double getOpacity() const {return opacity;}
2854
2859 virtual void setOpacity(double opacity);
2860
2864 virtual const Color& getTintColor() const {return tintColor;}
2865
2873 virtual void setTintColor(const Color& tintColor);
2874
2879 virtual double getTintAmount() const {return tintAmount;}
2880
2889 virtual void setTintAmount(double tintAmount);
2891};
2892
2902class SIM_API cImageFigure : public cAbstractImageFigure
2903{
2904 private:
2905 std::string imageName;
2906 private:
2907 void copy(const cImageFigure& other);
2908 protected:
2909 virtual const char **getAllowedPropertyKeys() const override;
2910 virtual void hashTo(cHasher& hasher) const override;
2911 virtual Point getDefaultSize() const override;
2912 public:
2915 explicit cImageFigure(const char *name=nullptr) : cAbstractImageFigure(name) {}
2916 cImageFigure(const cImageFigure& other) : cAbstractImageFigure(other) {copy(other);}
2917 cImageFigure& operator=(const cImageFigure& other);
2919
2922 virtual cImageFigure *dup() const override {return new cImageFigure(*this);}
2923 virtual std::string str() const override;
2924 virtual void parse(cProperty *property) override;
2925 virtual const char *getRendererClassName() const override {return "ImageFigureRenderer";}
2927
2930
2933 virtual const char *getImageName() const {return imageName.c_str();}
2934
2941 virtual void setImageName(const char* imageName);
2942
2953 virtual int getImageNaturalWidth() const {return getDefaultSize().x;}
2954
2965 virtual int getImageNaturalHeight() const {return getDefaultSize().y;}
2967};
2968
2979class SIM_API cIconFigure : public cImageFigure
2980{
2981 private:
2982 void copy(const cIconFigure& other) {}
2983 public:
2986 explicit cIconFigure(const char *name=nullptr) : cImageFigure(name) {}
2987 cIconFigure(const cIconFigure& other) : cImageFigure(other) {copy(other);}
2988 cIconFigure& operator=(const cIconFigure& other);
2990
2993 virtual cIconFigure *dup() const override {return new cIconFigure(*this);}
2994 virtual const char *getRendererClassName() const override {return "IconFigureRenderer";}
2996};
2997
3007class SIM_API cPixmapFigure : public cAbstractImageFigure
3008{
3009 private:
3010 Pixmap pixmap;
3011 private:
3012 void copy(const cPixmapFigure& other);
3013 protected:
3014 virtual const char **getAllowedPropertyKeys() const override;
3015 virtual void hashTo(cHasher& hasher) const override;
3016 virtual Point getDefaultSize() const override;
3017 public:
3020 explicit cPixmapFigure(const char *name=nullptr) : cAbstractImageFigure(name) {}
3021 cPixmapFigure(const cPixmapFigure& other) : cAbstractImageFigure(other) {copy(other);}
3022 virtual ~cPixmapFigure() {}
3023 cPixmapFigure& operator=(const cPixmapFigure& other);
3025
3028 virtual cPixmapFigure *dup() const override {return new cPixmapFigure(*this);}
3029 virtual std::string str() const override;
3030 virtual void parse(cProperty *property) override;
3031 virtual const char *getRendererClassName() const override {return "PixmapFigureRenderer";}
3033
3036
3043 virtual const Pixmap& getPixmap() const {return pixmap;}
3044
3049 virtual void setPixmap(const Pixmap& pixmap);
3050
3052 virtual int getPixmapHeight() const {return pixmap.getHeight();}
3054 virtual int getPixmapWidth() const {return pixmap.getWidth();}
3056 virtual void setPixmapSize(int width, int height, const RGBA& fill); // nondestructive, set *newly added* pixels with this color and opacity
3058 virtual void setPixmapSize(int width, int height, const Color& color, double opacity); // nondestructive, fills *newly added* pixels with this color and opacity
3060 virtual void fillPixmap(const RGBA& fill);
3062 virtual void fillPixmap(const Color& color, double opacity);
3064 virtual const RGBA getPixel(int x, int y) const {return pixmap.pixel(x, y);}
3066 virtual void setPixel(int x, int y, const RGBA& argb);
3068 virtual void setPixel(int x, int y, const Color& color, double opacity = 1.0);
3070 virtual const Color getPixelColor(int x, int y) const {return pixmap.getColor(x,y);}
3072 virtual void setPixelColor(int x, int y, const Color& color);
3074 virtual double getPixelOpacity(int x, int y) const {return pixmap.getOpacity(x,y);}
3076 virtual void setPixelOpacity(int x, int y, double opacity);
3078};
3079
3098class SIM_API cCanvas : public cOwnedObject
3099{
3100 private:
3101 cFigure::Color backgroundColor;
3102 cFigure *rootFigure;
3103 std::map<std::string,int> tagBitIndex; // tag-to-bitindex
3104 static std::map<std::string,cObjectFactory*> figureFactories;
3105 std::map<const cObject*,double> animationSpeedMap; // maps source to animationSpeed
3106 double minAnimationSpeed = DBL_MAX; // minimum of the values in animationSpeedMap cached, or DBL_MAX for none
3107 double animationHoldEndTime = 0; // the effective one will be the maximum endTime of all visible canvases
3108 public:
3109 // internal:
3110 virtual cFigure *parseFigure(cProperty *property) const;
3111 virtual cFigure *createFigure(const char *type) const;
3112 static bool containsCanvasItems(cProperties *properties);
3113 virtual void addFiguresFrom(cProperties *properties);
3114 virtual uint64_t parseTags(const char *s);
3115 virtual std::string getTags(uint64_t tagBits);
3116 const std::map<const cObject*,double>& getAnimationSpeedMap() const {return animationSpeedMap;} // for e.g. Qtenv
3117 double getMinAnimationSpeed() const {return minAnimationSpeed;} // for e.g. Qtenv; DBL_MAX if none
3118 double getAnimationHoldEndTime() const {return animationHoldEndTime;} // for e.g. Qtenv
3119 private:
3120 void copy(const cCanvas& other);
3121 public:
3124 explicit cCanvas(const char *name = nullptr);
3125 cCanvas(const cCanvas& other) : cOwnedObject(other), rootFigure(nullptr) {copy(other);}
3126 virtual ~cCanvas();
3127 cCanvas& operator=(const cCanvas& other);
3129
3132 virtual cCanvas *dup() const override {return new cCanvas(*this);}
3133 virtual void forEachChild(cVisitor *v) override;
3134 virtual std::string str() const override;
3136
3139
3142 virtual const cFigure::Color& getBackgroundColor() const {return backgroundColor;}
3143
3147 virtual void setBackgroundColor(const cFigure::Color& color) {this->backgroundColor = color;}
3148
3153 virtual uint32_t getHash() const;
3155
3158
3162 virtual cFigure *getRootFigure() const {return rootFigure;}
3163
3167 virtual void addFigure(cFigure *figure) {rootFigure->addFigure(figure);}
3168
3175 virtual void addFigure(cFigure *figure, int pos) {rootFigure->addFigure(figure, pos);}
3176
3181 virtual cFigure *removeFigure(cFigure *figure) {return rootFigure->removeFigure(figure);}
3182
3187 virtual cFigure *removeFigure(int pos) {return rootFigure->removeFigure(pos);}
3188
3194 virtual int findFigure(const char *name) const {return rootFigure->findFigure(name);}
3195
3200 virtual int findFigure(cFigure *figure) const {return rootFigure->findFigure(figure);}
3201
3206 virtual bool hasFigures() const {return rootFigure->containsFigures();}
3207
3211 virtual int getNumFigures() const {return rootFigure->getNumFigures();}
3212
3218 virtual cFigure *getFigure(int pos) const {return rootFigure->getFigure(pos);}
3219
3224 virtual cFigure *getFigure(const char *name) const {return rootFigure->getFigure(name);}
3226
3229
3236 virtual cFigure *getSubmodulesLayer() const;
3237
3242 virtual cFigure *findFigureRecursively(const char *name) const {return rootFigure->findFigureRecursively(name);}
3243
3248 virtual cFigure *getFigureByPath(const char *path) const {return rootFigure->getFigureByPath(path);}
3250
3253
3257 virtual std::string getAllTags() const;
3258
3263 virtual std::vector<std::string> getAllTagsAsVector() const;
3265
3268
3283 virtual void setAnimationSpeed(double animationSpeed, const cObject *source);
3284
3289 virtual double getAnimationSpeed(const cObject *source);
3290
3309 virtual void holdSimulationFor(double animationTimeDelta);
3311};
3312
3313} // namespace omnetpp
3314
3315
3316#endif
3317
Abstract base class for figures that display an image.
Definition ccanvas.h:2723
virtual double getTintAmount() const
Definition ccanvas.h:2879
virtual void setWidth(double width)
virtual const Color & getTintColor() const
Definition ccanvas.h:2864
virtual void setTintAmount(double tintAmount)
virtual void setPosition(const Point &position)
virtual const char ** getAllowedPropertyKeys() const override
virtual void setHeight(double height)
virtual void setInterpolation(Interpolation interpolation)
virtual Anchor getAnchor() const
Definition ccanvas.h:2777
virtual void setSize(double width, double height)
Definition ccanvas.h:2818
virtual void setOpacity(double opacity)
virtual const Point & getPosition() const
Definition ccanvas.h:2763
virtual Rectangle getBounds() const
virtual cAbstractImageFigure * dup() const override
Definition ccanvas.h:2748
virtual void setAnchor(Anchor anchor)
virtual void moveLocal(double dx, double dy) override
virtual double getOpacity() const
Definition ccanvas.h:2853
virtual double getHeight() const
Definition ccanvas.h:2804
virtual double getWidth() const
Definition ccanvas.h:2790
virtual Interpolation getInterpolation() const
Definition ccanvas.h:2841
virtual void parse(cProperty *property) override
virtual void setTintColor(const Color &tintColor)
Common base class for line figures.
Definition ccanvas.h:965
virtual const Color & getLineColor() const
Definition ccanvas.h:999
virtual LineStyle getLineStyle() const
Definition ccanvas.h:1034
virtual void setLineStyle(LineStyle lineStyle)
virtual void setEndArrowhead(Arrowhead endArrowhead)
virtual bool getZoomLineWidth() const
Definition ccanvas.h:1079
virtual void setStartArrowhead(Arrowhead startArrowhead)
virtual const char ** getAllowedPropertyKeys() const override
virtual void setCapStyle(CapStyle capStyle)
virtual void setLineOpacity(double lineOpacity)
virtual CapStyle getCapStyle() const
Definition ccanvas.h:1045
virtual void setLineWidth(double lineWidth)
virtual void setLineColor(const Color &lineColor)
virtual cAbstractLineFigure * dup() const override
Definition ccanvas.h:989
virtual double getLineOpacity() const
Definition ccanvas.h:1023
virtual Arrowhead getEndArrowhead() const
Definition ccanvas.h:1067
virtual void setZoomLineWidth(bool zoomLineWidth)
virtual Arrowhead getStartArrowhead() const
Definition ccanvas.h:1056
virtual double getLineWidth() const
Definition ccanvas.h:1011
virtual std::string str() const override
virtual void parse(cProperty *property) override
Abstract base class for various shapes.
Definition ccanvas.h:1390
virtual bool isOutlined() const
Definition ccanvas.h:1438
virtual const Color & getLineColor() const
Definition ccanvas.h:1449
virtual LineStyle getLineStyle() const
Definition ccanvas.h:1472
virtual void setLineStyle(LineStyle lineStyle)
virtual bool getZoomLineWidth() const
Definition ccanvas.h:1522
virtual bool isFilled() const
Definition ccanvas.h:1427
virtual const char ** getAllowedPropertyKeys() const override
virtual void setLineOpacity(double lineOpacity)
virtual void setFillOpacity(double fillOpacity)
virtual void setLineWidth(double lineWidth)
virtual void setOutlined(bool outlined)
virtual void setLineColor(const Color &lineColor)
virtual double getLineOpacity() const
Definition ccanvas.h:1498
virtual cAbstractShapeFigure * dup() const override
Definition ccanvas.h:1417
virtual double getFillOpacity() const
Definition ccanvas.h:1510
virtual void setZoomLineWidth(bool zoomLineWidth)
virtual double getLineWidth() const
Definition ccanvas.h:1485
virtual std::string str() const override
virtual void setClipChildren(bool clipChildren)
virtual void setFillColor(const Color &fillColor)
virtual bool getClipChildren() const
Definition ccanvas.h:1538
virtual void setFilled(bool filled)
virtual const Color & getFillColor() const
Definition ccanvas.h:1460
virtual void parse(cProperty *property) override
Abstract base class for figures that display text. Text may be multi-line.
Definition ccanvas.h:2428
virtual void setColor(const Color &color)
virtual Point getTextExtent() const
virtual void setPosition(const Point &position)
virtual const char ** getAllowedPropertyKeys() const override
virtual Alignment getAlignment() const
Definition ccanvas.h:2499
virtual Anchor getAnchor() const
Definition ccanvas.h:2483
virtual void setOpacity(double opacity)
virtual const Point & getPosition() const
Definition ccanvas.h:2469
virtual const char * getText() const
Definition ccanvas.h:2619
virtual Rectangle getBounds() const
virtual const Color & getColor() const
Definition ccanvas.h:2565
virtual void setText(const char *text)
virtual bool getHalo() const
Definition ccanvas.h:2586
virtual void setAlignment(Alignment alignment)
virtual double getFontAscent() const
virtual void setFont(Font font)
virtual void setAnchor(Anchor anchor)
virtual const Font & getFont() const
Definition ccanvas.h:2604
virtual std::string str() const override
virtual void moveLocal(double dx, double dy) override
virtual double getOpacity() const
Definition ccanvas.h:2575
virtual cAbstractTextFigure * dup() const override
Definition ccanvas.h:2453
virtual void setHalo(bool enabled)
virtual void parse(cProperty *property) override
A figure that displays an arc.
Definition ccanvas.h:1168
virtual const char ** getAllowedPropertyKeys() const override
virtual cArcFigure * dup() const override
Definition ccanvas.h:1187
virtual const char * getRendererClassName() const override
Definition ccanvas.h:1191
virtual void setPosition(const Point &position, Anchor anchor)
virtual void setBounds(const Rectangle &bounds)
virtual const Rectangle & getBounds() const
Definition ccanvas.h:1200
virtual void setStartAngle(double startAngle)
virtual double getStartAngle() const
Definition ccanvas.h:1218
virtual std::string str() const override
virtual double getEndAngle() const
Definition ccanvas.h:1230
virtual void moveLocal(double dx, double dy) override
virtual void setEndAngle(double endAngle)
virtual void parse(cProperty *property) override
Provides a scene graph based 2D drawing API for modules.
Definition ccanvas.h:3099
virtual cCanvas * dup() const override
Definition ccanvas.h:3132
virtual int getNumFigures() const
Definition ccanvas.h:3211
virtual double getAnimationSpeed(const cObject *source)
virtual const cFigure::Color & getBackgroundColor() const
Definition ccanvas.h:3142
virtual int findFigure(cFigure *figure) const
Definition ccanvas.h:3200
virtual bool hasFigures() const
Definition ccanvas.h:3206
virtual cFigure * findFigureRecursively(const char *name) const
Definition ccanvas.h:3242
virtual void addFigure(cFigure *figure, int pos)
Definition ccanvas.h:3175
virtual void addFigure(cFigure *figure)
Definition ccanvas.h:3167
virtual cFigure * getFigure(const char *name) const
Definition ccanvas.h:3224
virtual cFigure * getFigure(int pos) const
Definition ccanvas.h:3218
virtual void holdSimulationFor(double animationTimeDelta)
virtual cFigure * getRootFigure() const
Definition ccanvas.h:3162
virtual std::string getAllTags() const
virtual uint32_t getHash() const
virtual int findFigure(const char *name) const
Definition ccanvas.h:3194
virtual void setAnimationSpeed(double animationSpeed, const cObject *source)
virtual void forEachChild(cVisitor *v) override
virtual std::string str() const override
virtual cFigure * removeFigure(int pos)
Definition ccanvas.h:3187
virtual void setBackgroundColor(const cFigure::Color &color)
Definition ccanvas.h:3147
virtual cFigure * removeFigure(cFigure *figure)
Definition ccanvas.h:3181
virtual std::vector< std::string > getAllTagsAsVector() const
virtual cFigure * getFigureByPath(const char *path) const
Definition ccanvas.h:3248
virtual cFigure * getSubmodulesLayer() const
A rectangular RGBA pixel array.
Definition ccanvas.h:280
A lightweight graphical object for cCanvas.
Definition ccanvas.h:61
virtual cCanvas * getCanvas() const
virtual int findFigure(const cFigure *figure) const
virtual void insertAfter(const cFigure *referenceFigure)
virtual void setTransform(const Transform &transform)
virtual int getNumFigures() const
Definition ccanvas.h:571
virtual const char * getRendererClassName() const =0
virtual void setAssociatedObject(cObject *obj)
virtual cFigure * getParentFigure() const
Definition ccanvas.h:559
virtual cFigure * dupTree() const
virtual cFigure * removeFromParent()
virtual void insertBefore(const cFigure *referenceFigure)
virtual const char * getTags() const
Definition ccanvas.h:544
virtual void refreshDisplay()
Definition ccanvas.h:829
virtual double getZIndex() const
Definition ccanvas.h:489
virtual bool isAbove(const cFigure *figure) const
int getId() const
Definition ccanvas.h:451
virtual void setZIndex(double zIndex)
cFigure(const cFigure &other)
Definition ccanvas.h:409
virtual void lowerToBottom()
virtual cFigure * findFigureRecursively(const char *name) const
virtual void addFigure(cFigure *figure, int pos)
virtual void raiseAbove(cFigure *figure)
virtual void addFigure(cFigure *figure)
virtual cFigure * getFigure(const char *name) const
virtual void insertAbove(cFigure *referenceFigure)
virtual const char ** getAllowedPropertyKeys() const
virtual bool containsFigures() const
Definition ccanvas.h:601
virtual void moveLocal(double dx, double dy)=0
virtual cFigure * getFigure(int pos) const
virtual void insertBelow(cFigure *referenceFigure)
virtual void resetTransform()
Definition ccanvas.h:482
cFigure & operator=(const cFigure &other)
cFigure(const char *name=nullptr)
virtual const char * getTooltip() const
Definition ccanvas.h:514
virtual void move(double dx, double dy)
virtual void parse(cProperty *property)
virtual bool isVisible() const
Definition ccanvas.h:456
virtual cFigure * dup() const override
Definition ccanvas.h:431
virtual int findFigure(const char *name) const
virtual void lowerBelow(cFigure *figure)
virtual bool isBelow(const cFigure *figure) const
virtual void forEachChild(cVisitor *v) override
virtual std::string str() const override
virtual cObject * getAssociatedObject() const
Definition ccanvas.h:530
virtual cFigure * removeFigure(int pos)
virtual double getEffectiveZIndex() const
virtual cFigure * removeFigure(cFigure *figure)
virtual void setTooltip(const char *tooltip)
virtual void setTags(const char *tags)
virtual void raiseToTop()
virtual const Transform & getTransform() const
Definition ccanvas.h:468
virtual ~cFigure()
virtual cFigure * getFigureByPath(const char *path) const
virtual void setVisible(bool visible)
virtual cGroupFigure * dup() const override
Definition ccanvas.h:878
virtual const char * getRendererClassName() const override
Definition ccanvas.h:880
virtual std::string str() const override
virtual void moveLocal(double dx, double dy) override
Definition ccanvas.h:881
Utility class to calculate the hash of some data.
Definition chasher.h:41
virtual const char * getRendererClassName() const override
Definition ccanvas.h:2994
virtual cIconFigure * dup() const override
Definition ccanvas.h:2993
A figure that displays an image, typically an icon or a background image, loaded from the OMNeT++ ima...
Definition ccanvas.h:2903
virtual int getImageNaturalHeight() const
Definition ccanvas.h:2965
virtual const char ** getAllowedPropertyKeys() const override
virtual int getImageNaturalWidth() const
Definition ccanvas.h:2953
virtual const char * getImageName() const
Definition ccanvas.h:2933
virtual cImageFigure * dup() const override
Definition ccanvas.h:2922
virtual const char * getRendererClassName() const override
Definition ccanvas.h:2925
virtual void setImageName(const char *imageName)
virtual std::string str() const override
virtual void parse(cProperty *property) override
A figure that displays text which is unaffected by zooming or transformations, except for its positio...
Definition ccanvas.h:2666
virtual const char ** getAllowedPropertyKeys() const override
virtual Rectangle getBounds() const override
virtual const char * getRendererClassName() const override
Definition ccanvas.h:2686
virtual cLabelFigure * dup() const override
Definition ccanvas.h:2684
virtual void parse(cProperty *property) override
A figure that displays a straight line segment.
Definition ccanvas.h:1099
virtual const Point & getStart() const
Definition ccanvas.h:1129
virtual cLineFigure * dup() const override
Definition ccanvas.h:1117
virtual const char ** getAllowedPropertyKeys() const override
virtual const Point & getEnd() const
Definition ccanvas.h:1139
virtual const char * getRendererClassName() const override
Definition ccanvas.h:1121
virtual void setEnd(const Point &end)
virtual std::string str() const override
virtual void moveLocal(double dx, double dy) override
virtual void setStart(const Point &start)
virtual void parse(cProperty *property) override
The class behind the createOne() function and the Register_Class() macro.
Definition cobjectfactory.h:36
cObject is a lightweight class which serves as the root of the OMNeT++ class hierarchy....
Definition cobject.h:93
A figure that draws a circle or ellipse.
Definition ccanvas.h:1667
virtual const char ** getAllowedPropertyKeys() const override
virtual const char * getRendererClassName() const override
Definition ccanvas.h:1689
virtual void setPosition(const Point &position, Anchor anchor)
virtual void setBounds(const Rectangle &bounds)
virtual cOvalFigure * dup() const override
Definition ccanvas.h:1685
virtual const Rectangle & getBounds() const
Definition ccanvas.h:1697
virtual std::string str() const override
virtual void moveLocal(double dx, double dy) override
virtual void parse(cProperty *property) override
virtual cObject * getOwner() const override
Definition cownedobject.h:193
Sets up an axis-aligned, unscaled coordinate system for children, canceling the effect of any transfo...
Definition ccanvas.h:899
virtual const char ** getAllowedPropertyKeys() const override
virtual const Point & getAnchorPoint() const
Definition ccanvas.h:942
virtual const char * getRendererClassName() const override
Definition ccanvas.h:922
virtual cPanelFigure * dup() const override
Definition ccanvas.h:920
virtual void move(double dx, double dy) override
Definition ccanvas.h:924
virtual std::string str() const override
virtual void moveLocal(double dx, double dy) override
Definition ccanvas.h:925
virtual void parse(cProperty *property) override
A figure that displays a "path", a complex shape or line modeled after SVG paths.
Definition ccanvas.h:2053
virtual void addMoveRel(double dx, double dy)
virtual void addMoveTo(double x, double y)
virtual void addLineRel(double dx, double dy)
virtual void addSmoothCubicBezierCurveRel(double dx2, double dy2, double dx, double dy)
virtual void addClosePath()
virtual const char ** getAllowedPropertyKeys() const override
virtual void setCapStyle(CapStyle capStyle)
virtual void setOffset(const Point &offset)
virtual void addVerticalLineRel(double dy)
virtual void addCurveTo(double x1, double y1, double x, double y)
virtual void addHorizontalLineTo(double x)
virtual CapStyle getCapStyle() const
Definition ccanvas.h:2130
virtual void addArcTo(double rx, double ry, double phi, bool largeArc, bool sweep, double x, double y)
virtual void setJoinStyle(JoinStyle joinStyle)
virtual JoinStyle getJoinStyle() const
Definition ccanvas.h:2119
virtual void setPath(const char *path)
virtual void addArcRel(double rx, double ry, double phi, bool largeArc, bool sweep, double dx, double dy)
virtual FillRule getFillRule() const
Definition ccanvas.h:2144
virtual void clearPath()
virtual cPathFigure * dup() const override
Definition ccanvas.h:2104
virtual void addCubicBezierCurveTo(double x1, double y1, double x2, double y2, double x, double y)
virtual void addCurveRel(double dx1, double dy1, double dx, double dy)
virtual void addSmoothCurveTo(double x, double y)
virtual void addCubicBezierCurveRel(double dx1, double dy1, double dx2, double dy2, double dx, double dy)
virtual const char * getRendererClassName() const override
Definition ccanvas.h:2111
virtual const Point & getOffset() const
Definition ccanvas.h:2164
virtual void addVerticalLineTo(double y)
virtual void addSmoothCubicBezierCurveTo(double x2, double y2, double x, double y)
virtual void addLineTo(double x, double y)
virtual const char * getPath() const
virtual void addHorizontalLineRel(double dx)
virtual std::string str() const override
virtual void moveLocal(double dx, double dy) override
virtual void setFillRule(FillRule fillRule)
virtual int getNumPathItems() const
Definition ccanvas.h:2193
virtual void parse(cProperty *property) override
virtual const PathItem * getPathItem(int k) const
Definition ccanvas.h:2200
virtual void addSmoothCurveRel(double dx, double dy)
A figure that displays a pie slice, that is, a section of an axis-aligned disc or filled ellipse.
Definition ccanvas.h:1824
virtual const char ** getAllowedPropertyKeys() const override
virtual const char * getRendererClassName() const override
Definition ccanvas.h:1847
virtual cPieSliceFigure * dup() const override
Definition ccanvas.h:1843
virtual void setPosition(const Point &position, Anchor anchor)
virtual void setBounds(const Rectangle &bounds)
virtual const Rectangle & getBounds() const
Definition ccanvas.h:1856
virtual void setStartAngle(double startAngle)
virtual double getStartAngle() const
Definition ccanvas.h:1874
virtual std::string str() const override
virtual double getEndAngle() const
Definition ccanvas.h:1886
virtual void moveLocal(double dx, double dy) override
virtual void setEndAngle(double endAngle)
virtual void parse(cProperty *property) override
A figure that displays an image that can be manipulated programmatically.
Definition ccanvas.h:3008
virtual cPixmapFigure * dup() const override
Definition ccanvas.h:3028
virtual void setPixmapSize(int width, int height, const RGBA &fill)
virtual void setPixel(int x, int y, const Color &color, double opacity=1.0)
virtual void setPixmapSize(int width, int height, const Color &color, double opacity)
virtual const char ** getAllowedPropertyKeys() const override
virtual void setPixel(int x, int y, const RGBA &argb)
virtual double getPixelOpacity(int x, int y) const
Definition ccanvas.h:3074
virtual const Color getPixelColor(int x, int y) const
Definition ccanvas.h:3070
virtual void setPixmap(const Pixmap &pixmap)
virtual const char * getRendererClassName() const override
Definition ccanvas.h:3031
virtual void setPixelOpacity(int x, int y, double opacity)
virtual int getPixmapWidth() const
Definition ccanvas.h:3054
virtual const RGBA getPixel(int x, int y) const
Definition ccanvas.h:3064
virtual int getPixmapHeight() const
Definition ccanvas.h:3052
virtual std::string str() const override
virtual void setPixelColor(int x, int y, const Color &color)
virtual const Pixmap & getPixmap() const
Definition ccanvas.h:3043
virtual void fillPixmap(const Color &color, double opacity)
virtual void parse(cProperty *property) override
virtual void fillPixmap(const RGBA &fill)
A figure that displays a (closed) polygon, determined by a sequence of points.
Definition ccanvas.h:1910
virtual const std::vector< Point > & getPoints() const
Definition ccanvas.h:1945
virtual const char ** getAllowedPropertyKeys() const override
virtual void setPoints(const std::vector< Point > &points)
virtual bool getSmooth() const
Definition ccanvas.h:1994
virtual void setJoinStyle(JoinStyle joinStyle)
virtual JoinStyle getJoinStyle() const
Definition ccanvas.h:2009
virtual FillRule getFillRule() const
Definition ccanvas.h:2023
virtual void setSmooth(bool smooth)
virtual const char * getRendererClassName() const override
Definition ccanvas.h:1937
virtual void setPoint(int i, const Point &point)
virtual cPolygonFigure * dup() const override
Definition ccanvas.h:1933
virtual int getNumPoints() const
Definition ccanvas.h:1955
virtual void setNumPoints(int size)
virtual const Point & getPoint(int i) const
Definition ccanvas.h:1961
virtual std::string str() const override
virtual void moveLocal(double dx, double dy) override
virtual void removePoint(int i)
virtual void addPoint(const Point &point)
virtual void setFillRule(FillRule fillRule)
virtual void insertPoint(int i, const Point &point)
virtual void parse(cProperty *property) override
A figure that displays a line that consists of multiple connecting straight line segments or of a sin...
Definition ccanvas.h:1258
virtual const std::vector< Point > & getPoints() const
Definition ccanvas.h:1292
virtual const char ** getAllowedPropertyKeys() const override
virtual void setPoints(const std::vector< Point > &points)
virtual bool getSmooth() const
Definition ccanvas.h:1343
virtual void setJoinStyle(JoinStyle joinStyle)
virtual JoinStyle getJoinStyle() const
Definition ccanvas.h:1359
virtual void setSmooth(bool smooth)
virtual const char * getRendererClassName() const override
Definition ccanvas.h:1284
virtual void setPoint(int i, const Point &point)
virtual int getNumPoints() const
Definition ccanvas.h:1302
virtual void setNumPoints(int size)
virtual const Point & getPoint(int i) const
Definition ccanvas.h:1308
virtual std::string str() const override
virtual void moveLocal(double dx, double dy) override
virtual void removePoint(int i)
virtual void addPoint(const Point &point)
virtual void insertPoint(int i, const Point &point)
virtual void parse(cProperty *property) override
virtual cPolylineFigure * dup() const override
Definition ccanvas.h:1280
A collection of properties (cProperty).
Definition cproperties.h:35
Stores a (NED) property with its (possibly compound) value.
Definition cproperty.h:39
A figure that displays a rectangle, with optionally rounded corners.
Definition ccanvas.h:1583
virtual double getCornerRx() const
Definition ccanvas.h:1636
virtual const char ** getAllowedPropertyKeys() const override
virtual void setCornerRx(double rx)
virtual void setCornerRadius(double r)
Definition ccanvas.h:1631
virtual const char * getRendererClassName() const override
Definition ccanvas.h:1606
virtual double getCornerRy() const
Definition ccanvas.h:1647
virtual cRectangleFigure * dup() const override
Definition ccanvas.h:1602
virtual void setPosition(const Point &position, Anchor anchor)
virtual void setBounds(const Rectangle &bounds)
virtual const Rectangle & getBounds() const
Definition ccanvas.h:1614
virtual std::string str() const override
virtual void moveLocal(double dx, double dy) override
virtual void parse(cProperty *property) override
virtual void setCornerRy(double ry)
A figure that displays a ring, with explicitly controllable inner/outer radii.
Definition ccanvas.h:1723
virtual void setInnerRx(double rx)
virtual const char ** getAllowedPropertyKeys() const override
virtual void setInnerRy(double ry)
virtual void setInnerRadius(double r)
Definition ccanvas.h:1772
virtual const char * getRendererClassName() const override
Definition ccanvas.h:1746
virtual double getInnerRx() const
Definition ccanvas.h:1777
virtual void setPosition(const Point &position, Anchor anchor)
virtual void setBounds(const Rectangle &bounds)
virtual const Rectangle & getBounds() const
Definition ccanvas.h:1754
virtual cRingFigure * dup() const override
Definition ccanvas.h:1742
virtual double getInnerRy() const
Definition ccanvas.h:1787
virtual std::string str() const override
virtual void moveLocal(double dx, double dy) override
virtual void parse(cProperty *property) override
Thrown when the simulation kernel or other components detect a runtime error.
Definition cexception.h:343
virtual cTextFigure * dup() const override
Definition ccanvas.h:2651
virtual const char * getRendererClassName() const override
Definition ccanvas.h:2652
Enables traversing the tree of (cObject-rooted) simulation objects.
Definition cvisitor.h:57
Definition opp_pooledstring.h:64
Anchor
Anchoring mode constants: ANCHOR_CENTER, ANCHOR_N, etc.
Definition ccanvas.h:201
JoinStyle
Line join style constants: JOIN_BEVEL, JOIN_MITER, etc.
Definition ccanvas.h:189
FontStyle
Font style constants: FONT_NONE, FONT_BOLD, etc.
Definition ccanvas.h:180
CapStyle
Line cap style constants: CAP_BUTT, CAP_SQUARE, etc.
Definition ccanvas.h:186
Interpolation
Image interpolation mode constants: INTERPOLATION_NONE, INTERPOLATION_FAST, etc.
Definition ccanvas.h:198
LineStyle
Line style constants: LINE_SOLID, LINE_DOTTED, etc.
Definition ccanvas.h:183
FillRule
Fill rule constants: FILL_EVENODD, FILL_NONZERO.
Definition ccanvas.h:192
Arrowhead
Arrowhead style constants: ARROW_NONE, ARROW_SIMPLE, etc.
Definition ccanvas.h:195
Alignment
Text alignment mode constants: ALIGN_LEFT, ALIGN_RIGHT, ALIGN_CENTER.
Definition ccanvas.h:204
Represents an RGB color.
Definition ccanvas.h:124
Represents properties of a font.
Definition ccanvas.h:162
int pointSize
Font size in points. A zero or negative value means the default size.
Definition ccanvas.h:166
uint8_t style
Font style. Binary OR of FontStyle constants such as FONT_BOLD.
Definition ccanvas.h:167
std::string typeface
Typeface of the font. An empty string means the default font.
Definition ccanvas.h:165
Represents a point as (x,y) coordinates.
Definition ccanvas.h:67
Represents an RGBA pixel, for Pixmap manipulation.
Definition ccanvas.h:255
Represents a rectangle as an (x,y,width,height) tuple.
Definition ccanvas.h:94
Homogeneous 2D transformation matrix.
Definition ccanvas.h:218
Represents the "a" path command with parameters.
Definition ccanvas.h:2065
Represents the "A" path command with parameters.
Definition ccanvas.h:2064
Represents the "Z" path command.
Definition ccanvas.h:2074
Represents the "c" path command with parameters.
Definition ccanvas.h:2071
Represents the "C" path command with parameters.
Definition ccanvas.h:2070
Represents the "q" path command with parameters.
Definition ccanvas.h:2067
Represents the "Q" path command with parameters.
Definition ccanvas.h:2066
Represents the "h" path command with parameters.
Definition ccanvas.h:2061
Represents the "H" path command with parameters.
Definition ccanvas.h:2060
Represents the "l" path command with parameters.
Definition ccanvas.h:2059
Represents the "L" path command with parameters.
Definition ccanvas.h:2058
Represents the "m" path command with parameters.
Definition ccanvas.h:2057
Represents the "M" path command with parameters.
Definition ccanvas.h:2056
Represents an item in a cPathFigure path.
Definition ccanvas.h:2055
Represents the "s" path command with parameters.
Definition ccanvas.h:2073
Represents the "S" path command with parameters.
Definition ccanvas.h:2072
Represents the "t" path command with parameters.
Definition ccanvas.h:2069
Represents the "T" path command with parameters.
Definition ccanvas.h:2068
Represents the "v" path command with parameters.
Definition ccanvas.h:2063
Represents the "V" path command with parameters.
Definition ccanvas.h:2062