TParallelCoordRange.cxx

Go to the documentation of this file.
00001 // @(#)root/treeviewer:$Id: TParallelCoordRange.cxx 20882 2007-11-19 11:31:26Z rdm $
00002 // Author: Bastien Dalla Piazza  02/08/2007
00003 
00004 /*************************************************************************
00005  * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers.               *
00006  * All rights reserved.                                                  *
00007  *                                                                       *
00008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
00009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
00010  *************************************************************************/
00011 
00012 #include "TParallelCoordRange.h"
00013 #include "TParallelCoord.h"
00014 #include "TParallelCoordVar.h"
00015 
00016 #include "TBox.h"
00017 #include "TPolyLine.h"
00018 #include "TList.h"
00019 #include "TVirtualPad.h"
00020 #include "TVirtualX.h"
00021 #include "TPoint.h"
00022 #include "TFrame.h"
00023 #include "Riostream.h"
00024 #include "TCanvas.h"
00025 #include "TString.h"
00026 
00027 ClassImp(TParallelCoordRange)
00028 
00029 //////////////////////////////////////////////////////////////////////////
00030 //                                                                      //
00031 // TParallelCoordRange                                                  //
00032 //                                                                      //
00033 // A TParallelCoordRange is a range used for parallel                   //
00034 // coordinates plots.                                                   //
00035 //                                                                      //
00036 //////////////////////////////////////////////////////////////////////////
00037 
00038 
00039 //______________________________________________________________________________
00040 TParallelCoordRange::TParallelCoordRange()
00041    :TNamed("Range","Range"), TAttLine(), fSize(0.01)
00042 {
00043    // default constructor.
00044 
00045    fMin = 0;
00046    fMax = 0;
00047    fVar = NULL;
00048    fSelect = NULL;
00049    SetBit(kShowOnPad,kTRUE);
00050    SetBit(kLiveUpdate,kFALSE);
00051 }
00052 
00053 
00054 //______________________________________________________________________________
00055 TParallelCoordRange::~TParallelCoordRange()
00056 {
00057    // Destructor.
00058 }
00059 
00060 
00061 //______________________________________________________________________________
00062 TParallelCoordRange::TParallelCoordRange(TParallelCoordVar *var, Double_t min, Double_t max, TParallelCoordSelect *sel)
00063    :TNamed("Range","Range"), TAttLine(1,1,1), fSize(0.01)
00064 {
00065    // Normal constructor.
00066 
00067    if(min == max) {
00068       min = var->GetCurrentMin();
00069       max = var->GetCurrentMax();
00070    }
00071    fMin = min;
00072    fMax = max;
00073    
00074    fVar = var;
00075    if (!sel) fSelect = var->GetParallel()->GetCurrentSelection();
00076    else fSelect = sel;
00077    
00078    SetLineColor(fSelect->GetLineColor());
00079    
00080    SetBit(kShowOnPad,kTRUE);
00081    SetBit(kLiveUpdate,var->GetParallel()->TestBit(TParallelCoord::kLiveUpdate));
00082 }
00083 
00084 
00085 //______________________________________________________________________________
00086 void TParallelCoordRange::BringOnTop()
00087 {
00088    // Make the selection which owns the range to be drawn on top of the others.
00089 
00090    TList *list = fVar->GetParallel()->GetSelectList();
00091    list->Remove(fSelect);
00092    list->AddLast(fSelect);
00093    gPad->Update();
00094 }
00095 
00096 
00097 //______________________________________________________________________________
00098 void TParallelCoordRange::Delete(const Option_t* /*options*/)
00099 {
00100    // Delete the range.
00101 
00102    fVar->GetRanges()->Remove(this);
00103    fVar->GetParallel()->CleanUpSelections(this);
00104    delete this;
00105 }
00106 
00107 
00108 //______________________________________________________________________________
00109 Int_t TParallelCoordRange::DistancetoPrimitive(Int_t px, Int_t py)
00110 {
00111    // Compute the distance to the primitive.
00112    
00113    if(TestBit(kShowOnPad)){
00114       Double_t xx,yy,thisx,thisy;
00115       xx = gPad->AbsPixeltoX(px);
00116       yy = gPad->AbsPixeltoY(py);
00117       fVar->GetXYfromValue(fMin,thisx,thisy);
00118       Int_t dist = 9999;
00119       if(fVar->GetVert()){
00120          if(xx > thisx-2*fSize && xx < thisx && yy > thisy-fSize && yy<thisy+fSize) dist = 0;
00121          fVar->GetXYfromValue(fMax,thisx,thisy);
00122          if(xx > thisx-2*fSize && xx < thisx && yy > thisy-fSize && yy<thisy+fSize) dist = 0;
00123       } else {
00124          if(yy > thisy-2*fSize && yy < thisy && xx > thisx-fSize && xx<thisx+fSize) dist = 0;
00125          fVar->GetXYfromValue(fMax,thisx,thisy);
00126          if(yy > thisy-2*fSize && yy < thisy && xx > thisx-fSize && xx<thisx+fSize) dist = 0;
00127       }
00128       return dist;
00129    } else return 9999;
00130 }
00131 
00132 
00133 //______________________________________________________________________________
00134 void TParallelCoordRange::Draw(Option_t* options)
00135 {
00136    // Draw a TParallelCoordRange.
00137 
00138    AppendPad(options);
00139 }
00140 
00141 
00142 //______________________________________________________________________________
00143 void TParallelCoordRange::ExecuteEvent(Int_t entry, Int_t px, Int_t py)
00144 {
00145    // Execute the entry.
00146 
00147    if (!gPad) return;
00148    if (!gPad->IsEditable() && entry!=kMouseEnter) return;
00149    
00150    Bool_t vert = fVar->GetVert();
00151    static Int_t pxold, pyold;
00152    static Int_t mindragged = -1; //-1:nothing dragged, 0:max dragged, 1:mindragged, 2:both dragged;
00153    Int_t plx1,plx2,ply1,ply2;
00154    
00155    Double_t xx,yy,txxmin,txxmax,tyymin,tyymax;
00156    TFrame *frame = gPad->GetFrame();
00157    xx = gPad->AbsPixeltoX(px);
00158    yy = gPad->AbsPixeltoY(py);
00159    fVar->GetXYfromValue(fMin,txxmin,tyymin);
00160    fVar->GetXYfromValue(fMax,txxmax,tyymax);
00161    if (vert) {
00162       plx1 = gPad->XtoAbsPixel(txxmin-2*fSize);
00163       plx2 = gPad->XtoAbsPixel(txxmax-2*fSize);
00164       ply1 = gPad->YtoAbsPixel(tyymin+fSize);
00165       ply2 = gPad->YtoAbsPixel(tyymax-fSize);
00166    } else {
00167       plx1 = gPad->XtoAbsPixel(txxmin+fSize);
00168       plx2 = gPad->XtoAbsPixel(txxmax-fSize);
00169       ply1 = gPad->YtoAbsPixel(tyymin-2*fSize);
00170       ply2 = gPad->YtoAbsPixel(tyymax-2*fSize);
00171    }
00172    
00173    gPad->SetCursor(kPointer);
00174    gVirtualX->SetLineColor(-1);
00175    gVirtualX->SetLineWidth(1);
00176    TPoint *p = NULL;
00177    switch (entry) {
00178       case kButton1Down:
00179          fVar->GetParallel()->SetCurrentSelection(fSelect);
00180          ((TCanvas*)gPad)->Selected(gPad,fVar->GetParallel(),1);
00181          if ((vert && yy<tyymax-fSize) || (!vert && xx < txxmax-fSize)) {     //checks if the min slider is clicked.
00182             mindragged = 1;
00183             p = GetSliderPoints(fMin);
00184             gVirtualX->DrawPolyLine(5,p);
00185             delete [] p;
00186          } else {
00187             mindragged = 0;
00188             p = GetSliderPoints(fMax);
00189             gVirtualX->DrawPolyLine(5,p);
00190             delete [] p;
00191          }
00192          gVirtualX->DrawLine(plx1,ply1,plx2,ply2);
00193          break;
00194       case kButton1Up: {
00195          Double_t min = fMin, max= fMax;
00196          if (mindragged == 1) min = fVar->GetValuefromXY(xx,yy);
00197          if (mindragged == 0) max = fVar->GetValuefromXY(xx,yy);
00198          if(fMin!=min || fMax != max) {
00199             if (min>max) {
00200                Double_t mem = min;
00201                min = max;
00202                max = mem;
00203             }
00204             fMin = min;
00205             fMax = max;
00206             gPad->Modified();
00207          }
00208          mindragged = -1;
00209          break;
00210       }
00211       case kMouseMotion:
00212          pxold = px;
00213          pyold = py;
00214          break;
00215       /*case  7: // == Button1Down + shift
00216          mindragged = 2;
00217          if ((vert && yy<tyymax-fSize) || (!vert && xx < txxmax-fSize)) mouseonmin = kTRUE;    //checks if the min slider is clicked.
00218          else mouseonmin = kFALSE;
00219          p = GetSliderPoints(fMin);
00220          gVirtualX->DrawPolyLine(5,p);
00221          p = GetSliderPoints(fMax);
00222          gVirtualX->DrawPolyLine(5,p);
00223          gVirtualX->DrawLine(plx1,ply1,plx2,ply2);
00224          if (vert) pminmax = gPad->YtoAbsPixel(tyymax-tyymin);
00225          else pminmax = gPad->XtoAbsPixel(txxmax-txxmin);
00226          break;
00227       case 8: // == Button1Motion + shift
00228          if((vert && yy > frame->GetY1() && yy < frame->GetY2()) ||
00229             (!vert && xx > frame->GetX1() && xx < frame->GetX2())){
00230             if (vert) p = GetSliderPoints(pyold);
00231             else      p = GetSliderPoints(pxold);
00232             gVirtualX->DrawPolyLine(5,p);
00233             delete [] p;
00234             if (vert) p = GetBindingLinePoints(pyold,mindragged);
00235             else p = GetBindingLinePoints(pxold,mindragged);
00236             gVirtualX->DrawPolyLine(2,p);
00237             delete [] p;
00238             if (mouseonmin) {
00239                if (vert) p = GetSliderPoints(pyold+pminmax);
00240                else      p = GetSliderPoints(pxold+pminmax);
00241                gVirtualX->DrawPolyLine(5,p);
00242                delete [] p;
00243             } else {
00244                if (vert) p = GetSliderPoints(pyold-pminmax);
00245                else      p = GetSliderPoints(pxold-pminmax);
00246                gVirtualX->DrawPolyLine(5,p);
00247                delete [] p;
00248             }
00249             if (vert) p = GetSliderPoints(py);
00250             else      p = GetSliderPoints(px);
00251             gVirtualX->DrawPolyLine(5,p);
00252             delete [] p;
00253             if (vert) p = GetBindingLinePoints(py,mindragged);
00254             else p = GetBindingLinePoints(px,mindragged);
00255             gVirtualX->DrawPolyLine(2,p);
00256             delete [] p;
00257             if (mouseonmin) {
00258                if (vert) p = GetSliderPoints(py+pminmax);
00259                else      p = GetSliderPoints(px+pminmax);
00260                gVirtualX->DrawPolyLine(5,p);
00261                delete [] p;
00262             } else {
00263                if (vert) p = GetSliderPoints(py-pminmax);
00264                else      p = GetSliderPoints(px-pminmax);
00265                gVirtualX->DrawPolyLine(5,p);
00266                delete [] p;
00267             }
00268          }
00269          pxold = px;
00270          pyold = py;
00271          break*/;
00272       case kButton1Motion:
00273          if((vert && yy > frame->GetY1() && yy < frame->GetY2()) ||
00274             (!vert && xx > frame->GetX1() && xx < frame->GetX2())){
00275             if (vert) p = GetSliderPoints(pyold);
00276             else      p = GetSliderPoints(pxold);
00277             gVirtualX->DrawPolyLine(5,p);
00278             delete [] p;
00279             if (vert) p = GetBindingLinePoints(pyold,mindragged);
00280             else p = GetBindingLinePoints(pxold,mindragged);
00281             gVirtualX->DrawPolyLine(2,p);
00282             delete [] p;
00283             if (vert) p = GetSliderPoints(py);
00284             else      p = GetSliderPoints(px);
00285             gVirtualX->DrawPolyLine(5,p);
00286             delete [] p;
00287             if (vert) p = GetBindingLinePoints(py,mindragged);
00288             else p = GetBindingLinePoints(px,mindragged);
00289             gVirtualX->DrawPolyLine(2,p);
00290             delete [] p;
00291             if (TestBit(kLiveUpdate)){
00292                Double_t min = fMin, max= fMax;
00293                if (mindragged == 1) min = fVar->GetValuefromXY(xx,yy);
00294                if (mindragged == 0) max = fVar->GetValuefromXY(xx,yy);
00295                if(fMin!=min || fMax != max) {
00296                   if (min>max) {
00297                      Double_t mem = min;
00298                      min = max;
00299                      max = mem;
00300                   }
00301                   fMin = min;
00302                   fMax = max;
00303                   gPad->Modified();
00304                   gPad->Update();
00305                }
00306             }
00307          }
00308          pxold = px;
00309          pyold = py;
00310          break;
00311       default:
00312          //cout<<"entry: "<<entry<<endl;
00313          break;
00314    }
00315 }
00316 
00317 
00318 //______________________________________________________________________________
00319 TPoint* TParallelCoordRange::GetBindingLinePoints(Int_t pos,Int_t mindragged)
00320 {
00321    // return the points of the line binding the two niddles of the range.
00322 
00323    Double_t txx,tyy,txxo,tyyo;
00324    if (fVar->GetVert()){
00325       txx = fVar->GetX();
00326       tyy = gPad->AbsPixeltoY(pos);
00327    } else {
00328       tyy = fVar->GetY();
00329       txx = gPad->AbsPixeltoX(pos);
00330    }
00331    if (mindragged==1) fVar->GetXYfromValue(fMax,txxo,tyyo);
00332    else fVar->GetXYfromValue(fMin,txxo,tyyo);
00333    
00334    TPoint *bindline = new TPoint[2];
00335    if (fVar->GetVert()) {
00336       if (mindragged==1) {
00337          bindline[0] = TPoint(gPad->XtoAbsPixel(txx-2*fSize),gPad->YtoAbsPixel(tyy+fSize));
00338          bindline[1] = TPoint(gPad->XtoAbsPixel(txx-2*fSize),gPad->YtoAbsPixel(tyyo-fSize));
00339       } else {
00340          bindline[0] = TPoint(gPad->XtoAbsPixel(txx-2*fSize),gPad->YtoAbsPixel(tyyo+fSize));
00341          bindline[1] = TPoint(gPad->XtoAbsPixel(txx-2*fSize),gPad->YtoAbsPixel(tyy-fSize));
00342       }
00343    } else {
00344       if (mindragged==1) {
00345          bindline[0] = TPoint(gPad->XtoAbsPixel(txx+fSize),gPad->YtoAbsPixel(tyy-2*fSize));
00346          bindline[1] = TPoint(gPad->XtoAbsPixel(txxo-fSize),gPad->YtoAbsPixel(tyy-2*fSize));
00347       } else {
00348          bindline[0] = TPoint(gPad->XtoAbsPixel(txxo+fSize),gPad->YtoAbsPixel(tyy-2*fSize));
00349          bindline[1] = TPoint(gPad->XtoAbsPixel(txx-fSize),gPad->YtoAbsPixel(tyy-2*fSize));
00350       }
00351    }
00352    return bindline;
00353 }
00354 
00355 
00356 //______________________________________________________________________________
00357 TPoint* TParallelCoordRange::GetSliderPoints(Double_t value)
00358 {
00359    // return the points to paint the niddle at "value".
00360 
00361    Double_t txx,tyy;
00362    fVar->GetXYfromValue(value,txx,tyy);
00363    Int_t tx[5];
00364    Int_t ty[5];
00365    if (fVar->GetVert()) {
00366       tx[0]=gPad->XtoAbsPixel(txx);
00367       tx[1]=tx[4]=gPad->XtoAbsPixel(txx-fSize);
00368       ty[0]=ty[1]=ty[4]=gPad->YtoAbsPixel(tyy);
00369       tx[2]=tx[3]=gPad->XtoAbsPixel(txx-2*fSize);
00370       ty[2]=gPad->YtoAbsPixel(tyy+fSize);
00371       ty[3]=gPad->YtoAbsPixel(tyy-fSize);
00372    } else {
00373       ty[0]=gPad->YtoAbsPixel(tyy);
00374       ty[1]=ty[4]=gPad->YtoAbsPixel(tyy-fSize);
00375       tx[0]=tx[1]=tx[4]=gPad->XtoAbsPixel(txx);
00376       ty[2]=ty[3]=gPad->YtoAbsPixel(tyy-2*fSize);
00377       tx[2]=gPad->XtoAbsPixel(txx-fSize);
00378       tx[3]=gPad->XtoAbsPixel(txx+fSize);
00379    }
00380    TPoint *slider = new TPoint[5];
00381    for(UInt_t ui=0;ui<5;++ui) slider[ui] = TPoint(tx[ui],ty[ui]);
00382    return slider;
00383 }
00384 
00385 
00386 //______________________________________________________________________________
00387 TPoint* TParallelCoordRange::GetSliderPoints(Int_t pos)
00388 {
00389    //  return the points to paint the niddle at "pos".
00390 
00391    Double_t txx,tyy;
00392    if (fVar->GetVert()){
00393       txx = fVar->GetX();
00394       tyy = gPad->AbsPixeltoY(pos);
00395    } else {
00396       tyy = fVar->GetY();
00397       txx = gPad->AbsPixeltoX(pos);
00398    }
00399    
00400    Int_t tx[5];
00401    Int_t ty[5];
00402    if (fVar->GetVert()) {
00403       tx[0]=gPad->XtoAbsPixel(txx);
00404       tx[1]=tx[4]=gPad->XtoAbsPixel(txx-fSize);
00405       ty[0]=ty[1]=ty[4]=gPad->YtoAbsPixel(tyy);
00406       tx[2]=tx[3]=gPad->XtoAbsPixel(txx-2*fSize);
00407       ty[2]=gPad->YtoAbsPixel(tyy+fSize);
00408       ty[3]=gPad->YtoAbsPixel(tyy-fSize);
00409    } else {
00410       ty[0]=gPad->YtoAbsPixel(tyy);
00411       ty[1]=ty[4]=gPad->YtoAbsPixel(tyy-fSize);
00412       tx[0]=tx[1]=tx[4]=gPad->XtoAbsPixel(txx);
00413       ty[2]=ty[3]=gPad->YtoAbsPixel(tyy-2*fSize);
00414       tx[2]=gPad->XtoAbsPixel(txx-fSize);
00415       tx[3]=gPad->XtoAbsPixel(txx+fSize);
00416    }
00417    TPoint *slider = new TPoint[5];
00418    for(UInt_t ui=0;ui<5;++ui) slider[ui] = TPoint(tx[ui],ty[ui]);
00419    return slider;
00420 }
00421 
00422 
00423 //______________________________________________________________________________
00424 Bool_t TParallelCoordRange::IsIn(Double_t evtval)
00425 {
00426    // Evaluate if the given value is within the range or not.
00427 
00428    return evtval>=fMin && evtval<=fMax;
00429 }
00430 
00431 
00432 //______________________________________________________________________________
00433 void TParallelCoordRange::Paint(Option_t* /*options*/)
00434 {
00435    // Paint a TParallelCoordRange
00436 
00437    if(TestBit(kShowOnPad)){
00438       PaintSlider(fMin,kTRUE);
00439       PaintSlider(fMax,kTRUE);
00440    }
00441 }
00442 
00443 
00444 //______________________________________________________________________________
00445 void TParallelCoordRange::PaintSlider(Double_t value, Bool_t fill)
00446 {
00447    // Paint a slider.
00448    
00449    SetLineColor(fSelect->GetLineColor());
00450    
00451    TPolyLine *p= new TPolyLine();
00452    p->SetLineStyle(1);
00453    p->SetLineColor(1);
00454    p->SetLineWidth(1);
00455    
00456    Double_t *x = new Double_t[5];
00457    Double_t *y = new Double_t[5];
00458    
00459    Double_t xx,yy;
00460    
00461    fVar->GetXYfromValue(value,xx,yy);
00462    if(fVar->GetVert()){
00463       x[0] = xx; x[1]=x[4]=xx-fSize; x[2]=x[3]=xx-2*fSize;
00464       y[0]=y[1]=y[4]=yy; y[2] = yy+fSize; y[3] = yy-fSize;
00465    } else {
00466       y[0] = yy; y[1]=y[4]=yy-fSize; y[2]=y[3]= yy-2*fSize;
00467       x[0]=x[1]=x[4]=xx; x[2]=xx-fSize; x[3] = xx+fSize;
00468    }
00469    if (fill) {     
00470       p->SetFillStyle(1001);
00471       p->SetFillColor(0);
00472       p->PaintPolyLine(4,&x[1],&y[1],"f");
00473       p->SetFillColor(GetLineColor());
00474       p->SetFillStyle(3001);
00475       p->PaintPolyLine(4,&x[1],&y[1],"f");
00476    }
00477    p->PaintPolyLine(5,x,y);
00478    
00479    delete p;
00480    delete [] x;
00481    delete [] y;
00482 }
00483 
00484 
00485 //______________________________________________________________________________
00486 void TParallelCoordRange::Print(Option_t* /*options*/) const
00487 {
00488    // Print info about the range.
00489    
00490    printf("On \"%s\" : min = %f, max = %f\n", fVar->GetTitle(), fMin, fMax);
00491 }
00492 
00493 
00494 //______________________________________________________________________________
00495 void TParallelCoordRange::SendToBack()
00496 {
00497    // Make the selection which owns the range to be drawn under all the others.
00498 
00499    TList *list = fVar->GetParallel()->GetSelectList();
00500    list->Remove(fSelect);
00501    list->AddFirst(fSelect);
00502    gPad->Update();
00503 }
00504 
00505 
00506 //______________________________________________________________________________
00507 void  TParallelCoordRange::SetLineColor(Color_t col)
00508 {
00509    // Set the selection line color.
00510 
00511    fSelect->SetLineColor(col);
00512    TAttLine::SetLineColor(col);
00513 }
00514 
00515 
00516 //______________________________________________________________________________
00517 void  TParallelCoordRange::SetLineWidth(Width_t wid)
00518 {
00519    // Set the selection line width.
00520 
00521    fSelect->SetLineWidth(wid);
00522 }
00523 
00524 
00525 ClassImp(TParallelCoordSelect)
00526 //______________________________________________________________________________
00527 /* Begin_Html
00528 <center><h2>Selections:</h2></center>
00529 <p>
00530 A TParallelCoordSelect is a specialised TList to hold TParallelCoordRanges used by TParallelCoord.
00531 <p>
00532 Selections of specific entries can be defined over the data se using parallel coordinates. With that representation, a selection is an ensemble of ranges defined on the axes. Ranges defined on the same axis are conjugated with OR (an entry must be in one or the other ranges to be selected). Ranges on different axes are are conjugated with AND (an entry must be in all the ranges to be selected). Several selections can be defined with different colors. It is possible to generate an entry list from a given selection and apply it to the tree using the editor ("Apply to tree" button).
00533 End_Html
00534 */
00535 
00536 
00537 //______________________________________________________________________________
00538 TParallelCoordSelect::TParallelCoordSelect()
00539    : TList(), TAttLine(kBlue,1,1)
00540 {
00541    // Default constructor.
00542    
00543    fTitle = "Selection";
00544    SetBit(kActivated,kTRUE);
00545    SetBit(kShowRanges,kTRUE);
00546 }
00547 
00548 
00549 //______________________________________________________________________________
00550 TParallelCoordSelect::TParallelCoordSelect(const char* title)
00551    : TList(), TAttLine(kBlue,1,1)
00552 {
00553    // Normal constructor.
00554    
00555    fTitle = title;
00556    SetBit(kActivated,kTRUE);
00557    SetBit(kShowRanges,kTRUE);
00558 }
00559 
00560 
00561 //______________________________________________________________________________
00562 TParallelCoordSelect::~TParallelCoordSelect()
00563 {
00564    // Destructor.
00565 
00566    TIter next(this);
00567    TParallelCoordRange* range;
00568    while ((range = (TParallelCoordRange*)next())) range->GetVar()->GetRanges()->Remove(range);
00569    TList::Delete();
00570 }
00571 
00572 
00573 //______________________________________________________________________________
00574 void TParallelCoordSelect::SetActivated(Bool_t on)
00575 {
00576    // Activate the selection.
00577 
00578    TIter next(this);
00579    TParallelCoordRange* range;
00580    while ((range = (TParallelCoordRange*)next())) range->SetBit(TParallelCoordRange::kShowOnPad,on);
00581    SetBit(kActivated,on);
00582 }
00583 
00584 
00585 //______________________________________________________________________________
00586 void TParallelCoordSelect::SetShowRanges(Bool_t s)
00587 {
00588    // Show the ranges niddles.
00589 
00590    TIter next(this);
00591    TParallelCoordRange* range;
00592    while ((range = (TParallelCoordRange*)next())) range->SetBit(TParallelCoordRange::kShowOnPad,s);
00593    SetBit(kShowRanges,s);
00594 }

Generated on Tue Jul 5 15:43:45 2011 for ROOT_528-00b_version by  doxygen 1.5.1