vrecko
virtual reality framework
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Pattern.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "types.h"
4 #include "Utils.h"
5 
6 namespace APDYNAMICART
7 {
8 
10 class Pattern : public osg::Referenced
11 {
12 public:
13  virtual Vec3ArrayPtr generate(Vec3ArrayPtr left, Vec3ArrayPtr right) = 0;
14  virtual std::string getName() = 0;
15 };
16 
18 class PatternBase : public Pattern
19 {
20 public:
21  PatternBase() : _array(NULL) {};
22 
24  {
25  if(!_array.valid()) _array = new osg::Vec3Array;
26 
27  if(left->size() != right->size()) {
28  err("Different size left/right array. Aborting generation"); return _array;
29  }
30 
31  return compute(left, right);
32  }
33 
34  virtual std::string getName() = 0;
35 
37  Vec3ArrayPtr getVertexArray() const { return _array; }
38  void setVertexArray(Vec3ArrayPtr val) { _array = val; }
39 
40 protected:
42  virtual ~PatternBase() {};
43  virtual Vec3ArrayPtr compute( Vec3ArrayPtr left, Vec3ArrayPtr right ) = 0;
44 };
45 
47 typedef osg::ref_ptr<PatternBase> PatternPtr;
48 typedef std::vector<PatternPtr> Patterns;
49 
52 {
53 public:
54  static std::vector<std::string> getAvaiablePatterns();
55  static PatternPtr getPattern(const std::string& name);
56 };
57 
59 class NullPattern : public PatternBase
60 {
61  virtual Vec3ArrayPtr compute( Vec3ArrayPtr left, Vec3ArrayPtr right)
62  {
63  dbg("PatternBase::generate() called on null object.");
64  return new osg::Vec3Array;
65  }
66 
67  virtual std::string getName() {
68  return "NullPattern";
69  }
70 };
71 
72 class AcrossPattern : public PatternBase
73 {
74  virtual Vec3ArrayPtr compute( Vec3ArrayPtr left, Vec3ArrayPtr right);
75  virtual std::string getName() {
76  return "Across";
77  }
78 };
79 
81 {
82  virtual Vec3ArrayPtr compute( Vec3ArrayPtr left, Vec3ArrayPtr right);
83  virtual std::string getName() {
84  return "Criss-cross";
85  }
86 };
87 
88 class DoublePattern : public PatternBase
89 {
90  virtual Vec3ArrayPtr compute( Vec3ArrayPtr left, Vec3ArrayPtr right);
91  virtual std::string getName() {
92  return "Double";
93  }
94 };
95 
97 {
98  virtual Vec3ArrayPtr compute( Vec3ArrayPtr left, Vec3ArrayPtr right);
99  virtual std::string getName() {
100  return "Hyperbolic";
101  }
102 };
103 
104 class TopPattern : public PatternBase
105 {
106  virtual Vec3ArrayPtr compute( Vec3ArrayPtr left, Vec3ArrayPtr right);
107  virtual std::string getName() {
108  return "Top";
109  }
110 };
111 
113 {
114  virtual Vec3ArrayPtr compute( Vec3ArrayPtr left, Vec3ArrayPtr right);
115  virtual std::string getName() {
116  return "Top-Reverse";
117  }
118 };
119 
121 {
122  virtual Vec3ArrayPtr compute( Vec3ArrayPtr left, Vec3ArrayPtr right);
123  virtual std::string getName() {
124  return "Standard";
125  }
126 };
127 
128 class SplitPattern : public PatternBase
129 {
130  virtual Vec3ArrayPtr compute( Vec3ArrayPtr left, Vec3ArrayPtr right);
131  virtual std::string getName() {
132  return "Split";
133  }
134 };
135 
137 {
138  virtual Vec3ArrayPtr compute( Vec3ArrayPtr left, Vec3ArrayPtr right);
139  virtual std::string getName() {
140  return "Split-Reverse";
141  }
142 };
143 
144 }