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  * $Revision$ *
45  * $Author$ *
46  * $Date$ *
47  * *
48 \*===========================================================================*/
49 
50 
51 
52 
53 //=============================================================================
54 //
55 // CLASS TriStripNodeDeprecatedT
56 //
57 //=============================================================================
58 
59 
60 #ifndef ACG_TRISTRIPNODET_HH
61 #define ACG_TRISTRIPNODET_HH
62 
63 
64 //== INCLUDES =================================================================
65 
66 
67 #include <OpenMesh/Tools/Utils/StripifierT.hh>
68 #include "MeshNodeDeprecatedT.hh"
69 
70 
71 //== NAMESPACES ===============================================================
72 
73 
74 namespace ACG {
75 namespace SceneGraph {
76 
77 
78 //== CLASS DEFINITION =========================================================
79 
80 
81 
87 template <class Mesh>
88 class TriStripNodeDeprecatedT : public MeshNodeDeprecatedT<Mesh>
89 {
90 public:
91 
93  typedef MeshNodeDeprecatedT<Mesh> Base;
94  typedef typename Base::FaceMode FaceMode;
95 
96 
99  BaseNode* _parent=0,
100  std::string _name="<TriStripNodeDeprecatedT>" )
101  : Base(_mesh, _parent, _name),
102  strips_(_mesh)
103  {}
104 
105 
108 
109 
110  ACG_CLASSNAME(TriStripNodeDeprecatedT);
111 
112 
115  {
116  std::vector<unsigned int>().swap(Base::indices_);
117  strips_.stripify();
118  }
119 
120 
122  virtual void update_topology()
123  {
124  strips_.clear();
125  Base::update_topology();
126  }
127 
128 
129 
130 private:
131 
132  virtual void draw_faces(FaceMode _mode)
133  {
134  if (Base::mesh_.is_trimesh() &&
135  _mode == Base::PER_VERTEX &&
136  strips_.is_valid())
137  {
138  typename MyStripifier::StripsIterator strip_it = strips_.begin();
139  typename MyStripifier::StripsIterator strip_last = strips_.end();
140 
141  for (; strip_it!=strip_last; ++strip_it)
142  glDrawElements(GL_TRIANGLE_STRIP,
143  strip_it->size(),
144  GL_UNSIGNED_INT,
145  &(*strip_it)[0] );
146  }
147  else Base::draw_faces(_mode);
148  }
149 
150 
151  MyStripifier strips_;
152 };
153 
154 
155 //=============================================================================
156 } // namespace SceneGraph
157 } // namespace ACG
158 //=============================================================================
159 #endif // ACG_TRISTRIPNODET_HH defined
160 //=============================================================================
161 
StripsIterator begin() const
Access strips.
Definition: StripifierT.hh:114
size_t stripify()
Compute triangle strips, returns number of strips.
Definition: StripifierT.cc:87
void clear()
delete all strips
Definition: StripifierT.hh:105
TriStripNodeDeprecatedT(Mesh &_mesh, BaseNode *_parent=0, std::string _name="<TriStripNodeDeprecatedT>")
Default constructor.
StripsIterator end() const
Access strips.
Definition: StripifierT.hh:116
Namespace providing different geometric functions concerning angles.
Definition: DBSCANT.cc:51
void update_strips()
build triangle strips, delete face indices
virtual void update_topology()
build face indices, delete strips
bool is_valid() const
are strips computed?
Definition: StripifierT.hh:111