From 0424272874845111f62cf73bfa238b65be8996cd Mon Sep 17 00:00:00 2001 From: Thomas Fischer <thomas.fischer@ufz.de> Date: Thu, 5 Aug 2021 09:41:46 +0200 Subject: [PATCH] [MeL] Make getNodeIDinElement a free function. --- MeshLib/Elements/Element.cpp | 26 +++---- MeshLib/Elements/Element.h | 6 +- MeshLib/MeshEditing/MeshRevision.cpp | 104 ++++++++++++++------------- MeshLib/Node.cpp | 2 +- 4 files changed, 71 insertions(+), 67 deletions(-) diff --git a/MeshLib/Elements/Element.cpp b/MeshLib/Elements/Element.cpp index 95490314afb..da7506ef581 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 a9df40b120c..791a7fab9bf 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 f4c73f85bd4..4b1ae1b9b7e 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 1795cff0315..54d11e09de0 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 -- GitLab