diff --git a/MeshLib/Elements/TemplateEdge.h b/MeshLib/Elements/TemplateEdge.h index c4662ff019c8f6ec4acf23ad54ab4015fdfcf0ae..0a6d35265d9f7c554a5ee46d06dac9f5bda7d327 100644 --- a/MeshLib/Elements/TemplateEdge.h +++ b/MeshLib/Elements/TemplateEdge.h @@ -15,6 +15,7 @@ #ifndef TEMPLATEEDGE_H_ #define TEMPLATEEDGE_H_ +#include <array> #include <limits> #include "MshEnums.h" @@ -39,6 +40,9 @@ public: /// Constructor with an array of mesh nodes. TemplateEdge(Node* nodes[NNODES], unsigned value = 0); + /// Constructs an edge from array of Node pointers. + TemplateEdge(std::array<Node*, NNODES> const& nodes, unsigned value = 0); + /// Copy constructor TemplateEdge(const TemplateEdge &edge); diff --git a/MeshLib/Elements/TemplateEdge.tpp b/MeshLib/Elements/TemplateEdge.tpp index 1fe174047bcf2824685445d021fbff2ecbc0b7aa..0b31fed5de5819eb281bdaf4e9c842380e092430 100644 --- a/MeshLib/Elements/TemplateEdge.tpp +++ b/MeshLib/Elements/TemplateEdge.tpp @@ -12,7 +12,18 @@ * */ -namespace MeshLib { +namespace MeshLib +{ +template<unsigned NNODES, CellType::type CELLEDGETYPE> +TemplateEdge<NNODES,CELLEDGETYPE>::TemplateEdge(std::array<Node*, NNODES> const& nodes, + unsigned value) + : Element(value) +{ + _nodes = new Node*[NNODES]; + std::copy(nodes.begin(), nodes.end(), _nodes); + + this->_length = this->computeVolume(); +} template<unsigned NNODES, CellType::type CELLEDGETYPE> TemplateEdge<NNODES,CELLEDGETYPE>::TemplateEdge(Node* nodes[NNODES], unsigned value) : diff --git a/MeshLib/Elements/TemplateQuad.h b/MeshLib/Elements/TemplateQuad.h index 6e1e5320a5b778b7b90923f7e66248ed420b46d2..528fd5ea52ec65b0843dedf27ed79ae663a8b82a 100644 --- a/MeshLib/Elements/TemplateQuad.h +++ b/MeshLib/Elements/TemplateQuad.h @@ -42,6 +42,13 @@ public: /// Constructor with an array of mesh nodes. TemplateQuad(Node* nodes[NNODES], unsigned value = 0); + /// Constructs an edge from array of Node pointers. + TemplateQuad(std::array<Node*, NNODES> const& nodes, unsigned value = 0); + + /// Constructs a quad from NNODES of Nodes initializing Face with + // value = 0. + TemplateQuad(Node* n0, Node* n1, Node* n2, Node* n3, ...); + /// Copy constructor TemplateQuad(const TemplateQuad &quad); diff --git a/MeshLib/Elements/TemplateQuad.tpp b/MeshLib/Elements/TemplateQuad.tpp index e79a85a2d87eaee9e7ffbd7077b7bbcc4cf5ba4f..fcd938744c5eb6dff8c2af6052363464539dad4e 100644 --- a/MeshLib/Elements/TemplateQuad.tpp +++ b/MeshLib/Elements/TemplateQuad.tpp @@ -12,6 +12,8 @@ * */ +#include <array> + #include "Node.h" #include "Tri.h" @@ -19,7 +21,21 @@ #include "MathTools.h" #include "AnalyticalGeometry.h" -namespace MeshLib { +namespace MeshLib +{ +template<unsigned NNODES, CellType::type CELLQUADTYPE> +TemplateQuad<NNODES,CELLQUADTYPE>::TemplateQuad(std::array<Node*, NNODES> const& nodes, + unsigned value) + : Face(value) +{ + _nodes = new Node*[NNODES]; + std::copy(nodes.begin(), nodes.end(), _nodes); + + _neighbors = new Element*[4]; + std::fill(_neighbors, _neighbors + 4, nullptr); + + this->_area = this->computeVolume(); +} template <unsigned NNODES, CellType::type CELLQUADTYPE> TemplateQuad<NNODES,CELLQUADTYPE>::TemplateQuad(Node* nodes[NNODES], unsigned value)