From 079a0993b28c639aefce72314bcc794280975be4 Mon Sep 17 00:00:00 2001 From: Karsten Rink <karsten.rink@ufz.de> Date: Tue, 2 Sep 2014 15:21:11 +0200 Subject: [PATCH] removed lots and lots of pointers --- Gui/VtkVis/VtkVisPipeline.cpp | 8 +-- Gui/mainwindow.cpp | 10 ++- MeshLib/MeshQuality/AngleSkewMetric.cpp | 70 +++++++++---------- MeshLib/MeshQuality/AngleSkewMetric.h | 12 ++-- MeshLib/MeshQuality/AreaMetric.cpp | 16 ++--- MeshLib/MeshQuality/AreaMetric.h | 2 +- MeshLib/MeshQuality/EdgeRatioMetric.cpp | 70 +++++++++---------- MeshLib/MeshQuality/EdgeRatioMetric.h | 30 ++++---- MeshLib/MeshQuality/ElementQualityMetric.cpp | 15 ++-- MeshLib/MeshQuality/ElementQualityMetric.h | 6 +- MeshLib/MeshQuality/RadiusEdgeRatioMetric.cpp | 2 +- MeshLib/MeshQuality/RadiusEdgeRatioMetric.h | 3 +- MeshLib/MeshQuality/VolumeMetric.cpp | 12 ++-- MeshLib/MeshQuality/VolumeMetric.h | 2 +- 14 files changed, 133 insertions(+), 125 deletions(-) diff --git a/Gui/VtkVis/VtkVisPipeline.cpp b/Gui/VtkVis/VtkVisPipeline.cpp index dc490fcd69e..aa2ac916868 100644 --- a/Gui/VtkVis/VtkVisPipeline.cpp +++ b/Gui/VtkVis/VtkVisPipeline.cpp @@ -462,13 +462,13 @@ void VtkVisPipeline::checkMeshQuality(VtkMeshSource* source, MeshQualityType t) const MeshLib::Mesh* mesh = source->GetMesh(); MeshLib::ElementQualityMetric* quality_tester (nullptr); if (t == MeshQualityType::EDGERATIO) - quality_tester = new MeshLib::EdgeRatioMetric(mesh); + quality_tester = new MeshLib::EdgeRatioMetric(*mesh); else if (t == MeshQualityType::AREA) - quality_tester = new MeshLib::AreaMetric(mesh); + quality_tester = new MeshLib::AreaMetric(*mesh); else if (t == MeshQualityType::VOLUME) - quality_tester = new MeshLib::VolumeMetric(mesh); + quality_tester = new MeshLib::VolumeMetric(*mesh); else if (t == MeshQualityType::EQUIANGLESKEW) - quality_tester = new MeshLib::AngleSkewMetric(mesh); + quality_tester = new MeshLib::AngleSkewMetric(*mesh); else { ERR("VtkVisPipeline::checkMeshQuality(): Unknown MeshQualityType."); diff --git a/Gui/mainwindow.cpp b/Gui/mainwindow.cpp index 6f93923da37..2a580bd5c8c 100644 --- a/Gui/mainwindow.cpp +++ b/Gui/mainwindow.cpp @@ -13,7 +13,8 @@ */ #include "mainwindow.h" - +#include <algorithm> +#include "MeshQuality\RadiusEdgeRatioMetric.h" // ThirdParty/logog #include "logog/include/logog.hpp" @@ -1298,6 +1299,13 @@ void MainWindow::showDataExplorerSettingsDialog() void MainWindow::FEMTestStart() { + const MeshLib::Mesh* msh = _project.getMesh("Ammer-Homogen100m-Final"); + MeshLib::RadiusEdgeRatioMetric metric(*msh); + metric.calculateQuality(); + std::vector<double> result (metric.getElementQuality()); + auto minmax = std::minmax_element(result.begin(), result.end()); + std::cout << "min: " << *minmax.first << " at pos " << minmax.first-result.begin() + << ", max: " << *minmax.second << " at pos " << minmax.second-result.begin() << std::endl; } void MainWindow::showTrackingSettingsDialog() diff --git a/MeshLib/MeshQuality/AngleSkewMetric.cpp b/MeshLib/MeshQuality/AngleSkewMetric.cpp index fb6dc802bb8..2c14f59bcc5 100644 --- a/MeshLib/MeshQuality/AngleSkewMetric.cpp +++ b/MeshLib/MeshQuality/AngleSkewMetric.cpp @@ -29,7 +29,7 @@ namespace MeshLib { -AngleSkewMetric::AngleSkewMetric(Mesh const* const mesh) : +AngleSkewMetric::AngleSkewMetric(Mesh const& mesh) : ElementQualityMetric(mesh), M_PI_THIRD (M_PI / 3.0), TWICE_M_PI (2 * M_PI) {} @@ -38,13 +38,13 @@ AngleSkewMetric::~AngleSkewMetric() void AngleSkewMetric::calculateQuality () { - const std::vector<MeshLib::Element*>& elements(_mesh->getElements()); - const size_t nElements (_mesh->getNElements()); + const std::vector<MeshLib::Element*>& elements(_mesh.getElements()); + const size_t nElements (_mesh.getNElements()); for (size_t k(0); k < nElements; k++) { - const Element* elem (elements[k]); - switch (elem->getGeomType()) + Element const& elem (*elements[k]); + switch (elem.getGeomType()) { case MeshElemType::LINE: _element_quality_metric[k] = -1.0; @@ -70,11 +70,11 @@ void AngleSkewMetric::calculateQuality () } } -double AngleSkewMetric::checkTriangle (Element const* const elem) const +double AngleSkewMetric::checkTriangle (Element const& elem) const { - double const* const node0 (elem->getNode(0)->getCoords()); - double const* const node1 (elem->getNode(1)->getCoords()); - double const* const node2 (elem->getNode(2)->getCoords()); + double const* const node0 (elem.getNode(0)->getCoords()); + double const* const node1 (elem.getNode(1)->getCoords()); + double const* const node2 (elem.getNode(2)->getCoords()); double min_angle (M_PI_2), max_angle (0.0); getMinMaxAngleFromTriangle (node0, node1, node2, min_angle, max_angle); @@ -84,12 +84,12 @@ double AngleSkewMetric::checkTriangle (Element const* const elem) const (M_PI_THIRD - min_angle) / (M_PI_THIRD)); } -double AngleSkewMetric::checkQuad (Element const* const elem) const +double AngleSkewMetric::checkQuad (Element const& elem) const { - double const* const node0 (elem->getNode(0)->getCoords()); - double const* const node1 (elem->getNode(1)->getCoords()); - double const* const node2 (elem->getNode(2)->getCoords()); - double const* const node3 (elem->getNode(3)->getCoords()); + double const* const node0 (elem.getNode(0)->getCoords()); + double const* const node1 (elem.getNode(1)->getCoords()); + double const* const node2 (elem.getNode(2)->getCoords()); + double const* const node3 (elem.getNode(3)->getCoords()); double min_angle (TWICE_M_PI); double max_angle (0.0); @@ -100,12 +100,12 @@ double AngleSkewMetric::checkQuad (Element const* const elem) const std::max((max_angle - M_PI_2) / (M_PI - M_PI_2), (M_PI_2 - min_angle) / (M_PI_2)); } -double AngleSkewMetric::checkTetrahedron (Element const* const elem) const +double AngleSkewMetric::checkTetrahedron (Element const& elem) const { - double const* const node0 (elem->getNode(0)->getCoords()); - double const* const node1 (elem->getNode(1)->getCoords()); - double const* const node2 (elem->getNode(2)->getCoords()); - double const* const node3 (elem->getNode(3)->getCoords()); + double const* const node0 (elem.getNode(0)->getCoords()); + double const* const node1 (elem.getNode(1)->getCoords()); + double const* const node2 (elem.getNode(2)->getCoords()); + double const* const node3 (elem.getNode(3)->getCoords()); double min_angle (M_PI_2); double max_angle (0.0); @@ -123,16 +123,16 @@ double AngleSkewMetric::checkTetrahedron (Element const* const elem) const (M_PI_THIRD - min_angle) / (M_PI_THIRD)); } -double AngleSkewMetric::checkHexahedron (Element const* const elem) const +double AngleSkewMetric::checkHexahedron (Element const& elem) const { - double const* const node0 (elem->getNode(0)->getCoords()); - double const* const node1 (elem->getNode(1)->getCoords()); - double const* const node2 (elem->getNode(2)->getCoords()); - double const* const node3 (elem->getNode(3)->getCoords()); - double const* const node4 (elem->getNode(4)->getCoords()); - double const* const node5 (elem->getNode(5)->getCoords()); - double const* const node6 (elem->getNode(6)->getCoords()); - double const* const node7 (elem->getNode(7)->getCoords()); + double const* const node0 (elem.getNode(0)->getCoords()); + double const* const node1 (elem.getNode(1)->getCoords()); + double const* const node2 (elem.getNode(2)->getCoords()); + double const* const node3 (elem.getNode(3)->getCoords()); + double const* const node4 (elem.getNode(4)->getCoords()); + double const* const node5 (elem.getNode(5)->getCoords()); + double const* const node6 (elem.getNode(6)->getCoords()); + double const* const node7 (elem.getNode(7)->getCoords()); double min_angle (2 * M_PI); double max_angle (0.0); @@ -154,14 +154,14 @@ double AngleSkewMetric::checkHexahedron (Element const* const elem) const std::max((max_angle - M_PI_2) / (M_PI - M_PI_2), (M_PI_2 - min_angle) / (M_PI_2)); } -double AngleSkewMetric::checkPrism (Element const* const elem) const +double AngleSkewMetric::checkPrism (Element const& elem) const { - double const* const node0 (elem->getNode(0)->getCoords()); - double const* const node1 (elem->getNode(1)->getCoords()); - double const* const node2 (elem->getNode(2)->getCoords()); - double const* const node3 (elem->getNode(3)->getCoords()); - double const* const node4 (elem->getNode(4)->getCoords()); - double const* const node5 (elem->getNode(5)->getCoords()); + double const* const node0 (elem.getNode(0)->getCoords()); + double const* const node1 (elem.getNode(1)->getCoords()); + double const* const node2 (elem.getNode(2)->getCoords()); + double const* const node3 (elem.getNode(3)->getCoords()); + double const* const node4 (elem.getNode(4)->getCoords()); + double const* const node5 (elem.getNode(5)->getCoords()); double min_angle_tri (2 * M_PI); double max_angle_tri (0.0); diff --git a/MeshLib/MeshQuality/AngleSkewMetric.h b/MeshLib/MeshQuality/AngleSkewMetric.h index bdf023b54bb..5cdaddee899 100644 --- a/MeshLib/MeshQuality/AngleSkewMetric.h +++ b/MeshLib/MeshQuality/AngleSkewMetric.h @@ -26,17 +26,17 @@ namespace MeshLib class AngleSkewMetric : public ElementQualityMetric { public: - AngleSkewMetric(Mesh const* const mesh); + AngleSkewMetric(Mesh const& mesh); virtual ~AngleSkewMetric(); virtual void calculateQuality (); private: - double checkTriangle(Element const* const elem) const; - double checkQuad(Element const* const elem) const; - double checkTetrahedron(Element const* const elem) const; - double checkHexahedron(Element const* const elem) const; - double checkPrism (Element const* const elem) const; + double checkTriangle(Element const& elem) const; + double checkQuad(Element const& elem) const; + double checkTetrahedron(Element const& elem) const; + double checkHexahedron(Element const& elem) const; + double checkPrism (Element const& elem) const; void getMinMaxAngleFromQuad(double const* const n0, double const* const n1, double const* const n2, double const* const n3, double &min_angle, diff --git a/MeshLib/MeshQuality/AreaMetric.cpp b/MeshLib/MeshQuality/AreaMetric.cpp index 6dc6fb6b6b5..f1094d3f274 100644 --- a/MeshLib/MeshQuality/AreaMetric.cpp +++ b/MeshLib/MeshQuality/AreaMetric.cpp @@ -18,36 +18,36 @@ namespace MeshLib { -AreaMetric::AreaMetric(Mesh const* const mesh) +AreaMetric::AreaMetric(Mesh const& mesh) : ElementQualityMetric(mesh) {} void AreaMetric::calculateQuality() { - const std::vector<MeshLib::Element*> &elements(_mesh->getElements()); + const std::vector<MeshLib::Element*> &elements(_mesh.getElements()); const size_t nElems(elements.size()); for (size_t k(0); k < nElems; k++) { double area(std::numeric_limits<double>::max()); - const Element* elem (elements[k]); + Element const& elem (*elements[k]); - if (elem->getDimension() == 1) + if (elem.getDimension() == 1) { _element_quality_metric[k] = -1.0; continue; } - else if (elem->getDimension() == 2) + else if (elem.getDimension() == 2) { - area = elem->getContent(); + area = elem.getContent(); if (area < sqrt(fabs(std::numeric_limits<double>::epsilon()))) errorMsg(elem, k); } else { - size_t nFaces(elem->getNFaces()); + size_t nFaces(elem.getNFaces()); for (size_t i = 0; i < nFaces; i++) { - const double sub_area (elem->getFace(i)->getContent()); + const double sub_area (elem.getFace(i)->getContent()); if (sub_area < sqrt(fabs(std::numeric_limits<double>::epsilon()))) errorMsg(elem, k); diff --git a/MeshLib/MeshQuality/AreaMetric.h b/MeshLib/MeshQuality/AreaMetric.h index 334b318551e..5e80686672c 100644 --- a/MeshLib/MeshQuality/AreaMetric.h +++ b/MeshLib/MeshQuality/AreaMetric.h @@ -26,7 +26,7 @@ namespace MeshLib class AreaMetric : public ElementQualityMetric { public: - AreaMetric(Mesh const* const mesh); + AreaMetric(Mesh const& mesh); virtual ~AreaMetric() {} virtual void calculateQuality (); diff --git a/MeshLib/MeshQuality/EdgeRatioMetric.cpp b/MeshLib/MeshQuality/EdgeRatioMetric.cpp index 7c2cb981430..5471020dc97 100644 --- a/MeshLib/MeshQuality/EdgeRatioMetric.cpp +++ b/MeshLib/MeshQuality/EdgeRatioMetric.cpp @@ -18,7 +18,7 @@ namespace MeshLib { -EdgeRatioMetric::EdgeRatioMetric(Mesh const* const mesh) : +EdgeRatioMetric::EdgeRatioMetric(Mesh const& mesh) : ElementQualityMetric(mesh) { } @@ -26,63 +26,63 @@ EdgeRatioMetric::EdgeRatioMetric(Mesh const* const mesh) : void EdgeRatioMetric::calculateQuality() { // get all elements of mesh - const std::vector<MeshLib::Element*>& elements(_mesh->getElements()); - const size_t nElements (_mesh->getNElements()); + const std::vector<MeshLib::Element*>& elements(_mesh.getElements()); + const size_t nElements (_mesh.getNElements()); for (size_t k(0); k < nElements; k++) { - const Element* elem (elements[k]); - switch (elem->getGeomType()) + Element const& elem (*elements[k]); + switch (elem.getGeomType()) { case MeshElemType::LINE: _element_quality_metric[k] = 1.0; break; case MeshElemType::TRIANGLE: { - _element_quality_metric[k] = checkTriangle(elem->getNode(0), elem->getNode(1), elem->getNode(2)); + _element_quality_metric[k] = checkTriangle(*elem.getNode(0), *elem.getNode(1), *elem.getNode(2)); break; } case MeshElemType::QUAD: { - _element_quality_metric[k] = checkQuad(elem->getNode(0), elem->getNode(1), elem->getNode(2), elem->getNode(3)); + _element_quality_metric[k] = checkQuad(*elem.getNode(0), *elem.getNode(1), *elem.getNode(2), *elem.getNode(3)); break; } case MeshElemType::TETRAHEDRON: { - _element_quality_metric[k] = checkTetrahedron(elem->getNode(0), elem->getNode(1), elem->getNode(2), elem->getNode(3)); + _element_quality_metric[k] = checkTetrahedron(*elem.getNode(0), *elem.getNode(1), *elem.getNode(2), *elem.getNode(3)); break; } case MeshElemType::PRISM: { std::vector<const GeoLib::Point*> pnts; for (size_t j(0); j < 6; j++) - pnts.push_back(elem->getNode(j)); + pnts.push_back(elem.getNode(j)); _element_quality_metric[k] = checkPrism(pnts); break; } case MeshElemType::PYRAMID: { std::vector<const GeoLib::Point*> pnts; for (size_t j(0); j < 5; j++) - pnts.push_back(elem->getNode(j)); + pnts.push_back(elem.getNode(j)); _element_quality_metric[k] = checkPyramid(pnts); break; } case MeshElemType::HEXAHEDRON: { std::vector<const GeoLib::Point*> pnts; for (size_t j(0); j < 8; j++) - pnts.push_back(elem->getNode(j)); + pnts.push_back(elem.getNode(j)); _element_quality_metric[k] = checkHexahedron(pnts); break; } default: ERR ("MeshQualityShortestLongestRatio::check () check for element type %s not implemented.", - MeshElemType2String(elem->getGeomType()).c_str()); + MeshElemType2String(elem.getGeomType()).c_str()); } } } -double EdgeRatioMetric::checkTriangle (GeoLib::Point const* const a, - GeoLib::Point const* const b, - GeoLib::Point const* const c) const +double EdgeRatioMetric::checkTriangle (GeoLib::Point const& a, + GeoLib::Point const& b, + GeoLib::Point const& c) const { - double len0 (sqrt(MathLib::sqrDist (*b,*a))); - double len1 (sqrt(MathLib::sqrDist (*b,*c))); - double len2 (sqrt(MathLib::sqrDist (*a,*c))); + double len0 (sqrt(MathLib::sqrDist (b,a))); + double len1 (sqrt(MathLib::sqrDist (b,c))); + double len2 (sqrt(MathLib::sqrDist (a,c))); if (len0 < len1 && len0 < len2) { @@ -110,15 +110,15 @@ double EdgeRatioMetric::checkTriangle (GeoLib::Point const* const a, } } -double EdgeRatioMetric::checkQuad (GeoLib::Point const* const a, - GeoLib::Point const* const b, - GeoLib::Point const* const c, - GeoLib::Point const* const d) const +double EdgeRatioMetric::checkQuad (GeoLib::Point const& a, + GeoLib::Point const& b, + GeoLib::Point const& c, + GeoLib::Point const& d) const { - double sqr_lengths[4] = {MathLib::sqrDist (*b,*a), - MathLib::sqrDist (*c,*b), - MathLib::sqrDist (*d,*c), - MathLib::sqrDist (*a,*d)}; + double sqr_lengths[4] = {MathLib::sqrDist (b,a), + MathLib::sqrDist (c,b), + MathLib::sqrDist (d,c), + MathLib::sqrDist (a,d)}; // sort lengths - since this is a very small array we use bubble sort for (size_t i(0); i < 4; i++) @@ -129,14 +129,14 @@ double EdgeRatioMetric::checkQuad (GeoLib::Point const* const a, return sqrt(sqr_lengths[0]) / sqrt(sqr_lengths[3]); } -double EdgeRatioMetric::checkTetrahedron (GeoLib::Point const* const a, - GeoLib::Point const* const b, - GeoLib::Point const* const c, - GeoLib::Point const* const d) const +double EdgeRatioMetric::checkTetrahedron (GeoLib::Point const& a, + GeoLib::Point const& b, + GeoLib::Point const& c, + GeoLib::Point const& d) const { - double sqr_lengths[6] = {MathLib::sqrDist (*b,*a), MathLib::sqrDist (*c,*b), - MathLib::sqrDist (*c,*a), MathLib::sqrDist (*a,*d), - MathLib::sqrDist (*b,*d), MathLib::sqrDist (*c,*d)}; + double sqr_lengths[6] = {MathLib::sqrDist (b,a), MathLib::sqrDist (c,b), + MathLib::sqrDist (c,a), MathLib::sqrDist (a,d), + MathLib::sqrDist (b,d), MathLib::sqrDist (c,d)}; // sort lengths - since this is a very small array we use bubble sort for (size_t i(0); i < 6; i++) @@ -147,7 +147,7 @@ double EdgeRatioMetric::checkTetrahedron (GeoLib::Point const* const a, return sqrt(sqr_lengths[0]) / sqrt(sqr_lengths[5]); } -double EdgeRatioMetric::checkPrism (std::vector<const GeoLib::Point*> const & pnts) const +double EdgeRatioMetric::checkPrism (std::vector<const GeoLib::Point*> const& pnts) const { double sqr_lengths[9] = {MathLib::sqrDist (*pnts[0],*pnts[1]), MathLib::sqrDist (*pnts[1],*pnts[2]), @@ -168,7 +168,7 @@ double EdgeRatioMetric::checkPrism (std::vector<const GeoLib::Point*> const & pn return sqrt(sqr_lengths[0]) / sqrt(sqr_lengths[8]); } -double EdgeRatioMetric::checkPyramid (std::vector<const GeoLib::Point*> const & pnts) const +double EdgeRatioMetric::checkPyramid (std::vector<const GeoLib::Point*> const &pnts) const { double sqr_lengths[8] = {MathLib::sqrDist (*pnts[0],*pnts[1]), MathLib::sqrDist (*pnts[1],*pnts[2]), diff --git a/MeshLib/MeshQuality/EdgeRatioMetric.h b/MeshLib/MeshQuality/EdgeRatioMetric.h index 45b2148820c..b6c321da488 100644 --- a/MeshLib/MeshQuality/EdgeRatioMetric.h +++ b/MeshLib/MeshQuality/EdgeRatioMetric.h @@ -27,26 +27,26 @@ namespace MeshLib class EdgeRatioMetric : public ElementQualityMetric { public: - EdgeRatioMetric(Mesh const* const mesh); + EdgeRatioMetric(Mesh const& mesh); virtual ~EdgeRatioMetric () {} virtual void calculateQuality (); private: - double checkTriangle (GeoLib::Point const* const a, - GeoLib::Point const* const b, - GeoLib::Point const* const c) const; - double checkQuad (GeoLib::Point const* const a, - GeoLib::Point const* const b, - GeoLib::Point const* const c, - GeoLib::Point const* const d) const; - double checkTetrahedron (GeoLib::Point const* const a, - GeoLib::Point const* const b, - GeoLib::Point const* const c, - GeoLib::Point const* const d) const; - double checkPrism (std::vector<const GeoLib::Point*> const & pnts) const; - double checkPyramid (std::vector<const GeoLib::Point*> const & pnts) const; - double checkHexahedron (std::vector<const GeoLib::Point*> const & pnts) const; + double checkTriangle (GeoLib::Point const& a, + GeoLib::Point const& b, + GeoLib::Point const& c) const; + double checkQuad (GeoLib::Point const& a, + GeoLib::Point const& b, + GeoLib::Point const& c, + GeoLib::Point const& d) const; + double checkTetrahedron (GeoLib::Point const& a, + GeoLib::Point const& b, + GeoLib::Point const& c, + GeoLib::Point const& d) const; + double checkPrism (std::vector<const GeoLib::Point*> const& pnts) const; + double checkPyramid (std::vector<const GeoLib::Point*> const& pnts) const; + double checkHexahedron (std::vector<const GeoLib::Point*> const& pnts) const; }; } diff --git a/MeshLib/MeshQuality/ElementQualityMetric.cpp b/MeshLib/MeshQuality/ElementQualityMetric.cpp index 53842242af6..119215908bb 100644 --- a/MeshLib/MeshQuality/ElementQualityMetric.cpp +++ b/MeshLib/MeshQuality/ElementQualityMetric.cpp @@ -20,30 +20,29 @@ namespace MeshLib { -ElementQualityMetric::ElementQualityMetric(Mesh const* const mesh) : +ElementQualityMetric::ElementQualityMetric(Mesh const& mesh) : _min (std::numeric_limits<double>::max()), _max (0), _mesh (mesh) { - if (_mesh) - _element_quality_metric.resize (_mesh->getNElements(), -1.0); + _element_quality_metric.resize (_mesh.getNElements(), -1.0); } BaseLib::Histogram<double> ElementQualityMetric::getHistogram (size_t nclasses) const { if (nclasses == 0) { // simple suggestion: number of classes with Sturges criterion - nclasses = static_cast<size_t>(1 + 3.3 * log (static_cast<float>((_mesh->getNElements())))); + nclasses = static_cast<size_t>(1 + 3.3 * log (static_cast<float>((_mesh.getNElements())))); } return BaseLib::Histogram<double>(getElementQuality(), nclasses, true); } -void ElementQualityMetric::errorMsg (const Element* elem, size_t idx) const +void ElementQualityMetric::errorMsg (Element const& elem, size_t idx) const { ERR ("Error in MeshQualityChecker::check() - Calculated value of element is below double precision minimum."); - ERR ("Points of %s-Element %d: ", MeshElemType2String(elem->getGeomType()).c_str(), idx); - for (size_t i(0); i < elem->getNNodes(); i++) + ERR ("Points of %s-Element %d: ", MeshElemType2String(elem.getGeomType()).c_str(), idx); + for (size_t i(0); i < elem.getNNodes(); i++) { - const double* coords = elem->getNode(i)->getCoords(); + const double* coords = elem.getNode(i)->getCoords(); ERR ("\t Node %d: (%f, %f, %f)", i, coords[0], coords[1], coords[2]); } } diff --git a/MeshLib/MeshQuality/ElementQualityMetric.h b/MeshLib/MeshQuality/ElementQualityMetric.h index 3629e45abdc..584eb223a68 100644 --- a/MeshLib/MeshQuality/ElementQualityMetric.h +++ b/MeshLib/MeshQuality/ElementQualityMetric.h @@ -35,7 +35,7 @@ namespace MeshLib class ElementQualityMetric { public: - ElementQualityMetric(Mesh const* const mesh); + ElementQualityMetric(Mesh const& mesh); virtual ~ElementQualityMetric () {} @@ -51,11 +51,11 @@ public: virtual BaseLib::Histogram<double> getHistogram (std::size_t nclasses = 0) const; protected: - void errorMsg (const Element* elem, std::size_t idx) const; + void errorMsg (Element const& elem, std::size_t idx) const; double _min; double _max; - Mesh const* const _mesh; + Mesh const& _mesh; std::vector<double> _element_quality_metric; }; } diff --git a/MeshLib/MeshQuality/RadiusEdgeRatioMetric.cpp b/MeshLib/MeshQuality/RadiusEdgeRatioMetric.cpp index c0d1d537dc7..c530d4152ec 100644 --- a/MeshLib/MeshQuality/RadiusEdgeRatioMetric.cpp +++ b/MeshLib/MeshQuality/RadiusEdgeRatioMetric.cpp @@ -20,7 +20,7 @@ namespace MeshLib { -RadiusEdgeRatioMetric::RadiusEdgeRatioMetric(Mesh const*const mesh) +RadiusEdgeRatioMetric::RadiusEdgeRatioMetric(Mesh const& mesh) : ElementQualityMetric(mesh) {} diff --git a/MeshLib/MeshQuality/RadiusEdgeRatioMetric.h b/MeshLib/MeshQuality/RadiusEdgeRatioMetric.h index 9ca6738a6a4..90c79aa7ca4 100644 --- a/MeshLib/MeshQuality/RadiusEdgeRatioMetric.h +++ b/MeshLib/MeshQuality/RadiusEdgeRatioMetric.h @@ -21,7 +21,8 @@ namespace MeshLib { /** - * Calculates the quality of mesh elements based on the EquiAngleSkew measure + * Calculates the quality of mesh elements based on the ratio between + * radius of the smallest enclosing sphere and the shortest element edge */ class RadiusEdgeRatioMetric : public ElementQualityMetric { diff --git a/MeshLib/MeshQuality/VolumeMetric.cpp b/MeshLib/MeshQuality/VolumeMetric.cpp index d090fa201ec..07ae817eb0f 100644 --- a/MeshLib/MeshQuality/VolumeMetric.cpp +++ b/MeshLib/MeshQuality/VolumeMetric.cpp @@ -20,28 +20,28 @@ namespace MeshLib { -VolumeMetric::VolumeMetric(Mesh const* const mesh) : +VolumeMetric::VolumeMetric(Mesh const& mesh) : ElementQualityMetric(mesh) { } void VolumeMetric::calculateQuality() { // get all elements of mesh - const std::vector<MeshLib::Element*>& elements(_mesh->getElements()); + const std::vector<MeshLib::Element*>& elements(_mesh.getElements()); size_t error_count(0); - size_t nElements (_mesh->getNElements()); + size_t nElements (_mesh.getNElements()); for (size_t k(0); k < nElements; k++) { - const Element* elem (elements[k]); - if (elem->getDimension()<3) + Element const& elem (*elements[k]); + if (elem.getDimension()<3) { _element_quality_metric[k] = 0.0; continue; } - double volume (elem->getContent()); + double volume (elem.getContent()); if (volume > _max) _max = volume; if (volume < sqrt(fabs(std::numeric_limits<double>::epsilon()))) { diff --git a/MeshLib/MeshQuality/VolumeMetric.h b/MeshLib/MeshQuality/VolumeMetric.h index f9a9bb28259..0c0a75b9a1c 100644 --- a/MeshLib/MeshQuality/VolumeMetric.h +++ b/MeshLib/MeshQuality/VolumeMetric.h @@ -26,7 +26,7 @@ namespace MeshLib class VolumeMetric : public ElementQualityMetric { public: - VolumeMetric(Mesh const* const mesh); + VolumeMetric(Mesh const& mesh); virtual ~VolumeMetric() {} virtual void calculateQuality (); -- GitLab