Генерация траектории на основе описания формы или ввода DXF

Я работаю над приложением для создания пути для станка с ЧПУ, изготовленного на заказ. Он основан на контроллере ПЛК, который не поддерживает G-код, поэтому мне нужно определить весь путь как список команд.

У меня возникли проблемы с определением траектории для фрезерования карманов. В качестве исходных данных я использую файлы DXF с различными формами. Каждая форма расположена на другом слое и состоит из простых элементов, таких как LINE, ARC и т. д. Мне нужно проанализировать эти простые элементы как замкнутый контур и сгенерировать траекторию для фрезерования всего материала внутри этого контура. Знаете ли вы какую-либо библиотеку или простой алгоритм, в котором я могу определить форму (в данном случае на основе данных DXF), а библиотека/алгоритм будет генерировать всю траекторию инструмента с учетом диаметра инструмента?

Для простых форм, таких как круги или прямоугольники, я могу сгенерировать такую ​​траекторию вручную, но когда форма более сложная (например, как показано ниже), у меня заканчиваются идеи, как это сделать.

Пример формы

В Интернете есть много бесплатных программ CAM, и каждое из них генерирует траекторию инструмента в виде G-кода, поэтому я предполагаю, что такой алгоритм там каким-то образом реализован. Я думал об использовании такого программного обеспечения CAM, но вывод G-кода для меня непригоден, кроме того, мне не нужен графический интерфейс. Большинство из них также написано на языках более высокого уровня, пока я пишу свое приложение на JavaScript, работающем под управлением node.js.


person artnew    schedule 16.07.2021    source источник
comment
если у вас уже есть ПО, которое сгенерировало G-код, скорее всего, будет намного проще написать синтаксический анализатор G-кода, который преобразует его обратно в векторный путь... Вам просто нужны справочные документы для машинного G-кода, SW используется для... в любом случае, если вы хотите создать свой собственный планер движения, посмотрите их: stackoverflow.com/a/22068534/2521214 stackoverflow.com/a/25052821/2521214 stackoverflow.com/a/31013424/2521214 в любом случае странные формы обычно создаются с помощью КУБИЧЕСКИХ кривых (BEZIER, SPLINE), поэтому вы просто выбираете их в линии и смещаете на радиус инструмента, как и любые другие линии ...   -  person Spektre    schedule 17.07.2021


Ответы (1)


Вы имеете в виду, что знаете, как обрабатывать каждую сущность по отдельности, и не знаете, как объединять их вместе? Поскольку они соприкасаются, вам просто нужно найти следующий объект в соответствии с его начальной/конечной точкой (1) из конечной точки текущего объекта. И если точка (1) была конечной точкой этого объекта, вам нужно будет обработать найденный объект в обратном порядке, либо обработать его в обычном порядке и инвертировать полученную линию. Конечно, стараясь сместить его в правильном направлении.

Для более быстрого поиска соседей отсортируйте их сначала по координате X или Y их начальной и конечной точек.

person Will Ness    schedule 19.07.2021