HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GEO_PrimTriStrip.h
Go to the documentation of this file.
1 /*
2  * PROPRIETARY INFORMATION. This software is proprietary to
3  * Side Effects Software Inc., and is not to be reproduced,
4  * transmitted, or disclosed in any way without written permission.
5  *
6  * NAME: GEO_PrimTriStrip.h ( GEO Library, C++)
7  *
8  * COMMENTS: Implements a normal triangle strip.
9  */
10 
11 #ifndef __GEO_PrimTriStrip__
12 #define __GEO_PrimTriStrip__
13 
14 #include "GEO_API.h"
15 #include "GEO_TriMesh.h"
16 #include "GEO_PrimType.h"
17 
18 class GA_Detail;
19 
20 /// A strip of triangles. The Nth triangle shares an edge with the previous.
22 {
23 protected:
24  /// NOTE: The constructor should only be called from subclass
25  /// constructors.
27  : GEO_TriMesh(d, offset)
28  {}
29 
30  /// NOTE: The destructor should only be called from subclass
31  /// destructors.
32  ~GEO_PrimTriStrip() override {}
33 
34 public:
35  /// @{
36  /// Interface from GEO_TriMesh
37  bool isDegenerate() const override;
38  UT_Vector3 computeNormal() const override;
39  UT_Vector3D computeNormalD() const override;
40  void reverse() override;
41  virtual void reverseNormal();
42 
43  fpreal calcVolume(const UT_Vector3 &refpt) const override;
44  fpreal calcArea() const override;
45  fpreal calcPerimeter() const override;
46  /// @}
47 
48  /// Get number of triangles in the strip
49  int getTriangleCount() const { return getVertexCount()-2; }
50 
51  /// Get the vertices for a single triangle in the strip
52  void getTriangleVertices(int idx, int &v0, int &v1, int &v2) const
53  {
54  v0 = idx;
55  if (idx & 1)
56  {
57  v1 = idx+1;
58  v2 = idx+2;
59  }
60  else
61  {
62  v1 = idx+2;
63  v2 = idx+1;
64  }
65  }
66 
67  const GA_PrimitiveJSON *getJSON() const override;
68 
69 protected:
71  { return GEO_TriMesh::buildFamilyMask(); }
72 
73  template <typename T>
74  UT_Vector3T<T> internalComputeNormal() const;
75 
76  /// All subclasses should call this method to register the curve intrinsics.
77  /// @see GA_IntrinsicManager
80  { return GEO_TriMesh::registerIntrinsics(defn); }
81 
82  // We don't need to save anything other than what's in a face
83  bool savePrivateH9(std::ostream &,
84  bool binary) const override;
85  bool loadPrivateH9(UT_IStream &) override;
86 
87 private:
88  friend std::ostream &operator<<(std::ostream &os, const GEO_PrimTriStrip &d)
89  {
90  d.saveH9(os, 0,
93  return os;
94  }
95 };
96 
97 #endif
98 
static GA_IntrinsicManager::Registrar registerIntrinsics(GA_PrimitiveDefinition &defn)
Definition: GEO_TriMesh.h:193
fpreal calcPerimeter() const override
bool isDegenerate() const override
Is the primitive degenerate.
SYS_FORCE_INLINE GA_Size getVertexCount() const
Return the number of vertices used by this primitive.
Definition: GA_Primitive.h:232
virtual UT_Vector3D computeNormalD() const =0
const GLuint GLenum const void * binary
Definition: glcorearb.h:1924
fpreal calcVolume(const UT_Vector3 &) const override
~GEO_PrimTriStrip() override
static GA_PrimitiveFamilyMask buildFamilyMask()
void reverse() override=0
Reverse the order of vertices.
GLfloat GLfloat GLfloat v2
Definition: glcorearb.h:818
fpreal calcArea() const override
GA_PrimitiveFamilyMask
virtual UT_Vector3 computeNormal() const =0
Return a normal vector for the primitive.
virtual bool loadPrivateH9(UT_IStream &is)=0
#define GA_INVALID_OFFSET
Definition: GA_Types.h:687
GA_Size GA_Offset
Definition: GA_Types.h:646
GLintptr offset
Definition: glcorearb.h:665
virtual bool savePrivateH9(std::ostream &os, bool binary) const =0
bool saveH9(std::ostream &os, bool binary, const UT_Array< GA_AttribSaveDataH9 > &prim_attribs, const UT_Array< GA_AttribSaveDataH9 > &vtx_attribs) const override
virtual const GA_PrimitiveJSON * getJSON() const =0
Provide a JSON interface to a primitive.
#define GEO_API
Definition: GEO_API.h:14
GLfloat v0
Definition: glcorearb.h:816
GEO_PrimTriStrip(GA_Detail *d, GA_Offset offset=GA_INVALID_OFFSET)
static const UT_Array< GA_AttribSaveDataH9 > & theEmptySaveAttribs
Convience objects to pass as arguments to saveH9()/loadH9().
fpreal64 fpreal
Definition: SYS_Types.h:277
friend std::ostream & operator<<(std::ostream &os, const GEO_PrimTriStrip &d)
A strip of triangles. The Nth triangle shares an edge with the previous.
GLfloat GLfloat v1
Definition: glcorearb.h:817
Container class for all geometry.
Definition: GA_Detail.h:96
int getTriangleCount() const
Get number of triangles in the strip.
Definition of a geometric primitive.
void getTriangleVertices(int idx, int &v0, int &v1, int &v2) const
Get the vertices for a single triangle in the strip.
static GA_PrimitiveFamilyMask buildFamilyMask()
Definition: GEO_TriMesh.h:188
static GA_IntrinsicManager::Registrar registerIntrinsics(GA_PrimitiveDefinition &defn)