diff --git a/MeshLib/Elements/Element.cpp b/MeshLib/Elements/Element.cpp index 95490314afb8d29773f4cf62b010608c46f7b2e6..da7506ef581efe4b2829deeddc91242b5b1eaa82 100644 --- a/MeshLib/Elements/Element.cpp +++ b/MeshLib/Elements/Element.cpp @@ -96,19 +96,6 @@ const Element* Element::getNeighbor(unsigned i) const #endif } -unsigned Element::getNodeIDinElement(const MeshLib::Node* node) const -{ - const unsigned nNodes(this->getNumberOfNodes()); - for (unsigned i(0); i < nNodes; i++) - { - if (node == _nodes[i]) - { - return i; - } - } - return std::numeric_limits<unsigned>::max(); -} - const Node* Element::getNode(unsigned i) const { #ifndef NDEBUG @@ -278,4 +265,17 @@ bool isPointInElementXY(MathLib::Point3d const& p, Element const& e) MeshLib::MeshElemType2String(e.getGeomType())); return false; } + +unsigned getNodeIDinElement(Element const& element, const MeshLib::Node* node) +{ + const unsigned nNodes(element.getNumberOfNodes()); + for (unsigned i(0); i < nNodes; i++) + { + if (node == element.getNode(i)) + { + return i; + } + } + return std::numeric_limits<unsigned>::max(); +} } // namespace MeshLib diff --git a/MeshLib/Elements/Element.h b/MeshLib/Elements/Element.h index a9df40b120cacaae74d5036456909722991dfd86..791a7fab9bfbdd8da5ffb5f7c764d26dcb467da3 100644 --- a/MeshLib/Elements/Element.h +++ b/MeshLib/Elements/Element.h @@ -102,9 +102,6 @@ public: /// Returns the number of all nodes including both linear and nonlinear nodes virtual unsigned getNumberOfNodes() const = 0; - /// Returns the position of the given node in the node array of this element. - virtual unsigned getNodeIDinElement(const MeshLib::Node* node) const; - /** * Get the global index for the Node with local index i. * The index i should be at most the number of nodes of the element. @@ -232,4 +229,7 @@ std::pair<double, double> computeSqrEdgeLengthRange(Element const& element); /// @return true if the \f$p' \in e'\f$ and false if \f$p' \notin e'\f$ bool isPointInElementXY(MathLib::Point3d const& p, Element const& e); +/// Returns the position of the given node in the node array of this element. +unsigned getNodeIDinElement(Element const& element, const Node* node); + } // namespace MeshLib diff --git a/MeshLib/MeshEditing/MeshRevision.cpp b/MeshLib/MeshEditing/MeshRevision.cpp index f4c73f85bd412d35ec2d4074e5a001e196b9b84a..4b1ae1b9b7e0cdc68a25dd5f0f2cf6da212ebec5 100644 --- a/MeshLib/MeshEditing/MeshRevision.cpp +++ b/MeshLib/MeshEditing/MeshRevision.cpp @@ -556,36 +556,38 @@ unsigned MeshRevision::reduceHex(MeshLib::Element const* const org_elem, face->getNode(2)->getID() == face->getNode(3)->getID()) { auto** prism_nodes = new MeshLib::Node*[6]; - prism_nodes[0] = nodes[org_elem - ->getNode(this->lutHexDiametralNode( - org_elem->getNodeIDinElement( - face->getNode(0)))) - ->getID()]; - prism_nodes[1] = nodes[org_elem - ->getNode(this->lutHexDiametralNode( - org_elem->getNodeIDinElement( - face->getNode(1)))) - ->getID()]; - prism_nodes[2] = + prism_nodes[0] = nodes[org_elem - ->getNode(org_elem->getNodeIDinElement( - face->getNode(2))) + ->getNode( + this->lutHexDiametralNode(getNodeIDinElement( + *org_elem, face->getNode(0)))) ->getID()]; - prism_nodes[3] = nodes[org_elem - ->getNode(this->lutHexDiametralNode( - org_elem->getNodeIDinElement( - face->getNode(2)))) - ->getID()]; - prism_nodes[4] = nodes[org_elem - ->getNode(this->lutHexDiametralNode( - org_elem->getNodeIDinElement( - face->getNode(3)))) + prism_nodes[1] = + nodes[org_elem + ->getNode( + this->lutHexDiametralNode(getNodeIDinElement( + *org_elem, face->getNode(1)))) + ->getID()]; + prism_nodes[2] = nodes[org_elem + ->getNode(getNodeIDinElement( + *org_elem, face->getNode(2))) ->getID()]; - prism_nodes[5] = + prism_nodes[3] = + nodes[org_elem + ->getNode( + this->lutHexDiametralNode(getNodeIDinElement( + *org_elem, face->getNode(2)))) + ->getID()]; + prism_nodes[4] = nodes[org_elem - ->getNode(org_elem->getNodeIDinElement( - face->getNode(0))) + ->getNode( + this->lutHexDiametralNode(getNodeIDinElement( + *org_elem, face->getNode(3)))) ->getID()]; + prism_nodes[5] = nodes[org_elem + ->getNode(getNodeIDinElement( + *org_elem, face->getNode(0))) + ->getID()]; new_elements.push_back(new MeshLib::Prism(prism_nodes)); delete face; return 1; @@ -594,36 +596,38 @@ unsigned MeshRevision::reduceHex(MeshLib::Element const* const org_elem, face->getNode(1)->getID() == face->getNode(2)->getID()) { auto** prism_nodes = new MeshLib::Node*[6]; - prism_nodes[0] = nodes[org_elem - ->getNode(this->lutHexDiametralNode( - org_elem->getNodeIDinElement( - face->getNode(0)))) - ->getID()]; - prism_nodes[1] = nodes[org_elem - ->getNode(this->lutHexDiametralNode( - org_elem->getNodeIDinElement( - face->getNode(3)))) - ->getID()]; - prism_nodes[2] = + prism_nodes[0] = nodes[org_elem - ->getNode(org_elem->getNodeIDinElement( - face->getNode(2))) + ->getNode( + this->lutHexDiametralNode(getNodeIDinElement( + *org_elem, face->getNode(0)))) ->getID()]; - prism_nodes[3] = nodes[org_elem - ->getNode(this->lutHexDiametralNode( - org_elem->getNodeIDinElement( - face->getNode(1)))) - ->getID()]; - prism_nodes[4] = nodes[org_elem - ->getNode(this->lutHexDiametralNode( - org_elem->getNodeIDinElement( - face->getNode(2)))) + prism_nodes[1] = + nodes[org_elem + ->getNode( + this->lutHexDiametralNode(getNodeIDinElement( + *org_elem, face->getNode(3)))) + ->getID()]; + prism_nodes[2] = nodes[org_elem + ->getNode(getNodeIDinElement( + *org_elem, face->getNode(2))) ->getID()]; - prism_nodes[5] = + prism_nodes[3] = + nodes[org_elem + ->getNode( + this->lutHexDiametralNode(getNodeIDinElement( + *org_elem, face->getNode(1)))) + ->getID()]; + prism_nodes[4] = nodes[org_elem - ->getNode(org_elem->getNodeIDinElement( - face->getNode(0))) + ->getNode( + this->lutHexDiametralNode(getNodeIDinElement( + *org_elem, face->getNode(2)))) ->getID()]; + prism_nodes[5] = nodes[org_elem + ->getNode(getNodeIDinElement( + *org_elem, face->getNode(0))) + ->getID()]; new_elements.push_back(new MeshLib::Prism(prism_nodes)); delete face; return 1; diff --git a/MeshLib/Node.cpp b/MeshLib/Node.cpp index 1795cff0315f252e0008168fa97ed396d716288e..54d11e09de08942c940f44410a2c19bb08be3672 100644 --- a/MeshLib/Node.cpp +++ b/MeshLib/Node.cpp @@ -61,7 +61,7 @@ bool isBaseNode(Node const& node) auto const e = node.getElement(0); auto const n_base_nodes = e->getNumberOfBaseNodes(); - auto const local_index = e->getNodeIDinElement(&node); + auto const local_index = getNodeIDinElement(*e, &node); return local_index < n_base_nodes; } } // namespace MeshLib