Hi, If you are anyhow spending time on this subject, please be aware of the inconvenience as demonstrated in the attached macro (test_update.C): apparently Cint doesn't know about gPad in a while-loop, whereas it does in a for-loop... Maybe connected to this is the fact that in a while-loop accessing subpads, using c1_1 for example, doesn't work. In a for loop, it does work, provided that the subpads are subpads of the current pad. See test_update2.C for an illustration. Maybe you were already aware of these limitations, but I just wanted to bring them up for completeness sake. By the way: both examples were run using root 2.23/12 on Linux. Kind regards, Marco van Leeuwen. On Wed, 31 May 2000, Fons Rademakers wrote: > We'll try to make the interface to CINT better in this respect. > > -- Fons. > > > Rutger van der Eijk wrote: > > > > Hi, > > > > Rene wrote: > > > Before using gPad, a real pad must exist. > > > Once a canvas has been instantiated, you can use gPad as before. > > > > I find this behaviour confusing. It means that in every macro I use I have > > to check if a canvas was already created. For one simple macro this is > > okay. But if I chain them I add a lot of redundant checks. Isn't it > > possible to somehome tell TRint about TCanvas by default? > > > > cheers, > > > > Rutger > > -- > Org: CERN, European Laboratory for Particle Physics. > Mail: 1211 Geneve 23, Switzerland > E-Mail: Fons.Rademakers@cern.ch Phone: +41 22 7679248 > WWW: http://root.cern.ch/~rdm/ Fax: +41 22 7677910 > {{ gROOT->Reset(); TCanvas *c1=new TCanvas("c1","Canvas #1",500,500); TH1F *h1=new TH1F("h1","Histo",100,0,1); h1->Draw(); // with a while-loop, gPad won't work Int_t i=0; while (i<1000) { i++; // A for-loop would make it work // for (Int_t i=0; i<1000;i++) { h1->Fill(gRandom->Rndm()); if (i%100==0) { printf("%d entries filled\n",i); gPad->Modified(); // this always works: // TVirtualPad::Pad()->Modified(); c1->Update(); } } }} {{ gROOT->Reset(); TCanvas *c1=new TCanvas("c1","Canvas #1",500,500); c1->Divide(1,2,0,0,0); c1->cd(1); TH1F *h1=new TH1F("h1","Histo",100,0,1); h1->Draw(); c1->cd(2); TH1F *h2=new TH1F("h2","Histo",100,0,1); h2->Draw(); TCanvas *c2=new TCanvas("c2","Canvas #2",500,500); c2->Divide(1,2,0,0,0); c2->cd(1); TH1F *h3=new TH1F("h3","Histo",60,-3,3); h3->Draw(); c2->cd(2); TH1F *h4=new TH1F("h4","Histo",100,0,1); h4->Draw(); // with a while-loop, c1_1 etc won't work Int_t i=0; while (i<1000) { i++; // A for-loop would make it work // for (Int_t i=0; i<1000;i++) { h1->Fill(gRandom->Rndm()); h2->Fill(sqrt(gRandom->Rndm())); h3->Fill(gRandom->Gaus(0,1)); h4->Fill(gRandom->Gaus(0,0.5)); if (i%100==0) { printf("%d entries filled\n",i); c1->cd(); // even in a for-loop you need these c1_1->Modified(); c1_2->Modified(); c1->Update(); c2->cd(); // even in a for-loop you need these c2_1->Modified(); c2_2->Modified(); c2->Update(); } } }}
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:27 MET