使用模式生成时访问 cairo_path_t

Access cairo_path_t when generated using a pattern

我很感兴趣在开罗画各种路径。然后通过 cairo_path_t 和 cairo_path_data_t 访问这些路径以供 pango 使用。当我使用模式时,这会成为一个问题。例如,以下代码效果很好。

   cairo_surface_t* pat_surf = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 2 * 500, 1000);
        cairo_t* pat;
    
        if (pat_surf)
            pat = cairo_create(pat_surf);
    
    cairo_translate(pat, amp, line_width);
    cairo_move_to(pat, 0, 0);
    cairo_line_to(pat, 500, 500);
    cairo_translate(pat, -500, 0);

我可以使用 pat 访问路径。但是,如果我将其用作重复模式。路径丢失了。

cr = cairo_create(result_surface);
cairo_pattern_t* pattern1 = cairo_pattern_create_for_surface(pat_surf);
cairo_pattern_set_extend(pattern1, CAIRO_EXTEND_REPEAT);
cairo_translate(cr, 200, 400);
cairo_set_source(cr, pattern1);
cairo_translate(cr, -200, -400);

我无法使用 cr 访问任何路径。作为测试,如果我添加一个矩形来定义 window,则只有 window 路径可见。重复模式消失。

cairo_rectangle(cr, 0, 200, 1000, 400);

知道我做错了什么吗?

cairo_path_t 代表路径。但是,您的代码包含这一行:

cairo_set_source(cr, pattern1);

来源与路径不同。因此,当然更改源不会更改路径。

有点不同:

  • 来源定义了用于绘图的“颜色”,其中“颜色”在引号中,因为它也可以是渐变甚至整个表面。
  • 路径定义了源的哪些部分用于绘图。

请参阅 https://www.cairographics.org/tutorial/#L3source and https://www.cairographics.org/tutorial/#L3path(也许还有整个教程,因为我 link 的部分有点密集)。