Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- import sys, os
- BASE = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), ".."))
- libdir = os.path.join(BASE, "lib", "python")
- datadir = os.path.join(BASE, "share", "linuxcnc")
- sys.path.insert(0, libdir)
- xmlname = os.path.join(datadir,"gui7.glade")
- sys.path.append("/usr/share/pyshared/gui7")
- sys.path.insert(0, "/usr/share/pyshared/gui7")
- # import libraries
- import pygtk
- pygtk.require("2.0")
- import gtk
- import linuxcnc, hal
- import gladevcp.makepins
- import subprocess
- import gobject
- print 'libdir'
- print libdir
- print 'system path'
- print sys.path
- print 'end system path'
- from gui7 import status
- # main class
- class gui7(object):
- def __init__(self, inifile):
- self.cnc = linuxcnc
- self.stat = self.cnc.stat()
- self.c = self.cnc.command()
- self.ec = self.cnc.error_channel()
- self.builder = gtk.Builder()
- self.builder.add_from_file(xmlname)
- self.builder.connect_signals(self)
- self.window = self.builder.get_object("base_window")
- self.statusbar = self.builder.get_object("statusbar")
- self.tooltable = self.builder.get_object("treeview1")
- self.halcomp = hal.component("gui7")
- self.panel = gladevcp.makepins.GladePanel(self.halcomp, xmlname, self.builder, None)
- self.halcomp.ready()
- self.window.show()
- self.tcl_dir = os.environ["LINUXCNC_TCL_DIR"] + "/bin/"
- self.ini_file = os.environ["INI_FILE_NAME"]
- self.jog_type = self.cnc.JOG_CONTINUOUS
- self.jog_distance = 0
- gobject.timeout_add(100, self.periodic)
- def on_menu_halshow_activate(self, widget, data=None):
- print "Menu Hal Show"
- subprocess.Popen([self.tcl_dir + "halshow.tcl", "-- -ini " + self.ini_file])
- def periodic(self): # fetch status items and update screen
- # poll the error channel
- self.error_status = self.ec.poll()
- if self.error_status:
- self.error_kind, self.error_text = self.error_status
- if self.error_kind in (linuxcnc.NML_ERROR, linuxcnc.OPERATOR_ERROR):
- self.error_type = "Error: "
- else:
- self.error_type = "Info: "
- self.message_id = self.statusbar.push(0, self.error_type + self.error_text)
- # poll the status channel
- self.stat.poll()
- dict = {0:'None', 1:'MDI',2:'Auto', 3:'Manual'}
- data = self.stat.task_mode
- text = dict[data]
- self.builder.get_object("task_mode").set_text(text)
- return True
- # jogging
- def on_jog_cont_toggled(self, widget, data=None):
- if widget.get_active():
- self.jog_type = self.cnc.JOG_CONTINUOUS
- def on_jog_incr1_toggled(self, widget, data=None):
- if widget.get_active():
- self.jog_type = self.cnc.JOG_INCREMENT
- self.jog_distance = 0.1
- def on_jog_incr2_toggled(self, widget, data=None):
- if widget.get_active():
- self.jog_type = self.cnc.JOG_INCREMENT
- self.jog_distance = 0.01
- def on_jog_incr3_toggled(self, widget, data=None):
- if widget.get_active():
- self.jog_type = self.cnc.JOG_INCREMENT
- self.jog_distance = 0.001
- def on_jog_x_plus_pressed(self, widget, data=None):
- if self.builder.get_object("jog_speed").get_value() > 0:
- self.c.mode(self.cnc.MODE_MANUAL)
- self.c.wait_complete()
- self.jog_velocity = self.builder.get_object("jog_speed").get_value() / 60
- if self.jog_type == self.cnc.JOG_CONTINUOUS:
- self.c.jog(self.jog_type, 0, self.jog_velocity)
- else:
- self.c.jog(self.jog_type, 0, self.jog_velocity, self.jog_distance)
- def on_jog_x_plus_released(self, widget, data=None):
- if self.jog_type == self.cnc.JOG_CONTINUOUS:
- self.c.jog(self.cnc.JOG_STOP, 0)
- def on_jog_x_minus_pressed(self, widget, data=None):
- if self.builder.get_object("jog_speed").get_value() > 0:
- self.c.mode(self.cnc.MODE_MANUAL)
- self.c.wait_complete()
- self.jog_velocity = -self.builder.get_object("jog_speed").get_value() / 60
- if self.jog_type == self.cnc.JOG_CONTINUOUS:
- self.c.jog(self.jog_type, 0, self.jog_velocity)
- else:
- self.c.jog(self.jog_type, 0, self.jog_velocity, self.jog_distance)
- def on_jog_x_minus_released(self, widget, data=None):
- if self.jog_type == self.cnc.JOG_CONTINUOUS:
- self.c.jog(self.cnc.JOG_STOP, 0)
- def on_jog_y_plus_pressed(self, widget, data=None):
- if self.builder.get_object("jog_speed").get_value() > 0:
- self.c.mode(self.cnc.MODE_MANUAL)
- self.c.wait_complete()
- self.jog_velocity = self.builder.get_object("jog_speed").get_value() / 60
- if self.jog_type == self.cnc.JOG_CONTINUOUS:
- self.c.jog(self.jog_type, 1, self.jog_velocity)
- else:
- self.c.jog(self.jog_type, 1, self.jog_velocity, self.jog_distance)
- def on_jog_y_plus_released(self, widget, data=None):
- if self.jog_type == self.cnc.JOG_CONTINUOUS:
- self.c.jog(self.cnc.JOG_STOP, 1)
- def on_jog_y_minus_pressed(self, widget, data=None):
- if self.builder.get_object("jog_speed").get_value() > 0:
- self.c.mode(self.cnc.MODE_MANUAL)
- self.c.wait_complete()
- self.jog_velocity = -self.builder.get_object("jog_speed").get_value() / 60
- if self.jog_type == self.cnc.JOG_CONTINUOUS:
- self.c.jog(self.jog_type, 1, self.jog_velocity)
- else:
- self.c.jog(self.jog_type, 1, self.jog_velocity, self.jog_distance)
- def on_jog_y_minus_released(self, widget, data=None):
- if self.jog_type == self.cnc.JOG_CONTINUOUS:
- self.c.jog(self.cnc.JOG_STOP, 1)
- def on_jog_z_plus_pressed(self, widget, data=None):
- if self.builder.get_object("jog_speed").get_value() > 0:
- self.c.mode(self.cnc.MODE_MANUAL)
- self.c.wait_complete()
- self.jog_velocity = self.builder.get_object("jog_speed").get_value() / 60
- if self.jog_type == self.cnc.JOG_CONTINUOUS:
- self.c.jog(self.jog_type, 2, self.jog_velocity)
- else:
- self.c.jog(self.jog_type, 2, self.jog_velocity, self.jog_distance)
- def on_jog_z_plus_released(self, widget, data=None):
- if self.jog_type == self.cnc.JOG_CONTINUOUS:
- self.c.jog(self.cnc.JOG_STOP, 2)
- def on_jog_z_minus_pressed(self, widget, data=None):
- if self.builder.get_object("jog_speed").get_value() > 0:
- self.c.mode(self.cnc.MODE_MANUAL)
- self.c.wait_complete()
- self.jog_velocity = -self.builder.get_object("jog_speed").get_value() / 60
- if self.jog_type == self.cnc.JOG_CONTINUOUS:
- self.c.jog(self.jog_type, 2, self.jog_velocity)
- else:
- self.c.jog(self.jog_type, 2, self.jog_velocity, self.jog_distance)
- def on_jog_z_minus_released(self, widget, data=None):
- if self.jog_type == self.cnc.JOG_CONTINUOUS:
- self.c.jog(self.cnc.JOG_STOP, 2)
- # homing
- def ok_to_home(self):
- self.stat.poll()
- return not self.stat.estop and self.stat.enabled and (self.stat.interp_state == self.cnc.INTERP_IDLE)
- def on_home_x_clicked(self, widget, data=None):
- if self.stat.axis[0]['homed']:
- print "Axis X Homed"
- else:
- if self.ok_to_home():
- self.c.mode(self.cnc.MODE_MANUAL)
- self.c.wait_complete()
- self.c.home(0)
- self.c.wait_complete()
- def on_home_y_clicked(self, widget, data=None):
- if self.stat.axis[1]['homed']:
- print "Axis Z Homed"
- else:
- if self.ok_to_home():
- self.c.mode(self.cnc.MODE_MANUAL)
- self.c.wait_complete()
- self.c.home(1)
- self.c.wait_complete()
- def on_home_z_clicked(self, widget, data=None):
- if self.stat.axis[2]['homed']:
- print "Axis Z Homed"
- else:
- if self.ok_to_home():
- self.c.mode(self.cnc.MODE_MANUAL)
- self.c.wait_complete()
- self.c.home(2)
- self.c.wait_complete()
- # mdi commands
- def ok_to_mdi(self):
- self.stat.poll()
- return not self.stat.estop and self.stat.enabled and self.stat.homed and (self.stat.interp_state == self.cnc.INTERP_IDLE)
- def on_offset_x_clicked(self, widget, data=None):
- print 'offset x'
- if self.ok_to_mdi():
- self.c.mode(self.cnc.MODE_MDI)
- self.c.wait_complete()
- self.c.mdi("G10 L20 P1 X0")
- def on_offset_y_clicked(self, widget, data=None):
- print 'offset y'
- if self.ok_to_mdi():
- self.c.mode(self.cnc.MODE_MDI)
- self.c.wait_complete()
- self.c.mdi("G10 L20 P1 Y0")
- def on_offset_z_clicked(self, widget, data=None):
- print 'offset z'
- if self.ok_to_mdi():
- self.c.mode(self.cnc.MODE_MDI)
- self.c.wait_complete()
- self.c.mdi("G10 L20 P1 Z0")
- def on_base_window_destroy(self, widget, data=None):
- print "quit with cancel"
- gtk.main_quit()
- def on_menu_quit_activate(self, menuitem, data=None):
- print "quit from menu"
- gtk.main_quit()
- def postgui(self):
- inifile = linuxcnc.ini(self.ini_file)
- postgui_halfile = inifile.find("HAL", "POSTGUI_HALFILE")
- return postgui_halfile,sys.argv[2]
- # run the program
- if __name__ == "__main__":
- if len(sys.argv) > 2 and sys.argv[1] == '-ini':
- print "2", sys.argv[2]
- hwg = gui7(sys.argv[2])
- else:
- hwg = gui7()
- # load a postgui file if one is present in the INI file
- postgui_halfile,inifile = gui7.postgui(hwg)
- print "GUI7 postgui filename:",postgui_halfile
- if postgui_halfile:
- res = os.spawnvp(os.P_WAIT, "halcmd", ["halcmd", "-i",inifile,"-f", postgui_halfile])
- if res: raise SystemExit, res
- gtk.main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement