【问题标题】:Cairo fill a polygon with a hatch patternCairo 用填充图案填充多边形
【发布时间】:2015-02-27 00:10:16
【问题描述】:

是否可以用 cairo 填充一个带有阴影(或任意)图案的盒子或多边形,如下所示?我没有在 cairo 文档或 hackage 中找到信息。

  • cairo 有内置模式吗?
  • 填充图案有哪些功能?

我正在使用 haskell,但任何语言的 sn-p 都会有所帮助。

【问题讨论】:

  • 不是一个完整的答案,但是:也许您可以clip 要填充的形状,然后将您的图案绘制在比形状覆盖的一些易于计算的更大区域上。
  • 这似乎通过从图像创建图案然后将其平铺成形状来做类似的事情:cairographics.org/samples/imagepattern

标签: haskell gtk drawing cairo


【解决方案1】:
cairo_pattern_t *pattern = create_stipple ("lightgrey", (guchar *)stipple_data);
cairo_matrix_init_scale (&matrix, 1.0, 1.0);
cairo_pattern_set_matrix (pattern, &matrix);
some_shape = GOO_CANVAS_RECT (goo_canvas_rect_new (GOO_CANVAS_ITEM (group), 10.0, 10.0, 10.0, 10.0, "fill-pattern", pattern, "visibility", GOO_CANVAS_ITEM_INVISIBLE, NULL));
cairo_pattern_destroy (pattern);

取自我的一个宠物项目oregano @ github

还可以查看cairo API reference,它还涵盖了通用模式 API

【讨论】:

  • 顺便说一句,我在链接页面的任何地方都没有看到字符串“stipple”。
  • 什么点画?点画是通过使用手动定义的数据定义一个 8x8 大小的补丁来实现的,就像在牛至中所做的那样。 create_stipple 是一个自定义函数,与链接完全一样。
  • 您提供一个链接并将其描述为具有“点画细节”。但这显然不是这种情况,因为链接根本没有提到点画。也许您应该更改链接以指向您的图书馆的文档,或者更新链接的描述以说明您希望人们在那里找到的内容。
  • 牛至文件的链接。 cairo 模式的链接只是 cairo 已经提供的 reference