diff --git a/src/MeshBuilder.h b/src/MeshBuilder.h index 0e8d07a6a..a8fe42832 100644 --- a/src/MeshBuilder.h +++ b/src/MeshBuilder.h @@ -32,6 +32,7 @@ namespace Magnum { namespace MeshTools { template class AbstractTool; + class AbstractIndexTool; } /** @@ -46,6 +47,7 @@ MeshTools namespace. */ template class MeshBuilder { friend class MeshTools::AbstractTool; + friend class MeshTools::AbstractIndexTool; public: diff --git a/src/MeshTools/AbstractTool.h b/src/MeshTools/AbstractTool.h index b2a650cd1..70eb67d82 100644 --- a/src/MeshTools/AbstractTool.h +++ b/src/MeshTools/AbstractTool.h @@ -33,7 +33,8 @@ namespace MeshTools { /** * @brief Base class for mesh tools * - * Provides access to internals of MeshBuilder instance for subclasses. + * Provides access to internals of MeshBuilder instance for subclasses. See + * also AbstractIndexTool. */ template class AbstractTool { public: @@ -49,6 +50,25 @@ template class AbstractTool { std::vector& indices; /**< @brief Builder indices */ }; +/** + * @brief Base class for mesh tools operating only on indices + * + * Provides access only to index array and vertex count. See also + * AbstractTool. + */ +class AbstractIndexTool { + public: + /** + * @brief Constructor + * @param builder %Mesh builder to operate on + */ + template inline AbstractIndexTool(MeshBuilder& builder): indices(builder._indices), vertexCount(builder.vertexCount()) {} + + protected: + std::vector& indices; /**< @brief Builder indices */ + const unsigned int vertexCount; /**< @brief Count of builder vertices */ +}; + }} #endif