Developer Documentation
Options.hh
1 /* ========================================================================= *
2  * *
3  * OpenMesh *
4  * Copyright (c) 2001-2015, RWTH-Aachen University *
5  * Department of Computer Graphics and Multimedia *
6  * All rights reserved. *
7  * www.openmesh.org *
8  * *
9  *---------------------------------------------------------------------------*
10  * This file is part of OpenMesh. *
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 #ifndef OPENMESH_IO_OPTIONS_HH
46 #define OPENMESH_IO_OPTIONS_HH
47 
48 
49 //=== INCLUDES ================================================================
50 
51 
52 // OpenMesh
54 
55 
56 //== NAMESPACES ==============================================================
57 
58 
59 namespace OpenMesh {
60 namespace IO {
61 
62 
63 //=== IMPLEMENTATION ==========================================================
64 
65 
70 
71 
72 //-----------------------------------------------------------------------------
73 
90 class Options
91 {
92 public:
93  typedef int enum_type;
94  typedef enum_type value_type;
95 
98  enum Flag {
99  Default = 0x0000,
100  Binary = 0x0001,
101  MSB = 0x0002,
102  LSB = 0x0004,
103  Swap = 0x0008,
104  VertexNormal = 0x0010,
105  VertexColor = 0x0020,
106  VertexTexCoord = 0x0040,
107  EdgeColor = 0x0080,
108  FaceNormal = 0x0100,
109  FaceColor = 0x0200,
110  FaceTexCoord = 0x0400,
111  ColorAlpha = 0x0800,
112  ColorFloat = 0x1000,
113  Custom = 0x2000,
114  Status = 0x4000
115  };
116 
117 public:
118 
120  Options() : flags_( Default )
121  { }
122 
123 
125  Options(const Options& _opt) : flags_(_opt.flags_)
126  { }
127 
128 
130  Options(Flag _flg) : flags_( _flg)
131  { }
132 
133 
135  Options(const value_type _flgs) : flags_( _flgs)
136  { }
137 
138 
139  ~Options()
140  { }
141 
143  void cleanup(void)
144  { flags_ = Default; }
145 
147  void clear(void)
148  { flags_ = 0; }
149 
151  bool is_empty(void) const { return !flags_; }
152 
153 public:
154 
155 
157 
159  Options& operator = ( const Options& _rhs )
160  { flags_ = _rhs.flags_; return *this; }
161 
162  Options& operator = ( const value_type _rhs )
163  { flags_ = _rhs; return *this; }
164 
166 
167 
169 
171  Options& operator -= ( const value_type _rhs )
172  { flags_ &= ~_rhs; return *this; }
173 
174  Options& unset( const value_type _rhs)
175  { return (*this -= _rhs); }
176 
178 
179 
180 
182 
184  Options& operator += ( const value_type _rhs )
185  { flags_ |= _rhs; return *this; }
186 
187  Options& set( const value_type _rhs)
188  { return (*this += _rhs); }
189 
191 
192 public:
193 
194 
195  // Check if an option or several options are set.
196  bool check(const value_type _rhs) const
197  {
198  return (flags_ & _rhs)==_rhs;
199  }
200 
201  bool is_binary() const { return check(Binary); }
202  bool vertex_has_normal() const { return check(VertexNormal); }
203  bool vertex_has_color() const { return check(VertexColor); }
204  bool vertex_has_texcoord() const { return check(VertexTexCoord); }
205  bool vertex_has_status() const { return check(Status); }
206  bool edge_has_color() const { return check(EdgeColor); }
207  bool edge_has_status() const { return check(Status); }
208  bool halfedge_has_status() const { return check(Status); }
209  bool face_has_normal() const { return check(FaceNormal); }
210  bool face_has_color() const { return check(FaceColor); }
211  bool face_has_texcoord() const { return check(FaceTexCoord); }
212  bool face_has_status() const { return check(Status); }
213  bool color_has_alpha() const { return check(ColorAlpha); }
214  bool color_is_float() const { return check(ColorFloat); }
215 
216 
218  bool operator == (const value_type _rhs) const
219  { return flags_ == _rhs; }
220 
221 
223  bool operator != (const value_type _rhs) const
224  { return flags_ != _rhs; }
225 
226 
228  operator value_type () const { return flags_; }
229 
230 private:
231 
232  bool operator && (const value_type _rhs) const;
233 
234  value_type flags_;
235 };
236 
237 //-----------------------------------------------------------------------------
238 
239 
240 
241 
243 
244 
245 //=============================================================================
246 } // namespace IO
247 } // namespace OpenMesh
248 //=============================================================================
249 #endif
250 //=============================================================================
Has (r) / store (w) vertex colors.
Definition: Options.hh:105
Swap byte order in binary mode.
Definition: Options.hh:103
bool operator==(const value_type _rhs) const
Returns true if _rhs has the same options enabled.
Definition: Options.hh:218
Options(Flag _flg)
Initializing constructor setting a single option.
Definition: Options.hh:130
Assume little endian byte ordering.
Definition: Options.hh:102
Has (r) / store (w) face colors.
Definition: Options.hh:109
Has (r) / store (w) float values for colors (currently only implemented for PLY and OFF files) ...
Definition: Options.hh:112
Has (r) / store (w) face normals.
Definition: Options.hh:108
Has (r) / store (w) texture coordinates.
Definition: Options.hh:106
Has (r) / store (w) face texture coordinates.
Definition: Options.hh:110
Options & unset(const value_type _rhs)
Unset options defined in _rhs.
Definition: Options.hh:174
Has (r) / store (w) status properties.
Definition: Options.hh:114
Options & operator-=(const value_type _rhs)
Unset options defined in _rhs.
Definition: Options.hh:171
bool is_empty(void) const
Returns true if all bits are zero.
Definition: Options.hh:151
void clear(void)
Clear all bits.
Definition: Options.hh:147
void cleanup(void)
Restore state after default constructor.
Definition: Options.hh:143
Set options for reader/writer modules.
Definition: Options.hh:90
Has (r) / store (w) alpha values for colors.
Definition: Options.hh:111
Set binary mode for r/w.
Definition: Options.hh:100
Has (r) / store (w) vertex normals.
Definition: Options.hh:104
Options()
Default constructor.
Definition: Options.hh:120
Options & operator+=(const value_type _rhs)
Set options defined in _rhs.
Definition: Options.hh:184
Options(const Options &_opt)
Copy constructor.
Definition: Options.hh:125
Assume big endian byte ordering.
Definition: Options.hh:101
bool operator!=(const value_type _rhs) const
Returns true if _rhs does not have the same options enabled.
Definition: Options.hh:223
Has (r) / store (w) edge colors.
Definition: Options.hh:107
Options & operator=(const Options &_rhs)
Copy options defined in _rhs.
Definition: Options.hh:159
Options(const value_type _flgs)
Initializing constructor setting multiple options.
Definition: Options.hh:135