vrecko
virtual reality framework
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ColorGenAdapter.h
Go to the documentation of this file.
1 #pragma once
2 #include <osg\Referenced>
3 #include "Utils.h"
4 #include "ConstantColorGen.h"
5 #include "GradientColorGen.h"
6 #include "SectorColorGen.h"
7 #include "types.h"
8 
9 namespace APDYNAMICART
10 {
11 
14 class ColorGenAdapter : public PoAAdapter<ColorGen>
15 {
16 public:
18  virtual void setColor(const osg::Vec4& color) {}
19  virtual osg::Vec4 getColor() { return osg::Vec4(0.0, 1.0, 0.0, 1.0); }
20 
21  int getColorIndex() const { return _colorIndex; }
22  void setColorIndex(int val) { _colorIndex = val; }
23 
24 protected:
26 
27 };
28 
31 {
32 public:
34  ConstantColorAdapter(const osg::Vec4& color)
35  : _colorGen(new ConstantColorGen(color)) {}
36 
38 
39  virtual void createMenu(MenuPtr menu);
40  virtual int load( XERCES_CPP_NAMESPACE_QUALIFIER DOMNode* ParametersNode );
41  virtual void save(XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* Document, XERCES_CPP_NAMESPACE_QUALIFIER DOMNode* poaNode);
42  virtual void setColor( const osg::Vec4& color ) { _colorGen->setColorValue(color); }
43  virtual ColorGenPtr getObject() { return _colorGen; }
44 
45  virtual osg::Vec4 getColor() { return _colorGen->getColorValue(); }
46 
47 protected:
48  osg::ref_ptr<ConstantColorGen> _colorGen;
49 };
50 
51 
54 {
55 public:
57  GradientColorAdapter(const osg::Vec4& color1, const osg::Vec4& color2)
58  : _colorGen(new GradientColorGen(color1, color2)) {}
59 
61 
62  virtual void createMenu(MenuPtr menu);
63  virtual int load( XERCES_CPP_NAMESPACE_QUALIFIER DOMNode* ParametersNode );
64  virtual void save(XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* Document, XERCES_CPP_NAMESPACE_QUALIFIER DOMNode* poaNode);
65  virtual ColorGenPtr getObject() { return _colorGen; }
66 
67  virtual void setColor( const osg::Vec4& color );
68  virtual osg::Vec4 getColor() { return _colorGen->getColorStart(); }
69 
70 protected:
71  osg::ref_ptr<GradientColorGen> _colorGen;
72 };
73 
74 //NOTE: Disabled due to revision in SectorColorGen class
75 
77 //class SectorColorAdapter : public ColorGenAdapter
78 //{
79 //public:
80 // SectorColorAdapter() : _colorGen(new SectorColorGen) {}
81 //
82 // META_DAObject(SectorColorAdapter, "Sector coloring")
83 //
84 // virtual ColorGenPtr getObject() { return _colorGen; }
85 // virtual void setColor( const osg::Vec4& color ) { _colorGen->setDefaultColor(color); }
86 // virtual osg::Vec4 getColor() { return _colorGen->getDefaultColor(); }
87 // virtual void createMenu( MenuPtr menu );
88 // virtual bool sliderChanged( const char* sliderID, float sliderPos );
89 //
90 //protected:
91 // osg::ref_ptr<SectorColorGen> _colorGen;
92 //};
93 
96 class ColorGenFactory : public AdapterFactory<ColorGenAdapter>
97 {
98 public:
100  {
101  _adapters.push_back(new ConstantColorAdapter);
102  _adapters.push_back(new GradientColorAdapter);
103  //_adapters.push_back(new SectorColorAdapter);
104  }
105 
107  {
108  //TODO some more generic approach here would be nice
109  // but how to do it?
110 
111 
112  std::vector<osg::ref_ptr<ColorGenAdapter>> origAdapters = orig.getSupportedAdapters();
113 
114  _adapters.push_back(new ConstantColorAdapter(origAdapters[0]->getColor()));
115 
116  ColorGen *tmpGen = (origAdapters[1]->getObject()).get();
117  GradientColorGen *tmpGrdGen = dynamic_cast<GradientColorGen *>(tmpGen);
118  _adapters.push_back(new GradientColorAdapter(tmpGrdGen->getColorStart(), tmpGrdGen->getColorEnd()));
119  }
120 };
121 
122 }