Mercurial > lasercutter
comparison graster/graster/lib/graster/gcode_file.rb @ 11:f952052e37b7
trying a fix.
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Tue, 24 Aug 2010 19:06:45 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
10:ef7dbbd6452c | 11:f952052e37b7 |
---|---|
1 class Graster | |
2 class GcodeFile < File | |
3 def preamble opts | |
4 @laser = false | |
5 self << "M63 P0\nG61\nF#{opts[:feed] || 60}\n" | |
6 self << "M101\n" if opts[:mask] | |
7 self << "M3 S1\n" | |
8 end | |
9 | |
10 def epilogue | |
11 self << "M63 P0\nM5\nM2\n" | |
12 end | |
13 | |
14 PRIORITY = [:g,:x,:y,:z,:w,:i,:j,:k,:m,:p,:s] | |
15 | |
16 def nc codes | |
17 codes = codes.dup | |
18 | |
19 if codes[:laser] == true && !@laser | |
20 @laser = true | |
21 codes.merge!(:m => 62, :p => 0) | |
22 elsif codes[:laser] == false && @laser | |
23 @laser = false | |
24 codes.merge!(:m => 63, :p => 0) | |
25 end | |
26 | |
27 codes.delete :laser | |
28 | |
29 self << codes.sort {|(k1,v1),(k2,v2)| | |
30 PRIORITY.index(k1) <=> PRIORITY.index(k2) | |
31 }.map {|k,v| | |
32 if v.is_a? Integer | |
33 "#{k.to_s.upcase}#{v}" | |
34 elsif v.is_a? Float | |
35 "#{k.to_s.upcase}%0.3f" % v | |
36 else | |
37 k.to_s.upcase | |
38 end | |
39 }.join(' ') + "\n" | |
40 end | |
41 | |
42 def g0 codes | |
43 nc({:g => 0}.merge codes) | |
44 end | |
45 alias_method :jog, :g0 | |
46 | |
47 def g1 codes | |
48 nc({:g => 1}.merge codes) | |
49 end | |
50 alias_method :move, :g1 | |
51 | |
52 def g2 codes | |
53 nc codes.merge(:g => 2) | |
54 end | |
55 alias_method :turn_cw, :g2 | |
56 | |
57 def g3 codes | |
58 nc codes.merge(:g => 3) | |
59 end | |
60 alias_method :turn_ccw, :g3 | |
61 | |
62 def comment txt | |
63 txt = txt.gsub(/\(\)/,'') | |
64 self << "(#{txt})\n" | |
65 end | |
66 | |
67 def puts *a | |
68 self.puts *a | |
69 end | |
70 end | |
71 end |