The last week I was busy writing a c++ class that to some extend interprets
gcode.
Using this class, a general filter application was created. This than can be
a template for other filters.
However I am not completly finished yet.
Missing is interpretation of [blabla], just using it and doing [-[blabla]]
for a flip is working.
Variables and loops are not interpreted yet.
The "knive delay" compensation is also working already for entry and exit
moves, however to compensate in arc movements and intermediate corners is
something I still need to think about.
Conversion from relative to absolute movements is working also.
Curently the filters uses command line parameters to access it, "filter
scale 10, filter flipX, filter knive 0.5, filter rotate 45". However, at
some stage I want to create a gui (probably qt) that gives the bounding box,
so you select align left,right,..., to e.g. 0,0 and specify the operations
more nicely, with default settings wether N* shall be ignored, XYZ Machine
limit warnings and stuff. This should perfectly work with the filter menu
concept by Jeff.

However I ran into some problems with general scaling operations. When
multiplying all coordinates by large factors( e.g. 25.4 for mm->inch)
also the arc radiuses and I and Js, axis complains that the radius is to
some very small extend different.
I even tried to recalculate the J values by geometric operations based on
the old and new position and the i.
Also outputting more decimal digits did not solve things, at least in my
feable first attempt.

How are the conditions in axis or emc, so that an arc can be interpreted
sucessfully? Are there any pre-made solutions or methods on how to scale an
gcode arc?
Maybe it could make sense to change the required radius accuracy to the
number of decimal places in the gcode.

If there is some more time, I will also need to split an arc into segments,
to have independent x and y scaling. Is there a way of doing this, without
slowing the trajectory planner, e.g. by specifying that it may be allowed to
round small-angled "corners" it the moves, or using G0 with a lower
"Jog-speed" for cutting)?



greetings,
 Bernhard




On Tue, Mar 16, 2010 at 10:35 PM, Bernhard Kubicek <
[email protected]> wrote:

> I posted some ugly hacked filters in the forum:
>
> http://www.linuxcnc.org/component/option,com_kunena/Itemid,20/func,view/catid,38/id,2288/limit,6/limitstart,6/lang,english/#2326
> they might not be working perfectly, but its a start.
>
>
> On 3/14/2010 11:09 PM, Dave wrote:
>
>> I really like this idea and want to patch my system and try this
>> out....  I think the concept adds a lot of flexibility to EMC2.
>>
>> This seems like a useful addition as it moves the "filters" idea further
>> along.
>>
>> Dave  (Dave911 on the IRC)
>>
>> On 3/14/2010 10:55 AM, Jeff Epler wrote:
>>
>>
>>> this feature is inspired by Bernhard Kubicek's work on a similar
>>> feature.  Any number of filters may be listed in the inifile as
>>> [FILTER]PROGRAM=.  These work similarly to extension-based filters,
>>> except that the user chooses them explicitly from the menu to apply
>>> them to the already-loaded file.
>>> ---
>>> This seems like a good idea.  What do you think of this approach?
>>>
>>>   share/axis/tcl/axis.tcl               |    8 +++++-
>>>   src/emc/usr_intf/axis/scripts/axis.py |   41
>>> +++++++++++++++++++++++++++++++++
>>>   2 files changed, 48 insertions(+), 1 deletions(-)
>>>
>>> diff --git a/share/axis/tcl/axis.tcl b/share/axis/tcl/axis.tcl
>>> index 24f0174..89caac6 100644
>>> --- a/share/axis/tcl/axis.tcl
>>> +++ b/share/axis/tcl/axis.tcl
>>> @@ -26,6 +26,8 @@ menu .menu.file \
>>>        -tearoff 0
>>>   menu .menu.file.recent \
>>>        -tearoff 0
>>> +menu .menu.file.filters \
>>> +       -tearoff 0
>>>   menu .menu.machine \
>>>        -tearoff 0
>>>   menu .menu.machine.home \
>>> @@ -54,6 +56,10 @@ setup_menu_accel .menu.file end [_ "Recent _Files"]
>>>       -command edit_program
>>>   setup_menu_accel .menu.file end [_ "_Edit..."]
>>>
>>> +.menu.file add cascade \
>>> +    -menu .menu.file.filters
>>> +setup_menu_accel .menu.file end [_ "F_ilter"]
>>> +
>>>   .menu.file add command \
>>>        -accelerator [_ "Ctrl-R"] \
>>>        -command reload_file
>>> @@ -1880,7 +1886,7 @@ proc update_state {args} {
>>>       relief {$task_state == $STATE_ON}    .toolbar.machine_power
>>>
>>>       state  {$interp_state == $INTERP_IDLE&&   $taskfile != ""} \
>>> -        .toolbar.reload {.menu.file "_Reload"}
>>> +        .toolbar.reload {.menu.file "_Reload"} {.menu.file "F_ilter"}
>>>       state  {$taskfile != ""} \
>>>           .toolbar.reload {.menu.file "_Save gcode as..."}
>>>       state  {$interp_state == $INTERP_IDLE&&   $taskfile != ""&&
>>> $::has_editor} \
>>> diff --git a/src/emc/usr_intf/axis/scripts/axis.py
>>> b/src/emc/usr_intf/axis/scripts/axis.py
>>> index 702307f..da97406 100755
>>> --- a/src/emc/usr_intf/axis/scripts/axis.py
>>> +++ b/src/emc/usr_intf/axis/scripts/axis.py
>>> @@ -1203,6 +1203,7 @@ widgets = nf.Widgets(root_window,
>>>
>>>       ("menu_view", Menu, ".menu.view"),
>>>       ("menu_file", Menu, ".menu.file"),
>>> +    ("menu_filters", Menu, ".menu.file.filters"),
>>>       ("menu_machine", Menu, ".menu.machine"),
>>>       ("menu_touchoff", Menu, ".menu.machine.touchoff"),
>>>
>>> @@ -2407,6 +2408,28 @@ class TclCommands(nf.TclCommands):
>>>           else:
>>>               add_recent_file(f)
>>>
>>> +    def filter_gcode(program):
>>> +        global loaded_file
>>> +        if not loaded_file: return
>>> +        if get_filter(loaded_file):
>>> +            srcfile = os.path.join(tempdir,
>>> os.path.basename(loaded_file))
>>> +        else:
>>> +            srcfile = loaded_file
>>> +        outfile = tempfile.NamedTemporaryFile(
>>> +            suffix="ngc", dir=tempdir, delete=False)
>>> +        exitcode, stderr = filter_program(program, srcfile,
>>> outfile.name)
>>> +        if exitcode:
>>> +            root_window.tk.call("nf_dialog", (".error", "-ext", stderr),
>>> +                    _("Filter failed"),
>>> +                    _("The program %(program)r exited with code
>>> %(code)d.  "
>>> +                    "Any error messages it produced are shown below:")
>>> +                        % {'program': program, 'code': exitcode},
>>> +                    "error",0,_("OK"))
>>> +            return
>>> +        dest = os.path.join(tempdir, os.path.basename(loaded_file))
>>> +        os.rename(outfile.name, dest)
>>> +        open_file_guts(dest, True, False)
>>> +
>>>   commands = TclCommands(root_window)
>>>
>>>   vars = nf.Variables(root_window,
>>> @@ -2778,6 +2801,23 @@ update_ms = int(1000 *
>>> float(inifile.find("DISPLAY","CYCLE_TIME") or 0.020))
>>>   widgets.unhomemenu.add_command(command=commands.unhome_all_axes)
>>>   root_window.tk.call("setup_menu_accel", widgets.unhomemenu, "end",
>>> _("Unhome All Axes"))
>>>
>>> +filters = inifile.findall("FILTER", "PROGRAM")
>>> +for f in filters:
>>> +    if ";" in f:
>>> +        p, t = f.split(";", 1)
>>> +    else:
>>> +        p = t = f
>>> +    p = p.strip()
>>> +    t = t.strip()
>>> +    widgets.menu_filters.add_command(command=("filter_gcode", p),
>>> label=t)
>>> +    try:
>>> +        root_window.tk.call("setup_menu_accel", ".menu.file.filters",
>>> "end", t)
>>> +    except Tkinter.TclError:
>>> +        # The inifile has an invalid string, such as "Bogus_".  Rather
>>> than
>>> +        # punishing the user by refusing to start, skip the accelerator
>>> +        # set-up logic
>>> +        pass
>>> +
>>>   s = emc.stat();
>>>   s.poll()
>>>   statfail=0
>>>
>>>
>>>
>>
>>
>> ------------------------------------------------------------------------------
>> Download Intel&#174; Parallel Studio Eval
>> Try the new software tools for yourself. Speed compiling, find bugs
>> proactively, and fine-tune applications for parallel performance.
>> See why Intel Parallel Studio got high marks during beta.
>> http://p.sf.net/sfu/intel-sw-dev
>> _______________________________________________
>> Emc-developers mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/emc-developers
>>
>>
>
>
------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Emc-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/emc-developers

Reply via email to