Нужна процедура по формированию кармана.

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
mycnc
Мастер
Сообщения: 913
Зарегистрирован: 03 июл 2011, 02:01
Репутация: 623
Контактная информация:

Нужна процедура по формированию кармана.

Сообщение mycnc »

Добрый день.
В свой софт (управление ЧПУ) хотим добавить функцию генерации кармана для замкнутого контура, заданного
линейными отрезками и дугами. Рассмотрим варианты от бесплатных советов до выполнения оплачиваемых работ.

PS Написал сюда, так как вроде бы данная функция реализована в gcodetools и здесь есть люди, которые могу направить на верный путь.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Нужна процедура по формированию кармана.

Сообщение Nick »

Давай разберемся в постановке задачи.
В итоге ты хочешь получить что-то типа компенсации радиуса инструмента от LinuxCNC, или что-то круче?
Аватара пользователя
mycnc
Мастер
Сообщения: 913
Зарегистрирован: 03 июл 2011, 02:01
Репутация: 623
Контактная информация:

Re: Нужна процедура по формированию кармана.

Сообщение mycnc »

Nick писал(а):Давай разберемся в постановке задачи.
В итоге ты хочешь получить что-то типа компенсации радиуса инструмента от LinuxCNC, или что-то круче?
Компенсация радиуса инструмента у меня есть (см. картинку, на ней оригинальная трасса и скомпенсированная).
myCNC.png (2326 просмотров) <a class='original' href='./download/file.php?id=7694&sid=6f045abf36594300009c1bc222c66ccb&mode=view' target=_blank>Загрузить оригинал (166.82 КБ)</a>
А надо сделать трассу для фрезеровки поверхности внутри контура. Фактически рекурсивно повторить компенсацию радиуса.
Но будет круче, так как какое-то количество элементов упрощается, а также (в случае, как на картинке) произойдет размножение
контуров. Как это все обсчитывать- алгоритмов пока нет.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Нужна процедура по формированию кармана.

Сообщение Nick »

Понятно. Самое трудное - это клипинг оффсета, т.е. отрезание лишних частей.
Как это делается в Gcodetools на данный момент:
Предположим есть контур p = {s1,s2,...,sn} - упорядоченное множество элементов (s - дуги или отрезки).
p - замкнутый контур, иначе смысл оффсета теряется.
r - радиус оффсета
  1. Вычисляем оффсет:
    p' = {s1',s2', ..., sn'} - т.е. оффсетим каждый элемент.
  2. Соединяем элементы, тут кстати есть два способа - соединять дугами или продлевать элементы за свои края. Это в принципе тоже просто.
  3. Клиппинг:
    1. Находим самопересечения нового контура. Т.е. ищем все пересечения sk' c sm' для m,k из [1,n] и m!=k , при этом надо исключить тривиальные пересечения соседних элементов.
    2. Разбиваем p' на p1'...pn' точками пересечений (при этом, p1'...pn' - могут быть не замкнутыми).
    3. Удаляем не нужные контуры. Есть несколько критериев удаления контура.
      • самый тривиальный, но самый долгий - находим расстояние от каждой части sl' контура pk' до начального контура p, если оно меньше r - контур в помойку. Остается маленький ньюанс, мы работаем с не точными вычислениями, значит надо делать допуск, но в некоторых случаях это может приводить к появлению маленьких артефактов.
      • можно упростить и искать расстояние от средней точки контура. Дальше тоже самое.
      • можно смотреть угол с которым контур pk' пересекает контур pm' в точке разбиения, если он положительный оставляем контур, если нет - в топку. Опять же проблема с точностью вычислений.
      Основная проблема - точность вычислений + граничные случаи, когда контуры совпадают.
  4. После удаления ненужных частей имеем набор контуров {p1',...,pk'}, их нужно попарно соединить по совпадению конечной и начальной точек двух контуров, в случае если клипинг проведен верно все контуры должны объединиться в множество замкнутых контуров.
Вот еще есть статейка по такому оффсету, но как-то странно она написана, и как мне кажется имеет неточности:
CiI2007V58N03P0240.pdf
(723.4 КБ) 1459 скачиваний
И статья по полигонам и их оффсету:
DAC05OffsetPolygon.pdf
(1.55 МБ) 1886 скачиваний
Аватара пользователя
mycnc
Мастер
Сообщения: 913
Зарегистрирован: 03 июл 2011, 02:01
Репутация: 623
Контактная информация:

Re: Нужна процедура по формированию кармана.

Сообщение mycnc »

Прошу прощения за молчание (был в отпуске, интернет там с перебоями).

Спасибо за алгоритм и статьи. Будем читать, разбираться.
Появятся вопросы, отпишусь.
Ответить

Вернуться в «LinuxCNC»