polytest1.C: This macro is testing new "compacting" algorithm in TPadPainter | Basic Graphics | pstable.C: Display all possible types of ROOT/Postscript characters |
//Author: Timur Pocheptsov, 20.01.2014. // //This macro is testing new "compacting" algorithm in TPadPainter //(it reduces the number of polygon's vertices using actual pixel coordinates). //In principle, this test case is what our histograms (fringe cases) are: //"saw-like" polygon (bins == teeth). // //Includes for ACLiC. #include <cassert> #include <vector> #include "TRandom.h" #include "TCanvas.h" #include "Rtypes.h" #include "TNamed.h" class PolyTest2 : public TNamed, public TAttLine, public TAttFill { public: PolyTest2(); void Paint(const Option_t *notUsed); private: enum TestSize { kNSawPoints = 10000 }; //Part 1. std::vector<Double_t> fXs1; std::vector<Double_t> fYs1; //Part 2. std::vector<Double_t> fXs2; std::vector<Double_t> fYs2; }; //_____________________________________________________________ PolyTest2::PolyTest2() : TNamed("polygon_compression_test2", "polygon_compression_test2") { //Polygon 1, n of points is 10003, after 'compression' : 1897 //Polygon 2, n of points is 10003, after 'compression' : 2093 //Some canvas must already exist by this point. assert(gPad != 0 && "PolyTest2, gPad is null"); //We need a gRandom to exist. assert(gRandom != 0 && "PolyTest2, gRandom is null"); Double_t xMin = 0., xMax = 0., yMin = 0., yMax = 0.; gPad->GetRange(xMin, yMin, xMax, yMax); assert(xMax - xMin > 0 && yMax - yMin > 0 && "PolyTest2, invalid canvas' ranges"); // .(0/the last)--------.(1) // | / // | \ // | / // .(kNSawPoints + 1)--.(kNSawPoints) const unsigned nVertices = 3 + kNSawPoints; { //Polygon 1, "vertical saw": fXs1.resize(nVertices); fYs1.resize(nVertices); fXs1[0] = 0.; fYs1[0] = 0.; const Double_t w1 = 0.2 * (xMax - xMin); const Double_t saw1ToothSize = 0.1 * w1; const Double_t yStep = (yMax - yMin) / (kNSawPoints - 1); for (unsigned i = 1; i <= kNSawPoints; ++i) { fXs1[i] = w1 + gRandom->Rndm() * saw1ToothSize; fYs1[i] = yMin + yStep * (i - 1); } fXs1[nVertices - 2] = 0.; fYs1[nVertices - 2] = yMax; //Let's close it. fXs1[nVertices - 1] = fXs1[0]; fYs1[nVertices - 1] = fYs1[0]; } //Polygon 2, "horizontal saw": { const Double_t x2Min = xMin + 0.25 * (xMax - xMin); const Double_t h2 = 0.1 * (yMax - yMin); const Double_t saw2ToothSize = 0.1 * h2; const Double_t xStep = (xMax - x2Min) / (kNSawPoints - 1); fXs2.resize(nVertices); fYs2.resize(nVertices); fXs2[0] = x2Min; fYs2[0] = 0.; for (unsigned i = 1; i <= kNSawPoints; ++i) { fXs2[i] = x2Min + xStep * i; fYs2[i] = h2 + gRandom->Rndm() * saw2ToothSize; } fXs2[nVertices - 2] = xMax; fYs2[nVertices - 2] = 0.; fXs2[nVertices - 1] = fXs2[0]; fYs2[nVertices - 1] = fYs2[0]; } } //_____________________________________________________________ void PolyTest2::Paint(const Option_t * /*notUsed*/) { assert(gPad != 0 && "Paint, gPad is null"); SetFillColor(kGreen); TAttFill::Modify(); gPad->PaintFillArea((Int_t)fXs1.size(), &fXs1[0], &fYs1[0]); SetLineColor(kBlue); TAttLine::Modify(); gPad->PaintPolyLine((Int_t)fXs1.size(), &fXs1[0], &fYs1[0]); SetFillColor(kOrange); TAttFill::Modify(); gPad->PaintFillArea((Int_t)fXs2.size(), &fXs2[0], &fYs2[0]); SetLineColor(kMagenta); TAttLine::Modify(); gPad->PaintPolyLine((Int_t)fXs2.size(), &fXs2[0], &fYs2[0]); } void polytest2() { TCanvas * const cnv = new TCanvas; cnv->cd(); PolyTest2 * polygon = new PolyTest2; polygon->Draw();//Attach a polygon to a canvas. } polytest2.C:1 polytest2.C:2 polytest2.C:3 polytest2.C:4 polytest2.C:5 polytest2.C:6 polytest2.C:7 polytest2.C:8 polytest2.C:9 polytest2.C:10 polytest2.C:11 polytest2.C:12 polytest2.C:13 polytest2.C:14 polytest2.C:15 polytest2.C:16 polytest2.C:17 polytest2.C:18 polytest2.C:19 polytest2.C:20 polytest2.C:21 polytest2.C:22 polytest2.C:23 polytest2.C:24 polytest2.C:25 polytest2.C:26 polytest2.C:27 polytest2.C:28 polytest2.C:29 polytest2.C:30 polytest2.C:31 polytest2.C:32 polytest2.C:33 polytest2.C:34 polytest2.C:35 polytest2.C:36 polytest2.C:37 polytest2.C:38 polytest2.C:39 polytest2.C:40 polytest2.C:41 polytest2.C:42 polytest2.C:43 polytest2.C:44 polytest2.C:45 polytest2.C:46 polytest2.C:47 polytest2.C:48 polytest2.C:49 polytest2.C:50 polytest2.C:51 polytest2.C:52 polytest2.C:53 polytest2.C:54 polytest2.C:55 polytest2.C:56 polytest2.C:57 polytest2.C:58 polytest2.C:59 polytest2.C:60 polytest2.C:61 polytest2.C:62 polytest2.C:63 polytest2.C:64 polytest2.C:65 polytest2.C:66 polytest2.C:67 polytest2.C:68 polytest2.C:69 polytest2.C:70 polytest2.C:71 polytest2.C:72 polytest2.C:73 polytest2.C:74 polytest2.C:75 polytest2.C:76 polytest2.C:77 polytest2.C:78 polytest2.C:79 polytest2.C:80 polytest2.C:81 polytest2.C:82 polytest2.C:83 polytest2.C:84 polytest2.C:85 polytest2.C:86 polytest2.C:87 polytest2.C:88 polytest2.C:89 polytest2.C:90 polytest2.C:91 polytest2.C:92 polytest2.C:93 polytest2.C:94 polytest2.C:95 polytest2.C:96 polytest2.C:97 polytest2.C:98 polytest2.C:99 polytest2.C:100 polytest2.C:101 polytest2.C:102 polytest2.C:103 polytest2.C:104 polytest2.C:105 polytest2.C:106 polytest2.C:107 polytest2.C:108 polytest2.C:109 polytest2.C:110 polytest2.C:111 polytest2.C:112 polytest2.C:113 polytest2.C:114 polytest2.C:115 polytest2.C:116 polytest2.C:117 polytest2.C:118 polytest2.C:119 polytest2.C:120 polytest2.C:121 polytest2.C:122 polytest2.C:123 polytest2.C:124 polytest2.C:125 polytest2.C:126 polytest2.C:127 polytest2.C:128 polytest2.C:129 polytest2.C:130 polytest2.C:131 polytest2.C:132 polytest2.C:133 polytest2.C:134 polytest2.C:135 polytest2.C:136 polytest2.C:137 polytest2.C:138 polytest2.C:139 polytest2.C:140 polytest2.C:141 polytest2.C:142 polytest2.C:143 polytest2.C:144 |
|