TPadPainter.cxx

Go to the documentation of this file.
00001 #include "TPad.h"
00002 #include "TPoint.h"
00003 #include "TPadPainter.h"
00004 #include "TVirtualX.h"
00005 #include "TImage.h"
00006 
00007 // Local scratch buffer for screen points, faster than allocating buffer on heap
00008 const Int_t kPXY = 1002;
00009 static TPoint gPXY[kPXY];
00010 
00011 
00012 ClassImp(TPadPainter)
00013 
00014 
00015 //______________________________________________________________________________
00016 TPadPainter::TPadPainter()
00017 {
00018    //Empty ctor. Here only because of explicit copy ctor.
00019 }
00020 
00021 /*
00022 Line/fill/etc. attributes can be set inside TPad, but not only where:
00023 many of them are set by base sub-objects of 2d primitives
00024 (2d primitives usually inherit TAttLine or TAttFill etc.).  And these sub-objects
00025 call gVirtualX->SetLineWidth ... etc. So, if I save some attributes in my painter,
00026 it will be mess - at any moment I do not know, where to take line attribute - from
00027 gVirtualX or from my own member. So! All attributed, _ALL_ go to/from gVirtualX.
00028 */
00029 
00030 
00031 //______________________________________________________________________________
00032 Color_t TPadPainter::GetLineColor() const
00033 {
00034    // Delegate to gVirtualX.
00035 
00036    return gVirtualX->GetLineColor();
00037 }
00038 
00039 
00040 //______________________________________________________________________________
00041 Style_t TPadPainter::GetLineStyle() const
00042 {
00043    // Delegate to gVirtualX.
00044 
00045    return gVirtualX->GetLineStyle();
00046 }
00047 
00048 
00049 //______________________________________________________________________________
00050 Width_t TPadPainter::GetLineWidth() const
00051 {
00052    // Delegate to gVirtualX.
00053 
00054    return gVirtualX->GetLineWidth();
00055 }
00056 
00057 
00058 //______________________________________________________________________________
00059 void TPadPainter::SetLineColor(Color_t lcolor)
00060 {
00061    // Delegate to gVirtualX.
00062 
00063    gVirtualX->SetLineColor(lcolor);
00064 }
00065 
00066 
00067 //______________________________________________________________________________
00068 void TPadPainter::SetLineStyle(Style_t lstyle)
00069 {
00070    // Delegate to gVirtualX.
00071 
00072    gVirtualX->SetLineStyle(lstyle);
00073 }
00074 
00075 
00076 //______________________________________________________________________________
00077 void TPadPainter::SetLineWidth(Width_t lwidth)
00078 {
00079    // Delegate to gVirtualX.
00080 
00081    gVirtualX->SetLineWidth(lwidth);
00082 }
00083 
00084 
00085 //______________________________________________________________________________
00086 Color_t TPadPainter::GetFillColor() const
00087 {
00088    // Delegate to gVirtualX.
00089 
00090    return gVirtualX->GetFillColor();
00091 }
00092 
00093 
00094 //______________________________________________________________________________
00095 Style_t TPadPainter::GetFillStyle() const
00096 {
00097    // Delegate to gVirtualX.
00098 
00099    return gVirtualX->GetFillStyle();
00100 }
00101 
00102 
00103 //______________________________________________________________________________
00104 Bool_t TPadPainter::IsTransparent() const
00105 {
00106    // Delegate to gVirtualX.
00107 
00108    //IsTransparent is implemented as inline function in TAttFill.
00109    return gVirtualX->IsTransparent();
00110 }
00111 
00112 
00113 //______________________________________________________________________________
00114 void TPadPainter::SetFillColor(Color_t fcolor)
00115 {
00116    // Delegate to gVirtualX.
00117 
00118    gVirtualX->SetFillColor(fcolor);
00119 }
00120 
00121 
00122 //______________________________________________________________________________
00123 void TPadPainter::SetFillStyle(Style_t fstyle)
00124 {
00125    // Delegate to gVirtualX.
00126 
00127    gVirtualX->SetFillStyle(fstyle);
00128 }
00129 
00130 
00131 //______________________________________________________________________________
00132 void TPadPainter::SetOpacity(Int_t percent)
00133 {
00134    // Delegate to gVirtualX.
00135 
00136    gVirtualX->SetOpacity(percent);
00137 }
00138 
00139 
00140 //______________________________________________________________________________
00141 Short_t TPadPainter::GetTextAlign() const
00142 {
00143    // Delegate to gVirtualX.
00144 
00145    return gVirtualX->GetTextAlign();
00146 }
00147 
00148 
00149 //______________________________________________________________________________
00150 Float_t TPadPainter::GetTextAngle() const
00151 {
00152    // Delegate to gVirtualX.
00153 
00154    return gVirtualX->GetTextAngle();
00155 }
00156 
00157 
00158 //______________________________________________________________________________
00159 Color_t TPadPainter::GetTextColor() const
00160 {
00161    // Delegate to gVirtualX.
00162 
00163    return gVirtualX->GetTextColor();
00164 }
00165 
00166 
00167 //______________________________________________________________________________
00168 Font_t TPadPainter::GetTextFont() const
00169 {
00170    // Delegate to gVirtualX.
00171 
00172    return gVirtualX->GetTextFont();
00173 }
00174 
00175 
00176 //______________________________________________________________________________
00177 Float_t TPadPainter::GetTextSize() const
00178 {
00179    // Delegate to gVirtualX.
00180 
00181    return gVirtualX->GetTextSize();
00182 }
00183 
00184 
00185 //______________________________________________________________________________
00186 Float_t TPadPainter::GetTextMagnitude() const
00187 {
00188    // Delegate to gVirtualX.
00189 
00190    return gVirtualX->GetTextMagnitude();
00191 }
00192 
00193 
00194 //______________________________________________________________________________
00195 void TPadPainter::SetTextAlign(Short_t align)
00196 {
00197    // Delegate to gVirtualX.
00198 
00199    gVirtualX->SetTextAlign(align);
00200 }
00201 
00202 
00203 //______________________________________________________________________________
00204 void TPadPainter::SetTextAngle(Float_t tangle)
00205 {
00206    // Delegate to gVirtualX.
00207 
00208    gVirtualX->SetTextAngle(tangle);
00209 }
00210 
00211 
00212 //______________________________________________________________________________
00213 void TPadPainter::SetTextColor(Color_t tcolor)
00214 {
00215    // Delegate to gVirtualX.
00216 
00217    gVirtualX->SetTextColor(tcolor);
00218 }
00219 
00220 
00221 //______________________________________________________________________________
00222 void TPadPainter::SetTextFont(Font_t tfont)
00223 {
00224    // Delegate to gVirtualX.
00225 
00226    gVirtualX->SetTextFont(tfont);
00227 }
00228 
00229 
00230 //______________________________________________________________________________
00231 void TPadPainter::SetTextSize(Float_t tsize)
00232 {
00233    // Delegate to gVirtualX.
00234    
00235    gVirtualX->SetTextSize(tsize);
00236 }
00237 
00238 
00239 //______________________________________________________________________________
00240 void TPadPainter::SetTextSizePixels(Int_t npixels)
00241 {
00242    // Delegate to gVirtualX.
00243 
00244    gVirtualX->SetTextSizePixels(npixels);
00245 }
00246 
00247 
00248 //______________________________________________________________________________
00249 Int_t TPadPainter::CreateDrawable(UInt_t w, UInt_t h)
00250 {
00251    // Create a gVirtualX Pixmap.
00252 
00253    return gVirtualX->OpenPixmap(Int_t(w), Int_t(h));
00254 }
00255 
00256 
00257 //______________________________________________________________________________
00258 void TPadPainter::ClearDrawable()
00259 {
00260    // Clear the current gVirtualX window.
00261 
00262    gVirtualX->ClearWindow();
00263 }
00264 
00265 
00266 //______________________________________________________________________________
00267 void TPadPainter::CopyDrawable(Int_t id, Int_t px, Int_t py)
00268 {
00269    // Copy a gVirtualX pixmap.
00270 
00271    gVirtualX->CopyPixmap(id, px, py);
00272 }
00273 
00274 
00275 //______________________________________________________________________________
00276 void TPadPainter::DestroyDrawable()
00277 {
00278    // Close the current gVirtualX pixmap.
00279 
00280    gVirtualX->ClosePixmap();
00281 }
00282 
00283 
00284 //______________________________________________________________________________
00285 void TPadPainter::SelectDrawable(Int_t device)
00286 {
00287    // Select the window in which the graphics will go.
00288 
00289    gVirtualX->SelectWindow(device);
00290 }
00291 
00292 
00293 //______________________________________________________________________________
00294 void TPadPainter::DrawLine(Double_t x1, Double_t y1, Double_t x2, Double_t y2)
00295 {
00296    // Paint a simple line.
00297 
00298    Int_t px1 = gPad->XtoPixel(x1);
00299    Int_t px2 = gPad->XtoPixel(x2);
00300    Int_t py1 = gPad->YtoPixel(y1);
00301    Int_t py2 = gPad->YtoPixel(y2);
00302 
00303    gVirtualX->DrawLine(px1, py1, px2, py2);
00304 }
00305 
00306 
00307 //______________________________________________________________________________
00308 void TPadPainter::DrawLineNDC(Double_t u1, Double_t v1, Double_t u2, Double_t v2)
00309 {
00310    // Paint a simple line in normalized coordinates.
00311 
00312    Int_t px1 = gPad->UtoPixel(u1);
00313    Int_t py1 = gPad->VtoPixel(v1);
00314    Int_t px2 = gPad->UtoPixel(u2);
00315    Int_t py2 = gPad->VtoPixel(v2);
00316    gVirtualX->DrawLine(px1, py1, px2, py2);
00317 }
00318 
00319 
00320 //______________________________________________________________________________
00321 void TPadPainter::DrawBox(Double_t x1, Double_t y1, Double_t x2, Double_t y2, EBoxMode mode)
00322 {
00323    // Paint a simple box.
00324 
00325    Int_t px1 = gPad->XtoPixel(x1);
00326    Int_t px2 = gPad->XtoPixel(x2);
00327    Int_t py1 = gPad->YtoPixel(y1);
00328    Int_t py2 = gPad->YtoPixel(y2);
00329 
00330    // Box width must be at least one pixel
00331    if (TMath::Abs(px2-px1) < 1) px2 = px1+1;
00332    if (TMath::Abs(py1-py2) < 1) py1 = py2+1;
00333 
00334    gVirtualX->DrawBox(px1,py1,px2,py2,(TVirtualX::EBoxMode)mode);
00335 }
00336 
00337 
00338 //______________________________________________________________________________
00339 void TPadPainter::DrawFillArea(Int_t n, const Double_t *x, const Double_t *y)
00340 {
00341    // Paint filled area.
00342 
00343    TPoint *pxy = &gPXY[0];
00344    if (n >= kPXY) pxy = new TPoint[n+1]; if (!pxy) return;
00345    Int_t fillstyle = gVirtualX->GetFillStyle();
00346    for (Int_t i=0; i<n; i++) {
00347       pxy[i].fX = gPad->XtoPixel(x[i]);
00348       pxy[i].fY = gPad->YtoPixel(y[i]);
00349    }
00350    if (fillstyle == 0) {
00351       pxy[n].fX = pxy[0].fX;
00352       pxy[n].fY = pxy[0].fY;
00353       gVirtualX->DrawFillArea(n+1,pxy);
00354    } else {
00355       gVirtualX->DrawFillArea(n,pxy);
00356    }
00357    if (n >= kPXY) delete [] pxy;
00358 }
00359 
00360 
00361 //______________________________________________________________________________
00362 void TPadPainter::DrawFillArea(Int_t n, const Float_t *x, const Float_t *y)
00363 {
00364    // Paint filled area.
00365 
00366    TPoint *pxy = &gPXY[0];
00367    if (n >= kPXY) pxy = new TPoint[n+1]; if (!pxy) return;
00368    Int_t fillstyle = gVirtualX->GetFillStyle();
00369    for (Int_t i=0; i<n; i++) {
00370       pxy[i].fX = gPad->XtoPixel(x[i]);
00371       pxy[i].fY = gPad->YtoPixel(y[i]);
00372    }
00373    if (fillstyle == 0) {
00374       pxy[n].fX = pxy[0].fX;
00375       pxy[n].fY = pxy[0].fY;
00376       gVirtualX->DrawFillArea(n+1,pxy);
00377    } else {
00378       gVirtualX->DrawFillArea(n,pxy);
00379    }
00380    if (n >= kPXY) delete [] pxy;
00381 }
00382 
00383 
00384 //______________________________________________________________________________
00385 void TPadPainter::DrawPolyLine(Int_t n, const Double_t *x, const Double_t *y)
00386 {
00387    // Paint polyline.
00388 
00389    TPoint *pxy = &gPXY[0];
00390    if (n >= kPXY) pxy = new TPoint[n+1]; if (!pxy) return;
00391    for (Int_t i=0; i<n; i++) {
00392       pxy[i].fX = gPad->XtoPixel(x[i]);
00393       pxy[i].fY = gPad->YtoPixel(y[i]);
00394    }
00395    gVirtualX->DrawPolyLine(n,pxy);
00396    if (n >= kPXY) delete [] pxy;
00397 }
00398 
00399 
00400 //______________________________________________________________________________
00401 void TPadPainter::DrawPolyLine(Int_t n, const Float_t *x, const Float_t *y)
00402 {
00403    // Paint polyline.
00404 
00405    TPoint *pxy = &gPXY[0];
00406    if (n >= kPXY) pxy = new TPoint[n+1]; if (!pxy) return;
00407    for (Int_t i=0; i<n; i++) {
00408       pxy[i].fX = gPad->XtoPixel(x[i]);
00409       pxy[i].fY = gPad->YtoPixel(y[i]);
00410    }
00411    gVirtualX->DrawPolyLine(n,pxy);
00412    if (n >= kPXY) delete [] pxy;
00413 }
00414 
00415 
00416 //______________________________________________________________________________
00417 void TPadPainter::DrawPolyLineNDC(Int_t n, const Double_t *u, const Double_t *v)
00418 {
00419    // Paint polyline in normalized coordinates.
00420 
00421    TPoint *pxy = &gPXY[0];
00422    if (n >= kPXY) pxy = new TPoint[n+1]; if (!pxy) return;
00423    for (Int_t i=0; i<n; i++) {
00424       pxy[i].fX = gPad->UtoPixel(u[i]);
00425       pxy[i].fY = gPad->VtoPixel(v[i]);
00426    }
00427    gVirtualX->DrawPolyLine(n,pxy);
00428    if (n >= kPXY) delete [] pxy;
00429 }
00430 
00431 
00432 //______________________________________________________________________________
00433 void TPadPainter::DrawPolyMarker(Int_t n, const Double_t *x, const Double_t *y)
00434 {
00435    // Paint polymarker.
00436 
00437    TPoint *pxy = &gPXY[0];
00438    if (n >= kPXY) pxy = new TPoint[n+1]; if (!pxy) return;
00439    for (Int_t i=0; i<n; i++) {
00440       pxy[i].fX = gPad->XtoPixel(x[i]);
00441       pxy[i].fY = gPad->YtoPixel(y[i]);
00442    }
00443    gVirtualX->DrawPolyMarker(n,pxy);
00444    if (n >= kPXY)   delete [] pxy;
00445 }
00446 
00447 
00448 //______________________________________________________________________________
00449 void TPadPainter::DrawPolyMarker(Int_t n, const Float_t *x, const Float_t *y)
00450 {
00451    // Paint polymarker.
00452 
00453    TPoint *pxy = &gPXY[0];
00454    if (n >= kPXY) pxy = new TPoint[n+1]; if (!pxy) return;
00455    for (Int_t i=0; i<n; i++) {
00456       pxy[i].fX = gPad->XtoPixel(x[i]);
00457       pxy[i].fY = gPad->YtoPixel(y[i]);
00458    }
00459    gVirtualX->DrawPolyMarker(n,pxy);
00460    if (n >= kPXY)   delete [] pxy;
00461 }
00462 
00463 
00464 //______________________________________________________________________________
00465 void TPadPainter::DrawText(Double_t x, Double_t y, const char *text, ETextMode mode)
00466 {
00467    // Paint text.
00468 
00469    Int_t px = gPad->XtoPixel(x);
00470    Int_t py = gPad->YtoPixel(y);
00471    Double_t angle = GetTextAngle();
00472    Double_t mgn = GetTextMagnitude();
00473    gVirtualX->DrawText(px, py, angle, mgn, text, (TVirtualX::ETextMode)mode);
00474 }
00475 
00476 
00477 //______________________________________________________________________________
00478 void TPadPainter::DrawTextNDC(Double_t u, Double_t v, const char *text, ETextMode mode)
00479 {
00480    // Paint text in normalized coordinates.
00481 
00482    Int_t px = gPad->UtoPixel(u);
00483    Int_t py = gPad->VtoPixel(v);
00484    Double_t angle = GetTextAngle();
00485    Double_t mgn = GetTextMagnitude();
00486    gVirtualX->DrawText(px, py, angle, mgn, text, (TVirtualX::ETextMode)mode);
00487 }
00488 
00489 
00490 //______________________________________________________________________________
00491 void TPadPainter::SaveImage(TVirtualPad *pad, const char *fileName, Int_t type) const
00492 {
00493    // Save the image displayed in the canvas pointed by "pad" into a 
00494    // binary file.
00495 
00496    if (type == TImage::kGif) {
00497       gVirtualX->WriteGIF((char*)fileName);
00498    } else {
00499       TImage *img = TImage::Create();
00500       img->FromPad(pad);
00501       img->WriteImage(fileName, (TImage::EImageFileTypes)type);
00502       delete img;
00503    }
00504 }

Generated on Tue Jul 5 14:14:07 2011 for ROOT_528-00b_version by  doxygen 1.5.1