ROOT logo
#ifndef X_SPLINE
#define X_SPLINE
#include "TObject.h"
#include "TGraph.h"
#include "TArrayD.h"
#include "TArrayF.h"
#include "TArrow.h"
#include "TList.h"
#include "TMarker.h"
#include "TObjArray.h"
#include "TPolyLine.h"
#include "TStyle.h"
#include "TVirtualPad.h"
#include "Buttons.h"
#include "HprText.h"
#include <iostream>

class TOrdCollection;
class TSplineX;

//_________________________________________________________________

class PolyLineNoEdit: public  TPolyLine {
public:
   PolyLineNoEdit(){};
   PolyLineNoEdit(Int_t np, Double_t * x = NULL, Double_t * y = NULL);
   virtual ~PolyLineNoEdit() {};
   Int_t DistancetoPrimitive(Int_t, Int_t){return 9999;};
 #if ROOT_VERSION_CODE >= ROOT_VERSION(5,12,0)
   void SavePrimitive(std::ostream &, Option_t *){};     // dont write to .C file
 #else
   void SavePrimitive(std::ofstream &, Option_t *){};     // dont write to .C file
 #endif

ClassDef(PolyLineNoEdit,0)
};
//__________________________________________________________________

class RailwaySleeper : public  TPolyLine {
private:
   TSplineX * fParent; //!
//   Color_t fColor;
public:
   RailwaySleeper(){};
   RailwaySleeper(Double_t * x, Double_t * y, TSplineX * parent = NULL,
                  Color_t color = 1);
   ~RailwaySleeper(){ };
   Int_t DistancetoPrimitive(Int_t, Int_t){return 9999;};
   void ExecuteEvent(Int_t event, Int_t px, Int_t py);
   void Draw(Option_t * opt = "F");
 #if ROOT_VERSION_CODE >= ROOT_VERSION(5,12,0)
   void SavePrimitive(std::ostream &, Option_t *){};     // dont write to .C file
 #else
   void SavePrimitive(std::ofstream &, Option_t *){};     // dont write to .C file
 #endif
ClassDef(RailwaySleeper,0)
};
//__________________________________________________________________

class ControlGraph : public TGraph
{
friend class TSplineX;
private:
   TSplineX *fParent;                       //
   TArrayF  fShapeFactors;
   Int_t    fSelectedPoint;                 //!
   Double_t fSelectedX;                     //!
   Double_t fSelectedY;                     //!
   Float_t  fSelectedShapeFactor;           //!
   TArrayI fMixerValues;                    //!
   TArrayI fMixerMinval;                    //!
   TArrayI fMixerMaxval;                    //!
   TArrayI fMixerFlags;                     //!
   TOrdCollection *fRowlab;                 //!
	
protected:
//   virtual ~ControlGraph() {std::cout << "dtor ControlGraph(): " << this << std::endl;};
	virtual ~ControlGraph() {};
	

public:
   ControlGraph (Int_t npoints = 0, Double_t*  x = NULL, Double_t* y = NULL);
   virtual void  Delete(Option_t */*option=""*/) { std::cout << " no no " << std::endl; };
	int DistancetoPrimitive(Int_t px, Int_t py);
   void ExecuteEvent(Int_t event, Int_t px, Int_t py);
   void SetParent(TSplineX* parent);
   TSplineX  *GetParent(){return fParent;};
   void SetLength(Int_t npoints) {Set(npoints);fShapeFactors.Set(npoints);};
   void SetAllShapeFactors(Int_t npoints, Float_t* sf);
   Float_t   GetShapeFactor(Int_t ipoint) {return fShapeFactors[ipoint];};
   Int_t     GetSelectedPoint() { return fSelectedPoint; };
   Double_t  GetSelectedX()     { return fSelectedX; };
   Double_t  GetSelectedY()     { return fSelectedY; };
   Float_t   GetSelectedShapeFactor(){ return fSelectedShapeFactor;};

   void SetShapeFactor(Int_t ipoint, Int_t f100);
   void SetOneShapeFactor(Int_t ipoint, Double_t x, Double_t y, Float_t sfactor); // *MENU* *ARGS={ipoint=>fSelectedPoint,x=>fSelectedX,y=>fSelectedY,sfactor=>fSelectedShapeFactor}
   void SetControlPoint(Int_t ipoint, Double_t x, Double_t y, Float_t sfactor); // *MENU* *ARGS={ipoint=>fSelectedPoint,x=>fSelectedX,y=>fSelectedY,sfactor=>fSelectedShapeFactor}
   void GetControlPoint(Int_t ipoint, Double_t *x, Double_t *y, Float_t *sfactor);
   Int_t InsertPoint();                  // *MENU*
   Int_t RemovePoint();                  // *MENU*
   Int_t RemovePoint(Int_t ip) {return ip;};  //
//   virtual void EditControlGraph();    // *MENU*
   virtual void ControlGraphMixer();     // *MENU*
 #if ROOT_VERSION_CODE >= ROOT_VERSION(5,12,0)
   void SavePrimitive(std::ostream &, Option_t *){};     // dont write to .C file
 #else
   void SavePrimitive(std::ofstream &, Option_t *){};     // dont write to .C file
 #endif
   ClassDef(ControlGraph, 1)
};
//__________________________________________________________________

class ParallelGraph : public TPolyLine
{
private:
   TSplineX* fParent;
   ParallelGraph* fSlave;
   Double_t fDistToSlave;    // distance to a partner
   ParallelGraph* fMaster;
   Double_t fDist;           // distance to parent
   Bool_t fClosed;
   Bool_t fIsRail;           // is part of a railway like track
public:
   ParallelGraph ();
   ParallelGraph (TSplineX *parent, Double_t dist, Bool_t closed);
   virtual ~ParallelGraph();
   void    Compute();
   void    SetIsClosed(Bool_t cl) { fClosed = cl; };
   Bool_t  GetIsClosed() { return fClosed; };
   void    Paint(Option_t * option = " ");
   Int_t   DistancetoPrimitive(Int_t px, Int_t py);
   void    Pop();
   void    ExecuteEvent(Int_t event, Int_t px, Int_t py);
   TSplineX *GetParent(){return fParent;};
   Double_t  GetDist(){return fDist;};
   void      SetDist(Double_t d){fDist = d;};           // *MENU*
   void   Remove(Option_t * opt);                                     // *MENU*
   void   Delete(Option_t * opt) {this->Remove(opt);};
   void   FillToSlave(Double_t dist = 0);               // *MENU*
   void   ClearFillToSlave();                           // *MENU*
   void   SetSlave(ParallelGraph* slave)   {fSlave = slave;};
   void   SetMaster(ParallelGraph* master) {fMaster = master;};
   Double_t  GetDistToSlave()              {return fDistToSlave;};
   void      SetDistToSlave(Double_t d)    {fDistToSlave = d;};
   ParallelGraph* GetSlave()               {return fSlave;};
   ParallelGraph* GetMaster()              {return fMaster;};
   Bool_t GetIsRail()                      {return fIsRail;};
   void   SetIsRail(Bool_t israil = kTRUE) {fIsRail = israil;};
   void   CorrectForArrows(Double_t rxy, Double_t alen,Double_t aangle, Double_t aind_angle,
                           Bool_t at_start, Bool_t at_end);
 #if ROOT_VERSION_CODE >= ROOT_VERSION(5,12,0)
   void SavePrimitive(std::ostream &, Option_t *){};     // dont write to .C file
 #else
   void SavePrimitive(std::ofstream &, Option_t *){};     // dont write to .C file
 #endif
   ClassDef(ParallelGraph, 1)
};
//__________________________________________________________________

class ShapeFactor
{
// Shapefactor for use in a simply linked list
// only used internally
// no need to make persistent, since remade anyway

public:
   Float_t s;
   ShapeFactor* next;
   ShapeFactor (Float_t f, ShapeFactor* nf) {      s = f;
      next = nf;
   };

   ~ShapeFactor() {};
   void SetNext(ShapeFactor * nf) {
      next = nf;
   }
   ShapeFactor* GetNext() {return next;};
};
//__________________________________________________________________

class ControlPoint
{
// ControlPoint for use in a simply linked list
// only used internally
// no need to make persistent, since remade anyway

public:
   Double_t x, y;
   ControlPoint* next;
   ControlPoint (Double_t  xv, Double_t yv, ControlPoint* np) {
      x = xv;
      y = yv;
      next = np;
   };

   ~ControlPoint() {};
   void SetNext(ControlPoint * np) {
      next = np;
   }
   ControlPoint* GetNext() {return next;};
};
//____________________________________________________________________________________

class TSplineX : public TPolyLine
{

friend class ControlGraph;
friend class ParallelGraph;
friend class HandleMenus;

private:
   ShapeFactor*  fShapeFactorList;   //! pointer to linked list
   ControlPoint* fControlPointList;  //!
   Int_t         fNofControlPoints;
   Int_t         fNpoints;           //! number of used points
   Bool_t        fComputeDone;       //!
   TArrayD       fX;                 //! result X
   TArrayD       fY;                 //! result Y
   ControlGraph  fCPGraph;           // Controlpoints
   Bool_t        fCPDrawn;           //!
   Style_t       fMStyle;            // markertype for ControlGraph
   Size_t        fMSize;             // markersize for ControlGraph
   ParallelGraph *fRailL;            // pointer to left rail, if railwaylike
   ParallelGraph *fRailR;            // pointer to right rail
   TObjArray     fPGraphs;           // pointer list to parallel lines
   PolyLineNoEdit *fArrowAtStart;    //!
   PolyLineNoEdit *fArrowAtEnd;      //!
   TList         fDPolyLines;        //!
   Double_t      fCornersX[3][3];     //!
   Double_t      fCornersY[3][3];     //!

   Float_t       fPrec;
   Bool_t        fClosed;
   Int_t         fRailwaylike;
   Double_t      fRailwayGage;
   Double_t      fFilledLength;      // draw like railway in maps
   Double_t      fEmptyLength;       // space in between
   Style_t       fLineStyle;
   Width_t       fLineWidth;
   Color_t       fLineColor;
   Int_t         fParallelFill;
   Bool_t        fPaintArrowAtStart;
   Bool_t        fPaintArrowAtEnd;
   Int_t         fArrowFill;
   Double_t      fArrowLength;
   Double_t      fArrowAngle;
   Double_t      fArrowIndentAngle;
   Double_t      fRatioXY;
   TList         *fTextList;

//_________________________________________________________________

	Double_t f_blend(Double_t numerator, Double_t denominator);
	Double_t g_blend(Double_t u, Double_t q);
	Double_t h_blend(Double_t u, Double_t q);
	void negative_s1_influence(Double_t t, Double_t s1, Double_t *A0, Double_t *A2);
	void negative_s2_influence(Double_t t, Double_t s2, Double_t *A1, Double_t *A3);
	void positive_s1_influence(Int_t k, Double_t t, Double_t s1, Double_t *A0, Double_t *A2);
	void positive_s2_influence(Int_t k, Double_t t, Double_t s2, Double_t *A1, Double_t *A3);
	void point_computing(Double_t *A_blend, ControlPoint *p0, ControlPoint *p1,
             ControlPoint *p2, ControlPoint *p3, Double_t *xs, Double_t *ys);
   void    point_adding(Double_t *A_blend, ControlPoint *p0, ControlPoint *p1,
                                      ControlPoint *p2, ControlPoint *p3);
   Float_t step_computing(int k, ControlPoint *p0, ControlPoint *p1,
                               ControlPoint *p2, ControlPoint *p3,
                               Double_t s1, Double_t s2, Float_t precision);
   void    spline_segment_computing(Float_t step, Int_t k,
                                 ControlPoint *p0, ControlPoint *p1,
                                 ControlPoint *p2, ControlPoint *p3,
                                 Double_t s1, Double_t s2);
   Int_t   op_spline(ControlPoint *cpoints, ShapeFactor *sfactors, Float_t precision);
   Int_t   cl_spline(ControlPoint *cpoints, ShapeFactor *sfactors, Float_t precision);
   Int_t   add_point(Double_t x, Double_t y);
   Int_t   add_closepoint();
   void    too_many_points();
   void    Delete_ShapeFactors();
   void    Delete_ControlPoints();
   void    SetGraph();
   void    CopyControlPoints();

protected:

   Int_t ComputeSpline();

   Double_t Length(Double_t x1, Double_t y1, Double_t x2, Double_t y2);
   Double_t PhiOfLine(Double_t x1, Double_t y1, Double_t x2, Double_t y2);
   void Nextpoint(Double_t phi, Double_t x, Double_t y,
                        Double_t dist, Double_t* a,  Double_t* b);
   void Endpoint(Double_t phi, Double_t x, Double_t y,
                        Double_t dist, Double_t* a,  Double_t* b);
   void Midpoint(Double_t phi1, Double_t phi2, Double_t x, Double_t y,
                        Double_t dist ,Double_t* a, Double_t* b);

   Double_t GetArrowLength(Double_t dist,Double_t al,Double_t aa, Double_t aia);
//_____________________________________________________________________________________


public:
   TSplineX();
   TSplineX(Int_t npoints, Double_t *x = NULL, Double_t *y = NULL,
           Float_t *sf = NULL, Float_t prec = 0.2, Bool_t closed = kFALSE);
   virtual ~TSplineX();
   Int_t   DistancetoPrimitive(Int_t px, Int_t py);
   void    ExecuteEvent(Int_t event, Int_t px, Int_t py);
   void    Pop();
//   void  EditControlGraph();                                        // *MENU*
   Int_t   InsertPoint() {return fCPGraph.InsertPoint();};            // *MENU*
   Int_t   RemovePoint() {return fCPGraph.RemovePoint();};            // *MENU*
   void    RemovePolyLines();
   void    ControlGraphMixer(){fCPGraph.ControlGraphMixer();};        // *MENU*
   void    Print(Option_t *) const;                                   // *MENU*
   void    DrawControlPoints(Style_t marker = 24, Size_t size = 1);   // *MENU* *ARGS={marker=>fMStyle, size=>fMSize}
   void    RemoveControlPoints();                                     // *MENU*
   Style_t GetMStyle() {return fMStyle;};
   Size_t  GetMSize()  {return fMSize;};
   void    SetMStyle(Style_t type) {fMStyle = type;};
   void    SetMSize(Size_t size)   {fMSize = size;};
   void    SetAllControlPoints(Int_t npoints, Double_t* x, Double_t* y);
   void    SetControlPoint(Int_t ip, Double_t x, Double_t y, Float_t sf)
             {fCPGraph.SetControlPoint(ip, x, y, sf);};
   void    GetControlPoint(Int_t ip, Double_t *x, Double_t *y, Float_t *sf)
             {fCPGraph.GetControlPoint(ip, x, y, sf);};
   void    SetShapeFactors(Int_t npoints, Float_t* sf);
   Int_t   GetNofControlPoints() {return fCPGraph.GetN();};
   Bool_t  GetCPDrawn()         {return fCPDrawn;};
   Int_t   GetResult(Double_t*& x, Double_t*& y);
   void    SetIsClosed(Bool_t isclosed = kTRUE);                      // *MENU*
   Bool_t  GetIsClosed()        {return fClosed;};

   ControlGraph* GetControlGraph() {return &fCPGraph;};
   TList*     GetDPolyLines() {return &fDPolyLines;};

   void Paint(Option_t * option = " ");
   void PaintArrow(Int_t where);
   void     DrawParallelGraphs();
   ParallelGraph* AddParallelGraph(Double_t dist = 2, Color_t color=0,
                            Width_t width=0, Style_t style=0);        // *MENU*
   TObjArray* GetParallelGraphs() {return &fPGraphs;};

   void     SetRailwaylike (Double_t gage = 4);                       // *MENU*
   Int_t    IsRailwaylike()                {return fRailwaylike;};
   void     SetRailwayGage (Double_t gage) {SetRailwaylike(gage);};   // *MENU*
   Double_t GetRailwayGage ()              {return fRailwayGage;};    // *MENU*
   void     SetFilledLength(Double_t flen) {fFilledLength = flen;};   // *MENU*
   void     SetEmptyLength(Double_t elen)  {fEmptyLength = elen;};    // *MENU*
   Double_t GetFilledLength()              {return fFilledLength;};
   Double_t GetEmptyLength()               {return fEmptyLength;};
   void     NeedReCompute()                {fComputeDone = kFALSE;};
   void     SetSleeperColor(Color_t color);

   Int_t    GetParallelFill()    {return fParallelFill;};
   void     SetParallelFill(Int_t sf) {fParallelFill = sf;};          // *MENU*

   void     AddArrow(Int_t where = 1, Double_t size = 10, Double_t angle = 30,
                     Double_t indent_angle = 0, Int_t filled = 0);    // *MENU*
   void     SetArrowLength(Double_t length) {fArrowLength = length;}; // *MENU*
   void     SetArrowAngle(Double_t angle)   {fArrowAngle = angle;};   // *MENU*
   void     SetArrowIndentAngle(Double_t a) {fArrowIndentAngle = a;}; // *MENU*
   Double_t GetArrowLength()                {return fArrowLength;};
   Double_t GetArrowAngle()                 {return fArrowAngle;};
   Double_t GetArrowIndentAngle()           {return fArrowIndentAngle;};

   void     SetPaintArrowAtStart(Bool_t ok) {fPaintArrowAtStart = ok;};
   void     SetPaintArrowAtEnd(Bool_t ok)   {fPaintArrowAtEnd = ok;};
   Bool_t   GetPaintArrowAtStart()          {return fPaintArrowAtStart;};
   Bool_t   GetPaintArrowAtEnd()            {return fPaintArrowAtEnd;};
   Int_t    GetArrowFill()                  {return fArrowFill;};
   void     SetArrowFill(Bool_t filled);                              // *MENU*
   void     AddText(TObject *hprtext);
   TList    *GetTextList()                  {return fTextList;};
   void PaintText();
   Double_t GetLengthOfText(HprText *t, Double_t csep, Int_t start, Int_t end, Int_t step, Double_t s0);
   Double_t GetLengthOfSpline();
   Double_t GetPhiXY(Double_t s, Double_t &x, Double_t &y);
   Double_t *GetCornersX()                   {return &fCornersX[0][0]; } // *MENU*
   Double_t *GetCornersY()                   {return &fCornersY[0][0]; } // *MENU*
   void      PrintAddress(){std::cout << "TSplineX *sp = (TSplineX*)" << this << std::endl;} // *MENU*

   #if ROOT_VERSION_CODE >= ROOT_VERSION(5,12,0)
   void SavePrimitive(std::ostream &, Option_t *);
   #else
   void SavePrimitive(std::ofstream &, Option_t *);
   #endif
   void CRButtonPressed(Int_t, Int_t){};
//_____________________________________________________________________________________


   ClassDef(TSplineX, 2)
};
#endif
 TSplineX.h:1
 TSplineX.h:2
 TSplineX.h:3
 TSplineX.h:4
 TSplineX.h:5
 TSplineX.h:6
 TSplineX.h:7
 TSplineX.h:8
 TSplineX.h:9
 TSplineX.h:10
 TSplineX.h:11
 TSplineX.h:12
 TSplineX.h:13
 TSplineX.h:14
 TSplineX.h:15
 TSplineX.h:16
 TSplineX.h:17
 TSplineX.h:18
 TSplineX.h:19
 TSplineX.h:20
 TSplineX.h:21
 TSplineX.h:22
 TSplineX.h:23
 TSplineX.h:24
 TSplineX.h:25
 TSplineX.h:26
 TSplineX.h:27
 TSplineX.h:28
 TSplineX.h:29
 TSplineX.h:30
 TSplineX.h:31
 TSplineX.h:32
 TSplineX.h:33
 TSplineX.h:34
 TSplineX.h:35
 TSplineX.h:36
 TSplineX.h:37
 TSplineX.h:38
 TSplineX.h:39
 TSplineX.h:40
 TSplineX.h:41
 TSplineX.h:42
 TSplineX.h:43
 TSplineX.h:44
 TSplineX.h:45
 TSplineX.h:46
 TSplineX.h:47
 TSplineX.h:48
 TSplineX.h:49
 TSplineX.h:50
 TSplineX.h:51
 TSplineX.h:52
 TSplineX.h:53
 TSplineX.h:54
 TSplineX.h:55
 TSplineX.h:56
 TSplineX.h:57
 TSplineX.h:58
 TSplineX.h:59
 TSplineX.h:60
 TSplineX.h:61
 TSplineX.h:62
 TSplineX.h:63
 TSplineX.h:64
 TSplineX.h:65
 TSplineX.h:66
 TSplineX.h:67
 TSplineX.h:68
 TSplineX.h:69
 TSplineX.h:70
 TSplineX.h:71
 TSplineX.h:72
 TSplineX.h:73
 TSplineX.h:74
 TSplineX.h:75
 TSplineX.h:76
 TSplineX.h:77
 TSplineX.h:78
 TSplineX.h:79
 TSplineX.h:80
 TSplineX.h:81
 TSplineX.h:82
 TSplineX.h:83
 TSplineX.h:84
 TSplineX.h:85
 TSplineX.h:86
 TSplineX.h:87
 TSplineX.h:88
 TSplineX.h:89
 TSplineX.h:90
 TSplineX.h:91
 TSplineX.h:92
 TSplineX.h:93
 TSplineX.h:94
 TSplineX.h:95
 TSplineX.h:96
 TSplineX.h:97
 TSplineX.h:98
 TSplineX.h:99
 TSplineX.h:100
 TSplineX.h:101
 TSplineX.h:102
 TSplineX.h:103
 TSplineX.h:104
 TSplineX.h:105
 TSplineX.h:106
 TSplineX.h:107
 TSplineX.h:108
 TSplineX.h:109
 TSplineX.h:110
 TSplineX.h:111
 TSplineX.h:112
 TSplineX.h:113
 TSplineX.h:114
 TSplineX.h:115
 TSplineX.h:116
 TSplineX.h:117
 TSplineX.h:118
 TSplineX.h:119
 TSplineX.h:120
 TSplineX.h:121
 TSplineX.h:122
 TSplineX.h:123
 TSplineX.h:124
 TSplineX.h:125
 TSplineX.h:126
 TSplineX.h:127
 TSplineX.h:128
 TSplineX.h:129
 TSplineX.h:130
 TSplineX.h:131
 TSplineX.h:132
 TSplineX.h:133
 TSplineX.h:134
 TSplineX.h:135
 TSplineX.h:136
 TSplineX.h:137
 TSplineX.h:138
 TSplineX.h:139
 TSplineX.h:140
 TSplineX.h:141
 TSplineX.h:142
 TSplineX.h:143
 TSplineX.h:144
 TSplineX.h:145
 TSplineX.h:146
 TSplineX.h:147
 TSplineX.h:148
 TSplineX.h:149
 TSplineX.h:150
 TSplineX.h:151
 TSplineX.h:152
 TSplineX.h:153
 TSplineX.h:154
 TSplineX.h:155
 TSplineX.h:156
 TSplineX.h:157
 TSplineX.h:158
 TSplineX.h:159
 TSplineX.h:160
 TSplineX.h:161
 TSplineX.h:162
 TSplineX.h:163
 TSplineX.h:164
 TSplineX.h:165
 TSplineX.h:166
 TSplineX.h:167
 TSplineX.h:168
 TSplineX.h:169
 TSplineX.h:170
 TSplineX.h:171
 TSplineX.h:172
 TSplineX.h:173
 TSplineX.h:174
 TSplineX.h:175
 TSplineX.h:176
 TSplineX.h:177
 TSplineX.h:178
 TSplineX.h:179
 TSplineX.h:180
 TSplineX.h:181
 TSplineX.h:182
 TSplineX.h:183
 TSplineX.h:184
 TSplineX.h:185
 TSplineX.h:186
 TSplineX.h:187
 TSplineX.h:188
 TSplineX.h:189
 TSplineX.h:190
 TSplineX.h:191
 TSplineX.h:192
 TSplineX.h:193
 TSplineX.h:194
 TSplineX.h:195
 TSplineX.h:196
 TSplineX.h:197
 TSplineX.h:198
 TSplineX.h:199
 TSplineX.h:200
 TSplineX.h:201
 TSplineX.h:202
 TSplineX.h:203
 TSplineX.h:204
 TSplineX.h:205
 TSplineX.h:206
 TSplineX.h:207
 TSplineX.h:208
 TSplineX.h:209
 TSplineX.h:210
 TSplineX.h:211
 TSplineX.h:212
 TSplineX.h:213
 TSplineX.h:214
 TSplineX.h:215
 TSplineX.h:216
 TSplineX.h:217
 TSplineX.h:218
 TSplineX.h:219
 TSplineX.h:220
 TSplineX.h:221
 TSplineX.h:222
 TSplineX.h:223
 TSplineX.h:224
 TSplineX.h:225
 TSplineX.h:226
 TSplineX.h:227
 TSplineX.h:228
 TSplineX.h:229
 TSplineX.h:230
 TSplineX.h:231
 TSplineX.h:232
 TSplineX.h:233
 TSplineX.h:234
 TSplineX.h:235
 TSplineX.h:236
 TSplineX.h:237
 TSplineX.h:238
 TSplineX.h:239
 TSplineX.h:240
 TSplineX.h:241
 TSplineX.h:242
 TSplineX.h:243
 TSplineX.h:244
 TSplineX.h:245
 TSplineX.h:246
 TSplineX.h:247
 TSplineX.h:248
 TSplineX.h:249
 TSplineX.h:250
 TSplineX.h:251
 TSplineX.h:252
 TSplineX.h:253
 TSplineX.h:254
 TSplineX.h:255
 TSplineX.h:256
 TSplineX.h:257
 TSplineX.h:258
 TSplineX.h:259
 TSplineX.h:260
 TSplineX.h:261
 TSplineX.h:262
 TSplineX.h:263
 TSplineX.h:264
 TSplineX.h:265
 TSplineX.h:266
 TSplineX.h:267
 TSplineX.h:268
 TSplineX.h:269
 TSplineX.h:270
 TSplineX.h:271
 TSplineX.h:272
 TSplineX.h:273
 TSplineX.h:274
 TSplineX.h:275
 TSplineX.h:276
 TSplineX.h:277
 TSplineX.h:278
 TSplineX.h:279
 TSplineX.h:280
 TSplineX.h:281
 TSplineX.h:282
 TSplineX.h:283
 TSplineX.h:284
 TSplineX.h:285
 TSplineX.h:286
 TSplineX.h:287
 TSplineX.h:288
 TSplineX.h:289
 TSplineX.h:290
 TSplineX.h:291
 TSplineX.h:292
 TSplineX.h:293
 TSplineX.h:294
 TSplineX.h:295
 TSplineX.h:296
 TSplineX.h:297
 TSplineX.h:298
 TSplineX.h:299
 TSplineX.h:300
 TSplineX.h:301
 TSplineX.h:302
 TSplineX.h:303
 TSplineX.h:304
 TSplineX.h:305
 TSplineX.h:306
 TSplineX.h:307
 TSplineX.h:308
 TSplineX.h:309
 TSplineX.h:310
 TSplineX.h:311
 TSplineX.h:312
 TSplineX.h:313
 TSplineX.h:314
 TSplineX.h:315
 TSplineX.h:316
 TSplineX.h:317
 TSplineX.h:318
 TSplineX.h:319
 TSplineX.h:320
 TSplineX.h:321
 TSplineX.h:322
 TSplineX.h:323
 TSplineX.h:324
 TSplineX.h:325
 TSplineX.h:326
 TSplineX.h:327
 TSplineX.h:328
 TSplineX.h:329
 TSplineX.h:330
 TSplineX.h:331
 TSplineX.h:332
 TSplineX.h:333
 TSplineX.h:334
 TSplineX.h:335
 TSplineX.h:336
 TSplineX.h:337
 TSplineX.h:338
 TSplineX.h:339
 TSplineX.h:340
 TSplineX.h:341
 TSplineX.h:342
 TSplineX.h:343
 TSplineX.h:344
 TSplineX.h:345
 TSplineX.h:346
 TSplineX.h:347
 TSplineX.h:348
 TSplineX.h:349
 TSplineX.h:350
 TSplineX.h:351
 TSplineX.h:352
 TSplineX.h:353
 TSplineX.h:354
 TSplineX.h:355
 TSplineX.h:356
 TSplineX.h:357
 TSplineX.h:358
 TSplineX.h:359
 TSplineX.h:360
 TSplineX.h:361
 TSplineX.h:362
 TSplineX.h:363
 TSplineX.h:364
 TSplineX.h:365
 TSplineX.h:366
 TSplineX.h:367
 TSplineX.h:368
 TSplineX.h:369
 TSplineX.h:370
 TSplineX.h:371
 TSplineX.h:372
 TSplineX.h:373
 TSplineX.h:374
 TSplineX.h:375
 TSplineX.h:376
 TSplineX.h:377
 TSplineX.h:378
 TSplineX.h:379
 TSplineX.h:380
 TSplineX.h:381
 TSplineX.h:382
 TSplineX.h:383
 TSplineX.h:384
 TSplineX.h:385
 TSplineX.h:386
 TSplineX.h:387
 TSplineX.h:388
 TSplineX.h:389
 TSplineX.h:390
 TSplineX.h:391