2010-08-21 77 views
2

我画了两个重叠的圆圈。我希望能够填充和抚摸它们作为合并的新形状。合并核心图形中的路径?

此刻,我创建了一次路径序列,对它进行描边,然后创建它的一个副本,填充它,并将两个相同的路径添加到彼此的顶部,以便它们显示为单个形状。有更好的方法还是这样好?

更新:这里是一个示例代码:

CGMutablePathRef path = CGPathCreateMutable(); 

CGContextSetStrokeColorWithColor(theContext, strokeColor.CGColor); 
CGContextSetLineWidth(theContext, 2); 
CGContextSetFillColorWithColor(theContext, fillColor.CGColor); 

CGRect rect1 = CGRectMake(0,0, mySize*0.6, mySize*0.6); 
CGRect rect2 = CGRectMake(mySize*0.4,0, mySize*0.6, mySize*0.6); 

CGPathAddEllipseInRect(path, NULL, rect1); 
CGPathAddEllipseInRect(path, NULL, rect2); 

CGContextAddPath(theContext, path); 
CGContextDrawPath(theContext, kCGPathFillStroke); 

CGPathRef pathFill = CGPathCreateCopy (path); 
CGContextAddPath(theContext, pathFill); 
CGContextDrawPath(theContext, kCGPathFill); 

CGPathRelease(path); 
CGPathRelease(pathFill); 

正如你所看到的,我创建原始路径的副本,并绘制在上面没有中风,所以最后它看起来像一个统一的形状。有没有办法避免创建重复?

+0

那么,你想要两个圆圈的联合,对吧? (见http://imgur.com/med3v。)你想要他们都填充和抚摸?请将您当前的代码编辑到您的问题中;我怀疑你正在做的工作比你需要的多,但要确保并能够明确指出。 – 2010-08-21 07:07:04

+0

我已经添加了一些代码。请参阅上文。 – anna 2010-08-22 01:05:10

回答

3

有没有办法避免创建重复?

是的:只是不要创建它。

核心图形中的路径对象是路径,没有别的。它们没有颜色,没有图案,没有填充或笔画属性,没有任何东西 - 只有由moveto,lineto,curveto和closepath段组成的子路径。

填充颜色,描边颜色,线条宽度等都是上下文中图形状态的所有属性。当前路径也是上下文的属性(但不是gstate的属性)。

当您向上下文添加路径时,就是这么做的:将路径对象中的子路径添加到上下文中的当前路径中。原始路径对象保持不变;它没有图形状态,即使是这样,“从路径到上下文添加子路径”操作也会更改上下文,而不是路径对象。

类似地,填充或抚摸上下文的当前路径仅重置上下文的当前路径;它不会更改您可能用于构建该路径的任何路径对象。如果是这样,复制路径时会太迟,因为原始文件已经被更改 - 但它不会,因此复制路径是不必要的。

因此,只需将两个路径对象添加到当前路径。

+0

很好的解释。我绝对没有想到这些条款。谢谢! – anna 2010-08-23 00:41:26