合并核心图形中的路径?
我画了两个重叠的圆圈。我希望能够填充和抚摸它们作为合并的新形状。合并核心图形中的路径?
此刻,我创建了一次路径序列,对它进行描边,然后创建它的一个副本,填充它,并将两个相同的路径添加到彼此的顶部,以便它们显示为单个形状。有更好的方法还是这样好?
更新:这里是一个示例代码:
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);
正如你所看到的,我创建原始路径的副本,并绘制在上面没有中风,所以最后它看起来像一个统一的形状。有没有办法避免创建重复?
有没有办法避免创建重复?
是的:只是不要创建它。
核心图形中的路径对象是路径,没有别的。它们没有颜色,没有图案,没有填充或笔画属性,没有任何东西 - 只有由moveto,lineto,curveto和closepath段组成的子路径。
填充颜色,描边颜色,线条宽度等都是上下文中图形状态的所有属性。当前路径也是上下文的属性(但不是gstate的属性)。
当您向上下文添加路径时,就是这么做的:将路径对象中的子路径添加到上下文中的当前路径中。原始路径对象保持不变;它没有图形状态,即使是这样,“从路径到上下文添加子路径”操作也会更改上下文,而不是路径对象。
类似地,填充或抚摸上下文的当前路径仅重置上下文的当前路径;它不会更改您可能用于构建该路径的任何路径对象。如果是这样,复制路径时会太迟,因为原始文件已经被更改 - 但它不会,因此复制路径是不必要的。
因此,只需将两个路径对象添加到当前路径。
很好的解释。我绝对没有想到这些条款。谢谢! – anna 2010-08-23 00:41:26
那么,你想要两个圆圈的联合,对吧? (见http://imgur.com/med3v。)你想要他们都填充和抚摸?请将您当前的代码编辑到您的问题中;我怀疑你正在做的工作比你需要的多,但要确保并能够明确指出。 – 2010-08-21 07:07:04
我已经添加了一些代码。请参阅上文。 – anna 2010-08-22 01:05:10