Thanks, Simon!

On Sun, Oct 14, 2012 at 8:59 PM, Simon Urbanek
<simon.urbanek@r-project.org>wrote:

> Paul,
>
> On Oct 14, 2012, at 2:04 PM, Paul Johnson wrote:
>
> > Simon, I wonder if you can clarify/expand on the following statement you
> > made: "Probably the easiest way would be to simply let Cocoa Quartz
> create
> > the view and grab it for yourself."
> >
>
> What I meant is that if your app is embedding, then you could simply grab
> the QuartzCocoaView that R creates (it is the content view of the window
> that R creates over which your app has control) and plug it wherever you
> want it. That would be a bit of a hack, since you let R do the dirty work
> and grab the result, but it's the easiest to code. The only drawback is
> that you cannot subclass QuartzCocoaView in that case (because it is
> already created at that point). For a more clean solution (that allows
> arbitrary subclassing) see below.
>
>
> > I have a simple test program that uses REngine and that calls R with a
> > sequence of statements like
> > s1 = [re executeString:@"setwd(\"~/Desktop/Test/\")"];
> >
> > I'm having a problem with a 'plot' command:
> >
> > s1 = [re executeString:@"plot(diff(log(ABCD)))"];
> >
> >
> > The plot output appears in a new window, and I want it to appear in a
> view
> > within the main program window.
> >
> >
> > So, I need to tell R where I want the output to go.
> >
> >
> > Can I establish in Interface Builder a connection to my NSView to
> > accomplish this?
> >
> >
> > Or perhaps I need to make some sort of call to R after activating it in
> > the awakeFromNib method (to establish the output 're-routing')?
> >
>
> The initiative comes from R because that is how the devices are created.
> You can use the Quartz API to create your own back-end, just like qdCocoa
> does - see
> https://svn.r-project.org/R/trunk/src/library/grDevices/src/qdCocoa.m
> You can modify quartzWindowWithRect: to use your window (the above code
> just creates a new NSWindow and a new QuartzCocoaView) or do whatever you
> want to - e.g, fetch an existing view or so. Note that the device creation
> is initiated from the R side, so if you use XIB to create a view, it won't
> become a device until R calls the a Quartz constructor (if you are
> embedding, you can use ptr_QuartzBackend to re-define the back-end to point
> to your code).
>
> I have put a small demo in
> http://svn.rforge.net/osx/trunk/RDemo/
> which illustrates how to write your own Quartz backend. It's ugly and very
> bare-bones since I just hacked it quickly together from current R sources
> (don't even try to use multiple devices for example), but it should give
> you an idea.
>
> Cheers,
> Simon
>
>

	[[alternative HTML version deleted]]

