Developer Documentation
TriStripNodeDeprecatedT.hh
1 /*===========================================================================*\
2  * *
3  * OpenFlipper *
4  * Copyright (c) 2001-2015, RWTH-Aachen University *
5  * Department of Computer Graphics and Multimedia *
6  * All rights reserved. *
7  * www.openflipper.org *
8  * *
9  *---------------------------------------------------------------------------*
10  * This file is part of OpenFlipper. *
11  *---------------------------------------------------------------------------*
12  * *
13  * Redistribution and use in source and binary forms, with or without *
14  * modification, are permitted provided that the following conditions *
15  * are met: *
16  * *
17  * 1. Redistributions of source code must retain the above copyright notice, *
18  * this list of conditions and the following disclaimer. *
19  * *
20  * 2. Redistributions in binary form must reproduce the above copyright *
21  * notice, this list of conditions and the following disclaimer in the *
22  * documentation and/or other materials provided with the distribution. *
23  * *
24  * 3. Neither the name of the copyright holder nor the names of its *
25  * contributors may be used to endorse or promote products derived from *
26  * this software without specific prior written permission. *
27  * *
28  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *
29  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
30  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
31  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
32  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *
33  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *
34  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *
35  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
36  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *
37  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
38  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
39  * *
40 \*===========================================================================*/
41 
42 
43 
44 
45 
46 
47 //=============================================================================
48 //
49 // CLASS TriStripNodeDeprecatedT
50 //
51 //=============================================================================
52 
53 
54 #ifndef ACG_TRISTRIPNODET_HH
55 #define ACG_TRISTRIPNODET_HH
56 
57 
58 //== INCLUDES =================================================================
59 
60 
61 #include <OpenMesh/Tools/Utils/StripifierT.hh>
62 #include "MeshNodeDeprecatedT.hh"
63 
64 
65 //== NAMESPACES ===============================================================
66 
67 
68 namespace ACG {
69 namespace SceneGraph {
70 
71 
72 //== CLASS DEFINITION =========================================================
73 
74 
75 
81 template <class Mesh>
82 class TriStripNodeDeprecatedT : public MeshNodeDeprecatedT<Mesh>
83 {
84 public:
85 
87  typedef MeshNodeDeprecatedT<Mesh> Base;
88  typedef typename Base::FaceMode FaceMode;
89 
90 
93  BaseNode* _parent=0,
94  std::string _name="<TriStripNodeDeprecatedT>" )
95  : Base(_mesh, _parent, _name),
96  strips_(_mesh)
97  {}
98 
99 
102 
103 
104  ACG_CLASSNAME(TriStripNodeDeprecatedT);
105 
106 
109  {
110  std::vector<unsigned int>().swap(Base::indices_);
111  strips_.stripify();
112  }
113 
114 
116  virtual void update_topology()
117  {
118  strips_.clear();
119  Base::update_topology();
120  }
121 
122 
123 
124 private:
125 
126  virtual void draw_faces(FaceMode _mode)
127  {
128  if (Base::mesh_.is_trimesh() &&
129  _mode == Base::PER_VERTEX &&
130  strips_.is_valid())
131  {
132  typename MyStripifier::StripsIterator strip_it = strips_.begin();
133  typename MyStripifier::StripsIterator strip_last = strips_.end();
134 
135  for (; strip_it!=strip_last; ++strip_it)
136  glDrawElements(GL_TRIANGLE_STRIP,
137  strip_it->size(),
138  GL_UNSIGNED_INT,
139  &(*strip_it)[0] );
140  }
141  else Base::draw_faces(_mode);
142  }
143 
144 
145  MyStripifier strips_;
146 };
147 
148 
149 //=============================================================================
150 } // namespace SceneGraph
151 } // namespace ACG
152 //=============================================================================
153 #endif // ACG_TRISTRIPNODET_HH defined
154 //=============================================================================
155 
bool is_valid() const
are strips computed?
Definition: StripifierT.hh:106
Namespace providing different geometric functions concerning angles.
virtual void update_topology()
build face indices, delete strips
void clear()
delete all strips
Definition: StripifierT.hh:100
StripsIterator begin() const
Access strips.
Definition: StripifierT.hh:109
size_t stripify()
Compute triangle strips, returns number of strips.
void update_strips()
build triangle strips, delete face indices
TriStripNodeDeprecatedT(Mesh &_mesh, BaseNode *_parent=0, std::string _name="<TriStripNodeDeprecatedT>")
Default constructor.
StripsIterator end() const
Access strips.
Definition: StripifierT.hh:111