Moby
OsgTorus.h
1  // Drawn from Torus.h by John K. Grant
2 
3  //
4  // Class to make a torus.
5  //
6 
7 #ifndef _OSG_TORUS_H_
8 #define _OSG_TORUS_H_
9 
10 #include <osg/Vec4>
11 
12 namespace osg {
13  class Geode;
14 
15 class OsgTorus
16 {
17  public:
18  OsgTorus():
19  _major_radius(1.0f), _minor_radius(2.0f),
20  _start_sweep(osg::inDegrees(0.0f)), _end_sweep(osg::inDegrees(360.0f)),
21  _circle_cuts(50), _sweep_cuts(50) {}
22 
23  OsgTorus(float inner,float outer,
24  float start_angle=0.0f,float end_angle=360.0f,
25  unsigned int cross=50,unsigned int sweep=50):
26  _major_radius(inner), _minor_radius(outer),
27  _start_sweep(start_angle), _end_sweep(end_angle),
28  _circle_cuts(cross), _sweep_cuts(sweep) {}
29 
30  OsgTorus(const OsgTorus& torus) :
31  _major_radius(torus._major_radius), _minor_radius(torus._minor_radius),
32  _start_sweep(torus._start_sweep), _end_sweep(torus._end_sweep),
33  _circle_cuts(torus._circle_cuts), _sweep_cuts(torus._sweep_cuts) {}
34 
35  inline bool valid() const
36  {
37  bool validity(false);
38  if( (_minor_radius>_major_radius) && (_minor_radius>0.0f) )
39  validity = true;
40  return( validity );
41  }
42 
43  inline void set(float i,float o) {_major_radius=i; _minor_radius=o;}
44 
45  osg::Geode* operator() () const;
46 
47  inline void setColor(const osg::Vec4& c) { _color = c; }
48  inline const osg::Vec4& getColor() const { return _color; }
49 
50  inline void setMajorRadius(float inner) { _major_radius = inner; }
51  inline float getMajorRadius() const { return _major_radius; }
52 
53  inline void setMinorRadius(float outer) { _minor_radius = outer; }
54  inline float getMinorRadius() const { return _minor_radius; }
55 
56  inline void setStartSweep(float angle) { _start_sweep = angle; }
57  inline float getStartSweep() const { return _start_sweep; }
58 
59  inline void setEndSweep(float angle) { _end_sweep = angle; }
60  inline float getEndSweep() const { return _end_sweep; }
61 
62  inline void setCircleCuts(int cuts) { _circle_cuts = cuts; }
63  inline int getCircleCuts() const { return _circle_cuts; }
64 
65  inline void setSweepCuts(int cuts) { _sweep_cuts = cuts; }
66  inline int getSweepCuts() const { return _sweep_cuts; }
67 
68  virtual ~OsgTorus() {}
69 
70  private:
71  float _major_radius, _minor_radius;
72  float _start_sweep, _end_sweep;
73  unsigned int _circle_cuts, _sweep_cuts;
74  osg::Vec4 _color;
75 }; // end class
76 
77 }; // namespace osg
78 
79 
80 #endif // _OSG_TORUS_H_
81 
Definition: OsgTorus.h:15