laser-cutter 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/laser-cutter/cli/opt_parser.rb +1 -1
- data/lib/laser-cutter/configuration.rb +16 -12
- data/lib/laser-cutter/notching/edge.rb +9 -14
- data/lib/laser-cutter/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b027c579de8cded3aba462a120045ed6ec685930
|
4
|
+
data.tar.gz: 76e13dddecbae505385b1064cb29198c7a0a5d41
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 843bd8781e86f9da4d6bee52529f625d7b04f177c1a3bf50847b33a51bcb938ce6310faf10b1f0bee57de4d21ee36427515ddfc1529e0c933f21ca268e842091
|
7
|
+
data.tar.gz: 337ae8d3ebe98ce3dc4380ef65a81c9172eb75ae7f799f60db35f228b2bd6713b525c6898c67dbff00da8de8ecd8adac8cff0d14e9d2d22c23e0598744f40294
|
@@ -61,7 +61,7 @@ Examples:
|
|
61
61
|
opts.on("-d", "--depth DEPTH", "Internal depth of the box") { |value| options.depth= value }
|
62
62
|
opts.on("-t", "--thickness THICKNESS", "Thickness of the box material") { |value| options.thickness = value }
|
63
63
|
opts.on("-n", "--notch NOTCH", "Optional notch length (aka \"tab width\"), guide only") { |value| options.notch = value }
|
64
|
-
opts.on("-k", "--kerf KERF", "Kerf - cut width (default is
|
64
|
+
opts.on("-k", "--kerf KERF", "Kerf - cut width (default is #{Laser::Cutter::Configuration::UNIT_SPECIFIC_DEFAULTS['in'][:kerf]}in)") { |value| options.kerf = value }
|
65
65
|
opts.separator ""
|
66
66
|
opts.on("-m", "--margin MARGIN", "Margins from the edge of the document") { |value| options.margin = value }
|
67
67
|
opts.on("-p", "--padding PADDING", "Space between the boxes on the page") { |value| options.padding = value }
|
@@ -4,10 +4,18 @@ require 'pdf/core/page_geometry'
|
|
4
4
|
|
5
5
|
module Laser
|
6
6
|
module Cutter
|
7
|
-
class MissingOption < RuntimeError
|
8
|
-
end
|
9
|
-
|
7
|
+
class MissingOption < RuntimeError; end
|
8
|
+
class ZeroValueNotAllowed < MissingOption; end
|
9
|
+
|
10
|
+
class UnitsConverter
|
11
|
+
def self.mm2in value
|
12
|
+
0.039370079 * value
|
13
|
+
end
|
14
|
+
def self.in2mm value
|
15
|
+
25.4 * value
|
16
|
+
end
|
10
17
|
end
|
18
|
+
|
11
19
|
class Configuration < Hashie::Mash
|
12
20
|
DEFAULTS = {
|
13
21
|
units: 'in',
|
@@ -16,23 +24,19 @@ module Laser
|
|
16
24
|
}
|
17
25
|
|
18
26
|
UNIT_SPECIFIC_DEFAULTS = {
|
19
|
-
'mm' => {
|
20
|
-
margin: 3,
|
21
|
-
padding: 2,
|
22
|
-
stroke: 0.0254,
|
23
|
-
kerf: 0.1778
|
24
|
-
},
|
25
27
|
'in' => {
|
26
|
-
kerf: 0.
|
28
|
+
kerf: 0.0024, # smallest kerf for thin material, usually it's more than that.
|
27
29
|
margin: 0.125,
|
28
30
|
padding: 0.1,
|
29
31
|
stroke: 0.001,
|
30
32
|
}
|
31
33
|
}
|
32
34
|
|
35
|
+
UNIT_SPECIFIC_DEFAULTS['mm'] = UNIT_SPECIFIC_DEFAULTS['in'].map{|k, v| [k, UnitsConverter.in2mm(v)] }.to_h
|
36
|
+
|
33
37
|
SIZE_REGEXP = /[\d\.]+x[\d\.]+x[\d\.]+\/[\d\.]+(\/[\d\.]+)?/
|
34
38
|
|
35
|
-
FLOATS
|
39
|
+
FLOATS = %w(width height depth thickness notch margin padding stroke kerf)
|
36
40
|
NON_ZERO = %w(width height depth thickness stroke)
|
37
41
|
REQUIRED = %w(width height depth thickness notch file)
|
38
42
|
|
@@ -67,7 +71,7 @@ module Laser
|
|
67
71
|
|
68
72
|
def change_units(new_units)
|
69
73
|
return if (self.units.eql?(new_units) || !UNIT_SPECIFIC_DEFAULTS.keys.include?(new_units))
|
70
|
-
k = (self.units == 'in') ?
|
74
|
+
k = (self.units == 'in') ? UnitsConverter.in2mm(1.0) : UnitsConverter.mm2in(1.0)
|
71
75
|
FLOATS.each do |field|
|
72
76
|
next if self.send(field.to_sym).nil?
|
73
77
|
self.send("#{field}=".to_sym, (self.send(field.to_sym) * k).round(5))
|
@@ -38,23 +38,18 @@ module Laser
|
|
38
38
|
|
39
39
|
def adjust_for_kerf!
|
40
40
|
if kerf?
|
41
|
-
|
42
|
-
|
43
|
-
p2 = inside.p2.plus(v2 * k)
|
44
|
-
self.inside = Geometry::Line.new(p1, p2)
|
45
|
-
|
46
|
-
p1 = outside.p1.plus(v1 * k)
|
47
|
-
p2 = outside.p2.plus(v2 * k)
|
48
|
-
self.outside = Geometry::Line.new(p1, p2)
|
49
|
-
|
50
|
-
inside.relocate!
|
51
|
-
outside.relocate!
|
52
|
-
# note – we have not increased the length of the sides to compensate
|
53
|
-
# for kerf – we simply shifted both lines. We'll compenensate for this
|
54
|
-
# in notch width calculations later, and also corner box inclusion.
|
41
|
+
self.inside = move_line_for_kerf(inside)
|
42
|
+
self.outside = move_line_for_kerf(outside)
|
55
43
|
end
|
56
44
|
end
|
57
45
|
|
46
|
+
def move_line_for_kerf line
|
47
|
+
k = kerf / 2.0
|
48
|
+
p1 = line.p1.plus(v1 * k)
|
49
|
+
p2 = line.p2.plus(v2 * k)
|
50
|
+
Geometry::Line.new(p1, p2).relocate!
|
51
|
+
end
|
52
|
+
|
58
53
|
def kerf?
|
59
54
|
self.kerf > 0.0
|
60
55
|
end
|
data/lib/laser-cutter/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: laser-cutter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Konstantin Gredeskoul
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-11-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: prawn
|