#!/usr/bin/python import gtk import gtk.gtkgl.widget import gtk.gdkgl import gtk.gdk import glnav import gobject import pango import rs274.glcanon import rs274.interpret import emc import time import tempfile import shutil import os import thread from minigl import * class DummyProgress: def nextphase(self, unused): pass def progress(self): pass class StatCanon(rs274.glcanon.GLCanon, rs274.interpret.StatMixin): def __init__(self, colors, geometry, stat, random): rs274.glcanon.GLCanon.__init__(self, colors, geometry) rs274.interpret.StatMixin.__init__(self, stat, random) self.progress = DummyProgress() def is_lathe(self): return False class Gremlin(gtk.gtkgl.widget.DrawingArea, glnav.GlNavBase, rs274.glcanon.GlCanonDraw): rotation_vectors = [(1.,0.,0.), (0., 0., 1.)] def __init__(self, inifile): display_mode = ( gtk.gdkgl.MODE_RGB | gtk.gdkgl.MODE_DEPTH | gtk.gdkgl.MODE_DOUBLE ) glconfig = gtk.gdkgl.Config(mode=display_mode) gtk.gtkgl.widget.DrawingArea.__init__(self, glconfig) glnav.GlNavBase.__init__(self) def C(s): a = self.colors[s + "_alpha"] s = self.colors[s] return [int(x * 255) for x in s + (a,)] self.logger = emc.positionlogger(emc.stat(), C('backplotjog'), C('backplottraverse'), C('backplotfeed'), C('backplotarc'), C('backplottoolchange'), C('backplotprobing'), self.get_geometry() ) thread.start_new_thread(self.logger.start, (.01,)) rs274.glcanon.GlCanonDraw.__init__(self, emc.stat(), self.logger) self.inifile = inifile self.current_view = 'z' self.select_primed = None self.connect_after('realize', self.realize) self.connect('configure_event', self.reshape) self.connect('map_event', self.map) self.connect('expose_event', self.expose) self.connect('motion-notify-event', self.motion) self.connect('button-press-event', self.pressed) self.connect('button-release-event', self.select_fire) self.connect('scroll-event', self.scroll) self.add_events(gtk.gdk.POINTER_MOTION_MASK) self.add_events(gtk.gdk.POINTER_MOTION_HINT_MASK) self.add_events(gtk.gdk.BUTTON_MOTION_MASK) self.add_events(gtk.gdk.BUTTON_PRESS_MASK) self.add_events(gtk.gdk.BUTTON_RELEASE_MASK) self.fingerprint = () self.lat = 0 self.minlat = -90 self.maxlat = 90 self.highlight_line = None self.a_axis_wrapped = inifile.find("AXIS_3", "WRAPPED_ROTARY") self.b_axis_wrapped = inifile.find("AXIS_4", "WRAPPED_ROTARY") self.c_axis_wrapped = inifile.find("AXIS_5", "WRAPPED_ROTARY") live_axis_count = 0 for i,j in enumerate("XYZABCUVW"): if self.stat.axis_mask & (1< 8: self.select_cancel() if button1 and not self.select_primed: if shift: self.translateOrRotate(event.x, event.y) else: self.rotateOrTranslate(event.x, event.y) elif button2: self.translateOrRotate(event.x, event.y) elif button3: self.continueZoom(event.y) def scroll(self, widget, event): if event.direction == gtk.gdk.SCROLL_UP: self.zoomin() elif event.direction == gtk.gdk.SCROLL_DOWN: self.zoomout()