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

Вниз

Помогите перевести код на паскаль   Найти похожие ветки 

 
Художник   (2009-07-26 03:00) [0]

Структуры уже в паскале

type
cairo_path_data_t = record
   case LongInt of
     0 : ( header : record
           _type : cairo_path_data_type_t;
           length : LongInt;
         end );
     1 : ( point : record
           x : Double;
           y : Double;
         end );
 end;
Pcairo_path_data_t = ^cairo_path_data_t;

type
cairo_path_t = record
   status : cairo_status_t;
   data : Pcairo_path_data_t;
   num_data : LongInt;
 end;
Pcairo_path_t = ^cairo_path_t;

cairo_copy_path() возвращает в Pcairo_path_t

Собсно сам код.

{
   String string = "";
   cairo_path_t* path = cairo_copy_path(platformPath()->m_cr);
   cairo_path_data_t* data;

.....

 for (int i = 0; i < path->num_data; i += path->data[i].header.length) {
       data = &path->data[i];



Вот непонятно каким образом может быть data[i]? и как можно это обойти. Единственное что приходит на ум делать сделать динамический массив и ему присвоить указатель на поле data. Попробовал. Вроде работает, но както странно. Допустим вводишь четыре точки, возвращает восемь. И поля через один чередуются со всякой чухней.

Кстати это с++?

да привожу полную процедуру может там что напутал. Хотя недолжно бы...

procedure TForm1.Button1Click(Sender: TObject);
var
 cr: Pcairo_t;
 Surfase: Pcairo_surface_t;
 dc: THandle;
 pt: Pcairo_path_t;
 data: array of cairo_path_data_t;
 x: integer;
begin
 Surfase := cairo_win32_surface_create_with_dib(CAIRO_FORMAT_ARGB32, 300, 300);

 cr := cairo.cairo_create(Surfase);
 cairo_scale(cr, 300, 300);

 cairo_set_source_rgba(cr, 1, 1, 1, 1);
 cairo_paint(cr);

 cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND);

 cairo_move_to(cr, 0, 0);
 cairo_line_to(cr, 0.8, 0.8);
 cairo_line_to(cr, 0.4, 0.8);
 cairo_line_to(cr, 0, 0);

 
/////////////////////////////////////////////////
 pt := cairo_copy_path(cr);
 setlength(data, pt.num_data);
 pointer(data) := pt.data;

 for x := 0 to pt.num_data - 1 do
 begin
 showmessage(inttostr(data[x].header.length));
   memo1.Lines.Add(floattostr(data[x].point.x) + "x" + floattostr(data[x].point.y));

   case data[x].header._type of
     CAIRO_PATH_MOVE_TO: showmessage("CAIRO_PATH_MOVE_TO");
     CAIRO_PATH_LINE_TO: showmessage("CAIRO_PATH_LINE_TO");
     CAIRO_PATH_CURVE_TO: showmessage("CAIRO_PATH_CURVE_TO");
     CAIRO_PATH_CLOSE_PATH: showmessage("CAIRO_PATH_CLOSE_PATH");
   end;
 end;
 ////////////////////////////////////////////////////

 cairo_set_source_rgba(cr, 1, 0, 1, 1);
 cairo.cairo_fill(cr);
 cairo_stroke(cr);

 cairo_destroy(cr);

 dc := cairo_win32_surface_get_dc(Surfase);
 bitblt(canvas.Handle, 0, 0, 300, 300, dc, 0, 0, SRCCOPY);

 cairo_surface_destroy(Surfase);

end;


 
TUser ©   (2009-07-26 07:12) [1]


> Вот непонятно каким образом может быть data[i]

Это указатель. Вместо массивов используется - указатель на первый элемент. То есть разумнее написать Pcairo_path_data_t (longint (data) + i * sizeof (cairo_path_data_t)) или вообще заменить на массив (но тогда, возможно, думать придется).



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

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

Наверх




Память: 0.45 MB
Время: 0.003 c
2-1248173443
Pavel
2009-07-21 14:50
2009.09.27
Перемещение Image в ScrollBox


15-1247771047
Kerk
2009-07-16 23:04
2009.09.27
Сравнение уровня жизни СССР 1980 и США 2008


15-1248807077
FF_FF
2009-07-28 22:51
2009.09.27
Парсер


1-1216348789
dreamse
2008-07-18 06:39
2009.09.27
Вопрос по ExcelXP


15-1248778053
aeore
2009-07-28 14:47
2009.09.27
GIS в Delphi





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский