rect_packer.h
1/*
2** ClanLib SDK
3** Copyright (c) 1997-2020 The ClanLib Team
4**
5** This software is provided 'as-is', without any express or implied
6** warranty. In no event will the authors be held liable for any damages
7** arising from the use of this software.
8**
9** Permission is granted to anyone to use this software for any purpose,
10** including commercial applications, and to alter it and redistribute it
11** freely, subject to the following restrictions:
12**
13** 1. The origin of this software must not be misrepresented; you must not
14** claim that you wrote the original software. If you use this software
15** in a product, an acknowledgment in the product documentation would be
16** appreciated but is not required.
17** 2. Altered source versions must be plainly marked as such, and must not be
18** misrepresented as being the original software.
19** 3. This notice may not be removed or altered from any source distribution.
20**
21** Note: Some of the libraries ClanLib may link to may have additional
22** requirements or restrictions.
23**
24** File Author(s):
25**
26** Kenneth Gangstoe
27*/
28
29#pragma once
30
31#include <memory>
32#include "rect.h"
33
34namespace clan
35{
38
39 class Size;
40 class RectPacker_Impl;
41
44 {
45 public:
53
61
64
66 RectPacker(const Size &max_group_size, AllocationPolicy policy = create_new_group);
67
69
71 bool is_null() const { return !impl; }
72
74 void throw_if_null() const;
75
78
81
84
86 int get_rect_count(unsigned int group_index = 0) const;
87
89 int get_group_count() const;
90
93
95 AllocatedRect add(const Size &size);
96
97 private:
98 std::shared_ptr<RectPacker_Impl> impl;
99 };
100
102}
Generic rect packer class. Implements an algorithm to pack rects into groups efficiently.
Definition rect_packer.h:44
AllocationPolicy get_allocation_policy() const
Returns the allocation policy.
int get_group_count() const
Returns the amount of rects used by group.
Size get_max_group_size() const
Returns the max group size.
bool is_null() const
Returns true if this object is invalid.
Definition rect_packer.h:71
int get_total_rect_count() const
Returns the total amount of rects.
AllocatedRect add(const Size &size)
Allocate space for another rect.
AllocationPolicy
Allocation policy.
Definition rect_packer.h:48
@ search_previous_groups
Definition rect_packer.h:50
@ fail_if_full
Definition rect_packer.h:51
@ create_new_group
Definition rect_packer.h:49
void throw_if_null() const
Throw an exception if this object is invalid.
RectPacker(const Size &max_group_size, AllocationPolicy policy=create_new_group)
Constructs a rect group.
RectPacker()
Constructs a null instance.
void set_allocation_policy(AllocationPolicy policy)
Set the allocation policy.
int get_rect_count(unsigned int group_index=0) const
Returns the amount of rects in a group.
2D (left,top,right,bottom) rectangle structure - Integer
Definition rect.h:446
2D (width,height) size structure - Integer
Definition size.h:176
Definition clanapp.h:36
Definition rect_packer.h:55
int group_index
Definition rect_packer.h:58
Rect rect
Definition rect_packer.h:59
AllocatedRect(int group_index, Rect rect)
Definition rect_packer.h:57