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

Reply via email to