Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/**
* Mesh.cpp
*
* Date: 2012/05/02
* Author: KR
*/
#include "Mesh.h"
#include "Node.h"
#include "Elements/Tri.h"
#include "Elements/Quad.h"
#include "Elements/Tet.h"
#include "Elements/Hex.h"
#include "Elements/Pyramid.h"
#include "Elements/Prism.h"
namespace MeshLib {
Mesh::Mesh(const std::string &name, const std::vector<Node*> &nodes, const std::vector<Element*> &elements)
: _name(name), _nodes(nodes), _elements(elements)
{
this->removeIdenticalNodes();
}
Mesh::Mesh(const Mesh &mesh)
: _name(mesh.getName()), _nodes(mesh.getNodes()), _elements(mesh.getElements())
{
}
Mesh::Mesh(const std::string &file_name)
{
// read mesh
this->removeIdenticalNodes();
}
Mesh::~Mesh()
{
const size_t nElements (_elements.size());
for (size_t i=0; i<nElements; i++)
delete _elements[i];
const size_t nNodes (_nodes.size());
for (size_t i=0; i<nNodes; i++)
delete _nodes[i];
}
void Mesh::removeIdenticalNodes()
{
//check for unique mesh nodes
}
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
void Mesh::addNode(Node* node)
{
_nodes.push_back(node);
}
void Mesh::addElement(Element* elem)
{
_elements.push_back(elem);
// add element informatin to nodes
size_t nNodes (elem->getNNodes());
for (size_t i=0; i<nNodes; i++)
elem->getNode(i)->addElement(elem);
}
/*
void Mesh::removeNode(size_t idx)
{
if (idx < _nodes.size())
{
const std::vector<const Element*> node_elems = _nodes[idx]->getElements();
for (std::vector<const Element*>::const_iterator it = node_elems.begin();
it != node_elems.end(); ++it)
{
//for (si
}
_nodes.erase(_nodes.begin()+idx);
return;
}
std::cerr << "Mesh::removeNode(" << idx << ") - Index does not exist." << std::endl;
}
void Mesh::removeElement(size_t idx)
{
if (idx < _elements.size())
{
Element* elem (_elements[idx]);
size_t nNodes (elem->getNNodes());
for (size_t i=0; i<nNodes; i++)
{
Node* node (const_cast<Node*>(elem->getNode(i)));
// remove element from nodes element-list
if (node->getNElements()>1)
{
std::vector<Node*>::iterator it (_nodes.begin()+node->getID());
delete node;
_nodes.erase(it);
}
// delete node if it is not part of any element
else
node->removeElement(elem);
}
return;
}
std::cerr << "Mesh::removeElement(" << idx << ") - Index does not exist." << std::endl;
}
*/
}