HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
GEO_PrimTriFan.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_PrimTriFan.h ( GEO Library, C++)
7  *
8  * COMMENTS: Implements a normal triangle fan.
9  */
10 
11 #ifndef __GEO_PrimTriFan__
12 #define __GEO_PrimTriFan__
13 
14 #include "GEO_API.h"
15 #include "GEO_TriMesh.h"
16 #include "GEO_PrimType.h"
17 
18 class GA_Detail;
19 
20 /// Triangle fan. All triangles share the first vertex
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  virtual ~GEO_PrimTriFan() {}
33 
34 public:
35  /// @{
36  /// Interface from GEO_TriMesh
37  virtual bool isDegenerate() const;
38  virtual UT_Vector3 computeNormal() const;
39  virtual void reverse();
40 
41  virtual fpreal calcVolume(const UT_Vector3 &refpt) const;
42  virtual fpreal calcArea() const;
43  virtual fpreal calcPerimeter() const;
44  /// @}
45 
46  /// Get number of triangles in the fan
47  exint getTriangleCount() const { return getVertexCount()-2; }
48 
49  /// Get the vertices for a single triangle in the fan
50  void getTriangleVertices(exint tri, int &v0, int &v1, int &v2) const
51  {
52  v0 = 0;
53  v1 = tri + 1;
54  v2 = tri + 2;
55  }
56 
57  virtual const GA_PrimitiveJSON *getJSON() const;
58 
59 protected:
61  { return GEO_TriMesh::buildFamilyMask(); }
62 
63  /// All subclasses should call this method to register the curve intrinsics.
64  /// @see GA_IntrinsicManager
67  { return GEO_TriMesh::registerIntrinsics(defn); }
68 
69  // We don't need to save anything other than what's in a face
70  virtual bool savePrivateH9(std::ostream &, bool binary) const;
71  virtual bool loadPrivateH9(UT_IStream &);
72 
73 private:
74  friend std::ostream &operator<<(std::ostream &os, const GEO_PrimTriFan &d)
75  {
76  d.saveH9(os, 0,
79  return os;
80  }
81 };
82 
83 #endif
84 
static GA_IntrinsicManager::Registrar registerIntrinsics(GA_PrimitiveDefinition &defn)
Definition: GEO_TriMesh.h:256
virtual ~GEO_PrimTriFan()
virtual bool isDegenerate() const
Is the primitive degenerate.
const GLuint GLenum const void * binary
Definition: glcorearb.h:1923
GLfloat GLfloat GLfloat v2
Definition: glcorearb.h:817
3D Vector class.
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:654
GA_Size GA_Offset
Definition: GA_Types.h:617
virtual fpreal calcArea() const
int64 exint
Definition: SYS_Types.h:109
Triangle fan. All triangles share the first vertex.
virtual bool savePrivateH9(std::ostream &os, bool binary) const =0
static GA_IntrinsicManager::Registrar registerIntrinsics(GA_PrimitiveDefinition &defn)
virtual const GA_PrimitiveJSON * getJSON() const =0
GLintptr offset
Definition: glcorearb.h:664
Provide a JSON interface to a primitive.
#define GEO_API
Definition: GEO_API.h:10
virtual void reverse()=0
Reverse the order of vertices.
static GA_PrimitiveFamilyMask buildFamilyMask()
friend std::ostream & operator<<(std::ostream &os, const GEO_PrimTriFan &d)
virtual fpreal calcPerimeter() const
virtual bool saveH9(std::ostream &os, bool binary, const UT_Array< GA_AttribSaveDataH9 > &prim_attribs, const UT_Array< GA_AttribSaveDataH9 > &vtx_attribs) const
GLfloat v0
Definition: glcorearb.h:815
exint getTriangleCount() const
Get number of triangles in the fan.
GEO_PrimTriFan(GA_Detail *d, GA_Offset offset=GA_INVALID_OFFSET)
double fpreal
Definition: SYS_Types.h:263
static const UT_Array< GA_AttribSaveDataH9 > & theEmptySaveAttribs
Convience objects to pass as arguments to saveH9()/loadH9().
GLfloat GLfloat v1
Definition: glcorearb.h:816
virtual GA_Size getVertexCount() const final
Definition: GEO_TriMesh.h:142
virtual fpreal calcVolume(const UT_Vector3 &) const
Container class for all geometry.
Definition: GA_Detail.h:96
Definition of a geometric primitive.
static GA_PrimitiveFamilyMask buildFamilyMask()
Definition: GEO_TriMesh.h:250
void getTriangleVertices(exint tri, int &v0, int &v1, int &v2) const
Get the vertices for a single triangle in the fan.