Не знаю проскакивала ли здесь ссылка на опен-сорс Java утилиту для изменения G-кода с целью компенсации неровностей:
http://www.cnczone.com/forums/pcb_milli ... obing.html
http://marcuswolschon.blogspot.de/2013/ ... lling.html
Очень советую. Проверил на Mach3, отлично работает. Также заявлена, но не проверена поддержка EMC2.
Как ей пользоваться:
1. Скачиваем "jar" файл по ссылке: 
https://github.com/MarcusWolschon/PCBZC ... r?raw=true
2. Запускаем "pcbzcorrect.jar".
3. Сразу же появится диалоговое окно открытия входного файла УП, указываем его (я использую CopperCAM для создания УП фрезеровки ПП).
4. Далее появляется еще одно окно. Указываем в нем Probe grid X: количество точек сканирования поверхности по оси X, Probe grid Y: тоже самое для оси Y. По умолчанию стоит 5, 5.
5. Ставим галочку на "EMC2 instead of MACH3" если хотим подготовить УП для EMC2 (Внимание, данная опция не проверена).
6. Нажимаем кнопку "Start" внизу экрана.
7. Если процесс прошел успешно, то появится сообщение "done" в новом окне. Одновременно в главном окне будут отображены результаты нахождения максимальных координат в файле и вычисленный размер ПП. Не помешает его проконтролировать на всякий случай.
8. Нажимаем на кнопку "OK" и все. На выходе имеем файл, созданный в той же папке, где находится исходный файл с добавленным суффиксом "_zprobed.ngc" к исходному названию файла.
Откроем только что созданный файл, и видим в самом начале следующее:
Код: Выделить всё
(Things you can change:)
#1=1  		(Safe height)
#2=0.5		(Travel height)
#3=0  		(Z offset)
#4=-1 		(Probe depth)
(Things you should not change:)
G20		(inch)
G90		(Abs coords)
 
Things you can change (Параметры, которые можно поменять):
1.
 Safe height. Безопасная высота по оси Z в мм. Нужно поставить исходя из высоты крепежных узлов заготовки и близости прохождения инструмента от них.
2. 
Travel height. Высота, на которую поднимается ось Z при сканировании в мм. Если стеклотекстолит очень кривой и перепад высот превышает 0.5мм, то нужно увеличить этот параметр.
3. 
Z offset. Разность высот сканирующего инструмента/головки и инструмента для гравировки в мм. Если для сканирования и гравировки используется одна и та же фреза, то нужно оставить "0" в этом параметре. Если например длина сканирующей фрезы на 1 мм больше длины фрезы для гравировки, то следует установить "-1".
4.
 Probe depth. Максимальная глубина погружения инструмента при сканировании в мм.
Things you should not chang (Параметры, которые менять не нужно)
G20		(inch)
На самом деле нам нужно поменять команду смены единиц измерения с G20 (inch) на G21 (mm). Дело в том, что в этой утилите есть процедура, определяющая есть ли в исходной УП команды G20 или G21. И если она находит одну из этих команд, то все вычисления будут вестись в соответствующих единицах измерения. Если не находит, то по умолчанию будут установлены единицы измерения в inch, что мы и видим. Если бы CopperCAM экспортировал УП с командой G21, то не пришлось бы исправлять G20 на G21.
Все, теперь УП создана и настроена. Нужно просто ее запустить на MACH3 (или EMC2), поставить фрезу для гравировки, обнулить ось Z, запустить УП и она автоматически просканирует поверхность заготовки с заданной точностью. По завершению предложит отсоединить щуп. После этого начнется гравировка с компенсацией неровностей.
Все очень просто. Привлекает тем, что не нужно руками вставлять в УП результаты сканирования, все происходит автоматически.
Кстати, в моей УП было несколько секций со сменой инструмента: Фрезеровка, четыре размера сверел, резка по контуру. Так вот, этот конвертер корректно сконвертировал все остальные секции УП без проблем. Правда он скомпенсировал неровность по Z также в секциях фрезеровки и резки по контору. Но это никак не помешало. Прикрепил фото отфрезерованной платки. Весь процесс включая сканирование и смену инструмента занял 40 минут.
P.S. Заметил один неприятный глюк. Программа не конвертировала файл, в котором рисунок платы был ориентирован горизонтально (длинная сторона вдоль оси X). Конвертация начиналась, но не появлялось окошко с надписью "done". Файл тоже создавался, но содержимое было сгенерированно не до конца. Когда повернул плату в CopperCAM на 90 градусов, то все пришло в норму. Знатоки Java, выручайте.