box_packer 1.2.1 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4659a59306f377ffb56826c4066f6a8cd59a3ed6
4
- data.tar.gz: 1f789104af76b44e14a8aedada8cc4e1a8a7a9ff
3
+ metadata.gz: 6674a542f5f429666b9e47203e8ccc70dc84959c
4
+ data.tar.gz: 7f85e16669af7c897a7ec754f0e1a72d05abbef5
5
5
  SHA512:
6
- metadata.gz: 3d245edfff6dc2ba6af12e65dcab58215eb2b9ae21bb71b953d8f98c6421f237f699487f46ae946a3ea89a631cdb92c43f1c4fef5e7556748c45dedaba3e18e0
7
- data.tar.gz: 9751c392ce1c08783d1c265b28677e6e53dca4bf0a1f5475c38d80af3b5610b65bf6d18ed5c68be52613b3195bd69085c36e77ed0615af68cd677497854c9b13
6
+ metadata.gz: fb646bc2431f217984f17203585dbe37eeaffc71e6537e223b201eba3f79dc68b084af5a812c95c508b7d931ce24c392e4c226665ae21b72ac0c82f17b95777a
7
+ data.tar.gz: 4c0da12dd4b7dede43af119a0c00c291ad406ab994ae02359ee87ff303b2dfb6083679230a356c86edd0fa872d6610813f7cb3ff7bc0cb7fc5c4b78bc86bb64f
data/README.md CHANGED
@@ -1,115 +1,115 @@
1
- BoxPacker
2
- =========
3
-
4
- [![Gem Version](https://badge.fury.io/rb/box_packer.svg)](http://badge.fury.io/rb/box_packer)
5
-
6
- A heuristic first-fit 3D bin packing algorithm with optional weight and bin limits.
7
-
8
- Installation
9
- ------------
10
-
11
- Install gem:
12
-
13
- ``` console
14
- gem install 'box_packer'
15
- ```
16
-
17
- Or add to gemfile:
18
-
19
- ``` ruby
20
- gem 'box_packer'
21
- ```
22
-
23
- Usage
24
- -----
25
-
26
- ``` ruby
27
- require 'box_packer'
28
-
29
- BoxPacker.container [3, 6, 7] do
30
- add_item [1,3,5]
31
- add_item [4,3,5]
32
- add_item [3,5,5]
33
- pack! # returns 2
34
-
35
- puts packed_successfully # true
36
- puts packings.count # 2
37
- puts packings[0].include? items[1] # false
38
- puts packings[0][1].position # (5,0,0)
39
-
40
- puts self # |Container| 7x6x3
41
- # | Packing| Remaining Volume:36
42
- # | Item| 5x5x3 (0,0,0) Volume:75
43
- # | Item| 1x5x3 (5,0,0) Volume:15
44
- # | Packing| Remaining Volume:66
45
- # | Item| 5x4x3 (0,0,0) Volume:60
46
- end
47
- ```
48
-
49
- With optional labels, weights, quantity and packings limit:
50
-
51
- ``` ruby
52
- BoxPacker.container [15, 20, 13], label: 'Parcel', weight_limit: 50, packings_limit: 3 do
53
- add_item [2, 3, 5], label: 'Shoes', weight: 47, quantity: 2
54
- add_item [3, 3, 1], label: 'Watch', weight: 24
55
- add_item [1, 1, 4], label: 'Bag', weight: 7
56
- pack! # returns 2
57
-
58
- puts self # |Container| Parcel 20x15x13 Weight Limit:50 Packings Limit:3
59
- # | Packing| Remaining Volume:3870 Remaining Weight:3
60
- # | Item| Shoes 5x3x2 (0,0,0) Volume:30 Weight:47
61
- # | Packing| Remaining Volume:3870 Remaining Weight:3
62
- # | Item| Shoes 5x3x2 (0,0,0) Volume:30 Weight:47
63
- # | Packing| Remaining Volume:3887 Remaining Weight:19
64
- # | Item| Watch 3x3x1 (0,0,0) Volume:9 Weight:24
65
- # | Item| Bag 4x1x1 (3,0,0) Volume:4 Weight:7
66
- end
67
- ```
68
-
69
- Alternative builder API:
70
-
71
- ``` ruby
72
- BoxPacker.builder do |b|
73
- c1 = b.container [10,5,11]
74
- c2 = b.container [17,23,14]
75
-
76
- c1.items = [b.item([1,1,4]), b.item([4,6,7]), b.item([5,8,10])]
77
- c2.items = c1.items
78
-
79
- c1.pack! # 2
80
- c2.pack! # 1
81
-
82
- puts c1 # |Container| 11x10x5
83
- # | Packing| Remaining Volume:146
84
- # | Item| 10x8x5 (0,0,0) Volume:400
85
- # | Item| 4x1x1 (0,8,0) Volume:4
86
- # | Packing| Remaining Volume:382
87
- # | Item| 7x6x4 (10,0,0) Volume:168
88
-
89
- puts c2 # |Container| 23x17x14
90
- # | Packing| Remaining Volume:4902
91
- # | Item| 10x8x5 (0,0,0) Volume:400
92
- # | Item| 7x6x4 (10,0,0) Volume:168
93
- # | Item| 4x1x1 (17,0,0) Volume:4
94
-
95
- end
96
- ```
97
-
98
- Export SVG
99
- ----------
100
-
101
- ``` ruby
102
- BoxPacker.container [3, 4, 2] do
103
- add_item [1,3,2], label: 'Bag', colour: 'red'
104
- add_item [3,3,1], label: 'Hat', colour: 'blue'
105
- add_item [1,2,2], label: 'Shoes', colour: 'green'
106
- add_item [3,1,1], label: 'Slipper', colour: 'purple'
107
- add_item [2,1,1], label: 'Dragon', colour: 'orange'
108
- pack!
109
- draw!('examples/example', scale_longest_side_to: 500, margin: 15)
110
- end
111
- ```
112
-
113
- Output:
114
-
1
+ BoxPacker
2
+ =========
3
+
4
+ [![Gem Version](https://badge.fury.io/rb/box_packer.svg)](http://badge.fury.io/rb/box_packer)
5
+
6
+ A heuristic first-fit 3D bin packing algorithm with optional weight and bin limits.
7
+
8
+ Installation
9
+ ------------
10
+
11
+ Install gem:
12
+
13
+ ``` console
14
+ gem install 'box_packer'
15
+ ```
16
+
17
+ Or add to gemfile:
18
+
19
+ ``` ruby
20
+ gem 'box_packer'
21
+ ```
22
+
23
+ Usage
24
+ -----
25
+
26
+ ``` ruby
27
+ require 'box_packer'
28
+
29
+ BoxPacker.container [3, 6, 7] do
30
+ add_item [1,3,5]
31
+ add_item [4,3,5]
32
+ add_item [3,5,5]
33
+ pack! # returns 2
34
+
35
+ puts packed_successfully # true
36
+ puts packings.count # 2
37
+ puts packings[0].include? items[1] # false
38
+ puts packings[0][1].position # (5,0,0)
39
+
40
+ puts self # |Container| 7x6x3
41
+ # | Packing| Remaining Volume:36
42
+ # | Item| 5x5x3 (0,0,0) Volume:75
43
+ # | Item| 1x5x3 (5,0,0) Volume:15
44
+ # | Packing| Remaining Volume:66
45
+ # | Item| 5x4x3 (0,0,0) Volume:60
46
+ end
47
+ ```
48
+
49
+ With optional labels, weights, quantity and packings limit:
50
+
51
+ ``` ruby
52
+ BoxPacker.container [15, 20, 13], label: 'Parcel', weight_limit: 50, packings_limit: 3 do
53
+ add_item [2, 3, 5], label: 'Shoes', weight: 47, quantity: 2
54
+ add_item [3, 3, 1], label: 'Watch', weight: 24
55
+ add_item [1, 1, 4], label: 'Bag', weight: 7
56
+ pack! # returns 2
57
+
58
+ puts self # |Container| Parcel 20x15x13 Weight Limit:50 Packings Limit:3
59
+ # | Packing| Remaining Volume:3870 Remaining Weight:3
60
+ # | Item| Shoes 5x3x2 (0,0,0) Volume:30 Weight:47
61
+ # | Packing| Remaining Volume:3870 Remaining Weight:3
62
+ # | Item| Shoes 5x3x2 (0,0,0) Volume:30 Weight:47
63
+ # | Packing| Remaining Volume:3887 Remaining Weight:19
64
+ # | Item| Watch 3x3x1 (0,0,0) Volume:9 Weight:24
65
+ # | Item| Bag 4x1x1 (3,0,0) Volume:4 Weight:7
66
+ end
67
+ ```
68
+
69
+ Alternative builder API:
70
+
71
+ ``` ruby
72
+ BoxPacker.builder do |b|
73
+ c1 = b.container [10,5,11]
74
+ c2 = b.container [17,23,14]
75
+
76
+ c1.items = [b.item([1,1,4]), b.item([4,6,7]), b.item([5,8,10])]
77
+ c2.items = c1.items
78
+
79
+ c1.pack! # 2
80
+ c2.pack! # 1
81
+
82
+ puts c1 # |Container| 11x10x5
83
+ # | Packing| Remaining Volume:146
84
+ # | Item| 10x8x5 (0,0,0) Volume:400
85
+ # | Item| 4x1x1 (0,8,0) Volume:4
86
+ # | Packing| Remaining Volume:382
87
+ # | Item| 7x6x4 (10,0,0) Volume:168
88
+
89
+ puts c2 # |Container| 23x17x14
90
+ # | Packing| Remaining Volume:4902
91
+ # | Item| 10x8x5 (0,0,0) Volume:400
92
+ # | Item| 7x6x4 (10,0,0) Volume:168
93
+ # | Item| 4x1x1 (17,0,0) Volume:4
94
+
95
+ end
96
+ ```
97
+
98
+ Export SVG
99
+ ----------
100
+
101
+ ``` ruby
102
+ BoxPacker.container [3, 4, 2] do
103
+ add_item [1,3,2], label: 'Bag', colour: 'red'
104
+ add_item [3,3,1], label: 'Hat', colour: 'blue'
105
+ add_item [1,2,2], label: 'Shoes', colour: 'green'
106
+ add_item [3,1,1], label: 'Slipper', colour: 'purple'
107
+ add_item [2,1,1], label: 'Dragon', colour: 'orange'
108
+ pack!
109
+ draw!('examples/example', scale_longest_side_to: 500, margin: 15)
110
+ end
111
+ ```
112
+
113
+ Output:
114
+
115
115
  ![SVG Output](https://rawgit.com/mushishi78/box_packer/master/examples/example1.svg)
@@ -22,7 +22,7 @@ module BoxPacker
22
22
  private
23
23
 
24
24
  def sub_boxes_args(item)
25
- [[width + height + depth - item.width, position: position + item.width],
25
+ [[width + height + depth - item.width, position: position + item.width],
26
26
  [item.width + height + depth - item.height, position: position + item.height],
27
27
  [item.width + item.height + depth - item.depth, position: position + item.depth]]
28
28
  end
@@ -55,7 +55,7 @@ module BoxPacker
55
55
  s << " Weight Limit:#{weight_limit}" if weight_limit
56
56
  s << " Packings Limit:#{packings_limit}" if packings_limit
57
57
  s << "\n"
58
- s << packed_successfully ? packings.map(&:to_s).join : '| | Did Not Pack!'
58
+ s << (packed_successfully ? packings.map(&:to_s).join : '| | Did Not Pack!')
59
59
  end
60
60
 
61
61
  def draw!(filename, opts = {})
@@ -10,7 +10,7 @@ module BoxPacker
10
10
  @colour = opts[:colour] || '%06x' % (rand * 0xffffff)
11
11
  end
12
12
 
13
- def fit_into?(box)
13
+ def rotate_to_fit_into(box)
14
14
  each_rotation do |rotation|
15
15
  if box.dimensions >= rotation
16
16
  @dimensions = rotation
@@ -25,7 +25,7 @@ module BoxPacker
25
25
  possible_items = possible_items.dup
26
26
  until possible_items.empty?
27
27
  item = possible_items.shift
28
- next unless item.fit_into?(box)
28
+ next unless item.rotate_to_fit_into(box)
29
29
 
30
30
  pack_item!(item, possible_items, box)
31
31
  break if possible_items.empty?
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: box_packer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Max White
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-08 00:00:00.000000000 Z
11
+ date: 2015-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: attire
@@ -82,7 +82,7 @@ files:
82
82
  - lib/box_packer/packing.rb
83
83
  - lib/box_packer/position.rb
84
84
  - lib/box_packer/svg_exporter.rb
85
- homepage:
85
+ homepage: https://github.com/mushishi78/box_packer
86
86
  licenses:
87
87
  - MIT
88
88
  metadata: {}