SWMMVis  6.0.0-alpha.4
Qt6/C++ GIS-based graphical user interface for the SWMMVis engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
symbolstyleadapter.h
Go to the documentation of this file.
1
37#ifndef OPENSWMM_RENDER_SYMBOLSTYLEADAPTER_H
38#define OPENSWMM_RENDER_SYMBOLSTYLEADAPTER_H
39
40#include "render/markershape.h"
41
42#include <QColor>
43#include <QFont>
44#include <QObject>
45#include <QtGlobal>
46
47namespace OpenSWMM::Render
48{
49
50class Rule;
51class IFeatureRenderer;
52
53class SymbolStyleAdapter : public QObject
54{
55 Q_OBJECT
56
58 Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY changed)
59
60
63 Q_PROPERTY(QColor fillColor READ fillColor WRITE setFillColor NOTIFY changed)
64
68 Q_PROPERTY(QColor strokeColor READ strokeColor WRITE setStrokeColor NOTIFY changed)
69
73 Q_PROPERTY(qreal strokeWidth READ strokeWidth WRITE setStrokeWidth NOTIFY changed)
74
76 Q_PROPERTY(qreal markerSize READ markerSize WRITE setMarkerSize NOTIFY changed)
77
83 Q_PROPERTY(OpenSWMM::Render::MarkerShape markerShape
84 READ markerShape WRITE setMarkerShape NOTIFY changed)
85
86public:
90 explicit SymbolStyleAdapter(Rule *rule, QObject *parent = nullptr);
91 ~SymbolStyleAdapter() override;
92
110 [[nodiscard]] static QObject *createFor(Rule *rule, QObject *parent = nullptr);
111
112 [[nodiscard]] qreal opacity() const;
113 [[nodiscard]] QColor fillColor() const;
114 [[nodiscard]] QColor strokeColor() const;
115 [[nodiscard]] qreal strokeWidth() const;
116 [[nodiscard]] qreal markerSize() const;
117 [[nodiscard]] MarkerShape markerShape() const;
118
119 void setOpacity(qreal v);
120 void setFillColor(const QColor &c);
121 void setStrokeColor(const QColor &c);
122 void setStrokeWidth(qreal v);
123 void setMarkerSize(qreal v);
125
126 [[nodiscard]] Rule *rule() const { return m_rule; }
127
128signals:
132 void changed();
133
134private slots:
135 void onRendererReplaced();
136
137private:
139 template <typename T>
140 [[nodiscard]] T readProp(const QString &key, const T &fallback) const;
141
144 template <typename T>
145 bool writeProp(const QString &key, const T &value);
146
147 Rule *m_rule = nullptr;
148};
149
150// ===========================================================================
151// Slice SS.1 — archetype-aware adapters
152// ===========================================================================
153//
154// Each subclass declares ONLY the Q_PROPERTYs that apply to its archetype.
155// QPropertyModel walks the concrete metaobject, so the editor sees exactly
156// the matrix from RENDERING_SINGLE_SYMBOL_TRANSFER_PLAN.md §3 — no marker
157// knobs on lines, no arrow knobs on points.
158//
159// All three subclasses share the same plumbing: hold a Rule*, watch
160// rendererReplaced, read/write canonical prop keys on the Rule's
161// SingleSymbolRenderer's first SymbolLayer. Common helpers live in the
162// .cpp (free functions in an anonymous namespace) — these classes are
163// siblings (not derived from SymbolStyleAdapter) precisely so the base
164// metaobject doesn't leak its archetype-agnostic Q_PROPERTYs.
165
173class PointSymbolStyleAdapter : public QObject
174{
175 Q_OBJECT
176
177 Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY changed)
178 Q_PROPERTY(OpenSWMM::Render::MarkerShape markerShape
179 READ markerShape WRITE setMarkerShape NOTIFY changed)
180 Q_PROPERTY(qreal markerSize READ markerSize WRITE setMarkerSize NOTIFY changed)
181 Q_PROPERTY(QColor fillColor READ fillColor WRITE setFillColor NOTIFY changed)
182 Q_PROPERTY(QColor outlineColor READ outlineColor WRITE setOutlineColor NOTIFY changed)
183 Q_PROPERTY(qreal outlineWidth READ outlineWidth WRITE setOutlineWidth NOTIFY changed)
184 Q_PROPERTY(bool showLabel READ showLabel WRITE setShowLabel NOTIFY changed)
185 Q_PROPERTY(QFont labelFont READ labelFont WRITE setLabelFont NOTIFY changed)
186 Q_PROPERTY(QColor labelColor READ labelColor WRITE setLabelColor NOTIFY changed)
187
188 Q_CLASSINFO("group:opacity", "Symbology")
189 Q_CLASSINFO("group:markerShape", "Symbology")
190 Q_CLASSINFO("group:markerSize", "Symbology")
191 Q_CLASSINFO("group:fillColor", "Fill")
192 Q_CLASSINFO("group:outlineColor", "Outline")
193 Q_CLASSINFO("group:outlineWidth", "Outline")
194 Q_CLASSINFO("group:showLabel", "Labels")
195 Q_CLASSINFO("group:labelFont", "Labels")
196 Q_CLASSINFO("group:labelColor", "Labels")
197
198public:
199 explicit PointSymbolStyleAdapter(Rule *rule, QObject *parent = nullptr);
201
202 [[nodiscard]] qreal opacity() const;
203 [[nodiscard]] MarkerShape markerShape() const;
204 [[nodiscard]] qreal markerSize() const;
205 [[nodiscard]] QColor fillColor() const;
206 [[nodiscard]] QColor outlineColor() const;
207 [[nodiscard]] qreal outlineWidth() const;
208 [[nodiscard]] bool showLabel() const;
209 [[nodiscard]] QFont labelFont() const;
210 [[nodiscard]] QColor labelColor() const;
211
212 void setOpacity(qreal v);
214 void setMarkerSize(qreal v);
215 void setFillColor(const QColor &c);
216 void setOutlineColor(const QColor &c);
217 void setOutlineWidth(qreal v);
218 void setShowLabel(bool v);
219 void setLabelFont(const QFont &f);
220 void setLabelColor(const QColor &c);
221
222 [[nodiscard]] Rule *rule() const { return m_rule; }
223
224signals:
225 void changed();
226
227private slots:
228 void onRendererReplaced();
229
230private:
231 Rule *m_rule = nullptr;
232};
233
240class LineSymbolStyleAdapter : public QObject
241{
242 Q_OBJECT
243
244 Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY changed)
245 Q_PROPERTY(QColor lineColor READ lineColor WRITE setLineColor NOTIFY changed)
246 Q_PROPERTY(qreal lineWidth READ lineWidth WRITE setLineWidth NOTIFY changed)
247 Q_PROPERTY(Qt::PenStyle dashPattern READ dashPattern WRITE setDashPattern NOTIFY changed)
248 Q_PROPERTY(qreal offsetPx READ offsetPx WRITE setOffsetPx NOTIFY changed)
249 Q_PROPERTY(bool showLabel READ showLabel WRITE setShowLabel NOTIFY changed)
250 Q_PROPERTY(QFont labelFont READ labelFont WRITE setLabelFont NOTIFY changed)
251 Q_PROPERTY(QColor labelColor READ labelColor WRITE setLabelColor NOTIFY changed)
252 Q_PROPERTY(bool showArrows READ showArrows WRITE setShowArrows NOTIFY changed)
253 Q_PROPERTY(qreal arrowSize READ arrowSize WRITE setArrowSize NOTIFY changed)
254 Q_PROPERTY(qreal arrowWidth READ arrowWidth WRITE setArrowWidth NOTIFY changed)
255 Q_PROPERTY(QColor arrowColor READ arrowColor WRITE setArrowColor NOTIFY changed)
257 WRITE setArrowOnlyWhenFlowPos NOTIFY changed)
258
259 Q_CLASSINFO("group:opacity", "Symbology")
260 Q_CLASSINFO("group:lineColor", "Line")
261 Q_CLASSINFO("group:lineWidth", "Line")
262 Q_CLASSINFO("group:dashPattern", "Line")
263 Q_CLASSINFO("group:offsetPx", "Line")
264 Q_CLASSINFO("group:showLabel", "Labels")
265 Q_CLASSINFO("group:labelFont", "Labels")
266 Q_CLASSINFO("group:labelColor", "Labels")
267 Q_CLASSINFO("group:showArrows", "Flow arrows")
268 Q_CLASSINFO("group:arrowSize", "Flow arrows")
269 Q_CLASSINFO("group:arrowWidth", "Flow arrows")
270 Q_CLASSINFO("group:arrowColor", "Flow arrows")
271 Q_CLASSINFO("group:arrowOnlyWhenFlowPos", "Flow arrows")
272
273public:
274 explicit LineSymbolStyleAdapter(Rule *rule, QObject *parent = nullptr);
276
277 [[nodiscard]] qreal opacity() const;
278 [[nodiscard]] QColor lineColor() const;
279 [[nodiscard]] qreal lineWidth() const;
280 [[nodiscard]] Qt::PenStyle dashPattern() const;
281 [[nodiscard]] qreal offsetPx() const;
282 [[nodiscard]] bool showLabel() const;
283 [[nodiscard]] QFont labelFont() const;
284 [[nodiscard]] QColor labelColor() const;
285 [[nodiscard]] bool showArrows() const;
286 [[nodiscard]] qreal arrowSize() const;
287 [[nodiscard]] qreal arrowWidth() const;
288 [[nodiscard]] QColor arrowColor() const;
289 [[nodiscard]] bool arrowOnlyWhenFlowPos() const;
290
291 void setOpacity(qreal v);
292 void setLineColor(const QColor &c);
293 void setLineWidth(qreal v);
294 void setDashPattern(Qt::PenStyle s);
295 void setOffsetPx(qreal v);
296 void setShowLabel(bool v);
297 void setLabelFont(const QFont &f);
298 void setLabelColor(const QColor &c);
299 void setShowArrows(bool v);
300 void setArrowSize(qreal v);
301 void setArrowWidth(qreal v);
302 void setArrowColor(const QColor &c);
303 void setArrowOnlyWhenFlowPos(bool v);
304
305 [[nodiscard]] Rule *rule() const { return m_rule; }
306
307signals:
308 void changed();
309
310private slots:
311 void onRendererReplaced();
312
313private:
314 Rule *m_rule = nullptr;
315};
316
317// ===========================================================================
318// Slice AN.2 — raster / mesh / glyph archetype adapters (2D results layer)
319// ===========================================================================
320//
321// Same pattern as the Point / Line / Polygon trio above: each subclass
322// declares only its 2D-style Q_PROPERTYs so QPropertyModel surfaces
323// exactly the editable knobs for that sublayer. Factory dispatch lives
324// in createFor (.cpp) and reads SymbolLayer.kind + the "mode" prop for
325// the two Contour archetypes (bands vs lines).
326//
327// Each adapter's properties + groups mirror the matching legacy style
328// class (MeshFillStyle / DepthColorRampStyle / ContourBandStyle /
329// IsolineStyle / MeshEdgeStyle / MeshNodeStyle / VelocityVectorStyle).
330// See docs/RENDERING_2D_RESULTS_STYLING_PLAN.md §3.
331
337{
338 Q_OBJECT
339
340 Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY changed)
341 Q_PROPERTY(QString attribute READ attribute WRITE setAttribute NOTIFY changed)
342 Q_PROPERTY(qreal minValue READ minValue WRITE setMinValue NOTIFY changed)
343 Q_PROPERTY(qreal maxValue READ maxValue WRITE setMaxValue NOTIFY changed)
344 Q_PROPERTY(QColor lowColor READ lowColor WRITE setLowColor NOTIFY changed)
345 Q_PROPERTY(QColor highColor READ highColor WRITE setHighColor NOTIFY changed)
346 Q_PROPERTY(QColor belowMinColor READ belowMinColor WRITE setBelowMinColor NOTIFY changed)
347 Q_PROPERTY(QColor aboveMaxColor READ aboveMaxColor WRITE setAboveMaxColor NOTIFY changed)
348 Q_PROPERTY(bool useLogScale READ useLogScale WRITE setUseLogScale NOTIFY changed)
349
350 Q_CLASSINFO("group:opacity", "Symbology")
351 Q_CLASSINFO("group:attribute", "Classification")
352 Q_CLASSINFO("group:minValue", "Range")
353 Q_CLASSINFO("group:maxValue", "Range")
354 Q_CLASSINFO("group:useLogScale", "Range")
355 Q_CLASSINFO("group:lowColor", "Ramp")
356 Q_CLASSINFO("group:highColor", "Ramp")
357 Q_CLASSINFO("group:belowMinColor", "Out of range")
358 Q_CLASSINFO("group:aboveMaxColor", "Out of range")
359
360public:
361 explicit RasterColorRampSymbolStyleAdapter(Rule *rule, QObject *parent = nullptr);
363
364 [[nodiscard]] qreal opacity() const;
365 [[nodiscard]] QString attribute() const;
366 [[nodiscard]] qreal minValue() const;
367 [[nodiscard]] qreal maxValue() const;
368 [[nodiscard]] QColor lowColor() const;
369 [[nodiscard]] QColor highColor() const;
370 [[nodiscard]] QColor belowMinColor() const;
371 [[nodiscard]] QColor aboveMaxColor() const;
372 [[nodiscard]] bool useLogScale() const;
373
374 void setOpacity(qreal v);
375 void setAttribute(const QString &v);
376 void setMinValue(qreal v);
377 void setMaxValue(qreal v);
378 void setLowColor(const QColor &c);
379 void setHighColor(const QColor &c);
380 void setBelowMinColor(const QColor &c);
381 void setAboveMaxColor(const QColor &c);
382 void setUseLogScale(bool v);
383
384 [[nodiscard]] Rule *rule() const { return m_rule; }
385
386signals:
387 void changed();
388
389private slots:
390 void onRendererReplaced();
391
392private:
393 Rule *m_rule = nullptr;
394};
395
400class HillshadeSymbolStyleAdapter : public QObject
401{
402 Q_OBJECT
403
404 Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY changed)
405 Q_PROPERTY(QColor fillColor READ fillColor WRITE setFillColor NOTIFY changed)
408
409 Q_CLASSINFO("group:opacity", "Symbology")
410 Q_CLASSINFO("group:fillColor", "Fill")
411 Q_CLASSINFO("group:useElevationRamp", "Fill")
412 Q_CLASSINFO("group:hillshadeStrength", "Shading")
413
414public:
415 explicit HillshadeSymbolStyleAdapter(Rule *rule, QObject *parent = nullptr);
417
418 [[nodiscard]] qreal opacity() const;
419 [[nodiscard]] QColor fillColor() const;
420 [[nodiscard]] qreal hillshadeStrength() const;
421 [[nodiscard]] bool useElevationRamp() const;
422
423 void setOpacity(qreal v);
424 void setFillColor(const QColor &c);
425 void setHillshadeStrength(qreal v);
426 void setUseElevationRamp(bool v);
427
428 [[nodiscard]] Rule *rule() const { return m_rule; }
429
430signals:
431 void changed();
432
433private slots:
434 void onRendererReplaced();
435
436private:
437 Rule *m_rule = nullptr;
438};
439
444class ContourBandSymbolStyleAdapter : public QObject
445{
446 Q_OBJECT
447
448 Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY changed)
449 Q_PROPERTY(QString attribute READ attribute WRITE setAttribute NOTIFY changed)
450 Q_PROPERTY(int bandCount READ bandCount WRITE setBandCount NOTIFY changed)
451 Q_PROPERTY(QColor lowColor READ lowColor WRITE setLowColor NOTIFY changed)
452 Q_PROPERTY(QColor highColor READ highColor WRITE setHighColor NOTIFY changed)
453 Q_PROPERTY(QColor belowMinColor READ belowMinColor WRITE setBelowMinColor NOTIFY changed)
454 Q_PROPERTY(QColor aboveMaxColor READ aboveMaxColor WRITE setAboveMaxColor NOTIFY changed)
455 Q_PROPERTY(bool smoothBands READ smoothBands WRITE setSmoothBands NOTIFY changed)
456
457 Q_CLASSINFO("group:opacity", "Symbology")
458 Q_CLASSINFO("group:attribute", "Classification")
459 Q_CLASSINFO("group:bandCount", "Classification")
460 Q_CLASSINFO("group:lowColor", "Ramp")
461 Q_CLASSINFO("group:highColor", "Ramp")
462 Q_CLASSINFO("group:belowMinColor", "Out of range")
463 Q_CLASSINFO("group:aboveMaxColor", "Out of range")
464 Q_CLASSINFO("group:smoothBands", "Rendering")
465
466public:
467 explicit ContourBandSymbolStyleAdapter(Rule *rule, QObject *parent = nullptr);
469
470 [[nodiscard]] qreal opacity() const;
471 [[nodiscard]] QString attribute() const;
472 [[nodiscard]] int bandCount() const;
473 [[nodiscard]] QColor lowColor() const;
474 [[nodiscard]] QColor highColor() const;
475 [[nodiscard]] QColor belowMinColor() const;
476 [[nodiscard]] QColor aboveMaxColor() const;
477 [[nodiscard]] bool smoothBands() const;
478
479 void setOpacity(qreal v);
480 void setAttribute(const QString &v);
481 void setBandCount(int v);
482 void setLowColor(const QColor &c);
483 void setHighColor(const QColor &c);
484 void setBelowMinColor(const QColor &c);
485 void setAboveMaxColor(const QColor &c);
486 void setSmoothBands(bool v);
487
488 [[nodiscard]] Rule *rule() const { return m_rule; }
489
490signals:
491 void changed();
492
493private slots:
494 void onRendererReplaced();
495
496private:
497 Rule *m_rule = nullptr;
498};
499
504class IsolineSymbolStyleAdapter : public QObject
505{
506 Q_OBJECT
507
508 Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY changed)
509 Q_PROPERTY(QString attribute READ attribute WRITE setAttribute NOTIFY changed)
510 Q_PROPERTY(int isoValueCount READ isoValueCount WRITE setIsoValueCount NOTIFY changed)
511 Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY changed)
512 Q_PROPERTY(qreal lineWidthPx READ lineWidthPx WRITE setLineWidthPx NOTIFY changed)
513 Q_PROPERTY(Qt::PenStyle dashPattern READ dashPattern WRITE setDashPattern NOTIFY changed)
514 Q_PROPERTY(bool labels READ labels WRITE setLabels NOTIFY changed)
515
516 Q_CLASSINFO("group:opacity", "Symbology")
517 Q_CLASSINFO("group:attribute", "Classification")
518 Q_CLASSINFO("group:isoValueCount", "Classification")
519 Q_CLASSINFO("group:color", "Symbology")
520 Q_CLASSINFO("group:lineWidthPx", "Symbology")
521 Q_CLASSINFO("group:dashPattern", "Symbology")
522 Q_CLASSINFO("group:labels", "Labels")
523
524public:
525 explicit IsolineSymbolStyleAdapter(Rule *rule, QObject *parent = nullptr);
527
528 [[nodiscard]] qreal opacity() const;
529 [[nodiscard]] QString attribute() const;
530 [[nodiscard]] int isoValueCount() const;
531 [[nodiscard]] QColor color() const;
532 [[nodiscard]] qreal lineWidthPx() const;
533 [[nodiscard]] Qt::PenStyle dashPattern() const;
534 [[nodiscard]] bool labels() const;
535
536 void setOpacity(qreal v);
537 void setAttribute(const QString &v);
538 void setIsoValueCount(int v);
539 void setColor(const QColor &c);
540 void setLineWidthPx(qreal v);
541 void setDashPattern(Qt::PenStyle s);
542 void setLabels(bool v);
543
544 [[nodiscard]] Rule *rule() const { return m_rule; }
545
546signals:
547 void changed();
548
549private slots:
550 void onRendererReplaced();
551
552private:
553 Rule *m_rule = nullptr;
554};
555
560class MeshEdgeSymbolStyleAdapter : public QObject
561{
562 Q_OBJECT
563
564 Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY changed)
565 Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY changed)
566 Q_PROPERTY(qreal lineWidthPx READ lineWidthPx WRITE setLineWidthPx NOTIFY changed)
567 Q_PROPERTY(Qt::PenStyle dashPattern READ dashPattern WRITE setDashPattern NOTIFY changed)
569 Q_PROPERTY(qreal slopeBreak READ slopeBreak WRITE setSlopeBreak NOTIFY changed)
570 Q_PROPERTY(qreal wideWidthPx READ wideWidthPx WRITE setWideWidthPx NOTIFY changed)
571 Q_PROPERTY(QColor wideColor READ wideColor WRITE setWideColor NOTIFY changed)
572
573 Q_CLASSINFO("group:opacity", "Symbology")
574 Q_CLASSINFO("group:color", "Symbology")
575 Q_CLASSINFO("group:lineWidthPx", "Symbology")
576 Q_CLASSINFO("group:dashPattern", "Symbology")
577 Q_CLASSINFO("group:useSlopeDrivenWidth", "Slope emphasis")
578 Q_CLASSINFO("group:slopeBreak", "Slope emphasis")
579 Q_CLASSINFO("group:wideWidthPx", "Slope emphasis")
580 Q_CLASSINFO("group:wideColor", "Slope emphasis")
581
582public:
583 explicit MeshEdgeSymbolStyleAdapter(Rule *rule, QObject *parent = nullptr);
585
586 [[nodiscard]] qreal opacity() const;
587 [[nodiscard]] QColor color() const;
588 [[nodiscard]] qreal lineWidthPx() const;
589 [[nodiscard]] Qt::PenStyle dashPattern() const;
590 [[nodiscard]] bool useSlopeDrivenWidth() const;
591 [[nodiscard]] qreal slopeBreak() const;
592 [[nodiscard]] qreal wideWidthPx() const;
593 [[nodiscard]] QColor wideColor() const;
594
595 void setOpacity(qreal v);
596 void setColor(const QColor &c);
597 void setLineWidthPx(qreal v);
598 void setDashPattern(Qt::PenStyle s);
599 void setUseSlopeDrivenWidth(bool v);
600 void setSlopeBreak(qreal v);
601 void setWideWidthPx(qreal v);
602 void setWideColor(const QColor &c);
603
604 [[nodiscard]] Rule *rule() const { return m_rule; }
605
606signals:
607 void changed();
608
609private slots:
610 void onRendererReplaced();
611
612private:
613 Rule *m_rule = nullptr;
614};
615
620class MeshNodeSymbolStyleAdapter : public QObject
621{
622 Q_OBJECT
623
624 Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY changed)
625 Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY changed)
626 Q_PROPERTY(qreal markerSizePx READ markerSizePx WRITE setMarkerSizePx NOTIFY changed)
627 Q_PROPERTY(OpenSWMM::Render::MarkerShape shape
628 READ shape WRITE setShape NOTIFY changed)
629 Q_PROPERTY(QColor outlineColor READ outlineColor WRITE setOutlineColor NOTIFY changed)
630 Q_PROPERTY(qreal outlineWidthPx READ outlineWidthPx WRITE setOutlineWidthPx NOTIFY changed)
632 Q_PROPERTY(QColor taggedColor READ taggedColor WRITE setTaggedColor NOTIFY changed)
633 Q_PROPERTY(qreal taggedSizePx READ taggedSizePx WRITE setTaggedSizePx NOTIFY changed)
634
635 Q_CLASSINFO("group:opacity", "Symbology")
636 Q_CLASSINFO("group:color", "Symbology")
637 Q_CLASSINFO("group:markerSizePx", "Symbology")
638 Q_CLASSINFO("group:shape", "Symbology")
639 Q_CLASSINFO("group:outlineColor", "Outline")
640 Q_CLASSINFO("group:outlineWidthPx", "Outline")
641 Q_CLASSINFO("group:highlightTagged", "Tagged vertices")
642 Q_CLASSINFO("group:taggedColor", "Tagged vertices")
643 Q_CLASSINFO("group:taggedSizePx", "Tagged vertices")
644
645public:
646 explicit MeshNodeSymbolStyleAdapter(Rule *rule, QObject *parent = nullptr);
648
649 [[nodiscard]] qreal opacity() const;
650 [[nodiscard]] QColor color() const;
651 [[nodiscard]] qreal markerSizePx() const;
652 [[nodiscard]] MarkerShape shape() const;
653 [[nodiscard]] QColor outlineColor() const;
654 [[nodiscard]] qreal outlineWidthPx() const;
655 [[nodiscard]] bool highlightTagged() const;
656 [[nodiscard]] QColor taggedColor() const;
657 [[nodiscard]] qreal taggedSizePx() const;
658
659 void setOpacity(qreal v);
660 void setColor(const QColor &c);
661 void setMarkerSizePx(qreal v);
662 void setShape(MarkerShape s);
663 void setOutlineColor(const QColor &c);
664 void setOutlineWidthPx(qreal v);
665 void setHighlightTagged(bool v);
666 void setTaggedColor(const QColor &c);
667 void setTaggedSizePx(qreal v);
668
669 [[nodiscard]] Rule *rule() const { return m_rule; }
670
671signals:
672 void changed();
673
674private slots:
675 void onRendererReplaced();
676
677private:
678 Rule *m_rule = nullptr;
679};
680
686{
687 Q_OBJECT
688
689 Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY changed)
693 Q_PROPERTY(qreal glyphSpacingPx READ glyphSpacingPx WRITE setGlyphSpacingPx NOTIFY changed)
694 Q_PROPERTY(qreal headSizePx READ headSizePx WRITE setHeadSizePx NOTIFY changed)
695 Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY changed)
696 Q_PROPERTY(qreal dryDepthCutoff READ dryDepthCutoff WRITE setDryDepthCutoff NOTIFY changed)
697
698 Q_CLASSINFO("group:opacity", "Symbology")
699 Q_CLASSINFO("group:glyphLengthScalePxPerMps", "Glyph")
700 Q_CLASSINFO("group:glyphLengthMinPx", "Glyph")
701 Q_CLASSINFO("group:glyphLengthMaxPx", "Glyph")
702 Q_CLASSINFO("group:headSizePx", "Glyph")
703 Q_CLASSINFO("group:color", "Glyph")
704 Q_CLASSINFO("group:glyphSpacingPx", "Placement")
705 Q_CLASSINFO("group:dryDepthCutoff", "Filtering")
706
707public:
708 explicit VelocityVectorSymbolStyleAdapter(Rule *rule, QObject *parent = nullptr);
710
711 [[nodiscard]] qreal opacity() const;
712 [[nodiscard]] qreal glyphLengthScalePxPerMps() const;
713 [[nodiscard]] qreal glyphLengthMinPx() const;
714 [[nodiscard]] qreal glyphLengthMaxPx() const;
715 [[nodiscard]] qreal glyphSpacingPx() const;
716 [[nodiscard]] qreal headSizePx() const;
717 [[nodiscard]] QColor color() const;
718 [[nodiscard]] qreal dryDepthCutoff() const;
719
720 void setOpacity(qreal v);
721 void setGlyphLengthScalePxPerMps(qreal v);
722 void setGlyphLengthMinPx(qreal v);
723 void setGlyphLengthMaxPx(qreal v);
724 void setGlyphSpacingPx(qreal v);
725 void setHeadSizePx(qreal v);
726 void setColor(const QColor &c);
727 void setDryDepthCutoff(qreal v);
728
729 [[nodiscard]] Rule *rule() const { return m_rule; }
730
731signals:
732 void changed();
733
734private slots:
735 void onRendererReplaced();
736
737private:
738 Rule *m_rule = nullptr;
739};
740
747class PolygonSymbolStyleAdapter : public QObject
748{
749 Q_OBJECT
750
751 Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY changed)
752 Q_PROPERTY(QColor fillColor READ fillColor WRITE setFillColor NOTIFY changed)
753 Q_PROPERTY(qreal fillOpacity READ fillOpacity WRITE setFillOpacity NOTIFY changed)
754 Q_PROPERTY(QColor outlineColor READ outlineColor WRITE setOutlineColor NOTIFY changed)
755 Q_PROPERTY(qreal outlineWidth READ outlineWidth WRITE setOutlineWidth NOTIFY changed)
756 Q_PROPERTY(bool showLabel READ showLabel WRITE setShowLabel NOTIFY changed)
757 Q_PROPERTY(QFont labelFont READ labelFont WRITE setLabelFont NOTIFY changed)
758 Q_PROPERTY(QColor labelColor READ labelColor WRITE setLabelColor NOTIFY changed)
759
760 Q_CLASSINFO("group:opacity", "Symbology")
761 Q_CLASSINFO("group:fillColor", "Fill")
762 Q_CLASSINFO("group:fillOpacity", "Fill")
763 Q_CLASSINFO("group:outlineColor", "Outline")
764 Q_CLASSINFO("group:outlineWidth", "Outline")
765 Q_CLASSINFO("group:showLabel", "Labels")
766 Q_CLASSINFO("group:labelFont", "Labels")
767 Q_CLASSINFO("group:labelColor", "Labels")
768
769public:
770 explicit PolygonSymbolStyleAdapter(Rule *rule, QObject *parent = nullptr);
772
773 [[nodiscard]] qreal opacity() const;
774 [[nodiscard]] QColor fillColor() const;
775 [[nodiscard]] qreal fillOpacity() const;
776 [[nodiscard]] QColor outlineColor() const;
777 [[nodiscard]] qreal outlineWidth() const;
778 [[nodiscard]] bool showLabel() const;
779 [[nodiscard]] QFont labelFont() const;
780 [[nodiscard]] QColor labelColor() const;
781
782 void setOpacity(qreal v);
783 void setFillColor(const QColor &c);
784 void setFillOpacity(qreal v);
785 void setOutlineColor(const QColor &c);
786 void setOutlineWidth(qreal v);
787 void setShowLabel(bool v);
788 void setLabelFont(const QFont &f);
789 void setLabelColor(const QColor &c);
790
791 [[nodiscard]] Rule *rule() const { return m_rule; }
792
793signals:
794 void changed();
795
796private slots:
797 void onRendererReplaced();
798
799private:
800 Rule *m_rule = nullptr;
801};
802
803} // namespace OpenSWMM::Render
804
805#endif // OPENSWMM_RENDER_SYMBOLSTYLEADAPTER_H
Filled-isoband surface — ContourBandStyle.
Definition symbolstyleadapter.h:445
QColor highColor
Definition symbolstyleadapter.h:452
void setAboveMaxColor(const QColor &c)
Definition symbolstyleadapter.cpp:953
QString attribute
Definition symbolstyleadapter.h:449
QColor lowColor
Definition symbolstyleadapter.h:451
void setBelowMinColor(const QColor &c)
Definition symbolstyleadapter.cpp:948
void setAttribute(const QString &v)
Definition symbolstyleadapter.cpp:928
QColor aboveMaxColor
Definition symbolstyleadapter.h:454
void setSmoothBands(bool v)
Definition symbolstyleadapter.cpp:958
int bandCount
Definition symbolstyleadapter.h:450
void setBandCount(int v)
Definition symbolstyleadapter.cpp:933
QColor belowMinColor
Definition symbolstyleadapter.h:453
qreal opacity
Definition symbolstyleadapter.h:448
Rule * rule() const
Definition symbolstyleadapter.h:488
bool smoothBands
Definition symbolstyleadapter.h:455
Mesh-fill / hillshade surface — MeshFillStyle.
Definition symbolstyleadapter.h:401
bool useElevationRamp
Definition symbolstyleadapter.h:407
QColor fillColor
Definition symbolstyleadapter.h:405
Rule * rule() const
Definition symbolstyleadapter.h:428
void setUseElevationRamp(bool v)
Definition symbolstyleadapter.cpp:919
qreal hillshadeStrength
Definition symbolstyleadapter.h:406
void setHillshadeStrength(qreal v)
Definition symbolstyleadapter.cpp:914
void setFillColor(const QColor &c)
Definition symbolstyleadapter.cpp:909
qreal opacity
Definition symbolstyleadapter.h:404
Contour-line surface — IsolineStyle.
Definition symbolstyleadapter.h:505
void setColor(const QColor &c)
Definition symbolstyleadapter.cpp:977
Qt::PenStyle dashPattern
Definition symbolstyleadapter.h:513
bool labels
Definition symbolstyleadapter.h:514
QString attribute
Definition symbolstyleadapter.h:509
void setIsoValueCount(int v)
Definition symbolstyleadapter.cpp:972
void setDashPattern(Qt::PenStyle s)
Definition symbolstyleadapter.cpp:988
Rule * rule() const
Definition symbolstyleadapter.h:544
qreal lineWidthPx
Definition symbolstyleadapter.h:512
void setLineWidthPx(qreal v)
Definition symbolstyleadapter.cpp:982
int isoValueCount
Definition symbolstyleadapter.h:510
QColor color
Definition symbolstyleadapter.h:511
qreal opacity
Definition symbolstyleadapter.h:508
void setLabels(bool v)
Definition symbolstyleadapter.cpp:993
void setAttribute(const QString &v)
Definition symbolstyleadapter.cpp:967
Single-Symbol panel surface for line archetypes — Conduits / Pumps / Orifices / Weirs / Outlets on th...
Definition symbolstyleadapter.h:241
QColor arrowColor
Definition symbolstyleadapter.h:255
void setArrowColor(const QColor &c)
Definition symbolstyleadapter.cpp:708
Qt::PenStyle dashPattern
Definition symbolstyleadapter.h:247
void setArrowSize(qreal v)
Definition symbolstyleadapter.cpp:687
void setShowArrows(bool v)
Definition symbolstyleadapter.cpp:677
void setArrowOnlyWhenFlowPos(bool v)
Definition symbolstyleadapter.cpp:718
void setLineColor(const QColor &c)
Definition symbolstyleadapter.cpp:606
void setOpacity(qreal v)
Definition symbolstyleadapter.cpp:589
void setLineWidth(qreal v)
Definition symbolstyleadapter.cpp:616
qreal offsetPx
Definition symbolstyleadapter.h:248
QColor labelColor
Definition symbolstyleadapter.h:251
QFont labelFont
Definition symbolstyleadapter.h:250
qreal opacity
Definition symbolstyleadapter.h:244
void setShowLabel(bool v)
Definition symbolstyleadapter.cpp:647
qreal arrowWidth
Definition symbolstyleadapter.h:254
bool arrowOnlyWhenFlowPos
Definition symbolstyleadapter.h:257
void setDashPattern(Qt::PenStyle s)
Definition symbolstyleadapter.cpp:627
void setArrowWidth(qreal v)
Definition symbolstyleadapter.cpp:697
void setLabelColor(const QColor &c)
Definition symbolstyleadapter.cpp:667
bool showArrows
Definition symbolstyleadapter.h:252
void setOffsetPx(qreal v)
Definition symbolstyleadapter.cpp:637
Rule * rule() const
Definition symbolstyleadapter.h:305
qreal arrowSize
Definition symbolstyleadapter.h:253
bool showLabel
Definition symbolstyleadapter.h:249
QColor lineColor
Definition symbolstyleadapter.h:245
qreal lineWidth
Definition symbolstyleadapter.h:246
void setLabelFont(const QFont &f)
Definition symbolstyleadapter.cpp:657
Mesh-wireframe surface — MeshEdgeStyle.
Definition symbolstyleadapter.h:561
void setUseSlopeDrivenWidth(bool v)
Definition symbolstyleadapter.cpp:1018
qreal slopeBreak
Definition symbolstyleadapter.h:569
qreal lineWidthPx
Definition symbolstyleadapter.h:566
qreal wideWidthPx
Definition symbolstyleadapter.h:570
qreal opacity
Definition symbolstyleadapter.h:564
void setWideWidthPx(qreal v)
Definition symbolstyleadapter.cpp:1028
Qt::PenStyle dashPattern
Definition symbolstyleadapter.h:567
void setLineWidthPx(qreal v)
Definition symbolstyleadapter.cpp:1007
QColor color
Definition symbolstyleadapter.h:565
QColor wideColor
Definition symbolstyleadapter.h:571
void setSlopeBreak(qreal v)
Definition symbolstyleadapter.cpp:1023
void setDashPattern(Qt::PenStyle s)
Definition symbolstyleadapter.cpp:1013
void setColor(const QColor &c)
Definition symbolstyleadapter.cpp:1002
bool useSlopeDrivenWidth
Definition symbolstyleadapter.h:568
void setWideColor(const QColor &c)
Definition symbolstyleadapter.cpp:1033
Rule * rule() const
Definition symbolstyleadapter.h:604
Mesh-vertex marker surface — MeshNodeStyle.
Definition symbolstyleadapter.h:621
void setTaggedSizePx(qreal v)
Definition symbolstyleadapter.cpp:1078
bool highlightTagged
Definition symbolstyleadapter.h:631
void setOutlineColor(const QColor &c)
Definition symbolstyleadapter.cpp:1058
void setShape(MarkerShape s)
Definition symbolstyleadapter.cpp:1053
qreal opacity
Definition symbolstyleadapter.h:624
void setColor(const QColor &c)
Definition symbolstyleadapter.cpp:1042
qreal taggedSizePx
Definition symbolstyleadapter.h:633
Rule * rule() const
Definition symbolstyleadapter.h:669
QColor color
Definition symbolstyleadapter.h:625
QColor taggedColor
Definition symbolstyleadapter.h:632
void setMarkerSizePx(qreal v)
Definition symbolstyleadapter.cpp:1047
qreal markerSizePx
Definition symbolstyleadapter.h:626
void setHighlightTagged(bool v)
Definition symbolstyleadapter.cpp:1068
void setTaggedColor(const QColor &c)
Definition symbolstyleadapter.cpp:1073
void setOutlineWidthPx(qreal v)
Definition symbolstyleadapter.cpp:1063
qreal outlineWidthPx
Definition symbolstyleadapter.h:630
QColor outlineColor
Definition symbolstyleadapter.h:629
OpenSWMM::Render::MarkerShape shape
Definition symbolstyleadapter.h:628
Single-Symbol panel surface for point (marker) archetypes — Junctions / Outfalls / Storage / Dividers...
Definition symbolstyleadapter.h:174
qreal markerSize
Definition symbolstyleadapter.h:180
qreal opacity
Definition symbolstyleadapter.h:177
QColor labelColor
Definition symbolstyleadapter.h:186
void setLabelColor(const QColor &c)
Definition symbolstyleadapter.cpp:561
void setOutlineColor(const QColor &c)
Definition symbolstyleadapter.cpp:521
OpenSWMM::Render::MarkerShape markerShape
Definition symbolstyleadapter.h:179
void setMarkerSize(qreal v)
Definition symbolstyleadapter.cpp:498
void setLabelFont(const QFont &f)
Definition symbolstyleadapter.cpp:551
QColor fillColor
Definition symbolstyleadapter.h:181
void setOpacity(qreal v)
Definition symbolstyleadapter.cpp:468
void setFillColor(const QColor &c)
Definition symbolstyleadapter.cpp:511
QFont labelFont
Definition symbolstyleadapter.h:185
qreal outlineWidth
Definition symbolstyleadapter.h:183
void setMarkerShape(MarkerShape v)
Definition symbolstyleadapter.cpp:488
Rule * rule() const
Definition symbolstyleadapter.h:222
void setOutlineWidth(qreal v)
Definition symbolstyleadapter.cpp:531
void setShowLabel(bool v)
Definition symbolstyleadapter.cpp:541
QColor outlineColor
Definition symbolstyleadapter.h:182
bool showLabel
Definition symbolstyleadapter.h:184
Single-Symbol panel surface for polygon archetypes — Subcatchments on the SWMM model layer and the po...
Definition symbolstyleadapter.h:748
void setOutlineWidth(qreal v)
Definition symbolstyleadapter.cpp:795
qreal fillOpacity
Definition symbolstyleadapter.h:753
void setLabelColor(const QColor &c)
Definition symbolstyleadapter.cpp:825
void setFillColor(const QColor &c)
Definition symbolstyleadapter.cpp:764
void setOpacity(qreal v)
Definition symbolstyleadapter.cpp:746
bool showLabel
Definition symbolstyleadapter.h:756
qreal opacity
Definition symbolstyleadapter.h:751
void setFillOpacity(qreal v)
Definition symbolstyleadapter.cpp:774
void setLabelFont(const QFont &f)
Definition symbolstyleadapter.cpp:815
QFont labelFont
Definition symbolstyleadapter.h:757
Rule * rule() const
Definition symbolstyleadapter.h:791
qreal outlineWidth
Definition symbolstyleadapter.h:755
QColor labelColor
Definition symbolstyleadapter.h:758
QColor outlineColor
Definition symbolstyleadapter.h:754
void setOutlineColor(const QColor &c)
Definition symbolstyleadapter.cpp:785
QColor fillColor
Definition symbolstyleadapter.h:752
void setShowLabel(bool v)
Definition symbolstyleadapter.cpp:805
Depth color-ramp surface — DepthColorRampStyle.
Definition symbolstyleadapter.h:337
QColor belowMinColor
Definition symbolstyleadapter.h:346
qreal minValue
Definition symbolstyleadapter.h:342
qreal maxValue
Definition symbolstyleadapter.h:343
QColor aboveMaxColor
Definition symbolstyleadapter.h:347
void setBelowMinColor(const QColor &c)
Definition symbolstyleadapter.cpp:890
QString attribute
Definition symbolstyleadapter.h:341
Rule * rule() const
Definition symbolstyleadapter.h:384
void setAboveMaxColor(const QColor &c)
Definition symbolstyleadapter.cpp:895
void setMinValue(qreal v)
Definition symbolstyleadapter.cpp:870
void setUseLogScale(bool v)
Definition symbolstyleadapter.cpp:900
void setMaxValue(qreal v)
Definition symbolstyleadapter.cpp:875
qreal opacity
Definition symbolstyleadapter.h:340
bool useLogScale
Definition symbolstyleadapter.h:348
QColor highColor
Definition symbolstyleadapter.h:345
void setAttribute(const QString &v)
Definition symbolstyleadapter.cpp:865
QColor lowColor
Definition symbolstyleadapter.h:344
One layer-scope styled aspect — name + renderer + filter + scale.
Definition rule.h:51
Definition symbolstyleadapter.h:54
void setFillColor(const QColor &c)
Definition symbolstyleadapter.cpp:335
void setOpacity(qreal v)
Definition symbolstyleadapter.cpp:292
static QObject * createFor(Rule *rule, QObject *parent=nullptr)
Slice SS.1 factory. Returns a freshly-allocated archetype-aware adapter (Point / Line / Polygon subcl...
Definition symbolstyleadapter.cpp:402
qreal strokeWidth
Stroke / outline width in pixels. Reads "width" first (lines), falls back to "outlineWidth" (markers)...
Definition symbolstyleadapter.h:73
qreal markerSize
Marker size in pixels. No-op for non-marker symbol layers.
Definition symbolstyleadapter.h:76
void setMarkerSize(qreal v)
Definition symbolstyleadapter.cpp:381
qreal opacity
Overall symbol opacity in [0, 1].
Definition symbolstyleadapter.h:58
OpenSWMM::Render::MarkerShape markerShape
Marker shape (Z.4 canonical enum). Typed as MarkerShape so QPropertyModel surfaces it through a Q_ENU...
Definition symbolstyleadapter.h:84
Rule * rule() const
Definition symbolstyleadapter.h:126
void setStrokeColor(const QColor &c)
Definition symbolstyleadapter.cpp:349
void setStrokeWidth(qreal v)
Definition symbolstyleadapter.cpp:370
QColor strokeColor
Stroke colour ("color" prop on lines, "outlineColor" on markers / fills). The setter writes both keys...
Definition symbolstyleadapter.h:68
void setMarkerShape(MarkerShape v)
Definition symbolstyleadapter.cpp:393
QColor fillColor
Fill colour of the first SymbolLayer's "fillColor" prop (markers, polygons). Invalid when the layer d...
Definition symbolstyleadapter.h:63
2D velocity-arrow surface — VelocityVectorStyle.
Definition symbolstyleadapter.h:686
void setGlyphSpacingPx(qreal v)
Definition symbolstyleadapter.cpp:1102
Rule * rule() const
Definition symbolstyleadapter.h:729
qreal glyphSpacingPx
Definition symbolstyleadapter.h:693
qreal headSizePx
Definition symbolstyleadapter.h:694
qreal glyphLengthScalePxPerMps
Definition symbolstyleadapter.h:690
void setGlyphLengthMinPx(qreal v)
Definition symbolstyleadapter.cpp:1092
void setColor(const QColor &c)
Definition symbolstyleadapter.cpp:1113
void setGlyphLengthMaxPx(qreal v)
Definition symbolstyleadapter.cpp:1097
qreal glyphLengthMaxPx
Definition symbolstyleadapter.h:692
void setDryDepthCutoff(qreal v)
Definition symbolstyleadapter.cpp:1118
qreal glyphLengthMinPx
Definition symbolstyleadapter.h:691
qreal dryDepthCutoff
Definition symbolstyleadapter.h:696
QColor color
Definition symbolstyleadapter.h:695
void setGlyphLengthScalePxPerMps(qreal v)
Definition symbolstyleadapter.cpp:1087
void setHeadSizePx(qreal v)
Definition symbolstyleadapter.cpp:1107
qreal opacity
Definition symbolstyleadapter.h:689
double s
Scene px per model length unit.
Definition inletdrawingview.cpp:82
Canonical 19-shape enum used by Marker Symbol Layers (Slice Z.4; extended set appended later).
const char * key
Definition meshcellparams.cpp:24
Definition gisrasterlayer.h:40
MarkerShape
13 canonical marker shapes the Rule Model's Marker Symbol Layer supports (per RENDERING_RULE_MODEL_PL...
Definition markershape.h:53
Definition contourchain.h:23
QVector< int > v
pool vertex indices
Definition pslgminsize.cpp:159
QVector< int > parent
union-find
Definition pslgminsize.cpp:176
std::function< void(const QColor &)> setLowColor
Definition swmm2dresultsstylepanel.cpp:67
std::function< void(const QColor &)> setHighColor
Definition swmm2dresultsstylepanel.cpp:69