vrecko
virtual reality framework
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
SplineAdapter.h
Go to the documentation of this file.
1 #pragma once
2 #include <osg\Referenced>
3 #include "Utils.h"
4 
5 #include "types.h"
6 #include "Spline.h"
7 #include "RegularPolygonSpline.h"
8 
9 namespace APDYNAMICART
10 {
11 
13 class SplineAdapter : public PoAAdapter<Spline>
14 {
15 public:
16 
17  //There will be, probably, some methods for:
18  // setting "smoothness" of cross-section ?
19 protected:
20 
21 
22 };
23 
24 
27 {
28 public:
29  RoundedSplineAdapter(double diameter, int segmentCount) : _spline(new RegularPolygonSpline(diameter, segmentCount)) {}
30 
31 
33 
34  virtual void createMenu(MenuPtr menu);
35  virtual void save(XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* Document, XERCES_CPP_NAMESPACE_QUALIFIER DOMNode* ParametersNode);
36  virtual osg::ref_ptr<Spline> getObject() { return _spline; }
37  virtual bool sliderChanged( const char* sliderID, float sliderPos );
38 
39 protected:
40  osg::ref_ptr<Spline> _spline;
41 };
42 
43 
46 {
47 public:
48  RectangularSplineAdapter(double width, double height);
49 
50 
52 
53  virtual void createMenu(MenuPtr menu);
54  virtual void save(XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* Document, XERCES_CPP_NAMESPACE_QUALIFIER DOMNode* ParametersNode);
55  virtual osg::ref_ptr<Spline> getObject() { return _spline; }
56  void init();
57 
58 protected:
59  osg::ref_ptr<Spline> _spline;
60 };
61 
62 
65 {
66 public:
68 
69 
71 
72  virtual void createMenu(MenuPtr menu);
73  virtual void save(XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* Document, XERCES_CPP_NAMESPACE_QUALIFIER DOMNode* ParametersNode);
74  virtual osg::ref_ptr<Spline> getObject() { return _spline; }
75  void init();
76 
77 protected:
78  osg::ref_ptr<Spline> _spline;
79 };
80 
81 
82 
84 class SplineFactory : public AdapterFactory<SplineAdapter>
85 {
86 public:
88  {
89  _adapters.push_back(new RoundedSplineAdapter(0.5, 16));
90  _adapters.push_back(new RectangularSplineAdapter(1.0, 0.25));
91 
92  //this would not work... two adapters of same kind can't be added to factory
93  //_adapters.push_back(new RectangularSplineAdapter(0.5, 0.25));
94 
95  _adapters.push_back(new WaveSplineAdapter);
96 
97  }
98 
99  //copy constructor
101  {
102  std::vector<osg::ref_ptr<SplineAdapter>> origAdapters = orig.getSupportedAdapters();
103 
104  //rounded
105  Spline *tmpGen = (origAdapters[0]->getObject()).get();
106  RegularPolygonSpline *tmpSpline = dynamic_cast<RegularPolygonSpline *>(tmpGen);
107  _adapters.push_back(new RoundedSplineAdapter(tmpSpline->getRadius(), tmpSpline->getSegmentCount()));
108 
109  //TODO...
110  _adapters.push_back(new RectangularSplineAdapter(1.0, 0.25));
111  _adapters.push_back(new WaveSplineAdapter);
112  }
113 };
114 
115 
116 }
117 
118 
119