仅获取“合并的”核心图形路径的外部路径

时间:2012-06-15 22:07:52

标签: ios xcode core-graphics quartz-2d

我在Core Graphics中创建了一个绘制心形的路径,然而,为此,我创建了一个钻石形状和2个圆圈,这个图像看起来很棒,但我只是想知道是否有可能获得来自这个CGPath / CGContext的“实际”心形。

这是绘制心脏的代码(对于任何感兴趣的人),这个形状是我想要创建的形状,因为心脏'驼峰'和尖头三角形之间的连接是平滑的:

CGPathAddEllipseInRect(heartPath, NULL, CGRectMake(0, 0, 20, 20));
CGPathAddEllipseInRect(heartPath, NULL, CGRectMake(20, 0, 20, 20));

CGPathMoveToPoint(heartPath, NULL, 37.5, 16.5);

CGPathAddLineToPoint(heartPath, NULL, 37.5, 16.5);
CGPathAddLineToPoint(heartPath, NULL, 20, 37.5);
CGPathAddLineToPoint(heartPath, NULL, 2.5, 16.5);
CGPathAddLineToPoint(heartPath, NULL, 20, 10);

CGPathCloseSubpath(heartPath);

Produces this

这段代码:

CGPathAddArc(heartPath, NULL, 10, 10, 10, M_PI, 0, false); // Left hump
CGPathAddArc(heartPath, NULL, 30, 10, 10, M_PI, 0, false); // Right hump
CGPathAddLineToPoint(heartPath, NULL, 20, 37.5); // Pointy end

CGPathCloseSubpath(heartPath);

Produces this

这是否可行且易于实施?如果是这样的话?

提前致谢!

2 个答案:

答案 0 :(得分:0)

没有公共函数来计算多个路径的并集(据我所知,也没有任何私有函数)。计算贝塞尔路径的并集是一个困难而复杂的问题。

根据您的想法,可能会有更简单的方法。您想对联合路径做什么?

答案 1 :(得分:0)

您应该通过执行以下操作来绘制单个形状,而不是绘制3种不同的形状:

CGPathAddArc(heartPath, NULL, 10, 10, 10, M_PI, 0, false); // Left hump
CGPathAddArc(heartPath, NULL, 30, 10, 10, M_PI, 0, false); // Right hump
CGPathAddLineToPoint(heartPath, NULL, 20, 37.5); // Pointy end
CGPathCloseSubpath(heartPath);

我不是肯定所有的值都是正确的,但基本上你只想绘制圆的一部分,所以使用CGPathAddArc()两次,然后一条线到尖端的点,然后关闭它