LINUX.ORG.RU

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


0

2

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

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

★★★★★

Последнее исправление: xterro (всего исправлений: 1)
Ответ на: комментарий от 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)
Ответ на: комментарий от xterro

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

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

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

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

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
()
Ответ на: комментарий от 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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.