Re: [ROOT] TCanvas problem with TRootEmbeddedCanvas

From: Ilka Antcheva (Ilka.Antcheva@cern.ch)
Date: Thu Jun 05 2003 - 15:57:05 MEST


Hi H.-Greg,

The solution I found is not elegant but might help for the moment:

   TFile *f = new TFile ...
   TCanvas *c = (TCanvas*)f->Get("c1");

   Int_t w = c->GetWindowWidth();
   Int_t h = c->GetWindowHeight();

   TRootEmbeddedCanvas *embed = new TRootEmbeddedCanvas(0,
                                                                  fMain, w,
h, kHorizontalFrame);
   TCanvas* canvas = new TCanvas("Empty", w, h,

embed->GetCanvasWindowId());
   embed->AdoptCanvas(canvas);

   fMain->AddFrame(embed,
                  new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));

   embed->GetCanvas()->cd();

   TObject *obj, *cobj;
   TIter next(c->GetListOfPrimitives());
   while ((obj=next())) {
          cobj = obj->Clone();

embed->GetCanvas()->GetListOfPrimitives()->Add(cobj,obj->GetDrawOption());
    }
    embed->GetCanvas()->Modified();
    embed->GetCanvas()->Update();

Best regards, Ilka
p.s. I am receiving the e-mails with a delay of several hours and you could
have already
an answer...


"H.-Gerd Rosarius" wrote:

> Hello Rooters,
>
> currently I'm going to program a small GUI application which
> imports a canvas with a histogram on it from a root-file and
> displays it on the screen.
>
> For this purpose I use the following code:
>
> // --- Code start ----------------------------------------------------
>
> // Do stuff like initialising TGMainFrame object etc.
>
> // Import canvas from root-file
> TFile* f = new TFile("/home/xxxxxx/root-files/demo.root");
> TCanvas* c = (TCanvas*) f->Get("c1");
>
> // Define a base canvas
> TGCanvas* canvas = new TGCanvas( this, 1280, 1024, kHorizontalFrame |
> kSunkenFrame);
>
> // Create embedded canvas and create root-canvas
> TRootEmbeddedCanvas* rootCanvas = new TRootEmbeddedCanvas(0,
> canvas->GetViewPort(), 800, 400, kHorizontalFrame);
> TCanvas* myRootCanvas = new TCanvas("Empty", 800, 400,
> rootCanvas->GetCanvasWindowId());
>
> // Add imported canvas to empty canvas
> myRootCanvas->SetCanvas( c );
> myRootCanvas->cd();
> myRootCanvas->Update();
>
> // Adopt canvas and set the container
> rootCanvas->AdoptCanvas( myRootCanvas );
> canvas->SetContainer( rootCanvas );
> // --- Code snippet end ---------------------------------------------
>
> Unfortunately not the imported canvas c is displayed in the application.
> The (or an) empty canvas myRootCanvas is displayed instead.
>
> Maybe it's just a beginners mistake...
>
> Any hints?
>
> Grettings
>
>    H.-Gerd
>
> P. S.: Using Root 3.05 built from source on a Debian Linux box.



This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:12 MET