54 TImageDump::TImageDump() : TVirtualPS()
73 TImageDump::TImageDump(
const char *fname, Int_t wtype) : TVirtualPS(fname, wtype)
83 void TImageDump::Open(
const char *fname, Int_t type)
86 fImage = TImage::Create();
94 TImageDump::~TImageDump()
107 void TImageDump::Close(Option_t *)
110 if (!fImage || (fType == 114)) {
115 fImage->WriteImage(GetName());
121 void TImageDump::DrawBox(Double_t x1, Double_t y1, Double_t x2, Double_t y2)
123 if (!gPad || !fImage) {
127 fImage->BeginPaint();
129 static Double_t x[4], y[4];
130 Int_t ix1 = x1 < x2 ? XtoPixel(x1) : XtoPixel(x2);
131 Int_t ix2 = x1 < x2 ? XtoPixel(x2) : XtoPixel(x1);
132 Int_t iy1 = y1 < y2 ? YtoPixel(y1) : YtoPixel(y2);
133 Int_t iy2 = y1 < y2 ? YtoPixel(y2) : YtoPixel(y1);
135 if (ix1<0 || ix2 <0 || iy1 < 0 || iy2 <0)
return;
137 if (TMath::Abs(ix2-ix1) < 1) ix2 = ix1+1;
138 if (TMath::Abs(iy1-iy2) < 1) iy1 = iy2+1;
140 Int_t fillis = fFillStyle/1000;
141 Int_t fillsi = fFillStyle%1000;
143 TColor *col = gROOT->GetColor(fFillColor);
146 col = gROOT->GetColor(fFillColor);
150 TColor *linecol = gROOT->GetColor(fLineColor);
153 linecol = gROOT->GetColor(fLineColor);
156 if ((fillis == 3) || (fillis == 2)) {
158 x[0] = x1; y[0] = y1;
159 x[1] = x2; y[1] = y1;
160 x[2] = x2; y[2] = y2;
161 x[3] = x1; y[3] = y2;
164 if ((fillsi > 0) && (fillsi < 26)) {
165 x[0] = x1; y[0] = y1;
166 x[1] = x2; y[1] = y1;
167 x[2] = x2; y[2] = y2;
168 x[3] = x1; y[3] = y2;
169 DrawPS(-4, &x[0], &y[0]);
177 fImage->DrawBox(ix1, iy1, ix2, iy2, col->AsHexString(), 1, TVirtualX::kFilled);
181 if (fLineWidth<=0)
return;
182 fImage->DrawBox(ix1, iy1, ix2, iy2, linecol->AsHexString(), fLineWidth, TVirtualX::kHollow);
195 void TImageDump::DrawFrame(Double_t x1, Double_t y1, Double_t x2, Double_t y2,
196 Int_t mode, Int_t bordersize, Int_t dark, Int_t light)
198 if (!gPad || !fImage) {
202 fImage->BeginPaint();
204 bordersize = bordersize < 1 ? 1 : bordersize;
207 TColor *lo = gROOT->GetColor(dark);
209 lo = gROOT->GetColor(10);
211 TColor *hi = gROOT->GetColor(light);
213 hi = gROOT->GetColor(10);
216 Short_t pxl,pyl,pxt,pyt,px1,py1,px2,py2;
218 px1 = XtoPixel(x1); py1 = YtoPixel(y1);
219 px2 = XtoPixel(x2); py2 = YtoPixel(y2);
220 if (px1 < px2) {pxl = px1; pxt = px2;}
221 else {pxl = px2; pxt = px1;}
222 if (py1 > py2) {pyl = py1; pyt = py2;}
223 else {pyl = py2; pyt = py1;}
225 if (bordersize == 1) {
226 col = gROOT->GetColor(fLineColor);
229 col = gROOT->GetColor(fLineColor);
232 fImage->DrawBox(pxl, pyl, pxt, pyt-1, col->AsHexString(), TVirtualX::kFilled);
236 if (!fImage->IsValid()) {
237 col = gROOT->GetColor(light);
239 col = gROOT->GetColor(10);
242 fImage->DrawBox(pxl, pyl, pxt, pyt,
243 "#ffffffff", 1, TVirtualX::kFilled);
248 frame[0].fX = pxl; frame[0].fY = pyl;
249 frame[1].fX = pxl + bordersize; frame[1].fY = pyl - bordersize;
250 frame[2].fX = pxl + bordersize; frame[2].fY = pyt + bordersize;
251 frame[3].fX = pxt - bordersize; frame[3].fY = pyt + bordersize;;
252 frame[4].fX = pxt; frame[4].fY = pyt;
253 frame[5].fX = pxl; frame[5].fY = pyt;
255 if (mode == -1) col = lo;
258 fImage->DrawFillArea(6, frame, col->AsHexString());
260 frame[0].fX = pxl; frame[0].fY = pyl;
261 frame[1].fX = pxl + bordersize; frame[1].fY = pyl - bordersize;
262 frame[2].fX = pxt - bordersize; frame[2].fY = frame[1].fY;
263 frame[3].fX = frame[2].fX; frame[3].fY = pyt + bordersize;
264 frame[4].fX = pxt; frame[4].fY = pyt;
265 frame[5].fX = pxt; frame[5].fY = pyl;
267 if (mode == -1) col = hi;
270 fImage->DrawFillArea(6, frame, col->AsHexString());
276 void TImageDump::DrawPolyMarker(Int_t, Float_t *, Float_t *)
278 if (!gPad || !fImage) {
286 void TImageDump::DrawPolyMarker(Int_t n, Double_t *xw, Double_t *yw)
288 if (!gPad || !fImage) {
292 fImage->BeginPaint();
294 Int_t ms = TMath::Abs(fMarkerStyle);
295 static TPoint pt[20];
297 if (ms > 7 && ms <= 19) ms = 20;
298 if (ms == 4) ms = 24;
301 const Int_t kBASEMARKER = 8;
302 Double_t msize = fMarkerSize * kBASEMARKER * gStyle->GetImageScaling();
303 if (ms == 6) msize *= 0.2;
304 if (ms == 7) msize *= 0.3;
313 TColor *col = gROOT->GetColor(fMarkerColor);
316 col = gROOT->GetColor(fMarkerColor);
319 if (col->GetAlpha()<1.) {
321 if (ms==20) ms = 120;
326 for (Int_t i=0;i<n;i++) {
327 ix = XtoPixel(xw[i]);
328 iy = YtoPixel(yw[i]);
333 fImage->PutPixel((UInt_t)ix-1, (UInt_t)iy-1, col->AsHexString());
334 fImage->PutPixel((UInt_t)ix-1, (UInt_t)iy+1, col->AsHexString());
335 fImage->PutPixel((UInt_t)ix+1, (UInt_t)iy+1, col->AsHexString());
336 fImage->PutPixel((UInt_t)ix+1, (UInt_t)iy-1, col->AsHexString());
338 fImage->PutPixel((UInt_t)ix, (UInt_t)iy-1, col->AsHexString());
339 fImage->PutPixel((UInt_t)ix, (UInt_t)iy+1, col->AsHexString());
340 fImage->PutPixel((UInt_t)ix-1, (UInt_t)iy, col->AsHexString());
341 fImage->PutPixel((UInt_t)ix+1, (UInt_t)iy, col->AsHexString());
343 fImage->PutPixel((UInt_t)ix, (UInt_t)iy, col->AsHexString());
347 fImage->DrawLine(UInt_t(ix-m2), UInt_t(iy), UInt_t(ix+m2), UInt_t(iy), col->AsHexString());
348 fImage->DrawLine(UInt_t(ix), UInt_t(iy-m2), UInt_t(ix), UInt_t(iy+m2), col->AsHexString());
352 fImage->DrawLine(UInt_t(ix-m2), UInt_t(iy-m2), UInt_t(ix+m2), UInt_t(iy+m2), col->AsHexString());
353 fImage->DrawLine(UInt_t(ix-m2), UInt_t(iy+m2), UInt_t(ix+m2), UInt_t(iy-m2), col->AsHexString());
358 fImage->DrawLine(UInt_t(ix-m2), UInt_t(iy), UInt_t(ix+m2), UInt_t(iy), col->AsHexString());
359 fImage->DrawLine(UInt_t(ix), UInt_t(iy-m2), UInt_t(ix), UInt_t(iy+m2), col->AsHexString());
360 fImage->DrawLine(UInt_t(ix-m2), UInt_t(iy-m2), UInt_t(ix+m2), UInt_t(iy+m2), col->AsHexString());
361 fImage->DrawLine(UInt_t(ix-m2), UInt_t(iy+m2), UInt_t(ix+m2), UInt_t(iy-m2), col->AsHexString());
366 fImage->DrawCircle(ix, iy, Int_t(msize/2), col->AsHexString(), 1);
371 fImage->DrawCircle(ix, iy, Int_t(msize/2), col->AsHexString(), -1);
375 for (
int idx=Int_t(msize/2); idx>0; idx--) fImage->DrawCircle(ix, iy, idx, col->AsHexString(), 1);
376 fImage->PutPixel((UInt_t)ix, (UInt_t)iy, col->AsHexString());
380 fImage->FillRectangle(col->AsHexString(), UInt_t(ix-m2), UInt_t(iy-m2), UInt_t(m), UInt_t(m));
383 fImage->DrawRectangle(UInt_t(ix-m2), UInt_t(iy-m2), UInt_t(m), UInt_t(m), col->AsHexString());
388 pt[0].fX = Short_t(ix-m2); pt[0].fY = Short_t(iy-m2);
389 pt[1].fX = Short_t(ix+m2); pt[1].fY = Short_t(iy-m2);
390 pt[2].fX = Short_t(ix); pt[2].fY = Short_t(iy+m2);
391 pt[3].fX = Short_t(ix-m2); pt[3].fY = Short_t(iy-m2);
392 ms == 32 ? fImage->DrawPolyLine(4, pt, col->AsHexString()) :
393 fImage->FillPolygon(3, pt, col->AsHexString());
398 pt[0].fX = Short_t(ix); pt[0].fY = Short_t(iy-m2);
399 pt[1].fX = Short_t(ix+m2); pt[1].fY = Short_t(iy+m2);
400 pt[2].fX = Short_t(ix-m2); pt[2].fY = Short_t(iy+m2);
401 pt[3].fX = Short_t(ix); pt[3].fY = Short_t(iy-m2);
402 ms == 26 ? fImage->DrawPolyLine(4, pt, col->AsHexString()) :
403 fImage->FillPolygon(3, pt, col->AsHexString());
407 pt[0].fX = Short_t(ix); pt[0].fY = Short_t(iy-m2);
408 pt[1].fX = Short_t(ix+m3); pt[1].fY = Short_t(iy);
409 pt[2].fX = Short_t(ix); pt[2].fY = Short_t(iy+m2);
410 pt[3].fX = Short_t(ix-m3); pt[3].fY = Short_t(iy);
411 pt[4].fX = Short_t(ix); pt[4].fY = Short_t(iy-m2);
412 ms == 27 ? fImage->DrawPolyLine(5, pt, col->AsHexString()) :
413 fImage->FillPolygon(4, pt, col->AsHexString());
417 pt[0].fX = Short_t(ix-m6); pt[0].fY = Short_t(iy-m6);
418 pt[1].fX = Short_t(ix-m6); pt[1].fY = Short_t(iy-m2);
419 pt[2].fX = Short_t(ix+m6); pt[2].fY = Short_t(iy-m2);
420 pt[3].fX = Short_t(ix+m6); pt[3].fY = Short_t(iy-m6);
421 pt[4].fX = Short_t(ix+m2); pt[4].fY = Short_t(iy-m6);
422 pt[5].fX = Short_t(ix+m2); pt[5].fY = Short_t(iy+m6);
423 pt[6].fX = Short_t(ix+m6); pt[6].fY = Short_t(iy+m6);
424 pt[7].fX = Short_t(ix+m6); pt[7].fY = Short_t(iy+m2);
425 pt[8].fX = Short_t(ix-m6); pt[8].fY = Short_t(iy+m2);
426 pt[9].fX = Short_t(ix-m6); pt[9].fY = Short_t(iy+m6);
427 pt[10].fX = Short_t(ix-m2); pt[10].fY = Short_t(iy+m6);
428 pt[11].fX = Short_t(ix-m2); pt[11].fY = Short_t(iy-m6);
429 pt[12].fX = Short_t(ix-m6); pt[12].fY = Short_t(iy-m6);
430 ms == 28 ? fImage->DrawPolyLine(13, pt, col->AsHexString()) :
431 fImage->FillPolygon(12, pt, col->AsHexString());
435 pt[0].fX = Short_t(ix); pt[0].fY = Short_t(iy+m2);
436 pt[1].fX = Short_t(ix+0.112255*m); pt[1].fY = Short_t(iy+0.15451*m);
437 pt[2].fX = Short_t(ix+0.47552*m); pt[2].fY = Short_t(iy+0.15451*m);
438 pt[3].fX = Short_t(ix+0.181635*m); pt[3].fY = Short_t(iy-0.05902*m);
439 pt[4].fX = Short_t(ix+0.29389*m); pt[4].fY = Short_t(iy-0.40451*m);
440 pt[5].fX = Short_t(ix); pt[5].fY = Short_t(iy-0.19098*m);
441 pt[6].fX = Short_t(ix-0.29389*m); pt[6].fY = Short_t(iy-0.40451*m);
442 pt[7].fX = Short_t(ix-0.181635*m); pt[7].fY = Short_t(iy-0.05902*m);
443 pt[8].fX = Short_t(ix-0.47552*m); pt[8].fY = Short_t(iy+0.15451*m);
444 pt[9].fX = Short_t(ix-0.112255*m); pt[9].fY = Short_t(iy+0.15451*m);
445 pt[10].fX = Short_t(ix); pt[10].fY = Short_t(iy+m2);
446 ms == 30 ? fImage->DrawPolyLine(11, pt, col->AsHexString()) :
447 fImage->DrawFillArea(10, pt, col->AsHexString());
450 pt[0].fX = Short_t(ix-m2); pt[0].fY = Short_t(iy );
451 pt[1].fX = Short_t(ix ); pt[1].fY = Short_t(iy-m2);
452 pt[2].fX = Short_t(ix+m2); pt[2].fY = Short_t(iy );
453 pt[3].fX = Short_t(ix ); pt[3].fY = Short_t(iy+m2);
454 pt[4].fX = Short_t(ix-m2); pt[4].fY = Short_t(iy );
455 pt[5].fX = Short_t(ix+m2); pt[5].fY = Short_t(iy );
456 pt[6].fX = Short_t(ix ); pt[6].fY = Short_t(iy+m2);
457 pt[7].fX = Short_t(ix ); pt[7].fY = Short_t(iy-m2);
458 fImage->DrawPolyLine(8, pt, col->AsHexString()) ;
461 pt[0].fX = Short_t(ix-m2); pt[0].fY = Short_t(iy-m2);
462 pt[1].fX = Short_t(ix+m2); pt[1].fY = Short_t(iy-m2);
463 pt[2].fX = Short_t(ix+m2); pt[2].fY = Short_t(iy+m2);
464 pt[3].fX = Short_t(ix-m2); pt[3].fY = Short_t(iy+m2);
465 pt[4].fX = Short_t(ix-m2); pt[4].fY = Short_t(iy-m2);
466 pt[5].fX = Short_t(ix+m2); pt[5].fY = Short_t(iy+m2);
467 pt[6].fX = Short_t(ix-m2); pt[6].fY = Short_t(iy+m2);
468 pt[7].fX = Short_t(ix+m2); pt[7].fY = Short_t(iy-m2);
469 fImage->DrawPolyLine(8, pt, col->AsHexString()) ;
473 pt[0].fX = Short_t(ix ); pt[0].fY = Short_t(iy );
474 pt[1].fX = Short_t(ix-m4); pt[1].fY = Short_t(iy-m2);
475 pt[2].fX = Short_t(ix-m2); pt[2].fY = Short_t(iy );
476 pt[3].fX = Short_t(ix+m2); pt[3].fY = Short_t(iy );
477 pt[4].fX = Short_t(ix+m4); pt[4].fY = Short_t(iy-m2);
478 pt[5].fX = Short_t(ix-m4); pt[5].fY = Short_t(iy+m2);
479 pt[6].fX = Short_t(ix+m4); pt[6].fY = Short_t(iy+m2);
480 pt[7].fX = Short_t(ix ); pt[7].fY = Short_t(iy );
481 ms == 37 ? fImage->DrawPolyLine(8, pt, col->AsHexString()) :
482 fImage->DrawFillArea(7, pt, col->AsHexString());
485 pt[0].fX = Short_t(ix-m2); pt[0].fY = Short_t(iy );
486 pt[1].fX = Short_t(ix-m2); pt[1].fY = Short_t(iy-m4);
487 pt[2].fX = Short_t(ix-m4); pt[2].fY = Short_t(iy-m2);
488 pt[3].fX = Short_t(ix+m4); pt[3].fY = Short_t(iy-m2);
489 pt[4].fX = Short_t(ix+m2); pt[4].fY = Short_t(iy-m4);
490 pt[5].fX = Short_t(ix+m2); pt[5].fY = Short_t(iy+m4);
491 pt[6].fX = Short_t(ix+m4); pt[6].fY = Short_t(iy+m2);
492 pt[7].fX = Short_t(ix-m4); pt[7].fY = Short_t(iy+m2);
493 pt[8].fX = Short_t(ix-m2); pt[8].fY = Short_t(iy+m4);
494 pt[9].fX = Short_t(ix-m2); pt[9].fY = Short_t(iy );
495 pt[10].fX = Short_t(ix+m2); pt[10].fY = Short_t(iy );
496 pt[11].fX = Short_t(ix ); pt[11].fY = Short_t(iy );
497 pt[12].fX = Short_t(ix ); pt[12].fY = Short_t(iy-m2);
498 pt[13].fX = Short_t(ix ); pt[13].fY = Short_t(iy+m2);
499 pt[14].fX = Short_t(ix ); pt[14].fY = Short_t(iy );
500 fImage->DrawPolyLine(15, pt, col->AsHexString()) ;
504 pt[0].fX = Short_t(ix ); pt[0].fY = Short_t(iy );
505 pt[1].fX = Short_t(ix+m4); pt[1].fY = Short_t(iy+m2);
506 pt[2].fX = Short_t(ix+m2); pt[2].fY = Short_t(iy+m4);
507 pt[3].fX = Short_t(ix ); pt[3].fY = Short_t(iy );
508 pt[4].fX = Short_t(ix+m2); pt[4].fY = Short_t(iy-m4);
509 pt[5].fX = Short_t(ix+m4); pt[5].fY = Short_t(iy-m2);
510 pt[6].fX = Short_t(ix ); pt[6].fY = Short_t(iy );
511 pt[7].fX = Short_t(ix-m4); pt[7].fY = Short_t(iy-m2);
512 pt[8].fX = Short_t(ix-m2); pt[8].fY = Short_t(iy-m4);
513 pt[9].fX = Short_t(ix ); pt[9].fY = Short_t(iy );
514 pt[10].fX = Short_t(ix-m2); pt[10].fY = Short_t(iy+m4);
515 pt[11].fX = Short_t(ix-m4); pt[11].fY = Short_t(iy+m2);
516 pt[12].fX = Short_t(ix ); pt[12].fY = Short_t(iy );
517 ms == 40 ? fImage->DrawPolyLine(13, pt, col->AsHexString()) :
518 fImage->DrawFillArea(12, pt, col->AsHexString());
522 pt[0].fX = Short_t(ix ); pt[0].fY = Short_t(iy+m2);
523 pt[1].fX = Short_t(ix-m8); pt[1].fY = Short_t(iy+m8);
524 pt[2].fX = Short_t(ix-m2); pt[2].fY = Short_t(iy );
525 pt[3].fX = Short_t(ix-m8); pt[3].fY = Short_t(iy-m8);
526 pt[4].fX = Short_t(ix ); pt[4].fY = Short_t(iy-m2);
527 pt[5].fX = Short_t(ix+m8); pt[5].fY = Short_t(iy-m8);
528 pt[6].fX = Short_t(ix+m2); pt[6].fY = Short_t(iy );
529 pt[7].fX = Short_t(ix+m8); pt[7].fY = Short_t(iy+m8);
530 pt[8].fX = Short_t(ix ); pt[8].fY = Short_t(iy+m2);
531 ms == 42 ? fImage->DrawPolyLine(9, pt, col->AsHexString()) :
532 fImage->DrawFillArea(8, pt, col->AsHexString());
535 pt[0].fX = Short_t(ix ); pt[0].fY = Short_t(iy );
536 pt[1].fX = Short_t(ix+m4); pt[1].fY = Short_t(iy+m2);
537 pt[2].fX = Short_t(ix-m4); pt[2].fY = Short_t(iy+m2);
538 pt[3].fX = Short_t(ix+m4); pt[3].fY = Short_t(iy-m2);
539 pt[4].fX = Short_t(ix-m4); pt[4].fY = Short_t(iy-m2);
540 pt[5].fX = Short_t(ix ); pt[5].fY = Short_t(iy );
541 pt[6].fX = Short_t(ix+m2); pt[6].fY = Short_t(iy+m4);
542 pt[7].fX = Short_t(ix+m2); pt[7].fY = Short_t(iy-m4);
543 pt[8].fX = Short_t(ix-m2); pt[8].fY = Short_t(iy+m4);
544 pt[9].fX = Short_t(ix-m2); pt[9].fY = Short_t(iy-m4);
545 pt[10].fX = Short_t(ix ); pt[10].fY = Short_t(iy );
546 fImage->DrawPolyLine(11, pt, col->AsHexString()) ;
549 pt[0].fX = Short_t(ix+m0); pt[0].fY = Short_t(iy+m0);
550 pt[1].fX = Short_t(ix+m4); pt[1].fY = Short_t(iy+m2);
551 pt[2].fX = Short_t(ix-m4); pt[2].fY = Short_t(iy+m2);
552 pt[3].fX = Short_t(ix-m0); pt[3].fY = Short_t(iy+m0);
553 pt[4].fX = Short_t(ix-m2); pt[4].fY = Short_t(iy+m4);
554 pt[5].fX = Short_t(ix-m2); pt[5].fY = Short_t(iy-m4);
555 pt[6].fX = Short_t(ix-m0); pt[6].fY = Short_t(iy-m0);
556 pt[7].fX = Short_t(ix-m4); pt[7].fY = Short_t(iy-m2);
557 pt[8].fX = Short_t(ix+m4); pt[8].fY = Short_t(iy-m2);
558 pt[9].fX = Short_t(ix+m0); pt[9].fY = Short_t(iy-m0);
559 pt[10].fX = Short_t(ix+m2); pt[10].fY = Short_t(iy-m4);
560 pt[11].fX = Short_t(ix+m2); pt[11].fY = Short_t(iy+m4);
561 pt[12].fX = Short_t(ix+m0); pt[12].fY = Short_t(iy+m0);
562 fImage->DrawFillArea(13, pt, col->AsHexString());
566 pt[0].fX = Short_t(ix ); pt[0].fY = Short_t(iy+m4);
567 pt[1].fX = Short_t(ix-m4); pt[1].fY = Short_t(iy+m2);
568 pt[2].fX = Short_t(ix-m2); pt[2].fY = Short_t(iy+m4);
569 pt[3].fX = Short_t(ix-m4); pt[3].fY = Short_t(iy );
570 pt[4].fX = Short_t(ix-m2); pt[4].fY = Short_t(iy-m4);
571 pt[5].fX = Short_t(ix-m4); pt[5].fY = Short_t(iy-m2);
572 pt[6].fX = Short_t(ix ); pt[6].fY = Short_t(iy-m4);
573 pt[7].fX = Short_t(ix+m4); pt[7].fY = Short_t(iy-m2);
574 pt[8].fX = Short_t(ix+m2); pt[8].fY = Short_t(iy-m4);
575 pt[9].fX = Short_t(ix+m4); pt[9].fY = Short_t(iy );
576 pt[10].fX = Short_t(ix+m2); pt[10].fY = Short_t(iy+m4);
577 pt[11].fX = Short_t(ix+m4); pt[11].fY = Short_t(iy+m2);
578 pt[12].fX = Short_t(ix ); pt[12].fY = Short_t(iy+m4);
579 ms == 46 ? fImage->DrawPolyLine(13, pt, col->AsHexString()) :
580 fImage->DrawFillArea(12, pt, col->AsHexString());
583 pt[0].fX = Short_t(ix ); pt[0].fY = Short_t(iy+m4*1.005);
584 pt[1].fX = Short_t(ix-m4); pt[1].fY = Short_t(iy+m2);
585 pt[2].fX = Short_t(ix-m2); pt[2].fY = Short_t(iy+m4);
586 pt[3].fX = Short_t(ix-m4); pt[3].fY = Short_t(iy );
587 pt[4].fX = Short_t(ix-m2); pt[4].fY = Short_t(iy-m4);
588 pt[5].fX = Short_t(ix-m4); pt[5].fY = Short_t(iy-m2);
589 pt[6].fX = Short_t(ix ); pt[6].fY = Short_t(iy-m4);
590 pt[7].fX = Short_t(ix+m4); pt[7].fY = Short_t(iy-m2);
591 pt[8].fX = Short_t(ix+m2); pt[8].fY = Short_t(iy-m4);
592 pt[9].fX = Short_t(ix+m4); pt[9].fY = Short_t(iy );
593 pt[10].fX = Short_t(ix+m2); pt[10].fY = Short_t(iy+m4);
594 pt[11].fX = Short_t(ix+m4); pt[11].fY = Short_t(iy+m2);
595 pt[12].fX = Short_t(ix ); pt[12].fY = Short_t(iy+m4*0.995);
596 pt[13].fX = Short_t(ix+m4*0.995); pt[13].fY = Short_t(iy );
597 pt[14].fX = Short_t(ix ); pt[14].fY = Short_t(iy-m4*0.995);
598 pt[15].fX = Short_t(ix-m4*0.995); pt[15].fY = Short_t(iy );
599 pt[16].fX = Short_t(ix ); pt[16].fY = Short_t(iy+m4*0.995);
600 fImage->DrawFillArea(17, pt, col->AsHexString());
603 pt[0].fX = Short_t(ix-m6); pt[0].fY = Short_t(iy-m6*1.005);
604 pt[1].fX = Short_t(ix-m6); pt[1].fY = Short_t(iy-m2);
605 pt[2].fX = Short_t(ix+m6); pt[2].fY = Short_t(iy-m2);
606 pt[3].fX = Short_t(ix+m6); pt[3].fY = Short_t(iy-m6);
607 pt[4].fX = Short_t(ix+m2); pt[4].fY = Short_t(iy-m6);
608 pt[5].fX = Short_t(ix+m2); pt[5].fY = Short_t(iy+m6);
609 pt[6].fX = Short_t(ix+m6); pt[6].fY = Short_t(iy+m6);
610 pt[7].fX = Short_t(ix+m6); pt[7].fY = Short_t(iy+m2);
611 pt[8].fX = Short_t(ix-m6); pt[8].fY = Short_t(iy+m2);
612 pt[9].fX = Short_t(ix-m6); pt[9].fY = Short_t(iy+m6);
613 pt[10].fX = Short_t(ix-m2); pt[10].fY = Short_t(iy+m6);
614 pt[11].fX = Short_t(ix-m2); pt[11].fY = Short_t(iy-m6);
615 pt[12].fX = Short_t(ix-m6); pt[12].fY = Short_t(iy-m6*0.995);
616 pt[13].fX = Short_t(ix-m6); pt[13].fY = Short_t(iy+m6);
617 pt[14].fX = Short_t(ix+m6); pt[14].fY = Short_t(iy+m6);
618 pt[15].fX = Short_t(ix+m6); pt[15].fY = Short_t(iy-m6);
619 pt[16].fX = Short_t(ix-m6); pt[16].fY = Short_t(iy-m6*1.005);
620 fImage->DrawFillArea(17, pt, col->AsHexString());
623 fImage->PutPixel(UInt_t(ix), UInt_t(iy), col->AsHexString());
636 void TImageDump::DrawPS(Int_t nn, Double_t *x, Double_t *y)
638 if (!gPad || !fImage || !nn) {
642 fImage->BeginPaint();
645 Int_t fais = 0 , fasi = 0;
646 Bool_t line = nn > 1;
647 UInt_t n = TMath::Abs(nn);
649 fais = fFillStyle/1000;
650 fasi = fFillStyle%1000;
652 Short_t px1, py1, px2, py2;
653 static const UInt_t gCachePtSize = 200;
654 static TPoint gPointCache[gCachePtSize];
661 static char dashList[10];
662 Int_t dashLength = 0;
666 if (fLineWidth<=0)
return;
668 if (fLineStyle > 1) {
669 TString st = gStyle->GetLineStyleString(fLineStyle);
670 TObjArray *tokens = st.Tokenize(
" ");
671 ndashes = tokens->GetEntries();
672 dash =
new char[ndashes];
674 for (
int j = 0; j < ndashes; j++) {
676 sscanf(((TObjString*)tokens->At(j))->GetName(),
"%d", &it);
677 dash[j] = (char)(it/4);
680 dashSize = TMath::Min((
int)
sizeof(dashList), ndashes);
682 for (
int i = 0; i < dashSize; i++ ) {
683 dashList[i] = dash[i];
684 dashLength += dashList[i];
691 col = gROOT->GetColor(fLineColor);
694 col = gROOT->GetColor(fLineColor);
700 col = gROOT->GetColor(fFillColor);
703 col = gROOT->GetColor(fFillColor);
706 px1 = XtoPixel(x[0]); py1 = YtoPixel(y[0]);
707 fImage->PutPixel(px1, py1, col->AsHexString());
712 px1 = XtoPixel(x[0]); py1 = YtoPixel(y[0]);
713 px2 = XtoPixel(x[1]); py2 = YtoPixel(y[1]);
716 col = gROOT->GetColor(fLineColor);
719 col = gROOT->GetColor(fLineColor);
722 if (fLineStyle < 2) {
723 fImage->DrawLine(px1, py1, px2, py2, col->AsHexString(), fLineWidth);
725 fImage->DrawDashLine(px1, py1, px2, py2, dashSize, (
const char*)dashList,
726 col->AsHexString(), fLineWidth);
731 if (!line && ((fais == 3) || (fais == 2)) && (fasi > 100) ) {
736 if (n+1 < gCachePtSize) {
737 pt = (TPoint*)&gPointCache;
740 pt =
new TPoint[n+1];
744 TColor *fcol = gROOT->GetColor(fFillColor);
747 fcol = gROOT->GetColor(fFillColor);
750 TColor *lcol = gROOT->GetColor(fLineColor);
753 lcol = gROOT->GetColor(fLineColor);
756 for (UInt_t i = 0; i < n; i++) {
757 pt[i].fX = XtoPixel(x[i]);
758 pt[i].fY = YtoPixel(y[i]);
763 const char *stipple = (fais == 3) && (fasi > 0) && (fasi < 26) ? (
const char*)gStipples[fasi] : 0;
766 if (!line && fFillStyle && (fFillStyle != 4000)) {
770 fImage->FillPolygon(n, pt, fcol->AsHexString(), stipple);
772 fImage->DrawFillArea(n, pt, fcol->AsHexString(), stipple);
777 if (line || !fFillStyle || (fFillStyle == 4000)) {
780 fImage->DrawPolyLine(n+1, pt, fcol->AsHexString(), 1);
782 if (fLineStyle < 2) {
783 fImage->DrawPolyLine(n, pt, lcol->AsHexString(), fLineWidth);
785 DrawDashPolyLine(n, pt, dashSize, (
const char*)dashList,
786 lcol->AsHexString(), fLineWidth);
790 if (del)
delete [] pt;
796 void TImageDump::DrawPS(Int_t, Float_t *, Float_t *)
798 if (!gPad || !fImage) {
806 void TImageDump::DrawDashPolyLine(Int_t nn, TPoint *xy, UInt_t nDash,
807 const char* pDash,
const char* col, UInt_t thick)
809 Int_t x0 = xy[0].GetX();
810 Int_t y0 = xy[0].GetY();
814 for (Int_t i = 1; i < nn; i++) {
818 fImage->DrawDashLine(x0, y0, x, y, nDash, pDash, col, thick);
828 void TImageDump::NewPage()
830 if (gPad && fImage) {
831 UInt_t w = UInt_t(gPad->GetWw()*gPad->GetWNDC()) * gStyle->GetImageScaling();
832 UInt_t h = UInt_t(gPad->GetWh()*gPad->GetHNDC()) * gStyle->GetImageScaling();
833 fImage->DrawRectangle(0, 0, w, h,
"#ffffffff");
844 void TImageDump::Text(Double_t x, Double_t y,
const char *chars)
846 if (!gPad || !fImage) {
850 fImage->BeginPaint();
852 TText t(x, y, chars);
853 t.SetTextSize(fTextSize*gStyle->GetImageScaling());
854 t.SetTextFont(fTextFont);
855 t.SetTextAlign(fTextAlign);
856 t.SetTextAngle(fTextAngle);
857 t.SetTextColor(fTextColor);
858 fImage->DrawText(&t, XtoPixel(x), YtoPixel(y));
867 void TImageDump::Text(Double_t x, Double_t y,
const wchar_t *chars)
869 if (!gPad || !fImage) {
873 fImage->BeginPaint();
875 TText t(x, y, chars);
876 t.SetTextSize(fTextSize*gStyle->GetImageScaling());
877 t.SetTextFont(fTextFont);
878 t.SetTextAlign(fTextAlign);
879 t.SetTextAngle(fTextAngle);
880 t.SetTextColor(fTextColor);
881 fImage->DrawText(&t, XtoPixel(x), YtoPixel(y));
886 static UInt_t *gCellArrayColors = 0;
887 static Int_t gCellArrayN = 0;
888 static Int_t gCellArrayW = 0;
889 static Int_t gCellArrayH = 0;
890 static Int_t gCellArrayX1 = 0;
891 static Int_t gCellArrayX2 = 0;
892 static Int_t gCellArrayY1 = 0;
893 static Int_t gCellArrayY2 = 0;
894 static Int_t gCellArrayIdx = 0;
899 void TImageDump::CellArrayBegin(Int_t w, Int_t h, Double_t x1, Double_t x2,
900 Double_t y1, Double_t y2)
902 if (!gPad || !fImage || (w <= 0) || (h <= 0)) {
906 if (gCellArrayColors) {
907 delete [] gCellArrayColors;
910 fImage->BeginPaint();
915 gCellArrayColors =
new UInt_t[gCellArrayN];
917 gCellArrayX1 = x1 < x2 ? XtoPixel(x1) : XtoPixel(x2);
918 gCellArrayX2 = x1 > x2 ? XtoPixel(x2) : XtoPixel(x1);
919 gCellArrayY1 = y1 < y2 ? YtoPixel(y1) : YtoPixel(y2);
920 gCellArrayY2 = y1 < y2 ? YtoPixel(y2) : YtoPixel(y1);
928 void TImageDump::CellArrayFill(Int_t r, Int_t g, Int_t b)
930 if (gCellArrayIdx >= gCellArrayN)
return;
932 fImage->BeginPaint();
934 gCellArrayColors[gCellArrayIdx] = ((r & 0xFF) << 16) + ((g & 0xFF) << 8) + (b & 0xFF);
941 void TImageDump::CellArrayEnd()
943 if (!fImage || !gCellArrayColors || !gCellArrayW || !gCellArrayH) {
947 fImage->BeginPaint();
949 fImage->DrawCellArray(gCellArrayX1, gCellArrayX2, gCellArrayY1, gCellArrayY2,
950 gCellArrayW, gCellArrayH, gCellArrayColors);
952 delete [] gCellArrayColors;
953 gCellArrayColors = 0;
971 void TImageDump::SetColor(Float_t , Float_t , Float_t )
978 Int_t TImageDump::XtoPixel(Double_t x)
980 return gPad->XtoAbsPixel(x)*gStyle->GetImageScaling();
986 Int_t TImageDump::YtoPixel(Double_t y)
988 return gPad->YtoAbsPixel(y)*gStyle->GetImageScaling();