Главная страница
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.077 c
14-1106221897
Antonn
2005-01-20 14:51
2005.02.13
Тест, тест, и еще раз тест...


1-1106987309
magical_g
2005-01-29 11:28
2005.02.13
Как можно записать в нетипезированый файл массив строк.


1-1107221895
FreeAndNil
2005-02-01 04:38
2005.02.13
Зачем нужен Temp: TObject в функции FreeAndNil ?


1-1107077585
rolex
2005-01-30 12:33
2005.02.13
Как преобразовать String в PAnsiChar?


3-1105535944
Doctor Deejay
2005-01-12 16:19
2005.02.13
Как можно сделать сортировку в TTable без применения индексов?