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