CGPathRef到CGRects的设置

时间:2013-09-12 15:35:37

标签: macos algorithm cocoa quartz-graphics quartz-2d

我正在寻找一些算法或某种方法甚至一些参考资料,这些参考资料可以让我从CGPathRef生成一组矩形。

考虑以下情况:

在路径中添加一个矩形

CGMutablePathRef pathref = CGPathCreateMutable();
CGPathAddRect(pathref, NULL, CGRectMake(10, 10, 200, 300));
CGPathCloseSubpath(pathref);

在上面的例子中,我们只有一个矩形存储在路径中,所以当我们填充它时只绘制一个矩形,因此算法返回1个矩形。

将圆/椭圆添加到路径

CGMutablePathRef pathref = CGPathCreateMutable();
CGPathAddEllipseInRect(pathref, NULL, CGRectMake(10, 10, 500, 500));
CGPathCloseSubpath(pathref);

在这种情况下,我们将圆存储在路径中,因此当我们绘制它时,我们可以想象许多零件被填充填充,因此算法返回n个rects。

更复杂的路径

CGMutablePathRef pathref = CGPathCreateMutable();
CGPathAddRect(pathref, NULL, CGRectMake(10, 10, 200, 300));
CGPathAddEllipseInRect(pathref, NULL, CGRectMake(10, 10, 500, 500));
CGPathCloseSubpath(pathref);

等等。

在上面的问题中,我主要对填充感兴趣,可能以后我也会有中风工作。希望与填充相似的方法应该有效。

有人可以指导我如何实现这一目标吗?

1 个答案:

答案 0 :(得分:1)

查看博文Wrapping text around a shape with CoreText。其中的主要例程是copyRectangularPathsForPath:height:,它采用(几乎)任意路径并返回给定高度的矩形路径数组,以填充它。 “几乎”是因为写入时,它无法处理在同一行上需要不相交的多个矩形的路径。不过,可以扩展此代码以支持这些形状。