Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

создание Regions [D6, WinXP]


Sergey Kaminski ©   (2004-08-06 14:26:00) 

Пишу специализированный векторный редактор. Второй день бьюсь над принципиальным разрешением такой задачи.
Необходимо получить регионы (Regions, HRGN) графических объектов для проверки «попадания» в них точки функцией PtInRegion.
Для объектов Rectangle, Ellipse, Polygon задача решается просто.

Вопрос: как можно получить координаты описаного полигона (или готовый Region) для объектов «строка», выводимых на DC с заданными параметрыми. Добавлю, что строки могут выводится под углом, с нестандартным межсимвольным расстоянием т.е., не обязательно полученный регион может быть описан структорой Rect. Это может бать и «наклонный прямоугольник".

Пока придумал 2 решения задачи, оба достаточно «кривые».

Посоветуйте какие-нибудь идеи.

Спасибо за внимание.


Sergey Kaminski   (2004-08-06 15:37:00) [1]

wicked ©   (06.08.04 15:28) [5]

Спасибо за доброе участие :)

Да, видимо, никакой стандартной функции для этого дела не приспособить. Воспользуюсь запасным вариантом, который Вы описали. Я его уже начал клепать, потом решил остановиться и "помучать" форумцев ;)

-----------------------------------------------------
Меня смущает вот что. Если вы видели картинку, Windows сама успешно справляется с такой задачей, т.е. подложку цветом текущего Brush закрашивает правильно,под углом. Вот и напрашивалось подозрение, что такой расчет мог быть выведен в какой-нибудь WinAPI. Однако, видимо, пожадничали ;-)

Еще раз спасибо.


wicked   (2004-08-06 15:28:00) [2]

> Sergey Kaminski [4]
именно то... но глядя на картинку, передумал такое советовать... :)
последние 20 минут я усердно искал исходник, поскольку делал такое - екзешка сохранилась.... но увы...
поэтому поясняю на пальцах:
1. находим ширину-высоту строчки - w и h... получим два вектора - vx = (w, 0), vy = (0, h)
2. вертим эти два вектора на необходимый угол... точно не помню, нужно ли менять знак угла - подбирал экспериментально, поскольку не силен в математике... ;)
3. считаем заветные 4 точки:
1-я - опорная точка (pt1), откуда мы строку TextOut'ом выводили,
2-я - pt2 = pt1 + vx,
3-я - pt3 = pt2 + vy,
4-я - pt4 = pt3 - vx
4. строим регион через CreatePolygonRgn....

удач...


Sergey Kaminski   (2004-08-06 14:52:00) [3]

wicked ©   (06.08.04 14:39) [2]

Или вы предлагаете "сканировать" битмап попиксельно, вырезая "прозрачный" прозрачные пикселы из прямоугольного региона посредством CombineRegion? Или что-то другое?


Sergey Kaminski   (2004-08-06 14:48:00) [4]

wicked ©   (06.08.04 14:39) [2]

Через path как раз сейчас и делаю, выходит весьма нехорошо.

По поводу второго решения: примерная схема?

Образец того, что мне нужно получить http://www.sergeykaminski.narod.ru/TextStringImage.jpg
Картинка маленькая, можно смотреть :) Красным закрашено то, что мне нужно получить.


wicked   (2004-08-06 14:39:00) [5]

решение 1: читаем о path'ах... единственное замечание от меня - далеко не со всемишрифтами работает....
решение 2: пишем в битмап и переводим его в region...


Sergey Kaminski   (2004-08-06 14:29:00) [6]

извините,забыл тэг закрыть, видимо.


Наверх

Титульная страница Поиск, карта сайта Написать письмо