LINUX.ORG.RU

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


0

2

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

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

★★★★★

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

Не могу понять, что подразумевается под мат.моделью? Например, программа для отрисовки PCB. Берёт файлик, в котором описана плата и рисует её. Что здесь будет являться мат.моделью?

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

Ты еще и триангулировать предлагаешь? А если там четкие окружности? Получатся те же яйца, только в профиль!

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

Видимо матмодель будет внутри твоего файлика и твоя программа должна уметь работать с этой матмоделью. Такая программа будет вьювером, не шибко часто нужная вещь, но пусть будет. Это не отменяет того, что тебе, как создающего такой вьювер, надо разбираться в конкретной матмодели описанной в файле.

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

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

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

Ты так говоришь, как будто CAD — это программа для рисования смешных непонятных картинок.

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

Да вообще пофигу чем рендрить на экран, хоть растром, хоть 3д. В растре окружность тоже еще тот уродец.

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

А если там четкие окружности?

Неважно окружности, сплайны... для отображения они станут набором точек «очень похожим» на эти окружности и сплайны. При этом ничего не мешает внутри программы продолжать работать с ними как с окружностями.

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

Это эталонный маразм. Ты считаешь, что ситуация, при которой подготовленного в каде файла недостаточно и требуется дополнительный костыль, нормальна?
Может и кады ненужны, давайте по старинке - рисовать трафареты ПП руками, писать на бумаге координаты деталей, а потом вручную набивать перфокарты.

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

Ты так говоришь, как будто CAD — это программа для рисования смешных непонятных картинок.

Это был типа прагматичный совет. Кроме того что это дает разные бонусы (3д, быстрая отрисовка, зум и скроллинг), это еще и проще чем вручную заливать полигоны

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

Тоже думал над этим, но я так понимаю, что тот-же GLU это просто инструмент для рисования, можно отрисовывать как родным, скажем Cairo.Context, а можно и с помощью OpenGL, но принципы отрисовки то остаются прежними. Т.е что так, что так придётся сначала строить маску, а потом по ней заливать(ну, применительно к моему случаю), правильно? Или рисование дорожки, что в cairo что в OpenGL это будет выглядеть примерно так:

foreach(GLine l in _Lines) {
   ctx.LineWidth = 2;
   ctx.MoveTo(l.BeginPoint);
   ctx.LineTo(l.EndPoint);
  // etc ...
   ctx.Stroke()
}
// где-нибудь тут отрисовываем отверстия
// ...

// заливка всех полигонов
xterro ★★★★★
() автор топика
Последнее исправление: xterro (всего исправлений: 1)
Ответ на: комментарий от anonymous

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

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

Что ТС там пишет мне так и непонятно. Видимо пытается вьювер смастерить.
Но какое нафик разбиение растра в каде для конечного станка, еще аппроксимацию кривых сюда припиши и потом мне это изобрази с допуском 2 сотки.

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

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

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

рисование дорожки

Смотри: у тебя есть данные о расположении дорожек, дырочек и т.п. И ты можешь по этим данным построить результирующую схему. Ну, как оно на самом деле выглядит. На твоей картинке это будет большой красный полигон с пропилом и дырочками, полигон-дорожка и белые кружки. Возможно, тебе захочется еще и подложку показать. Вот это уже и визуализируй

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

Я люблю велосипеды, да и просто интересно )

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

Лопатки турбин, части манипуляторов батискафов, да куча их как военки так и не очень. По печатным платам, когда попробуешь шаг ножек 0,15 узнаешь.

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

Лет 10 назад вручную травил платы с нормой 0,127. вполне нормально. Шаг 0,56 паяю вручную не напрягаясь, вопрос выучки и опыта. Сейчас пробник сделать дешевле, чем гробить мой день на такую фигню. Правда по РФ норму меньше 0,15 сложно в пробнике заказать.

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

принципы отрисовки то остаются прежними

Я вот написал, а потом подумал что ты OpenGL в виде API скорее всего не видел. Ну и сделал пример, как OpenGL'ом можно визуализировать такие штуки (полигоны с вырезами). Вот скриншот: http://imageshack.us/a/img12/4769/vmuh.png Здесь видно как тесселятор разбил на треугольники: http://img600.imageshack.us/img600/6735/dw1r.png

Собственно программа: http://pastebin.com/gGmrMZye

Если соберешь, можно в ней повозюкать мышкой (с зажатой кнопкой), видно будет под разными углами, колесико мыши - зум. 'w' - показывает треугольники, 'f' - залитые полигоны

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

Спасибо за пример. В принципе, я немного с OpenGL ковырялся, правда давненько. Может действительно сразу на нём всё и рисовать? надо будет подумать )

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

А что здесь думать? Кроме OpenGL и нет никаких средств полноценно 3D нарисовать. Да и для 2D он отлично годится. Только вряд ли в данном случае получится использовать тесселятор GLUT, скорее всего, придется свой писать — чтобы не тормозило.

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

Ну, изначально думал стандартный wxClientDC из wxWidgets использовать, на нём всё и рисовать. Кстати, в примере используются замкнутые контуры, а можно ли будет вместо них использовать линии? Т.е получается, что здесь я тесселяцию использую для формирования маски(пустых, не закрашенных участков), на которых потом смогу рисовать уже саму линию/дорожку?

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

OpenGL умеет рисовать только треугольники и прямоугольники, поэтому если тебе нужна сложная закрашенная фигура, нужно будет либо разбить ее на треугольники и нарисовать каждый по-отдельности, либо нарисовать прямоугольник и на него натянуть текстуру. С текстурой проще, но при изменении масштаба будут ступеньки.

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

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

тесселяцию использую для формирования маски

Тесселяция это просто разбиение на треугольники. Ты говоришь тесселятору: вот это контур, а потом перечисляешь ему вырезы в контуре. Я терминологию не знаю, вот эта здоровая красная хрень это что? Если дорожка с ней одно целое, можно сказать об этом тесселятору, он построит треугольники правильно. Если дорожка это совсем другой физический объект, конечно ее нужно рисовать отдельно (хоть линиями, хоть полигонами/треугольниками)

anonymous
()

Вот, кстати, чем еще удобен опенГЛь, так это тем, что он "сам" сделает трассировку лучей и нарисует тебе более-менее приличную картинку, будь там у тебя хоть 100 слоев!

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

«Здоровая красная хрень» это полигон, он может быть какой угодно формы. Линия на нём, это дорожка, между ней полигоном и полигоном должен быть зазор(не всегда правда, могут быть случаи, когда скажем дорожка выходит из полигона, т.е она с ним одно целое). Приведу ещё пример картинки печатной платы: http://img87.imageshack.us/img87/3853/indexwg.jpg http://api.ning.com/files/PLhzNueWlTShM7rZuHokYcjoBWm-5EoRkZKyhpxAfgXz0FpqjbK... http://waihung.net/wp-content/uploads/2011/12/fsscr000.png

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

Попробовал как тесселятор ведет себя на хитрых вырезах: http://imageshack.us/a/img27/461/b4fu.png

Треугольниками: http://imageshack.us/a/img607/5033/53vn.png

То есть можно рисовать без затей, как я и писал: сначала рисуем большой полигон, потом говорим тесселятору где вырезы. Есть неплохой шанс что все это будет нормально работать и с glu-тесселятором. Надо брать реальные платы и пробовать

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

И чтож ты все понять не можешь, ты делаешь вьювер, полигон уже готовый будет в твоем файле со всеми вырезами, тебе не надо ничего считать будет. Максимум правильно отобразить порядок слоев, при использовании гл вообще не напряжная задача будет.

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