В сфере металлообработки есть популярная операция - лазерная резка. Узким местом в цикле обработки заказа здесь может являться расчет. Он хоть и не сложный, но обычно выполняется вручную. А это означает, что помимо необходимости участия человека, он еще и затягивается на время коммуникации - отправки информации туда сюда.

Если вы захотите автоматизировать расчет стоимости заказа, вам придется иметь дело с DXF файлами - в некотором роде стандартном способе передачи чертежей нужных деталей. В этой задаче вам может помочь моя разработка.

Хочу сказать, что предложенное решение не является законченным. Оно корректно работает на конечном множесте тестовых файлов. Однако CAD системы есть разные. Люди, которые их используют - тоже разные. В совокупности на выходе вполне могут быть такие чудеса в DXF файле(вы видите 4000 отрезков на снежинке выше? а они там есть :), что мое решение выдаст или ошибку или неверный результат.

Решение может обрабатывать конечный набор примитивов - LINE, CIRCLE, ARC, POLYLINE. Если в dxf файле будут примитивы типа SPLINE - обработка не выполнит расчет параметров (Не осилил. Но CAD системы позволяют трансформировать SPLINE в POLYLINE).

Собственно вот само решение

Обработка dxf может занять длительное время. Чтобы не блокировать поток, решение выполнено как отдельный скрипт, который можно запустить асинхронно отдельным процессом. Скрипт получает на вход имя файла, обрабатывает его, формирует два файла - svg с картинкой и json с информацией.

Для расчета стоимости нужен периметр всех контуров (длина реза), общая площадь (чтоб рассчитать вес - критично для доставки) и ширина и высота минимального прямоугольника (расход металла). Все это вы найдете в результирующем json файле. Ну и разумеется на выходе будет svg картинка - чтоб показать клиенту, что мы посчитали именно то, что он хотел.

Обработка использует dxf-parser чтобы получить из DXF JavaScript объект, потом пытается соединить примитивы в замкнутые контуры, после чего, используя библиотеку flatten-js, сделать полигоны, выполнить расчет нужных цифр и сгенерировать svg. Исходник по сути на JS, хоть и TS (типы описаны по минимому - для собственного удобства).

Как запускать обработку написано в README в репозитории. Буду рад, если она вам пригодиться.

P.S. Если вы захотите сделать хаб (маркетплейс) по металлообработке - напишите мне в личку - возможно нам будет что обсудить.

Комментарии (8)


  1. Enfriz
    08.04.2022 22:55
    +2

    Был несколько лет в центре лазерной резки по оргстеклу и прочим материалам. Крупнейший центр в Питере, кстати. Такие центры берут деньги за метр длины линии реза + за квадратный сантиметр потраченного материала.

    Как происходит подсчет цены. Одна девушка открывает мои файлы (eps) у себя в корелдро, выводит суммарную длину линий. Умножает их с помощью отдельно стоящего калькулятора на цену и записывает на листочке. Затем смотрит размеры холста, перемножает длину-ширину, смотрит в бумажной книжечке цены на единицу площади материала, который я назвал, снова умножает и записывает на листочке. Потом складывает все результаты.

    Если материалов несколько, то для каждого из них отдельная строчка на этом листочке. Все это на обычном кнопочном калькуляторе.

    Затем я иду платить. Вторая девушка на всякий случай проверяет первую и повторяет весь процесс (!) с помощью уже своего кнопочного калькулятора и листочка с ручкой.

    Я ей тогда сказал:
    — Что ж ваши спецы не сделают программу, которая будет вам цену сама выдавать?
    — Вы шутите, такая программа стоит миллион!

    Когда я был в следующий раз в этом центре, и снова увидел всё это, я предложил им сделать за символическую сумму хотя бы эксель-лист с макросами, который будет считать это всё в 10 раз быстрее, чем человек. Мне сказали не надо, руководство не одобрит.


    1. aborouhin
      09.04.2022 00:38
      +2

      Мне сказали не надо, руководство не одобрит.

      Девушки просто прекрасно понимают, что одну из них после этого можно будет уволить :)


    1. TheRaven
      09.04.2022 01:40
      +1

      И программа эта, в смысле плагина к корелу, называется plotcalc


    1. 1eternal
      09.04.2022 10:11

      от экселя не будет быстрее.

      что там цифры записывать, что на листке.

      а программой не заменить, потому как зачастую присылают мусорные линии в файле.

      или линии в линиях. оператор это может увидеть, а ваша программа нет


      1. Enfriz
        09.04.2022 13:44

        Ну, подразумевалось, что база цен на материалы уже будет где-то в соседнем листе лежать, и будет обновляться.


  1. fransua
    09.04.2022 19:08
    +1

    А какой формат сплайнов в dxf? Могу помочь с переводом в svg (в path или в polyline с нужной точностью)


    1. nep Автор
      09.04.2022 20:27

      Спасибо за предложение. Сейчас пока неактуально - проект закис. Но если что-то изменится - я напишу.


  1. WondeRu
    10.04.2022 16:49

    Я познакомился с DXF в 2002 году, придя на практику в компанию, которая занимается разработкой интегрированных систем безопасности (там где видео, пожарка, охранка и доступ в одном флаконе). Мне дали задачу: отобразить DXF в векторе. За лето (я был студентусом без опыта) была написана программа на Delphi+OpenGL, которая парсила DXF-файлы и отображала планы зданий. Уже после, когда меня взяли туда на работу, мы добавили слои, датчики, периметры и остальную светомузыку. Прям тепло на душе и огромная благодарность руководителю, что в меня поверил. 20 лет)