```// @(#)root/graf:\$Id: TPolyLine.cxx 30542 2009-10-02 08:01:52Z couet \$
// Author: Rene Brun   12/12/94

/*************************************************************************
*                                                                       *
* For the licensing terms see \$ROOTSYS/LICENSE.                         *
* For the list of contributors see \$ROOTSYS/README/CREDITS.             *
*************************************************************************/

#include "Riostream.h"
#include "TROOT.h"
#include "TMath.h"
#include "TPolyLine.h"
#include "TClass.h"

ClassImp(TPolyLine)

//______________________________________________________________________________
//
//  a PolyLine is defined by an array on N points in a 2-D space.
//
// One can draw the contour of the polyline or/and its fill area.
// Example:
//{
//   Double_t x[5] = {.2,.7,.6,.25,.2};
//   Double_t y[5] = {.5,.1,.9,.7,.5};
//   TPolyLine *pline = new TPolyLine(5,x,y);
//   pline->SetFillColor(38);
//   pline->SetLineColor(2);
//   pline->SetLineWidth(4);
//   pline->Draw("f");
//   pline->Draw();
//}

//______________________________________________________________________________
TPolyLine::TPolyLine(): TObject()
{
// PolyLine default constructor.

fN = 0;
fX = 0;
fY = 0;
fLastPoint = -1;
}

//______________________________________________________________________________
TPolyLine::TPolyLine(Int_t n, Option_t *option)
:TObject(), TAttLine(), TAttFill()
{
// PolyLine normal constructor without initialisation.
// Allocates n points.  The option string is ignored.

fOption = option;
fLastPoint = -1;
if (n <= 0) {
fN = 0;
fLastPoint = -1;
fX = fY = 0;
return;
}
fN = n;
fX = new Double_t[fN];
fY = new Double_t[fN];
}

//______________________________________________________________________________
TPolyLine::TPolyLine(Int_t n, Float_t *x, Float_t *y, Option_t *option)
:TObject(), TAttLine(), TAttFill()
{
// PolyLine normal constructor (single precision).
// Makes n points with (x, y) coordinates from x and y.
// The option string is ignored.

fOption = option;
fLastPoint = -1;
if (n <= 0) {
fN = 0;
fLastPoint = -1;
fX = fY = 0;
return;
}
fN = n;
fX = new Double_t[fN];
fY = new Double_t[fN];
if (!x || !y) return;
for (Int_t i=0; i<fN;i++) { fX[i] = x[i]; fY[i] = y[i];}
fLastPoint = fN-1;
}

//______________________________________________________________________________
TPolyLine::TPolyLine(Int_t n, Double_t *x, Double_t *y, Option_t *option)
:TObject(), TAttLine(), TAttFill()
{
// PolyLine normal constructor (double precision).
// Makes n points with (x, y) coordinates from x and y.
// The option string is ignored.

fOption = option;
fLastPoint = -1;
if (n <= 0) {
fN = 0;
fLastPoint = -1;
fX = fY = 0;
return;
}
fN = n;
fX = new Double_t[fN];
fY = new Double_t[fN];
if (!x || !y) return;
for (Int_t i=0; i<fN;i++) { fX[i] = x[i]; fY[i] = y[i];}
fLastPoint = fN-1;
}

//______________________________________________________________________________
TPolyLine& TPolyLine::operator=(const TPolyLine& pl)
{
//assignment operator
if(this!=&pl) {
TObject::operator=(pl);
TAttLine::operator=(pl);
TAttFill::operator=(pl);
fN=pl.fN;
fLastPoint=pl.fLastPoint;
fX=pl.fX;
fY=pl.fY;
fOption=pl.fOption;
}
return *this;
}

//______________________________________________________________________________
TPolyLine::~TPolyLine()
{
// PolyLine default destructor.

if (fX) delete [] fX;
if (fY) delete [] fY;
}

//______________________________________________________________________________
TPolyLine::TPolyLine(const TPolyLine &polyline) : TObject(polyline), TAttLine(polyline), TAttFill(polyline)
{
// PolyLine copy constructor.

((TPolyLine&)polyline).Copy(*this);
}

//______________________________________________________________________________
void TPolyLine::Copy(TObject &obj) const
{
// Copy this polyline to polyline.

TObject::Copy(obj);
TAttLine::Copy(((TPolyLine&)obj));
TAttFill::Copy(((TPolyLine&)obj));
((TPolyLine&)obj).fN = fN;
if (fN > 0) {
((TPolyLine&)obj).fX = new Double_t[fN];
((TPolyLine&)obj).fY = new Double_t[fN];
for (Int_t i=0; i<fN;i++)  {((TPolyLine&)obj).fX[i] = fX[i]; ((TPolyLine&)obj).fY[i] = fY[i];}
} else {
((TPolyLine&)obj).fX = 0;
((TPolyLine&)obj).fY = 0;
}
((TPolyLine&)obj).fOption = fOption;
((TPolyLine&)obj).fLastPoint = fLastPoint;
}

//______________________________________________________________________________
Int_t TPolyLine::DistancetoPrimitive(Int_t px, Int_t py)
{
// Returns closest distance in pixels from point (px, py) to a polyline.
//
// First looks for distances to the points of the polyline.  Stops search
// and returns if a vertex of the polyline is found to be closer than 10
// pixels.  Thus the return value may depend on the ordering of points
// in the polyline.
//
// Then looks for distances to the lines of the polyline.  There is no
// arbitrary cutoff; any distance may be found.
//
// Finally checks whether (px, py) is inside a closed and filled polyline.
// (Must be EXACTLY closed.  "Filled" means fill color and fill style are
// both non-zero.) If so, returns zero.
//
// Returns 9999 if the polyline has no points.

const Int_t big = 9999;
const Int_t kMaxDiff = 10;

// check if point is near one of the points
Int_t i, pxp, pyp, d;
Int_t distance = big;
if (Size() <= 0) return distance;

for (i=0;i<Size();i++) {
d   = TMath::Abs(pxp-px) + TMath::Abs(pyp-py);
if (d < distance) distance = d;
}
if (distance < kMaxDiff) return distance;

// check if point is near one of the connecting lines
for (i=0;i<Size()-1;i++) {
if (d < distance) distance = d;
}

// in case of a closed and filled polyline, check if we are inside
if (fFillColor && fFillStyle && fX[0] == fX[fLastPoint] && fY[0] == fY[fLastPoint]) {
}
return distance;
}

//______________________________________________________________________________
void TPolyLine::Draw(Option_t *option)
{
// Draw this polyline with its current attributes.

}

//______________________________________________________________________________
void TPolyLine::DrawPolyLine(Int_t n, Double_t *x, Double_t *y, Option_t *option)
{
// Draw this polyline with new coordinates.

TPolyLine *newpolyline = new TPolyLine(n,x,y);
TAttLine::Copy(*newpolyline);
TAttFill::Copy(*newpolyline);
newpolyline->fOption = fOption;
newpolyline->SetBit(kCanDelete);
}

//______________________________________________________________________________
void TPolyLine::ExecuteEvent(Int_t event, Int_t px, Int_t py)
{
// Execute action corresponding to one event.
//
//  This member function is called when a polyline is clicked with the locator
//
//  If Left button clicked on one of the line end points, this point
//     follows the cursor until button is released.
//
//  if Middle button clicked, the line is moved parallel to itself
//     until the button is released.

Int_t i, d;
Double_t xmin, xmax, ymin, ymax, dx, dy, dxr, dyr;
const Int_t kMaxDiff = 10;
static Bool_t middle;
static Int_t ipoint, pxp, pyp;
static Int_t px1,px2,py1,py2;
static Int_t pxold, pyold, px1old, py1old, px2old, py2old;
static Int_t dpx, dpy;
static Int_t *x=0, *y=0;

Int_t np = Size();

switch (event) {

case kButton1Down:
gVirtualX->SetLineColor(-1);
TAttLine::Modify();  //Change line attributes only if necessary
ipoint = -1;

if (x || y) break;
x = new Int_t[np+1];
y = new Int_t[np+1];
for (i=0;i<np;i++) {
gVirtualX->DrawLine(pxp-4, pyp-4, pxp+4,  pyp-4);
gVirtualX->DrawLine(pxp+4, pyp-4, pxp+4,  pyp+4);
gVirtualX->DrawLine(pxp+4, pyp+4, pxp-4,  pyp+4);
gVirtualX->DrawLine(pxp-4, pyp+4, pxp-4,  pyp-4);
x[i] = pxp;
y[i] = pyp;
d   = TMath::Abs(pxp-px) + TMath::Abs(pyp-py);
if (d < kMaxDiff) ipoint =i;
}
dpx = 0;
dpy = 0;
pxold = px;
pyold = py;
if (ipoint < 0) return;
if (ipoint == 0) {
px1old = 0;
py1old = 0;
} else if (ipoint == fN-1) {
px2old = 0;
py2old = 0;
} else {
}

break;

case kMouseMotion:

middle = kTRUE;
for (i=0;i<np;i++) {
d   = TMath::Abs(pxp-px) + TMath::Abs(pyp-py);
if (d < kMaxDiff) middle = kFALSE;
}

// check if point is close to an axis
break;

case kButton1Motion:
if (middle) {
for(i=0;i<np-1;i++) {
gVirtualX->DrawLine(x[i]+dpx, y[i]+dpy, x[i+1]+dpx, y[i+1]+dpy);
pxp = x[i]+dpx;
pyp = y[i]+dpy;
gVirtualX->DrawLine(pxp-4, pyp-4, pxp+4,  pyp-4);
gVirtualX->DrawLine(pxp+4, pyp-4, pxp+4,  pyp+4);
gVirtualX->DrawLine(pxp+4, pyp+4, pxp-4,  pyp+4);
gVirtualX->DrawLine(pxp-4, pyp+4, pxp-4,  pyp-4);
}
pxp = x[np-1]+dpx;
pyp = y[np-1]+dpy;
gVirtualX->DrawLine(pxp-4, pyp-4, pxp+4,  pyp-4);
gVirtualX->DrawLine(pxp+4, pyp-4, pxp+4,  pyp+4);
gVirtualX->DrawLine(pxp+4, pyp+4, pxp-4,  pyp+4);
gVirtualX->DrawLine(pxp-4, pyp+4, pxp-4,  pyp-4);
dpx += px - pxold;
dpy += py - pyold;
pxold = px;
pyold = py;
for(i=0;i<np-1;i++) {
gVirtualX->DrawLine(x[i]+dpx, y[i]+dpy, x[i+1]+dpx, y[i+1]+dpy);
pxp = x[i]+dpx;
pyp = y[i]+dpy;
gVirtualX->DrawLine(pxp-4, pyp-4, pxp+4,  pyp-4);
gVirtualX->DrawLine(pxp+4, pyp-4, pxp+4,  pyp+4);
gVirtualX->DrawLine(pxp+4, pyp+4, pxp-4,  pyp+4);
gVirtualX->DrawLine(pxp-4, pyp+4, pxp-4,  pyp-4);
}
pxp = x[np-1]+dpx;
pyp = y[np-1]+dpy;
gVirtualX->DrawLine(pxp-4, pyp-4, pxp+4,  pyp-4);
gVirtualX->DrawLine(pxp+4, pyp-4, pxp+4,  pyp+4);
gVirtualX->DrawLine(pxp+4, pyp+4, pxp-4,  pyp+4);
gVirtualX->DrawLine(pxp-4, pyp+4, pxp-4,  pyp-4);
} else {
if (px1old) gVirtualX->DrawLine(px1old, py1old, pxold,  pyold);
if (px2old) gVirtualX->DrawLine(pxold,  pyold,  px2old, py2old);
gVirtualX->DrawLine(pxold-4, pyold-4, pxold+4,  pyold-4);
gVirtualX->DrawLine(pxold+4, pyold-4, pxold+4,  pyold+4);
gVirtualX->DrawLine(pxold+4, pyold+4, pxold-4,  pyold+4);
gVirtualX->DrawLine(pxold-4, pyold+4, pxold-4,  pyold-4);
pxold = px;
pxold = TMath::Max(pxold, px1);
pxold = TMath::Min(pxold, px2);
pyold = py;
pyold = TMath::Max(pyold, py2);
pyold = TMath::Min(pyold, py1);
if (px1old) gVirtualX->DrawLine(px1old, py1old, pxold,  pyold);
if (px2old) gVirtualX->DrawLine(pxold,  pyold,  px2old, py2old);
gVirtualX->DrawLine(pxold-4, pyold-4, pxold+4,  pyold-4);
gVirtualX->DrawLine(pxold+4, pyold-4, pxold+4,  pyold+4);
gVirtualX->DrawLine(pxold+4, pyold+4, pxold-4,  pyold+4);
gVirtualX->DrawLine(pxold-4, pyold+4, pxold-4,  pyold-4);
}
break;

case kButton1Up:

// Compute x,y range
dx   = xmax-xmin;
dy   = ymax-ymin;

// Range() could change the size of the pad pixmap and therefore should
// be called before the other paint routines

if (middle) {
for(i=0;i<np;i++) {
}
} else {
}
delete [] x; x = 0;
delete [] y; y = 0;
gVirtualX->SetLineColor(-1);
}
}

//______________________________________________________________________________
void TPolyLine::ls(Option_t *) const
{
// List this polyline with its attributes.
// The option string is ignored.

TROOT::IndentLevel();
printf("TPolyLine  N=%d\n",fN);
}

//______________________________________________________________________________
Int_t TPolyLine::Merge(TCollection *li)
{
// Merge polylines in the collection in this polyline

if (!li) return 0;
TIter next(li);

//first loop to count the number of entries
TPolyLine *pl;
Int_t npoints = 0;
while ((pl = (TPolyLine*)next())) {
if (!pl->InheritsFrom(TPolyLine::Class())) {
return -1;
}
npoints += pl->Size();
}

//extend this polyline to hold npoints
pl->SetPoint(npoints-1,0,0);

//merge all polylines
next.Reset();
while ((pl = (TPolyLine*)next())) {
Int_t np = pl->Size();
Double_t *x = pl->GetX();
Double_t *y = pl->GetY();
for (Int_t i=0;i<np;i++) {
SetPoint(i,x[i],y[i]);
}
}

return npoints;
}

//______________________________________________________________________________
void TPolyLine::Paint(Option_t *option)
{
// Paint this polyline with its current attributes.

if (TestBit(kPolyLineNDC)) {
if (strlen(option) > 0) PaintPolyLineNDC(fLastPoint+1, fX, fY, option);
else                    PaintPolyLineNDC(fLastPoint+1, fX, fY, fOption.Data());
} else {
if (strlen(option) > 0) PaintPolyLine(fLastPoint+1, fX, fY, option);
else                    PaintPolyLine(fLastPoint+1, fX, fY, fOption.Data());
}
}

//______________________________________________________________________________
void TPolyLine::PaintPolyLine(Int_t n, Double_t *x, Double_t *y, Option_t *option)
{
// Draw this polyline with new coordinates.
//
//  If option = 'f' or 'F' the fill area is drawn.
//  The default is to draw the lines only.

if (n <= 0) return;
TAttLine::Modify();  //Change line attributes only if necessary
TAttFill::Modify();  //Change fill area attributes only if necessary
Double_t *xx = x;
Double_t *yy = y;
xx = new Double_t[n];
}
yy = new Double_t[n];
}
if (*option == 'f' || *option == 'F') gPad->PaintFillArea(n,xx,yy,option);
if (x != xx) delete [] xx;
if (y != yy) delete [] yy;
}

//______________________________________________________________________________
void TPolyLine::PaintPolyLineNDC(Int_t n, Double_t *x, Double_t *y, Option_t *option)
{
// Draw this polyline with new coordinates in NDC.

TAttLine::Modify();  //Change line attributes only if necessary
TAttFill::Modify();  //Change fill area attributes only if necessary
}

//______________________________________________________________________________
void TPolyLine::Print(Option_t *) const
{
// Dump this polyline with its attributes.
// The option string is ignored.

printf("PolyLine  N=%d\n",fN);
}

//______________________________________________________________________________
void TPolyLine::SavePrimitive(ostream &out, Option_t *option /*= ""*/)
{
// Save primitive as a C++ statement(s) on output stream out

char quote = '"';
out<<"   "<<endl;
out<<"   Double_t *dum = 0;"<<endl;
if (gROOT->ClassSaved(TPolyLine::Class())) {
out<<"   ";
} else {
out<<"   TPolyLine *";
}
out<<"pline = new TPolyLine("<<fN<<",dum,dum,"<<quote<<fOption<<quote<<");"<<endl;

SaveFillAttributes(out,"pline",0,1001);
SaveLineAttributes(out,"pline",1,1,1);

for (Int_t i=0;i<Size();i++) {
out<<"   pline->SetPoint("<<i<<","<<fX[i]<<","<<fY[i]<<");"<<endl;
}
out<<"   pline->Draw("
<<quote<<option<<quote<<");"<<endl;
}

//______________________________________________________________________________
void TPolyLine::SetNDC(Bool_t isNDC)
{
// Set NDC mode on if isNDC = kTRUE, off otherwise

ResetBit(kPolyLineNDC);
if (isNDC) SetBit(kPolyLineNDC);
}

//______________________________________________________________________________
Int_t TPolyLine::SetNextPoint(Double_t x, Double_t y)
{
// Set point following LastPoint to x, y.
// Returns index of the point (new last point).

fLastPoint++;
SetPoint(fLastPoint, x, y);
return fLastPoint;
}

//______________________________________________________________________________
void TPolyLine::SetPoint(Int_t n, Double_t x, Double_t y)
{
// Set point number n to (x, y)
// If n is greater than the current size, the arrays are automatically
// extended.

if (n < 0) return;
if (!fX || !fY || n >= fN) {
// re-allocate the object
Int_t newN = TMath::Max(2*fN,n+1);
Double_t *savex = new Double_t [newN];
Double_t *savey = new Double_t [newN];
if (fX && fN){
memcpy(savex,fX,fN*sizeof(Double_t));
memset(&savex[fN],0,(newN-fN)*sizeof(Double_t));
delete [] fX;
}
if (fY && fN){
memcpy(savey,fY,fN*sizeof(Double_t));
memset(&savey[fN],0,(newN-fN)*sizeof(Double_t));
delete [] fY;
}
fX = savex;
fY = savey;
fN = newN;
}
fX[n] = x;
fY[n] = y;
fLastPoint = TMath::Max(fLastPoint,n);
}

//______________________________________________________________________________
void TPolyLine::SetPolyLine(Int_t n)
{
// Resize this polyline to size n.
// If n <= 0 the current arrays of points are deleted.
// If n is greater than the current size, the new points are set to (0, 0)

if (n <= 0) {
fN = 0;
fLastPoint = -1;
delete [] fX;
delete [] fY;
fX = fY = 0;
return;
}
if (n < fN) {
fN = n;
fLastPoint = n - 1;
} else {
SetPoint(n-1,0,0);
}
}

//______________________________________________________________________________
void TPolyLine::SetPolyLine(Int_t n, Float_t *x, Float_t *y, Option_t *option)
{
// Set new values for this polyline (single precision).
//
// If n <= 0 the current arrays of points are deleted.

if (n <= 0) {
fN = 0;
fLastPoint = -1;
delete [] fX;
delete [] fY;
fX = fY = 0;
return;
}
fN =n;
if (fX) delete [] fX;
if (fY) delete [] fY;
fX = new Double_t[fN];
fY = new Double_t[fN];
for (Int_t i=0; i<fN;i++) {
if (x) fX[i] = (Double_t)x[i];
if (y) fY[i] = (Double_t)y[i];
}
fOption = option;
fLastPoint = fN-1;
}

//______________________________________________________________________________
void TPolyLine::SetPolyLine(Int_t n, Double_t *x, Double_t *y, Option_t *option)
{
// Set new values for this polyline (double precision).
//
// If n <= 0 the current arrays of points are deleted.

if (n <= 0) {
fN = 0;
fLastPoint = -1;
delete [] fX;
delete [] fY;
fX = fY = 0;
return;
}
fN =n;
if (fX) delete [] fX;
if (fY) delete [] fY;
fX = new Double_t[fN];
fY = new Double_t[fN];
for (Int_t i=0; i<fN;i++) {
if (x) fX[i] = x[i];
if (y) fY[i] = y[i];
}
fOption = option;
fLastPoint = fN-1;
}

//_______________________________________________________________________
void TPolyLine::Streamer(TBuffer &b)
{
// Stream a class object.

UInt_t R__s, R__c;
if (R__v > 1) {
return;
}
//====process old versions before automatic schema evolution
TObject::Streamer(b);
TAttLine::Streamer(b);
TAttFill::Streamer(b);
b >> fN;
fX = new Double_t[fN];
fY = new Double_t[fN];
Float_t *x = new Float_t[fN];
Float_t *y = new Float_t[fN];
for (Int_t i=0;i<fN;i++) {
fX[i] = x[i];
fY[i] = y[i];
}
fOption.Streamer(b);
b.CheckByteCount(R__s, R__c, TPolyLine::IsA());
//====end of old versions

} else {
b.WriteClassBuffer(TPolyLine::Class(),this);
}
}
```
TPolyLine.cxx:1
TPolyLine.cxx:2
TPolyLine.cxx:3
TPolyLine.cxx:4
TPolyLine.cxx:5
TPolyLine.cxx:6
TPolyLine.cxx:7
TPolyLine.cxx:8
TPolyLine.cxx:9
TPolyLine.cxx:10
TPolyLine.cxx:11
TPolyLine.cxx:12
TPolyLine.cxx:13
TPolyLine.cxx:14
TPolyLine.cxx:15
TPolyLine.cxx:16
TPolyLine.cxx:17
TPolyLine.cxx:18
TPolyLine.cxx:19
TPolyLine.cxx:20
TPolyLine.cxx:21
TPolyLine.cxx:22
TPolyLine.cxx:23
TPolyLine.cxx:24
TPolyLine.cxx:25
TPolyLine.cxx:26
TPolyLine.cxx:27
TPolyLine.cxx:28
TPolyLine.cxx:29
TPolyLine.cxx:30
TPolyLine.cxx:31
TPolyLine.cxx:32
TPolyLine.cxx:33
TPolyLine.cxx:34
TPolyLine.cxx:35
TPolyLine.cxx:36
TPolyLine.cxx:37
TPolyLine.cxx:38
TPolyLine.cxx:39
TPolyLine.cxx:40
TPolyLine.cxx:41
TPolyLine.cxx:42
TPolyLine.cxx:43
TPolyLine.cxx:44
TPolyLine.cxx:45
TPolyLine.cxx:46
TPolyLine.cxx:47
TPolyLine.cxx:48
TPolyLine.cxx:49
TPolyLine.cxx:50
TPolyLine.cxx:51
TPolyLine.cxx:52
TPolyLine.cxx:53
TPolyLine.cxx:54
TPolyLine.cxx:55
TPolyLine.cxx:56
TPolyLine.cxx:57
TPolyLine.cxx:58
TPolyLine.cxx:59
TPolyLine.cxx:60
TPolyLine.cxx:61
TPolyLine.cxx:62
TPolyLine.cxx:63
TPolyLine.cxx:64
TPolyLine.cxx:65
TPolyLine.cxx:66
TPolyLine.cxx:67
TPolyLine.cxx:68
TPolyLine.cxx:69
TPolyLine.cxx:70
TPolyLine.cxx:71
TPolyLine.cxx:72
TPolyLine.cxx:73
TPolyLine.cxx:74
TPolyLine.cxx:75
TPolyLine.cxx:76
TPolyLine.cxx:77
TPolyLine.cxx:78
TPolyLine.cxx:79
TPolyLine.cxx:80
TPolyLine.cxx:81
TPolyLine.cxx:82
TPolyLine.cxx:83
TPolyLine.cxx:84
TPolyLine.cxx:85
TPolyLine.cxx:86
TPolyLine.cxx:87
TPolyLine.cxx:88
TPolyLine.cxx:89
TPolyLine.cxx:90
TPolyLine.cxx:91
TPolyLine.cxx:92
TPolyLine.cxx:93
TPolyLine.cxx:94
TPolyLine.cxx:95
TPolyLine.cxx:96
TPolyLine.cxx:97
TPolyLine.cxx:98
TPolyLine.cxx:99
TPolyLine.cxx:100
TPolyLine.cxx:101
TPolyLine.cxx:102
TPolyLine.cxx:103
TPolyLine.cxx:104
TPolyLine.cxx:105
TPolyLine.cxx:106
TPolyLine.cxx:107
TPolyLine.cxx:108
TPolyLine.cxx:109
TPolyLine.cxx:110
TPolyLine.cxx:111
TPolyLine.cxx:112
TPolyLine.cxx:113
TPolyLine.cxx:114
TPolyLine.cxx:115
TPolyLine.cxx:116
TPolyLine.cxx:117
TPolyLine.cxx:118
TPolyLine.cxx:119
TPolyLine.cxx:120
TPolyLine.cxx:121
TPolyLine.cxx:122
TPolyLine.cxx:123
TPolyLine.cxx:124
TPolyLine.cxx:125
TPolyLine.cxx:126
TPolyLine.cxx:127
TPolyLine.cxx:128
TPolyLine.cxx:129
TPolyLine.cxx:130
TPolyLine.cxx:131
TPolyLine.cxx:132
TPolyLine.cxx:133
TPolyLine.cxx:134
TPolyLine.cxx:135
TPolyLine.cxx:136
TPolyLine.cxx:137
TPolyLine.cxx:138
TPolyLine.cxx:139
TPolyLine.cxx:140
TPolyLine.cxx:141
TPolyLine.cxx:142
TPolyLine.cxx:143
TPolyLine.cxx:144
TPolyLine.cxx:145
TPolyLine.cxx:146
TPolyLine.cxx:147
TPolyLine.cxx:148
TPolyLine.cxx:149
TPolyLine.cxx:150
TPolyLine.cxx:151
TPolyLine.cxx:152
TPolyLine.cxx:153
TPolyLine.cxx:154
TPolyLine.cxx:155
TPolyLine.cxx:156
TPolyLine.cxx:157
TPolyLine.cxx:158
TPolyLine.cxx:159
TPolyLine.cxx:160
TPolyLine.cxx:161
TPolyLine.cxx:162
TPolyLine.cxx:163
TPolyLine.cxx:164
TPolyLine.cxx:165
TPolyLine.cxx:166
TPolyLine.cxx:167
TPolyLine.cxx:168
TPolyLine.cxx:169
TPolyLine.cxx:170
TPolyLine.cxx:171
TPolyLine.cxx:172
TPolyLine.cxx:173
TPolyLine.cxx:174
TPolyLine.cxx:175
TPolyLine.cxx:176
TPolyLine.cxx:177
TPolyLine.cxx:178
TPolyLine.cxx:179
TPolyLine.cxx:180
TPolyLine.cxx:181
TPolyLine.cxx:182
TPolyLine.cxx:183
TPolyLine.cxx:184
TPolyLine.cxx:185
TPolyLine.cxx:186
TPolyLine.cxx:187
TPolyLine.cxx:188
TPolyLine.cxx:189
TPolyLine.cxx:190
TPolyLine.cxx:191
TPolyLine.cxx:192
TPolyLine.cxx:193
TPolyLine.cxx:194
TPolyLine.cxx:195
TPolyLine.cxx:196
TPolyLine.cxx:197
TPolyLine.cxx:198
TPolyLine.cxx:199
TPolyLine.cxx:200
TPolyLine.cxx:201
TPolyLine.cxx:202
TPolyLine.cxx:203
TPolyLine.cxx:204
TPolyLine.cxx:205
TPolyLine.cxx:206
TPolyLine.cxx:207
TPolyLine.cxx:208
TPolyLine.cxx:209
TPolyLine.cxx:210
TPolyLine.cxx:211
TPolyLine.cxx:212
TPolyLine.cxx:213
TPolyLine.cxx:214
TPolyLine.cxx:215
TPolyLine.cxx:216
TPolyLine.cxx:217
TPolyLine.cxx:218
TPolyLine.cxx:219
TPolyLine.cxx:220
TPolyLine.cxx:221
TPolyLine.cxx:222
TPolyLine.cxx:223
TPolyLine.cxx:224
TPolyLine.cxx:225
TPolyLine.cxx:226
TPolyLine.cxx:227
TPolyLine.cxx:228
TPolyLine.cxx:229
TPolyLine.cxx:230
TPolyLine.cxx:231
TPolyLine.cxx:232
TPolyLine.cxx:233
TPolyLine.cxx:234
TPolyLine.cxx:235
TPolyLine.cxx:236
TPolyLine.cxx:237
TPolyLine.cxx:238
TPolyLine.cxx:239
TPolyLine.cxx:240
TPolyLine.cxx:241
TPolyLine.cxx:242
TPolyLine.cxx:243
TPolyLine.cxx:244
TPolyLine.cxx:245
TPolyLine.cxx:246
TPolyLine.cxx:247
TPolyLine.cxx:248
TPolyLine.cxx:249
TPolyLine.cxx:250
TPolyLine.cxx:251
TPolyLine.cxx:252
TPolyLine.cxx:253
TPolyLine.cxx:254
TPolyLine.cxx:255
TPolyLine.cxx:256
TPolyLine.cxx:257
TPolyLine.cxx:258
TPolyLine.cxx:259
TPolyLine.cxx:260
TPolyLine.cxx:261
TPolyLine.cxx:262
TPolyLine.cxx:263
TPolyLine.cxx:264
TPolyLine.cxx:265
TPolyLine.cxx:266
TPolyLine.cxx:267
TPolyLine.cxx:268
TPolyLine.cxx:269
TPolyLine.cxx:270
TPolyLine.cxx:271
TPolyLine.cxx:272
TPolyLine.cxx:273
TPolyLine.cxx:274
TPolyLine.cxx:275
TPolyLine.cxx:276
TPolyLine.cxx:277
TPolyLine.cxx:278
TPolyLine.cxx:279
TPolyLine.cxx:280
TPolyLine.cxx:281
TPolyLine.cxx:282
TPolyLine.cxx:283
TPolyLine.cxx:284
TPolyLine.cxx:285
TPolyLine.cxx:286
TPolyLine.cxx:287
TPolyLine.cxx:288
TPolyLine.cxx:289
TPolyLine.cxx:290
TPolyLine.cxx:291
TPolyLine.cxx:292
TPolyLine.cxx:293
TPolyLine.cxx:294
TPolyLine.cxx:295
TPolyLine.cxx:296
TPolyLine.cxx:297
TPolyLine.cxx:298
TPolyLine.cxx:299
TPolyLine.cxx:300
TPolyLine.cxx:301
TPolyLine.cxx:302
TPolyLine.cxx:303
TPolyLine.cxx:304
TPolyLine.cxx:305
TPolyLine.cxx:306
TPolyLine.cxx:307
TPolyLine.cxx:308
TPolyLine.cxx:309
TPolyLine.cxx:310
TPolyLine.cxx:311
TPolyLine.cxx:312
TPolyLine.cxx:313
TPolyLine.cxx:314
TPolyLine.cxx:315
TPolyLine.cxx:316
TPolyLine.cxx:317
TPolyLine.cxx:318
TPolyLine.cxx:319
TPolyLine.cxx:320
TPolyLine.cxx:321
TPolyLine.cxx:322
TPolyLine.cxx:323
TPolyLine.cxx:324
TPolyLine.cxx:325
TPolyLine.cxx:326
TPolyLine.cxx:327
TPolyLine.cxx:328
TPolyLine.cxx:329
TPolyLine.cxx:330
TPolyLine.cxx:331
TPolyLine.cxx:332
TPolyLine.cxx:333
TPolyLine.cxx:334
TPolyLine.cxx:335
TPolyLine.cxx:336
TPolyLine.cxx:337
TPolyLine.cxx:338
TPolyLine.cxx:339
TPolyLine.cxx:340
TPolyLine.cxx:341
TPolyLine.cxx:342
TPolyLine.cxx:343
TPolyLine.cxx:344
TPolyLine.cxx:345
TPolyLine.cxx:346
TPolyLine.cxx:347
TPolyLine.cxx:348
TPolyLine.cxx:349
TPolyLine.cxx:350
TPolyLine.cxx:351
TPolyLine.cxx:352
TPolyLine.cxx:353
TPolyLine.cxx:354
TPolyLine.cxx:355
TPolyLine.cxx:356
TPolyLine.cxx:357
TPolyLine.cxx:358
TPolyLine.cxx:359
TPolyLine.cxx:360
TPolyLine.cxx:361
TPolyLine.cxx:362
TPolyLine.cxx:363
TPolyLine.cxx:364
TPolyLine.cxx:365
TPolyLine.cxx:366
TPolyLine.cxx:367
TPolyLine.cxx:368
TPolyLine.cxx:369
TPolyLine.cxx:370
TPolyLine.cxx:371
TPolyLine.cxx:372
TPolyLine.cxx:373
TPolyLine.cxx:374
TPolyLine.cxx:375
TPolyLine.cxx:376
TPolyLine.cxx:377
TPolyLine.cxx:378
TPolyLine.cxx:379
TPolyLine.cxx:380
TPolyLine.cxx:381
TPolyLine.cxx:382
TPolyLine.cxx:383
TPolyLine.cxx:384
TPolyLine.cxx:385
TPolyLine.cxx:386
TPolyLine.cxx:387
TPolyLine.cxx:388
TPolyLine.cxx:389
TPolyLine.cxx:390
TPolyLine.cxx:391
TPolyLine.cxx:392
TPolyLine.cxx:393
TPolyLine.cxx:394
TPolyLine.cxx:395
TPolyLine.cxx:396
TPolyLine.cxx:397
TPolyLine.cxx:398
TPolyLine.cxx:399
TPolyLine.cxx:400
TPolyLine.cxx:401
TPolyLine.cxx:402
TPolyLine.cxx:403
TPolyLine.cxx:404
TPolyLine.cxx:405
TPolyLine.cxx:406
TPolyLine.cxx:407
TPolyLine.cxx:408
TPolyLine.cxx:409
TPolyLine.cxx:410
TPolyLine.cxx:411
TPolyLine.cxx:412
TPolyLine.cxx:413
TPolyLine.cxx:414
TPolyLine.cxx:415
TPolyLine.cxx:416
TPolyLine.cxx:417
TPolyLine.cxx:418
TPolyLine.cxx:419
TPolyLine.cxx:420
TPolyLine.cxx:421
TPolyLine.cxx:422
TPolyLine.cxx:423
TPolyLine.cxx:424
TPolyLine.cxx:425
TPolyLine.cxx:426
TPolyLine.cxx:427
TPolyLine.cxx:428
TPolyLine.cxx:429
TPolyLine.cxx:430
TPolyLine.cxx:431
TPolyLine.cxx:432
TPolyLine.cxx:433
TPolyLine.cxx:434
TPolyLine.cxx:435
TPolyLine.cxx:436
TPolyLine.cxx:437
TPolyLine.cxx:438
TPolyLine.cxx:439
TPolyLine.cxx:440
TPolyLine.cxx:441
TPolyLine.cxx:442
TPolyLine.cxx:443
TPolyLine.cxx:444
TPolyLine.cxx:445
TPolyLine.cxx:446
TPolyLine.cxx:447
TPolyLine.cxx:448
TPolyLine.cxx:449
TPolyLine.cxx:450
TPolyLine.cxx:451
TPolyLine.cxx:452
TPolyLine.cxx:453
TPolyLine.cxx:454
TPolyLine.cxx:455
TPolyLine.cxx:456
TPolyLine.cxx:457
TPolyLine.cxx:458
TPolyLine.cxx:459
TPolyLine.cxx:460
TPolyLine.cxx:461
TPolyLine.cxx:462
TPolyLine.cxx:463
TPolyLine.cxx:464
TPolyLine.cxx:465
TPolyLine.cxx:466
TPolyLine.cxx:467
TPolyLine.cxx:468
TPolyLine.cxx:469
TPolyLine.cxx:470
TPolyLine.cxx:471
TPolyLine.cxx:472
TPolyLine.cxx:473
TPolyLine.cxx:474
TPolyLine.cxx:475
TPolyLine.cxx:476
TPolyLine.cxx:477
TPolyLine.cxx:478
TPolyLine.cxx:479
TPolyLine.cxx:480
TPolyLine.cxx:481
TPolyLine.cxx:482
TPolyLine.cxx:483
TPolyLine.cxx:484
TPolyLine.cxx:485
TPolyLine.cxx:486
TPolyLine.cxx:487
TPolyLine.cxx:488
TPolyLine.cxx:489
TPolyLine.cxx:490
TPolyLine.cxx:491
TPolyLine.cxx:492
TPolyLine.cxx:493
TPolyLine.cxx:494
TPolyLine.cxx:495
TPolyLine.cxx:496
TPolyLine.cxx:497
TPolyLine.cxx:498
TPolyLine.cxx:499
TPolyLine.cxx:500
TPolyLine.cxx:501
TPolyLine.cxx:502
TPolyLine.cxx:503
TPolyLine.cxx:504
TPolyLine.cxx:505
TPolyLine.cxx:506
TPolyLine.cxx:507
TPolyLine.cxx:508
TPolyLine.cxx:509
TPolyLine.cxx:510
TPolyLine.cxx:511
TPolyLine.cxx:512
TPolyLine.cxx:513
TPolyLine.cxx:514
TPolyLine.cxx:515
TPolyLine.cxx:516
TPolyLine.cxx:517
TPolyLine.cxx:518
TPolyLine.cxx:519
TPolyLine.cxx:520
TPolyLine.cxx:521
TPolyLine.cxx:522
TPolyLine.cxx:523
TPolyLine.cxx:524
TPolyLine.cxx:525
TPolyLine.cxx:526
TPolyLine.cxx:527
TPolyLine.cxx:528
TPolyLine.cxx:529
TPolyLine.cxx:530
TPolyLine.cxx:531
TPolyLine.cxx:532
TPolyLine.cxx:533
TPolyLine.cxx:534
TPolyLine.cxx:535
TPolyLine.cxx:536
TPolyLine.cxx:537
TPolyLine.cxx:538
TPolyLine.cxx:539
TPolyLine.cxx:540
TPolyLine.cxx:541
TPolyLine.cxx:542
TPolyLine.cxx:543
TPolyLine.cxx:544
TPolyLine.cxx:545
TPolyLine.cxx:546
TPolyLine.cxx:547
TPolyLine.cxx:548
TPolyLine.cxx:549
TPolyLine.cxx:550
TPolyLine.cxx:551
TPolyLine.cxx:552
TPolyLine.cxx:553
TPolyLine.cxx:554
TPolyLine.cxx:555
TPolyLine.cxx:556
TPolyLine.cxx:557
TPolyLine.cxx:558
TPolyLine.cxx:559
TPolyLine.cxx:560
TPolyLine.cxx:561
TPolyLine.cxx:562
TPolyLine.cxx:563
TPolyLine.cxx:564
TPolyLine.cxx:565
TPolyLine.cxx:566
TPolyLine.cxx:567
TPolyLine.cxx:568
TPolyLine.cxx:569
TPolyLine.cxx:570
TPolyLine.cxx:571
TPolyLine.cxx:572
TPolyLine.cxx:573
TPolyLine.cxx:574
TPolyLine.cxx:575
TPolyLine.cxx:576
TPolyLine.cxx:577
TPolyLine.cxx:578
TPolyLine.cxx:579
TPolyLine.cxx:580
TPolyLine.cxx:581
TPolyLine.cxx:582
TPolyLine.cxx:583
TPolyLine.cxx:584
TPolyLine.cxx:585
TPolyLine.cxx:586
TPolyLine.cxx:587
TPolyLine.cxx:588
TPolyLine.cxx:589
TPolyLine.cxx:590
TPolyLine.cxx:591
TPolyLine.cxx:592
TPolyLine.cxx:593
TPolyLine.cxx:594
TPolyLine.cxx:595
TPolyLine.cxx:596
TPolyLine.cxx:597
TPolyLine.cxx:598
TPolyLine.cxx:599
TPolyLine.cxx:600
TPolyLine.cxx:601
TPolyLine.cxx:602
TPolyLine.cxx:603
TPolyLine.cxx:604
TPolyLine.cxx:605
TPolyLine.cxx:606
TPolyLine.cxx:607
TPolyLine.cxx:608
TPolyLine.cxx:609
TPolyLine.cxx:610
TPolyLine.cxx:611
TPolyLine.cxx:612
TPolyLine.cxx:613
TPolyLine.cxx:614
TPolyLine.cxx:615
TPolyLine.cxx:616
TPolyLine.cxx:617
TPolyLine.cxx:618
TPolyLine.cxx:619
TPolyLine.cxx:620
TPolyLine.cxx:621
TPolyLine.cxx:622
TPolyLine.cxx:623
TPolyLine.cxx:624
TPolyLine.cxx:625
TPolyLine.cxx:626
TPolyLine.cxx:627
TPolyLine.cxx:628
TPolyLine.cxx:629
TPolyLine.cxx:630
TPolyLine.cxx:631
TPolyLine.cxx:632
TPolyLine.cxx:633
TPolyLine.cxx:634
TPolyLine.cxx:635
TPolyLine.cxx:636
TPolyLine.cxx:637
TPolyLine.cxx:638
TPolyLine.cxx:639
TPolyLine.cxx:640
TPolyLine.cxx:641
TPolyLine.cxx:642
TPolyLine.cxx:643
TPolyLine.cxx:644
TPolyLine.cxx:645
TPolyLine.cxx:646
TPolyLine.cxx:647
TPolyLine.cxx:648
TPolyLine.cxx:649
TPolyLine.cxx:650
TPolyLine.cxx:651
TPolyLine.cxx:652
TPolyLine.cxx:653
TPolyLine.cxx:654
TPolyLine.cxx:655
TPolyLine.cxx:656
TPolyLine.cxx:657
TPolyLine.cxx:658
TPolyLine.cxx:659
TPolyLine.cxx:660
TPolyLine.cxx:661
TPolyLine.cxx:662
TPolyLine.cxx:663
TPolyLine.cxx:664
TPolyLine.cxx:665
TPolyLine.cxx:666
TPolyLine.cxx:667
TPolyLine.cxx:668
TPolyLine.cxx:669
TPolyLine.cxx:670
TPolyLine.cxx:671
TPolyLine.cxx:672
TPolyLine.cxx:673
TPolyLine.cxx:674
TPolyLine.cxx:675
TPolyLine.cxx:676
TPolyLine.cxx:677
TPolyLine.cxx:678
TPolyLine.cxx:679
TPolyLine.cxx:680
TPolyLine.cxx:681
TPolyLine.cxx:682
TPolyLine.cxx:683
TPolyLine.cxx:684
TPolyLine.cxx:685
TPolyLine.cxx:686
TPolyLine.cxx:687
TPolyLine.cxx:688
TPolyLine.cxx:689
TPolyLine.cxx:690
TPolyLine.cxx:691
TPolyLine.cxx:692
TPolyLine.cxx:693
TPolyLine.cxx:694
TPolyLine.cxx:695
TPolyLine.cxx:696
TPolyLine.cxx:697
TPolyLine.cxx:698
TPolyLine.cxx:699
TPolyLine.cxx:700
TPolyLine.cxx:701
TPolyLine.cxx:702
TPolyLine.cxx:703
TPolyLine.cxx:704
TPolyLine.cxx:705
TPolyLine.cxx:706
TPolyLine.cxx:707
TPolyLine.cxx:708
TPolyLine.cxx:709
TPolyLine.cxx:710
TPolyLine.cxx:711
TPolyLine.cxx:712
TPolyLine.cxx:713
TPolyLine.cxx:714
TPolyLine.cxx:715
TPolyLine.cxx:716
TPolyLine.cxx:717
TPolyLine.cxx:718
TPolyLine.cxx:719
TPolyLine.cxx:720
TPolyLine.cxx:721
TPolyLine.cxx:722
TPolyLine.cxx:723
TPolyLine.cxx:724
TPolyLine.cxx:725
TPolyLine.cxx:726
TPolyLine.cxx:727
TPolyLine.cxx:728
TPolyLine.cxx:729
TPolyLine.cxx:730
TPolyLine.cxx:731
TPolyLine.cxx:732
TPolyLine.cxx:733
TPolyLine.cxx:734
TPolyLine.cxx:735
TPolyLine.cxx:736
TPolyLine.cxx:737
TPolyLine.cxx:738
TPolyLine.cxx:739
TPolyLine.cxx:740
TPolyLine.cxx:741
TPolyLine.cxx:742
TPolyLine.cxx:743
TPolyLine.cxx:744
TPolyLine.cxx:745
TPolyLine.cxx:746
TPolyLine.cxx:747
TPolyLine.cxx:748
TPolyLine.cxx:749
TPolyLine.cxx:750
TPolyLine.cxx:751
TPolyLine.cxx:752
TPolyLine.cxx:753