Panda3D
eggVertexUV.h
Go to the documentation of this file.
1 /**
2  * PANDA 3D SOFTWARE
3  * Copyright (c) Carnegie Mellon University. All rights reserved.
4  *
5  * All use of this software is subject to the terms of the revised BSD
6  * license. You should have received a copy of this license along
7  * with this source code in a file named "LICENSE."
8  *
9  * @file eggVertexUV.h
10  * @author drose
11  * @date 2004-07-20
12  */
13 
14 #ifndef EGGVERTEXUV_H
15 #define EGGVERTEXUV_H
16 
17 #include "pandabase.h"
18 
19 #include "eggMorphList.h"
20 #include "eggNamedObject.h"
21 
22 #include "luse.h"
23 
24 /**
25  * The set of UV's that may or may not be assigned to a vertex. To support
26  * multitexturing, there may be multiple sets of UV's on a particular vertex,
27  * each with its own name.
28  */
29 class EXPCL_PANDA_EGG EggVertexUV : public EggNamedObject {
30 PUBLISHED:
31  explicit EggVertexUV(const std::string &name, const LTexCoordd &uv);
32  explicit EggVertexUV(const std::string &name, const LTexCoord3d &uvw);
33  EggVertexUV(const EggVertexUV &copy);
34  EggVertexUV &operator = (const EggVertexUV &copy);
35  virtual ~EggVertexUV();
36 
37  INLINE static std::string filter_name(const std::string &name);
38  INLINE void set_name(const std::string &name);
39 
40  INLINE int get_num_dimensions() const;
41  INLINE bool has_w() const;
42  INLINE LTexCoordd get_uv() const;
43  INLINE const LTexCoord3d &get_uvw() const;
44  INLINE void set_uv(const LTexCoordd &texCoord);
45  INLINE void set_uvw(const LTexCoord3d &texCoord);
46 
47  INLINE bool has_tangent() const;
48  INLINE const LNormald &get_tangent() const;
49  INLINE void set_tangent(const LNormald &tangent);
50  INLINE void clear_tangent();
51 
52  INLINE bool has_binormal() const;
53  INLINE const LNormald &get_binormal() const;
54  INLINE void set_binormal(const LNormald &binormal);
55  INLINE void clear_binormal();
56 
57  static PT(EggVertexUV) make_average(const EggVertexUV *first,
58  const EggVertexUV *second);
59 
60  void transform(const LMatrix4d &mat);
61 
62  void write(std::ostream &out, int indent_level) const;
63  int compare_to(const EggVertexUV &other) const;
64 
66 
67 private:
68  enum Flags {
69  F_has_tangent = 0x001,
70  F_has_binormal = 0x002,
71  F_has_w = 0x004,
72  };
73 
74  int _flags;
75  LNormald _tangent;
76  LNormald _binormal;
77  LTexCoord3d _uvw;
78 
79 public:
80  static TypeHandle get_class_type() {
81  return _type_handle;
82  }
83  static void init_type() {
84  EggNamedObject::init_type();
85  register_type(_type_handle, "EggVertexUV",
86  EggNamedObject::get_class_type());
87  }
88  virtual TypeHandle get_type() const {
89  return get_class_type();
90  }
91  virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
92 
93 private:
94  static TypeHandle _type_handle;
95 };
96 
97 #include "eggVertexUV.I"
98 
99 #endif
The set of UV's that may or may not be assigned to a vertex.
Definition: eggVertexUV.h:29
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
void register_type(TypeHandle &type_handle, const std::string &name)
This inline function is just a convenient way to call TypeRegistry::register_type(),...
Definition: register_type.I:22
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
This is a fairly low-level base class–any egg object that has a name.
An STL function object class, this is intended to be used on any ordered collection of class objects ...
Definition: stl_compares.h:73
TypeHandle is the identifier used to differentiate C++ class types.
Definition: typeHandle.h:81