QuadTriMesh.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. // This code is in the public domain -- Ignacio Castaño <castano@gmail.com>
  2. #pragma once
  3. #ifndef NV_MESH_QUADTRIMESH_H
  4. #define NV_MESH_QUADTRIMESH_H
  5. #include "nvcore/Array.h"
  6. #include "nvmath/Vector.h"
  7. #include "nvmesh/nvmesh.h"
  8. #include "nvmesh/BaseMesh.h"
  9. namespace nv
  10. {
  11. class Stream;
  12. /// Mixed quad/triangle mesh.
  13. class QuadTriMesh : public BaseMesh
  14. {
  15. public:
  16. struct Face;
  17. typedef BaseMesh::Vertex Vertex;
  18. QuadTriMesh() {};
  19. QuadTriMesh(uint faceCount, uint vertexCount) : BaseMesh(vertexCount), m_faceArray(faceCount) {}
  20. // Face methods.
  21. uint faceCount() const { return m_faceArray.count(); }
  22. const Face & faceAt(uint i) const { return m_faceArray[i]; }
  23. Face & faceAt(uint i) { return m_faceArray[i]; }
  24. const Array<Face> & faces() const { return m_faceArray; }
  25. Array<Face> & faces() { return m_faceArray; }
  26. bool isQuadFace(uint i) const;
  27. const Vertex & faceVertex(uint f, uint v) const;
  28. friend Stream & operator<< (Stream & s, QuadTriMesh & obj);
  29. private:
  30. Array<Face> m_faceArray;
  31. };
  32. /// QuadTriMesh face.
  33. struct QuadTriMesh::Face
  34. {
  35. uint id;
  36. uint v[4];
  37. bool isQuadFace() const { return v[3] != NIL; }
  38. };
  39. } // nv namespace
  40. #endif // NV_MESH_QUADTRIMESH_H