Skip to content

About

Простой генератор gcode для ЧПУ

Resources

Contributing

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Latest commit

 

History

567 Commits

Folders and files

Repository files navigation

GCodeGenerator

Русский | English

Простой генератор G-кода для станков с ЧПУ с графическим интерфейсом и 3D-визуализацией траекторий.

Готовые сборки — в разделе Releases; установленная версия видна в заголовке окна программы. Дальше в планах — переход к версии 2.x: кроссплатформенность и более интерактивная работа с 2D и 3D.

Описание

GCodeGenerator — это приложение для Windows, которое позволяет быстро создавать G-код программы для станков с ЧПУ через удобный графический интерфейс без привязки к CAD-системам. Приложение поддерживает различные типы операций (сверление, фрезерование) и включает в себя 3D-превью для визуализации траекторий инструмента.

Основные возможности

Операции сверления

  • Сверление по точкам — создание отверстий в указанных координатах
  • Сверление по линии — равномерное распределение отверстий вдоль линии
  • Сверление по массиву — создание сетки отверстий
  • Сверление по прямоугольнику — отверстия по периметру прямоугольника
  • Сверление по кругу — отверстия по окружности
  • Сверление по дуге — отверстия вдоль заданного участка окружности
  • Сверление по многоугольнику — отверстия вдоль сторон правильного многоугольника
  • Сверление по эллипсу — отверстия по эллипсу с возможностью поворота
  • Сверление по пакету — использование предопределенных шаблонов

Профильное фрезерование

  • Фрезерование прямоугольника — обработка контура прямоугольника с возможностью поворота
  • Фрезерование скругленного прямоугольника — обработка контура с радиусами углов
  • Фрезерование окружности — обработка контура окружности
  • Фрезерование эллипса — обработка контура эллипса с возможностью поворота
  • Фрезерование многоугольника — обработка контура правильного многоугольника (треугольник, квадрат, шестигранник и т.д.)
  • Импорт DXF для контуров — импорт контуров из DXF файлов для профильного фрезерования: линии, дуги, окружности, эллипсы и полилинии (включая дуговые сегменты), геометрия внутри вставленных блоков, пересчёт координат по единицам чертежа

Фрезерование карманов

  • Фрезерование прямоугольного кармана — обработка контура прямоугольника с возможностью поворота и выборкой материала
  • Фрезерование круглого кармана — обработка контура окружности с выборкой материала
  • Фрезерование эллиптического кармана — обработка контура эллипса с возможностью поворота и выборкой материала
  • Импорт DXF для карманов — импорт замкнутых контуров из DXF файлов для фрезерования карманов

Стратегии обработки карманов (работают на всех типах карманов, включая DXF):

  • Спираль — непрерывная спираль, заполняющая карман
  • Концентрические линии — вложенные замкнутые проходы вдоль эквидистантного контура
  • Радиальные линии — проходы («спицы») от центра к контуру
  • Зигзаг — серпантинные проходы под заданным углом, направление чередуется на каждой линии
  • Линии — параллельные проходы под заданным углом; каждый сегмент сечения — отдельный рез с отводом (обрабатываются острова и разрывы)

Черновая и чистовая обработка с припуском:

  • Черновая обработка — выборка материала с припуском на чистовую (припуск по контуру и по глубине)
  • Чистовая обработка — завершающий проход в одном из режимов:
    • Стенки — чистовая обработка стенок (кромка фрезы на стенке)
    • Дно — чистовая обработка дна
    • Всё — чистовая обработка и стенок, и дна

Дополнительные функции

  • 3D-визуализация траекторий — интерактивный просмотр траекторий инструмента. Сцена строится в фоне, и если построить её не удалось, окно говорит об этом на месте сцены и называет причину: программа при этом собрана, её можно посмотреть текстом и сохранить. Подробности сбоя уходят в журнал работы
  • Предпросмотр G-кода — просмотр сгенерированного кода перед сохранением в виде кода и 2D представления операций. 2D-вид переключается между контурами операций и траекторией инструмента: траектория показывает то, что действительно проделает станок — проходы выборки, компенсацию радиуса фрезы и холостые переходы (штрихом)
  • Безопасный пролог программы — перед первым перемещением выводятся модальные состояния станка: миллиметры (G21), абсолютные координаты (G90), плоскость XY (G17), подача в минуту (G94), отмена коррекции радиуса и длины инструмента и постоянного цикла (G40/G49/G80). Без них результат зависел бы от того, какая программа выполнялась на стойке до этой
  • Комментарии только на английском — комментарий уходит не пользователю, а в файл, который читает стойка: многие стойки принимают только латиницу и на кириллице либо отказываются выполнять кадр, либо показывают мусор, и узнаётся это уже у станка. Собственные тексты программы английские, а русское имя операции в неё не выводится — в комментарии остаётся английское описание операции с типом и размерами. Английские имена выводятся как есть
  • Проверка безопасных высот — высоты, на которых инструмент проходит над заготовкой, сверяются с самой заготовкой, а не только с тем, что это число: безопасная высота фрезерования обязана быть выше высоты контура, высота переходов между отверстиями — выше самого высокого из них, а отвод внутри отверстия не может быть ниже его верха. Все три величины абсолютные, поэтому значение по умолчанию, безопасное над нулём, уводит инструмент внутрь материала при обработке выступа. Ошибка показывается прямо у поля и снимается правкой любой из связанных высот
  • Защитные пределы подач и оборотов — у подачи, оборотов шпинделя и задержки после его пуска есть не только нижняя граница, но и общий верхний потолок: рабочая подача — 20 000 мм/мин, быстрый ход — 60 000 мм/мин, шпиндель — 60 000 об/мин. Это санитарная проверка заведомо абсурдных значений, а не профиль конкретного станка: например, 3000 мм/мин может быть как опечаткой вместо 300, так и допустимым режимом, поэтому приложение не вправе отвергать его без знания оборудования. Перед запуском оператор обязан сверить подачи и обороты с паспортом станка; сработавший общий предел назван в сообщении об ошибке
  • Локальный профиль станка — необязательная проверка фактической траектории по заданным границам X/Y/Z, рабочей и быстрой подаче и оборотам шпинделя. Учитываются компенсация радиуса и промежуточные экстремумы дуг, а выход за предел блокирует генерацию. Профиль хранится на компьютере и не берётся из открываемого проекта, чтобы чужой файл не мог ослабить защиту. Координаты программные: рабочее смещение стойки всё равно обязан проверить оператор
  • Возврат в отверстие с зазором — высота отвода между проходами абсолютная, поэтому сверло чаще всего выходит из отверстия целиком, а обратно идёт по всей пройденной глубине. Быстрый ход обрывается на полмиллиметра выше пройденного, и последний участок сверло проходит рабочей подачей: стружка, ради выброса которой отвод и делается, остаётся в отверстии всегда, и встречать её на полной скорости нечем. Выше верха отверстия возврат не поднимается — там материала нет
  • Врезание только рабочей подачей — быстрый ход опускает инструмент лишь до верха обрабатываемого слоя: выше него материала уже нет. Всё, что глубже, проходится подачей врезания по Z. Правило действует и там, где проход начинается не в точке подвода к слою: отдельный рез параллельной линии, участок луча или контура за островом, разорванный островом виток спирали, чистовой проход по стенке
  • Настройки генерации — гибкая настройка формата выходного G-кода, включая выбор стойки станка (постпроцессора): Generic (Fanuc-совместимые) или GRBL / LinuxCNC. Выбор сохраняется в файле проекта, поэтому проект всегда генерируется для той стойки, для которой создавался. Настройки генерации принадлежат открытому проекту; кнопка «Сделать умолчаниями» в окне настроек запоминает их как умолчания для новых проектов
  • Настройки шпинделя — управление шпинделем в программе: включение/выключение (M3/M4/M5), скорость вращения (S-код), направление вращения, задержка после включения. Задержка задаётся в секундах, а выводится в единицах выбранной стойки: для Generic — G4 P<миллисекунды> (так аргумент понимают Fanuc и совместимые), для GRBL / LinuxCNC — G4 P<секунды>
  • Настройки подачи СОЖ — управление системой охлаждения и смазки: включение/выключение (M8/M9) с программы
  • Сохранение и открытие проектов — сохранение всех операций и настроек в файл проекта для последующей загрузки и продолжения работы. Проект открывается тремя способами: из окна программы, двойным щелчком по файлу .ygc в проводнике (связь с файлами предлагается при установке) и перетаскиванием файла в окно. О несохранённых изменениях программа спрашивает в любом из них
  • Язык интерфейса — русский и английский; выбирается в настройках и меняется сразу, без перезапуска. По умолчанию берётся язык системы, а если перевода для него нет — английский. На языке интерфейса говорят и отказы: причина, по которой программа не построена, перечисляется по проблеме на строку — номер и имя операции, имя параметра и что с ним не так, теми же словами, что и в диалогах операций. Английский текст отказа остаётся в журнале работы
  • Управление операциями — добавление, удаление, изменение порядка операций; отмена и повтор этих изменений и правок параметров (Ctrl+Z / Ctrl+Y), правка входит в историю одним шагом на диалог. История хранит последние 100 шагов: каждый шаг держит состояние операции целиком, и у контура из чертежа это сотни килобайт
  • Прерывание генерации — рядом с полосой хода появляется кнопка остановки: на большом проекте с мелким шагом выборки не приходится ждать конца построения, если стало ясно, что параметры заданы не те. Остановка занимает доли секунды — она доходит до каждого слоя и отверстия
  • Клавиши — Ctrl+N (новый проект), Ctrl+O (открыть), Ctrl+S (сохранить), Ctrl+Shift+S (сохранить как), Ctrl+Z / Ctrl+Y (отменить / повторить), Ctrl+G (построить G-код), F1 (о программе). Delete удаляет выделенную операцию, только когда фокус находится в списке операций
  • Проверка обновлений — необязательная и выключенная по умолчанию. Это единственный случай, когда программа обращается в сеть: она спрашивает у github.com последний выпуск и больше ничего — ни ключей, ни учётных данных запрос не требует. Включается в настройках; тогда при запуске появляется строка «Доступна версия X», открывающая страницу выпуска. Кнопка «Проверить сейчас» в окне «О программе» работает независимо от настройки: нажатие и есть согласие. Отказ проверки ничего не прерывает и называет себя: окно говорит, что именно помешало — сеть, ответ GitHub или исчерпанный им предел числа запросов, который проходит сам
  • О программе — версия, правообладатель, лицензия, страница продукта и путь к журналу работы с кнопкой «показать файл»: журнал просят приложить к сообщению о сбое, и искать его в недрах профиля не приходится
  • Журнал работы — открытие и сохранение проектов, генерация G-кода, импорт DXF и любые сбои записываются в %LOCALAPPDATA%\GCodeGenerator\logs\gcodegenerator.log (при достижении 1 МБ файл переносится в gcodegenerator.1.log)
  • Автовосстановление проекта — через 2 секунды после последней правки несохранённый документ атомарно записывается в %LOCALAPPDATA%\GCodeGenerator\recovery\autosave.ygc; после прерванного сеанса следующий обычный запуск предлагает открыть его как новый несохранённый проект. Успешное ручное сохранение или осознанный отказ от изменений удаляют снимок
  • Аварийный снимок проекта — если программа завершается из-за непредвиденной ошибки, текущий проект сохраняется в %LOCALAPPDATA%\GCodeGenerator\crash\crash-ГГГГММДД-ЧЧММСС.ygc — отдельным файлом, а не поверх вашего; путь к нему показывается в сообщении об ошибке

Ограничения текущей версии

Всё перечисленное — осознанные границы первой версии, а не недоделки. Знать о них лучше заранее, чем выяснять у станка.

  • Только миллиметры. В прологе программы выводится G21; дюймовый режим (G20) не поддерживается ни на вводе, ни на выводе.
  • Три линейные оси и плоскость XY. Выводится G17; обработки в других плоскостях и поворотных осей нет.
  • Две стойки. Generic (Fanuc-совместимые) и GRBL / LinuxCNC. Различаются они единицей паузы после пуска шпинделя — G4 P в миллисекундах и в секундах — и больше ничем.
  • Постоянные циклы не используются. Сверление выводится явными перемещениями G0/G1, а не G81/G83: так программа выполняется одинаково на стойках, которые понимают циклы по-разному, и целиком видна в предпросмотре.
  • Коррекцию радиуса считает программа, а не стойка. Контур смещается на радиус фрезы при построении траектории, а в программу выводится G40. G41/G42 не выводятся, и таблица инструментов стойки ни на что не влияет.
  • Один инструмент на программу. Смены инструмента (T/M6) и подпрограмм (M98/M99) нет: для второго инструмента делается вторая программа.
  • Шпиндель и СОЖ — простые команды. Обороты, направление и задержка (M3/M4/M5, S, G4), включение и выключение охлаждения (M8/M9). Ориентации шпинделя и раздельного управления охлаждением (M7) нет.
  • Пределы ввода. Рабочая подача — до 20000 мм/мин, быстрый ход — до 60000 мм/мин, шпиндель — до 60000 об/мин, задержка — до 60 с, знаков после запятой — до 6. Это границы разумного ввода, а не паспорт станка: свой предел стойка всё равно применит сама.
  • Размер одного задания ограничен. Файлы .ygc и DXF — не более 64 МБ; предел проверяется до чтения файла в память. До 1000 операций, до 10000 отверстий в одной операции, до 200000 сущностей DXF, до 64 уровней вложенности блоков, до 10000 контуров и 200000 точек импортированного DXF в одной операции, до 250000 элементов итоговой траектории. Эти пределы защищают память и отзывчивость приложения; большое задание нужно разделить на несколько проектов или чертежей.
  • Зазор возврата при сверлении — 0,5 мм и настройкой не меняется.
  • История отмены — 100 шагов.
  • Резервная копия проекта. При сохранении поверх существующего .ygc его предыдущая версия атомарно остаётся рядом с суффиксом .bak; для восстановления переименуйте копию обратно в .ygc и откройте её.
  • Чужой G-код не открывается. Программа свои файлы пишет, но не читает: предпросмотр показывает ту траекторию, которую построила сама.
  • Чертежи DXF читаются не целиком. Берутся линии, дуги, окружности, эллипсы, полилинии (в том числе трёхмерные и с дуговыми сегментами), сплайны (приближаются ломаной) и вставки блоков. Тексты, размеры, штриховки и прочее геометрией контура не считаются. Нужен DXF 2000 или новее с явно заданными единицами чертежа. ARC и ELLIPSE поддерживаются только в плоскости XY с нормалью +Z; остальные кривые нужно спроецировать или преобразовать в полилинии в CAD-системе.
  • Только Windows. Интерфейс написан на WPF; кроссплатформенность обещана версии 2.x.

Требования

  • Операционная система: Windows 11 24H2 (build 26100) или новее. Обычные пользовательские выпуски Windows 10 достигли конца поддержки; в списке ОС для .NET 10 остались только отдельные редакции Enterprise, IoT и LTSC. Они не входят в поддерживаемую продуктом конфигурацию; установщик проверяет минимальный build 26100.
  • Экран: окно занимает не меньше 900×560 единиц разметки — это примерно 1575×980 физических пикселей при масштабе 175 % или 900×560 при 100 %. На 1920×1080 программа работает при любом масштабе вплоть до 175 %.
  • .NET 10 Desktop Runtime для запуска приложения не требуется: инсталлятор и портативная версия self-contained (рантайм входит в состав) — приложение работает на чистой Windows.
  • Для сборки из исходников: .NET 10 SDK 10.0.302 — точная версия из global.json, Visual Studio 2026 или командная строка.

Установка

Готовые сборки

Скачайте последнюю версию установщика из раздела Releases и запустите установщик.

Мастер спрашивает, ставить программу для всех пользователей или только для себя. Первое требует прав администратора, второе обходится без них и кладёт программу в %LOCALAPPDATA%\Programs — на рабочем компьютере с ограниченной учётной записью программу поставить можно. Каталог, ярлыки и связь с файлами следуют выбранному режиму. Тихой установке режим задаётся ключом /ALLUSERS или /CURRENTUSER. Если программа уже установлена, вопрос не задаётся: обновление идёт в том же режиме, что и установка.

Релиз публикуется автоматически: push тега версии (например, 1.2.3 или 1.2.3-rc5) запускает workflow Release — сборка, тесты, инсталлятор (Inno Setup) и GitHub Release с установщиком GCodeGenerator-Setup-<версия>.exe и портативной версией (zip). Оба артефакта self-contained (включают .NET 10 Desktop Runtime). Теги с суффиксом (-alpha/-beta/-rc) помечаются как pre-release. Официальный выпуск публикуется только после заполнения draft и становится immutable: связанные tag и assets после этого нельзя заменить.

Предупреждение Windows при запуске. Официальные сборки пока не имеют Authenticode-подписи и показывают «Неизвестный издатель». В зависимости от репутации файла и политики компьютера SmartScreen или Smart App Control могут показать предупреждение либо полностью заблокировать запуск. Само отсутствие подписи не доказывает ни заражение, ни безопасность файла. Скачивайте программу только из Releases этого репозитория; не отключайте системную защиту. Если политика Windows предлагает «Подробнее» → «Выполнить в любом случае», решение о запуске принимайте только после проверки файла.

Рядом с артефактами опубликован SHA256SUMS.txt. Следующая команда проверяет, что локальный установщик совпадает с записью в нём:

$version = '<версия>'
$file = "GCodeGenerator-Setup-$version.exe"
$line = @(Get-Content .\SHA256SUMS.txt | Where-Object {
    $_ -match ('  ' + [regex]::Escape($file) + '$')
})
if ($line.Count -ne 1) { throw "Нет единственной checksum для $file" }
$expected = ($line[0] -split '\s+')[0].ToLowerInvariant()
$actual = (Get-FileHash -LiteralPath ".\$file" -Algorithm SHA256).Hash.ToLowerInvariant()
if ($actual -cne $expected) { throw "SHA-256 не совпадает: $actual" }

Для криптографической проверки того, что выпуск immutable, а локальный файл — именно его asset, установите GitHub CLI и выполните:

gh release verify $version --repo AlexanderYunker1983/GCodeGenerator
gh release verify-asset $version ".\$file" --repo AlexanderYunker1983/GCodeGenerator

В будущем подписанную сборку можно будет отличить по ожидаемому издателю на вкладке «Цифровые подписи». Даже корректная подпись снижает неопределённость происхождения, но сама по себе не гарантирует отсутствие предупреждения или безопасность программы.

Обновление поверх работающей программы

При обновлении Windows Restart Manager находит именно установленный экземпляр по занятым файлам, а не все процессы с таким именем: portable-копия из другого каталога не закрывается. Программа успевает спросить о несохранённом проекте; отказ от закрытия останавливает замену файлов без принудительной потери данных. После успешного обновления прежний экземпляр запускается снова и открывает тот же сохранённый проект.

Сборка инсталлятора локально

Требования: .NET 10 SDK, git, 64-битный Inno Setup 7 (скачать).

build\Make-Installer.ps1

Скрипт берёт версию из точного git-тега либо build/NEXT_VERSION для промежуточной сборки (тот же механизм, что и версия сборки), выполняет dotnet publish (self-contained, win-x64 — рантайм входит в инсталлятор) и компилирует install\GCodeGenerator.iss (ISCC). Результат: artifacts\installer\GCodeGenerator-Setup-<версия>.exe.

Параметры: -FrameworkDependent (publish без рантайма — инсталлятор меньше, но пользователю нужен .NET 10 Desktop Runtime), -IsccPath <путь к ISCC.exe>, -Configuration, -Runtime, -SigningMode, -SignCommand, -ExpectedSignerThumbprint.

Подпись кода

Для текущего выпуска сертификата нет, поэтому официальная политика задана явно: -SigningMode Unsigned. Этот режим отклоняет параметры и переменные подписи, чтобы забытый секрет не изменил свойства артефакта случайно.

build\Make-Installer.ps1 -SigningMode Unsigned

Когда появится публично доверенный сертификат, используется fail-closed режим Required. Он требует и команду подписи одного файла, где $f заменяется путём к файлу, и SHA-1 thumbprint ожидаемого сертификата:

build\Make-Installer.ps1 -SigningMode Required `
  -SignCommand 'signtool.exe sign /fd SHA256 /tr http://timestamp.digicert.com /td SHA256 /f C:\keys\cert.pfx /p ПАРОЛЬ $f' `
  -ExpectedSignerThumbprint '<SHA-1 thumbprint>'

Вместо параметров данные можно положить в GCODEGEN_SIGN_COMMAND и GCODEGEN_EXPECTED_SIGNER_THUMBPRINT; они читаются только в Required. Подписываются GCodeGenerator.exe и обе сборки продукта в publish-каталоге, затем установщик и деинсталлятор (SignedUninstaller); после каждого этапа проверяются доверие Authenticode, именно ожидаемый сертификат и метка времени. Файлы .NET-рантайма уже подписаны Microsoft. Активный release workflow намеренно не получает signing-секреты; подключение аппаратного токена или облачного key store и переключение на Required остаются отдельной задачей после появления сертификата.

Сборка из исходников

Требования: .NET 10 SDK 10.0.302 — точная версия закреплена в global.json без перехода на более новый patch или feature band. Состав пакетов зафиксирован файлами packages.lock.json; чтобы восстановить их ровно по замку, добавьте к восстановлению ключ --locked-mode, как это делают рабочие процессы сборки. После смены версии пакета в .csproj замок обновляется восстановлением с ключом --force-evaluate.

Замок покрывает и публикацию: приложение и ядро объявляют среду выполнения (RuntimeIdentifiers = win-x64), поэтому в их замках есть раздел и для обычной сборки, и для публикации под этой средой. Инсталлятор собирается в том же закреплённом режиме — публикация вызывается со свойством -p:RestoreLockedMode=true (ключа --locked-mode у dotnet publish нет). Обновляя замки, восстанавливайте всё решение сразу (dotnet restore GCodeGenerator.sln --force-evaluate): оба раздела записываются одним проходом, а замок только с одним из них отвергает восстановление для другого.

  1. Клонируйте репозиторий:
git clone https://github.com/AlexanderYunker1983/GCodeGenerator.git
cd GCodeGenerator
  1. Соберите решение (NuGet-зависимости восстановятся автоматически):
dotnet build GCodeGenerator.sln -c Release
  1. (Опционально) Запустите тесты:
dotnet test GCodeGenerator.Core.Tests/GCodeGenerator.Core.Tests.csproj -c Release --no-build
dotnet test GCodeGenerator.Tests/GCodeGenerator.Tests.csproj -c Release --no-build
  1. Перед изменением релизно-критичной валидации и генерации запустите целевой мутационный срез, используемый release workflow:
dotnet tool restore
cd GCodeGenerator.Core.Tests
dotnet stryker --config-file stryker-config.json --skip-version-check

Версия инструмента закреплена в .config/dotnet-tools.json, а оценка ниже 75% завершает проверку ошибкой. Расширенный срез stryker-weekly-config.json дополнительно мутирует генераторы, стратегии карманов, геометрию и DXF-импорт; он может занять значительное время и запускается workflow Mutation Tests для затрагивающих ядро pull request, еженедельно и вручную. HTML- и JSON-отчёты обоих прогонов сохраняются в артефакте.

Приложение: GCodeGenerator\bin\Release\GCodeGenerator.exe (для запуска требуется .NET 10 Desktop Runtime).

Альтернатива: откройте GCodeGenerator.sln в Visual Studio 2026 и соберите решение (конфигурация Release).

Версионирование

Версия продукта проставляется при сборке из git-тегов и явного плана следующего выпуска (build/NEXT_VERSION, build/Get-GitVersion.ps1, Directory.Build.targets):

  • Формат тега: X.Y.Z или X.Y.Z-suffix (например, 1.2.3, 1.2.3-alpha, 1.2.3-rc5).
  • Если на текущем коммите несколько тегов — выбирается тег с максимальным приоритетом (SemVer): 1.2.3 > 1.2.3-rc5 > 1.2.3-beta3 > 1.2.3-alpha2 > 1.2.3-alpha (в пределах класса — по номеру: rc10 > rc5).
  • Если текущий коммит без тега — к версии из build/NEXT_VERSION добавляются расстояние и короткий SHA, например 1.2.3-dev4g12ab34cd; сборка с незакоммиченными изменениями получает также окончание dirty. Поэтому две разные dev-сборки не выдают себя за один и тот же релиз.
  • NEXT_VERSION обязан содержать одну корректную версию, которая выше ближайшего тега; устаревший или повреждённый файл останавливает сборку. Без явно переданного файла скрипт сохраняет прежний резервный алгоритм.
  • Теги вне формата (например, v1.2.3) игнорируются с предупреждением.

Версия попадает в свойства сборки (Version/AssemblyVersion/FileVersion/InformationalVersion) и в заголовок программы. Переопределение: dotnet build /p:Version=1.2.3-rc5 (явная версия) или /p:SkipGitVersion=true (пропустить git).

Использование

  1. Запустите приложение GCodeGenerator.exe

  2. Выберите тип операции из вкладок в левой части окна:

    • Сверление
    • Фрезерование
  3. Добавьте операцию:

    • Нажмите на кнопку нужного типа операции
    • Заполните параметры в открывшемся диалоге
    • Операция будет добавлена в список
  4. Настройте параметры (опционально):

    • Нажмите кнопку "Настройки" для изменения параметров генерации G-кода
    • Настройте параметры шпинделя и СОЖ в настройках программы
  5. Сохраните проект (опционально):

    • Нажмите кнопку "Сохранить проект" для сохранения всех операций и настроек
    • В дальнейшем можно открыть сохраненный проект через "Открыть проект"
  6. Сгенерируйте G-код:

    • Нажмите кнопку "Сгенерировать G-код"
    • Просмотрите результат в правой панели
  7. Просмотрите 3D-превью (опционально):

    • Нажмите кнопку "Превью G-кода" для визуализации траекторий
  8. Сохраните результат:

    • Нажмите кнопку "Сохранить G-код"
    • Выберите место для сохранения файла

Структура проекта

GCodeGenerator/
├── GCodeGenerator/          # Приложение (WPF, net10.0-windows)
│   ├── Views/               # Окна и разметка (XAML)
│   ├── ViewModels/          # ViewModel'и (MVVM)
│   ├── Services/            # Сервисы приложения (диалоги, настройки, буфер)
│   ├── Localization/        # Привязка локализации к разметке
│   └── Infrastructure/      # Контейнер, преобразователи, ввод чисел
├── GCodeGenerator.Core/     # Ядро без интерфейса (net10.0)
│   ├── Models/              # Операции, настройки, проверка параметров
│   ├── Toolpath/            # Траектория инструмента до выбора диалекта
│   ├── GCodeGenerators/     # Построение траекторий и запись G-кода
│   ├── Geometry/            # Плоская геометрия и эквидистанты
│   ├── Import/              # Чтение чертежей DXF
│   ├── Preview/             # Плоский предпросмотр
│   ├── Trajectory/          # Сцена траектории 3D
│   ├── Persistence/         # Файл проекта (.ygc)
│   └── Localization/        # Словари и выбор языка
├── GCodeGenerator.Core.Tests/  # Тесты ядра (MSTest, без WPF)
├── GCodeGenerator.Tests/    # Тесты приложения (MSTest, WPF)
├── build/                   # Скрипты сборки (теги/NEXT_VERSION, инсталлятор)
├── install/                 # Инсталлятор (Inno Setup)
├── docs/                    # Документация (smoke-чек-лист)
├── .github/                 # Рабочие процессы, формы issue и pull request
├── GCodeGenerator.sln       # Решение Visual Studio
├── CHANGELOG.md             # Журнал изменений (описание выпуска берётся отсюда)
├── CONTRIBUTING.md          # Как собрать, проверить и предложить изменение
├── SECURITY.md              # Как сообщить об уязвимости
├── THIRD-PARTY-NOTICES.md   # Лицензии сторонних компонентов и тестовых данных
└── LICENSE                  # Лицензия MIT

Технологии

  • .NET 10 — платформа разработки (ядро — net10.0, приложение — net10.0-windows)
  • WPF — графический интерфейс
  • CommunityToolkit.Mvvm — фреймворк для MVVM
  • MahApps.Metro — UI-темы и контролы
  • Autofac — контейнер зависимостей
  • Clipper2 — построение эквидистант контуров при выборке карманов
  • netDxf — чтение DXF-чертежей
  • NuGet — управление зависимостями

Лицензия

Код GCodeGenerator распространяется под лицензией MIT — см. LICENSE. Сторонние библиотеки и тестовые данные сохраняют собственные лицензии, авторские права и условия: они перечислены в THIRD-PARTY-NOTICES.md. В частности, три DXF-фикстуры LibreCAD под GPLv2 используются только тестами и не входят в установщик или portable-архив.

Автор

Copyright (c) 2021-2026 Alexander Yunker

Вклад в проект

Вклад приветствуется. Чем собирать, какие правила ломают сборку и как предлагать изменение — в CONTRIBUTING.md. Что менялось от выпуска к выпуску — в CHANGELOG.md.

Поддержка

Если у вас возникли вопросы или проблемы, заведите issue — форма подскажет, что именно нужно для разбора. К сообщению о сбое приложите журнал работы — %LOCALAPPDATA%\GCodeGenerator\logs\gcodegenerator.log: в нём остаётся текст исключения, который иначе теряется вместе с закрытым окном сообщения.

Об уязвимости сообщайте не через issue, а приватным сообщением — см. SECURITY.md.

About

Простой генератор gcode для ЧПУ

Resources

Contributing

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages