I use some pre-defined macros, controlled by a custom GUI to do much
of my lathe work.
The lathe (and the macros) are set up as metric.
The input data is entered using hal_spinbutton widgets (typically by
typing numbers, not by "spinning" them).
Recently I have been making a lot of imperial parts, and cutting
imperial threads. Which has meant a lot of to-and-fro to the
calculator.
In pursuit of a lazier life I have added some extra code to the
usr/lib/pymodules/python2.6/gladevcp//hal_widgets.py file on my
machine.
Now, if I type "in" after a number then the value is immediately
replaced by the value multiplied by 25.4.
There is similar behaviour for "tpi", "mm" and "pitch".
I also trap the common imperial fractions, so the behaviour is something like
3 = '3'
' ' = '3 '
3 = '3 3'
/ = '3 3/'
4 = '3.75'
i = '3.75i'
n = '95.25'
I had some discussion about the way it works, and how it ought to
work, with seb in IRC last night, and there was some disagreement
about the behaviour.
I like it as it is. The textual "magic codes" simply prompt a fixed
arithmetic operation. Seb was of the opinion that the widget should be
aware of machine native units.
In some very simple setups there will not necessarily be any concept
of native units, and certainly there can often be no INI file to look
in, or linuxcnc.stat structure to query.
So, I like it as it is, and it seems to me something unlikely to be
eventuated by accident, you are only going to know that the feature is
there from reading docs, which could explain the limitations.
You still need to press "enter" to commit the new value to a HAL pin.
Here is the code:
class HAL_SpinButton(gtk.SpinButton, _HalWidgetBase):
__gtype_name__ = "HAL_SpinButton"
def validate(self, *a):
data = self.get_text()
if data[-3:] == 'tpi':
self.set_value(25.4/float(data[:-3]))
elif data[-2:] == 'in':
self.set_value(25.4*float(data[:-2]))
elif data[-2:] == 'mm':
self.set_value(float(data[:-2])/25.4)
elif data[-5:] == 'pitch':
self.set_value(25.4/float(data[:-5]))
elif data[-2:] in [ '/2', '/4', '/8']:
v = data[:-2].split()
if len(v) == 2:
self.set_value(float(v[0]) + float(v[1]) / float(data[-1:]))
elif len(v) == 1:
self.set_value(float(v[0]) / float(data[-1:]))
elif data[-3:] in [ '/16', '/32', '/64']:
v = data[:-3].split()
if len(v) == 2:
self.set_value(float(v[0]) + float(v[1]) / float(data[-2:]))
elif len(v) == 1:
self.set_value(float(v[0]) / float(data[-2:]))
def hal_update(self, *a):
data = self.get_value()
self.hal_pin_f.set(float(data))
self.hal_pin_s.set(int(data))
def _hal_init(self):
self.hal_pin_f = self.hal.newpin(self.hal_name+"-f",
hal.HAL_FLOAT, hal.HAL_OUT)
self.hal_pin_s = self.hal.newpin(self.hal_name+"-s",
hal.HAL_S32, hal.HAL_OUT)
self.connect("value-changed", self.hal_update)
self.connect("changed", self.validate)
self.emit("value-changed")
--
atp
If you can't fix it, you don't own it.
http://www.ifixit.com/Manifesto
------------------------------------------------------------------------------
Open source business process management suite built on Java and Eclipse
Turn processes into business applications with Bonita BPM Community Edition
Quickly connect people, data, and systems into organized workflows
Winner of BOSSIE, CODIE, OW2 and Gartner awards
http://p.sf.net/sfu/Bonitasoft
_______________________________________________
Emc-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/emc-developers