|
|
|
Где почитать про графику???
|
|||
|---|---|---|---|
|
#18+
Вообще-то в настоящее время проблема такая - я рисую на канве разнообразные полигоны и не могу придумать красивый способ определения того, на каком полигоне щелкаю мышкой. Если щелкать на вершинах, то еще ладно, если же щелкать на ребрах полигонов, то становится гораздо грустнее. Где бы посмотреть решения аналогичных проблем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 06:18 |
|
||
|
Где почитать про графику???
|
|||
|---|---|---|---|
|
#18+
Если полигоны крашеные, то по цвету пиксела, в который ткнута мыжь. А если нет, то задачка далеко не тривиальная.... Но лучше всего - выпендриться с закраской. Сделать на каждый полигон дублирующий HDC и в него рисовать крашеный полигон, потом в этом HDC и смотреть, попали в цвет или не попали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 08:44 |
|
||
|
Где почитать про графику???
|
|||
|---|---|---|---|
|
#18+
Если линия (удобнее - горизонтальная или вертикальная), выпущенная из точки, пересекает ребра полигона нечетное число раз - то точка в нем, если нет - то нет. Особый случай с пересечением вершин - и как там поступали, я не помню :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 09:12 |
|
||
|
Где почитать про графику???
|
|||
|---|---|---|---|
|
#18+
2 СЕМЬ: А что такое HDC? Надеюсь, Вы не шокированы таким вопросом? 2 Shr: Придется таки перебирать все полигоны со всеми их ребрами? И решать уравнения на наличие точек пересечения с каждым ребром? Блин, вот бы еще знать, насколько быстро будет это работать на нескольких сотнях полигонов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 09:44 |
|
||
|
Где почитать про графику???
|
|||
|---|---|---|---|
|
#18+
авторА что такое HDC? Надеюсь, Вы не шокированы таким вопросом? нет, ибо авторя рисую на канве сразу навело на мысль о борланде. Люди, работающие с борландом редко и в CDC лезут, а в HDC и совсем наверно никогда... HDC - это Handle от DeviceContext'а. DeviceContext - это контект устройства. Сущность, через которую, например, идёт общение с окном. Криво сказал. Ну вобщем, через девайсконтехт можно рисововать всячески. Дык вот. Каждый раз, когда добавляется полигон, тебе надо создавать под него HDC через CreateCompatibleDC() потом в этот DC отрисовать _закрашенный_ полигон. И всё, что нужно по клику - пройтись по списку (список можно сделать сортированным, к примеру, по клику вытаскивать полигон "наверх" и на канве и в списке) и найти там первый HDC который в данной точке содержит крашеный пихел GetPixel(HDC,x,y); Потом посмотреть, какой полигон соответствует этому HDC и всё. Если пугают девайсконтехты, и слово "конва" ближе :) то можно делать тоже самое тока создавая для каждого полигона скрытую конву, в ней рисовать раскрашенный полигон и потом пробегаться по списку конв. Правда, боюсь, это будет медленнее и накладнее. Но может и нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 10:20 |
|
||
|
Где почитать про графику???
|
|||
|---|---|---|---|
|
#18+
Я бы делал это через WIN32 Regions. Только не все операционки это поддерживают (только NT) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 10:26 |
|
||
|
Где почитать про графику???
|
|||
|---|---|---|---|
|
#18+
Спасибо. Направления поисков примерно яснЫ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 13:02 |
|
||
|
Где почитать про графику???
|
|||
|---|---|---|---|
|
#18+
Sorry, но помоему вы путаете теплое с мягким. я бы делал так: создать массив в который помещать создаваемые полигоны, точнее объекты описывающие их вершины. при перерисовке тупой цикл по этому массиву и рисовать полигон. можно с виртуальным окном, так даже лучше. когда пользователь делает клик то пробегаете по массиву и определяете принадлежит ли точка клика, данному полигону, если необходимо определить принадлежность точки линии то подставьте ее координаты в уравнение прямой по двум точкам (вершины ребра) если нужно учитывать положение внутри полигона: если полигон не выпуклый разбейте его на выпуклые, а для выпыклого расчет принадлежности точки раз плюнуть, по нормалям к сторонам, точные формулы легко найти. а с определеним по цвету изврат, а если два полигона будут иметь одинаковый цвет, а если они перекрываются и хочется как в максе по клику перемещаться по оси Z и выделять их по очереди ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 14:09 |
|
||
|
Где почитать про графику???
|
|||
|---|---|---|---|
|
#18+
www.gamedev.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2004, 02:08 |
|
||
|
Где почитать про графику???
|
|||
|---|---|---|---|
|
#18+
авторя бы делал так: создать массив в который помещать создаваемые полигоны, точнее объекты описывающие их вершины. Пробема не в том, как нарисовать, а в том, как потом по клику найти. Если у тебя тока вершины и 10000 полигонов - задерёшься. автора с определеним по цвету изврат, не присовокупляйте, да не прсовокуплены будете! автора если два полигона будут иметь одинаковый цвет, А они и будут иметь один цвет, но в разных hdc. Иначе надо будет для поиска ещё и цвет помнить. автора если они перекрываются и хочется как в максе по клику перемещаться по оси Z и выделять их по очереди да запросто. Помним последний hdc и делаем поиск со следующего. Читайте внимательнее идею, которую я изложил. там _много_hdc_ авторЯ бы делал это через WIN32 Regions. Только не все операционки это поддерживают (только NT) Вот требования к регионам: Windows NT/2000/XP: Included in Windows NT 3.1 and later. Windows 95/98/Me: Included in Windows 95 and later. Хорошая идея! Тока не помню, есть там функции проверки попадания точки в регион? В принципе, можно сделать так: создать регион на точке и потом его через AND сложить - если пусто = промазали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2004, 11:13 |
|
||
|
Где почитать про графику???
|
|||
|---|---|---|---|
|
#18+
авторЯ бы делал это через WIN32 Regions. Только не все операционки это поддерживают (только NT) Вот требования к регионам: Windows NT/2000/XP: Included in Windows NT 3.1 and later. Windows 95/98/Me: Included in Windows 95 and later. [/quot] Значит, перепутал. автор Хорошая идея! Тока не помню, есть там функции проверки попадания точки в регион? В принципе, можно сделать так: создать регион на точке и потом его через AND сложить - если пусто = промазали. Функция проверки попадания точно есть : SDK PtInRegion The PtInRegion function determines whether the specified point is inside the specified region. BOOL PtInRegion( HRGN hrgn, // handle to region int X, // x-coordinate of point int Y // y-coordinate of point ); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2004, 11:35 |
|
||
|
Где почитать про графику???
|
|||
|---|---|---|---|
|
#18+
Ну значит, стало быть, всяко лучше через регионы делать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2004, 12:37 |
|
||
|
Где почитать про графику???
|
|||
|---|---|---|---|
|
#18+
http://algolist.manual.ru/maths/geom/index.php ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2004, 15:37 |
|
||
|
Где почитать про графику???
|
|||
|---|---|---|---|
|
#18+
Можно еще использовать 'теневой экран', т.е. создать дополнительный DC, связать его с большой BMP (DIB), а в нее записывать не RGB компоненты цвета, а идентификатор кривой (если использовать 32bit DIB, то хватит). --- С уважением, Dubrov. P.S. Такой метод я использовал еще на ZX-Spectrum в 1997году, так что прошу не материть, это просто мысль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2004, 12:56 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32686822&tid=2033983]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
52ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 332ms |

| 0 / 0 |
