// @(#)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_TCurlyArc
#define ROOT_TCurlyArc

#ifndef ROOT_GuiTypes
#include "GuiTypes.h"
#endif

class TPoint;

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

#include "TCurlyLine.h"

class TCurlyArc : public TCurlyLine {

private:
   Double_t fR1;                  //  Radius of arc
   Double_t fPhimin;              //  start phi (degrees)
   Double_t fPhimax;              //  end phi (degrees)
   Double_t fTheta;               //  used internally

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

public:
   TCurlyArc();
   TCurlyArc(Double_t x1, Double_t y1, Double_t rad,
             Double_t phimin, Double_t phimax,
             Double_t wl = .02, Double_t amp = .01);
   virtual     ~TCurlyArc(){;}
   virtual void Build();
   Int_t        DistancetoPrimitive(Int_t px, Int_t py);
   void         ExecuteEvent(Int_t event, Int_t px, Int_t py);
   Double_t     GetRadius() const {return fR1;}
   Double_t     GetPhimin() const {return fPhimin;}
   Double_t     GetPhimax() const {return fPhimax;}
   virtual void SetCenter(Double_t x1, Double_t y1); // *MENU* *ARGS={x1=>fX1,y1=>fY1}
   virtual void SetRadius(Double_t radius);          // *MENU* *ARGS={radius=>fR1}
   virtual void SetPhimin(Double_t phimin);          // *MENU* *ARGS={phimin=>fPhimin}
   virtual void SetPhimax(Double_t phimax);          // *MENU* *ARGS={phimax=>fPhimax}
   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(TCurlyArc,3) // A curly arc
};

#endif

 TCurlyArc.h:1
 TCurlyArc.h:2
 TCurlyArc.h:3
 TCurlyArc.h:4
 TCurlyArc.h:5
 TCurlyArc.h:6
 TCurlyArc.h:7
 TCurlyArc.h:8
 TCurlyArc.h:9
 TCurlyArc.h:10
 TCurlyArc.h:11
 TCurlyArc.h:12
 TCurlyArc.h:13
 TCurlyArc.h:14
 TCurlyArc.h:15
 TCurlyArc.h:16
 TCurlyArc.h:17
 TCurlyArc.h:18
 TCurlyArc.h:19
 TCurlyArc.h:20
 TCurlyArc.h:21
 TCurlyArc.h:22
 TCurlyArc.h:23
 TCurlyArc.h:24
 TCurlyArc.h:25
 TCurlyArc.h:26
 TCurlyArc.h:27
 TCurlyArc.h:28
 TCurlyArc.h:29
 TCurlyArc.h:30
 TCurlyArc.h:31
 TCurlyArc.h:32
 TCurlyArc.h:33
 TCurlyArc.h:34
 TCurlyArc.h:35
 TCurlyArc.h:36
 TCurlyArc.h:37
 TCurlyArc.h:38
 TCurlyArc.h:39
 TCurlyArc.h:40
 TCurlyArc.h:41
 TCurlyArc.h:42
 TCurlyArc.h:43
 TCurlyArc.h:44
 TCurlyArc.h:45
 TCurlyArc.h:46
 TCurlyArc.h:47
 TCurlyArc.h:48
 TCurlyArc.h:49
 TCurlyArc.h:50
 TCurlyArc.h:51
 TCurlyArc.h:52
 TCurlyArc.h:53
 TCurlyArc.h:54
 TCurlyArc.h:55
 TCurlyArc.h:56
 TCurlyArc.h:57
 TCurlyArc.h:58
 TCurlyArc.h:59
 TCurlyArc.h:60
 TCurlyArc.h:61
 TCurlyArc.h:62
 TCurlyArc.h:63
 TCurlyArc.h:64
 TCurlyArc.h:65
 TCurlyArc.h:66
 TCurlyArc.h:67
 TCurlyArc.h:68
 TCurlyArc.h:69
 TCurlyArc.h:70
 TCurlyArc.h:71
 TCurlyArc.h:72
 TCurlyArc.h:73
 TCurlyArc.h:74
 TCurlyArc.h:75