From noel.mulvihill at btinternet.com  Thu Sep 25 06:06:08 2008
From: noel.mulvihill at btinternet.com (Noel Mulvihill)
Date: Thu, 25 Sep 2008 05:06:08 +0100
Subject: [Rd] C++ & R:  Displaying a lattice graphic using D Com
Message-ID: <000001c91ec4$0b61c570$4e01a8c0@Diana>

Dear list members,

When I modify the MFC sample (using the statconnector graphics device) to
show a lattice graph in the Active X control (actually the wireframe from
http://addictedtor.free.fr/graphiques/graphcode.php?graph=40  ) the program
runs without generating any errors, but the data-driven part of the plot
does not display.  The bounding box is displayed, but not the axes or data
within it.  The same code executes perfectly when typed directly into R, so
this is an issue with my code.

Sometimes the plot 'flickers' into view or partial view very briefly, before
execution has completed.  However, once the code has executed no plot is
visible.

I am using visual C++ - and I have copied out the code at the end of this
note.

I would be grateful for any advice.

Kind regards

Noel

void CMFCClientDlg::OnTest() 
{
  BeginWaitCursor();
  IStatConnector lConnector;
  IDispatch* lCharDev = NULL;
  IDispatch* lGfxDev = NULL;

 
if(FAILED(m_CharDev.GetControlUnknown()->QueryInterface(IID_IDispatch,(LPVOI
D*) &lCharDev))) {
    MessageBox("Error querying Dispatch from Character Device");
    return;
  }
 
if(FAILED(lConnector.CreateDispatch(_T("StatConnectorSrv.StatConnector"))))
{
    MessageBox("Error creating StatConnectorSrv");
    return;
  }
  lConnector.Init(_T("R"));
  lConnector.SetCharacterOutputDevice(lCharDev);
  lConnector.AddGraphicsDevice(_T("Gfx"),m_GraphDev.GetGFX());
  lConnector.EvaluateNoReturn(_T("require(lattice)"));
  lConnector.EvaluateNoReturn(_T("x <- seq(-pi, pi, len = 20)"));
  lConnector.EvaluateNoReturn(_T("y <- seq(-pi, pi, len = 20)"));
  lConnector.EvaluateNoReturn(_T("g <- expand.grid(x = x, y = y)"));
  lConnector.EvaluateNoReturn(_T("g$z <- sin(sqrt(g$x^2 + g$y^2))"));
  lConnector.EvaluateNoReturn(_T("plot(wireframe(z ~ x * y, g, drape = TRUE,
aspect = c(3,1), colorkey = TRUE))"));

  lConnector.Close();

  EndWaitCursor();
}


[Rd] C++ & R: Displaying a lattice graphic using D Com
Noel Mulvihill