#pragma once #include "modelFactoryMesh.h" #include "persistence.h" #include "shape.h" #include #include #include class Style { public: using StyleStack = std::vector; using Colour = glm::vec3; using ColourAlpha = glm::vec4; 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 {}; } ColourAlpha colour {}; protected: bool persist(Persistence::PersistenceStore & store); };