// shape.hpp - Sistema de formes vectorials // © 2026 JailDesigner #pragma once #include #include #include #include "core/types.hpp" namespace Graphics { // Tipo de primitiva dins de una shape enum class PrimitiveType : std::uint8_t { POLYLINE, // Secuencia de points connectats LINE // Línia individual (2 points) }; // Primitiva individual (polyline o line) struct ShapePrimitive { PrimitiveType type; std::vector points; // 2+ points per polyline, exactament 2 per line }; // Clase Shape - representa una shape vectorial carregada desde .shp class Shape { public: // Constructors Shape() = default; explicit Shape(const std::string& filepath); // Carregar shape desde file .shp auto load(const std::string& filepath) -> bool; // Parsejar shape desde buffer de memòria (per al sistema de recursos) auto parseFile(const std::string& contingut) -> bool; // Getters [[nodiscard]] auto get_primitives() const -> const std::vector& { return primitives_; } [[nodiscard]] auto getCenter() const -> const Vec2& { return center_; } [[nodiscard]] auto get_escala_defecte() const -> float { return escala_defecte_; } [[nodiscard]] auto isValid() const -> bool { return !primitives_.empty(); } // Info de depuració [[nodiscard]] auto getName() const -> const std::string& { return nom_; } [[nodiscard]] auto getNumPrimitives() const -> size_t { return primitives_.size(); } private: std::vector primitives_; Vec2 center_; // Centro/origin de la shape float escala_defecte_{1.0F}; // Escala per defecte (normalment 1.0). Inicializada para // que el ctor por defecto no deje el campo indeterminado. std::string nom_; // Nom de la shape (per depuració) // Helpers privats per parsejar [[nodiscard]] auto trim(const std::string& str) const -> std::string; [[nodiscard]] auto starts_with(const std::string& str, const std::string& prefix) const -> bool; [[nodiscard]] auto extract_value(const std::string& line) const -> std::string; void parse_center(const std::string& value); [[nodiscard]] auto parse_points(const std::string& str) const -> std::vector; }; } // namespace Graphics