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 private:
1402 void copy(const cAbstractShapeFigure& other);
1403 protected:
1404 virtual const char **getAllowedPropertyKeys() const override;
1405 virtual void hashTo(cHasher& hasher) const override;
1406 public:
1409 explicit cAbstractShapeFigure(const char *name=nullptr) : cFigure(name), lineColor(BLACK), fillColor(BLUE) {}
1410 cAbstractShapeFigure(const cAbstractShapeFigure& other) : cFigure(other) {copy(other);}
1411 cAbstractShapeFigure& operator=(const cAbstractShapeFigure& other);
1413
1416 virtual cAbstractShapeFigure *dup() const override {throw cRuntimeError(this, E_CANTDUP);}
1417 virtual std::string str() const override;
1418 virtual void parse(cProperty *property) override;
1420
1423
1426 virtual bool isFilled() const {return filled;}
1427
1432 virtual void setFilled(bool filled);
1433
1437 virtual bool isOutlined() const {return outlined;}
1438
1443 virtual void setOutlined(bool outlined);
1444
1448 virtual const Color& getLineColor() const {return lineColor;}
1449
1454 virtual void setLineColor(const Color& lineColor);
1455
1459 virtual const Color& getFillColor() const {return fillColor;}
1460
1466 virtual void setFillColor(const Color& fillColor);
1467
1471 virtual LineStyle getLineStyle() const {return lineStyle;}
1472
1477 virtual void setLineStyle(LineStyle lineStyle);
1478
1484 virtual double getLineWidth() const {return lineWidth;}
1485
1491 virtual void setLineWidth(double lineWidth);
1492
1497 virtual double getLineOpacity() const {return lineOpacity;}
1498
1503 virtual void setLineOpacity(double lineOpacity);
1504
1509 virtual double getFillOpacity() const {return fillOpacity;}
1510
1515 virtual void setFillOpacity(double fillOpacity);
1516
1521 virtual bool getZoomLineWidth() const {return zoomLineWidth;}
1522
1528 virtual void setZoomLineWidth(bool zoomLineWidth);
1530};
1531
1541class SIM_API cRectangleFigure : public cAbstractShapeFigure
1542{
1543 private:
1544 Rectangle bounds;
1545 double cornerRx = 0, cornerRy = 0;
1546 protected:
1547 virtual const char **getAllowedPropertyKeys() const override;
1548 virtual void hashTo(cHasher& hasher) const override;
1549 private:
1550 void copy(const cRectangleFigure& other);
1551 public:
1554 explicit cRectangleFigure(const char *name=nullptr) : cAbstractShapeFigure(name) {}
1555 cRectangleFigure(const cRectangleFigure& other) : cAbstractShapeFigure(other) {copy(other);}
1556 cRectangleFigure& operator=(const cRectangleFigure& other);
1558
1561 virtual cRectangleFigure *dup() const override {return new cRectangleFigure(*this);}
1562 virtual std::string str() const override;
1563 virtual void parse(cProperty *property) override;
1564 virtual void moveLocal(double dx, double dy) override;
1565 virtual const char *getRendererClassName() const override {return "RectangleFigureRenderer";}
1567
1570
1573 virtual const Rectangle& getBounds() const {return bounds;}
1574
1578 virtual void setBounds(const Rectangle& bounds);
1579
1584 virtual void setPosition(const Point& position, Anchor anchor);
1585
1590 virtual void setCornerRadius(double r) {setCornerRx(r);setCornerRy(r);}
1591
1595 virtual double getCornerRx() const {return cornerRx;}
1596
1601 virtual void setCornerRx(double rx);
1602
1606 virtual double getCornerRy() const {return cornerRy;}
1607
1612 virtual void setCornerRy(double ry);
1614};
1615
1625class SIM_API cOvalFigure : public cAbstractShapeFigure
1626{
1627 private:
1628 Rectangle bounds; // bounding box
1629 private:
1630 void copy(const cOvalFigure& other);
1631 protected:
1632 virtual const char **getAllowedPropertyKeys() const override;
1633 virtual void hashTo(cHasher& hasher) const override;
1634 public:
1637 explicit cOvalFigure(const char *name=nullptr) : cAbstractShapeFigure(name) {}
1638 cOvalFigure(const cOvalFigure& other) : cAbstractShapeFigure(other) {copy(other);}
1639 cOvalFigure& operator=(const cOvalFigure& other);
1641
1644 virtual cOvalFigure *dup() const override {return new cOvalFigure(*this);}
1645 virtual std::string str() const override;
1646 virtual void parse(cProperty *property) override;
1647 virtual void moveLocal(double dx, double dy) override;
1648 virtual const char *getRendererClassName() const override {return "OvalFigureRenderer";}
1650
1653
1656 virtual const Rectangle& getBounds() const {return bounds;}
1657
1661 virtual void setBounds(const Rectangle& bounds);
1662
1667 virtual void setPosition(const Point& position, Anchor anchor);
1669};
1670
1681class SIM_API cRingFigure : public cAbstractShapeFigure
1682{
1683 private:
1684 Rectangle bounds; // bounding box
1685 double innerRx = 0, innerRy = 0;
1686 private:
1687 void copy(const cRingFigure& other);
1688 protected:
1689 virtual const char **getAllowedPropertyKeys() const override;
1690 virtual void hashTo(cHasher& hasher) const override;
1691 public:
1694 explicit cRingFigure(const char *name=nullptr) : cAbstractShapeFigure(name) {}
1695 cRingFigure(const cRingFigure& other) : cAbstractShapeFigure(other) {copy(other);}
1696 cRingFigure& operator=(const cRingFigure& other);
1698
1701 virtual cRingFigure *dup() const override {return new cRingFigure(*this);}
1702 virtual std::string str() const override;
1703 virtual void parse(cProperty *property) override;
1704 virtual void moveLocal(double dx, double dy) override;
1705 virtual const char *getRendererClassName() const override {return "RingFigureRenderer";}
1707
1710
1713 virtual const Rectangle& getBounds() const {return bounds;}
1714
1718 virtual void setBounds(const Rectangle& bounds);
1719
1724 virtual void setPosition(const Point& position, Anchor anchor);
1725
1731 virtual void setInnerRadius(double r) {setInnerRx(r);setInnerRy(r);}
1732
1736 virtual double getInnerRx() const {return innerRx;}
1737
1741 virtual void setInnerRx(double rx);
1742
1746 virtual double getInnerRy() const {return innerRy;}
1747
1751 virtual void setInnerRy(double ry);
1753};
1754
1782class SIM_API cPieSliceFigure : public cAbstractShapeFigure
1783{
1784 private:
1785 Rectangle bounds; // bounding box of the oval that the pie slice is part of
1786 double startAngle = 0, endAngle = 0; // in radians, CCW, 0=east
1787 private:
1788 void copy(const cPieSliceFigure& other);
1789 protected:
1790 virtual const char **getAllowedPropertyKeys() const override;
1791 virtual void hashTo(cHasher& hasher) const override;
1792 public:
1795 explicit cPieSliceFigure(const char *name=nullptr) : cAbstractShapeFigure(name) {}
1796 cPieSliceFigure(const cPieSliceFigure& other) : cAbstractShapeFigure(other) {copy(other);}
1797 cPieSliceFigure& operator=(const cPieSliceFigure& other);
1799
1802 virtual cPieSliceFigure *dup() const override {return new cPieSliceFigure(*this);}
1803 virtual std::string str() const override;
1804 virtual void parse(cProperty *property) override;
1805 virtual void moveLocal(double dx, double dy) override;
1806 virtual const char *getRendererClassName() const override {return "PieSliceFigureRenderer";}
1808
1811
1815 virtual const Rectangle& getBounds() const {return bounds;}
1816
1821 virtual void setBounds(const Rectangle& bounds);
1822
1827 virtual void setPosition(const Point& position, Anchor anchor);
1828
1833 virtual double getStartAngle() const {return startAngle;}
1834
1839 virtual void setStartAngle(double startAngle);
1840
1845 virtual double getEndAngle() const {return endAngle;}
1846
1851 virtual void setEndAngle(double endAngle);
1853};
1854
1868class SIM_API cPolygonFigure : public cAbstractShapeFigure
1869{
1870 private:
1871 std::vector<Point> points;
1872 bool smooth = false;
1873 JoinStyle joinStyle = JOIN_MITER;
1874 FillRule fillRule = FILL_EVENODD;
1875 private:
1876 void copy(const cPolygonFigure& other);
1877 void checkIndex(int i) const;
1878 void checkInsIndex(int i) const;
1879 protected:
1880 virtual const char **getAllowedPropertyKeys() const override;
1881 virtual void hashTo(cHasher& hasher) const override;
1882 public:
1885 explicit cPolygonFigure(const char *name=nullptr) : cAbstractShapeFigure(name) {}
1886 cPolygonFigure(const cPolygonFigure& other) : cAbstractShapeFigure(other) {copy(other);}
1887 cPolygonFigure& operator=(const cPolygonFigure& other);
1889
1892 virtual cPolygonFigure *dup() const override {return new cPolygonFigure(*this);}
1893 virtual std::string str() const override;
1894 virtual void parse(cProperty *property) override;
1895 virtual void moveLocal(double dx, double dy) override;
1896 virtual const char *getRendererClassName() const override {return "PolygonFigureRenderer";}
1898
1901
1904 virtual const std::vector<Point>& getPoints() const {return points;}
1905
1909 virtual void setPoints(const std::vector<Point>& points);
1910
1914 virtual int getNumPoints() const {return points.size();}
1915
1920 virtual const Point& getPoint(int i) const {checkIndex(i); return points[i];}
1921
1926 virtual void setNumPoints(int size); // primarily for sim_std.msg
1927
1931 virtual void setPoint(int i, const Point& point);
1932
1936 virtual void addPoint(const Point& point);
1937
1941 virtual void removePoint(int i);
1942
1947 virtual void insertPoint(int i, const Point& point);
1948
1953 virtual bool getSmooth() const {return smooth;}
1954
1960 virtual void setSmooth(bool smooth);
1962
1965
1968 virtual JoinStyle getJoinStyle() const {return joinStyle;}
1969
1974 virtual void setJoinStyle(JoinStyle joinStyle);
1975
1982 virtual FillRule getFillRule() const {return fillRule;}
1983
1991 virtual void setFillRule(FillRule fillRule);
1993};
1994
2011class SIM_API cPathFigure : public cAbstractShapeFigure
2012{
2013 public:
2014 struct PathItem { char code; };
2015 struct MoveTo : PathItem { double x; double y; };
2016 struct MoveRel : PathItem { double dx; double dy; };
2017 struct LineTo : PathItem { double x; double y; };
2018 struct LineRel : PathItem { double dx; double dy; };
2019 struct HorizontalLineTo : PathItem { double x; };
2020 struct HorizontalLineRel : PathItem { double dx; };
2021 struct VerticalLineTo : PathItem { double y; };
2022 struct VerticalLineRel : PathItem { double dy; };
2023 struct ArcTo : PathItem { double rx; double ry; double phi; bool largeArc; bool sweep; double x; double y; };
2024 struct ArcRel : PathItem { double rx; double ry; double phi; bool largeArc; bool sweep; double dx; double dy; };
2025 struct CurveTo : PathItem { double x1; double y1; double x; double y; };
2026 struct CurveRel : PathItem { double dx1; double dy1; double dx; double dy; };
2027 struct SmoothCurveTo : PathItem { double x; double y; };
2028 struct SmoothCurveRel : PathItem { double dx; double dy; };
2029 struct CubicBezierCurveTo : PathItem { double x1; double y1; double x2; double y2; double x; double y; };
2030 struct CubicBezierCurveRel : PathItem { double dx1; double dy1; double dx2; double dy2; double dx; double dy; };
2031 struct SmoothCubicBezierCurveTo : PathItem { double x2; double y2; double x; double y; };
2032 struct SmoothCubicBezierCurveRel : PathItem { double dx2; double dy2; double dx; double dy; };
2033 struct ClosePath : PathItem { };
2034
2035 private:
2036 std::vector<PathItem*> path;
2037 mutable std::string cachedPathString;
2038 JoinStyle joinStyle = JOIN_MITER;
2039 CapStyle capStyle = CAP_BUTT;
2040 Point offset;
2041 FillRule fillRule = FILL_EVENODD;
2042
2043 private:
2044 void copy(const cPathFigure& other);
2045 void addItem(PathItem *item);
2046 void doClearPath();
2047
2048 protected:
2049 virtual const char **getAllowedPropertyKeys() const override;
2050 virtual void hashTo(cHasher& hasher) const override;
2051
2052 public:
2055 explicit cPathFigure(const char *name=nullptr) : cAbstractShapeFigure(name) {}
2056 cPathFigure(const cPathFigure& other) : cAbstractShapeFigure(other) {copy(other);}
2057 virtual ~cPathFigure() {doClearPath();}
2058 cPathFigure& operator=(const cPathFigure& other);
2060
2063 virtual cPathFigure *dup() const override {return new cPathFigure(*this);}
2064 virtual std::string str() const override;
2065 virtual void parse(cProperty *property) override;
2069 virtual void moveLocal(double dx, double dy) override;
2070 virtual const char *getRendererClassName() const override {return "PathFigureRenderer";}
2072
2075
2078 virtual JoinStyle getJoinStyle() const {return joinStyle;}
2079
2084 virtual void setJoinStyle(JoinStyle joinStyle);
2085
2089 virtual CapStyle getCapStyle() const {return capStyle;}
2090
2095 virtual void setCapStyle(CapStyle capStyle);
2096
2103 virtual FillRule getFillRule() const {return fillRule;}
2104
2113 virtual void setFillRule(FillRule fillRule);
2115
2118
2123 virtual const Point& getOffset() const {return offset;}
2124
2132 virtual void setOffset(const Point& offset);
2134
2137
2140 virtual const char *getPath() const;
2141
2147 virtual void setPath(const char *path);
2148
2152 virtual int getNumPathItems() const {return path.size();}
2153
2159 virtual const PathItem *getPathItem(int k) const {return path[k];}
2160
2164 virtual void clearPath();
2165
2172 virtual void addMoveTo(double x, double y); // M x y
2173
2181 virtual void addMoveRel(double dx, double dy); // m dx dy
2182
2189 virtual void addLineTo(double x, double y); // L x y
2190
2197 virtual void addLineRel(double dx, double dy); // l dx dy
2198
2205 virtual void addHorizontalLineTo(double x); // H x
2206
2213 virtual void addHorizontalLineRel(double dx); // h dx
2214
2221 virtual void addVerticalLineTo(double y); // V y
2222
2229 virtual void addVerticalLineRel(double dy); // v dy
2230
2245 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
2246
2262 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
2263
2270 virtual void addCurveTo(double x1, double y1, double x, double y); // Q x1 y1 x y
2271
2279 virtual void addCurveRel(double dx1, double dy1, double dx, double dy); // q dx1 dy1 dx dy
2280
2292 virtual void addSmoothCurveTo(double x, double y); // T x y
2293
2305 virtual void addSmoothCurveRel(double dx, double dy); // t dx dy
2306
2315 virtual void addCubicBezierCurveTo(double x1, double y1, double x2, double y2, double x, double y); // C x1 y1 x2 y2 x y
2316
2326 virtual void addCubicBezierCurveRel(double dx1, double dy1, double dx2, double dy2, double dx, double dy); // c dx1 dy1 dx2 dy2 dx dy
2327
2340 virtual void addSmoothCubicBezierCurveTo(double x2, double y2, double x, double y); // S x2 y2 x y
2341
2354 virtual void addSmoothCubicBezierCurveRel(double dx2, double dy2, double dx, double dy); // s dx2 dy2 dx dy
2355
2363 virtual void addClosePath(); // Z
2365};
2366
2386class SIM_API cAbstractTextFigure : public cFigure
2387{
2388 private:
2389 Point position;
2390 Color color; // note: tkpath's text supports separate colors and opacity for fill and outline -- ignore because probably SWT doesn't support it!
2391 double opacity = 1;
2392 bool halo = false;
2393 Font font;
2394 std::string text;
2395 Anchor anchor = ANCHOR_NW;
2396 Alignment alignment = ALIGN_LEFT;
2397 private:
2398 void copy(const cAbstractTextFigure& other);
2399 protected:
2400 virtual const char **getAllowedPropertyKeys() const override;
2401 virtual void hashTo(cHasher& hasher) const override;
2402 public:
2405 explicit cAbstractTextFigure(const char *name=nullptr) : cFigure(name), color(BLACK) {}
2406 cAbstractTextFigure(const cAbstractTextFigure& other) : cFigure(other) {copy(other);}
2407 cAbstractTextFigure& operator=(const cAbstractTextFigure& other);
2409
2412 virtual cAbstractTextFigure *dup() const override {throw cRuntimeError(this, E_CANTDUP);}
2413 virtual std::string str() const override;
2414 virtual void parse(cProperty *property) override;
2418 virtual void moveLocal(double dx, double dy) override;
2420
2423
2428 virtual const Point& getPosition() const {return position;}
2429
2435 virtual void setPosition(const Point& position);
2436
2442 virtual Anchor getAnchor() const {return anchor;}
2443
2449 virtual void setAnchor(Anchor anchor);
2450
2458 virtual Alignment getAlignment() const {return alignment;}
2459
2467 virtual void setAlignment(Alignment alignment);
2468
2485 virtual Rectangle getBounds() const;
2486
2501 virtual Point getTextExtent() const;
2502
2516 virtual double getFontAscent() const;
2518
2521
2524 virtual const Color& getColor() const {return color;}
2525
2529 virtual void setColor(const Color& color);
2530
2534 virtual double getOpacity() const {return opacity;}
2535
2540 virtual void setOpacity(double opacity);
2541
2545 virtual bool getHalo() const {return halo;}
2546
2558 virtual void setHalo(bool enabled);
2559
2563 virtual const Font& getFont() const {return font;}
2564
2570 virtual void setFont(Font font);
2572
2575
2578 virtual const char *getText() const {return text.c_str();}
2579
2584 virtual void setText(const char* text);
2586};
2587
2596class SIM_API cTextFigure : public cAbstractTextFigure
2597{
2598 private:
2599 void copy(const cTextFigure& other) {}
2600 public:
2603 explicit cTextFigure(const char *name=nullptr) : cAbstractTextFigure(name) {}
2604 cTextFigure(const cTextFigure& other) : cAbstractTextFigure(other) {copy(other);}
2605 cTextFigure& operator=(const cTextFigure& other);
2607
2610 virtual cTextFigure *dup() const override {return new cTextFigure(*this);}
2611 virtual const char *getRendererClassName() const override {return "TextFigureRenderer";}
2613};
2614
2624class SIM_API cLabelFigure : public cAbstractTextFigure
2625{
2626 private:
2627 double angle = 0.0; // in radians, positive is CCW, 0 is "horizontal" or "unrotated"
2628 private:
2629 void copy(const cLabelFigure& other);
2630 protected:
2631 virtual const char **getAllowedPropertyKeys() const override;
2632 virtual void hashTo(cHasher& hasher) const override;
2633 public:
2636 explicit cLabelFigure(const char *name=nullptr) : cAbstractTextFigure(name) {}
2637 cLabelFigure(const cLabelFigure& other) : cAbstractTextFigure(other) {copy(other);}
2638 cLabelFigure& operator=(const cLabelFigure& other);
2640
2643 virtual cLabelFigure *dup() const override {return new cLabelFigure(*this);}
2644 virtual void parse(cProperty *property) override;
2645 virtual const char *getRendererClassName() const override {return "LabelFigureRenderer";}
2647
2650 virtual double getAngle() const {return angle;}
2651 virtual void setAngle(double angle);
2652 virtual Rectangle getBounds() const override;
2654};
2655
2681class SIM_API cAbstractImageFigure : public cFigure
2682{
2683 private:
2684 Point position;
2685 Anchor anchor = ANCHOR_CENTER; // note: do not use the ANCHOR_BASELINE_START/MIDDLE/END constants, as they are for text items
2686 double width = 0, height = 0; // zero or negative values mean using the image's own size
2687 Interpolation interpolation = INTERPOLATION_FAST;
2688 double opacity = 1;
2689 Color tintColor;
2690 double tintAmount = 0; // in the range 0..1
2691 private:
2692 void copy(const cAbstractImageFigure& other);
2693 protected:
2694 virtual const char **getAllowedPropertyKeys() const override;
2695 virtual void hashTo(cHasher& hasher) const override;
2696 virtual Point getDefaultSize() const = 0;
2697 public:
2700 explicit cAbstractImageFigure(const char *name=nullptr) : cFigure(name), tintColor(BLUE) { }
2701 cAbstractImageFigure(const cAbstractImageFigure& other) : cFigure(other) {copy(other);}
2702 cAbstractImageFigure& operator=(const cAbstractImageFigure& other);
2704
2707 virtual cAbstractImageFigure *dup() const override {throw cRuntimeError(this, E_CANTDUP);}
2708 virtual void parse(cProperty *property) override;
2712 virtual void moveLocal(double dx, double dy) override;
2714
2717
2722 virtual const Point& getPosition() const {return position;}
2723
2729 virtual void setPosition(const Point& position);
2730
2736 virtual Anchor getAnchor() const {return anchor;}
2737
2743 virtual void setAnchor(Anchor anchor);
2744
2749 virtual double getWidth() const {return width;}
2750
2757 virtual void setWidth(double width);
2758
2763 virtual double getHeight() const {return height;}
2764
2771 virtual void setHeight(double height); // zero means "unset"
2772
2777 virtual void setSize(double width, double height) {setWidth(width); setHeight(height);}
2778
2790 virtual Rectangle getBounds() const;
2792
2795
2800 virtual Interpolation getInterpolation() const {return interpolation;}
2801
2807 virtual void setInterpolation(Interpolation interpolation);
2808
2812 virtual double getOpacity() const {return opacity;}
2813
2818 virtual void setOpacity(double opacity);
2819
2823 virtual const Color& getTintColor() const {return tintColor;}
2824
2832 virtual void setTintColor(const Color& tintColor);
2833
2838 virtual double getTintAmount() const {return tintAmount;}
2839
2848 virtual void setTintAmount(double tintAmount);
2850};
2851
2861class SIM_API cImageFigure : public cAbstractImageFigure
2862{
2863 private:
2864 std::string imageName;
2865 private:
2866 void copy(const cImageFigure& other);
2867 protected:
2868 virtual const char **getAllowedPropertyKeys() const override;
2869 virtual void hashTo(cHasher& hasher) const override;
2870 virtual Point getDefaultSize() const override;
2871 public:
2874 explicit cImageFigure(const char *name=nullptr) : cAbstractImageFigure(name) {}
2875 cImageFigure(const cImageFigure& other) : cAbstractImageFigure(other) {copy(other);}
2876 cImageFigure& operator=(const cImageFigure& other);
2878
2881 virtual cImageFigure *dup() const override {return new cImageFigure(*this);}
2882 virtual std::string str() const override;
2883 virtual void parse(cProperty *property) override;
2884 virtual const char *getRendererClassName() const override {return "ImageFigureRenderer";}
2886
2889
2892 virtual const char *getImageName() const {return imageName.c_str();}
2893
2900 virtual void setImageName(const char* imageName);
2901
2912 virtual int getImageNaturalWidth() const {return getDefaultSize().x;}
2913
2924 virtual int getImageNaturalHeight() const {return getDefaultSize().y;}
2926};
2927
2938class SIM_API cIconFigure : public cImageFigure
2939{
2940 private:
2941 void copy(const cIconFigure& other) {}
2942 public:
2945 explicit cIconFigure(const char *name=nullptr) : cImageFigure(name) {}
2946 cIconFigure(const cIconFigure& other) : cImageFigure(other) {copy(other);}
2947 cIconFigure& operator=(const cIconFigure& other);
2949
2952 virtual cIconFigure *dup() const override {return new cIconFigure(*this);}
2953 virtual const char *getRendererClassName() const override {return "IconFigureRenderer";}
2955};
2956
2966class SIM_API cPixmapFigure : public cAbstractImageFigure
2967{
2968 private:
2969 Pixmap pixmap;
2970 private:
2971 void copy(const cPixmapFigure& other);
2972 protected:
2973 virtual const char **getAllowedPropertyKeys() const override;
2974 virtual void hashTo(cHasher& hasher) const override;
2975 virtual Point getDefaultSize() const override;
2976 public:
2979 explicit cPixmapFigure(const char *name=nullptr) : cAbstractImageFigure(name) {}
2980 cPixmapFigure(const cPixmapFigure& other) : cAbstractImageFigure(other) {copy(other);}
2981 virtual ~cPixmapFigure() {}
2982 cPixmapFigure& operator=(const cPixmapFigure& other);
2984
2987 virtual cPixmapFigure *dup() const override {return new cPixmapFigure(*this);}
2988 virtual std::string str() const override;
2989 virtual void parse(cProperty *property) override;
2990 virtual const char *getRendererClassName() const override {return "PixmapFigureRenderer";}
2992
2995
3002 virtual const Pixmap& getPixmap() const {return pixmap;}
3003
3008 virtual void setPixmap(const Pixmap& pixmap);
3009
3011 virtual int getPixmapHeight() const {return pixmap.getHeight();}
3013 virtual int getPixmapWidth() const {return pixmap.getWidth();}
3015 virtual void setPixmapSize(int width, int height, const RGBA& fill); // nondestructive, set *newly added* pixels with this color and opacity
3017 virtual void setPixmapSize(int width, int height, const Color& color, double opacity); // nondestructive, fills *newly added* pixels with this color and opacity
3019 virtual void fillPixmap(const RGBA& fill);
3021 virtual void fillPixmap(const Color& color, double opacity);
3023 virtual const RGBA getPixel(int x, int y) const {return pixmap.pixel(x, y);}
3025 virtual void setPixel(int x, int y, const RGBA& argb);
3027 virtual void setPixel(int x, int y, const Color& color, double opacity = 1.0);
3029 virtual const Color getPixelColor(int x, int y) const {return pixmap.getColor(x,y);}
3031 virtual void setPixelColor(int x, int y, const Color& color);
3033 virtual double getPixelOpacity(int x, int y) const {return pixmap.getOpacity(x,y);}
3035 virtual void setPixelOpacity(int x, int y, double opacity);
3037};
3038
3057class SIM_API cCanvas : public cOwnedObject
3058{
3059 private:
3060 cFigure::Color backgroundColor;
3061 cFigure *rootFigure;
3062 std::map<std::string,int> tagBitIndex; // tag-to-bitindex
3063 static std::map<std::string,cObjectFactory*> figureFactories;
3064 std::map<const cObject*,double> animationSpeedMap; // maps source to animationSpeed
3065 double minAnimationSpeed = DBL_MAX; // minimum of the values in animationSpeedMap cached, or DBL_MAX for none
3066 double animationHoldEndTime = 0; // the effective one will be the maximum endTime of all visible canvases
3067 public:
3068 // internal:
3069 virtual cFigure *parseFigure(cProperty *property) const;
3070 virtual cFigure *createFigure(const char *type) const;
3071 static bool containsCanvasItems(cProperties *properties);
3072 virtual void addFiguresFrom(cProperties *properties);
3073 virtual uint64_t parseTags(const char *s);
3074 virtual std::string getTags(uint64_t tagBits);
3075 const std::map<const cObject*,double>& getAnimationSpeedMap() const {return animationSpeedMap;} // for e.g. Qtenv
3076 double getMinAnimationSpeed() const {return minAnimationSpeed;} // for e.g. Qtenv; DBL_MAX if none
3077 double getAnimationHoldEndTime() const {return animationHoldEndTime;} // for e.g. Qtenv
3078 private:
3079 void copy(const cCanvas& other);
3080 public:
3083 explicit cCanvas(const char *name = nullptr);
3084 cCanvas(const cCanvas& other) : cOwnedObject(other), rootFigure(nullptr) {copy(other);}
3085 virtual ~cCanvas();
3086 cCanvas& operator=(const cCanvas& other);
3088
3091 virtual cCanvas *dup() const override {return new cCanvas(*this);}
3092 virtual void forEachChild(cVisitor *v) override;
3093 virtual std::string str() const override;
3095
3098
3101 virtual const cFigure::Color& getBackgroundColor() const {return backgroundColor;}
3102
3106 virtual void setBackgroundColor(const cFigure::Color& color) {this->backgroundColor = color;}
3107
3112 virtual uint32_t getHash() const;
3114
3117
3121 virtual cFigure *getRootFigure() const {return rootFigure;}
3122
3126 virtual void addFigure(cFigure *figure) {rootFigure->addFigure(figure);}
3127
3134 virtual void addFigure(cFigure *figure, int pos) {rootFigure->addFigure(figure, pos);}
3135
3140 virtual cFigure *removeFigure(cFigure *figure) {return rootFigure->removeFigure(figure);}
3141
3146 virtual cFigure *removeFigure(int pos) {return rootFigure->removeFigure(pos);}
3147
3153 virtual int findFigure(const char *name) const {return rootFigure->findFigure(name);}
3154
3159 virtual int findFigure(cFigure *figure) const {return rootFigure->findFigure(figure);}
3160
3165 virtual bool hasFigures() const {return rootFigure->containsFigures();}
3166
3170 virtual int getNumFigures() const {return rootFigure->getNumFigures();}
3171
3177 virtual cFigure *getFigure(int pos) const {return rootFigure->getFigure(pos);}
3178
3183 virtual cFigure *getFigure(const char *name) const {return rootFigure->getFigure(name);}
3185
3188
3195 virtual cFigure *getSubmodulesLayer() const;
3196
3201 virtual cFigure *findFigureRecursively(const char *name) const {return rootFigure->findFigureRecursively(name);}
3202
3207 virtual cFigure *getFigureByPath(const char *path) const {return rootFigure->getFigureByPath(path);}
3209
3212
3216 virtual std::string getAllTags() const;
3217
3222 virtual std::vector<std::string> getAllTagsAsVector() const;
3224
3227
3242 virtual void setAnimationSpeed(double animationSpeed, const cObject *source);
3243
3248 virtual double getAnimationSpeed(const cObject *source);
3249
3268 virtual void holdSimulationFor(double animationTimeDelta);
3270};
3271
3272} // namespace omnetpp
3273
3274
3275#endif
3276
Abstract base class for figures that display an image.
Definition ccanvas.h:2682
virtual double getTintAmount() const
Definition ccanvas.h:2838
virtual void setWidth(double width)
virtual const Color & getTintColor() const
Definition ccanvas.h:2823
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:2736
virtual void setSize(double width, double height)
Definition ccanvas.h:2777
virtual void setOpacity(double opacity)
virtual const Point & getPosition() const
Definition ccanvas.h:2722
virtual Rectangle getBounds() const
virtual cAbstractImageFigure * dup() const override
Definition ccanvas.h:2707
virtual void setAnchor(Anchor anchor)
virtual void moveLocal(double dx, double dy) override
virtual double getOpacity() const
Definition ccanvas.h:2812
virtual double getHeight() const
Definition ccanvas.h:2763
virtual double getWidth() const
Definition ccanvas.h:2749
virtual Interpolation getInterpolation() const
Definition ccanvas.h:2800
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:1437
virtual const Color & getLineColor() const
Definition ccanvas.h:1448
virtual LineStyle getLineStyle() const
Definition ccanvas.h:1471
virtual void setLineStyle(LineStyle lineStyle)
virtual bool getZoomLineWidth() const
Definition ccanvas.h:1521
virtual bool isFilled() const
Definition ccanvas.h:1426
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:1497
virtual cAbstractShapeFigure * dup() const override
Definition ccanvas.h:1416
virtual double getFillOpacity() const
Definition ccanvas.h:1509
virtual void setZoomLineWidth(bool zoomLineWidth)
virtual double getLineWidth() const
Definition ccanvas.h:1484
virtual std::string str() const override
virtual void setFillColor(const Color &fillColor)
virtual void setFilled(bool filled)
virtual const Color & getFillColor() const
Definition ccanvas.h:1459
virtual void parse(cProperty *property) override
Abstract base class for figures that display text. Text may be multi-line.
Definition ccanvas.h:2387
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:2458
virtual Anchor getAnchor() const
Definition ccanvas.h:2442
virtual void setOpacity(double opacity)
virtual const Point & getPosition() const
Definition ccanvas.h:2428
virtual const char * getText() const
Definition ccanvas.h:2578
virtual Rectangle getBounds() const
virtual const Color & getColor() const
Definition ccanvas.h:2524
virtual void setText(const char *text)
virtual bool getHalo() const
Definition ccanvas.h:2545
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:2563
virtual std::string str() const override
virtual void moveLocal(double dx, double dy) override
virtual double getOpacity() const
Definition ccanvas.h:2534
virtual cAbstractTextFigure * dup() const override
Definition ccanvas.h:2412
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:3058
virtual cCanvas * dup() const override
Definition ccanvas.h:3091
virtual int getNumFigures() const
Definition ccanvas.h:3170
virtual double getAnimationSpeed(const cObject *source)
virtual const cFigure::Color & getBackgroundColor() const
Definition ccanvas.h:3101
virtual int findFigure(cFigure *figure) const
Definition ccanvas.h:3159
virtual bool hasFigures() const
Definition ccanvas.h:3165
virtual cFigure * findFigureRecursively(const char *name) const
Definition ccanvas.h:3201
virtual void addFigure(cFigure *figure, int pos)
Definition ccanvas.h:3134
virtual void addFigure(cFigure *figure)
Definition ccanvas.h:3126
virtual cFigure * getFigure(const char *name) const
Definition ccanvas.h:3183
virtual cFigure * getFigure(int pos) const
Definition ccanvas.h:3177
virtual void holdSimulationFor(double animationTimeDelta)
virtual cFigure * getRootFigure() const
Definition ccanvas.h:3121
virtual std::string getAllTags() const
virtual uint32_t getHash() const
virtual int findFigure(const char *name) const
Definition ccanvas.h:3153
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:3146
virtual void setBackgroundColor(const cFigure::Color &color)
Definition ccanvas.h:3106
virtual cFigure * removeFigure(cFigure *figure)
Definition ccanvas.h:3140
virtual std::vector< std::string > getAllTagsAsVector() const
virtual cFigure * getFigureByPath(const char *path) const
Definition ccanvas.h:3207
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:2953
virtual cIconFigure * dup() const override
Definition ccanvas.h:2952
A figure that displays an image, typically an icon or a background image, loaded from the OMNeT++ ima...
Definition ccanvas.h:2862
virtual int getImageNaturalHeight() const
Definition ccanvas.h:2924
virtual const char ** getAllowedPropertyKeys() const override
virtual int getImageNaturalWidth() const
Definition ccanvas.h:2912
virtual const char * getImageName() const
Definition ccanvas.h:2892
virtual cImageFigure * dup() const override
Definition ccanvas.h:2881
virtual const char * getRendererClassName() const override
Definition ccanvas.h:2884
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:2625
virtual const char ** getAllowedPropertyKeys() const override
virtual Rectangle getBounds() const override
virtual const char * getRendererClassName() const override
Definition ccanvas.h:2645
virtual cLabelFigure * dup() const override
Definition ccanvas.h:2643
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:1626
virtual const char ** getAllowedPropertyKeys() const override
virtual const char * getRendererClassName() const override
Definition ccanvas.h:1648
virtual void setPosition(const Point &position, Anchor anchor)
virtual void setBounds(const Rectangle &bounds)
virtual cOvalFigure * dup() const override
Definition ccanvas.h:1644
virtual const Rectangle & getBounds() const
Definition ccanvas.h:1656
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:2012
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:2089
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:2078
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:2103
virtual void clearPath()
virtual cPathFigure * dup() const override
Definition ccanvas.h:2063
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:2070
virtual const Point & getOffset() const
Definition ccanvas.h:2123
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:2152
virtual void parse(cProperty *property) override
virtual const PathItem * getPathItem(int k) const
Definition ccanvas.h:2159
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:1783
virtual const char ** getAllowedPropertyKeys() const override
virtual const char * getRendererClassName() const override
Definition ccanvas.h:1806
virtual cPieSliceFigure * dup() const override
Definition ccanvas.h:1802
virtual void setPosition(const Point &position, Anchor anchor)
virtual void setBounds(const Rectangle &bounds)
virtual const Rectangle & getBounds() const
Definition ccanvas.h:1815
virtual void setStartAngle(double startAngle)
virtual double getStartAngle() const
Definition ccanvas.h:1833
virtual std::string str() const override
virtual double getEndAngle() const
Definition ccanvas.h:1845
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:2967
virtual cPixmapFigure * dup() const override
Definition ccanvas.h:2987
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:3033
virtual const Color getPixelColor(int x, int y) const
Definition ccanvas.h:3029
virtual void setPixmap(const Pixmap &pixmap)
virtual const char * getRendererClassName() const override
Definition ccanvas.h:2990
virtual void setPixelOpacity(int x, int y, double opacity)
virtual int getPixmapWidth() const
Definition ccanvas.h:3013
virtual const RGBA getPixel(int x, int y) const
Definition ccanvas.h:3023
virtual int getPixmapHeight() const
Definition ccanvas.h:3011
virtual std::string str() const override
virtual void setPixelColor(int x, int y, const Color &color)
virtual const Pixmap & getPixmap() const
Definition ccanvas.h:3002
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:1869
virtual const std::vector< Point > & getPoints() const
Definition ccanvas.h:1904
virtual const char ** getAllowedPropertyKeys() const override
virtual void setPoints(const std::vector< Point > &points)
virtual bool getSmooth() const
Definition ccanvas.h:1953
virtual void setJoinStyle(JoinStyle joinStyle)
virtual JoinStyle getJoinStyle() const
Definition ccanvas.h:1968
virtual FillRule getFillRule() const
Definition ccanvas.h:1982
virtual void setSmooth(bool smooth)
virtual const char * getRendererClassName() const override
Definition ccanvas.h:1896
virtual void setPoint(int i, const Point &point)
virtual cPolygonFigure * dup() const override
Definition ccanvas.h:1892
virtual int getNumPoints() const
Definition ccanvas.h:1914
virtual void setNumPoints(int size)
virtual const Point & getPoint(int i) const
Definition ccanvas.h:1920
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:1542
virtual double getCornerRx() const
Definition ccanvas.h:1595
virtual const char ** getAllowedPropertyKeys() const override
virtual void setCornerRx(double rx)
virtual void setCornerRadius(double r)
Definition ccanvas.h:1590
virtual const char * getRendererClassName() const override
Definition ccanvas.h:1565
virtual double getCornerRy() const
Definition ccanvas.h:1606
virtual cRectangleFigure * dup() const override
Definition ccanvas.h:1561
virtual void setPosition(const Point &position, Anchor anchor)
virtual void setBounds(const Rectangle &bounds)
virtual const Rectangle & getBounds() const
Definition ccanvas.h:1573
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:1682
virtual void setInnerRx(double rx)
virtual const char ** getAllowedPropertyKeys() const override
virtual void setInnerRy(double ry)
virtual void setInnerRadius(double r)
Definition ccanvas.h:1731
virtual const char * getRendererClassName() const override
Definition ccanvas.h:1705
virtual double getInnerRx() const
Definition ccanvas.h:1736
virtual void setPosition(const Point &position, Anchor anchor)
virtual void setBounds(const Rectangle &bounds)
virtual const Rectangle & getBounds() const
Definition ccanvas.h:1713
virtual cRingFigure * dup() const override
Definition ccanvas.h:1701
virtual double getInnerRy() const
Definition ccanvas.h:1746
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:2610
virtual const char * getRendererClassName() const override
Definition ccanvas.h:2611
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:2024
Represents the "A" path command with parameters.
Definition ccanvas.h:2023
Represents the "Z" path command.
Definition ccanvas.h:2033
Represents the "c" path command with parameters.
Definition ccanvas.h:2030
Represents the "C" path command with parameters.
Definition ccanvas.h:2029
Represents the "q" path command with parameters.
Definition ccanvas.h:2026
Represents the "Q" path command with parameters.
Definition ccanvas.h:2025
Represents the "h" path command with parameters.
Definition ccanvas.h:2020
Represents the "H" path command with parameters.
Definition ccanvas.h:2019
Represents the "l" path command with parameters.
Definition ccanvas.h:2018
Represents the "L" path command with parameters.
Definition ccanvas.h:2017
Represents the "m" path command with parameters.
Definition ccanvas.h:2016
Represents the "M" path command with parameters.
Definition ccanvas.h:2015
Represents an item in a cPathFigure path.
Definition ccanvas.h:2014
Represents the "s" path command with parameters.
Definition ccanvas.h:2032
Represents the "S" path command with parameters.
Definition ccanvas.h:2031
Represents the "t" path command with parameters.
Definition ccanvas.h:2028
Represents the "T" path command with parameters.
Definition ccanvas.h:2027
Represents the "v" path command with parameters.
Definition ccanvas.h:2022
Represents the "V" path command with parameters.
Definition ccanvas.h:2021