LINUX.ORG.RU

Рисование КАК в PCB, как рисовать или какие алгоритмы нужно применять?


0

2

Приветствую, сразу для примера приведу картинку http://wiki.altium.com/download/thumbnails/3080231/SamplePolygonSolid.png?ver...

Здесь у нас нарисован полигон(на нём еще один полигон -прямоугольник), дорожка на нём и пару отверстий. Может это будет странно звучать, но интересует собственно: как такое нарисовать? Не могу понять, как нарисовать скажем отверстие и пустоту вокруг него(зазор), или тоже самое с линией, как оставлять пустое место вокруг них? Наверно здесь нужно использовать какие-то алгоритмы(какие?), или делать свой алгоритм заливки полигона, чтобы он заливал не всё, а огибал линии, отверстия и другие полигоны. Как такое делается, какие инструменты/алгоритмы применять, объясните на пальцах :)

★★★★★

Последнее исправление: xterro (всего исправлений: 1)

А теперь вменяемо перефразируй вопрос.
Что ты конкретно хочешь? Научиться раскидывать полигоны в альтиум, etc? Или интересует построение алгоритмов? Если последнее, то у полигона есть набор правил, в том числе и откат до трасс, полигон в большом смысле слова, тоже трасса и подчиняется тем же правилам.

anonymous
()
Ответ на: комментарий от anonymous

Не совсем, это просто скрин из Альтиума, для примера, чтобы было понятно что я хочу. Есть у меня canvas, на нём надо нарисовать примерно такое же(говорю примерно, потому что мне нужно понять принцип). Как, какие алгоритмы использовать? Например, нарисовал я полигон, а на нём линию. Понятно, что если я просто нарисую линию на полигоне, то получится лабуда, т.к зазора между линией и полигоном не будет. как его можно сделать? Этот же вопрос можно перенести и на другие виды примитивов: круг или другой полигон. Может быть здесь нужно использовать алгоритмы булевой алгебры для полигонов или ещё что-нибудь?

xterro ★★★★★
() автор топика
Последнее исправление: xterro (всего исправлений: 1)

Мне кажется, в этом месте тупо одна дорожка плюс экранирующая заливка.

Зазор нарисовать просто. Сначала заливаешь плату, потом каждый элемент рисуешь два раза — «толстую» дорожку и отверстие, потом поверх то же самое ещё раз, но меньшего размера. Соотв. получится «пустота» вокруг.

Второй вариант это тупо прорисовывать только контур элементов нужной толщины.

Это что касается прорисовки. Но я бы сказал что самое сложное это не прорисовка, а сама разводка.

true_admin ★★★★★
()

Нарисовать толстую чёрную линию/большой чёрный круг, а на ней тонкую красную линию/малый белый и ещё более малый зелёный круг?

Или я что-то не понял?

xeiph
()
Ответ на: комментарий от true_admin

Сначала заливаешь плату, потом каждый элемент рисуешь два раза — «толстую» дорожку и отверстие, потом поверх то же самое ещё раз, но меньшего размера. Соотв. получится «пустота» вокруг.

А это мысля :)

xterro ★★★★★
() автор топика
Ответ на: комментарий от true_admin

ОМГ. В любом CAD'е есть правила разводки. Полигоны проливаются автоматом в соответсвии с правилами по зазорам, отступам и т.п. Для исключения заливки есть группа слоев запрета, любая фигура на котором, будет преградой для полигона и которую он объедет по своим правилам по зазорам и отступам.

nand
()
Ответ на: комментарий от xterro

Мда, поставь уже посмотреть что-то готовое. Еще раз, если с первого раза не доходит, в свойствах полигона, задаются откаты от элементов ПП, по этим свойствам видоизменяется полигон. Правила задаются разработчиком по нормам производства ПП, отсюда и танцуй.
Держи примерчик, откат жестко задан в данном случае, но ничто не мешает написать более продвинутое правило в правилах трассировки. https://dl.dropboxusercontent.com/u/3314382/backoff.JPG

anonymous
()

Ещё раз уточню, вопрос не про то как работать в какой-бы то ни было программе, меня интересует алгоритмическая сторона вопроса :)

xterro ★★★★★
() автор топика
Ответ на: комментарий от true_admin

Сейчас понял такую вещь, каким цветом рисовать ту самую «пурвую» толстую линию? Прозрачным цветом её не нарисуешь, тогда её просто не будет видно на полигоне. цветом фона тоже не нарисовать, потому как, что будет если скажем, под этим полигоном лежит другой, с другим цветом, или этот «верхний» полигон, будет перекрывать нижний не полностью, а с переходом, т.е с краю. Тогда цвет, этой толстой линии должен быть, в одном месте равен цвету нижнего полигона, а вдругом месте, цвету фона, на котором оба этих полигона лежат )

xterro ★★★★★
() автор топика
Ответ на: комментарий от xterro

меня интересует алгоритмическая сторона вопроса :)

Я бы начал смотреть в сторону cairo. Потом куда-нибудь в сторону геометрических ядер (http://en.wikipedia.org/wiki/ACIS, как пример).

i-rinat ★★★★★
()
Ответ на: комментарий от xterro

каким цветом рисовать ту самую «пурвую» толстую линию?

Лучше сначала использовать точные алгоритмы, а уже потом растеризовать.

i-rinat ★★★★★
()
Ответ на: комментарий от true_admin

Нет далеко не так как ты думаешь. Практически все кады рисуют в векторе. Полигон замкнутое пространство, очерченное контуром, внутри заштрихованное линиями одного или двух направлений. Контур полигона имеет низший приоритет и отступает от элементов трассировки. Полигон пересчитывается каждый раз при изменении трассировки в районе его границ. Альтиум неудачный объект, для рассмотрения потрохов, в пкаде возможно хранение файлов в текстовом виде, там куда наглядней.

anonymous
()
Ответ на: комментарий от xterro

что будет если скажем, под этим полигоном лежит другой, с другим цветом

А разве так бывает?

Если бывает, то разбей картинку на слои и рисуй прозрачным.

xeiph
()
Ответ на: комментарий от xeiph

Конечно бывает. Вот представь, у тебя двухслойная печатная плата, слой снизу и слой сверху. Оба видимы. Текущим слоем, на котором ты рисуешь, является верхний :)

xterro ★★★★★
() автор топика
Ответ на: комментарий от xterro

Я просто подумал, что бессмысленно так рисовать, а не на соседних картинках, потому что всё равно ничего видно не будет.

xeiph
()
Ответ на: комментарий от xterro

И где у тебя нестыковка? Слои разных цветов, если сделал одинаковых, то ССЗБ. Рабочий слой наверху, остальные снизу в порядке приоритета в конкретном проекте.

anonymous
()
Ответ на: комментарий от anonymous

Добавлю самому себе, даже не один слой наверху, а стек слоев, но это уже конкретная реализация конкретного када.

anonymous
()
Ответ на: комментарий от anonymous

Нестыковка в следующем: чтобы нарисовать линию с зазором предлагается сначала нарисовать толстую линию «цветом фона» а потом на ней, уже основным цветом(соответствующим цвету слоя) нарисовать саму линию. Получится вроде как то что нужно. Так? Так. Теперь представим, что под текущим полигоном, на котором мы рисуем эту самую толстую линию лежит другой полигон(другого цвета). Каким цветом тогда делать эту самую толстую линию? Вроде как напрашивается ответ: цветом нижнего полигона, но это проканает только в случае, если эта сама толстая линия полностью «вписывается по габаритам» в этот полигон, и ни один её край не выступает за него. А если выступает, как тогда быть? Цвет линии же мы устанавливаем перед её отрисовкой. Надеюсь понятно объяснил? :)

xterro ★★★★★
() автор топика
Последнее исправление: xterro (всего исправлений: 1)

kicad разве такое не умеет?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от true_admin

Да элементарно работает: сначала строим маску, а потом начинаем заливать. Алгоритм заливки дать или сам нагуглишь?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от xterro

Да никаким цветом. Кады работают в векторе, считается матмодель, потом отрисовывается растр.

anonymous
()
Ответ на: комментарий от anonymous

Во, про это поподробней. Что имеется ввиду под матмоделью, как она считается и как отрисовывается? )

xterro ★★★★★
() автор топика
Ответ на: комментарий от xterro

Гугли векторная графика. Похоже багажа у тебя маловато и потому начни с азов.

anonymous
()
Ответ на: комментарий от xterro

А что там непонятного? Строишь маску (если у тебя слой один — тупо в маске фигачишь "единички" там, где проходят дорожки, если слоев несколько — проходишься по всем ним в соответствии с видимостью и прочим), делаешь диляцию на нужное количество пикселей (чтобы промежутки были), а далее пробегаешься по ненулевым пикселям маски каким-нибудь алгоритмом закраски связанных областей.

Другой вариант — маску прокоррелировать с кружочком нужного диаметра, бинаризовать по заданному порогу и инвертировать.

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

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Кажется начинает складываться в голове картинка. Итак, два шага: формируем маску(на которой рисуем наши линии, кружки и полигоны в увеличенном масштабе). Накладываем эту маску на полигон и заливаем, после чего, уже отрисовываем все остальные линии и куржочки, они как раз получатся отрисованными в местах, где нет заливки )

xterro ★★★★★
() автор топика
Ответ на: комментарий от xterro

Набросков CAD? Если так, то изучи конечную сторону, т.е. что должно быть на выходе, тогда в голове уложится зачем вектор.

anonymous
()
Ответ на: комментарий от nand

Заливку без растровой маски ты запаришься делать! А так — растеризуешь с некоторым квантом (скажем, 0.05мм), заливаешь, векторизуешь края.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Не спорю, про это я в курсе. Некорректно выразился

nand
()
Ответ на: комментарий от Eddy_Em

А мужики-то не знают. Расскажи это адобу.
Не обижайся :) но не делают растровые операции, лишняя сущность.

anonymous
()
Ответ на: комментарий от anonymous

И сколько времени займет векторная заливка? Это же жесть! Вместо того, чтобы тупо перебирать пиксели, тебе придется искать ближайшие границы.

Eddy_Em ☆☆☆☆☆
()

Наверно здесь нужно использовать какие-то алгоритмы(какие?)

Как тут уже заметили какие либо растровые алгоритмы в кад не применимы. Нужно получить контура всего - заливок (с вычтенными отверстиями, дорожками, отступами), отверстий, дорожек, отступов от дорожек и просто всё нарисовать любым способом. Я для подобного использую тесселятор из GLU

zamtmn ★★
()

21 век. Перебираем пиксели, заливка полигонов.

Рисуй OpenGL'ом, что тут думать?

anonymous
()
Ответ на: комментарий от Eddy_Em

Время тут не важно, важен конечный результат, для промышленных плоттеров и станков с ЧПУ, нужен маршрут движения. И тут, о чудо, нужна векторная графика. И заливка полигонов линиями перестает быть чем-то необычным.

anonymous
()
Ответ на: комментарий от zamtmn

Треугольник для ЧПУ сложная фигура, которую придется разбивать на примитивы. Зачем лишние сущности? Рисовать на экране удобно, я не спорю, применять в конечном результате нет.

anonymous
()
Ответ на: комментарий от anonymous

Набросков рисования линий, полигонов, масштабирования, привязки к сетке и т.п

xterro ★★★★★
() автор топика
Ответ на: комментарий от zamtmn

Тебе придется делать лишние вычисления. Впрочем современные мощности позволяют, но оверхед есть оверхед.

anonymous
()
Ответ на: комментарий от xterro

Что за тесселятор, для чего нужен?

разбивка сложных контуров на треугольники для последующей отрисовки

zamtmn ★★
()
Ответ на: комментарий от zamtmn

Пожалуй соглашусь, да и покрутить плату в 3д приятно.
Но ТС пытается подойти к CAD не с того конца. Основа любой CAD - матмодель, без понимания этого на выходе будет нерабочий велосипед.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.