> From: "William J. Deninger" <deninger@uiuc.edu>
> To: <roottalk@hpsalo.cern.ch>
> Subject: Forcing repaints
> Date: Sat, 6 Dec 1997 11:54:28 -0600
> Hello again,
>
> How am I able to force a repaint of a canvas, pad or view inside of
> a routine. My experience is that ROOT doesn't actually update these
> until CInt has free time.
Actually TPad::Update() method does force this painting.
It is called by ROOT itself just CINT has finished the next
command line from the keyboard. (Calling macros must be regarded as a
one single command line this way). This means each "End-of-keyboard-command-line"
is replaced by ROOT with a couple of the statements
gPad->Modified();
gPad->Update();
One can call this TPad::Update() himself as well (see
tutorials/canvas.C)
So for your TEST you should replace
c1->Draw();
with
c1->Modified();
c1->Update();
Hope this helps
Valery
========================
>
// TEST ROUTINE
{
// make canvas
TCanvas *c1 = new TCanvas("c1","Positron tracks");
c1->cd();
// create TGeometry and builds nodes, etc..
Geometry *geom = new Geometry("g2trace","g2trace"); // builds TGeometry called g2trace
// Prepare data tape and data reconstruction class
BOOK b;
b.Unidaq("1125.tap");
// track level class. Contains straw chamber info and track reconstruction
HIT *hit;
//________________________________________________
geom->Draw(); // this doens't draw until TEST is finished!? // !
// Yes because Draw doesn't "paint". Draw() method just includes the pointer to
// geom into the current pad (gPad) drawing TList
===>> This is useless c1->Draw(); // What is the appropriate way of accomplishing this?
// Must be :
c1->Modified();
c1->Update();
//________________________________________________
// begining data anlysis loop
//
// retrieve record
while(hit = b.get_event())
{
printf("Calculating next track\n");
hit->Minuit(); // minimize chi2 for track
TPolyLine3D *poly = new TPolyLine3D(900, hit->xpos, hit->ypos,hit->zpos);
//________________________________________________
poly->Draw(); // again, this isn't drawn until TEST finishes // !
// Again that just includes the pointer "poly" into the current pad drawing list
==> Again it is useless. c1->Draw(); // What is the appropriate way of accomplishing this?
// Must be :
c1->Modified();
c1->Update();
//________________________________________________
}
}
Dr. Valeri Faine (Valery Fine)
------------ ------------- Phone: +41 22 767 4921
CERN FAX : +41 22 767 7155
CH-1211 Geneva, 23 mailto:fine@mail.cern.ch
Switzerland http://nicewww.cern.ch/~fine