Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];

Вниз

Как извлечь многоугольник из структуры 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.043 c
14-1106739159
ПЛОВ
2005-01-26 14:32
2005.02.13
Чем открыть *.LDF и *.MDF


4-1103981421
moor38
2004-12-25 16:30
2005.02.13
WinNT как "подвесить"


1-1106988265
Hadroran
2005-01-29 11:44
2005.02.13
SYSDBA --> masterkey


8-1098892129
Waveman
2004-10-27 19:48
2005.02.13
Разложение цифрового звука на колебания


9-1090498776
Evgeniy_K
2004-07-22 16:19
2005.02.13
Ошибка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский