Re: Copying Pads

From: Valery Fine (fine@bnl.gov)
Date: Sun Oct 11 1998 - 03:04:21 MEST


On 10 Oct 98 at 15:20, Mark C. Szigety wrote:


>   quick question.  i have a pad in which i have drawn a figure (in
>   this
> case, the 2-D layout of a detector).  i would like to draw other
> figures on top of this detector (specifically, trajectories). 
> however, i would like to draw them one at a time and, thus, every
> time i hit a button to draw the next event, i want the old event
> erased, but the original picture of the layout to remain where it
> was.  is there a quick way to do this?  i just don't want to redraw
> the layout every time a user wants to display a new event.  i can
> think of some solutions, but they are all memory intensive. any
> suggestions?

  It is very way ROOT works.
  I'd like to remind ROOT user. the TObject::Draw() usually just 
append the pointer to your object to the list of the primitive of the 
current TPad. The "painting" is to provide by TObject::Paint() 
method. This method is called by TPad::Update for all modified
object on its "list of primitives". 

  Update() method is either called "by hand" or by several other 
occasions. For example the user press "Enter" key finishing his/her 
macro, when user Resize window with some other "window" events as 
well.

  For you this means if you Remove your previous object from the list 
of the TPad primitives and call <your_new_object>::Draw() with any 
next "Pad" event" you will get the picture reflecting the current 
status of the TPad "list of the primitives". Sure every thing will 
be recalculated and re-painted with method Paint().

  I think the place where you can optimize things is very this 
method of your class('es). One can think about a "special user's 
customized and derived from TPad class". This way you have full 
control over TUserPad::Paint method.

  From another hand I'd like to call your attention each "standard" 
ROOT TPad works in so-called "double-buffered mode". This means there 
is a "hiden" pixmap image of each TPad anyway. During TCanvas::Paint 
all TPad pixpams are to be painted onto "the screen"

  The solution would be the "transparent" TPad background color.
Been implemented it allows creating several overlaping TPads and gain 
what you are asking about (but it costs memory anyway).

 May be Rene will supply more "direct" advice as well.


                                       Valery
=================================================================
Dr. Valeri Faine (Fine)
    -------------------          Phone: +1 516 344 7806
Brookhaven National Laboratory   FAX  : +1 516 344 4206
Bldg. 510A /STAR                 mailto:fine@bnl.gov
Upton, New York, 11973-5000      http://nicewww.cern.ch/~fine
USA
                                 
Dr. Valery Fine                  Telex : 911621 dubna su
    -----------
LCTA/Joint Inst.for Nuclear Res. Phone : +7 09621 6 40 80
141980 Dubna, Moscow region      Fax   : +7 09621 6 51 45
Russia                           mailto:fine@main1.jinr.dubna.su                              



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:34:38 MET