Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.13;
Скачать: CL | DM;

Вниз

Как извлечь многоугольник из структуры TEMRExtSelectClipRgn?   Найти похожие ветки 

 
Pavlik_Morozov   (2004-12-27 15:23) [0]

Уважаемые господа!
Если кто-то сталкивался с данной проблемой и знает путь её решения, поделитесь, пожалуйста!
Суть проблемы:
1. есть EMF файл, имеющий регионы, которые создавались функцией CreatePolygonRgn и выбирались SelectClipRgn;
2. при "разбиении" EMF файла по функциям имею структуру (Windows.h):
 PEMRExtSelectClipRgn = ^TEMRExtSelectClipRgn;
 {$EXTERNALSYM tagEMREXTSELECTCLIPRGN}
 tagEMREXTSELECTCLIPRGN = record
   emr: TEMR;
   cbRgnData: DWORD; { Size of region data in bytes}
   iMode: DWORD;
   RgnData: array[0..0] of Byte;
 end;

...
не могу понять, как извлечь набор TPoint"ов!?:(


 
MBo ©   (2004-12-27 16:23) [1]

function EnumProc(DC: HDC; lpHTable: PHANDLETABLE;
 EMFR: PENHMETARECORD; nObj, lpData: Integer): Integer; stdcall;
...
var
 recClip:PEMRExtSelectClipRgn;
 PRgnD:PRgnData;
...
 recClip:=PEMRExtSelectClipRgn(EMFR);
 PRgnD:=PRgnData(@recclip.RgnData);
и дальше копаешься в RgnData


 
Pavlik_Morozov   (2004-12-27 16:39) [2]

ок, спасибо!:)


 
MBo ©   (2004-12-27 16:44) [3]

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


 
Pavlik_Morozov   (2004-12-27 17:27) [4]

ясно, thanks... а нет готовых алгоритмов "сборки" единого многоугольника из заданных прямоугольников?.. или просто грубо говоря беру все точки полученных прямоугольников (мне нужна ограничивающая область в виде массива (массивов) точек) ?


 
MBo ©   (2004-12-27 17:48) [5]

нет, готового нет.
Если регион без дырок, то алгоритм достаточно прост - берем верхний прямоугольник, записываем его левые и правые точки в список. Можно вести два списка, один из них задом наперед - так будет проще потом слить. Для следующего прямоугольника смотрим координаты и если x-координата не изменилась, заменяем в списке нижнюю точку предыдущего на нижнюю точку текущего, иначе добавляем.


 
Pavlik_Morozov   (2004-12-27 18:01) [6]

большое спасибо за помощь...



Страницы: 1 вся ветка

Текущий архив: 2005.02.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.03 c
14-1106547408
Aleksandr
2005-01-24 09:16
2005.02.13
Сайты для сисадминов


4-1103639572
tradakad
2004-12-21 17:32
2005.02.13
Получение хендла приложения если нет формы


1-1106842376
Fostr
2005-01-27 19:12
2005.02.13
TRichEdit


3-1104235522
Некто
2004-12-28 15:05
2005.02.13
отсутствует свойство в IBTransaction


4-1104071573
mariya_mezenceva
2004-12-26 17:32
2005.02.13
winexec(s,sw_show) - ругается