diff --git a/src/Primitives/Cube.cpp b/src/Primitives/Cube.cpp index 1d5e721e3..51d5a4c02 100644 --- a/src/Primitives/Cube.cpp +++ b/src/Primitives/Cube.cpp @@ -16,76 +16,98 @@ #include "Cube.h" #include "Math/Point3D.h" +#include "Trade/MeshData3D.h" namespace Magnum { namespace Primitives { -Cube::Cube(): MeshData3D(Mesh::Primitive::Triangles, new std::vector{ - 0, 1, 2, 0, 2, 3, /* +Z */ - 4, 5, 6, 4, 6, 7, /* +X */ - 8, 9, 10, 8, 10, 11, /* +Y */ - 12, 13, 14, 12, 14, 15, /* -Z */ - 16, 17, 18, 16, 18, 19, /* -Y */ - 20, 21, 22, 20, 22, 23 /* -X */ -}, {new std::vector{ - {-1.0f, -1.0f, 1.0f}, - { 1.0f, -1.0f, 1.0f}, - { 1.0f, 1.0f, 1.0f}, /* +Z */ - {-1.0f, 1.0f, 1.0f}, - - { 1.0f, -1.0f, 1.0f}, - { 1.0f, -1.0f, -1.0f}, - { 1.0f, 1.0f, -1.0f}, /* +X */ - { 1.0f, 1.0f, 1.0f}, - - {-1.0f, 1.0f, 1.0f}, - { 1.0f, 1.0f, 1.0f}, - { 1.0f, 1.0f, -1.0f}, /* +Y */ - {-1.0f, 1.0f, -1.0f}, - - { 1.0f, -1.0f, -1.0f}, - {-1.0f, -1.0f, -1.0f}, - {-1.0f, 1.0f, -1.0f}, /* -Z */ - { 1.0f, 1.0f, -1.0f}, - - {-1.0f, -1.0f, -1.0f}, - { 1.0f, -1.0f, -1.0f}, - { 1.0f, -1.0f, 1.0f}, /* -Y */ - {-1.0f, -1.0f, 1.0f}, - - {-1.0f, -1.0f, -1.0f}, - {-1.0f, -1.0f, 1.0f}, - {-1.0f, 1.0f, 1.0f}, /* -X */ - {-1.0f, 1.0f, -1.0f} -}}, {new std::vector{ - { 0.0f, 0.0f, 1.0f}, - { 0.0f, 0.0f, 1.0f}, - { 0.0f, 0.0f, 1.0f}, /* +Z */ - { 0.0f, 0.0f, 1.0f}, - - { 1.0f, 0.0f, 0.0f}, - { 1.0f, 0.0f, 0.0f}, - { 1.0f, 0.0f, 0.0f}, /* +X */ - { 1.0f, 0.0f, 0.0f}, - - { 0.0f, 1.0f, 0.0f}, - { 0.0f, 1.0f, 0.0f}, - { 0.0f, 1.0f, 0.0f}, /* +Y */ - { 0.0f, 1.0f, 0.0f}, - - { 0.0f, 0.0f, -1.0f}, - { 0.0f, 0.0f, -1.0f}, - { 0.0f, 0.0f, -1.0f}, /* -Z */ - { 0.0f, 0.0f, -1.0f}, - - { 0.0f, -1.0f, 0.0f}, - { 0.0f, -1.0f, 0.0f}, - { 0.0f, -1.0f, 0.0f}, /* -Y */ - { 0.0f, -1.0f, 0.0f}, - - {-1.0f, 0.0f, 0.0f}, - {-1.0f, 0.0f, 0.0f}, - {-1.0f, 0.0f, 0.0f}, /* -X */ - {-1.0f, 0.0f, 0.0f} -}}, {}) {} +Trade::MeshData3D Cube::solid() { + return Trade::MeshData3D(Mesh::Primitive::Triangles, new std::vector{ + 0, 1, 2, 0, 2, 3, /* +Z */ + 4, 5, 6, 4, 6, 7, /* +X */ + 8, 9, 10, 8, 10, 11, /* +Y */ + 12, 13, 14, 12, 14, 15, /* -Z */ + 16, 17, 18, 16, 18, 19, /* -Y */ + 20, 21, 22, 20, 22, 23 /* -X */ + }, {new std::vector{ + {-1.0f, -1.0f, 1.0f}, + { 1.0f, -1.0f, 1.0f}, + { 1.0f, 1.0f, 1.0f}, /* +Z */ + {-1.0f, 1.0f, 1.0f}, + + { 1.0f, -1.0f, 1.0f}, + { 1.0f, -1.0f, -1.0f}, + { 1.0f, 1.0f, -1.0f}, /* +X */ + { 1.0f, 1.0f, 1.0f}, + + {-1.0f, 1.0f, 1.0f}, + { 1.0f, 1.0f, 1.0f}, + { 1.0f, 1.0f, -1.0f}, /* +Y */ + {-1.0f, 1.0f, -1.0f}, + + { 1.0f, -1.0f, -1.0f}, + {-1.0f, -1.0f, -1.0f}, + {-1.0f, 1.0f, -1.0f}, /* -Z */ + { 1.0f, 1.0f, -1.0f}, + + {-1.0f, -1.0f, -1.0f}, + { 1.0f, -1.0f, -1.0f}, + { 1.0f, -1.0f, 1.0f}, /* -Y */ + {-1.0f, -1.0f, 1.0f}, + + {-1.0f, -1.0f, -1.0f}, + {-1.0f, -1.0f, 1.0f}, + {-1.0f, 1.0f, 1.0f}, /* -X */ + {-1.0f, 1.0f, -1.0f} + }}, {new std::vector{ + { 0.0f, 0.0f, 1.0f}, + { 0.0f, 0.0f, 1.0f}, + { 0.0f, 0.0f, 1.0f}, /* +Z */ + { 0.0f, 0.0f, 1.0f}, + + { 1.0f, 0.0f, 0.0f}, + { 1.0f, 0.0f, 0.0f}, + { 1.0f, 0.0f, 0.0f}, /* +X */ + { 1.0f, 0.0f, 0.0f}, + + { 0.0f, 1.0f, 0.0f}, + { 0.0f, 1.0f, 0.0f}, + { 0.0f, 1.0f, 0.0f}, /* +Y */ + { 0.0f, 1.0f, 0.0f}, + + { 0.0f, 0.0f, -1.0f}, + { 0.0f, 0.0f, -1.0f}, + { 0.0f, 0.0f, -1.0f}, /* -Z */ + { 0.0f, 0.0f, -1.0f}, + + { 0.0f, -1.0f, 0.0f}, + { 0.0f, -1.0f, 0.0f}, + { 0.0f, -1.0f, 0.0f}, /* -Y */ + { 0.0f, -1.0f, 0.0f}, + + {-1.0f, 0.0f, 0.0f}, + {-1.0f, 0.0f, 0.0f}, + {-1.0f, 0.0f, 0.0f}, /* -X */ + {-1.0f, 0.0f, 0.0f} + }}, {}); +} + +Trade::MeshData3D Cube::wireframe() { + return Trade::MeshData3D(Mesh::Primitive::Lines, new std::vector{ + 0, 1, 1, 2, 2, 3, 3, 0, /* +Z */ + 4, 5, 5, 6, 6, 7, 7, 4, /* -Z */ + 1, 5, 2, 6, /* +X */ + 0, 4, 3, 7 /* -X */ + }, {new std::vector{ + {-1.0f, -1.0f, 1.0f}, + { 1.0f, -1.0f, 1.0f}, + { 1.0f, 1.0f, 1.0f}, + {-1.0f, 1.0f, 1.0f}, + + {-1.0f, -1.0f, -1.0f}, + { 1.0f, -1.0f, -1.0f}, + { 1.0f, 1.0f, -1.0f}, + {-1.0f, 1.0f, -1.0f} + }}, {}, {}); +} }} diff --git a/src/Primitives/Cube.h b/src/Primitives/Cube.h index b62606c16..734471e52 100644 --- a/src/Primitives/Cube.h +++ b/src/Primitives/Cube.h @@ -19,19 +19,32 @@ * @brief Class Magnum::Primitives::Cube */ -#include "Trade/MeshData3D.h" +#include "Trade/Trade.h" namespace Magnum { namespace Primitives { /** @brief 3D cube primitive -2x2x2 cube. Indexed triangle mesh with flat normals. +2x2x2 cube. */ -class Cube: public Trade::MeshData3D { +class Cube { public: - /** @brief Constructor */ - explicit Cube(); + /** + * @brief Solid cube + * + * Indexed triangle mesh with flat normals. + */ + static Trade::MeshData3D solid(); + + /** + * @brief Wireframe cube + * + * Indexed line mesh. + */ + static Trade::MeshData3D wireframe(); + + Cube() = delete; }; }}