ESyS-Particle  4.0.1
TriMesh.h
1 
2 // //
3 // Copyright (c) 2003-2011 by The University of Queensland //
4 // Earth Systems Science Computational Centre (ESSCC) //
5 // http://www.uq.edu.au/esscc //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.opensource.org/licenses/osl-3.0.php //
10 // //
12 
13 #ifndef __TRIMESH_H
14 #define __TRIMESH_H
15 
16 //--- TML includes ---
17 #include "tml/comm/comm.h"
18 
19 // -- Project includes --
20 #include "Geometry/Triangle.h"
21 #include "Geometry/Edge.h"
22 #include "Geometry/Corner.h"
23 #include "Model/MeshData.h"
24 #include "Foundation/vec3.h"
25 
26 // -- STL includes --
27 #include <vector>
28 #include <map>
29 #include <string>
30 
31 using std::vector;
32 using std::multimap;
33 using std::map;
34 using std::string;
35 
36 // -- IO includes ---
37 #include <iostream>
38 
39 using std::ostream;
40 
41 
50 class TriMesh
51 {
52  private:
53  vector<Triangle> m_triangles;
54  vector<Edge> m_edges;
55  vector<Corner> m_corners;
56  multimap<int,Triangle*> m_triangle_by_node_id;
57  multimap<int,Edge*> m_edge_by_node_id;
58  map<int,int> m_corner_by_id;
59 
60  map<int,int> m_tri_index_by_id;
61 
62  public:
63  // types
64  typedef vector<Triangle>::iterator triangle_iterator;
65  typedef vector<Edge>::iterator edge_iterator;
66  typedef vector<Corner>::iterator corner_iterator;
67 
68  // functions
69  TriMesh();
70 
71  virtual ~TriMesh()
72  {
73  }
74 
75  void LoadMesh(const vector<MeshNodeData>&,const vector<MeshTriData>&);
76  void moveNode(int,const Vec3&);
77  void translateBy(const Vec3 &translation);
78  triangle_iterator triangles_begin(){return m_triangles.begin();};
79  triangle_iterator triangles_end(){return m_triangles.end();};
80  edge_iterator edges_begin(){return m_edges.begin();};
81  edge_iterator edges_end(){return m_edges.end();};
82  corner_iterator corners_begin(){return m_corners.begin();};
83  corner_iterator corners_end(){return m_corners.end();};
85  bool hasMovedBy(double);
87 
88  void zeroForces();
89  virtual void writeCheckPoint(ostream&,const string&) const;
90  virtual void loadCheckPoint(istream&);
91 
92  // triangle data access functions
93  template <typename P> void forAllTrianglesGet(P&,typename P::value_type (Triangle::*rdf)() const);
94  template <typename P> vector<pair<int,P> > forAllTrianglesGetIndexed(P (Triangle::*rdf)() const);
95 };
96 
97 #include "TriMesh.hpp"
98 
99 #endif // __TRIMESH_H