I have the following method in a category on NSBezierPath, which seems to be 
what you want, and works in the same way as -addClip:


- (void) addInverseClip
        // this is similar to -addClip, except that it excludes the area 
bounded by the path instead of includes it. It works by combining this path
        // with the existing clip area using the E/O winding rule, then setting 
the result as the clip area. This should be called between
        // calls to save and restore the gstate, as for addClip.
        
        CGContextRef    context = [[NSGraphicsContext currentContext] 
graphicsPort];
        CGRect cbbox = CGContextGetClipBoundingBox( context );
        
        NSBezierPath*   cp = [NSBezierPath bezierPathWithRect:*(NSRect*)&cbbox];
        [cp appendBezierPath:self];
        [cp setWindingRule:NSEvenOddWindingRule];
        [cp addClip];
}



--Graham




On 30/10/2012, at 12:22 AM, Roland King <r...@rols.org> wrote:

> I have a graphics context and a path and I want to clip everything inside the 
> path, ie not display it, and leave everything outside the path displayed. The 
> path is simple and doesn't cross itself, for sake of example it may as well 
> be a circle. If I start with a clip-free GC and set that circle as a clipping 
> path, I'll get the opposite, everything in the circle will show, how do I do 
> the other way around? Does it work if I set a path at the bound rect of the 
> GC plus my shape in the middle? That would seem to have two crossings to get 
> into the shape, one at the bounds of the rect, one as you cross the shape, 
> which should mean everything inside the shape is 'outside' but does a path at 
> the very extremities of the GC, or even outside it, count as 'crossed'? 
> 
> The more I think about it, the more clipping sounds hard to implement

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to