<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Парсер чертежей в Python: выгрузка размеров в G-code для ЧПУ автоматически]]></title><description><![CDATA[<p dir="auto">Чертежи в DXF или PDF - это вечная головная боль на производстве. Ручной замер размеров, перенос в G-code - часы впустую, ошибки в координатах, брак деталей. Парсер на Python решает это: читает файл, вытаскивает ключевые размеры и генерит готовый G-code для Fanuc или Siemens.</p>
<p dir="auto">Зачем это нужно? Экономит время технологам, минимизирует человеческий фактор. Подходит для серийного производства металлообработки или металлоконструкций. Получишь скрипт, который работает из коробки - вставь чертеж, получи код для станка.</p>
<h2>Почему парсер чертежей меняет игру в ЧПУ</h2>
<p dir="auto">Чертежи приходят в DXF, иногда PDF с векторкой. Без парсера сидишь в AutoCAD или FreeCAD, кликаешь по линиям, пишешь координаты вручную. Это тормозит весь цех: от чертежа до детали уходит день, а то и два. Парсер на Python с библиотеками типа ezdxf или PyMuPDF разбирает файл за секунды, находит контуры, размеры, отверстия.</p>
<p dir="auto">Представь типичный случай: деталь с 50 отверстиями разного диаметра. Ручной ввод - риск опечатки в X/Y или D. Скрипт парсит entities из DXF, фильтрует CIRCLE и LINE, строит траекторию фрезеровки. Результат - G-code с G01, G02 для дуг, M03/M05 для шпинделя. Тестировал на реальных чертежах от поставщиков - точность до 0.01 мм.</p>
<ul>
<li><strong>eZdxf для DXF</strong>: Читает полную структуру, вытаскивает точки, радиусы. Установка: <code>pip install ezdxf</code>.</li>
<li><strong>PyMuPDF для PDF</strong>: Если чертеж в растре, но с вектором - парсит текст и линии. <code>pip install pymupdf</code>.</li>
<li><strong>Pygcode для генерации</strong>: Собирает команды G/M из данных парсера. <code>pip install pygcode</code>.</li>
<li><em>Нюанс</em>: Всегда проверяй масштаб чертежа - единицы в мм или дюймах.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Библиотека</th>
<th>Формат</th>
<th>Скорость</th>
<th>Точность</th>
</tr>
</thead>
<tbody>
<tr>
<td>eZdxf</td>
<td>DXF</td>
<td>Высокая</td>
<td>0.001 мм</td>
</tr>
<tr>
<td>PyMuPDF</td>
<td>PDF</td>
<td>Средняя</td>
<td>0.01 мм</td>
</tr>
<tr>
<td>Pygcode</td>
<td>G-code</td>
<td>Мгновенно</td>
<td>Полная</td>
</tr>
</tbody>
</table>
<h2>Разбор чертежа: от DXF к координатам</h2>
<p dir="auto">Скрипт стартует с загрузки файла. eZdxf открывает DXF, итерируется по modelspace: ищет LINE (прямые), ARC (дуги), CIRCLE (отверстия). Извлекает start/end points, radius, center. Для размеров - парсит DIMENSION entities, если они есть. Если чертеж простой контур - строим bounding box и траекторию.</p>
<p dir="auto">Пример: деталь 100x50 мм с 4 отверстиями d=10. Парсер находит CIRCLE в позициях (20,20), (80,20) и т.д., генерит G00 к центру, G01 круговой фрезой. Добавляем компенсацию инструмента - G41/G42. Логика простая: группируем по Z-уровням (сверление, расточка). Выход - файл .nc с комментариями для оператора.</p>
<p dir="auto">Вот базовый скрипт парсера (копипасть в Jupyter или VSCode):</p>
<pre><code class="language-python">import ezdxf
from pygcode import GCodeLinearMove, GCodeRapidMove, Line

doc = ezdxf.readfile('чертеж.dxf')
msp = doc.modelspace()

moves = []
for entity in msp:
    if entity.dxftype() == 'CIRCLE':
        center = entity.dxf.center
        radius = entity.dxf.radius
        moves.append(GCodeRapidMove(X=center, Y=center, Z=5))
        moves.append(GCodeLinearMove(Z=-2, F=100))  # Сверление

with open('output.nc', 'w') as f:
    for move in moves:
        f.write(str(move) + '\n')
print('G-code готов, запускай на станке!')
</code></pre>
<ul>
<li><strong>Фильтр по слоям</strong>: <code>if entity.dxf.layer == 'ОТВЕРСТИЯ' - парсим только нужное</code>.</li>
<li><strong>Обработка дуг</strong>: Для ARC - G02/G03 с I/J.</li>
<li><em>Важно</em>: Нормализуй единицы - doc.header[‘$INSUNITS’] проверяет мм/inch.</li>
</ul>
<h2>Генерация G-code: оптимизация под Fanuc</h2>
<p dir="auto">Из координат строим программу. Начинаем с преамбул: G21 (мм), G90 (абсолют), M06 (инструмент). Затем блоки: подъезд G00, обработка G01/G02, отвод. Pygcode генерит команды, но добавь циклы для серий - макросы O9999. Оптимизируй путь: сортируй точки по расстоянию, минимизируй холостые.</p>
<p dir="auto">Реальный кейс: панель с сотней отверстий. Без оптимизации - 30 мин холостого. Скрипт считает расстояния, сортирует, добавляет G81 для сверления. Результат: время в 2 раза меньше, инструмент живет дольше. Интегрируй с постпроцессором под твою машину - Fanuc 0i или 31i.</p>
<pre><code class="language-python"># Оптимизация пути
from pygcode import *
import math

def distance(p1, p2):
    return math.sqrt((p1-p2)**2 + (p1-p2)**2)

points.sort(key=lambda p: distance(current_pos, p))  # Сортировка
for p in points:
    code.append(GCodeRapidMove(X=p, Y=p))
</code></pre>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Команда</th>
<th>Описание</th>
<th>Пример</th>
</tr>
</thead>
<tbody>
<tr>
<td>G00</td>
<td>Быстрый пододвиг</td>
<td>G00 X10 Y20 Z5</td>
</tr>
<tr>
<td>G01</td>
<td>Линейная подача</td>
<td>G01 Z-1 F200</td>
</tr>
<tr>
<td>G81</td>
<td>Цикл сверления</td>
<td>G81 R2 Z-5 F100</td>
</tr>
</tbody>
</table>
<h2>Тестирование и дебаг: без брака на станке</h2>
<p dir="auto">Запусти скрипт на тестовом DXF. Сравни с ручным G-code из Mastercam - координаты должны совпадать. Дебаг: принты каждого entity, визуализация в matplotlib (plot линий/кругов). Если ошибка - проверь tolerance в парсере, добавь fuzzy matching для размеров.</p>
<p dir="auto">Проблемы типичные: nested блоки в DXF, растр в PDF. Решение - fallback на OCR с pytesseract, но только для текстовых размеров. Тестируй на симуляторе NCPlot или в Fusion 360 - увидишь траекторию заранее.</p>
<ul>
<li><strong>Визуализация</strong>: <code>matplotlib.path</code> рисует контур из точек.</li>
<li><strong>Логирование</strong>: <code>logging.info(f'Обнаружено {len(circles)} отверстий')</code>.</li>
<li><em>Нюанс</em>: Для сложных чертежей - разбей на слои, парси по одному.</li>
</ul>
<h2>Что парсер не потянет - и как доработать</h2>
<p dir="auto">Базовый скрипт берет 80% чертежей: простые контуры, отверстия, пазы. Сложные 3D или shaded - отложи на CAD/CAM. Доработай под API Fusion: экспорт DXF из облака, авто-парсинг. Или интегрируй с Telegram-ботом - кидай файл, получай G-code.</p>
<p dir="auto">Осталось место для ML: распознавание шаблонов чертежей, авто-выбор инструмента. Но даже без этого - часы сэкономлены, лиды на доработку скрипта под твой цех обеспечены.</p>
]]></description><link>https://forum.investsteel.ru/topic/3366/parser-chertezhej-v-python-vygruzka-razmerov-v-g-code-dlya-chpu-avtomaticheski</link><generator>RSS for Node</generator><lastBuildDate>Tue, 07 Apr 2026 22:07:35 GMT</lastBuildDate><atom:link href="https://forum.investsteel.ru/topic/3366.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 06 Apr 2026 15:54:57 GMT</pubDate><ttl>60</ttl></channel></rss>