Добрый день.
В свой софт (управление ЧПУ) хотим добавить функцию генерации кармана для замкнутого контура, заданного
линейными отрезками и дугами. Рассмотрим варианты от бесплатных советов до выполнения оплачиваемых работ.
PS Написал сюда, так как вроде бы данная функция реализована в gcodetools и здесь есть люди, которые могу направить на верный путь.
Нужна процедура по формированию кармана.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Нужна процедура по формированию кармана.
Давай разберемся в постановке задачи.
В итоге ты хочешь получить что-то типа компенсации радиуса инструмента от LinuxCNC, или что-то круче?
В итоге ты хочешь получить что-то типа компенсации радиуса инструмента от LinuxCNC, или что-то круче?
- mycnc
- Мастер
- Сообщения: 913
- Зарегистрирован: 03 июл 2011, 02:01
- Репутация: 623
- Контактная информация:
Re: Нужна процедура по формированию кармана.
Компенсация радиуса инструмента у меня есть (см. картинку, на ней оригинальная трасса и скомпенсированная). А надо сделать трассу для фрезеровки поверхности внутри контура. Фактически рекурсивно повторить компенсацию радиуса.Nick писал(а):Давай разберемся в постановке задачи.
В итоге ты хочешь получить что-то типа компенсации радиуса инструмента от LinuxCNC, или что-то круче?
Но будет круче, так как какое-то количество элементов упрощается, а также (в случае, как на картинке) произойдет размножение
контуров. Как это все обсчитывать- алгоритмов пока нет.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Нужна процедура по формированию кармана.
Понятно. Самое трудное - это клипинг оффсета, т.е. отрезание лишних частей.
Как это делается в Gcodetools на данный момент:
Предположим есть контур p = {s1,s2,...,sn} - упорядоченное множество элементов (s - дуги или отрезки).
p - замкнутый контур, иначе смысл оффсета теряется.
r - радиус оффсета
Как это делается в Gcodetools на данный момент:
Предположим есть контур p = {s1,s2,...,sn} - упорядоченное множество элементов (s - дуги или отрезки).
p - замкнутый контур, иначе смысл оффсета теряется.
r - радиус оффсета
- Вычисляем оффсет:
p' = {s1',s2', ..., sn'} - т.е. оффсетим каждый элемент. - Соединяем элементы, тут кстати есть два способа - соединять дугами или продлевать элементы за свои края. Это в принципе тоже просто.
- Клиппинг:
- Находим самопересечения нового контура. Т.е. ищем все пересечения sk' c sm' для m,k из [1,n] и m!=k , при этом надо исключить тривиальные пересечения соседних элементов.
- Разбиваем p' на p1'...pn' точками пересечений (при этом, p1'...pn' - могут быть не замкнутыми).
- Удаляем не нужные контуры. Есть несколько критериев удаления контура.
- самый тривиальный, но самый долгий - находим расстояние от каждой части sl' контура pk' до начального контура p, если оно меньше r - контур в помойку. Остается маленький ньюанс, мы работаем с не точными вычислениями, значит надо делать допуск, но в некоторых случаях это может приводить к появлению маленьких артефактов.
- можно упростить и искать расстояние от средней точки контура. Дальше тоже самое.
- можно смотреть угол с которым контур pk' пересекает контур pm' в точке разбиения, если он положительный оставляем контур, если нет - в топку. Опять же проблема с точностью вычислений.
- После удаления ненужных частей имеем набор контуров {p1',...,pk'}, их нужно попарно соединить по совпадению конечной и начальной точек двух контуров, в случае если клипинг проведен верно все контуры должны объединиться в множество замкнутых контуров.
- mycnc
- Мастер
- Сообщения: 913
- Зарегистрирован: 03 июл 2011, 02:01
- Репутация: 623
- Контактная информация:
Re: Нужна процедура по формированию кармана.
Прошу прощения за молчание (был в отпуске, интернет там с перебоями).
Спасибо за алгоритм и статьи. Будем читать, разбираться.
Появятся вопросы, отпишусь.
Спасибо за алгоритм и статьи. Будем читать, разбираться.
Появятся вопросы, отпишусь.