Что такое gerber файл
Table of Contents:
Если файл GBR не является файлом Gerber, это может быть файл GIMP Brush, используемый программным обеспечением для редактирования изображений GIMP. Этот вид файла содержит изображение, которое программа использует для рисования повторяющихся штрихов на холсте.
Как открыть файлы GBR
Вы можете открывать файлы Gerber с помощью ряда программ, большинство из которых бесплатны. Эти бесплатные зрители Gerber включают GraphiCode GC-Prevue, PentaLogix ViewMate, PTC Creo View Express и Gerbv. Некоторые из них поддерживают печать и просмотр измерений. Вы также можете использовать Altium Designer для открытия файла Gerber, но он не является бесплатным.
Файлы GIMP Brush используются с GIMP, который работает на Windows, MacOS и Linux.
Если ваш файл GBR находится в формате Gameboy Tileset, вы можете открыть его с помощью Gameboy Tile Designer (GBTD).
Как конвертировать файл GBR
Чтобы преобразовать файл GBR, вы должны знать, в каком формате он находится. Это важно, чтобы вы знали, какая программа конвертера будет использоваться, поскольку три упомянутых выше формата не имеют ничего общего друг с другом. Это означает, что вы не можете преобразовать, скажем, файл GIMP Brush в формат файла Gerber; это просто не работает.
Когда дело доходит до конвертирования Gerber-файлов, очень возможно, что некоторые из упомянутых выше программ способны не только открыть его, но и сохранить файл GBR в новый формат файла. Однако, если нет, GerbView может конвертировать файлы Gerber в DXF, PDF, DWG, TIFF, SVG и другие форматы файлов.
Online Gerber Viewer также может работать для сохранения файла GBR в формате изображения PNG. FlatCAM может преобразовать файл Gerber в G-Code.
Чтобы преобразовать файлы GBR GIMP в ABR для использования в Adobe Photoshop, вам сначала нужно преобразовать GBR в PNG с помощью такой программы, как XnView. Затем откройте PNG-файл в Photoshop и выберите, какая часть изображения должна быть превращена в кисть. Сделайте кисть через редактировать > Определить настройку кисти … меню.
Вы можете конвертировать файлы Gameboy Tileset в другие форматы файлов с помощью программы Gameboy Tile Designer, упомянутой выше. Он поддерживает сохранение GBR до Z80, OBJ, C, BIN и S через файл > Экспортировать в… пункт меню.
Дополнительная информация о файлах GBR
Не удается открыть файл?
Дважды проверьте расширение файла, если вы не можете открыть файл. Вероятно, если он не работает ни с одной из вышеперечисленных программ, вы неправильно читаете расширение файла. Это важно, потому что даже если два формата файлов разделяют большинство или даже все одинаковые буквы расширения файлов, это не обязательно означает, что они связаны или могут быть открыты с помощью одних и тех же программных средств.
Например, файлы GRB имеют все три одинаковые буквы расширения файлов с файлами GBR, но они являются файлами метеорологических данных GRIB, хранящимися в двоичном формате GRIdded. Они не имеют ничего общего с любыми форматами файлов GBR, упомянутыми на этой странице, и поэтому не могут быть просмотрены или преобразованы с помощью программ, о которых говорилось выше.
Файл NEF (что это такое и как его открыть)
Файл AZW (что это такое и как его открыть)
Файл NOMEDIA (что это такое и как его использовать)
Файл NOMEDIA представляет собой файл Android No Media. Они используются, чтобы приложения не отображали мультимедийные файлы. Вот как сделать или удалить файлы NOMEDIA.
Формат Гербера
Формат Gerber является открытым ASCII векторный формат для печатных плат (PCB) конструкций. [1] Это стандарт де-факто, используемый промышленным программным обеспечением для печатных плат для описания изображений печатных плат: слоев меди, паяльной маски, легенды, данных сверления и т. Д. [2] [3] [4]
Расширение имени файла |
---|
Тип слоя | Расширение |
Верхний слой металлизации | *.art01, *.gtl, *.cmp, *.top, *.gtl, *.layer1, *.soldcom, *.comp |
Нижний слой металлизации | *.art02, *.gbl, *.bottom, *.sld, *.bot, *.GBL, *.layer2, *.soldsold,*.sol |
Внутренний слой | *.art, *.in, *.internal, *.gt1, *.gt2, *.gt3, *.gt4, *.gt5, *.gt6, *.g1, *.g2, *.g3, *.g4, *.g5, *.g6 |
Негативный экранный слой | *.pgp, *.pwr, *.gp1, *.gp2, *.gp3, *.gp4, *.gp5, *.gp6, *.gnd, *.ground |
Позитивный экранный слой | *.pgp, *.pwr, *.gnd, *.ground |
Слой сверловки | *.dd01, *.gd1, *.gg1, *.drill, *.drl, *.tap, *.nc1, *.dd02, *.gd, *.gg, *.drill, *.drl, *.tap, *.nc2, *.dd, *.gd, *.gg, *.drill, *.drl, *.tap, *.nc3, *.nc4, *.nc5 |
Верхний слой шелкографии | *.sst01, *.gto, *.top silk, *.silk, *.slk, *.sst, *.ts, *.skt |
Нижний слой шелкографии | *.sst, *.bsilk, *.gbo, *.ssb, *.bot silk, *.silk, *.bs, *.skb |
Верхний слой маски | *.sm01, *.cmask, *.gts, *.tmask, *.tmk, *.smt, *.mask1, *.maskcom, *.tr, *.top mask, *.mst |
Нижний слой маски | *.sm, *.gbs, *.bmask, *.bmk, *.smb, *.mask2, *.masksold, *.br, *.bot mask, *.msb |
Верхний слой пасты | *.sp01, *.gtp, *.tm, *.top paste, *.paste, *.pst |
Нижний слой пасты | *.sp02, *.gbp, *.bm, *.bot paste, *.paste, *.psb |
Периметр платы | *.BDR, *.gko, *.border, *.out |
Список цепей | *.ipc, *.net |
Санкт-Петербург(СПб), ул. Минеральная, 13, офис 306 +7 812 6457043
Пишем бесплатный Gerber-вьювер с открытым исходным кодом под Android с нуля
Привет, Хабр! Меня зовут Велеско Сергей, я Android разработчик в настоящее время и инженер-конструктор печатных плат в прошлой жизни. В этой статье я расскажу, как мне удалось применить знания, полученные в прошлой профессии, и написать простое Android приложение для просмотра Gerber-файлов.
Как будет идти повествование
Расскажу немного предыстории, затем пройдусь по требованиям и расскажу, почему выбрал те или иные технологии. Далее опишу сам процесс и в конце подведу итоги. Ссылку на репозиторий оставлю в конце статьи.
Немного предыстории
Идея написать просмотрщик/конвертер возникала у меня еще в 2018 году, когда на прошлой работе на шестерых конструкторов была единственная лицензия на софтину для чтения герберов с очень неудобным экспортом в растровое изображение. Экспорт фотошаблонов в растр был необходим для документации и требовал неприличное количество ручных операций и времени. С этим нужно было что-то делать. И нужно было делать что-то с выгоранием от основной работы.
Мне так зашел процесс, что я стал всерьез интересоваться разработкой, и где-то через год Qt привел меня в андроид. Да так удачно привёл, что я сменил профессию конструктора на андроид-разработчика. На момент публикации чуть больше полугода профессионально занимаюсь нативной разработкой под андроид на kotlin. Тут еще на одну статью тянет, но вернемся к главной теме.
Зачем gerber viewer под андроид?
Требования
Что должно делать приложение?
Открывать гербер файлы
Отображать список открытых файлов
Каждый элемент списка должен содержать имя файла, переключатель видимости и цвет слоя на экране с изображением.
Элемент должен удаляться из списка по свайпу.
Парсинг и вообще вся обработка должна производиться в отдельном потоке.
Изображение должно иметь зум, панораму и управление ими с помощью привычных жестов.
Архитектура проекта
MVVM, потому что 1) подходит под задачу 2) имеет поддержку от гугл в виде architecture components. Также я решил делать проект многомодульным, т.к. сразу можно было выделить относительно независимые части приложения, выполняющие свою функцию. + в планах было выделить в отдельную kotlin библиотеку парсер. Ниже приведена примерная схема приложения с модулями и зависимостями.
Кратко по каждому модулю:
app — главный модуль приложения с экранами, вью моделями и репозиторием.
File Reader — модуль, который читает файлы и загружает их в оперативную память. На выходе список строк.
Syntax Parser — парсит строки из гербера. На выходе список команд.
Graphics Processor — обрабатывает команды. На выходе список графических объектов.
Многопоточность
Логично было бы выполнять парсинг файлов и генерацию графических объектов в фоне, начиная сразу после добавления файла в список, показывая какой-нибудь лоадинг. Сначала я посматривал в сторону RxJava, которая предлагала относительно удобный способ работы с многопоточностью и плюшки в виде производительности при использовании rx источников/подписчиков вместо больших коллекций с командами гербера и графическими объектами. Но учитывая, что Rx теряет популярность, поднадоела за время учебы и используется на работе, было решено использовать корутины, с которыми у меня до этого не было опыта.
Долго не сомневался при выборе, Single Activity (звучит громко, учитывая всего 2 экрана в приложении), экраны на Fragment. Compose показался слишком экспериментальным, отпугнул потенциально большими ресурсами на его параллельное освоение.
Koin. Потому что простой и было интересно попробовать что-то кроме dagger. На работе пользуемся Hilt, но даже он показался чересчур сложным для такого простого проекта.
Рисование
View и Canvas. Смотрел в сторону SurfaceView но после непродолжительных экспериментов решил, что и производительности обычной View должно хватить. Естественно с учетом того, что на канве должны отрисовываться полностью готовые объекты, чтобы ничего не создавалось в методе onDraw.
Сборка
В качестве эксперимента перевел все билд скрипты на Kotlin. Для удобства управления версиями запилил builsSrc.
Тестирование
JUnit для тестов. По плану должно быть много юнит-тестов.
Реализация
Модуль File Reader. Самый простой платформенно зависимый модуль. Все, что он делает — читает файл в список строк.
Модуль Syntax Parser. Gerber-файл представляет собой текстовый файл, описывающий поток gerber команд. Более подробно про Gerber вот тут. Как правило одна команда занимает одну строку. Поэтому было решено читать файл в список строк, и дальше работать с ним, используя регулярные выражения для парсинга конкретных команд. Учитывая относительно большое количество команд, хотелось сделать их последующую обработку в потоке удобной, т.е. без огромного условного оператора, чтобы команды сами могли позаботиться о своей обработке — тут ничего нового. Я завел вот такой интерфейс для команд:
Каждая команда реализует этот интерфейс, предоставляя номер строки в файле (необходимо для информативных сообщений о синтаксических ошибках) и реализацию единственного метода perform, в котором команда сообщает некоему CommandProcessor, что она делает.
Использование абстракций позволило выполнить модуль простой kotlin-библиотекой, без зависимостей на платформу. (спасибо дяде Бобу)
В целом работа над парсером была не сильно сложной, но довольно рутинной. И таки осложнялась тотальным несоблюдением спецификации Gerber разработчиками САПР’ов (не буду показывать пальцем). Самой интересным этапом в разработке парсера оказалась реализация парсинга макро шаблонов — таких параметризованных моделей, с определениями кастомных графических примитивов и переменными с выражениями внутри. Вот пример описания макро шаблона:
Тут пришлось вспомнить реализованный когда-то на С++ парсер математических выражений, основанный на переводе в постфиксную форму и алгоритме сортировочной станции.
Модуль GraphicsProcessor. Тут уже все просто. Нужно, чтобы кто-то реализовал интерфейсы парсера, которые описывают все действия гербер команд, чтобы на выходе получить поток графических объектов или служебных объектов, меняющих настройки рисования. Интерфейс для графических объектов:
По ходу выполнения программы эти объекты дойдут до самого метода onDraw() в View. Они либо рисуют на канве графический примитив (прямая, дуга), либо добавляют готовый Path (все flash операции, контуры в регионах реализованы с помощью Path), либо меняют настройки канвы (поворот, начало координат) или пера (цвет, размер, способ заливки).
App модуль. Все остальное осталось в апп модуле, т.е. весь UI, View Model, Repository и DI.
В Ui все стандартно. На экране со списком — RecyclerView с DiffUtils и Floating button для добавления файлов. На экране с графикой — кастомная View, в которую сеттится набор графических объектов для отрисовки. Все данные экраны получают из вью моделей, которые в свою очередь берут данные из центрального репозитория. Интерфейс репозитория:
Cхема взаимодействия экранов, view model’ей и репозитория:
Что в итоге
После нескольких месяцев работы вечерами после работы и по выходным проект был завершен. Выглядит это все вот так:
Часть функционала по спецификации Gerber осталась не реализована, т.к. он либо не влияет на изображение, либо я не встречал его в реальных файлах за 9 лет работы конструктором и пока отказался от реализации (а время немного поджимало, т.к. перспектива выгореть из-за пет проекта на самом старте профессии — ну такое 🙂 ). В репозитории я отметил все эти моменты в виде небольшой roadmap в readme.
Большое спасибо тем, кто дочитал статью до конца, с радостью отвечу на вопросы в комментариях. Приветствую конструктивную критику. До встречи!
- Что такое geprufte sicherheit
- Что такое gerber файлы