// @(#)root/graf:$Id$
// Author: Otto Schaile   20/11/99

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/
#ifndef ROOT_TCurlyLine
#define ROOT_TCurlyLine

// This class implements a curly or wavy polyline typically
// used to draw Feynman diagrams.

#ifndef ROOT_Riosfwd
#include "Riosfwd.h"
#endif
#ifndef ROOT_TPolyLine
#include "TPolyLine.h"
#endif
#ifndef ROOT_TAttBBox2D
#include "TAttBBox2D.h"
#endif
#ifndef ROOT_GuiTypes
#include "GuiTypes.h"
#endif

class TPoint;

class TCurlyLine : public TPolyLine , public TAttBBox2D {

protected:
   Double_t fX1;             // start x, center for arc
   Double_t fY1;             // start y, center for arc
   Double_t fX2;             // end x
   Double_t fY2;             // end y
   Double_t fWaveLength;     // wavelength of sinusoid in percent of pad height
   Double_t fAmplitude;      // amplitude of sinusoid in percent of pad height
   Int_t    fNsteps;         // used internally (controls precision)
   Bool_t   fIsCurly;        // true: Gluon, false: Gamma

   static Double_t fgDefaultWaveLength;   //default wavelength
   static Double_t fgDefaultAmplitude;    //default amplitude
   static Bool_t   fgDefaultIsCurly;      //default curly type

public:
   TCurlyLine();
   TCurlyLine(Double_t x1, Double_t y1, Double_t x2, Double_t y2,
              Double_t wl = .02,
              Double_t amp = .01);
   virtual ~TCurlyLine(){;}
   virtual void Build();
   Int_t        DistancetoPrimitive(Int_t px, Int_t py);
   void         ExecuteEvent(Int_t event, Int_t px, Int_t py);
   Bool_t       GetCurly() const     {return fIsCurly;}
   Double_t     GetWaveLength() const{return fWaveLength;}
   Double_t     GetAmplitude() const {return fAmplitude;}
   Double_t     GetStartX() const    {return fX1;}
   Double_t     GetEndX() const      {return fX2;}
   Double_t     GetStartY() const    {return fY1;}
   Double_t     GetEndY() const      {return fY2;}
   virtual void SetCurly();                             // *MENU*
   virtual void SetWavy();                              // *MENU*
   virtual void SetWaveLength(Double_t WaveLength);     // *MENU* *ARGS={WaveLength=>fWaveLength}
   virtual void SetAmplitude(Double_t x);               // *MENU* *ARGS={x=>fAmplitude}
   virtual void SetStartPoint(Double_t x1, Double_t y1);
   virtual void SetEndPoint  (Double_t x2, Double_t y2);
   virtual void SavePrimitive(std::ostream &out, Option_t * = "");

   static void     SetDefaultWaveLength(Double_t WaveLength);
   static void     SetDefaultAmplitude (Double_t Amplitude );
   static void     SetDefaultIsCurly   (Bool_t   IsCurly   );
   static Double_t GetDefaultWaveLength();
   static Double_t GetDefaultAmplitude ();
   static Bool_t   GetDefaultIsCurly   ();
   virtual Rectangle_t  GetBBox();
   virtual TPoint       GetBBoxCenter();
   virtual void         SetBBoxCenter(const TPoint &p);
   virtual void         SetBBoxCenterX(const Int_t x);
   virtual void         SetBBoxCenterY(const Int_t y);
   virtual void         SetBBoxX1(const Int_t x);
   virtual void         SetBBoxX2(const Int_t x);
   virtual void         SetBBoxY1(const Int_t y);
   virtual void         SetBBoxY2(const Int_t y);

   ClassDef(TCurlyLine,3) // A curly polyline
};

#endif
 TCurlyLine.h:1
 TCurlyLine.h:2
 TCurlyLine.h:3
 TCurlyLine.h:4
 TCurlyLine.h:5
 TCurlyLine.h:6
 TCurlyLine.h:7
 TCurlyLine.h:8
 TCurlyLine.h:9
 TCurlyLine.h:10
 TCurlyLine.h:11
 TCurlyLine.h:12
 TCurlyLine.h:13
 TCurlyLine.h:14
 TCurlyLine.h:15
 TCurlyLine.h:16
 TCurlyLine.h:17
 TCurlyLine.h:18
 TCurlyLine.h:19
 TCurlyLine.h:20
 TCurlyLine.h:21
 TCurlyLine.h:22
 TCurlyLine.h:23
 TCurlyLine.h:24
 TCurlyLine.h:25
 TCurlyLine.h:26
 TCurlyLine.h:27
 TCurlyLine.h:28
 TCurlyLine.h:29
 TCurlyLine.h:30
 TCurlyLine.h:31
 TCurlyLine.h:32
 TCurlyLine.h:33
 TCurlyLine.h:34
 TCurlyLine.h:35
 TCurlyLine.h:36
 TCurlyLine.h:37
 TCurlyLine.h:38
 TCurlyLine.h:39
 TCurlyLine.h:40
 TCurlyLine.h:41
 TCurlyLine.h:42
 TCurlyLine.h:43
 TCurlyLine.h:44
 TCurlyLine.h:45
 TCurlyLine.h:46
 TCurlyLine.h:47
 TCurlyLine.h:48
 TCurlyLine.h:49
 TCurlyLine.h:50
 TCurlyLine.h:51
 TCurlyLine.h:52
 TCurlyLine.h:53
 TCurlyLine.h:54
 TCurlyLine.h:55
 TCurlyLine.h:56
 TCurlyLine.h:57
 TCurlyLine.h:58
 TCurlyLine.h:59
 TCurlyLine.h:60
 TCurlyLine.h:61
 TCurlyLine.h:62
 TCurlyLine.h:63
 TCurlyLine.h:64
 TCurlyLine.h:65
 TCurlyLine.h:66
 TCurlyLine.h:67
 TCurlyLine.h:68
 TCurlyLine.h:69
 TCurlyLine.h:70
 TCurlyLine.h:71
 TCurlyLine.h:72
 TCurlyLine.h:73
 TCurlyLine.h:74
 TCurlyLine.h:75
 TCurlyLine.h:76
 TCurlyLine.h:77
 TCurlyLine.h:78
 TCurlyLine.h:79
 TCurlyLine.h:80
 TCurlyLine.h:81
 TCurlyLine.h:82
 TCurlyLine.h:83
 TCurlyLine.h:84
 TCurlyLine.h:85
 TCurlyLine.h:86
 TCurlyLine.h:87
 TCurlyLine.h:88
 TCurlyLine.h:89
 TCurlyLine.h:90
 TCurlyLine.h:91