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
ifeaturerenderer.h File Reference

The single seam every layer paint path goes through. More...

#include "render/featureref.h"
#include "render/legendsymbolitem.h"
#include "render/symbolstyle.h"
#include <QColor>
#include <QJsonObject>
#include <QList>
#include <QString>
#include <QVariantMap>
#include <memory>
Include dependency graph for ifeaturerenderer.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  OpenSWMM::Render::IFeatureRenderer
 Abstract interface — every vector layer's paint path goes here. More...
 

Namespaces

namespace  OpenSWMM
 
namespace  OpenSWMM::Render
 

Enumerations

enum class  OpenSWMM::Render::ClassEditKind {
  OpenSWMM::Render::Color ,
  OpenSWMM::Render::Size ,
  OpenSWMM::Render::Width ,
  OpenSWMM::Render::Symbol
}
 Categories of per-class mutation that a renderer may support. More...
 

Detailed Description

The single seam every layer paint path goes through.

Author
Caleb Buahin caleb.nosp@m..bua.nosp@m.hin@g.nosp@m.mail.nosp@m..com
Date
2026
License\n GPL-3.0-or-later
    IFeatureRenderer is the load-bearing abstraction introduced by
    GUI_IMPLEMENTATION_PLAN.md §J.2. Every vector / point / line /
    polygon layer owns one IFeatureRenderer and asks it
    `symbolFor(feature, attrs)` to obtain the SymbolStyle to paint.

    Concrete renderers (sub-phase 8.13.6.2):
      - SingleSymbolRenderer  — one SymbolStyle for all features.
      - GraduatedRenderer     — classify a numeric attribute into bins.
      - CategorizedRenderer   — distinct symbol per unique enum value.
      - RuleBasedRenderer     — first-match rule list with expressions.

    The legend pipeline (§J.5) walks `legendSymbolItems()` to build
    a legend that is structurally guaranteed to match what the map
    draws — there is no second code path for "what does this layer
    look like".

    JSON round-trip (`toJson` / `fromJson`) is mandatory so styles
    survive `.oswp` save/load and `.swmm-style.json` import/export
    (Slice BB Phase 8.6.13).

    `clone()` returns a deep copy so layers can hand out renderer
    snapshots to map presets (Slice CJ.2) without aliasing.

    Sub-phase 8.13.6.1 — interface + types only. No concrete
    renderers, no Layer integration, no paint-loop refactor. Those
    arrive in subsequent sub-phases under the same Phase 8.13.6.