FROM : John C. Randolph
DATE : Sun Apr 29 11:18:14 2007
On Apr 25, 2007, at 8:48 AM, Arthur C. wrote:
> I have a window with two graph views in it. They are NSView
> subclasses of which I don't have the source code.
> I have implemented a screen capture of the view by taking the
> rectangle forming the view using
> NSRect graphRect = [self frame];
> This gives the rectangle in the coordinates of the superview. Now I
> extend the rectangle to be able to capture things just outside the
> graph view (like axis labels etc.). The screen capture can then be
> done by
> NSData * myScreenCaptureData = [[self superview]
> dataWithPDFInsideRect: captureRect];
>
> which is saved to file as PDF data.
>
> Question is how to draw the rectangle showing what part is to be
> captured (the captureRect).
> It is too large to be drawn from within the graphView. But where
> should it be done then? I have nothing but an NSWindow and the two
> graph views. So should it be done from the NSWindow? But then I
> would have to subclass the NSWindow(?)
I wrote some sample code several years ago that shows a couple of ways
to draw a selection area. You can find it at
http://developer.apple.com/samplecode/Cropped_Image/index.html
In your case, I'd use a crop marker to select the area to capture,
then use -dataWithPDFInsideRect:. You'll want to turn off the crop
marker if you're not drawing to the screen, of course. Use
[NSGraphicsContext currentContextDrawingToScreen] to determine that.
> Another question: is it necessary to do all the drawing in the
> drawRect method?
It's a really good idea to do so, especially when you're still learning.
-jcr
DATE : Sun Apr 29 11:18:14 2007
On Apr 25, 2007, at 8:48 AM, Arthur C. wrote:
> I have a window with two graph views in it. They are NSView
> subclasses of which I don't have the source code.
> I have implemented a screen capture of the view by taking the
> rectangle forming the view using
> NSRect graphRect = [self frame];
> This gives the rectangle in the coordinates of the superview. Now I
> extend the rectangle to be able to capture things just outside the
> graph view (like axis labels etc.). The screen capture can then be
> done by
> NSData * myScreenCaptureData = [[self superview]
> dataWithPDFInsideRect: captureRect];
>
> which is saved to file as PDF data.
>
> Question is how to draw the rectangle showing what part is to be
> captured (the captureRect).
> It is too large to be drawn from within the graphView. But where
> should it be done then? I have nothing but an NSWindow and the two
> graph views. So should it be done from the NSWindow? But then I
> would have to subclass the NSWindow(?)
I wrote some sample code several years ago that shows a couple of ways
to draw a selection area. You can find it at
http://developer.apple.com/samplecode/Cropped_Image/index.html
In your case, I'd use a crop marker to select the area to capture,
then use -dataWithPDFInsideRect:. You'll want to turn off the crop
marker if you're not drawing to the screen, of course. Use
[NSGraphicsContext currentContextDrawingToScreen] to determine that.
> Another question: is it necessary to do all the drawing in the
> drawRect method?
It's a really good idea to do so, especially when you're still learning.
-jcr






Cocoa mail archive

