#pragma once #include "modelFactoryMesh.h" #include "persistence.h" #include "shape.h" #include #include #include class Style { public: using StyleStack = std::vector; using EffectiveColour = std::optional>; void applyStyle(ModelFactoryMesh &, const StyleStack & parents, const Shape::CreatedFaces &) const; void applyStyle(ModelFactoryMesh &, const StyleStack & parents, const ModelFactoryMesh::FaceHandle &) const; template static std::optional> getProperty(const StyleStack & parents, T Style::*member, auto && test) { if (const auto itr = std::find_if(parents.rbegin(), parents.rend(), std::forward(test)); itr != parents.rend()) { return (*itr)->*member; } return {}; } static EffectiveColour getColour(const StyleStack & parents); RGBA colour {}; std::optional smooth; std::string texture; std::string textureRotation; // Multiples of 90deg, no int/enum support protected: bool persist(Persistence::PersistenceStore & store); void applyStyle(ModelFactoryMesh &, const ModelFactoryMesh::FaceHandle &, EffectiveColour) const; };