view 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
line wrap: on
line source
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
10 def epilogue
11 self << "M63 P0\nM5\nM2\n"
12 end
14 PRIORITY = [:g,:x,:y,:z,:w,:i,:j,:k,:m,:p,:s]
16 def nc codes
17 codes = codes.dup
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
27 codes.delete :laser
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
42 def g0 codes
43 nc({:g => 0}.merge codes)
44 end
45 alias_method :jog, :g0
47 def g1 codes
48 nc({:g => 1}.merge codes)
49 end
50 alias_method :move, :g1
52 def g2 codes
53 nc codes.merge(:g => 2)
54 end
55 alias_method :turn_cw, :g2
57 def g3 codes
58 nc codes.merge(:g => 3)
59 end
60 alias_method :turn_ccw, :g3
62 def comment txt
63 txt = txt.gsub(/\(\)/,'')
64 self << "(#{txt})\n"
65 end
67 def puts *a
68 self.puts *a
69 end
70 end
71 end