00001 #include "TPad.h"
00002 #include "TPoint.h"
00003 #include "TPadPainter.h"
00004 #include "TVirtualX.h"
00005 #include "TImage.h"
00006
00007
00008 const Int_t kPXY = 1002;
00009 static TPoint gPXY[kPXY];
00010
00011
00012 ClassImp(TPadPainter)
00013
00014
00015
00016 TPadPainter::TPadPainter()
00017 {
00018
00019 }
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 Color_t TPadPainter::GetLineColor() const
00033 {
00034
00035
00036 return gVirtualX->GetLineColor();
00037 }
00038
00039
00040
00041 Style_t TPadPainter::GetLineStyle() const
00042 {
00043
00044
00045 return gVirtualX->GetLineStyle();
00046 }
00047
00048
00049
00050 Width_t TPadPainter::GetLineWidth() const
00051 {
00052
00053
00054 return gVirtualX->GetLineWidth();
00055 }
00056
00057
00058
00059 void TPadPainter::SetLineColor(Color_t lcolor)
00060 {
00061
00062
00063 gVirtualX->SetLineColor(lcolor);
00064 }
00065
00066
00067
00068 void TPadPainter::SetLineStyle(Style_t lstyle)
00069 {
00070
00071
00072 gVirtualX->SetLineStyle(lstyle);
00073 }
00074
00075
00076
00077 void TPadPainter::SetLineWidth(Width_t lwidth)
00078 {
00079
00080
00081 gVirtualX->SetLineWidth(lwidth);
00082 }
00083
00084
00085
00086 Color_t TPadPainter::GetFillColor() const
00087 {
00088
00089
00090 return gVirtualX->GetFillColor();
00091 }
00092
00093
00094
00095 Style_t TPadPainter::GetFillStyle() const
00096 {
00097
00098
00099 return gVirtualX->GetFillStyle();
00100 }
00101
00102
00103
00104 Bool_t TPadPainter::IsTransparent() const
00105 {
00106
00107
00108
00109 return gVirtualX->IsTransparent();
00110 }
00111
00112
00113
00114 void TPadPainter::SetFillColor(Color_t fcolor)
00115 {
00116
00117
00118 gVirtualX->SetFillColor(fcolor);
00119 }
00120
00121
00122
00123 void TPadPainter::SetFillStyle(Style_t fstyle)
00124 {
00125
00126
00127 gVirtualX->SetFillStyle(fstyle);
00128 }
00129
00130
00131
00132 void TPadPainter::SetOpacity(Int_t percent)
00133 {
00134
00135
00136 gVirtualX->SetOpacity(percent);
00137 }
00138
00139
00140
00141 Short_t TPadPainter::GetTextAlign() const
00142 {
00143
00144
00145 return gVirtualX->GetTextAlign();
00146 }
00147
00148
00149
00150 Float_t TPadPainter::GetTextAngle() const
00151 {
00152
00153
00154 return gVirtualX->GetTextAngle();
00155 }
00156
00157
00158
00159 Color_t TPadPainter::GetTextColor() const
00160 {
00161
00162
00163 return gVirtualX->GetTextColor();
00164 }
00165
00166
00167
00168 Font_t TPadPainter::GetTextFont() const
00169 {
00170
00171
00172 return gVirtualX->GetTextFont();
00173 }
00174
00175
00176
00177 Float_t TPadPainter::GetTextSize() const
00178 {
00179
00180
00181 return gVirtualX->GetTextSize();
00182 }
00183
00184
00185
00186 Float_t TPadPainter::GetTextMagnitude() const
00187 {
00188
00189
00190 return gVirtualX->GetTextMagnitude();
00191 }
00192
00193
00194
00195 void TPadPainter::SetTextAlign(Short_t align)
00196 {
00197
00198
00199 gVirtualX->SetTextAlign(align);
00200 }
00201
00202
00203
00204 void TPadPainter::SetTextAngle(Float_t tangle)
00205 {
00206
00207
00208 gVirtualX->SetTextAngle(tangle);
00209 }
00210
00211
00212
00213 void TPadPainter::SetTextColor(Color_t tcolor)
00214 {
00215
00216
00217 gVirtualX->SetTextColor(tcolor);
00218 }
00219
00220
00221
00222 void TPadPainter::SetTextFont(Font_t tfont)
00223 {
00224
00225
00226 gVirtualX->SetTextFont(tfont);
00227 }
00228
00229
00230
00231 void TPadPainter::SetTextSize(Float_t tsize)
00232 {
00233
00234
00235 gVirtualX->SetTextSize(tsize);
00236 }
00237
00238
00239
00240 void TPadPainter::SetTextSizePixels(Int_t npixels)
00241 {
00242
00243
00244 gVirtualX->SetTextSizePixels(npixels);
00245 }
00246
00247
00248
00249 Int_t TPadPainter::CreateDrawable(UInt_t w, UInt_t h)
00250 {
00251
00252
00253 return gVirtualX->OpenPixmap(Int_t(w), Int_t(h));
00254 }
00255
00256
00257
00258 void TPadPainter::ClearDrawable()
00259 {
00260
00261
00262 gVirtualX->ClearWindow();
00263 }
00264
00265
00266
00267 void TPadPainter::CopyDrawable(Int_t id, Int_t px, Int_t py)
00268 {
00269
00270
00271 gVirtualX->CopyPixmap(id, px, py);
00272 }
00273
00274
00275
00276 void TPadPainter::DestroyDrawable()
00277 {
00278
00279
00280 gVirtualX->ClosePixmap();
00281 }
00282
00283
00284
00285 void TPadPainter::SelectDrawable(Int_t device)
00286 {
00287
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
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
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
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
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
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
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
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
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
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
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
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
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
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
00494
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 }