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