Here is a patch to expose more functionality to gremlin.
it goes against 2.5
Things like displaying only metric units was hard coded.
There was no way to clear the plotter of feed / rapid moves
I imagine there should be a EMC_ACTION for clearing the plot?
One problem i haven't figure out is how to get gremlin
to redraw the program after a origin change (touch-off)
I can call gremlin.load() and this reload the file but
it doesn't redraw it based on the new tool position.
Strangely it seems if I cause an linuxcnc error message to print
then reload it does seem to plot it in the new position!
I am using gremlin in a prototype frontend for linuxcnc
but much of this is needed to display properly regardless of
what you are using it for.
Feedback would be welcome.
Chris M
PS Linuxcnc is too long to type :)
From 939d1078b7d6154017c1161d2e3cbc7c489f7f87 Mon Sep 17 00:00:00 2001
From: cmorley <[email protected]>
Date: Tue, 17 Jan 2012 17:58:39 -0800
Subject: [PATCH] gladevcp -expose more functionality to hal_gremlin
can select such things as displaying in metric or imperial
Signed-off-by: cmorley <[email protected]>
---
lib/python/gladevcp/hal_gremlin.py | 32 +++++++++++++++++-
src/emc/usr_intf/gremlin/gremlin.py | 63 ++++++++++++++++++++++++-----------
2 files changed, 74 insertions(+), 21 deletions(-)
diff --git a/lib/python/gladevcp/hal_gremlin.py b/lib/python/gladevcp/hal_gremlin.py
index d221f36..a559673 100644
--- a/lib/python/gladevcp/hal_gremlin.py
+++ b/lib/python/gladevcp/hal_gremlin.py
@@ -29,8 +29,36 @@ class HAL_Gremlin(gremlin.Gremlin, _EMC_ActionBase):
__gproperties__ = {
'view' : ( gobject.TYPE_STRING, 'View type', 'Default view: x, y, z, p',
'z', gobject.PARAM_READWRITE | gobject.PARAM_CONSTRUCT),
- 'enable_dro' : ( gobject.TYPE_BOOLEAN, 'Enable DRO', 'Draw DRO on plot or not',
+ 'enable_dro' : ( gobject.TYPE_BOOLEAN, 'Enable DRO', 'Show DRO on graphics',
True, gobject.PARAM_READWRITE | gobject.PARAM_CONSTRUCT),
+ 'use_metric' : ( gobject.TYPE_BOOLEAN, 'Use Metric', 'Show DRO in metric or imperial units',
+ True, gobject.PARAM_READWRITE | gobject.PARAM_CONSTRUCT),
+ 'use_relative' : ( gobject.TYPE_BOOLEAN, 'Show Relative', 'Show DRO relative to active system or actual machine',
+ True, gobject.PARAM_READWRITE | gobject.PARAM_CONSTRUCT),
+ 'use_commanded' : ( gobject.TYPE_BOOLEAN, 'Show Commanded', 'Show commanded or actual position',
+ True, gobject.PARAM_READWRITE | gobject.PARAM_CONSTRUCT),
+ 'show_extents_option' : ( gobject.TYPE_BOOLEAN, 'Show Extents', 'Show machine extents',
+ True, gobject.PARAM_READWRITE | gobject.PARAM_CONSTRUCT),
+ 'show_limits' : ( gobject.TYPE_BOOLEAN, 'Show limits', 'Show machine limits',
+ True, gobject.PARAM_READWRITE | gobject.PARAM_CONSTRUCT),
+ 'show_offsets' : ( gobject.TYPE_BOOLEAN, 'Show Offsets', 'Show offsets',
+ False, gobject.PARAM_READWRITE | gobject.PARAM_CONSTRUCT),
+ 'show_live_plot' : ( gobject.TYPE_BOOLEAN, 'Show live plot', 'Show machine plot',
+ True, gobject.PARAM_READWRITE | gobject.PARAM_CONSTRUCT),
+ 'show_velocity' : ( gobject.TYPE_BOOLEAN, 'Show tool speed', 'Show tool velocity',
+ True, gobject.PARAM_READWRITE | gobject.PARAM_CONSTRUCT),
+ 'show_program' : ( gobject.TYPE_BOOLEAN, 'Show program', 'Show program',
+ True, gobject.PARAM_READWRITE | gobject.PARAM_CONSTRUCT),
+ 'show_rapids' : ( gobject.TYPE_BOOLEAN, 'Show rapids', 'Show rapid moves',
+ True, gobject.PARAM_READWRITE | gobject.PARAM_CONSTRUCT),
+ 'show_tool' : ( gobject.TYPE_BOOLEAN, 'Show tool', 'Show tool',
+ True, gobject.PARAM_READWRITE | gobject.PARAM_CONSTRUCT),
+ 'show_dtg' : ( gobject.TYPE_BOOLEAN, 'Show DTG', 'Show Distance To Go',
+ True, gobject.PARAM_READWRITE | gobject.PARAM_CONSTRUCT),
+ 'is_lathe_option' : ( gobject.TYPE_BOOLEAN, 'Show as lathe', 'Show as a lathe layout',
+ False, gobject.PARAM_READWRITE | gobject.PARAM_CONSTRUCT),
+ 'use_joints_mode' : ( gobject.TYPE_BOOLEAN, 'Use joints mode', 'Use joints mode',
+ False, gobject.PARAM_READWRITE | gobject.PARAM_CONSTRUCT),
}
__gproperties = __gproperties__
def __init__(self, *a, **kw):
@@ -64,6 +92,8 @@ class HAL_Gremlin(gremlin.Gremlin, _EMC_ActionBase):
elif name == 'enable_dro':
self.enable_dro = value
+ elif name == 'use_metric':
+ self.use_metric = value
elif name in self.__gproperties.keys():
setattr(self, name, value)
else:
diff --git a/src/emc/usr_intf/gremlin/gremlin.py b/src/emc/usr_intf/gremlin/gremlin.py
index 0871aae..6a490b5 100755
--- a/src/emc/usr_intf/gremlin/gremlin.py
+++ b/src/emc/usr_intf/gremlin/gremlin.py
@@ -51,8 +51,7 @@ class Gremlin(gtk.gtkgl.widget.DrawingArea, glnav.GlNavBase,
a = self.colors[s + "_alpha"]
s = self.colors[s]
return [int(x * 255) for x in s + (a,)]
-
-
+ self.inifile = inifile
self.logger = linuxcnc.positionlogger(linuxcnc.stat(),
C('backplotjog'),
C('backplottraverse'),
@@ -65,7 +64,6 @@ class Gremlin(gtk.gtkgl.widget.DrawingArea, glnav.GlNavBase,
thread.start_new_thread(self.logger.start, (.01,))
rs274.glcanon.GlCanonDraw.__init__(self, linuxcnc.stat(), self.logger)
- self.inifile = inifile
self.current_view = 'z'
@@ -94,6 +92,21 @@ class Gremlin(gtk.gtkgl.widget.DrawingArea, glnav.GlNavBase,
self.maxlat = 90
self.highlight_line = None
+ self.program_alpha = False
+ self.use_joints_mode = False
+ self.use_commanded = True
+ self.show_limits = True
+ self.show_extents_option = True
+ self.show_live_plot = True
+ self.show_velocity = True
+ self.use_metric = True
+ self.show_program = True
+ self.show_rapids = True
+ self.use_relative = True
+ self.show_tool = True
+ self.show_dtg = True
+ self.lathe_option = False
+ self.show_offsets = False
self.a_axis_wrapped = inifile.find("AXIS_3", "WRAPPED_ROTARY")
self.b_axis_wrapped = inifile.find("AXIS_4", "WRAPPED_ROTARY")
@@ -138,6 +151,9 @@ class Gremlin(gtk.gtkgl.widget.DrawingArea, glnav.GlNavBase,
def _redraw(self): self.expose()
+ def clear_live_plotter(self):
+ self.logger.clear()
+
def map(self, *args):
gobject.timeout_add(50, self.poll)
@@ -169,16 +185,17 @@ class Gremlin(gtk.gtkgl.widget.DrawingArea, glnav.GlNavBase,
self.font_charwidth = width
rs274.glcanon.GlCanonDraw.realize(self)
- if s.file: self.load(s.file)
+ if s.file: self.load()
def set_current_view(self):
if self.current_view not in ['x', 'y', 'z', 'p']:
return
return getattr(self, 'set_view_%s' % self.current_view)()
- def load(self, filename):
+ def load(self,filename = None):
s = self.stat
s.poll()
+ if not filename and s.file: filename = s.file
td = tempfile.mkdtemp()
self._current_file = filename
@@ -199,27 +216,33 @@ class Gremlin(gtk.gtkgl.widget.DrawingArea, glnav.GlNavBase,
self.set_current_view()
- def get_program_alpha(self): return False
+ def get_program_alpha(self): return self.program_alpha
def get_num_joints(self): return self.num_joints
- def get_geometry(self): return 'XYZ'
- def get_joints_mode(self): return False
- def get_show_commanded(self): return True
- def get_show_extents(self): return True
- def get_show_limits(self): return True
- def get_show_live_plot(self): return True
- def get_show_machine_speed(self): return True
- def get_show_metric(self): return True
- def get_show_program(self): return True
- def get_show_rapids(self): return True
- def get_show_relative(self): return True
- def get_show_tool(self): return True
- def get_show_distance_to_go(self): return True
+ def get_geometry(self):
+ temp = self.inifile.find("DISPLAY", "GEOMETRY")
+ if temp:
+ self.geometry = temp.upper()
+ else:
+ self.geometry = 'XYZ'
+ return self.geometry
+ def get_joints_mode(self): return self.use_joints_mode
+ def get_show_commanded(self): return self.use_commanded
+ def get_show_extents(self): return self.show_extents_option
+ def get_show_limits(self): return self.show_limits
+ def get_show_live_plot(self): return self.show_live_plot
+ def get_show_machine_speed(self): return self.show_velocity
+ def get_show_metric(self): return self.use_metric
+ def get_show_program(self): return self.show_program
+ def get_show_rapids(self): return self.show_rapids
+ def get_show_relative(self): return self.use_relative
+ def get_show_tool(self): return self.show_tool
+ def get_show_distance_to_go(self): return self.show_dtg
def get_view(self):
view_dict = {'x':0, 'y':1, 'z':2, 'p':3}
return view_dict.get(self.current_view, 3)
- def is_lathe(self): return False
+ def is_lathe(self): return self.lathe_option
def get_current_tool(self):
for i in self.stat.tool_table:
if i[0] == self.stat.tool_in_spindle:
--
1.7.0.4
------------------------------------------------------------------------------
Try before you buy = See our experts in action!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-dev2
_______________________________________________
Emc-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/emc-developers