Главная страница
    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.46 MB
Время: 0.004 c
15-1248550533
Эстет
2009-07-25 23:35
2009.09.27
Футболки?


2-1248330602
JohnKorsh
2009-07-23 10:30
2009.09.27
Как средствами Dilphi создать точку восстановления?


6-1207242431
Виталий Гаврилов
2008-04-03 21:07
2009.09.27
Проблема с GetConnect


1-1217825859
TNT
2008-08-04 08:57
2009.09.27
OleContainer и поток


2-1248345894
Bruth
2009-07-23 14:44
2009.09.27
Да вы сами не знаете ответа





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