/// C++ LMPacker port /// https://github.com/MihailRis/LMPacker #ifndef LMPACKER_HPP_ #define LMPACKER_HPP_ #include #include #include #include struct rectangle { unsigned int idx; int x; int y; int width; int height; int extX = 0; int extY = 0; rectangle(unsigned int idx, int x, int y, int width, int height) : idx(idx), x(x), y(y), width(width), height(height) { } }; class LMPacker { public: using matrix_row = std::unique_ptr; using matrix_ptr = std::unique_ptr; private: std::vector rects; std::vector placed; uint32_t width = 0; uint32_t height = 0; matrix_ptr matrix = nullptr; uint32_t mbit = 0; void cleanup(); bool place(rectangle* rect, uint32_t vstep); public: LMPacker(const uint32_t sizes[], size_t length); virtual ~LMPacker(); bool buildCompact(uint32_t width, uint32_t height, uint16_t extension) { return build(width, height, extension, 0, 1); } bool buildFast(uint32_t width, uint32_t height, uint16_t extension) { return build(width, height, extension, 1, 2); } bool build( uint32_t width, uint32_t height, uint16_t extension, uint32_t mbit, uint32_t vstep ); std::vector getResult() { return rects; } }; #endif // LMPACKER_HPP_