#pragma once #include "AbstractMesh.h" #include #include class Edge; class AbstractFace; using EdgePtr = std::unique_ptr; using AbstractFacePtr = std::unique_ptr; using VecEdges = std::vector; using VecFaces = std::vector; class FaceMesh : public AbstractMesh { public: FaceMesh() = default; ~FaceMesh(); virtual std::unique_ptr copy() const = 0; void populate(VecNodes& nodes, VecEdges& edges, VecFaces& faces); std::vector getFaceNodeIds() const; std::vector getEdgeNodeIds() const; void addConstantFaceVectorAttribute(const std::string& tag, const std::vector& values); std::vector > getFaceVectorAttributes(const std::string& tag); void merge(std::unique_ptr mesh); const VecFaces& getFaces() const; protected: void resetConnectivity(); void resetIds(); void replaceIfOverlapping(FaceMesh* mesh, Node* node) const; void replaceIfOverlapping(FaceMesh* mesh, Edge* edge) const; VecEdges mEdges; VecFaces mFaces; };