From cb44917693d397805df87a77bfe95a2cc48a0c21 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Wed, 2 Oct 2019 09:22:37 +0200 Subject: [PATCH 001/120] Update Pybind11 to 2.4.2 --- external_dependencies/pybind11 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external_dependencies/pybind11 b/external_dependencies/pybind11 index 4ffa6cd2..7ec2ddfc 160000 --- a/external_dependencies/pybind11 +++ b/external_dependencies/pybind11 @@ -1 +1 @@ -Subproject commit 4ffa6cd2d4a277b1cc8bc10d5c73cc0ee8edfaeb +Subproject commit 7ec2ddfc95f65d1e986d359466a6c254aa514ef3 From f0eae10a24c38d79668dffc9a687af31cc971637 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joachim=20Sch=C3=B6berl?= Date: Wed, 2 Oct 2019 22:06:44 +0200 Subject: [PATCH 002/120] throw exception on 1D mesh bisection --- libsrc/meshing/bisect.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libsrc/meshing/bisect.cpp b/libsrc/meshing/bisect.cpp index 72bbd56a..9696fd81 100644 --- a/libsrc/meshing/bisect.cpp +++ b/libsrc/meshing/bisect.cpp @@ -1958,6 +1958,8 @@ namespace netgen const NgArray< NgArray* > & idmaps, const string & refinfofile) { + if (mesh.GetDimension() < 2) + throw Exception ("Mesh bisection is available in 2D and 3D"); // mtets.SetName ("bisection, tets"); // mprisms.SetName ("bisection, prisms"); // mtris.SetName ("bisection, trigs"); From 0dd913fc2012ca88d5f9bd5d47f2d975b86f016b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joachim=20Sch=C3=B6berl?= Date: Wed, 2 Oct 2019 23:39:25 +0200 Subject: [PATCH 003/120] parallel CheckOverlapping --- libsrc/meshing/meshclass.cpp | 195 +++++++++++++++-------------------- libsrc/meshing/meshtype.hpp | 3 + 2 files changed, 87 insertions(+), 111 deletions(-) diff --git a/libsrc/meshing/meshclass.cpp b/libsrc/meshing/meshclass.cpp index 24a894f0..c9343194 100644 --- a/libsrc/meshing/meshclass.cpp +++ b/libsrc/meshing/meshclass.cpp @@ -3688,131 +3688,104 @@ namespace netgen { static Timer t("Mesh::CheckOverlappingBoundary"); RegionTimer reg(t); - int i, j, k; - Point3d pmin, pmax; GetBox (pmin, pmax); - BoxTree<3> setree(pmin, pmax); - NgArray inters; + BoxTree<3, SurfaceElementIndex> setree(pmin, pmax); + // NgArray inters; bool overlap = 0; bool incons_layers = 0; - /* - for (i = 1; i <= GetNSE(); i++) - SurfaceElement(i).badel = 0; - */ + for (Element2d & el : SurfaceElements()) el.badel = false; - for (i = 1; i <= GetNSE(); i++) + for (SurfaceElementIndex sei : Range(SurfaceElements())) { - const Element2d & tri = SurfaceElement(i); + const Element2d & tri = SurfaceElement(sei); - Point3d tpmin (Point(tri[0])); - Point3d tpmax (tpmin); + Box<3> box(Box<3>::EMPTY_BOX); + for (PointIndex pi : tri.PNums()) + box.Add (Point(pi)); - for (k = 1; k < tri.GetNP(); k++) - { - tpmin.SetToMin (Point (tri[k])); - tpmax.SetToMax (Point (tri[k])); - } - Vec3d diag(tpmin, tpmax); - - tpmax = tpmax + 0.1 * diag; - tpmin = tpmin - 0.1 * diag; - - setree.Insert (tpmin, tpmax, i); + box.Increase(1e-3*box.Diam()); + setree.Insert (box, sei); } - for (i = 1; i <= GetNSE(); i++) - { - const Element2d & tri = SurfaceElement(i); - - Point3d tpmin (Point(tri[0])); - Point3d tpmax (tpmin); - - for (k = 1; k < tri.GetNP(); k++) - { - tpmin.SetToMin (Point (tri[k])); - tpmax.SetToMax (Point (tri[k])); - } - - setree.GetIntersecting (tpmin, tpmax, inters); - - for (j = 1; j <= inters.Size(); j++) - { - const Element2d & tri2 = SurfaceElement(inters.Get(j)); - - if ( (*this)[tri[0]].GetLayer() != (*this)[tri2[0]].GetLayer()) - continue; - - if ( (*this)[tri[0]].GetLayer() != (*this)[tri[1]].GetLayer() || - (*this)[tri[0]].GetLayer() != (*this)[tri[2]].GetLayer()) - { - incons_layers = 1; - cout << "inconsistent layers in triangle" << endl; - } - - - const netgen::Point<3> *trip1[3], *trip2[3]; - for (k = 1; k <= 3; k++) - { - trip1[k-1] = &Point (tri.PNum(k)); - trip2[k-1] = &Point (tri2.PNum(k)); - } - - if (IntersectTriangleTriangle (&trip1[0], &trip2[0])) - { - overlap = 1; - PrintWarning ("Intersecting elements " - ,i, " and ", inters.Get(j)); - - (*testout) << "Intersecting: " << endl; - (*testout) << "openelement " << i << " with open element " << inters.Get(j) << endl; - - cout << "el1 = " << tri << endl; - cout << "el2 = " << tri2 << endl; - cout << "layer1 = " << (*this)[tri[0]].GetLayer() << endl; - cout << "layer2 = " << (*this)[tri2[0]].GetLayer() << endl; - - - for (k = 1; k <= 3; k++) - (*testout) << tri.PNum(k) << " "; - (*testout) << endl; - for (k = 1; k <= 3; k++) - (*testout) << tri2.PNum(k) << " "; - (*testout) << endl; - - for (k = 0; k <= 2; k++) - (*testout) << *trip1[k] << " "; - (*testout) << endl; - for (k = 0; k <= 2; k++) - (*testout) << *trip2[k] << " "; - (*testout) << endl; - - (*testout) << "Face1 = " << GetFaceDescriptor(tri.GetIndex()) << endl; - (*testout) << "Face1 = " << GetFaceDescriptor(tri2.GetIndex()) << endl; - - /* - INDEX_3 i3(tri.PNum(1), tri.PNum(2), tri.PNum(3)); - i3.Sort(); - for (k = 1; k <= GetNSE(); k++) - { - const Element2d & el2 = SurfaceElement(k); - INDEX_3 i3b(el2.PNum(1), el2.PNum(2), el2.PNum(3)); - i3b.Sort(); - if (i3 == i3b) - { - SurfaceElement(k).badel = 1; - } - } - */ - SurfaceElement(i).badel = 1; - SurfaceElement(inters.Get(j)).badel = 1; - } - } - } + std::mutex m; + // for (SurfaceElementIndex sei : Range(SurfaceElements())) + ParallelForRange + (Range(SurfaceElements()), [&] (auto myrange) + { + for (SurfaceElementIndex sei : myrange) + { + const Element2d & tri = SurfaceElement(sei); + + Box<3> box(Box<3>::EMPTY_BOX); + for (PointIndex pi : tri.PNums()) + box.Add (Point(pi)); + + setree.GetFirstIntersecting + (box.PMin(), box.PMax(), + [&] (SurfaceElementIndex sej) + { + const Element2d & tri2 = SurfaceElement(sej); + + if ( (*this)[tri[0]].GetLayer() != (*this)[tri2[0]].GetLayer()) + return false; + + if ( (*this)[tri[0]].GetLayer() != (*this)[tri[1]].GetLayer() || + (*this)[tri[0]].GetLayer() != (*this)[tri[2]].GetLayer()) + { + incons_layers = 1; + cout << "inconsistent layers in triangle" << endl; + } + + const netgen::Point<3> *trip1[3], *trip2[3]; + for (int k = 0; k < 3; k++) + { + trip1[k] = &Point (tri[k]); + trip2[k] = &Point (tri2[k]); + } + + if (IntersectTriangleTriangle (&trip1[0], &trip2[0])) + { + overlap = 1; + lock_guard guard(m); + PrintWarning ("Intersecting elements " + ,int(sei), " and ", int(sej)); + + (*testout) << "Intersecting: " << endl; + (*testout) << "openelement " << sei << " with open element " << sej << endl; + + cout << "el1 = " << tri << endl; + cout << "el2 = " << tri2 << endl; + cout << "layer1 = " << (*this)[tri[0]].GetLayer() << endl; + cout << "layer2 = " << (*this)[tri2[0]].GetLayer() << endl; + + for (int k = 1; k <= 3; k++) + (*testout) << tri.PNum(k) << " "; + (*testout) << endl; + for (int k = 1; k <= 3; k++) + (*testout) << tri2.PNum(k) << " "; + (*testout) << endl; + + for (int k = 0; k <= 2; k++) + (*testout) << *trip1[k] << " "; + (*testout) << endl; + for (int k = 0; k <= 2; k++) + (*testout) << *trip2[k] << " "; + (*testout) << endl; + (*testout) << "Face1 = " << GetFaceDescriptor(tri.GetIndex()) << endl; + (*testout) << "Face1 = " << GetFaceDescriptor(tri2.GetIndex()) << endl; + + SurfaceElement(sei).badel = 1; + SurfaceElement(sej).badel = 1; + } + return false; + }); + } + }); // bug 'fix' if (incons_layers) overlap = 0; diff --git a/libsrc/meshing/meshtype.hpp b/libsrc/meshing/meshtype.hpp index ba452849..66687a6d 100644 --- a/libsrc/meshing/meshtype.hpp +++ b/libsrc/meshing/meshtype.hpp @@ -270,6 +270,9 @@ namespace netgen SurfaceElementIndex & operator+= (int inc) { i+=inc; return *this; } void DoArchive (Archive & ar) { ar & i; } }; + + inline void SetInvalid (SurfaceElementIndex & id) { id = -1; } + inline bool IsInvalid (SurfaceElementIndex & id) { return id == -1; } inline istream & operator>> (istream & ist, SurfaceElementIndex & pi) { From 0d9bb4bd976656d4e5f4e80763787523a2741448 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joachim=20Sch=C3=B6berl?= Date: Thu, 3 Oct 2019 20:24:21 +0200 Subject: [PATCH 004/120] parallel table build --- libsrc/meshing/meshclass.cpp | 49 ++++++++++++++++++++++++++++++------ 1 file changed, 42 insertions(+), 7 deletions(-) diff --git a/libsrc/meshing/meshclass.cpp b/libsrc/meshing/meshclass.cpp index c9343194..f3fa57a4 100644 --- a/libsrc/meshing/meshclass.cpp +++ b/libsrc/meshing/meshclass.cpp @@ -1661,7 +1661,9 @@ namespace netgen void Mesh :: CalcSurfacesOfNode () { - static Timer t("Mesh::CalcSurfacesOfNode"); RegionTimer reg (t); + static Timer t("Mesh::CalcSurfacesOfNode"); RegionTimer reg (t); + static Timer tn2se("Mesh::CalcSurfacesOfNode - surf on node"); + static Timer tht("Mesh::CalcSurfacesOfNode - surfelementht"); // surfacesonnode.SetSize (GetNP()); TABLE surfacesonnode(GetNP()); @@ -1683,6 +1685,7 @@ namespace netgen surfelementht = make_unique> (3*GetNSE() + 1); segmentht = make_unique> (3*GetNSeg() + 1); + tn2se.Start(); if (dimension == 3) /* for (SurfaceElementIndex sei = 0; sei < GetNSE(); sei++) @@ -1734,7 +1737,9 @@ namespace netgen surfelementht -> AllocateElements(); */ - + tn2se.Stop(); + + tht.Start(); if (dimension==3) for (SurfaceElementIndex sei = 0; sei < GetNSE(); sei++) { @@ -1748,7 +1753,8 @@ namespace netgen i3.Sort(); surfelementht -> Set (i3, sei); // war das wichtig ??? sel.GetIndex()); } - + tht.Stop(); + // int np = GetNP(); if (dimension == 3) @@ -1877,11 +1883,39 @@ namespace netgen int np = GetNP(); int ne = GetNE(); int nse = GetNSE(); - - NgArray numonpoint(np); - - numonpoint = 0; + t_table.Start(); + + TableCreator creator(np); + + for ( ; !creator.Done(); creator++) + // for (ElementIndex ei : Range(VolumeElements())) + ParallelFor + (Range(VolumeElements()), [&] (ElementIndex ei) + { + const Element & el = (*this)[ei]; + if (dom == 0 || dom == el.GetIndex()) + { + if (el.GetNP() == 4) + { + INDEX_4 i4(el[0], el[1], el[2], el[3]); + i4.Sort(); + creator.Add (PointIndex(i4.I1()), ei); + creator.Add (PointIndex(i4.I2()), ei); + } + else + { + for (PointIndex pi : el.PNums()) + creator.Add(pi, ei); + } + } + }); + + auto elsonpoint = creator.MoveTable(); + + NgArray numonpoint(np); + /* + numonpoint = 0; for (ElementIndex ei = 0; ei < ne; ei++) { const Element & el = (*this)[ei]; @@ -1918,6 +1952,7 @@ namespace netgen elsonpoint.Add (el[j], ei); } } + */ t_table.Stop(); From 04de18d0b497c6f71619f63aea78efc4d1785cbc Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Fri, 4 Oct 2019 10:25:14 +0000 Subject: [PATCH 005/120] Check badness quality in tests --- .gitlab-ci.yml | 1 + libsrc/meshing/global.cpp | 2 - libsrc/meshing/global.hpp | 2 - libsrc/meshing/improve3.cpp | 24 +++--- libsrc/meshing/meshclass.cpp | 38 +++++++++ libsrc/meshing/meshclass.hpp | 6 ++ libsrc/meshing/python_mesh.cpp | 2 + libsrc/meshing/smoothing3.cpp | 48 +---------- ng/ngpkg.cpp | 22 ++--- tests/pytest/results.py | 142 +++++++++++++++++++++++++-------- tests/pytest/test_tutorials.py | 37 ++++++--- 11 files changed, 208 insertions(+), 116 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ab5e5908..b85f1349 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -65,6 +65,7 @@ test_win: <<: *win stage: test script: + - cd tests\pytest - cd %NETGEN_BUILD_DIR%\netgen - ctest -C Release -V --output-on-failure - cd .. diff --git a/libsrc/meshing/global.cpp b/libsrc/meshing/global.cpp index 4a01c4dc..bd74162c 100644 --- a/libsrc/meshing/global.cpp +++ b/libsrc/meshing/global.cpp @@ -77,8 +77,6 @@ namespace netgen - NgArray tets_in_qualclass; - mutex tcl_todo_mutex; int h_argc = 0; diff --git a/libsrc/meshing/global.hpp b/libsrc/meshing/global.hpp index d21cf105..e19c094b 100644 --- a/libsrc/meshing/global.hpp +++ b/libsrc/meshing/global.hpp @@ -27,8 +27,6 @@ namespace netgen // extern DLL_HEADER MeshingParameters mparam; - DLL_HEADER extern NgArray tets_in_qualclass; - DLL_HEADER extern mutex tcl_todo_mutex; class DLL_HEADER multithreadt diff --git a/libsrc/meshing/improve3.cpp b/libsrc/meshing/improve3.cpp index 1fd5955a..e5ee4e03 100644 --- a/libsrc/meshing/improve3.cpp +++ b/libsrc/meshing/improve3.cpp @@ -198,7 +198,7 @@ void MeshOptimize3d :: CombineImproveSequential (Mesh & mesh, if (goal == OPT_QUALITY) { - totalbad = CalcTotalBad (mesh.Points(), mesh.VolumeElements()); + totalbad = mesh.CalcTotalBad (mp); (*testout) << "Total badness = " << totalbad << endl; PrintMessage (5, "Total badness = ", totalbad); } @@ -395,7 +395,7 @@ void MeshOptimize3d :: CombineImproveSequential (Mesh & mesh, if (goal == OPT_QUALITY) { - totalbad = CalcTotalBad (mesh.Points(), mesh.VolumeElements()); + totalbad = mesh.CalcTotalBad (mp); (*testout) << "Total badness = " << totalbad << endl; int cntill = 0; @@ -511,7 +511,7 @@ void MeshOptimize3d :: CombineImprove (Mesh & mesh, if (goal == OPT_QUALITY) { - totalbad = CalcTotalBad (mesh.Points(), mesh.VolumeElements()); + totalbad = mesh.CalcTotalBad (mp); (*testout) << "Total badness = " << totalbad << endl; } @@ -565,7 +565,7 @@ void MeshOptimize3d :: CombineImprove (Mesh & mesh, if (goal == OPT_QUALITY) { - totalbad = CalcTotalBad (mesh.Points(), mesh.VolumeElements()); + totalbad = mesh.CalcTotalBad (mp); (*testout) << "Total badness = " << totalbad << endl; int cntill = 0; @@ -642,7 +642,7 @@ void MeshOptimize3d :: SplitImprove (Mesh & mesh, if (goal == OPT_QUALITY) { - bad1 = CalcTotalBad (mesh.Points(), mesh.VolumeElements()); + bad1 = mesh.CalcTotalBad (mp); (*testout) << "Total badness = " << bad1 << endl; } @@ -864,7 +864,7 @@ void MeshOptimize3d :: SplitImprove (Mesh & mesh, if (goal == OPT_QUALITY) { - bad1 = CalcTotalBad (mesh.Points(), mesh.VolumeElements()); + bad1 = mesh.CalcTotalBad (mp); (*testout) << "Total badness = " << bad1 << endl; int cntill = 0; @@ -925,7 +925,7 @@ void MeshOptimize3d :: SwapImproveSequential (Mesh & mesh, OPTIMIZEGOAL goal, // Calculate total badness if (goal == OPT_QUALITY) { - bad1 = CalcTotalBad (mesh.Points(), mesh.VolumeElements()); + bad1 = mesh.CalcTotalBad (mp); (*testout) << "Total badness = " << bad1 << endl; } @@ -2420,7 +2420,7 @@ void MeshOptimize3d :: SwapImprove (Mesh & mesh, OPTIMIZEGOAL goal, // Calculate total badness if (goal == OPT_QUALITY) { - double bad1 = CalcTotalBad (mesh.Points(), mesh.VolumeElements()); + double bad1 = mesh.CalcTotalBad (mp); (*testout) << "Total badness = " << bad1 << endl; } @@ -3527,7 +3527,7 @@ void MeshOptimize3d :: SwapImprove2Sequential (Mesh & mesh, OPTIMIZEGOAL goal) // Calculate total badness - bad1 = CalcTotalBad (mesh.Points(), mesh.VolumeElements()); + bad1 = mesh.CalcTotalBad (mp); (*testout) << "Total badness = " << bad1 << endl; cout << "tot bad = " << bad1 << endl; @@ -3582,7 +3582,7 @@ void MeshOptimize3d :: SwapImprove2Sequential (Mesh & mesh, OPTIMIZEGOAL goal) */ - bad1 = CalcTotalBad (mesh.Points(), mesh.VolumeElements()); + bad1 = mesh.CalcTotalBad (mp); (*testout) << "Total badness = " << bad1 << endl; (*testout) << "swapimprove2 done" << "\n"; // (*mycout) << "Vol = " << CalcVolume (points, volelements) << "\n"; @@ -3611,7 +3611,7 @@ void MeshOptimize3d :: SwapImprove2 (Mesh & mesh, OPTIMIZEGOAL goal) PrintMessage (3, "SwapImprove2 "); (*testout) << "\n" << "Start SwapImprove2" << "\n"; - bad1 = CalcTotalBad (mesh.Points(), mesh.VolumeElements()); + bad1 = mesh.CalcTotalBad (mp); (*testout) << "Total badness = " << bad1 << endl; // find elements on node @@ -3668,7 +3668,7 @@ void MeshOptimize3d :: SwapImprove2 (Mesh & mesh, OPTIMIZEGOAL goal) PrintMessage (5, cnt, " swaps performed"); - bad1 = CalcTotalBad (mesh.Points(), mesh.VolumeElements()); + bad1 = mesh.CalcTotalBad (mp); (*testout) << "Total badness = " << bad1 << endl; (*testout) << "swapimprove2 done" << "\n"; } diff --git a/libsrc/meshing/meshclass.cpp b/libsrc/meshing/meshclass.cpp index c9343194..26c327b3 100644 --- a/libsrc/meshing/meshclass.cpp +++ b/libsrc/meshing/meshclass.cpp @@ -3897,6 +3897,44 @@ namespace netgen return 1; } + double Mesh :: CalcTotalBad (const MeshingParameters & mp ) + { + static Timer t("CalcTotalBad"); RegionTimer reg(t); + static constexpr int n_classes = 20; + + double sum = 0; + + tets_in_qualclass.SetSize(n_classes); + tets_in_qualclass = 0; + + ParallelForRange( IntRange(volelements.Size()), [&] (auto myrange) + { + double local_sum = 0.0; + double teterrpow = mp.opterrpow; + + std::array classes_local{}; + + for (auto i : myrange) + { + double elbad = pow (max2(CalcBad (points, volelements[i], 0, mp),1e-10), 1/teterrpow); + + int qualclass = int (n_classes / elbad + 1); + if (qualclass < 1) qualclass = 1; + if (qualclass > n_classes) qualclass = n_classes; + classes_local[qualclass-1]++; + + local_sum += elbad; + } + + AtomicAdd(sum, local_sum); + + for (auto i : Range(n_classes)) + AsAtomic(tets_in_qualclass[i]) += classes_local[i]; + }); + + return sum; + } + diff --git a/libsrc/meshing/meshclass.hpp b/libsrc/meshing/meshclass.hpp index 8fc56c73..74381b7f 100644 --- a/libsrc/meshing/meshclass.hpp +++ b/libsrc/meshing/meshclass.hpp @@ -62,6 +62,8 @@ namespace netgen /// open segmenets for surface meshing NgArray opensegments; + Array tets_in_qualclass; + /** @@ -559,6 +561,10 @@ namespace netgen */ void FreeOpenElementsEnvironment (int layers); + + DLL_HEADER double CalcTotalBad (const MeshingParameters & mp); + FlatArray GetQualityHistogram() { return tets_in_qualclass; } + /// bool LegalTet (Element & el) const { diff --git a/libsrc/meshing/python_mesh.cpp b/libsrc/meshing/python_mesh.cpp index 5db1a615..9a90d3f1 100644 --- a/libsrc/meshing/python_mesh.cpp +++ b/libsrc/meshing/python_mesh.cpp @@ -983,6 +983,8 @@ DLL_HEADER void ExportNetgenMeshing(py::module &m) res["tet"] = py::make_tuple( values[2], values[3] ); return res; }, py::arg("badelement_limit")=175.0) + .def ("CalcTotalBadness", &Mesh::CalcTotalBad) + .def ("GetQualityHistogram", &Mesh::GetQualityHistogram) ; m.def("ImportMesh", [](const string& filename) diff --git a/libsrc/meshing/smoothing3.cpp b/libsrc/meshing/smoothing3.cpp index 7d4854b8..de0b6cb5 100644 --- a/libsrc/meshing/smoothing3.cpp +++ b/libsrc/meshing/smoothing3.cpp @@ -930,46 +930,6 @@ double Opti3EdgeMinFunction :: FuncGrad (const Vector & x, Vector & grad) const -double CalcTotalBad (const Mesh::T_POINTS & points, - const Array & elements, - const MeshingParameters & mp) -{ - static Timer t("CalcTotalBad"); RegionTimer reg(t); - static constexpr int n_classes = 20; - - double sum = 0; - - tets_in_qualclass.SetSize(n_classes); - tets_in_qualclass = 0; - - ParallelForRange( IntRange(elements.Size()), [&] (auto myrange) { - double local_sum = 0.0; - double teterrpow = mp.opterrpow; - - std::array classes_local{}; - - for (auto i : myrange) - { - double elbad = pow (max2(CalcBad (points, elements[i], 0, mp),1e-10), - 1/teterrpow); - - int qualclass = int (n_classes / elbad + 1); - if (qualclass < 1) qualclass = 1; - if (qualclass > n_classes) qualclass = n_classes; - classes_local[qualclass-1]++; - - local_sum += elbad; - } - - AtomicAdd(sum, local_sum); - - for (auto i : Range(n_classes)) - AsAtomic(tets_in_qualclass[i]) += classes_local[i]; - }); - - return sum; -} - int WrongOrientation (const Mesh::T_POINTS & points, const Element & el) { const Point3d & p1 = points[el.PNum(1)]; @@ -1383,7 +1343,7 @@ void Mesh :: ImproveMeshSequential (const MeshingParameters & mp, OPTIMIZEGOAL g if (goal == OPT_QUALITY) { - double bad1 = CalcTotalBad (points, volelements, mp); + double bad1 = CalcTotalBad (mp); (*testout) << "Total badness = " << bad1 << endl; PrintMessage (5, "Total badness = ", bad1); } @@ -1485,7 +1445,7 @@ void Mesh :: ImproveMeshSequential (const MeshingParameters & mp, OPTIMIZEGOAL g if (goal == OPT_QUALITY) { - double bad1 = CalcTotalBad (points, volelements, mp); + double bad1 = CalcTotalBad (mp); (*testout) << "Total badness = " << bad1 << endl; PrintMessage (5, "Total badness = ", bad1); } @@ -1536,7 +1496,7 @@ void Mesh :: ImproveMesh (const MeshingParameters & mp, OPTIMIZEGOAL goal) if (goal == OPT_QUALITY) { - double bad1 = CalcTotalBad (points, volelements, mp); + double bad1 = CalcTotalBad (mp); (*testout) << "Total badness = " << bad1 << endl; PrintMessage (5, "Total badness = ", bad1); } @@ -1631,7 +1591,7 @@ void Mesh :: ImproveMesh (const MeshingParameters & mp, OPTIMIZEGOAL goal) if (goal == OPT_QUALITY) { - double bad1 = CalcTotalBad (points, volelements, mp); + double bad1 = CalcTotalBad (mp); (*testout) << "Total badness = " << bad1 << endl; PrintMessage (5, "Total badness = ", bad1); } diff --git a/ng/ngpkg.cpp b/ng/ngpkg.cpp index f9dd75b7..5c0b8638 100644 --- a/ng/ngpkg.cpp +++ b/ng/ngpkg.cpp @@ -687,12 +687,24 @@ namespace netgen Tcl_SetVar (interp, "::status_ne", buf, 0); sprintf (buf, "%u", unsigned(mesh->GetNSE())); Tcl_SetVar (interp, "::status_nse", buf, 0); + + auto tets_in_qualclass = mesh->GetQualityHistogram(); + lstring[0] = 0; + for (int i = 0; i < tets_in_qualclass.Size(); i++) + { + sprintf (buf, " %d", tets_in_qualclass[i]); + strcat (lstring, buf); + } + for (int i = tets_in_qualclass.Size(); i < 20; i++) + strcat (lstring, " 0"); + Tcl_SetVar (interp, "::status_tetqualclasses", lstring, 0); } else { Tcl_SetVar (interp, "::status_np", "0", 0); Tcl_SetVar (interp, "::status_ne", "0", 0); Tcl_SetVar (interp, "::status_nse", "0", 0); + Tcl_SetVar (interp, "::status_tetqualclasses", "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0", 0); } if (multithread.running) @@ -704,16 +716,6 @@ namespace netgen sprintf (buf, "%lf", multithread.percent); Tcl_SetVar (interp, "::status_percent", buf, 0); - lstring[0] = 0; - for (int i = 1; i <= tets_in_qualclass.Size(); i++) - { - sprintf (buf, " %d", tets_in_qualclass.Get(i)); - strcat (lstring, buf); - } - for (int i = tets_in_qualclass.Size()+1; i <= 20; i++) - strcat (lstring, " 0"); - Tcl_SetVar (interp, "::status_tetqualclasses", lstring, 0); - { lock_guard guard(tcl_todo_mutex); if (multithread.tcl_todo->length()) diff --git a/tests/pytest/results.py b/tests/pytest/results.py index f213fda9..ea1a049b 100644 --- a/tests/pytest/results.py +++ b/tests/pytest/results.py @@ -1,36 +1,108 @@ number_elements = {} -number_elements['cylsphere.geo'] = (706,231,490,706,2797,17554) -number_elements['cubeandspheres.geo'] = (98,100,98,98,366,1078) -number_elements['ellipsoid.geo'] = (1271,551,595,1268,5607,38173) -number_elements['manyholes2.geo'] = (128244) -number_elements['sculpture.geo'] = (477,140,260,477,1330,6769) -number_elements['ortho.geo'] = (6,6,6,6,34,180) -number_elements['ellipticcone.geo'] = (4973,573,1765,4918,13410,70483) -number_elements['cube.geo'] = (6,6,6,6,28,178) -number_elements['twobricks.geo'] = (42,22,22,42,177,595) -number_elements['revolution.geo'] = (8310,1249,3856,8269,33078,202941) -number_elements['circle_on_cube.geo'] = (636,39,189,631,2035,12237) -number_elements['sphereincube.geo'] = (508,173,339,515,1652,13829) -number_elements['twocubes.geo'] = (42,22,22,42,177,595) -number_elements['boundarycondition.geo'] = (39,22,22,39,165,508) -number_elements['ellipticcyl.geo'] = (2202,324,1106,2190,8245,55199) -number_elements['trafo.geo'] = (5154,1358,2389,5141,17948,92850) -number_elements['boxcyl.geo'] = (843,146,364,843,3700,18677) -number_elements['sphere.geo'] = (126,56,80,126,347,2342) -number_elements['torus.geo'] = (5520,2171,2739,5510,25402,177967) -number_elements['shaft.geo'] = (2609,808,1666,2594,11226,64172) -number_elements['cone.geo'] = (1215,447,678,1211,4404,27336) -number_elements['cubeandring.geo'] = (2014,231,612,1988,7671,38095) -number_elements['manyholes.geo'] = (176503,28896,70408) -number_elements['period.geo'] = (3263,574,1349,3236,11645,68523) -number_elements['lshape3d.geo'] = (18,12,12,18,93,335) -number_elements['cubemsphere.geo'] = (4708,773,1460,4667,17655,114554) -number_elements['twocyl.geo'] = (578,147,403,578,1887,13537) -number_elements['cubemcyl.geo'] = (19712,3225,8153,19438,89202,524684) -number_elements['matrix.geo'] = (5207,1888,2790,5149,16205,101146) -number_elements['fichera.geo'] = (35,18,18,35,209,496) -number_elements['cylinder.geo'] = (404,101,256,404,1161,8076) -number_elements['part1.stl'] = (1228,620,727,1216,1548,3498) -number_elements['hinge.stl'] = (1995,1399,1532,1987,2881,4621) -number_elements['frame.step'] = (195213,30333,58955) -number_elements['screw.step'] = (2021,7011,23730) +total_badness = {} +quality_histogram = {} +number_elements['boundarycondition.geo'] = (50,22,22,50,165,507) +total_badness['boundarycondition.geo'] = (74.77455382627932,35.1615287684931,35.09828878797806,74.77454941022566,228.72078637426984,661.0081780927665) +quality_histogram['boundarycondition.geo'] = ([0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 5, 8, 13, 3, 9, 5, 0, 1, 1],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 0, 0, 8, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 0, 0, 8, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 5, 8, 13, 3, 9, 5, 0, 1, 1],[0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 5, 13, 13, 25, 31, 25, 20, 17, 12, 1],[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 9, 20, 35, 56, 56, 81, 90, 83, 59, 15]) +number_elements['boxcyl.geo'] = (858,158,384,850,3761,18969) +total_badness['boxcyl.geo'] = (1232.0426735126875,247.68310335779472,598.9983304416592,1214.2298930472489,4693.120852548444,23072.83352747196) +quality_histogram['boxcyl.geo'] = ([0, 0, 0, 0, 0, 0, 0, 0, 2, 31, 91, 73, 79, 87, 106, 114, 102, 89, 66, 18],[0, 0, 0, 0, 0, 1, 1, 7, 10, 16, 5, 8, 15, 13, 17, 13, 9, 25, 7, 11],[0, 0, 1, 0, 3, 3, 3, 6, 11, 17, 21, 28, 34, 44, 68, 64, 49, 19, 11, 2],[0, 0, 0, 0, 0, 0, 0, 0, 2, 29, 87, 73, 75, 86, 106, 97, 112, 87, 75, 21],[0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 20, 59, 118, 250, 456, 628, 751, 755, 564, 153],[0, 0, 0, 0, 0, 0, 0, 5, 8, 15, 43, 130, 353, 876, 1713, 3018, 4122, 4317, 3271, 1098]) +number_elements['circle_on_cube.geo'] = (646,46,182,621,2054,11988) +total_badness['circle_on_cube.geo'] = (859.4388188262326,97.32623111178621,258.40643290234414,804.6856206512356,2526.4427939235775,14608.275961981739) +quality_histogram['circle_on_cube.geo'] = ([0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 10, 23, 48, 81, 117, 100, 123, 86, 43, 10],[0, 0, 0, 0, 0, 2, 2, 4, 8, 8, 6, 7, 5, 1, 2, 1, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 14, 21, 35, 35, 33, 19, 9, 8, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 11, 45, 59, 93, 114, 121, 104, 53, 14],[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 15, 57, 129, 210, 330, 426, 450, 321, 109],[0, 0, 0, 0, 0, 0, 0, 1, 2, 17, 33, 82, 226, 556, 1140, 1929, 2512, 2801, 2061, 628]) +number_elements['cone.geo'] = (1231,753,755,1208,4423,27126) +total_badness['cone.geo'] = (1853.3096959109166,2038.8171749591982,2283.6586444340996,1783.4859473632036,5769.994684811694,33434.66391104773) +quality_histogram['cone.geo'] = ([0, 0, 0, 0, 0, 1, 8, 22, 29, 50, 88, 118, 123, 158, 175, 140, 137, 111, 52, 19],[0, 1, 28, 40, 63, 54, 61, 53, 61, 59, 67, 47, 38, 52, 39, 23, 27, 21, 16, 3],[1, 33, 42, 29, 32, 26, 29, 27, 64, 81, 73, 80, 67, 48, 55, 18, 23, 16, 11, 0],[0, 0, 0, 0, 0, 1, 2, 15, 22, 47, 81, 110, 131, 144, 172, 150, 145, 112, 62, 14],[0, 0, 0, 0, 0, 0, 0, 1, 4, 35, 88, 158, 276, 400, 584, 726, 802, 735, 464, 150],[0, 0, 0, 0, 0, 0, 0, 3, 13, 31, 83, 303, 735, 1519, 2944, 4316, 5668, 5807, 4355, 1349]) +number_elements['cube.geo'] = (6,6,6,6,57,184) +total_badness['cube.geo'] = (9.140127286902135,9.140127286902135,9.140127286902135,9.140127286902137,84.41688347277622,241.24676971944592) +quality_histogram['cube.geo'] = ([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 2, 12, 14, 4, 12, 2, 2, 3, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 10, 7, 19, 18, 37, 33, 33, 14, 6]) +number_elements['cubeandring.geo'] = (2188,252,613,2054,7752,38282) +total_badness['cubeandring.geo'] = (4412.194135842449,365.81827351160507,897.5465886947072,3795.4750392740707,9761.706516470002,46825.77798326433) +quality_histogram['cubeandring.geo'] = ([1, 9, 25, 36, 90, 100, 108, 114, 90, 73, 63, 100, 149, 190, 251, 264, 241, 168, 96, 20],[0, 0, 0, 0, 0, 1, 1, 2, 1, 3, 8, 24, 28, 49, 38, 41, 29, 19, 7, 1],[0, 0, 0, 0, 2, 0, 0, 4, 3, 17, 49, 47, 61, 93, 110, 82, 52, 60, 28, 5],[0, 3, 12, 28, 61, 84, 109, 97, 80, 55, 48, 68, 112, 166, 245, 277, 249, 212, 116, 32],[0, 0, 0, 0, 0, 2, 1, 9, 13, 27, 56, 136, 281, 548, 921, 1256, 1534, 1557, 1091, 320],[0, 0, 0, 0, 0, 0, 0, 3, 10, 28, 117, 334, 795, 2026, 3889, 5942, 8057, 8537, 6447, 2097]) +number_elements['cubeandspheres.geo'] = (98,100,98,98,365,1080) +total_badness['cubeandspheres.geo'] = (145.83375109036504,146.64686099828145,145.14580661611535,145.83375109036504,553.0336207649647,1684.1500639342994) +quality_histogram['cubeandspheres.geo'] = ([0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 18, 19, 13, 20, 2, 9, 1, 0],[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 7, 10, 16, 18, 15, 17, 6, 5, 4, 0],[0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 6, 6, 19, 21, 12, 18, 5, 4, 4, 0],[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 18, 19, 13, 20, 2, 9, 1, 0],[0, 0, 0, 0, 0, 0, 0, 2, 6, 24, 31, 43, 39, 53, 35, 44, 51, 28, 9, 0],[0, 0, 0, 0, 0, 1, 2, 19, 59, 37, 100, 136, 100, 123, 162, 160, 66, 65, 28, 22]) +number_elements['cubemcyl.geo'] = (20940,3203,8421,19608,88843,521218) +total_badness['cubemcyl.geo'] = (29036.424266882583,4539.317490840601,11848.69595029201,25605.226152652813,109927.85825761271,633985.7169497084) +quality_histogram['cubemcyl.geo'] = ([0, 0, 0, 0, 0, 0, 22, 78, 213, 367, 738, 1237, 1875, 2588, 3120, 3314, 3117, 2521, 1385, 365],[0, 0, 0, 0, 0, 0, 3, 12, 17, 66, 128, 250, 364, 425, 515, 512, 463, 282, 137, 29],[0, 0, 0, 0, 0, 0, 7, 30, 87, 181, 362, 596, 792, 1120, 1271, 1262, 1165, 892, 516, 140],[0, 0, 0, 0, 0, 0, 2, 6, 40, 75, 246, 608, 1243, 2030, 2896, 3459, 3612, 2986, 1887, 518],[0, 0, 0, 0, 0, 0, 0, 0, 23, 113, 364, 946, 2450, 5445, 10022, 14690, 18368, 18746, 13521, 4155],[0, 0, 0, 0, 0, 0, 1, 25, 119, 374, 1224, 3269, 9296, 24328, 50521, 82283, 109285, 119759, 91721, 29013]) +number_elements['cubemsphere.geo'] = (4877,783,1571,4583,17783,113522) +total_badness['cubemsphere.geo'] = (6790.976698979519,1271.4564508216417,2230.3744520291,5995.40689674042,22085.583903145787,138835.89330335165) +quality_histogram['cubemsphere.geo'] = ([0, 0, 0, 0, 0, 1, 6, 28, 55, 96, 194, 261, 445, 559, 740, 798, 698, 576, 333, 87],[0, 0, 0, 0, 1, 2, 6, 19, 38, 61, 70, 94, 100, 91, 104, 76, 58, 38, 24, 1],[0, 0, 0, 0, 0, 0, 1, 5, 12, 20, 68, 134, 170, 243, 246, 237, 214, 145, 59, 17],[0, 0, 0, 0, 0, 0, 0, 4, 9, 25, 77, 128, 251, 516, 657, 826, 857, 685, 432, 116],[0, 0, 0, 0, 0, 0, 0, 3, 11, 31, 90, 203, 496, 1110, 1957, 3109, 3695, 3723, 2641, 714],[0, 0, 0, 0, 0, 0, 1, 9, 35, 117, 341, 885, 2307, 5764, 11384, 18322, 23667, 25754, 19043, 5893]) +number_elements['cylinder.geo'] = (413,103,437,411,1155,8102) +total_badness['cylinder.geo'] = (584.636409084562,127.27629078004027,1146.6341650071872,574.3453767078119,1536.3995031371464,9877.101056586194) +quality_histogram['cylinder.geo'] = ([0, 0, 0, 0, 0, 0, 0, 1, 2, 10, 18, 31, 43, 56, 76, 61, 45, 47, 18, 5],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 7, 15, 14, 21, 32, 10, 1],[0, 0, 14, 22, 37, 32, 30, 36, 31, 29, 34, 25, 27, 28, 22, 16, 33, 9, 9, 3],[0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 15, 29, 37, 61, 76, 59, 48, 52, 21, 3],[0, 0, 0, 0, 0, 0, 0, 1, 3, 10, 16, 50, 99, 120, 164, 206, 224, 139, 105, 18],[0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 13, 53, 167, 414, 787, 1233, 1788, 1856, 1334, 453]) +number_elements['cylsphere.geo'] = (711,225,665,709,2865,17765) +total_badness['cylsphere.geo'] = (1105.79919259997,584.4242683103591,1528.697375188064,1092.2233628961833,3710.2873989997815,21668.18084327247) +quality_histogram['cylsphere.geo'] = ([0, 0, 0, 0, 0, 0, 3, 10, 16, 35, 64, 89, 107, 102, 100, 57, 59, 50, 17, 2],[0, 0, 1, 13, 20, 34, 20, 21, 7, 6, 2, 8, 13, 18, 10, 23, 13, 7, 9, 0],[0, 1, 9, 14, 21, 37, 57, 76, 63, 57, 53, 60, 32, 54, 23, 35, 39, 16, 13, 5],[0, 0, 0, 0, 0, 0, 3, 6, 15, 27, 62, 89, 110, 109, 90, 68, 66, 45, 15, 4],[0, 0, 0, 0, 0, 0, 0, 3, 3, 28, 44, 88, 157, 276, 340, 471, 505, 493, 358, 99],[0, 0, 0, 0, 0, 0, 0, 0, 6, 15, 48, 129, 362, 859, 1699, 2843, 3786, 4041, 3023, 954]) +number_elements['ellipsoid.geo'] = (1262,942,598,1256,5592,41345) +total_badness['ellipsoid.geo'] = (1984.8094938967738,5747.520443762867,903.6523661521342,1908.0512059728062,7199.786784319063,56476.64849160909) +quality_histogram['ellipsoid.geo'] = ([0, 0, 0, 0, 1, 0, 8, 26, 39, 86, 118, 127, 178, 146, 148, 147, 107, 76, 43, 12],[22, 148, 137, 126, 91, 56, 81, 69, 47, 36, 29, 32, 23, 13, 12, 9, 5, 5, 1, 0],[0, 0, 0, 0, 0, 0, 1, 5, 15, 17, 44, 69, 81, 100, 91, 53, 54, 39, 20, 9],[0, 0, 0, 0, 0, 0, 0, 18, 35, 52, 103, 128, 169, 173, 155, 154, 121, 81, 49, 18],[0, 0, 0, 0, 0, 0, 0, 0, 3, 22, 74, 178, 307, 491, 711, 944, 1067, 921, 675, 199],[0, 0, 0, 0, 3, 20, 108, 266, 403, 644, 1110, 1904, 2921, 4621, 6100, 6869, 6568, 5527, 3324, 957]) +number_elements['ellipticcone.geo'] = (5213,587,1780,4971,13441,69596) +total_badness['ellipticcone.geo'] = (6957.997335964581,853.7762583986572,2537.0484181636543,6359.4493283262245,17201.441953759855,85930.2271725273) +quality_histogram['ellipticcone.geo'] = ([0, 0, 0, 0, 0, 0, 1, 7, 26, 47, 141, 216, 357, 555, 760, 902, 879, 712, 459, 151],[0, 0, 0, 0, 0, 0, 3, 8, 8, 14, 33, 55, 67, 67, 76, 85, 69, 56, 32, 14],[0, 0, 0, 1, 3, 4, 12, 22, 34, 43, 79, 96, 136, 191, 227, 251, 258, 253, 129, 41],[0, 0, 0, 0, 0, 0, 0, 1, 3, 17, 53, 107, 248, 431, 665, 897, 978, 791, 593, 187],[0, 0, 0, 0, 0, 0, 1, 8, 29, 62, 198, 341, 643, 1044, 1682, 2259, 2506, 2486, 1671, 511],[0, 0, 0, 0, 0, 0, 1, 5, 40, 121, 306, 826, 1862, 3802, 7575, 11204, 14503, 14913, 11126, 3312]) +number_elements['ellipticcyl.geo'] = (2275,325,1114,2199,8225,55078) +total_badness['ellipticcyl.geo'] = (3156.3970604957917,459.390405230032,1483.3007517785577,2944.2434449093485,10297.19192531407,66822.93034041145) +quality_histogram['ellipticcyl.geo'] = ([0, 0, 0, 0, 0, 0, 1, 10, 26, 44, 84, 125, 208, 263, 341, 376, 326, 261, 175, 35],[0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 18, 28, 26, 37, 71, 54, 46, 27, 10, 2],[0, 0, 0, 0, 0, 0, 0, 0, 3, 10, 17, 41, 80, 144, 172, 205, 165, 155, 97, 25],[0, 0, 0, 0, 0, 0, 1, 2, 8, 35, 43, 95, 163, 238, 314, 377, 378, 307, 193, 45],[0, 0, 0, 0, 0, 0, 0, 3, 5, 9, 46, 106, 269, 605, 988, 1459, 1629, 1655, 1138, 313],[0, 0, 0, 0, 0, 0, 0, 1, 10, 28, 97, 356, 939, 2483, 5114, 8528, 11618, 12908, 9908, 3088]) +number_elements['fichera.geo'] = (40,18,18,40,208,514) +total_badness['fichera.geo'] = (62.36199688281094,26.546480074510768,26.546480074510768,62.361996882810935,266.19865609610633,666.6750726869872) +quality_histogram['fichera.geo'] = ([0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 4, 3, 5, 7, 8, 2, 1, 0, 2],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 6, 1, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 6, 1, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 4, 3, 5, 7, 8, 2, 1, 0, 2],[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 6, 10, 16, 24, 36, 33, 41, 30, 6],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 14, 32, 55, 87, 97, 91, 71, 52, 13]) +number_elements['frame.step'] = (220900,30129,85945) +total_badness['frame.step'] = (300459.83411975694,44750.50972353135,118266.27326084932) +quality_histogram['frame.step'] = ([2, 7, 7, 9, 9, 30, 241, 749, 1682, 3420, 6081, 10465, 17172, 25221, 31864, 35916, 35505, 29651, 18174, 4695],[4, 4, 5, 11, 20, 39, 120, 287, 625, 1025, 1680, 2536, 3358, 4124, 4521, 4195, 3479, 2399, 1359, 338],[1, 6, 3, 11, 7, 34, 76, 195, 480, 1081, 2528, 4819, 7807, 11027, 13498, 14054, 12911, 10078, 5893, 1436]) +number_elements['hinge.stl'] = (1990,1389,1530,1988,2903,4609) +total_badness['hinge.stl'] = (2772.615463550591,2178.566325869092,2364.3186940730393,2747.7705529808827,3701.663382426159,5628.251412240825) +quality_histogram['hinge.stl'] = ([0, 0, 0, 0, 1, 2, 3, 9, 21, 47, 69, 116, 164, 237, 326, 280, 298, 225, 151, 41],[0, 0, 0, 0, 2, 5, 18, 35, 47, 74, 111, 126, 131, 179, 189, 185, 134, 93, 46, 14],[0, 0, 0, 0, 0, 7, 14, 43, 46, 79, 94, 164, 155, 163, 212, 180, 180, 118, 61, 14],[0, 0, 0, 0, 0, 2, 2, 5, 19, 39, 62, 112, 177, 236, 314, 304, 295, 236, 140, 45],[0, 0, 0, 0, 0, 0, 0, 3, 4, 13, 31, 64, 136, 221, 397, 484, 533, 504, 399, 114],[0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 14, 45, 103, 220, 448, 693, 963, 1055, 803, 257]) +number_elements['lshape3d.geo'] = (18,12,12,18,88,331) +total_badness['lshape3d.geo'] = (27.289065400982963,18.9614815145502,18.9614815145502,27.289065400982963,121.12718489787706,443.95235946678145) +quality_histogram['lshape3d.geo'] = ([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 12, 0, 3, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 6, 1, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 6, 1, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 12, 0, 3, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 10, 9, 21, 23, 7, 6, 1, 4],[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 7, 21, 26, 41, 39, 61, 57, 46, 24, 7]) +number_elements['manyholes.geo'] = (179405,29184,70789) +total_badness['manyholes.geo'] = (238774.1757941998,42098.72126770701,100213.31675908854) +quality_histogram['manyholes.geo'] = ([0, 0, 2, 1, 8, 27, 65, 207, 559, 1418, 3370, 7627, 12710, 20134, 27407, 30177, 29994, 24813, 16843, 4043],[0, 0, 0, 1, 5, 26, 45, 181, 387, 817, 1524, 2280, 3331, 4394, 4120, 3700, 3202, 2567, 1880, 724],[0, 0, 0, 2, 30, 78, 189, 443, 837, 1706, 2919, 4402, 7061, 9455, 10197, 10269, 9498, 7395, 4474, 1834]) +number_elements['manyholes2.geo'] = (128088) +total_badness['manyholes2.geo'] = (176960.0270623914) +quality_histogram['manyholes2.geo'] = ([0, 0, 0, 0, 7, 30, 95, 288, 823, 2105, 4573, 7847, 11840, 18008, 18739, 18350, 16782, 14747, 10264, 3590]) +number_elements['matrix.geo'] = (5295,2001,2783,5105,16255,100388) +total_badness['matrix.geo'] = (9761.595421063283,4865.580334425541,5980.102256692753,9068.007640805426,21663.043544618693,124129.9526659235) +quality_histogram['matrix.geo'] = ([0, 0, 32, 147, 135, 100, 130, 147, 177, 237, 361, 409, 554, 617, 583, 555, 457, 385, 212, 57],[0, 3, 20, 65, 122, 160, 137, 169, 184, 189, 172, 190, 184, 137, 89, 53, 45, 54, 20, 8],[0, 0, 13, 51, 108, 146, 173, 161, 225, 265, 333, 287, 211, 205, 173, 161, 117, 93, 45, 16],[0, 0, 20, 134, 116, 78, 117, 149, 152, 188, 285, 371, 498, 547, 578, 611, 503, 441, 254, 63],[0, 0, 0, 0, 0, 5, 24, 75, 128, 202, 346, 678, 1062, 1517, 2149, 2515, 2754, 2540, 1722, 538],[0, 0, 0, 0, 0, 1, 6, 24, 71, 195, 503, 1186, 2824, 5989, 10497, 16251, 20497, 21258, 16049, 5037]) +number_elements['ortho.geo'] = (6,6,6,6,57,180) +total_badness['ortho.geo'] = (9.140127286902135,9.140127286902135,9.140127286902135,9.140127286902135,83.06080967252274,233.34798934128858) +quality_histogram['ortho.geo'] = ([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 8, 9, 8, 14, 5, 3, 1, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 14, 9, 27, 39, 31, 30, 17, 5]) +number_elements['part1.stl'] = (1228,629,758,1180,1516,3545) +total_badness['part1.stl'] = (1672.637935798938,1030.3136744801673,1097.0227587874047,1563.838689712767,1957.4591373369915,4425.483014010064) +quality_histogram['part1.stl'] = ([0, 0, 0, 0, 0, 0, 1, 5, 5, 20, 38, 51, 111, 128, 195, 211, 190, 152, 90, 31],[0, 0, 0, 0, 1, 4, 13, 14, 23, 44, 56, 74, 86, 82, 70, 72, 36, 38, 10, 6],[0, 0, 0, 0, 0, 0, 0, 3, 10, 24, 33, 62, 90, 103, 138, 113, 90, 60, 22, 10],[0, 0, 0, 0, 0, 0, 0, 3, 4, 12, 16, 43, 89, 116, 178, 208, 222, 153, 99, 37],[0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 20, 50, 73, 141, 210, 280, 272, 238, 170, 55],[0, 0, 0, 0, 0, 0, 0, 2, 6, 12, 20, 44, 109, 246, 424, 580, 665, 742, 515, 180]) +number_elements['period.geo'] = (3294,659,1593,3209,11824,68383) +total_badness['period.geo'] = (4918.043403462622,1346.7559431607624,3241.6735554559423,4660.401219394114,15109.078091558415,84181.20294002682) +quality_histogram['period.geo'] = ([0, 0, 0, 0, 0, 11, 22, 35, 81, 112, 210, 253, 402, 409, 494, 439, 371, 274, 135, 46],[0, 4, 8, 11, 15, 22, 23, 30, 40, 58, 66, 57, 66, 59, 57, 36, 43, 42, 16, 6],[0, 0, 21, 30, 45, 47, 61, 92, 104, 145, 141, 138, 146, 148, 134, 114, 107, 63, 46, 11],[0, 0, 0, 0, 0, 4, 19, 29, 56, 85, 162, 229, 352, 413, 479, 468, 390, 320, 156, 47],[0, 0, 0, 0, 0, 0, 1, 2, 15, 44, 152, 298, 546, 944, 1504, 2045, 2229, 2105, 1531, 408],[0, 0, 0, 0, 0, 0, 2, 12, 37, 108, 252, 694, 1708, 3917, 7031, 11058, 14173, 14782, 11158, 3451]) +number_elements['revolution.geo'] = (8493,1275,4263,8289,32879,201709) +total_badness['revolution.geo'] = (12348.498749170572,2301.5119080238096,7266.901425264716,11619.248926348993,41520.35801256831,246377.26478687205) +quality_histogram['revolution.geo'] = ([0, 0, 0, 0, 0, 1, 14, 37, 141, 292, 516, 761, 908, 1113, 1149, 1153, 1021, 809, 454, 124],[0, 0, 0, 0, 1, 13, 46, 79, 104, 128, 151, 162, 143, 122, 97, 67, 79, 44, 33, 6],[0, 0, 0, 1, 24, 48, 98, 178, 257, 329, 374, 485, 464, 451, 424, 377, 341, 236, 134, 42],[0, 0, 0, 0, 0, 2, 6, 11, 68, 186, 384, 601, 825, 1052, 1157, 1179, 1159, 966, 521, 172],[0, 0, 0, 0, 0, 0, 1, 4, 12, 84, 271, 645, 1296, 2517, 4137, 5621, 6316, 6268, 4405, 1302],[0, 0, 0, 0, 0, 0, 0, 11, 55, 165, 539, 1581, 4149, 10238, 19945, 31707, 42528, 45753, 34593, 10445]) +number_elements['screw.step'] = (2398,7837,31514) +total_badness['screw.step'] = (3755.370545837308,10345.591252904502,38907.12266445083) +quality_histogram['screw.step'] = ([0, 0, 0, 0, 0, 1, 13, 88, 80, 176, 187, 220, 248, 278, 289, 245, 252, 182, 114, 25],[0, 0, 0, 0, 1, 1, 5, 12, 27, 70, 147, 275, 499, 797, 1087, 1289, 1486, 1215, 709, 217],[0, 0, 0, 0, 0, 0, 3, 2, 20, 64, 145, 345, 846, 1782, 3209, 5128, 6751, 6771, 4886, 1562]) +number_elements['sculpture.geo'] = (474,138,259,473,1342,6759) +total_badness['sculpture.geo'] = (694.325017071973,172.9965580254268,337.75654539384095,690.0100728765408,2068.421172379042,8628.81341055162) +quality_histogram['sculpture.geo'] = ([0, 0, 0, 0, 0, 1, 1, 1, 4, 16, 22, 41, 56, 66, 94, 93, 45, 22, 10, 2],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 11, 22, 22, 30, 28, 19, 1],[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 7, 14, 25, 29, 47, 50, 46, 25, 7],[0, 0, 0, 0, 0, 0, 1, 1, 3, 16, 22, 41, 56, 67, 94, 93, 45, 22, 10, 2],[0, 0, 0, 0, 1, 0, 8, 25, 55, 76, 126, 141, 130, 145, 122, 136, 146, 128, 84, 19],[0, 0, 0, 0, 3, 7, 8, 20, 26, 48, 63, 134, 286, 497, 697, 1121, 1313, 1288, 944, 304]) +number_elements['shaft.geo'] = (2758,951,2088,2749,11186,63583) +total_badness['shaft.geo'] = (5318.02970416672,1354.4698006500785,6181.8600404314575,4725.048512973088,14442.588211795146,77700.72253850821) +quality_histogram['shaft.geo'] = ([5, 19, 22, 27, 27, 37, 60, 74, 82, 160, 296, 372, 295, 251, 231, 278, 234, 181, 86, 21],[0, 0, 0, 0, 0, 0, 1, 6, 17, 32, 42, 65, 90, 111, 140, 137, 132, 103, 58, 17],[20, 46, 76, 95, 111, 105, 97, 134, 91, 101, 96, 141, 150, 177, 193, 168, 177, 56, 41, 13],[0, 2, 15, 16, 32, 30, 44, 71, 72, 143, 302, 400, 289, 259, 236, 273, 259, 196, 88, 22],[0, 0, 0, 0, 0, 0, 1, 3, 30, 80, 154, 350, 602, 945, 1409, 1830, 2160, 1870, 1352, 400],[0, 0, 0, 0, 0, 0, 0, 1, 16, 57, 199, 505, 1317, 3246, 6239, 10147, 13375, 14218, 10750, 3513]) +number_elements['sphere.geo'] = (126,56,80,126,365,2315) +total_badness['sphere.geo'] = (237.49105851849373,68.82375901522019,114.85441614445755,237.49105851849373,557.7238546173342,2861.2824595084517) +quality_histogram['sphere.geo'] = ([0, 0, 0, 0, 0, 0, 0, 0, 6, 28, 46, 29, 15, 0, 2, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 14, 24, 11, 2, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 12, 28, 24, 10, 4, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 6, 28, 46, 29, 15, 0, 2, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 8, 21, 36, 47, 55, 52, 32, 40, 28, 22, 15, 9],[0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 6, 30, 51, 141, 273, 396, 472, 471, 361, 111]) +number_elements['sphereincube.geo'] = (495,187,352,501,1711,13950) +total_badness['sphereincube.geo'] = (1405.0779325461885,493.44997215033766,970.1271691161155,1303.49186301379,2380.2313828272604,17374.576935292873) +quality_histogram['sphereincube.geo'] = ([0, 0, 7, 60, 37, 29, 46, 41, 57, 46, 44, 16, 23, 10, 15, 12, 12, 24, 11, 5],[0, 0, 4, 11, 14, 25, 27, 14, 4, 2, 2, 3, 7, 13, 19, 16, 11, 6, 6, 3],[0, 0, 7, 15, 30, 48, 31, 27, 35, 44, 27, 19, 22, 15, 9, 8, 6, 6, 3, 0],[0, 0, 4, 44, 27, 20, 51, 40, 68, 51, 51, 21, 20, 17, 17, 16, 15, 23, 11, 5],[0, 0, 0, 0, 2, 3, 7, 15, 23, 28, 56, 85, 135, 188, 256, 270, 252, 194, 131, 66],[0, 0, 0, 0, 0, 0, 2, 2, 8, 27, 100, 220, 499, 870, 1449, 2270, 2791, 2947, 2086, 679]) +number_elements['torus.geo'] = (5567,3145,2727,5419,25297,175540) +total_badness['torus.geo'] = (8384.304881325788,25137.501541465608,3909.4618457982724,7868.841003540981,31635.159094988307,212959.87194011256) +quality_histogram['torus.geo'] = ([0, 0, 0, 0, 0, 1, 24, 44, 120, 251, 427, 577, 708, 736, 700, 671, 555, 393, 274, 86],[195, 700, 454, 360, 340, 221, 170, 157, 140, 91, 96, 60, 44, 31, 33, 26, 12, 7, 6, 2],[0, 0, 0, 0, 0, 0, 2, 5, 12, 62, 161, 219, 352, 418, 401, 380, 266, 239, 155, 55],[0, 0, 0, 0, 0, 0, 4, 19, 42, 209, 332, 508, 665, 720, 748, 656, 613, 495, 305, 103],[0, 0, 0, 0, 0, 0, 0, 4, 6, 57, 140, 381, 917, 1672, 2967, 4341, 5051, 5114, 3588, 1059],[0, 0, 0, 0, 0, 0, 0, 2, 23, 105, 378, 1086, 3067, 7730, 16270, 26910, 37673, 40911, 31553, 9832]) +number_elements['trafo.geo'] = (5207,1348,2390,5136,17915,84569) +total_badness['trafo.geo'] = (7609.297722974407,2770.7952645933756,3971.12751286376,7387.3184405933,23360.27008887893,108711.84635488936) +quality_histogram['trafo.geo'] = ([0, 1, 2, 0, 8, 23, 26, 43, 130, 209, 256, 376, 434, 574, 672, 714, 598, 554, 460, 127],[0, 2, 3, 17, 13, 39, 77, 130, 126, 139, 162, 128, 136, 115, 80, 88, 48, 32, 11, 2],[0, 0, 2, 1, 11, 17, 45, 82, 116, 145, 178, 211, 303, 386, 349, 231, 147, 96, 45, 25],[0, 0, 0, 0, 3, 14, 20, 37, 122, 193, 254, 362, 416, 558, 664, 720, 625, 547, 463, 138],[0, 0, 0, 0, 0, 0, 6, 26, 41, 68, 180, 504, 1428, 2170, 2266, 2730, 2780, 2666, 2365, 685],[0, 0, 0, 0, 3, 8, 60, 1414, 732, 421, 765, 1392, 2637, 5659, 9077, 13242, 16177, 16531, 12448, 4003]) +number_elements['twobricks.geo'] = (41,22,22,41,171,594) +total_badness['twobricks.geo'] = (68.92997913151194,35.05041803583789,35.04132026480671,68.92997913151194,228.18972949546867,771.140091711599) +quality_histogram['twobricks.geo'] = ([0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 1, 7, 3, 15, 4, 4, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 0, 0, 8, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 2, 4, 0, 0, 8, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 1, 7, 3, 15, 4, 4, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 7, 10, 12, 40, 34, 23, 22, 13, 3],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 22, 29, 70, 88, 100, 109, 115, 43, 14]) +number_elements['twocubes.geo'] = (41,22,22,41,171,594) +total_badness['twocubes.geo'] = (68.92997913151194,35.05041803583789,35.04132026480671,68.92997913151194,228.18972949546867,771.140091711599) +quality_histogram['twocubes.geo'] = ([0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 1, 7, 3, 15, 4, 4, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 0, 0, 8, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 2, 4, 0, 0, 8, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 1, 7, 3, 15, 4, 4, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 7, 10, 12, 40, 34, 23, 22, 13, 3],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 22, 29, 70, 88, 100, 109, 115, 43, 14]) +number_elements['twocyl.geo'] = (572,209,551,568,1894,13452) +total_badness['twocyl.geo'] = (851.3592397192452,357.1550235646191,1900.9270599861966,824.3004337537227,2477.4306123873607,16367.35839189883) +quality_histogram['twocyl.geo'] = ([0, 0, 0, 0, 0, 1, 2, 7, 7, 17, 34, 51, 57, 89, 111, 75, 73, 35, 12, 1],[0, 0, 0, 1, 3, 6, 11, 2, 8, 5, 15, 18, 12, 28, 28, 27, 24, 17, 3, 1],[0, 29, 41, 30, 31, 36, 49, 40, 55, 27, 38, 32, 26, 26, 20, 13, 37, 16, 4, 1],[0, 0, 0, 0, 0, 0, 0, 3, 7, 16, 23, 51, 53, 95, 117, 69, 73, 43, 14, 4],[0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 20, 72, 118, 190, 292, 365, 352, 262, 179, 40],[0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 25, 83, 244, 626, 1288, 2202, 2860, 3100, 2290, 728]) diff --git a/tests/pytest/test_tutorials.py b/tests/pytest/test_tutorials.py index 04c84d34..4c085b32 100644 --- a/tests/pytest/test_tutorials.py +++ b/tests/pytest/test_tutorials.py @@ -3,6 +3,7 @@ import os, pytest from netgen.meshing import meshsize, MeshingParameters, SetMessageImportance import netgen.csg as csg import netgen.stl as stl +from pyngcore import TaskManager try: import netgen.occ as occ has_occ = True @@ -18,21 +19,27 @@ def getFiles(fileEnding): def getCheckFunc(filename): - def func(mesh,i): + def func(mesh,mp,i): if filename in number_elements: # number of elements should be in 2% range of expected value - assert mesh.ne == pytest.approx(number_elements[filename][i], rel=0.02) - return func + assert mesh.ne == number_elements[filename][i] + badness = mesh.CalcTotalBadness(mp) + qual_classes = list(mesh.GetQualityHistogram()) + assert badness == pytest.approx(total_badness[filename][i], rel=1e-6) + assert qual_classes == quality_histogram[filename][i] + return func def getResultFunc(filename): - def resultFunc(mesh): + def resultFunc(mesh, mp): results = {} results["number_elements"] = mesh.ne + results["total_badness"] = mesh.CalcTotalBadness(mp) + results["quality_histogram"] = list(mesh.GetQualityHistogram()) return results return resultFunc def getMeshingparameters(filename): - standard = [{}] + [{ "mp" : ms } for ms in (meshsize.very_coarse, meshsize.coarse, meshsize.moderate, meshsize.fine, meshsize.very_fine)] + standard = [MeshingParameters()] + [MeshingParameters(ms) for ms in (meshsize.very_coarse, meshsize.coarse, meshsize.moderate, meshsize.fine, meshsize.very_fine)] if filename == "shell.geo": return [] # do not test this example cause it needs so long... if filename == "extrusion.geo": @@ -49,6 +56,8 @@ _geofiles = [f for f in getFiles(".geo")] + [f for f in getFiles(".stl")] if has_occ: _geofiles += [f for f in getFiles(".step")] +_geofiles.sort() + def generateMesh(filename, mp): if filename.endswith(".geo"): geo = csg.CSGeometry(os.path.join("..","..","tutorials", filename)) @@ -56,7 +65,7 @@ def generateMesh(filename, mp): geo = stl.STLGeometry(os.path.join("..","..","tutorials", filename)) elif filename.endswith(".step"): geo = occ.OCCGeometry(os.path.join("..","..","tutorials", filename)) - return geo.GenerateMesh(**mp) + return geo.GenerateMesh(mp) def isSlowTest(filename): return filename in ["cubemcyl.geo", "frame.step", "revolution.geo", "manyholes.geo", "torus.geo", @@ -70,15 +79,16 @@ def getParamForTest(filename): @pytest.mark.parametrize(("filename, checkFunc"), [getParamForTest(f) for f in _geofiles]) def test_geoFiles(filename, checkFunc): - import filecmp, pyngcore - for i, mp in enumerate(getMeshingparameters(filename)): + import filecmp + for i, mp_ in enumerate(getMeshingparameters(filename)): print("load geo", filename) + mp = MeshingParameters(mp_, parallel_meshing=False) mesh = generateMesh(filename, mp) if checkFunc is not None: - checkFunc(mesh,i) + checkFunc(mesh,mp,i) mesh.Save(filename+'_seq.vol.gz') - with pyngcore.TaskManager(): + with TaskManager(): mesh_par = generateMesh(filename, mp) mesh_par.Save(filename+'_par.vol.gz') @@ -86,16 +96,21 @@ def test_geoFiles(filename, checkFunc): import time def generateResultFile(): + with TaskManager(): with open("results.py", "w") as f: print("number_elements = {}", file=f) + print("total_badness = {}", file=f) + print("quality_histogram = {}", file=f) for _file, _func in ((gf, getResultFunc(gf)) for gf in _geofiles): start = time.time() print("write", _file) mps = getMeshingparameters(_file) if not mps: continue - results = [_func(generateMesh(_file, mp)) for mp in mps] + results = [_func(generateMesh(_file, mp), mp) for mp in mps] print("number_elements['{}'] = {}".format(_file, "(" + ",".join((str(r["number_elements"]) for r in results)) + ")"), file=f) + print("total_badness['{}'] = {}".format(_file, "(" + ",".join((str(r["total_badness"]) for r in results)) + ")"), file=f) + print("quality_histogram['{}'] = {}".format(_file, "(" + ",".join((str(r["quality_histogram"]) for r in results)) + ")"), file=f) print("needed", time.time() - start, "seconds") From 18070c9f03072cadffe7baed4ba4045dd9ea680e Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Fri, 4 Oct 2019 13:09:18 +0200 Subject: [PATCH 006/120] fix for opencascade 7.4.0 --- libsrc/occ/occgeom.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/libsrc/occ/occgeom.hpp b/libsrc/occ/occgeom.hpp index d2370909..750c6e29 100644 --- a/libsrc/occ/occgeom.hpp +++ b/libsrc/occ/occgeom.hpp @@ -73,7 +73,6 @@ #include "ShapeUpgrade_ShellSewing.hxx" #include "ShapeFix_Shape.hxx" #include "ShapeFix_Wireframe.hxx" -#include "BRepMesh.hxx" #include "BRepMesh_IncrementalMesh.hxx" #include "BRepBndLib.hxx" #include "Bnd_Box.hxx" From 01e059ece4ce1a198e2ea5358fbcad1222bb36d7 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Fri, 4 Oct 2019 14:55:36 +0200 Subject: [PATCH 007/120] some optimizations for CalcLocalH in occ mesher --- libsrc/occ/occgenmesh.cpp | 73 ++++++++++++++++++++------------------- 1 file changed, 38 insertions(+), 35 deletions(-) diff --git a/libsrc/occ/occgenmesh.cpp b/libsrc/occ/occgenmesh.cpp index fb224793..45721490 100644 --- a/libsrc/occ/occgenmesh.cpp +++ b/libsrc/occ/occgenmesh.cpp @@ -69,7 +69,7 @@ namespace netgen void RestrictHTriangle (gp_Pnt2d & par0, gp_Pnt2d & par1, gp_Pnt2d & par2, - BRepLProp_SLProps * prop, Mesh & mesh, int depth, double h, + BRepLProp_SLProps * prop, BRepLProp_SLProps * prop2, Mesh & mesh, int depth, double h, const MeshingParameters & mparam) { int ls = -1; @@ -112,41 +112,41 @@ namespace netgen { double curvature = 0; - prop->SetParameters (parmid.X(), parmid.Y()); - if (!prop->IsCurvatureDefined()) + prop2->SetParameters (parmid.X(), parmid.Y()); + if (!prop2->IsCurvatureDefined()) { (*testout) << "curvature not defined!" << endl; return; } - curvature = max(fabs(prop->MinCurvature()), - fabs(prop->MaxCurvature())); + curvature = max(fabs(prop2->MinCurvature()), + fabs(prop2->MaxCurvature())); - prop->SetParameters (par0.X(), par0.Y()); - if (!prop->IsCurvatureDefined()) + prop2->SetParameters (par0.X(), par0.Y()); + if (!prop2->IsCurvatureDefined()) { (*testout) << "curvature not defined!" << endl; return; } - curvature = max(curvature,max(fabs(prop->MinCurvature()), - fabs(prop->MaxCurvature()))); + curvature = max(curvature,max(fabs(prop2->MinCurvature()), + fabs(prop2->MaxCurvature()))); - prop->SetParameters (par1.X(), par1.Y()); - if (!prop->IsCurvatureDefined()) + prop2->SetParameters (par1.X(), par1.Y()); + if (!prop2->IsCurvatureDefined()) { (*testout) << "curvature not defined!" << endl; return; } - curvature = max(curvature,max(fabs(prop->MinCurvature()), - fabs(prop->MaxCurvature()))); + curvature = max(curvature,max(fabs(prop2->MinCurvature()), + fabs(prop2->MaxCurvature()))); - prop->SetParameters (par2.X(), par2.Y()); - if (!prop->IsCurvatureDefined()) + prop2->SetParameters (par2.X(), par2.Y()); + if (!prop2->IsCurvatureDefined()) { (*testout) << "curvature not defined!" << endl; return; } - curvature = max(curvature,max(fabs(prop->MinCurvature()), - fabs(prop->MaxCurvature()))); + curvature = max(curvature,max(fabs(prop2->MinCurvature()), + fabs(prop2->MaxCurvature()))); //(*testout) << "curvature " << curvature << endl; @@ -165,7 +165,7 @@ namespace netgen return; - if (h > 30) return; + // if (h > 30) return; } if (h < maxside && depth < 10) @@ -181,20 +181,20 @@ namespace netgen if(ls == 0) { pm.SetX(0.5*(par1.X()+par2.X())); pm.SetY(0.5*(par1.Y()+par2.Y())); - RestrictHTriangle(pm, par2, par0, prop, mesh, depth+1, h, mparam); - RestrictHTriangle(pm, par0, par1, prop, mesh, depth+1, h, mparam); + RestrictHTriangle(pm, par2, par0, prop, prop2, mesh, depth+1, h, mparam); + RestrictHTriangle(pm, par0, par1, prop, prop2, mesh, depth+1, h, mparam); } else if(ls == 1) { pm.SetX(0.5*(par0.X()+par2.X())); pm.SetY(0.5*(par0.Y()+par2.Y())); - RestrictHTriangle(pm, par1, par2, prop, mesh, depth+1, h, mparam); - RestrictHTriangle(pm, par0, par1, prop, mesh, depth+1, h, mparam); + RestrictHTriangle(pm, par1, par2, prop, prop2, mesh, depth+1, h, mparam); + RestrictHTriangle(pm, par0, par1, prop, prop2, mesh, depth+1, h, mparam); } else if(ls == 2) { pm.SetX(0.5*(par0.X()+par1.X())); pm.SetY(0.5*(par0.Y()+par1.Y())); - RestrictHTriangle(pm, par1, par2, prop, mesh, depth+1, h, mparam); - RestrictHTriangle(pm, par2, par0, prop, mesh, depth+1, h, mparam); + RestrictHTriangle(pm, par1, par2, prop, prop2, mesh, depth+1, h, mparam); + RestrictHTriangle(pm, par2, par0, prop, prop2, mesh, depth+1, h, mparam); } } @@ -994,6 +994,8 @@ namespace netgen void OCCSetLocalMeshSize(OCCGeometry & geom, Mesh & mesh, const MeshingParameters & mparam, const OCCParameters& occparam) { + static Timer t1("OCCSetLocalMeshSize"); + RegionTimer regt(t1); mesh.SetGlobalH (mparam.maxh); mesh.SetMinimalH (mparam.minh); @@ -1029,8 +1031,15 @@ namespace netgen multithread.task = "Setting local mesh size (elements per edge)"; - // setting elements per edge + // Philippose - 23/01/2009 + // Find all the parent faces of a given edge + // and limit the mesh size of the edge based on the + // mesh size limit of the face + TopTools_IndexedDataMapOfShapeListOfShape edge_face_map; + edge_face_map.Clear(); + TopExp::MapShapesAndAncestors(geom.shape, TopAbs_EDGE, TopAbs_FACE, edge_face_map); + // setting elements per edge for (int i = 1; i <= nedges && !multithread.terminate; i++) { TopoDS_Edge e = TopoDS::Edge (geom.emap(i)); @@ -1050,14 +1059,6 @@ namespace netgen double localh = len/mparam.segmentsperedge; double s0, s1; - // Philippose - 23/01/2009 - // Find all the parent faces of a given edge - // and limit the mesh size of the edge based on the - // mesh size limit of the face - TopTools_IndexedDataMapOfShapeListOfShape edge_face_map; - edge_face_map.Clear(); - - TopExp::MapShapesAndAncestors(geom.shape, TopAbs_EDGE, TopAbs_FACE, edge_face_map); const TopTools_ListOfShape& parent_faces = edge_face_map.FindFromKey(e); TopTools_ListIteratorOfListOfShape parent_face_list; @@ -1140,7 +1141,9 @@ namespace netgen } BRepAdaptor_Surface sf(face, Standard_True); - BRepLProp_SLProps prop(sf, 2, 1e-5); + // one prop for evaluating and one for derivatives + BRepLProp_SLProps prop(sf, 0, 1e-5); + BRepLProp_SLProps prop2(sf, 2, 1e-5); int ntriangles = triangulation -> NbTriangles(); for (int j = 1; j <= ntriangles; j++) @@ -1161,7 +1164,7 @@ namespace netgen //maxside = max (maxside, p[1].Distance(p[2])); //cout << "\rFace " << i << " pos11 ntriangles " << ntriangles << " maxside " << maxside << flush; - RestrictHTriangle (par[0], par[1], par[2], &prop, mesh, 0, 0, mparam); + RestrictHTriangle (par[0], par[1], par[2], &prop, &prop2, mesh, 0, 0, mparam); //cout << "\rFace " << i << " pos12 ntriangles " << ntriangles << flush; } } From dbe0aaa1bcf36c590152bff36c0967d62470db87 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Fri, 4 Oct 2019 15:33:24 +0200 Subject: [PATCH 008/120] Sort table after parallel creation --- libsrc/meshing/meshclass.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libsrc/meshing/meshclass.cpp b/libsrc/meshing/meshclass.cpp index 3a4a930c..46e299ab 100644 --- a/libsrc/meshing/meshclass.cpp +++ b/libsrc/meshing/meshclass.cpp @@ -1912,6 +1912,11 @@ namespace netgen }); auto elsonpoint = creator.MoveTable(); + + ParallelFor (Range(elsonpoint), [&] (auto i) + { + QuickSort(elsonpoint[i]); + }); NgArray numonpoint(np); /* From de06f21bde15ff79177ebe7eae34b2c428370018 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joachim=20Sch=C3=B6berl?= Date: Sat, 5 Oct 2019 23:02:32 +0200 Subject: [PATCH 009/120] adding Mesh.AddRegion --- libsrc/meshing/meshclass.cpp | 15 +++++++++++++++ libsrc/meshing/meshclass.hpp | 3 +++ libsrc/meshing/python_mesh.cpp | 32 +++++++++++++++++++++++--------- 3 files changed, 41 insertions(+), 9 deletions(-) diff --git a/libsrc/meshing/meshclass.cpp b/libsrc/meshing/meshclass.cpp index 46e299ab..25b60e88 100644 --- a/libsrc/meshing/meshclass.cpp +++ b/libsrc/meshing/meshclass.cpp @@ -6563,6 +6563,21 @@ namespace netgen return defaultstring; } + + NgArray & Mesh :: GetRegionNamesCD (int codim) + { + switch (codim) + { + case 0: return materials; + case 1: return bcnames; + case 2: return cd2names; + case 3: return cd3names; + default: throw Exception("don't have regions of co-dimension "+ToString(codim)); + } + } + + + void Mesh :: SetUserData(const char * id, NgArray & data) { if(userdata_int.Used(id)) diff --git a/libsrc/meshing/meshclass.hpp b/libsrc/meshing/meshclass.hpp index 74381b7f..372430ee 100644 --- a/libsrc/meshing/meshclass.hpp +++ b/libsrc/meshing/meshclass.hpp @@ -687,6 +687,9 @@ namespace netgen string * GetBCNamePtr (int bcnr) const { return (bcnr < bcnames.Size() && bcnames[bcnr]) ? bcnames[bcnr] : &default_bc; } + + NgArray & GetRegionNamesCD (int codim); + /// void ClearFaceDescriptors() { facedecoding.SetSize(0); } diff --git a/libsrc/meshing/python_mesh.cpp b/libsrc/meshing/python_mesh.cpp index 9a90d3f1..01d2fcc9 100644 --- a/libsrc/meshing/python_mesh.cpp +++ b/libsrc/meshing/python_mesh.cpp @@ -321,35 +321,35 @@ DLL_HEADER void ExportNetgenMeshing(py::module &m) ; py::class_(m, "Element2D") - .def(py::init ([](int index, py::list vertices) + .def(py::init ([](int index, std::vector vertices) { Element2d * newel = nullptr; - if (py::len(vertices) == 3) + if (vertices.size() == 3) { newel = new Element2d(TRIG); for (int i = 0; i < 3; i++) - (*newel)[i] = py::extract(vertices[i])(); + (*newel)[i] = vertices[i]; newel->SetIndex(index); } - else if (py::len(vertices) == 4) + else if (vertices.size() == 4) { newel = new Element2d(QUAD); for (int i = 0; i < 4; i++) - (*newel)[i] = py::extract(vertices[i])(); + (*newel)[i] = vertices[i]; newel->SetIndex(index); } - else if (py::len(vertices) == 6) + else if (vertices.size() == 6) { newel = new Element2d(TRIG6); for(int i = 0; i<6; i++) - (*newel)[i] = py::extract(vertices[i])(); + (*newel)[i] = vertices[i]; newel->SetIndex(index); } - else if (py::len(vertices) == 8) + else if (vertices.size() == 8) { newel = new Element2d(QUAD8); for(int i = 0; i<8; i++) - (*newel)[i] = py::extract(vertices[i])(); + (*newel)[i] = vertices[i]; newel->SetIndex(index); } else @@ -801,6 +801,20 @@ DLL_HEADER void ExportNetgenMeshing(py::module &m) return self.Compress (); } ,py::call_guard()) + .def ("AddRegion", [] (Mesh & self, string name, int dim) -> int + { + auto & regionnames = self.GetRegionNamesCD(self.GetDimension()-dim); + regionnames.Append (new string(name)); + int idx = regionnames.Size(); + if (dim == 2) + { + FaceDescriptor fd; + fd.SetBCName(regionnames.Last()); + fd.SetBCProperty(idx); + self.AddFaceDescriptor(fd); + } + return idx; + }, py::arg("name"), py::arg("dim")) .def ("SetBCName", &Mesh::SetBCName) .def ("GetBCName", FunctionPointer([](Mesh & self, int bc)->string From 18830a0a718dc3a9953842060b62d8481e4b0f91 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 7 Oct 2019 09:45:08 +0000 Subject: [PATCH 010/120] Check for number of 1d and 2d elements Store test results in .json --- tests/pytest/results.json | 1444 ++++++++++++++++++++++++++++++++ tests/pytest/results.py | 108 --- tests/pytest/test_tutorials.py | 107 +-- 3 files changed, 1501 insertions(+), 158 deletions(-) create mode 100644 tests/pytest/results.json delete mode 100644 tests/pytest/results.py diff --git a/tests/pytest/results.json b/tests/pytest/results.json new file mode 100644 index 00000000..7dba5add --- /dev/null +++ b/tests/pytest/results.json @@ -0,0 +1,1444 @@ +{ + "boundarycondition.geo": [ + { + "ne1d": 74, + "ne2d": 54, + "ne3d": 50, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 5, 8, 13, 3, 9, 5, 0, 1, 1]", + "total_badness": 74.774553826 + }, + { + "ne1d": 59, + "ne2d": 37, + "ne3d": 22, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 0, 0, 8, 0, 0, 0, 0]", + "total_badness": 35.161528768 + }, + { + "ne1d": 59, + "ne2d": 37, + "ne3d": 22, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 0, 0, 8, 0, 0, 0, 0]", + "total_badness": 35.098288788 + }, + { + "ne1d": 74, + "ne2d": 54, + "ne3d": 50, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 5, 8, 13, 3, 9, 5, 0, 1, 1]", + "total_badness": 74.77454941 + }, + { + "ne1d": 118, + "ne2d": 140, + "ne3d": 165, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 5, 13, 13, 25, 31, 25, 20, 17, 12, 1]", + "total_badness": 228.72078637 + }, + { + "ne1d": 181, + "ne2d": 323, + "ne3d": 507, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 9, 20, 35, 56, 56, 81, 90, 83, 59, 15]", + "total_badness": 661.00817809 + } + ], + "boxcyl.geo": [ + { + "ne1d": 190, + "ne2d": 468, + "ne3d": 858, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 31, 91, 73, 79, 87, 106, 114, 102, 89, 66, 18]", + "total_badness": 1232.0426735 + }, + { + "ne1d": 94, + "ne2d": 114, + "ne3d": 158, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 7, 10, 16, 5, 8, 15, 13, 17, 13, 9, 25, 7, 11]", + "total_badness": 247.68310336 + }, + { + "ne1d": 136, + "ne2d": 222, + "ne3d": 384, + "quality_histogram": "[0, 0, 1, 0, 3, 3, 3, 6, 11, 17, 21, 28, 34, 44, 68, 64, 49, 19, 11, 2]", + "total_badness": 598.99833044 + }, + { + "ne1d": 190, + "ne2d": 468, + "ne3d": 850, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 29, 87, 73, 75, 86, 106, 97, 112, 87, 75, 21]", + "total_badness": 1214.229893 + }, + { + "ne1d": 284, + "ne2d": 938, + "ne3d": 3761, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 20, 59, 118, 250, 456, 628, 751, 755, 564, 153]", + "total_badness": 4693.1208525 + }, + { + "ne1d": 456, + "ne2d": 2496, + "ne3d": 18969, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 5, 8, 15, 43, 130, 353, 876, 1713, 3018, 4122, 4317, 3271, 1098]", + "total_badness": 23072.833527 + } + ], + "circle_on_cube.geo": [ + { + "ne1d": 94, + "ne2d": 174, + "ne3d": 646, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 10, 23, 48, 81, 117, 100, 123, 86, 43, 10]", + "total_badness": 859.43881883 + }, + { + "ne1d": 40, + "ne2d": 38, + "ne3d": 46, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 2, 4, 8, 8, 6, 7, 5, 1, 2, 1, 0, 0, 0, 0]", + "total_badness": 97.326231112 + }, + { + "ne1d": 62, + "ne2d": 94, + "ne3d": 182, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 14, 21, 35, 35, 33, 19, 9, 8, 0]", + "total_badness": 258.4064329 + }, + { + "ne1d": 94, + "ne2d": 174, + "ne3d": 621, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 11, 45, 59, 93, 114, 121, 104, 53, 14]", + "total_badness": 804.68562065 + }, + { + "ne1d": 138, + "ne2d": 382, + "ne3d": 2054, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 15, 57, 129, 210, 330, 426, 450, 321, 109]", + "total_badness": 2526.4427939 + }, + { + "ne1d": 224, + "ne2d": 944, + "ne3d": 11988, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 17, 33, 82, 226, 556, 1140, 1929, 2512, 2801, 2061, 628]", + "total_badness": 14608.275962 + } + ], + "cone.geo": [ + { + "ne1d": 64, + "ne2d": 722, + "ne3d": 1231, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 8, 22, 29, 50, 88, 118, 123, 158, 175, 140, 137, 111, 52, 19]", + "total_badness": 1853.3096959 + }, + { + "ne1d": 32, + "ne2d": 220, + "ne3d": 753, + "quality_histogram": "[0, 1, 28, 40, 63, 54, 61, 53, 61, 59, 67, 47, 38, 52, 39, 23, 27, 21, 16, 3]", + "total_badness": 2038.817175 + }, + { + "ne1d": 48, + "ne2d": 428, + "ne3d": 755, + "quality_histogram": "[1, 33, 42, 29, 32, 26, 29, 27, 64, 81, 73, 80, 67, 48, 55, 18, 23, 16, 11, 0]", + "total_badness": 2283.6586444 + }, + { + "ne1d": 64, + "ne2d": 722, + "ne3d": 1208, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 15, 22, 47, 81, 110, 131, 144, 172, 150, 145, 112, 62, 14]", + "total_badness": 1783.4859474 + }, + { + "ne1d": 96, + "ne2d": 1660, + "ne3d": 4423, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 35, 88, 158, 276, 400, 584, 726, 802, 735, 464, 150]", + "total_badness": 5769.9946848 + }, + { + "ne1d": 160, + "ne2d": 4748, + "ne3d": 27126, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 13, 31, 83, 303, 735, 1519, 2944, 4316, 5668, 5807, 4355, 1349]", + "total_badness": 33434.663911 + } + ], + "cube.geo": [ + { + "ne1d": 24, + "ne2d": 12, + "ne3d": 6, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0]", + "total_badness": 9.1401272869 + }, + { + "ne1d": 24, + "ne2d": 12, + "ne3d": 6, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0]", + "total_badness": 9.1401272869 + }, + { + "ne1d": 24, + "ne2d": 12, + "ne3d": 6, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0]", + "total_badness": 9.1401272869 + }, + { + "ne1d": 24, + "ne2d": 12, + "ne3d": 6, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0]", + "total_badness": 9.1401272869 + }, + { + "ne1d": 48, + "ne2d": 36, + "ne3d": 57, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 2, 12, 14, 4, 12, 2, 2, 3, 0]", + "total_badness": 84.416883473 + }, + { + "ne1d": 72, + "ne2d": 118, + "ne3d": 184, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 10, 7, 19, 18, 37, 33, 33, 14, 6]", + "total_badness": 241.24676972 + } + ], + "cubeandring.geo": [ + { + "ne1d": 262, + "ne2d": 722, + "ne3d": 2188, + "quality_histogram": "[1, 9, 25, 36, 90, 100, 108, 114, 90, 73, 63, 100, 149, 190, 251, 264, 241, 168, 96, 20]", + "total_badness": 4412.1941358 + }, + { + "ne1d": 134, + "ne2d": 162, + "ne3d": 252, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 2, 1, 3, 8, 24, 28, 49, 38, 41, 29, 19, 7, 1]", + "total_badness": 365.81827351 + }, + { + "ne1d": 190, + "ne2d": 298, + "ne3d": 613, + "quality_histogram": "[0, 0, 0, 0, 2, 0, 0, 4, 3, 17, 49, 47, 61, 93, 110, 82, 52, 60, 28, 5]", + "total_badness": 897.54658869 + }, + { + "ne1d": 262, + "ne2d": 722, + "ne3d": 2054, + "quality_histogram": "[0, 3, 12, 28, 61, 84, 109, 97, 80, 55, 48, 68, 112, 166, 245, 277, 249, 212, 116, 32]", + "total_badness": 3795.4750393 + }, + { + "ne1d": 378, + "ne2d": 1412, + "ne3d": 7752, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 1, 9, 13, 27, 56, 136, 281, 548, 921, 1256, 1534, 1557, 1091, 320]", + "total_badness": 9761.7065165 + }, + { + "ne1d": 624, + "ne2d": 3942, + "ne3d": 38282, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 10, 28, 117, 334, 795, 2026, 3889, 5942, 8057, 8537, 6447, 2097]", + "total_badness": 46825.777983 + } + ], + "cubeandspheres.geo": [ + { + "ne1d": 144, + "ne2d": 148, + "ne3d": 98, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 18, 19, 13, 20, 2, 9, 1, 0]", + "total_badness": 145.83375109 + }, + { + "ne1d": 144, + "ne2d": 150, + "ne3d": 100, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 7, 10, 16, 18, 15, 17, 6, 5, 4, 0]", + "total_badness": 146.646861 + }, + { + "ne1d": 144, + "ne2d": 148, + "ne3d": 98, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 6, 6, 19, 21, 12, 18, 5, 4, 4, 0]", + "total_badness": 145.14580662 + }, + { + "ne1d": 144, + "ne2d": 148, + "ne3d": 98, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 18, 19, 13, 20, 2, 9, 1, 0]", + "total_badness": 145.83375109 + }, + { + "ne1d": 264, + "ne2d": 386, + "ne3d": 365, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 6, 24, 31, 43, 39, 53, 35, 44, 51, 28, 9, 0]", + "total_badness": 553.03362076 + }, + { + "ne1d": 428, + "ne2d": 930, + "ne3d": 1080, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 19, 59, 37, 100, 136, 100, 123, 162, 160, 66, 65, 28, 22]", + "total_badness": 1684.1500639 + } + ], + "cubemcyl.geo": [ + { + "ne1d": 142, + "ne2d": 2488, + "ne3d": 20940, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 22, 78, 213, 367, 738, 1237, 1875, 2588, 3120, 3314, 3117, 2521, 1385, 365]", + "total_badness": 29036.424267 + }, + { + "ne1d": 64, + "ne2d": 642, + "ne3d": 3203, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 12, 17, 66, 128, 250, 364, 425, 515, 512, 463, 282, 137, 29]", + "total_badness": 4539.3174908 + }, + { + "ne1d": 102, + "ne2d": 1404, + "ne3d": 8421, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 7, 30, 87, 181, 362, 596, 792, 1120, 1271, 1262, 1165, 892, 516, 140]", + "total_badness": 11848.69595 + }, + { + "ne1d": 142, + "ne2d": 2488, + "ne3d": 19608, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 6, 40, 75, 246, 608, 1243, 2030, 2896, 3459, 3612, 2986, 1887, 518]", + "total_badness": 25605.226153 + }, + { + "ne1d": 210, + "ne2d": 5508, + "ne3d": 88843, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 23, 113, 364, 946, 2450, 5445, 10022, 14690, 18368, 18746, 13521, 4155]", + "total_badness": 109927.85826 + }, + { + "ne1d": 362, + "ne2d": 15120, + "ne3d": 521218, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 25, 119, 374, 1224, 3269, 9296, 24328, 50521, 82283, 109285, 119759, 91721, 29013]", + "total_badness": 633985.71695 + } + ], + "cubemsphere.geo": [ + { + "ne1d": 90, + "ne2d": 698, + "ne3d": 4877, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 6, 28, 55, 96, 194, 261, 445, 559, 740, 798, 698, 576, 333, 87]", + "total_badness": 6790.976699 + }, + { + "ne1d": 44, + "ne2d": 280, + "ne3d": 783, + "quality_histogram": "[0, 0, 0, 0, 1, 2, 6, 19, 38, 61, 70, 94, 100, 91, 104, 76, 58, 38, 24, 1]", + "total_badness": 1271.4564508 + }, + { + "ne1d": 68, + "ne2d": 402, + "ne3d": 1571, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 12, 20, 68, 134, 170, 243, 246, 237, 214, 145, 59, 17]", + "total_badness": 2230.374452 + }, + { + "ne1d": 90, + "ne2d": 698, + "ne3d": 4583, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 9, 25, 77, 128, 251, 516, 657, 826, 857, 685, 432, 116]", + "total_badness": 5995.4068967 + }, + { + "ne1d": 146, + "ne2d": 1490, + "ne3d": 17783, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 11, 31, 90, 203, 496, 1110, 1957, 3109, 3695, 3723, 2641, 714]", + "total_badness": 22085.583903 + }, + { + "ne1d": 248, + "ne2d": 4356, + "ne3d": 113522, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 9, 35, 117, 341, 885, 2307, 5764, 11384, 18322, 23667, 25754, 19043, 5893]", + "total_badness": 138835.8933 + } + ], + "cylinder.geo": [ + { + "ne1d": 52, + "ne2d": 288, + "ne3d": 413, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 10, 18, 31, 43, 56, 76, 61, 45, 47, 18, 5]", + "total_badness": 584.63640908 + }, + { + "ne1d": 24, + "ne2d": 66, + "ne3d": 103, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 7, 15, 14, 21, 32, 10, 1]", + "total_badness": 127.27629078 + }, + { + "ne1d": 36, + "ne2d": 152, + "ne3d": 437, + "quality_histogram": "[0, 0, 14, 22, 37, 32, 30, 36, 31, 29, 34, 25, 27, 28, 22, 16, 33, 9, 9, 3]", + "total_badness": 1146.634165 + }, + { + "ne1d": 52, + "ne2d": 288, + "ne3d": 411, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 15, 29, 37, 61, 76, 59, 48, 52, 21, 3]", + "total_badness": 574.34537671 + }, + { + "ne1d": 76, + "ne2d": 636, + "ne3d": 1155, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 10, 16, 50, 99, 120, 164, 206, 224, 139, 105, 18]", + "total_badness": 1536.3995031 + }, + { + "ne1d": 124, + "ne2d": 1672, + "ne3d": 8102, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 13, 53, 167, 414, 787, 1233, 1788, 1856, 1334, 453]", + "total_badness": 9877.1010566 + } + ], + "cylsphere.geo": [ + { + "ne1d": 104, + "ne2d": 496, + "ne3d": 711, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 10, 16, 35, 64, 89, 107, 102, 100, 57, 59, 50, 17, 2]", + "total_badness": 1105.7991926 + }, + { + "ne1d": 48, + "ne2d": 140, + "ne3d": 225, + "quality_histogram": "[0, 0, 1, 13, 20, 34, 20, 21, 7, 6, 2, 8, 13, 18, 10, 23, 13, 7, 9, 0]", + "total_badness": 584.42426831 + }, + { + "ne1d": 72, + "ne2d": 324, + "ne3d": 665, + "quality_histogram": "[0, 1, 9, 14, 21, 37, 57, 76, 63, 57, 53, 60, 32, 54, 23, 35, 39, 16, 13, 5]", + "total_badness": 1528.6973752 + }, + { + "ne1d": 104, + "ne2d": 496, + "ne3d": 709, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 6, 15, 27, 62, 89, 110, 109, 90, 68, 66, 45, 15, 4]", + "total_badness": 1092.2233629 + }, + { + "ne1d": 152, + "ne2d": 1084, + "ne3d": 2865, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 3, 28, 44, 88, 157, 276, 340, 471, 505, 493, 358, 99]", + "total_badness": 3710.287399 + }, + { + "ne1d": 248, + "ne2d": 2820, + "ne3d": 17765, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 15, 48, 129, 362, 859, 1699, 2843, 3786, 4041, 3023, 954]", + "total_badness": 21668.180843 + } + ], + "ellipsoid.geo": [ + { + "ne1d": 0, + "ne2d": 704, + "ne3d": 1262, + "quality_histogram": "[0, 0, 0, 0, 1, 0, 8, 26, 39, 86, 118, 127, 178, 146, 148, 147, 107, 76, 43, 12]", + "total_badness": 1984.8094939 + }, + { + "ne1d": 0, + "ne2d": 192, + "ne3d": 942, + "quality_histogram": "[22, 148, 137, 126, 91, 56, 81, 69, 47, 36, 29, 32, 23, 13, 12, 9, 5, 5, 1, 0]", + "total_badness": 5747.5204438 + }, + { + "ne1d": 0, + "ne2d": 394, + "ne3d": 598, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 15, 17, 44, 69, 81, 100, 91, 53, 54, 39, 20, 9]", + "total_badness": 903.65236615 + }, + { + "ne1d": 0, + "ne2d": 704, + "ne3d": 1256, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 18, 35, 52, 103, 128, 169, 173, 155, 154, 121, 81, 49, 18]", + "total_badness": 1908.051206 + }, + { + "ne1d": 0, + "ne2d": 1618, + "ne3d": 5592, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 22, 74, 178, 307, 491, 711, 944, 1067, 921, 675, 199]", + "total_badness": 7199.7867843 + }, + { + "ne1d": 0, + "ne2d": 4236, + "ne3d": 41345, + "quality_histogram": "[0, 0, 0, 0, 3, 20, 108, 266, 403, 644, 1110, 1904, 2921, 4621, 6100, 6869, 6568, 5527, 3324, 957]", + "total_badness": 56476.648492 + } + ], + "ellipticcone.geo": [ + { + "ne1d": 174, + "ne2d": 1556, + "ne3d": 5213, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 7, 26, 47, 141, 216, 357, 555, 760, 902, 879, 712, 459, 151]", + "total_badness": 6957.997336 + }, + { + "ne1d": 86, + "ne2d": 380, + "ne3d": 587, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 8, 8, 14, 33, 55, 67, 67, 76, 85, 69, 56, 32, 14]", + "total_badness": 853.7762584 + }, + { + "ne1d": 130, + "ne2d": 864, + "ne3d": 1780, + "quality_histogram": "[0, 0, 0, 1, 3, 4, 12, 22, 34, 43, 79, 96, 136, 191, 227, 251, 258, 253, 129, 41]", + "total_badness": 2537.0484182 + }, + { + "ne1d": 174, + "ne2d": 1556, + "ne3d": 4971, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 17, 53, 107, 248, 431, 665, 897, 978, 791, 593, 187]", + "total_badness": 6359.4493283 + }, + { + "ne1d": 258, + "ne2d": 3454, + "ne3d": 13441, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 8, 29, 62, 198, 341, 643, 1044, 1682, 2259, 2506, 2486, 1671, 511]", + "total_badness": 17201.441954 + }, + { + "ne1d": 432, + "ne2d": 9518, + "ne3d": 69596, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 40, 121, 306, 826, 1862, 3802, 7575, 11204, 14503, 14913, 11126, 3312]", + "total_badness": 85930.227173 + } + ], + "ellipticcyl.geo": [ + { + "ne1d": 156, + "ne2d": 994, + "ne3d": 2275, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 10, 26, 44, 84, 125, 208, 263, 341, 376, 326, 261, 175, 35]", + "total_badness": 3156.3970605 + }, + { + "ne1d": 76, + "ne2d": 238, + "ne3d": 325, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 18, 28, 26, 37, 71, 54, 46, 27, 10, 2]", + "total_badness": 459.39040523 + }, + { + "ne1d": 116, + "ne2d": 596, + "ne3d": 1114, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 10, 17, 41, 80, 144, 172, 205, 165, 155, 97, 25]", + "total_badness": 1483.3007518 + }, + { + "ne1d": 156, + "ne2d": 994, + "ne3d": 2199, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 8, 35, 43, 95, 163, 238, 314, 377, 378, 307, 193, 45]", + "total_badness": 2944.2434449 + }, + { + "ne1d": 232, + "ne2d": 2198, + "ne3d": 8225, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 5, 9, 46, 106, 269, 605, 988, 1459, 1629, 1655, 1138, 313]", + "total_badness": 10297.191925 + }, + { + "ne1d": 388, + "ne2d": 6124, + "ne3d": 55078, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 10, 28, 97, 356, 939, 2483, 5114, 8528, 11618, 12908, 9908, 3088]", + "total_badness": 66822.93034 + } + ], + "fichera.geo": [ + { + "ne1d": 50, + "ne2d": 38, + "ne3d": 40, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 4, 3, 5, 7, 8, 2, 1, 0, 2]", + "total_badness": 62.361996883 + }, + { + "ne1d": 42, + "ne2d": 24, + "ne3d": 18, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 6, 1, 0, 0, 0, 0]", + "total_badness": 26.546480075 + }, + { + "ne1d": 42, + "ne2d": 24, + "ne3d": 18, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 6, 1, 0, 0, 0, 0]", + "total_badness": 26.546480075 + }, + { + "ne1d": 50, + "ne2d": 38, + "ne3d": 40, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 4, 3, 5, 7, 8, 2, 1, 0, 2]", + "total_badness": 62.361996883 + }, + { + "ne1d": 96, + "ne2d": 118, + "ne3d": 208, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 6, 10, 16, 24, 36, 33, 41, 30, 6]", + "total_badness": 266.1986561 + }, + { + "ne1d": 144, + "ne2d": 274, + "ne3d": 514, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 14, 32, 55, 87, 97, 91, 71, 52, 13]", + "total_badness": 666.67507269 + } + ], + "frame.step": [ + { + "ne1d": 12694, + "ne2d": 39776, + "ne3d": 220900, + "quality_histogram": "[2, 7, 7, 9, 9, 30, 241, 749, 1682, 3420, 6081, 10465, 17172, 25221, 31864, 35916, 35505, 29651, 18174, 4695]", + "total_badness": 300459.85413 + }, + { + "ne1d": 6026, + "ne2d": 11146, + "ne3d": 30128, + "quality_histogram": "[4, 4, 5, 11, 20, 39, 120, 286, 624, 1025, 1679, 2533, 3356, 4137, 4506, 4206, 3471, 2402, 1366, 334]", + "total_badness": 44746.768359 + }, + { + "ne1d": 9704, + "ne2d": 24660, + "ne3d": 85967, + "quality_histogram": "[1, 6, 3, 11, 7, 34, 76, 191, 485, 1084, 2525, 4810, 7803, 11031, 13503, 14079, 12909, 10074, 5899, 1436]", + "total_badness": 118291.03172 + } + ], + "hinge.stl": [ + { + "ne1d": 456, + "ne2d": 1230, + "ne3d": 1990, + "quality_histogram": "[0, 0, 0, 0, 1, 2, 3, 9, 21, 47, 69, 116, 164, 237, 326, 280, 298, 225, 151, 41]", + "total_badness": 2772.6154636 + }, + { + "ne1d": 398, + "ne2d": 1030, + "ne3d": 1389, + "quality_histogram": "[0, 0, 0, 0, 2, 5, 18, 35, 47, 74, 111, 126, 131, 179, 189, 185, 134, 93, 46, 14]", + "total_badness": 2178.5663259 + }, + { + "ne1d": 422, + "ne2d": 1094, + "ne3d": 1530, + "quality_histogram": "[0, 0, 0, 0, 0, 7, 14, 43, 46, 79, 94, 164, 155, 163, 212, 180, 180, 118, 61, 14]", + "total_badness": 2364.3186941 + }, + { + "ne1d": 456, + "ne2d": 1230, + "ne3d": 1988, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 2, 5, 19, 39, 62, 112, 177, 236, 314, 304, 295, 236, 140, 45]", + "total_badness": 2747.770553 + }, + { + "ne1d": 498, + "ne2d": 1396, + "ne3d": 2903, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 4, 13, 31, 64, 136, 221, 397, 484, 533, 504, 399, 114]", + "total_badness": 3701.6633824 + }, + { + "ne1d": 538, + "ne2d": 1670, + "ne3d": 4609, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 14, 45, 103, 220, 448, 693, 963, 1055, 803, 257]", + "total_badness": 5628.2514122 + } + ], + "lshape3d.geo": [ + { + "ne1d": 44, + "ne2d": 28, + "ne3d": 18, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 12, 0, 3, 0, 0, 0, 0]", + "total_badness": 27.289065401 + }, + { + "ne1d": 36, + "ne2d": 20, + "ne3d": 12, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 6, 1, 0, 0, 0, 0, 0]", + "total_badness": 18.961481515 + }, + { + "ne1d": 36, + "ne2d": 20, + "ne3d": 12, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 6, 1, 0, 0, 0, 0, 0]", + "total_badness": 18.961481515 + }, + { + "ne1d": 44, + "ne2d": 28, + "ne3d": 18, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 12, 0, 3, 0, 0, 0, 0]", + "total_badness": 27.289065401 + }, + { + "ne1d": 80, + "ne2d": 76, + "ne3d": 88, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 10, 9, 21, 23, 7, 6, 1, 4]", + "total_badness": 121.1271849 + }, + { + "ne1d": 122, + "ne2d": 204, + "ne3d": 331, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 7, 21, 26, 41, 39, 61, 57, 46, 24, 7]", + "total_badness": 443.95235947 + } + ], + "manyholes.geo": [ + { + "ne1d": 5886, + "ne2d": 48038, + "ne3d": 179405, + "quality_histogram": "[0, 0, 2, 1, 8, 27, 65, 207, 559, 1418, 3370, 7627, 12710, 20134, 27407, 30177, 29994, 24813, 16843, 4043]", + "total_badness": 238774.17579 + }, + { + "ne1d": 2746, + "ne2d": 13838, + "ne3d": 29184, + "quality_histogram": "[0, 0, 0, 1, 5, 26, 45, 181, 387, 817, 1524, 2280, 3331, 4394, 4120, 3700, 3202, 2567, 1880, 724]", + "total_badness": 42098.721268 + }, + { + "ne1d": 4106, + "ne2d": 27992, + "ne3d": 70789, + "quality_histogram": "[0, 0, 0, 2, 30, 78, 189, 443, 837, 1706, 2919, 4402, 7061, 9455, 10197, 10269, 9498, 7395, 4474, 1834]", + "total_badness": 100213.31676 + } + ], + "manyholes2.geo": [ + { + "ne1d": 10202, + "ne2d": 55340, + "ne3d": 128088, + "quality_histogram": "[0, 0, 0, 0, 7, 30, 95, 288, 823, 2105, 4573, 7847, 11840, 18008, 18739, 18350, 16782, 14747, 10264, 3590]", + "total_badness": 176960.02706 + } + ], + "matrix.geo": [ + { + "ne1d": 174, + "ne2d": 1194, + "ne3d": 5295, + "quality_histogram": "[0, 0, 32, 147, 135, 100, 130, 147, 177, 237, 361, 409, 554, 617, 583, 555, 457, 385, 212, 57]", + "total_badness": 9761.5954211 + }, + { + "ne1d": 106, + "ne2d": 600, + "ne3d": 2001, + "quality_histogram": "[0, 3, 20, 65, 122, 160, 137, 169, 184, 189, 172, 190, 184, 137, 89, 53, 45, 54, 20, 8]", + "total_badness": 4865.5803344 + }, + { + "ne1d": 132, + "ne2d": 828, + "ne3d": 2783, + "quality_histogram": "[0, 0, 13, 51, 108, 146, 173, 161, 225, 265, 333, 287, 211, 205, 173, 161, 117, 93, 45, 16]", + "total_badness": 5980.1022567 + }, + { + "ne1d": 174, + "ne2d": 1194, + "ne3d": 5105, + "quality_histogram": "[0, 0, 20, 134, 116, 78, 117, 149, 152, 188, 285, 371, 498, 547, 578, 611, 503, 441, 254, 63]", + "total_badness": 9068.0076408 + }, + { + "ne1d": 248, + "ne2d": 2324, + "ne3d": 16255, + "quality_histogram": "[0, 0, 0, 0, 0, 5, 24, 75, 128, 202, 346, 678, 1062, 1517, 2149, 2515, 2754, 2540, 1722, 538]", + "total_badness": 21663.043545 + }, + { + "ne1d": 418, + "ne2d": 5966, + "ne3d": 100388, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 6, 24, 71, 195, 503, 1186, 2824, 5989, 10497, 16251, 20497, 21258, 16049, 5037]", + "total_badness": 124129.95267 + } + ], + "ortho.geo": [ + { + "ne1d": 24, + "ne2d": 12, + "ne3d": 6, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0]", + "total_badness": 9.1401272869 + }, + { + "ne1d": 24, + "ne2d": 12, + "ne3d": 6, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0]", + "total_badness": 9.1401272869 + }, + { + "ne1d": 24, + "ne2d": 12, + "ne3d": 6, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0]", + "total_badness": 9.1401272869 + }, + { + "ne1d": 24, + "ne2d": 12, + "ne3d": 6, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0]", + "total_badness": 9.1401272869 + }, + { + "ne1d": 48, + "ne2d": 36, + "ne3d": 57, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 8, 9, 8, 14, 5, 3, 1, 0]", + "total_badness": 83.060809673 + }, + { + "ne1d": 72, + "ne2d": 116, + "ne3d": 180, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 14, 9, 27, 39, 31, 30, 17, 5]", + "total_badness": 233.34798934 + } + ], + "part1.stl": [ + { + "ne1d": 170, + "ne2d": 454, + "ne3d": 1228, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 5, 20, 38, 51, 111, 128, 195, 211, 190, 152, 90, 31]", + "total_badness": 1672.6379358 + }, + { + "ne1d": 146, + "ne2d": 378, + "ne3d": 629, + "quality_histogram": "[0, 0, 0, 0, 1, 4, 13, 14, 23, 44, 56, 74, 86, 82, 70, 72, 36, 38, 10, 6]", + "total_badness": 1030.3136745 + }, + { + "ne1d": 156, + "ne2d": 394, + "ne3d": 758, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 10, 24, 33, 62, 90, 103, 138, 113, 90, 60, 22, 10]", + "total_badness": 1097.0227588 + }, + { + "ne1d": 170, + "ne2d": 454, + "ne3d": 1180, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 4, 12, 16, 43, 89, 116, 178, 208, 222, 153, 99, 37]", + "total_badness": 1563.8386897 + }, + { + "ne1d": 190, + "ne2d": 504, + "ne3d": 1516, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 20, 50, 73, 141, 210, 280, 272, 238, 170, 55]", + "total_badness": 1957.4591373 + }, + { + "ne1d": 230, + "ne2d": 698, + "ne3d": 3545, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 6, 12, 20, 44, 109, 246, 424, 580, 665, 742, 515, 180]", + "total_badness": 4425.483014 + } + ], + "period.geo": [ + { + "ne1d": 344, + "ne2d": 1130, + "ne3d": 3294, + "quality_histogram": "[0, 0, 0, 0, 0, 11, 22, 35, 81, 112, 210, 253, 402, 409, 494, 439, 371, 274, 135, 46]", + "total_badness": 4918.0434035 + }, + { + "ne1d": 160, + "ne2d": 286, + "ne3d": 659, + "quality_histogram": "[0, 4, 8, 11, 15, 22, 23, 30, 40, 58, 66, 57, 66, 59, 57, 36, 43, 42, 16, 6]", + "total_badness": 1346.7559432 + }, + { + "ne1d": 232, + "ne2d": 590, + "ne3d": 1593, + "quality_histogram": "[0, 0, 21, 30, 45, 47, 61, 92, 104, 145, 141, 138, 146, 148, 134, 114, 107, 63, 46, 11]", + "total_badness": 3241.6735555 + }, + { + "ne1d": 344, + "ne2d": 1130, + "ne3d": 3209, + "quality_histogram": "[0, 0, 0, 0, 0, 4, 19, 29, 56, 85, 162, 229, 352, 413, 479, 468, 390, 320, 156, 47]", + "total_badness": 4660.4012194 + }, + { + "ne1d": 480, + "ne2d": 2260, + "ne3d": 11824, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 15, 44, 152, 298, 546, 944, 1504, 2045, 2229, 2105, 1531, 408]", + "total_badness": 15109.078092 + }, + { + "ne1d": 820, + "ne2d": 6218, + "ne3d": 68383, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 12, 37, 108, 252, 694, 1708, 3917, 7031, 11058, 14173, 14782, 11158, 3451]", + "total_badness": 84181.20294 + } + ], + "revolution.geo": [ + { + "ne1d": 320, + "ne2d": 3080, + "ne3d": 8493, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 14, 37, 141, 292, 516, 761, 908, 1113, 1149, 1153, 1021, 809, 454, 124]", + "total_badness": 12348.498749 + }, + { + "ne1d": 160, + "ne2d": 822, + "ne3d": 1275, + "quality_histogram": "[0, 0, 0, 0, 1, 13, 46, 79, 104, 128, 151, 162, 143, 122, 97, 67, 79, 44, 33, 6]", + "total_badness": 2301.511908 + }, + { + "ne1d": 240, + "ne2d": 1814, + "ne3d": 4263, + "quality_histogram": "[0, 0, 0, 1, 24, 48, 98, 178, 257, 329, 374, 485, 464, 451, 424, 377, 341, 236, 134, 42]", + "total_badness": 7266.9014253 + }, + { + "ne1d": 320, + "ne2d": 3080, + "ne3d": 8289, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 6, 11, 68, 186, 384, 601, 825, 1052, 1157, 1179, 1159, 966, 521, 172]", + "total_badness": 11619.248926 + }, + { + "ne1d": 480, + "ne2d": 6802, + "ne3d": 32879, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 12, 84, 271, 645, 1296, 2517, 4137, 5621, 6316, 6268, 4405, 1302]", + "total_badness": 41520.358013 + }, + { + "ne1d": 800, + "ne2d": 17838, + "ne3d": 201709, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 11, 55, 165, 539, 1581, 4149, 10238, 19945, 31707, 42528, 45753, 34593, 10445]", + "total_badness": 246377.26479 + } + ], + "screw.step": [ + { + "ne1d": 400, + "ne2d": 1416, + "ne3d": 2398, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 13, 88, 80, 176, 187, 220, 248, 278, 289, 245, 252, 182, 114, 25]", + "total_badness": 3755.3705458 + }, + { + "ne1d": 530, + "ne2d": 2688, + "ne3d": 7837, + "quality_histogram": "[0, 0, 0, 0, 1, 1, 5, 12, 27, 70, 147, 275, 499, 797, 1087, 1289, 1486, 1215, 709, 217]", + "total_badness": 10345.591253 + }, + { + "ne1d": 668, + "ne2d": 4906, + "ne3d": 31514, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 2, 20, 64, 145, 345, 846, 1782, 3209, 5128, 6751, 6771, 4886, 1562]", + "total_badness": 38907.122664 + } + ], + "sculpture.geo": [ + { + "ne1d": 192, + "ne2d": 412, + "ne3d": 474, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 1, 4, 16, 22, 41, 56, 66, 94, 93, 45, 22, 10, 2]", + "total_badness": 694.32501707 + }, + { + "ne1d": 102, + "ne2d": 144, + "ne3d": 138, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 11, 22, 22, 30, 28, 19, 1]", + "total_badness": 172.99655803 + }, + { + "ne1d": 144, + "ne2d": 248, + "ne3d": 259, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 7, 14, 25, 29, 47, 50, 46, 25, 7]", + "total_badness": 337.75654539 + }, + { + "ne1d": 192, + "ne2d": 412, + "ne3d": 473, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 3, 16, 22, 41, 56, 67, 94, 93, 45, 22, 10, 2]", + "total_badness": 690.01007288 + }, + { + "ne1d": 288, + "ne2d": 962, + "ne3d": 1342, + "quality_histogram": "[0, 0, 0, 0, 1, 0, 8, 25, 55, 76, 126, 141, 130, 145, 122, 136, 146, 128, 84, 19]", + "total_badness": 2068.4211724 + }, + { + "ne1d": 480, + "ne2d": 2396, + "ne3d": 6759, + "quality_histogram": "[0, 0, 0, 0, 3, 7, 8, 20, 26, 48, 63, 134, 286, 497, 697, 1121, 1313, 1288, 944, 304]", + "total_badness": 8628.8134106 + } + ], + "shaft.geo": [ + { + "ne1d": 708, + "ne2d": 1726, + "ne3d": 2758, + "quality_histogram": "[5, 19, 22, 27, 27, 37, 60, 74, 82, 160, 296, 372, 295, 251, 231, 278, 234, 181, 86, 21]", + "total_badness": 5318.0297732 + }, + { + "ne1d": 410, + "ne2d": 604, + "ne3d": 951, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 6, 17, 32, 42, 65, 90, 111, 140, 137, 132, 103, 58, 17]", + "total_badness": 1354.4698007 + }, + { + "ne1d": 510, + "ne2d": 1012, + "ne3d": 2088, + "quality_histogram": "[20, 46, 76, 95, 111, 105, 97, 134, 91, 101, 96, 141, 150, 177, 193, 168, 177, 56, 41, 13]", + "total_badness": 6181.8600404 + }, + { + "ne1d": 708, + "ne2d": 1726, + "ne3d": 2749, + "quality_histogram": "[0, 2, 15, 16, 32, 30, 44, 71, 72, 143, 302, 400, 289, 259, 236, 273, 259, 196, 88, 22]", + "total_badness": 4725.048506 + }, + { + "ne1d": 1138, + "ne2d": 4220, + "ne3d": 11186, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 30, 80, 154, 350, 602, 945, 1409, 1830, 2160, 1870, 1352, 400]", + "total_badness": 14442.588212 + }, + { + "ne1d": 1792, + "ne2d": 10588, + "ne3d": 63583, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 16, 57, 199, 505, 1317, 3246, 6239, 10147, 13375, 14218, 10750, 3513]", + "total_badness": 77700.722539 + } + ], + "sphere.geo": [ + { + "ne1d": 0, + "ne2d": 126, + "ne3d": 126, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 28, 46, 29, 15, 0, 2, 0, 0, 0, 0, 0]", + "total_badness": 237.49105852 + }, + { + "ne1d": 0, + "ne2d": 56, + "ne3d": 56, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 14, 24, 11, 2, 0]", + "total_badness": 68.823759015 + }, + { + "ne1d": 0, + "ne2d": 80, + "ne3d": 80, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 12, 28, 24, 10, 4, 0, 0, 0]", + "total_badness": 114.85441614 + }, + { + "ne1d": 0, + "ne2d": 126, + "ne3d": 126, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 28, 46, 29, 15, 0, 2, 0, 0, 0, 0, 0]", + "total_badness": 237.49105852 + }, + { + "ne1d": 0, + "ne2d": 258, + "ne3d": 365, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 8, 21, 36, 47, 55, 52, 32, 40, 28, 22, 15, 9]", + "total_badness": 557.72385462 + }, + { + "ne1d": 0, + "ne2d": 660, + "ne3d": 2315, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 6, 30, 51, 141, 273, 396, 472, 471, 361, 111]", + "total_badness": 2861.2824595 + } + ], + "sphereincube.geo": [ + { + "ne1d": 46, + "ne2d": 202, + "ne3d": 495, + "quality_histogram": "[0, 0, 7, 60, 37, 29, 46, 41, 57, 46, 44, 16, 23, 10, 15, 12, 12, 24, 11, 5]", + "total_badness": 1405.0779325 + }, + { + "ne1d": 24, + "ne2d": 60, + "ne3d": 187, + "quality_histogram": "[0, 0, 4, 11, 14, 25, 27, 14, 4, 2, 2, 3, 7, 13, 19, 16, 11, 6, 6, 3]", + "total_badness": 493.44997215 + }, + { + "ne1d": 30, + "ne2d": 116, + "ne3d": 352, + "quality_histogram": "[0, 0, 7, 15, 30, 48, 31, 27, 35, 44, 27, 19, 22, 15, 9, 8, 6, 6, 3, 0]", + "total_badness": 970.12716912 + }, + { + "ne1d": 46, + "ne2d": 202, + "ne3d": 501, + "quality_histogram": "[0, 0, 4, 44, 27, 20, 51, 40, 68, 51, 51, 21, 20, 17, 17, 16, 15, 23, 11, 5]", + "total_badness": 1303.491863 + }, + { + "ne1d": 74, + "ne2d": 416, + "ne3d": 1711, + "quality_histogram": "[0, 0, 0, 0, 2, 3, 7, 15, 23, 28, 56, 85, 135, 188, 256, 270, 252, 194, 131, 66]", + "total_badness": 2380.2313828 + }, + { + "ne1d": 122, + "ne2d": 1080, + "ne3d": 13950, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 2, 8, 27, 100, 220, 499, 870, 1449, 2270, 2791, 2947, 2086, 679]", + "total_badness": 17374.576935 + } + ], + "torus.geo": [ + { + "ne1d": 0, + "ne2d": 2534, + "ne3d": 5567, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 24, 44, 120, 251, 427, 577, 708, 736, 700, 671, 555, 393, 274, 86]", + "total_badness": 8384.3048813 + }, + { + "ne1d": 0, + "ne2d": 692, + "ne3d": 3145, + "quality_histogram": "[195, 700, 454, 360, 340, 221, 170, 157, 140, 91, 96, 60, 44, 31, 33, 26, 12, 7, 6, 2]", + "total_badness": 25137.501541 + }, + { + "ne1d": 0, + "ne2d": 1446, + "ne3d": 2727, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 5, 12, 62, 161, 219, 352, 418, 401, 380, 266, 239, 155, 55]", + "total_badness": 3909.4618458 + }, + { + "ne1d": 0, + "ne2d": 2534, + "ne3d": 5419, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 19, 42, 209, 332, 508, 665, 720, 748, 656, 613, 495, 305, 103]", + "total_badness": 7868.8410035 + }, + { + "ne1d": 0, + "ne2d": 5892, + "ne3d": 25297, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 6, 57, 140, 381, 917, 1672, 2967, 4341, 5051, 5114, 3588, 1059]", + "total_badness": 31635.159095 + }, + { + "ne1d": 0, + "ne2d": 16286, + "ne3d": 175540, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 23, 105, 378, 1086, 3067, 7730, 16270, 26910, 37673, 40911, 31553, 9832]", + "total_badness": 212959.87194 + } + ], + "trafo.geo": [ + { + "ne1d": 690, + "ne2d": 1684, + "ne3d": 5207, + "quality_histogram": "[0, 1, 2, 0, 8, 23, 26, 43, 130, 209, 256, 376, 434, 574, 672, 714, 598, 554, 460, 127]", + "total_badness": 7609.297723 + }, + { + "ne1d": 390, + "ne2d": 522, + "ne3d": 1348, + "quality_histogram": "[0, 2, 3, 17, 13, 39, 77, 130, 126, 139, 162, 128, 136, 115, 80, 88, 48, 32, 11, 2]", + "total_badness": 2770.7952646 + }, + { + "ne1d": 512, + "ne2d": 876, + "ne3d": 2390, + "quality_histogram": "[0, 0, 2, 1, 11, 17, 45, 82, 116, 145, 178, 211, 303, 386, 349, 231, 147, 96, 45, 25]", + "total_badness": 3971.1275129 + }, + { + "ne1d": 690, + "ne2d": 1684, + "ne3d": 5136, + "quality_histogram": "[0, 0, 0, 0, 3, 14, 20, 37, 122, 193, 254, 362, 416, 558, 664, 720, 625, 547, 463, 138]", + "total_badness": 7387.3184406 + }, + { + "ne1d": 1050, + "ne2d": 3816, + "ne3d": 17915, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 26, 41, 68, 180, 504, 1428, 2170, 2266, 2730, 2780, 2666, 2365, 685]", + "total_badness": 23360.270089 + }, + { + "ne1d": 1722, + "ne2d": 10044, + "ne3d": 84569, + "quality_histogram": "[0, 0, 0, 0, 3, 8, 60, 1414, 732, 421, 765, 1392, 2637, 5659, 9077, 13242, 16177, 16531, 12448, 4003]", + "total_badness": 108711.84635 + } + ], + "twobricks.geo": [ + { + "ne1d": 72, + "ne2d": 50, + "ne3d": 41, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 1, 7, 3, 15, 4, 4, 0, 0, 0, 0]", + "total_badness": 68.929979132 + }, + { + "ne1d": 56, + "ne2d": 34, + "ne3d": 22, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 0, 0, 8, 0, 0, 0, 0]", + "total_badness": 35.050418036 + }, + { + "ne1d": 56, + "ne2d": 34, + "ne3d": 22, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 2, 4, 0, 0, 8, 0, 0, 0, 0]", + "total_badness": 35.041320265 + }, + { + "ne1d": 72, + "ne2d": 50, + "ne3d": 41, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 1, 7, 3, 15, 4, 4, 0, 0, 0, 0]", + "total_badness": 68.929979132 + }, + { + "ne1d": 116, + "ne2d": 136, + "ne3d": 171, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 7, 10, 12, 40, 34, 23, 22, 13, 3]", + "total_badness": 228.1897295 + }, + { + "ne1d": 186, + "ne2d": 346, + "ne3d": 594, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 22, 29, 70, 88, 100, 109, 115, 43, 14]", + "total_badness": 771.14009171 + } + ], + "twocubes.geo": [ + { + "ne1d": 72, + "ne2d": 50, + "ne3d": 41, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 1, 7, 3, 15, 4, 4, 0, 0, 0, 0]", + "total_badness": 68.929979132 + }, + { + "ne1d": 56, + "ne2d": 34, + "ne3d": 22, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 0, 0, 8, 0, 0, 0, 0]", + "total_badness": 35.050418036 + }, + { + "ne1d": 56, + "ne2d": 34, + "ne3d": 22, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 2, 4, 0, 0, 8, 0, 0, 0, 0]", + "total_badness": 35.041320265 + }, + { + "ne1d": 72, + "ne2d": 50, + "ne3d": 41, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 1, 7, 3, 15, 4, 4, 0, 0, 0, 0]", + "total_badness": 68.929979132 + }, + { + "ne1d": 116, + "ne2d": 136, + "ne3d": 171, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 7, 10, 12, 40, 34, 23, 22, 13, 3]", + "total_badness": 228.1897295 + }, + { + "ne1d": 186, + "ne2d": 346, + "ne3d": 594, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 22, 29, 70, 88, 100, 109, 115, 43, 14]", + "total_badness": 771.14009171 + } + ], + "twocyl.geo": [ + { + "ne1d": 144, + "ne2d": 408, + "ne3d": 572, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 7, 7, 17, 34, 51, 57, 89, 111, 75, 73, 35, 12, 1]", + "total_badness": 851.35923972 + }, + { + "ne1d": 68, + "ne2d": 100, + "ne3d": 209, + "quality_histogram": "[0, 0, 0, 1, 3, 6, 11, 2, 8, 5, 15, 18, 12, 28, 28, 27, 24, 17, 3, 1]", + "total_badness": 357.15502356 + }, + { + "ne1d": 102, + "ne2d": 236, + "ne3d": 551, + "quality_histogram": "[0, 29, 41, 30, 31, 36, 49, 40, 55, 27, 38, 32, 26, 26, 20, 13, 37, 16, 4, 1]", + "total_badness": 1900.92706 + }, + { + "ne1d": 144, + "ne2d": 408, + "ne3d": 568, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 7, 16, 23, 51, 53, 95, 117, 69, 73, 43, 14, 4]", + "total_badness": 824.30043375 + }, + { + "ne1d": 214, + "ne2d": 910, + "ne3d": 1894, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 20, 72, 118, 190, 292, 365, 352, 262, 179, 40]", + "total_badness": 2477.4306124 + }, + { + "ne1d": 350, + "ne2d": 2374, + "ne3d": 13452, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 25, 83, 244, 626, 1288, 2202, 2860, 3100, 2290, 728]", + "total_badness": 16367.358392 + } + ] +} \ No newline at end of file diff --git a/tests/pytest/results.py b/tests/pytest/results.py deleted file mode 100644 index ea1a049b..00000000 --- a/tests/pytest/results.py +++ /dev/null @@ -1,108 +0,0 @@ -number_elements = {} -total_badness = {} -quality_histogram = {} -number_elements['boundarycondition.geo'] = (50,22,22,50,165,507) -total_badness['boundarycondition.geo'] = (74.77455382627932,35.1615287684931,35.09828878797806,74.77454941022566,228.72078637426984,661.0081780927665) -quality_histogram['boundarycondition.geo'] = ([0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 5, 8, 13, 3, 9, 5, 0, 1, 1],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 0, 0, 8, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 0, 0, 8, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 5, 8, 13, 3, 9, 5, 0, 1, 1],[0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 5, 13, 13, 25, 31, 25, 20, 17, 12, 1],[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 9, 20, 35, 56, 56, 81, 90, 83, 59, 15]) -number_elements['boxcyl.geo'] = (858,158,384,850,3761,18969) -total_badness['boxcyl.geo'] = (1232.0426735126875,247.68310335779472,598.9983304416592,1214.2298930472489,4693.120852548444,23072.83352747196) -quality_histogram['boxcyl.geo'] = ([0, 0, 0, 0, 0, 0, 0, 0, 2, 31, 91, 73, 79, 87, 106, 114, 102, 89, 66, 18],[0, 0, 0, 0, 0, 1, 1, 7, 10, 16, 5, 8, 15, 13, 17, 13, 9, 25, 7, 11],[0, 0, 1, 0, 3, 3, 3, 6, 11, 17, 21, 28, 34, 44, 68, 64, 49, 19, 11, 2],[0, 0, 0, 0, 0, 0, 0, 0, 2, 29, 87, 73, 75, 86, 106, 97, 112, 87, 75, 21],[0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 20, 59, 118, 250, 456, 628, 751, 755, 564, 153],[0, 0, 0, 0, 0, 0, 0, 5, 8, 15, 43, 130, 353, 876, 1713, 3018, 4122, 4317, 3271, 1098]) -number_elements['circle_on_cube.geo'] = (646,46,182,621,2054,11988) -total_badness['circle_on_cube.geo'] = (859.4388188262326,97.32623111178621,258.40643290234414,804.6856206512356,2526.4427939235775,14608.275961981739) -quality_histogram['circle_on_cube.geo'] = ([0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 10, 23, 48, 81, 117, 100, 123, 86, 43, 10],[0, 0, 0, 0, 0, 2, 2, 4, 8, 8, 6, 7, 5, 1, 2, 1, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 14, 21, 35, 35, 33, 19, 9, 8, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 11, 45, 59, 93, 114, 121, 104, 53, 14],[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 15, 57, 129, 210, 330, 426, 450, 321, 109],[0, 0, 0, 0, 0, 0, 0, 1, 2, 17, 33, 82, 226, 556, 1140, 1929, 2512, 2801, 2061, 628]) -number_elements['cone.geo'] = (1231,753,755,1208,4423,27126) -total_badness['cone.geo'] = (1853.3096959109166,2038.8171749591982,2283.6586444340996,1783.4859473632036,5769.994684811694,33434.66391104773) -quality_histogram['cone.geo'] = ([0, 0, 0, 0, 0, 1, 8, 22, 29, 50, 88, 118, 123, 158, 175, 140, 137, 111, 52, 19],[0, 1, 28, 40, 63, 54, 61, 53, 61, 59, 67, 47, 38, 52, 39, 23, 27, 21, 16, 3],[1, 33, 42, 29, 32, 26, 29, 27, 64, 81, 73, 80, 67, 48, 55, 18, 23, 16, 11, 0],[0, 0, 0, 0, 0, 1, 2, 15, 22, 47, 81, 110, 131, 144, 172, 150, 145, 112, 62, 14],[0, 0, 0, 0, 0, 0, 0, 1, 4, 35, 88, 158, 276, 400, 584, 726, 802, 735, 464, 150],[0, 0, 0, 0, 0, 0, 0, 3, 13, 31, 83, 303, 735, 1519, 2944, 4316, 5668, 5807, 4355, 1349]) -number_elements['cube.geo'] = (6,6,6,6,57,184) -total_badness['cube.geo'] = (9.140127286902135,9.140127286902135,9.140127286902135,9.140127286902137,84.41688347277622,241.24676971944592) -quality_histogram['cube.geo'] = ([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 2, 12, 14, 4, 12, 2, 2, 3, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 10, 7, 19, 18, 37, 33, 33, 14, 6]) -number_elements['cubeandring.geo'] = (2188,252,613,2054,7752,38282) -total_badness['cubeandring.geo'] = (4412.194135842449,365.81827351160507,897.5465886947072,3795.4750392740707,9761.706516470002,46825.77798326433) -quality_histogram['cubeandring.geo'] = ([1, 9, 25, 36, 90, 100, 108, 114, 90, 73, 63, 100, 149, 190, 251, 264, 241, 168, 96, 20],[0, 0, 0, 0, 0, 1, 1, 2, 1, 3, 8, 24, 28, 49, 38, 41, 29, 19, 7, 1],[0, 0, 0, 0, 2, 0, 0, 4, 3, 17, 49, 47, 61, 93, 110, 82, 52, 60, 28, 5],[0, 3, 12, 28, 61, 84, 109, 97, 80, 55, 48, 68, 112, 166, 245, 277, 249, 212, 116, 32],[0, 0, 0, 0, 0, 2, 1, 9, 13, 27, 56, 136, 281, 548, 921, 1256, 1534, 1557, 1091, 320],[0, 0, 0, 0, 0, 0, 0, 3, 10, 28, 117, 334, 795, 2026, 3889, 5942, 8057, 8537, 6447, 2097]) -number_elements['cubeandspheres.geo'] = (98,100,98,98,365,1080) -total_badness['cubeandspheres.geo'] = (145.83375109036504,146.64686099828145,145.14580661611535,145.83375109036504,553.0336207649647,1684.1500639342994) -quality_histogram['cubeandspheres.geo'] = ([0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 18, 19, 13, 20, 2, 9, 1, 0],[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 7, 10, 16, 18, 15, 17, 6, 5, 4, 0],[0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 6, 6, 19, 21, 12, 18, 5, 4, 4, 0],[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 18, 19, 13, 20, 2, 9, 1, 0],[0, 0, 0, 0, 0, 0, 0, 2, 6, 24, 31, 43, 39, 53, 35, 44, 51, 28, 9, 0],[0, 0, 0, 0, 0, 1, 2, 19, 59, 37, 100, 136, 100, 123, 162, 160, 66, 65, 28, 22]) -number_elements['cubemcyl.geo'] = (20940,3203,8421,19608,88843,521218) -total_badness['cubemcyl.geo'] = (29036.424266882583,4539.317490840601,11848.69595029201,25605.226152652813,109927.85825761271,633985.7169497084) -quality_histogram['cubemcyl.geo'] = ([0, 0, 0, 0, 0, 0, 22, 78, 213, 367, 738, 1237, 1875, 2588, 3120, 3314, 3117, 2521, 1385, 365],[0, 0, 0, 0, 0, 0, 3, 12, 17, 66, 128, 250, 364, 425, 515, 512, 463, 282, 137, 29],[0, 0, 0, 0, 0, 0, 7, 30, 87, 181, 362, 596, 792, 1120, 1271, 1262, 1165, 892, 516, 140],[0, 0, 0, 0, 0, 0, 2, 6, 40, 75, 246, 608, 1243, 2030, 2896, 3459, 3612, 2986, 1887, 518],[0, 0, 0, 0, 0, 0, 0, 0, 23, 113, 364, 946, 2450, 5445, 10022, 14690, 18368, 18746, 13521, 4155],[0, 0, 0, 0, 0, 0, 1, 25, 119, 374, 1224, 3269, 9296, 24328, 50521, 82283, 109285, 119759, 91721, 29013]) -number_elements['cubemsphere.geo'] = (4877,783,1571,4583,17783,113522) -total_badness['cubemsphere.geo'] = (6790.976698979519,1271.4564508216417,2230.3744520291,5995.40689674042,22085.583903145787,138835.89330335165) -quality_histogram['cubemsphere.geo'] = ([0, 0, 0, 0, 0, 1, 6, 28, 55, 96, 194, 261, 445, 559, 740, 798, 698, 576, 333, 87],[0, 0, 0, 0, 1, 2, 6, 19, 38, 61, 70, 94, 100, 91, 104, 76, 58, 38, 24, 1],[0, 0, 0, 0, 0, 0, 1, 5, 12, 20, 68, 134, 170, 243, 246, 237, 214, 145, 59, 17],[0, 0, 0, 0, 0, 0, 0, 4, 9, 25, 77, 128, 251, 516, 657, 826, 857, 685, 432, 116],[0, 0, 0, 0, 0, 0, 0, 3, 11, 31, 90, 203, 496, 1110, 1957, 3109, 3695, 3723, 2641, 714],[0, 0, 0, 0, 0, 0, 1, 9, 35, 117, 341, 885, 2307, 5764, 11384, 18322, 23667, 25754, 19043, 5893]) -number_elements['cylinder.geo'] = (413,103,437,411,1155,8102) -total_badness['cylinder.geo'] = (584.636409084562,127.27629078004027,1146.6341650071872,574.3453767078119,1536.3995031371464,9877.101056586194) -quality_histogram['cylinder.geo'] = ([0, 0, 0, 0, 0, 0, 0, 1, 2, 10, 18, 31, 43, 56, 76, 61, 45, 47, 18, 5],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 7, 15, 14, 21, 32, 10, 1],[0, 0, 14, 22, 37, 32, 30, 36, 31, 29, 34, 25, 27, 28, 22, 16, 33, 9, 9, 3],[0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 15, 29, 37, 61, 76, 59, 48, 52, 21, 3],[0, 0, 0, 0, 0, 0, 0, 1, 3, 10, 16, 50, 99, 120, 164, 206, 224, 139, 105, 18],[0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 13, 53, 167, 414, 787, 1233, 1788, 1856, 1334, 453]) -number_elements['cylsphere.geo'] = (711,225,665,709,2865,17765) -total_badness['cylsphere.geo'] = (1105.79919259997,584.4242683103591,1528.697375188064,1092.2233628961833,3710.2873989997815,21668.18084327247) -quality_histogram['cylsphere.geo'] = ([0, 0, 0, 0, 0, 0, 3, 10, 16, 35, 64, 89, 107, 102, 100, 57, 59, 50, 17, 2],[0, 0, 1, 13, 20, 34, 20, 21, 7, 6, 2, 8, 13, 18, 10, 23, 13, 7, 9, 0],[0, 1, 9, 14, 21, 37, 57, 76, 63, 57, 53, 60, 32, 54, 23, 35, 39, 16, 13, 5],[0, 0, 0, 0, 0, 0, 3, 6, 15, 27, 62, 89, 110, 109, 90, 68, 66, 45, 15, 4],[0, 0, 0, 0, 0, 0, 0, 3, 3, 28, 44, 88, 157, 276, 340, 471, 505, 493, 358, 99],[0, 0, 0, 0, 0, 0, 0, 0, 6, 15, 48, 129, 362, 859, 1699, 2843, 3786, 4041, 3023, 954]) -number_elements['ellipsoid.geo'] = (1262,942,598,1256,5592,41345) -total_badness['ellipsoid.geo'] = (1984.8094938967738,5747.520443762867,903.6523661521342,1908.0512059728062,7199.786784319063,56476.64849160909) -quality_histogram['ellipsoid.geo'] = ([0, 0, 0, 0, 1, 0, 8, 26, 39, 86, 118, 127, 178, 146, 148, 147, 107, 76, 43, 12],[22, 148, 137, 126, 91, 56, 81, 69, 47, 36, 29, 32, 23, 13, 12, 9, 5, 5, 1, 0],[0, 0, 0, 0, 0, 0, 1, 5, 15, 17, 44, 69, 81, 100, 91, 53, 54, 39, 20, 9],[0, 0, 0, 0, 0, 0, 0, 18, 35, 52, 103, 128, 169, 173, 155, 154, 121, 81, 49, 18],[0, 0, 0, 0, 0, 0, 0, 0, 3, 22, 74, 178, 307, 491, 711, 944, 1067, 921, 675, 199],[0, 0, 0, 0, 3, 20, 108, 266, 403, 644, 1110, 1904, 2921, 4621, 6100, 6869, 6568, 5527, 3324, 957]) -number_elements['ellipticcone.geo'] = (5213,587,1780,4971,13441,69596) -total_badness['ellipticcone.geo'] = (6957.997335964581,853.7762583986572,2537.0484181636543,6359.4493283262245,17201.441953759855,85930.2271725273) -quality_histogram['ellipticcone.geo'] = ([0, 0, 0, 0, 0, 0, 1, 7, 26, 47, 141, 216, 357, 555, 760, 902, 879, 712, 459, 151],[0, 0, 0, 0, 0, 0, 3, 8, 8, 14, 33, 55, 67, 67, 76, 85, 69, 56, 32, 14],[0, 0, 0, 1, 3, 4, 12, 22, 34, 43, 79, 96, 136, 191, 227, 251, 258, 253, 129, 41],[0, 0, 0, 0, 0, 0, 0, 1, 3, 17, 53, 107, 248, 431, 665, 897, 978, 791, 593, 187],[0, 0, 0, 0, 0, 0, 1, 8, 29, 62, 198, 341, 643, 1044, 1682, 2259, 2506, 2486, 1671, 511],[0, 0, 0, 0, 0, 0, 1, 5, 40, 121, 306, 826, 1862, 3802, 7575, 11204, 14503, 14913, 11126, 3312]) -number_elements['ellipticcyl.geo'] = (2275,325,1114,2199,8225,55078) -total_badness['ellipticcyl.geo'] = (3156.3970604957917,459.390405230032,1483.3007517785577,2944.2434449093485,10297.19192531407,66822.93034041145) -quality_histogram['ellipticcyl.geo'] = ([0, 0, 0, 0, 0, 0, 1, 10, 26, 44, 84, 125, 208, 263, 341, 376, 326, 261, 175, 35],[0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 18, 28, 26, 37, 71, 54, 46, 27, 10, 2],[0, 0, 0, 0, 0, 0, 0, 0, 3, 10, 17, 41, 80, 144, 172, 205, 165, 155, 97, 25],[0, 0, 0, 0, 0, 0, 1, 2, 8, 35, 43, 95, 163, 238, 314, 377, 378, 307, 193, 45],[0, 0, 0, 0, 0, 0, 0, 3, 5, 9, 46, 106, 269, 605, 988, 1459, 1629, 1655, 1138, 313],[0, 0, 0, 0, 0, 0, 0, 1, 10, 28, 97, 356, 939, 2483, 5114, 8528, 11618, 12908, 9908, 3088]) -number_elements['fichera.geo'] = (40,18,18,40,208,514) -total_badness['fichera.geo'] = (62.36199688281094,26.546480074510768,26.546480074510768,62.361996882810935,266.19865609610633,666.6750726869872) -quality_histogram['fichera.geo'] = ([0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 4, 3, 5, 7, 8, 2, 1, 0, 2],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 6, 1, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 6, 1, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 4, 3, 5, 7, 8, 2, 1, 0, 2],[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 6, 10, 16, 24, 36, 33, 41, 30, 6],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 14, 32, 55, 87, 97, 91, 71, 52, 13]) -number_elements['frame.step'] = (220900,30129,85945) -total_badness['frame.step'] = (300459.83411975694,44750.50972353135,118266.27326084932) -quality_histogram['frame.step'] = ([2, 7, 7, 9, 9, 30, 241, 749, 1682, 3420, 6081, 10465, 17172, 25221, 31864, 35916, 35505, 29651, 18174, 4695],[4, 4, 5, 11, 20, 39, 120, 287, 625, 1025, 1680, 2536, 3358, 4124, 4521, 4195, 3479, 2399, 1359, 338],[1, 6, 3, 11, 7, 34, 76, 195, 480, 1081, 2528, 4819, 7807, 11027, 13498, 14054, 12911, 10078, 5893, 1436]) -number_elements['hinge.stl'] = (1990,1389,1530,1988,2903,4609) -total_badness['hinge.stl'] = (2772.615463550591,2178.566325869092,2364.3186940730393,2747.7705529808827,3701.663382426159,5628.251412240825) -quality_histogram['hinge.stl'] = ([0, 0, 0, 0, 1, 2, 3, 9, 21, 47, 69, 116, 164, 237, 326, 280, 298, 225, 151, 41],[0, 0, 0, 0, 2, 5, 18, 35, 47, 74, 111, 126, 131, 179, 189, 185, 134, 93, 46, 14],[0, 0, 0, 0, 0, 7, 14, 43, 46, 79, 94, 164, 155, 163, 212, 180, 180, 118, 61, 14],[0, 0, 0, 0, 0, 2, 2, 5, 19, 39, 62, 112, 177, 236, 314, 304, 295, 236, 140, 45],[0, 0, 0, 0, 0, 0, 0, 3, 4, 13, 31, 64, 136, 221, 397, 484, 533, 504, 399, 114],[0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 14, 45, 103, 220, 448, 693, 963, 1055, 803, 257]) -number_elements['lshape3d.geo'] = (18,12,12,18,88,331) -total_badness['lshape3d.geo'] = (27.289065400982963,18.9614815145502,18.9614815145502,27.289065400982963,121.12718489787706,443.95235946678145) -quality_histogram['lshape3d.geo'] = ([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 12, 0, 3, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 6, 1, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 6, 1, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 12, 0, 3, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 10, 9, 21, 23, 7, 6, 1, 4],[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 7, 21, 26, 41, 39, 61, 57, 46, 24, 7]) -number_elements['manyholes.geo'] = (179405,29184,70789) -total_badness['manyholes.geo'] = (238774.1757941998,42098.72126770701,100213.31675908854) -quality_histogram['manyholes.geo'] = ([0, 0, 2, 1, 8, 27, 65, 207, 559, 1418, 3370, 7627, 12710, 20134, 27407, 30177, 29994, 24813, 16843, 4043],[0, 0, 0, 1, 5, 26, 45, 181, 387, 817, 1524, 2280, 3331, 4394, 4120, 3700, 3202, 2567, 1880, 724],[0, 0, 0, 2, 30, 78, 189, 443, 837, 1706, 2919, 4402, 7061, 9455, 10197, 10269, 9498, 7395, 4474, 1834]) -number_elements['manyholes2.geo'] = (128088) -total_badness['manyholes2.geo'] = (176960.0270623914) -quality_histogram['manyholes2.geo'] = ([0, 0, 0, 0, 7, 30, 95, 288, 823, 2105, 4573, 7847, 11840, 18008, 18739, 18350, 16782, 14747, 10264, 3590]) -number_elements['matrix.geo'] = (5295,2001,2783,5105,16255,100388) -total_badness['matrix.geo'] = (9761.595421063283,4865.580334425541,5980.102256692753,9068.007640805426,21663.043544618693,124129.9526659235) -quality_histogram['matrix.geo'] = ([0, 0, 32, 147, 135, 100, 130, 147, 177, 237, 361, 409, 554, 617, 583, 555, 457, 385, 212, 57],[0, 3, 20, 65, 122, 160, 137, 169, 184, 189, 172, 190, 184, 137, 89, 53, 45, 54, 20, 8],[0, 0, 13, 51, 108, 146, 173, 161, 225, 265, 333, 287, 211, 205, 173, 161, 117, 93, 45, 16],[0, 0, 20, 134, 116, 78, 117, 149, 152, 188, 285, 371, 498, 547, 578, 611, 503, 441, 254, 63],[0, 0, 0, 0, 0, 5, 24, 75, 128, 202, 346, 678, 1062, 1517, 2149, 2515, 2754, 2540, 1722, 538],[0, 0, 0, 0, 0, 1, 6, 24, 71, 195, 503, 1186, 2824, 5989, 10497, 16251, 20497, 21258, 16049, 5037]) -number_elements['ortho.geo'] = (6,6,6,6,57,180) -total_badness['ortho.geo'] = (9.140127286902135,9.140127286902135,9.140127286902135,9.140127286902135,83.06080967252274,233.34798934128858) -quality_histogram['ortho.geo'] = ([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 1, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 8, 9, 8, 14, 5, 3, 1, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 14, 9, 27, 39, 31, 30, 17, 5]) -number_elements['part1.stl'] = (1228,629,758,1180,1516,3545) -total_badness['part1.stl'] = (1672.637935798938,1030.3136744801673,1097.0227587874047,1563.838689712767,1957.4591373369915,4425.483014010064) -quality_histogram['part1.stl'] = ([0, 0, 0, 0, 0, 0, 1, 5, 5, 20, 38, 51, 111, 128, 195, 211, 190, 152, 90, 31],[0, 0, 0, 0, 1, 4, 13, 14, 23, 44, 56, 74, 86, 82, 70, 72, 36, 38, 10, 6],[0, 0, 0, 0, 0, 0, 0, 3, 10, 24, 33, 62, 90, 103, 138, 113, 90, 60, 22, 10],[0, 0, 0, 0, 0, 0, 0, 3, 4, 12, 16, 43, 89, 116, 178, 208, 222, 153, 99, 37],[0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 20, 50, 73, 141, 210, 280, 272, 238, 170, 55],[0, 0, 0, 0, 0, 0, 0, 2, 6, 12, 20, 44, 109, 246, 424, 580, 665, 742, 515, 180]) -number_elements['period.geo'] = (3294,659,1593,3209,11824,68383) -total_badness['period.geo'] = (4918.043403462622,1346.7559431607624,3241.6735554559423,4660.401219394114,15109.078091558415,84181.20294002682) -quality_histogram['period.geo'] = ([0, 0, 0, 0, 0, 11, 22, 35, 81, 112, 210, 253, 402, 409, 494, 439, 371, 274, 135, 46],[0, 4, 8, 11, 15, 22, 23, 30, 40, 58, 66, 57, 66, 59, 57, 36, 43, 42, 16, 6],[0, 0, 21, 30, 45, 47, 61, 92, 104, 145, 141, 138, 146, 148, 134, 114, 107, 63, 46, 11],[0, 0, 0, 0, 0, 4, 19, 29, 56, 85, 162, 229, 352, 413, 479, 468, 390, 320, 156, 47],[0, 0, 0, 0, 0, 0, 1, 2, 15, 44, 152, 298, 546, 944, 1504, 2045, 2229, 2105, 1531, 408],[0, 0, 0, 0, 0, 0, 2, 12, 37, 108, 252, 694, 1708, 3917, 7031, 11058, 14173, 14782, 11158, 3451]) -number_elements['revolution.geo'] = (8493,1275,4263,8289,32879,201709) -total_badness['revolution.geo'] = (12348.498749170572,2301.5119080238096,7266.901425264716,11619.248926348993,41520.35801256831,246377.26478687205) -quality_histogram['revolution.geo'] = ([0, 0, 0, 0, 0, 1, 14, 37, 141, 292, 516, 761, 908, 1113, 1149, 1153, 1021, 809, 454, 124],[0, 0, 0, 0, 1, 13, 46, 79, 104, 128, 151, 162, 143, 122, 97, 67, 79, 44, 33, 6],[0, 0, 0, 1, 24, 48, 98, 178, 257, 329, 374, 485, 464, 451, 424, 377, 341, 236, 134, 42],[0, 0, 0, 0, 0, 2, 6, 11, 68, 186, 384, 601, 825, 1052, 1157, 1179, 1159, 966, 521, 172],[0, 0, 0, 0, 0, 0, 1, 4, 12, 84, 271, 645, 1296, 2517, 4137, 5621, 6316, 6268, 4405, 1302],[0, 0, 0, 0, 0, 0, 0, 11, 55, 165, 539, 1581, 4149, 10238, 19945, 31707, 42528, 45753, 34593, 10445]) -number_elements['screw.step'] = (2398,7837,31514) -total_badness['screw.step'] = (3755.370545837308,10345.591252904502,38907.12266445083) -quality_histogram['screw.step'] = ([0, 0, 0, 0, 0, 1, 13, 88, 80, 176, 187, 220, 248, 278, 289, 245, 252, 182, 114, 25],[0, 0, 0, 0, 1, 1, 5, 12, 27, 70, 147, 275, 499, 797, 1087, 1289, 1486, 1215, 709, 217],[0, 0, 0, 0, 0, 0, 3, 2, 20, 64, 145, 345, 846, 1782, 3209, 5128, 6751, 6771, 4886, 1562]) -number_elements['sculpture.geo'] = (474,138,259,473,1342,6759) -total_badness['sculpture.geo'] = (694.325017071973,172.9965580254268,337.75654539384095,690.0100728765408,2068.421172379042,8628.81341055162) -quality_histogram['sculpture.geo'] = ([0, 0, 0, 0, 0, 1, 1, 1, 4, 16, 22, 41, 56, 66, 94, 93, 45, 22, 10, 2],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 11, 22, 22, 30, 28, 19, 1],[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 7, 14, 25, 29, 47, 50, 46, 25, 7],[0, 0, 0, 0, 0, 0, 1, 1, 3, 16, 22, 41, 56, 67, 94, 93, 45, 22, 10, 2],[0, 0, 0, 0, 1, 0, 8, 25, 55, 76, 126, 141, 130, 145, 122, 136, 146, 128, 84, 19],[0, 0, 0, 0, 3, 7, 8, 20, 26, 48, 63, 134, 286, 497, 697, 1121, 1313, 1288, 944, 304]) -number_elements['shaft.geo'] = (2758,951,2088,2749,11186,63583) -total_badness['shaft.geo'] = (5318.02970416672,1354.4698006500785,6181.8600404314575,4725.048512973088,14442.588211795146,77700.72253850821) -quality_histogram['shaft.geo'] = ([5, 19, 22, 27, 27, 37, 60, 74, 82, 160, 296, 372, 295, 251, 231, 278, 234, 181, 86, 21],[0, 0, 0, 0, 0, 0, 1, 6, 17, 32, 42, 65, 90, 111, 140, 137, 132, 103, 58, 17],[20, 46, 76, 95, 111, 105, 97, 134, 91, 101, 96, 141, 150, 177, 193, 168, 177, 56, 41, 13],[0, 2, 15, 16, 32, 30, 44, 71, 72, 143, 302, 400, 289, 259, 236, 273, 259, 196, 88, 22],[0, 0, 0, 0, 0, 0, 1, 3, 30, 80, 154, 350, 602, 945, 1409, 1830, 2160, 1870, 1352, 400],[0, 0, 0, 0, 0, 0, 0, 1, 16, 57, 199, 505, 1317, 3246, 6239, 10147, 13375, 14218, 10750, 3513]) -number_elements['sphere.geo'] = (126,56,80,126,365,2315) -total_badness['sphere.geo'] = (237.49105851849373,68.82375901522019,114.85441614445755,237.49105851849373,557.7238546173342,2861.2824595084517) -quality_histogram['sphere.geo'] = ([0, 0, 0, 0, 0, 0, 0, 0, 6, 28, 46, 29, 15, 0, 2, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 14, 24, 11, 2, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 12, 28, 24, 10, 4, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 6, 28, 46, 29, 15, 0, 2, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 8, 21, 36, 47, 55, 52, 32, 40, 28, 22, 15, 9],[0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 6, 30, 51, 141, 273, 396, 472, 471, 361, 111]) -number_elements['sphereincube.geo'] = (495,187,352,501,1711,13950) -total_badness['sphereincube.geo'] = (1405.0779325461885,493.44997215033766,970.1271691161155,1303.49186301379,2380.2313828272604,17374.576935292873) -quality_histogram['sphereincube.geo'] = ([0, 0, 7, 60, 37, 29, 46, 41, 57, 46, 44, 16, 23, 10, 15, 12, 12, 24, 11, 5],[0, 0, 4, 11, 14, 25, 27, 14, 4, 2, 2, 3, 7, 13, 19, 16, 11, 6, 6, 3],[0, 0, 7, 15, 30, 48, 31, 27, 35, 44, 27, 19, 22, 15, 9, 8, 6, 6, 3, 0],[0, 0, 4, 44, 27, 20, 51, 40, 68, 51, 51, 21, 20, 17, 17, 16, 15, 23, 11, 5],[0, 0, 0, 0, 2, 3, 7, 15, 23, 28, 56, 85, 135, 188, 256, 270, 252, 194, 131, 66],[0, 0, 0, 0, 0, 0, 2, 2, 8, 27, 100, 220, 499, 870, 1449, 2270, 2791, 2947, 2086, 679]) -number_elements['torus.geo'] = (5567,3145,2727,5419,25297,175540) -total_badness['torus.geo'] = (8384.304881325788,25137.501541465608,3909.4618457982724,7868.841003540981,31635.159094988307,212959.87194011256) -quality_histogram['torus.geo'] = ([0, 0, 0, 0, 0, 1, 24, 44, 120, 251, 427, 577, 708, 736, 700, 671, 555, 393, 274, 86],[195, 700, 454, 360, 340, 221, 170, 157, 140, 91, 96, 60, 44, 31, 33, 26, 12, 7, 6, 2],[0, 0, 0, 0, 0, 0, 2, 5, 12, 62, 161, 219, 352, 418, 401, 380, 266, 239, 155, 55],[0, 0, 0, 0, 0, 0, 4, 19, 42, 209, 332, 508, 665, 720, 748, 656, 613, 495, 305, 103],[0, 0, 0, 0, 0, 0, 0, 4, 6, 57, 140, 381, 917, 1672, 2967, 4341, 5051, 5114, 3588, 1059],[0, 0, 0, 0, 0, 0, 0, 2, 23, 105, 378, 1086, 3067, 7730, 16270, 26910, 37673, 40911, 31553, 9832]) -number_elements['trafo.geo'] = (5207,1348,2390,5136,17915,84569) -total_badness['trafo.geo'] = (7609.297722974407,2770.7952645933756,3971.12751286376,7387.3184405933,23360.27008887893,108711.84635488936) -quality_histogram['trafo.geo'] = ([0, 1, 2, 0, 8, 23, 26, 43, 130, 209, 256, 376, 434, 574, 672, 714, 598, 554, 460, 127],[0, 2, 3, 17, 13, 39, 77, 130, 126, 139, 162, 128, 136, 115, 80, 88, 48, 32, 11, 2],[0, 0, 2, 1, 11, 17, 45, 82, 116, 145, 178, 211, 303, 386, 349, 231, 147, 96, 45, 25],[0, 0, 0, 0, 3, 14, 20, 37, 122, 193, 254, 362, 416, 558, 664, 720, 625, 547, 463, 138],[0, 0, 0, 0, 0, 0, 6, 26, 41, 68, 180, 504, 1428, 2170, 2266, 2730, 2780, 2666, 2365, 685],[0, 0, 0, 0, 3, 8, 60, 1414, 732, 421, 765, 1392, 2637, 5659, 9077, 13242, 16177, 16531, 12448, 4003]) -number_elements['twobricks.geo'] = (41,22,22,41,171,594) -total_badness['twobricks.geo'] = (68.92997913151194,35.05041803583789,35.04132026480671,68.92997913151194,228.18972949546867,771.140091711599) -quality_histogram['twobricks.geo'] = ([0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 1, 7, 3, 15, 4, 4, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 0, 0, 8, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 2, 4, 0, 0, 8, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 1, 7, 3, 15, 4, 4, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 7, 10, 12, 40, 34, 23, 22, 13, 3],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 22, 29, 70, 88, 100, 109, 115, 43, 14]) -number_elements['twocubes.geo'] = (41,22,22,41,171,594) -total_badness['twocubes.geo'] = (68.92997913151194,35.05041803583789,35.04132026480671,68.92997913151194,228.18972949546867,771.140091711599) -quality_histogram['twocubes.geo'] = ([0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 1, 7, 3, 15, 4, 4, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4, 0, 0, 8, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 2, 4, 0, 0, 8, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 1, 7, 3, 15, 4, 4, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 7, 10, 12, 40, 34, 23, 22, 13, 3],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 22, 29, 70, 88, 100, 109, 115, 43, 14]) -number_elements['twocyl.geo'] = (572,209,551,568,1894,13452) -total_badness['twocyl.geo'] = (851.3592397192452,357.1550235646191,1900.9270599861966,824.3004337537227,2477.4306123873607,16367.35839189883) -quality_histogram['twocyl.geo'] = ([0, 0, 0, 0, 0, 1, 2, 7, 7, 17, 34, 51, 57, 89, 111, 75, 73, 35, 12, 1],[0, 0, 0, 1, 3, 6, 11, 2, 8, 5, 15, 18, 12, 28, 28, 27, 24, 17, 3, 1],[0, 29, 41, 30, 31, 36, 49, 40, 55, 27, 38, 32, 26, 26, 20, 13, 37, 16, 4, 1],[0, 0, 0, 0, 0, 0, 0, 3, 7, 16, 23, 51, 53, 95, 117, 69, 73, 43, 14, 4],[0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 20, 72, 118, 190, 292, 365, 352, 262, 179, 40],[0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 25, 83, 244, 626, 1288, 2202, 2860, 3100, 2290, 728]) diff --git a/tests/pytest/test_tutorials.py b/tests/pytest/test_tutorials.py index 4c085b32..80a53fee 100644 --- a/tests/pytest/test_tutorials.py +++ b/tests/pytest/test_tutorials.py @@ -4,39 +4,42 @@ from netgen.meshing import meshsize, MeshingParameters, SetMessageImportance import netgen.csg as csg import netgen.stl as stl from pyngcore import TaskManager +import json try: import netgen.occ as occ has_occ = True except ImportError: has_occ = False -from results import * SetMessageImportance(0) +def getData(mesh, mp): + out = {} + out['ne1d'] = len(mesh.Elements1D()) + out['ne2d'] = len(mesh.Elements2D()) + out['ne3d'] = len(mesh.Elements3D()) + # round badness to avoid fluctuations in last digits + out["total_badness"] = float("{:.11g}".format(mesh.CalcTotalBadness(mp))) + out["quality_histogram"] = str(list(mesh.GetQualityHistogram())) + return out + +def checkData(mesh, mp, ref): + data = getData(mesh, mp) + assert ref['ne1d'] == data['ne1d'] + assert ref['ne2d'] == data['ne2d'] + assert ref['ne3d'] == data['ne3d'] + assert ref['quality_histogram'] == data['quality_histogram'] + assert ref['total_badness'] == pytest.approx(data['total_badness'], rel=1e-5) + + def getFiles(fileEnding): r, d, files = next(os.walk(os.path.join("..","..","tutorials"))) return (f for f in files if f.endswith(fileEnding)) +@pytest.fixture +def refdata(): + return json.load(open('results.json','r')) -def getCheckFunc(filename): - def func(mesh,mp,i): - if filename in number_elements: - # number of elements should be in 2% range of expected value - assert mesh.ne == number_elements[filename][i] - badness = mesh.CalcTotalBadness(mp) - qual_classes = list(mesh.GetQualityHistogram()) - assert badness == pytest.approx(total_badness[filename][i], rel=1e-6) - assert qual_classes == quality_histogram[filename][i] - return func - -def getResultFunc(filename): - def resultFunc(mesh, mp): - results = {} - results["number_elements"] = mesh.ne - results["total_badness"] = mesh.CalcTotalBadness(mp) - results["quality_histogram"] = list(mesh.GetQualityHistogram()) - return results - return resultFunc def getMeshingparameters(filename): standard = [MeshingParameters()] + [MeshingParameters(ms) for ms in (meshsize.very_coarse, meshsize.coarse, meshsize.moderate, meshsize.fine, meshsize.very_fine)] @@ -55,7 +58,6 @@ def getMeshingparameters(filename): _geofiles = [f for f in getFiles(".geo")] + [f for f in getFiles(".stl")] if has_occ: _geofiles += [f for f in getFiles(".step")] - _geofiles.sort() def generateMesh(filename, mp): @@ -73,46 +75,51 @@ def isSlowTest(filename): "period.geo", "shaft.geo", "cubeandring.geo", "ellipticcyl.geo", "ellipsoid.geo", "cone.geo"] -def getParamForTest(filename): - return pytest.param(filename, getCheckFunc(filename), marks=pytest.mark.slow) if isSlowTest(filename) \ - else (filename, getCheckFunc(filename)) +def getParameters(): + res = [] + for f in _geofiles: + for i,mp in enumerate(getMeshingparameters(f)): + if isSlowTest(f): + res.append( pytest.param(f, mp, i, marks=pytest.mark.slow ) ) + else: + res.append( (f, mp, i) ) + return res -@pytest.mark.parametrize(("filename, checkFunc"), [getParamForTest(f) for f in _geofiles]) -def test_geoFiles(filename, checkFunc): +@pytest.mark.parametrize(("filename", "mp", "i"), getParameters()) +def test_geoFiles(filename, mp, i, refdata): + ref = refdata[filename] import filecmp - for i, mp_ in enumerate(getMeshingparameters(filename)): - print("load geo", filename) - mp = MeshingParameters(mp_, parallel_meshing=False) - mesh = generateMesh(filename, mp) - if checkFunc is not None: - checkFunc(mesh,mp,i) - mesh.Save(filename+'_seq.vol.gz') + print("load geo", filename) + mp = MeshingParameters(mp, parallel_meshing=False) + mesh = generateMesh(filename, mp) + mesh.Save(filename+'_seq.vol.gz') + with TaskManager(): + mesh_par = generateMesh(filename, mp) + mesh_par.Save(filename+'_par.vol.gz') - with TaskManager(): - mesh_par = generateMesh(filename, mp) - mesh_par.Save(filename+'_par.vol.gz') + assert filecmp.cmp(filename+'_seq.vol.gz', filename+'_par.vol.gz') + checkData(mesh, mp, ref[i]) - assert filecmp.cmp(filename+'_seq.vol.gz', filename+'_par.vol.gz') -import time def generateResultFile(): - with TaskManager(): - with open("results.py", "w") as f: - print("number_elements = {}", file=f) - print("total_badness = {}", file=f) - print("quality_histogram = {}", file=f) - for _file, _func in ((gf, getResultFunc(gf)) for gf in _geofiles): + import re, time + data = {} + with TaskManager(): + for _file in _geofiles: + print("generate "+_file) start = time.time() - print("write", _file) mps = getMeshingparameters(_file) if not mps: continue - results = [_func(generateMesh(_file, mp), mp) for mp in mps] - print("number_elements['{}'] = {}".format(_file, "(" + ",".join((str(r["number_elements"]) for r in results)) + ")"), file=f) - print("total_badness['{}'] = {}".format(_file, "(" + ",".join((str(r["total_badness"]) for r in results)) + ")"), file=f) - print("quality_histogram['{}'] = {}".format(_file, "(" + ",".join((str(r["quality_histogram"]) for r in results)) + ")"), file=f) - print("needed", time.time() - start, "seconds") + meshdata = [] + for mp in mps: + mesh = generateMesh(_file, mp) + meshdata.append( getData(mesh, mp) ) + data[_file] = meshdata + print("needed", time.time() - start, "seconds") + s = json.dumps(data, sort_keys=True, indent=4) + open("results.json", "w").write(s) if __name__ == "__main__": generateResultFile() From b0f13a1f20995d16305ac62bc35db8ad7213d5b0 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Mon, 7 Oct 2019 12:56:12 +0200 Subject: [PATCH 011/120] fix parsing of stl parameters from python --- libsrc/stlgeom/python_stl.cpp | 26 ++++----- libsrc/stlgeom/stltool.hpp | 7 +++ python/meshing.py | 10 ---- tests/pytest/results.json | 100 +++++++++++++++++----------------- 4 files changed, 70 insertions(+), 73 deletions(-) diff --git a/libsrc/stlgeom/python_stl.cpp b/libsrc/stlgeom/python_stl.cpp index 5c773308..83e7b36b 100644 --- a/libsrc/stlgeom/python_stl.cpp +++ b/libsrc/stlgeom/python_stl.cpp @@ -52,7 +52,7 @@ void CreateSTLParametersFromKwargs(STLParameters& stlparam, py::dict kwargs) stlparam.outerchartangle = py::cast(kwargs.attr("pop")("outerchartangle")); if(kwargs.contains("usesearchtree")) stlparam.usesearchtree = py::cast(kwargs.attr("pop")("usesearchtree")); - if(kwargs.contains("resthatlasfac")) + if(kwargs.contains("atlasfac")) { auto val = kwargs.attr("pop")("resthatlasfac"); if(val.is_none()) @@ -65,9 +65,9 @@ void CreateSTLParametersFromKwargs(STLParameters& stlparam, py::dict kwargs) } if(kwargs.contains("atlasminh")) stlparam.atlasminh = py::cast(kwargs.attr("pop")("atlasminh")); - if(kwargs.contains("resthsurfcurvfac")) + if(kwargs.contains("surfcurvfac")) { - auto val = kwargs.attr("pop")("resthsurfcurvfac"); + auto val = kwargs.attr("pop")("surfcurvfac"); if(val.is_none()) stlparam.resthsurfcurvenable = false; else @@ -76,9 +76,9 @@ void CreateSTLParametersFromKwargs(STLParameters& stlparam, py::dict kwargs) stlparam.resthsurfcurvfac = py::cast(val); } } - if(kwargs.contains("resthchartdistfac")) + if(kwargs.contains("chartdistfac")) { - auto val = kwargs.attr("pop")("resthchartdistfac"); + auto val = kwargs.attr("pop")("chartdistfac"); if(val.is_none()) stlparam.resthchartdistenable = false; else @@ -87,9 +87,9 @@ void CreateSTLParametersFromKwargs(STLParameters& stlparam, py::dict kwargs) stlparam.resthchartdistfac = py::cast(val); } } - if(kwargs.contains("resthcloseedgefac")) + if(kwargs.contains("closeedgefac")) { - auto val = kwargs.attr("pop")("resthcloseedgefac"); + auto val = kwargs.attr("pop")("closeedgefac"); if(val.is_none()) stlparam.resthcloseedgeenable = false; else @@ -98,9 +98,9 @@ void CreateSTLParametersFromKwargs(STLParameters& stlparam, py::dict kwargs) stlparam.resthcloseedgefac = py::cast(val); } } - if(kwargs.contains("resthedgeanglefac")) + if(kwargs.contains("edgeanglefac")) { - auto val = kwargs.attr("pop")("resthedgeanglefac"); + auto val = kwargs.attr("pop")("edgeanglefac"); if(val.is_none()) stlparam.resthedgeangleenable = false; else @@ -109,9 +109,9 @@ void CreateSTLParametersFromKwargs(STLParameters& stlparam, py::dict kwargs) stlparam.resthedgeanglefac = py::cast(val); } } - if(kwargs.contains("resthsurfmeshcurvfac")) + if(kwargs.contains("surfmeshcurvfac")) { - auto val = kwargs.attr("pop")("resthsurfmeshcurvfac"); + auto val = kwargs.attr("pop")("surfmeshcurvfac"); if(val.is_none()) stlparam.resthsurfmeshcurvenable = false; else @@ -120,9 +120,9 @@ void CreateSTLParametersFromKwargs(STLParameters& stlparam, py::dict kwargs) stlparam.resthsurfmeshcurvfac = py::cast(val); } } - if(kwargs.contains("resthlinelengthfac")) + if(kwargs.contains("linelengthfac")) { - auto val = kwargs.attr("pop")("resthlinelengthfac"); + auto val = kwargs.attr("pop")("linelengthfac"); if(val.is_none()) stlparam.resthlinelengthenable = false; else diff --git a/libsrc/stlgeom/stltool.hpp b/libsrc/stlgeom/stltool.hpp index 6c9235d8..fd029dad 100644 --- a/libsrc/stlgeom/stltool.hpp +++ b/libsrc/stlgeom/stltool.hpp @@ -302,6 +302,13 @@ public: void Print (ostream & ost) const; }; +inline ostream & operator<< (ostream & ost, const STLParameters & stlparam) + { + stlparam.Print (ost); + return ost; + } + + void STLMeshing (STLGeometry & geom, Mesh & mesh, diff --git a/python/meshing.py b/python/meshing.py index 7f5193f1..788f248a 100644 --- a/python/meshing.py +++ b/python/meshing.py @@ -6,12 +6,10 @@ class _MeshsizeObject: return MeshingParameters(curvaturesafety=1, segmentsperedge=0.3, grading=0.7, - surfcurvfac=0.25, chartdistfac=0.8, linelengthfac=0.2, closeedgefac=0.5, minedgelen=0.002, - edgeanglefac=0.25, surfmeshcurvfac=1., optsteps3d=5) @property @@ -19,12 +17,10 @@ class _MeshsizeObject: return MeshingParameters(curvaturesafety=1.5, segmentsperedge=0.5, grading=0.5, - surfcurvfac=0.5, chartdistfac=1, linelengthfac=0.35, closeedgefac=1, minedgelen=0.02, - edgeanglefac=0.5, surfmeshcurvfac=1.5, optsteps3d=5) @property @@ -32,12 +28,10 @@ class _MeshsizeObject: return MeshingParameters(curvaturesafety=2, segmentsperedge=1, grading=0.3, - surfcurvfac=1., chartdistfac=1.5, linelengthfac=0.5, closeedgefac=2, minedgelen=0.2, - edgeanglefac=1, surfmeshcurvfac=2., optsteps3d=5) @property @@ -45,12 +39,10 @@ class _MeshsizeObject: return MeshingParameters(curvaturesafety=3, segmentsperedge=2, grading=0.2, - surfcurvfac=1.5, chartdistfac=2, linelengthfac=1.5, closeedgefac=3.5, minedgelen=1., - edgeanglefac=1.5, surfmeshcurvfac=3., optsteps3d=5) @@ -59,12 +51,10 @@ class _MeshsizeObject: return MeshingParameters(curvaturesafety=5, segmentsperedge=3, grading=0.1, - surfcurvfac=3, chartdistfac=5, linelengthfac=3, closeedgefac=5, minedgelen=2., - edgeanglefac=3., surfmeshcurvfac=5., optsteps3d=5) diff --git a/tests/pytest/results.json b/tests/pytest/results.json index 7dba5add..8cd51ad9 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -691,39 +691,39 @@ "total_badness": 2772.6154636 }, { - "ne1d": 398, - "ne2d": 1030, - "ne3d": 1389, - "quality_histogram": "[0, 0, 0, 0, 2, 5, 18, 35, 47, 74, 111, 126, 131, 179, 189, 185, 134, 93, 46, 14]", - "total_badness": 2178.5663259 + "ne1d": 298, + "ne2d": 608, + "ne3d": 770, + "quality_histogram": "[0, 0, 0, 1, 10, 9, 19, 15, 35, 46, 62, 87, 79, 89, 83, 87, 64, 45, 30, 9]", + "total_badness": 1284.6220542 }, { - "ne1d": 422, - "ne2d": 1094, - "ne3d": 1530, - "quality_histogram": "[0, 0, 0, 0, 0, 7, 14, 43, 46, 79, 94, 164, 155, 163, 212, 180, 180, 118, 61, 14]", - "total_badness": 2364.3186941 + "ne1d": 370, + "ne2d": 854, + "ne3d": 1130, + "quality_histogram": "[0, 0, 0, 0, 2, 4, 17, 25, 26, 34, 64, 107, 137, 161, 156, 181, 93, 73, 42, 8]", + "total_badness": 1739.2621504 }, { - "ne1d": 456, - "ne2d": 1230, - "ne3d": 1988, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 2, 5, 19, 39, 62, 112, 177, 236, 314, 304, 295, 236, 140, 45]", - "total_badness": 2747.770553 + "ne1d": 516, + "ne2d": 1584, + "ne3d": 2549, + "quality_histogram": "[0, 0, 0, 0, 2, 1, 7, 19, 30, 53, 121, 174, 224, 296, 384, 362, 331, 304, 201, 40]", + "total_badness": 3600.6650263 }, { - "ne1d": 498, - "ne2d": 1396, - "ne3d": 2903, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 4, 13, 31, 64, 136, 221, 397, 484, 533, 504, 399, 114]", - "total_badness": 3701.6633824 + "ne1d": 722, + "ne2d": 2888, + "ne3d": 6818, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 12, 29, 67, 167, 379, 655, 877, 1099, 1146, 1177, 948, 258]", + "total_badness": 8742.2896959 }, { - "ne1d": 538, - "ne2d": 1670, - "ne3d": 4609, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 14, 45, 103, 220, 448, 693, 963, 1055, 803, 257]", - "total_badness": 5628.2514122 + "ne1d": 1862, + "ne2d": 19516, + "ne3d": 135482, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 6, 30, 145, 444, 1158, 3034, 7025, 13447, 21335, 28448, 30344, 22953, 7112]", + "total_badness": 165806.81509 } ], "lshape3d.geo": [ @@ -899,39 +899,39 @@ "total_badness": 1672.6379358 }, { - "ne1d": 146, - "ne2d": 378, - "ne3d": 629, - "quality_histogram": "[0, 0, 0, 0, 1, 4, 13, 14, 23, 44, 56, 74, 86, 82, 70, 72, 36, 38, 10, 6]", - "total_badness": 1030.3136745 + "ne1d": 112, + "ne2d": 212, + "ne3d": 346, + "quality_histogram": "[0, 0, 0, 3, 8, 8, 8, 9, 19, 25, 40, 40, 35, 39, 38, 37, 17, 14, 5, 1]", + "total_badness": 629.86936176 }, { - "ne1d": 156, - "ne2d": 394, - "ne3d": 758, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 10, 24, 33, 62, 90, 103, 138, 113, 90, 60, 22, 10]", - "total_badness": 1097.0227588 + "ne1d": 134, + "ne2d": 288, + "ne3d": 523, + "quality_histogram": "[0, 0, 0, 0, 0, 5, 5, 4, 14, 15, 32, 48, 68, 67, 66, 76, 44, 43, 29, 7]", + "total_badness": 790.86141744 }, { - "ne1d": 170, - "ne2d": 454, - "ne3d": 1180, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 4, 12, 16, 43, 89, 116, 178, 208, 222, 153, 99, 37]", - "total_badness": 1563.8386897 + "ne1d": 194, + "ne2d": 594, + "ne3d": 1742, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 5, 9, 40, 88, 126, 192, 280, 281, 279, 241, 165, 34]", + "total_badness": 2325.4945287 }, { - "ne1d": 190, - "ne2d": 504, - "ne3d": 1516, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 20, 50, 73, 141, 210, 280, 272, 238, 170, 55]", - "total_badness": 1957.4591373 + "ne1d": 266, + "ne2d": 990, + "ne3d": 4103, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 13, 28, 69, 162, 317, 534, 761, 831, 732, 513, 140]", + "total_badness": 5196.8765579 }, { - "ne1d": 230, - "ne2d": 698, - "ne3d": 3545, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 6, 12, 20, 44, 109, 246, 424, 580, 665, 742, 515, 180]", - "total_badness": 4425.483014 + "ne1d": 674, + "ne2d": 6870, + "ne3d": 82768, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 14, 59, 188, 513, 1613, 4088, 7976, 12954, 17553, 18871, 14413, 4526]", + "total_badness": 100797.22838 } ], "period.geo": [ From f9c462e94e4a5d24a0eebf102cdfa9b030c34103 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Mon, 7 Oct 2019 13:41:15 +0200 Subject: [PATCH 012/120] add plane test --- tests/pytest/geofiles/plane.stl | 15682 ++++++++++++++++++++++++++++++ tests/pytest/results.json | 44 + tests/pytest/test_tutorials.py | 27 +- 3 files changed, 15745 insertions(+), 8 deletions(-) create mode 100644 tests/pytest/geofiles/plane.stl diff --git a/tests/pytest/geofiles/plane.stl b/tests/pytest/geofiles/plane.stl new file mode 100644 index 00000000..841c3426 --- /dev/null +++ b/tests/pytest/geofiles/plane.stl @@ -0,0 +1,15682 @@ +solid Exported from Blender-2.80 (sub 74) +facet normal 0.191110 0.013657 0.981474 +outer loop +vertex 21.194145 2.557368 9.374599 +vertex 21.148577 1.562913 9.397309 +vertex 22.736126 1.562173 9.088195 +endloop +endfacet +facet normal 0.185636 0.004848 0.982607 +outer loop +vertex 21.194145 2.557368 9.374599 +vertex 22.736126 1.562173 9.088195 +vertex 22.751976 2.556384 9.080295 +endloop +endfacet +facet normal 0.204879 0.041043 0.977926 +outer loop +vertex 21.148577 1.562913 9.397309 +vertex 21.028854 0.738857 9.456977 +vertex 22.697634 0.738462 9.107379 +endloop +endfacet +facet normal 0.191110 0.013928 0.981470 +outer loop +vertex 21.148577 1.562913 9.397309 +vertex 22.697634 0.738462 9.107379 +vertex 22.736126 1.562173 9.088195 +endloop +endfacet +facet normal 0.217324 0.004292 0.976090 +outer loop +vertex 22.751976 2.556384 9.080295 +vertex 22.736126 1.562173 9.088195 +vertex 24.224312 1.561327 8.756858 +endloop +endfacet +facet normal 0.214909 0.000543 0.976634 +outer loop +vertex 22.751976 2.556384 9.080295 +vertex 24.224312 1.561327 8.756858 +vertex 24.226292 2.555258 8.755870 +endloop +endfacet +facet normal 0.222975 0.012281 0.974747 +outer loop +vertex 22.736126 1.562173 9.088195 +vertex 22.697634 0.738462 9.107379 +vertex 24.219498 0.738010 8.759255 +endloop +endfacet +facet normal 0.217324 0.001572 0.976098 +outer loop +vertex 22.736126 1.562173 9.088195 +vertex 24.219498 0.738010 8.759255 +vertex 24.224312 1.561327 8.756858 +endloop +endfacet +facet normal 0.135843 0.002594 0.990727 +outer loop +vertex 19.769468 3.808219 9.566667 +vertex 19.760412 2.558099 9.571181 +vertex 21.194145 2.557368 9.374599 +endloop +endfacet +facet normal 0.135217 0.001868 0.990814 +outer loop +vertex 19.769468 3.808219 9.566667 +vertex 21.194145 2.557368 9.374599 +vertex 21.200653 3.807420 9.371354 +endloop +endfacet +facet normal 0.140126 0.022514 0.989878 +outer loop +vertex 19.760412 2.558099 9.571181 +vertex 19.697014 1.563463 9.602778 +vertex 21.148577 1.562913 9.397309 +endloop +endfacet +facet normal 0.135833 0.016398 0.990596 +outer loop +vertex 19.760412 2.558099 9.571181 +vertex 21.148577 1.562913 9.397309 +vertex 21.194145 2.557368 9.374599 +endloop +endfacet +facet normal 0.155681 0.077323 0.984776 +outer loop +vertex 19.697014 1.563463 9.602778 +vertex 19.506817 0.739151 9.697570 +vertex 21.028854 0.738857 9.456977 +endloop +endfacet +facet normal 0.139988 0.051260 0.988825 +outer loop +vertex 19.697014 1.563463 9.602778 +vertex 21.028854 0.738857 9.456977 +vertex 21.148577 1.562913 9.397309 +endloop +endfacet +facet normal 0.219664 0.209516 0.952812 +outer loop +vertex 19.506817 0.739151 9.697570 +vertex 18.900000 0.000000 10.000000 +vertex 20.833847 0.000000 9.554167 +endloop +endfacet +facet normal 0.155540 0.088368 0.983869 +outer loop +vertex 19.506817 0.739151 9.697570 +vertex 20.833847 0.000000 9.554167 +vertex 21.028854 0.738857 9.456977 +endloop +endfacet +facet normal 0.225734 0.068252 0.971795 +outer loop +vertex 21.028854 0.738857 9.456977 +vertex 20.833847 0.000000 9.554167 +vertex 22.645555 0.000000 9.133333 +endloop +endfacet +facet normal 0.205006 0.019935 0.978558 +outer loop +vertex 21.028854 0.738857 9.456977 +vertex 22.645555 0.000000 9.133333 +vertex 22.697634 0.738462 9.107379 +endloop +endfacet +facet normal 0.230193 0.017963 0.972979 +outer loop +vertex 22.697634 0.738462 9.107379 +vertex 22.645555 0.000000 9.133333 +vertex 24.212990 0.000000 8.762500 +endloop +endfacet +facet normal 0.222988 0.002319 0.974818 +outer loop +vertex 22.697634 0.738462 9.107379 +vertex 24.212990 0.000000 8.762500 +vertex 24.219498 0.738010 8.759255 +endloop +endfacet +facet normal 0.239169 0.002159 0.970976 +outer loop +vertex 24.219498 0.738010 8.759255 +vertex 24.212990 0.000000 8.762500 +vertex 25.414011 0.000000 8.466667 +endloop +endfacet +facet normal 0.237910 0.000000 0.971287 +outer loop +vertex 24.219498 0.738010 8.759255 +vertex 25.414011 0.000000 8.466667 +vertex 25.414009 0.737545 8.466667 +endloop +endfacet +facet normal 0.237910 0.001437 0.971286 +outer loop +vertex 24.224312 1.561327 8.756858 +vertex 24.219498 0.738010 8.759255 +vertex 25.414009 0.737545 8.466667 +endloop +endfacet +facet normal 0.236973 0.000002 0.971516 +outer loop +vertex 24.224312 1.561327 8.756858 +vertex 25.414009 0.737545 8.466667 +vertex 25.414009 1.560457 8.466666 +endloop +endfacet +facet normal 0.236973 0.000494 0.971516 +outer loop +vertex 24.226292 2.555258 8.755870 +vertex 24.224312 1.561327 8.756858 +vertex 25.414009 1.560457 8.466666 +endloop +endfacet +facet normal 0.236582 -0.000001 0.971611 +outer loop +vertex 24.226292 2.555258 8.755870 +vertex 25.414009 1.560457 8.466666 +vertex 25.414009 2.554101 8.466667 +endloop +endfacet +facet normal 0.236583 0.000056 0.971611 +outer loop +vertex 24.226574 3.805111 8.755730 +vertex 24.226292 2.555258 8.755870 +vertex 25.414009 2.554101 8.466667 +endloop +endfacet +facet normal 0.236526 -0.000001 0.971625 +outer loop +vertex 24.226574 3.805111 8.755730 +vertex 25.414009 2.554101 8.466667 +vertex 25.414011 3.803846 8.466667 +endloop +endfacet +facet normal 0.214909 0.000492 0.976634 +outer loop +vertex 22.754240 3.806343 9.079166 +vertex 22.751976 2.556384 9.080295 +vertex 24.226292 2.555258 8.755870 +endloop +endfacet +facet normal 0.214560 0.000062 0.976711 +outer loop +vertex 22.754240 3.806343 9.079166 +vertex 24.226292 2.555258 8.755870 +vertex 24.226574 3.805111 8.755730 +endloop +endfacet +facet normal 0.185636 0.001584 0.982617 +outer loop +vertex 21.200653 3.807420 9.371354 +vertex 21.194145 2.557368 9.374599 +vertex 22.751976 2.556384 9.080295 +endloop +endfacet +facet normal 0.184832 0.000552 0.982770 +outer loop +vertex 21.200653 3.807420 9.371354 +vertex 22.751976 2.556384 9.080295 +vertex 22.754240 3.806343 9.079166 +endloop +endfacet +facet normal -0.091368 0.009363 0.995773 +outer loop +vertex 18.613682 2.558479 9.619390 +vertex 17.733503 2.558462 9.538629 +vertex 17.717653 1.563737 9.546528 +endloop +endfacet +facet normal -0.111632 0.027793 0.993361 +outer loop +vertex 18.613682 2.558479 9.619390 +vertex 17.717653 1.563737 9.546528 +vertex 18.568115 1.563749 9.642101 +endloop +endfacet +facet normal -0.247479 0.001455 0.968892 +outer loop +vertex 17.733503 2.558462 9.538629 +vertex 17.054708 2.558016 9.365246 +vertex 17.052727 1.563401 9.366233 +endloop +endfacet +facet normal -0.261688 0.011834 0.965080 +outer loop +vertex 17.733503 2.558462 9.538629 +vertex 17.052727 1.563401 9.366233 +vertex 17.717653 1.563737 9.546528 +endloop +endfacet +facet normal -0.111632 0.028326 0.993346 +outer loop +vertex 18.568115 1.563749 9.642101 +vertex 17.717653 1.563737 9.546528 +vertex 17.679161 0.739297 9.565712 +endloop +endfacet +facet normal -0.173365 0.096112 0.980157 +outer loop +vertex 18.568115 1.563749 9.642101 +vertex 17.679161 0.739297 9.565712 +vertex 18.448393 0.739303 9.701769 +endloop +endfacet +facet normal -0.261698 0.004334 0.965140 +outer loop +vertex 17.717653 1.563737 9.546528 +vertex 17.052727 1.563401 9.366233 +vertex 17.047916 0.739118 9.368630 +endloop +endfacet +facet normal -0.297839 0.036104 0.953933 +outer loop +vertex 17.717653 1.563737 9.546528 +vertex 17.047916 0.739118 9.368630 +vertex 17.679161 0.739297 9.565712 +endloop +endfacet +facet normal 0.043013 0.002369 0.999072 +outer loop +vertex 19.769468 3.808219 9.566667 +vertex 18.620193 3.808635 9.616146 +vertex 18.613682 2.558479 9.619390 +endloop +endfacet +facet normal 0.042005 0.003304 0.999112 +outer loop +vertex 19.769468 3.808219 9.566667 +vertex 18.613682 2.558479 9.619390 +vertex 19.760412 2.558099 9.571181 +endloop +endfacet +facet normal -0.088572 0.001059 0.996069 +outer loop +vertex 18.620193 3.808635 9.616146 +vertex 17.735767 3.808617 9.537500 +vertex 17.733503 2.558462 9.538629 +endloop +endfacet +facet normal -0.091374 0.003061 0.995812 +outer loop +vertex 18.620193 3.808635 9.616146 +vertex 17.733503 2.558462 9.538629 +vertex 18.613682 2.558479 9.619390 +endloop +endfacet +facet normal -0.245484 0.000165 0.969401 +outer loop +vertex 17.735767 3.808617 9.537500 +vertex 17.054991 3.808129 9.365105 +vertex 17.054708 2.558016 9.365246 +endloop +endfacet +facet normal -0.247484 0.001322 0.968891 +outer loop +vertex 17.735767 3.808617 9.537500 +vertex 17.054708 2.558016 9.365246 +vertex 17.733503 2.558462 9.538629 +endloop +endfacet +facet normal -0.395446 0.000000 0.918489 +outer loop +vertex 17.054991 3.808129 9.365105 +vertex 16.516666 3.807135 9.133333 +vertex 16.516666 2.557108 9.133333 +endloop +endfacet +facet normal -0.395828 0.000193 0.918324 +outer loop +vertex 17.054991 3.808129 9.365105 +vertex 16.516666 2.557108 9.133333 +vertex 17.054708 2.558016 9.365246 +endloop +endfacet +facet normal -0.395827 0.000000 0.918325 +outer loop +vertex 17.054708 2.558016 9.365246 +vertex 16.516666 2.557108 9.133333 +vertex 16.516666 1.562718 9.133333 +endloop +endfacet +facet normal -0.398483 0.001704 0.917174 +outer loop +vertex 17.054708 2.558016 9.365246 +vertex 16.516666 1.562718 9.133333 +vertex 17.052727 1.563401 9.366233 +endloop +endfacet +facet normal -0.398481 0.000000 0.917176 +outer loop +vertex 17.052727 1.563401 9.366233 +vertex 16.516666 1.562718 9.133333 +vertex 16.516666 0.738753 9.133333 +endloop +endfacet +facet normal -0.404967 0.005022 0.914317 +outer loop +vertex 17.052727 1.563401 9.366233 +vertex 16.516666 0.738753 9.133333 +vertex 17.047916 0.739118 9.368630 +endloop +endfacet +facet normal -0.404970 0.000000 0.914330 +outer loop +vertex 17.047916 0.739118 9.368630 +vertex 16.516666 0.738753 9.133333 +vertex 16.516666 0.000000 9.133333 +endloop +endfacet +facet normal -0.413823 0.007640 0.910325 +outer loop +vertex 17.047916 0.739118 9.368630 +vertex 16.516666 0.000000 9.133333 +vertex 17.041407 0.000000 9.371875 +endloop +endfacet +facet normal -0.298019 0.006815 0.954536 +outer loop +vertex 17.679161 0.739297 9.565712 +vertex 17.047916 0.739118 9.368630 +vertex 17.041407 0.000000 9.371875 +endloop +endfacet +facet normal -0.350771 0.057525 0.934693 +outer loop +vertex 17.679161 0.739297 9.565712 +vertex 17.041407 0.000000 9.371875 +vertex 17.627083 0.000000 9.591667 +endloop +endfacet +facet normal -0.173979 0.046789 0.983637 +outer loop +vertex 18.448393 0.739303 9.701769 +vertex 17.679161 0.739297 9.565712 +vertex 17.627083 0.000000 9.591667 +endloop +endfacet +facet normal -0.307649 0.203345 0.929518 +outer loop +vertex 18.448393 0.739303 9.701769 +vertex 17.627083 0.000000 9.591667 +vertex 18.253386 0.000000 9.798959 +endloop +endfacet +facet normal 0.003953 0.129314 0.991596 +outer loop +vertex 19.506817 0.739151 9.697570 +vertex 18.448393 0.739303 9.701769 +vertex 18.253386 0.000000 9.798959 +endloop +endfacet +facet normal -0.250697 0.535724 0.806319 +outer loop +vertex 19.506817 0.739151 9.697570 +vertex 18.253386 0.000000 9.798959 +vertex 18.900000 0.000000 10.000000 +endloop +endfacet +facet normal 0.034751 0.067120 0.997140 +outer loop +vertex 19.697014 1.563463 9.602778 +vertex 18.568115 1.563749 9.642101 +vertex 18.448393 0.739303 9.701769 +endloop +endfacet +facet normal 0.003957 0.113339 0.993548 +outer loop +vertex 19.697014 1.563463 9.602778 +vertex 18.448393 0.739303 9.701769 +vertex 19.506817 0.739151 9.697570 +endloop +endfacet +facet normal 0.042000 0.020882 0.998899 +outer loop +vertex 19.760412 2.558099 9.571181 +vertex 18.613682 2.558479 9.619390 +vertex 18.568115 1.563749 9.642101 +endloop +endfacet +facet normal 0.034805 0.029516 0.998958 +outer loop +vertex 19.760412 2.558099 9.571181 +vertex 18.568115 1.563749 9.642101 +vertex 19.697014 1.563463 9.602778 +endloop +endfacet +facet normal 0.288243 0.045314 -0.956485 +outer loop +vertex 26.129168 11.849633 8.070150 +vertex 26.005474 12.920404 8.083603 +vertex 26.240326 12.930573 8.154860 +endloop +endfacet +facet normal 0.274405 0.047052 -0.960462 +outer loop +vertex 26.129168 11.849633 8.070150 +vertex 26.240326 12.930573 8.154860 +vertex 26.372263 11.851037 8.139670 +endloop +endfacet +facet normal 0.318796 0.178510 -0.930862 +outer loop +vertex 26.005474 12.920404 8.083603 +vertex 25.675266 13.692222 8.118527 +vertex 25.882959 13.725335 8.196007 +endloop +endfacet +facet normal 0.278988 0.174332 -0.944338 +outer loop +vertex 26.005474 12.920404 8.083603 +vertex 25.882959 13.725335 8.196007 +vertex 26.240326 12.930573 8.154860 +endloop +endfacet +facet normal 0.468854 0.044890 0.882134 +outer loop +vertex 26.372263 11.851037 8.139670 +vertex 26.240326 12.930573 8.154860 +vertex 26.005474 12.920482 8.280198 +endloop +endfacet +facet normal 0.458197 0.040470 0.887929 +outer loop +vertex 26.372263 11.851037 8.139670 +vertex 26.005474 12.920482 8.280198 +vertex 26.129166 11.849897 8.265168 +endloop +endfacet +facet normal 0.487982 0.175154 0.855099 +outer loop +vertex 26.240326 12.930573 8.154860 +vertex 25.882959 13.725335 8.196007 +vertex 25.675266 13.692232 8.321312 +endloop +endfacet +facet normal 0.460435 0.150400 0.874859 +outer loop +vertex 26.240326 12.930573 8.154860 +vertex 25.675266 13.692232 8.321312 +vertex 26.005474 12.920482 8.280198 +endloop +endfacet +facet normal 0.047924 0.001828 -0.998849 +outer loop +vertex 25.414011 10.480907 8.033333 +vertex 25.400063 11.848212 8.035166 +vertex 26.129168 11.849633 8.070150 +endloop +endfacet +facet normal 0.047563 0.002017 -0.998866 +outer loop +vertex 25.414011 10.480907 8.033333 +vertex 26.129168 11.849633 8.070150 +vertex 26.146835 10.481279 8.068229 +endloop +endfacet +facet normal 0.050335 0.016690 -0.998593 +outer loop +vertex 25.400063 11.848212 8.035166 +vertex 25.302427 12.910231 8.047994 +vertex 26.005474 12.920404 8.083603 +endloop +endfacet +facet normal 0.047885 0.018078 -0.998689 +outer loop +vertex 25.400063 11.848212 8.035166 +vertex 26.005474 12.920404 8.083603 +vertex 26.129168 11.849633 8.070150 +endloop +endfacet +facet normal 0.057660 0.062379 -0.996386 +outer loop +vertex 25.302427 12.910231 8.047994 +vertex 25.061609 13.654374 8.080646 +vertex 25.675266 13.692222 8.118527 +endloop +endfacet +facet normal 0.049517 0.066280 -0.996572 +outer loop +vertex 25.302427 12.910231 8.047994 +vertex 25.675266 13.692222 8.118527 +vertex 26.005474 12.920404 8.083603 +endloop +endfacet +facet normal 0.095358 0.176334 -0.979701 +outer loop +vertex 25.061609 13.654374 8.080646 +vertex 24.762611 14.062502 8.125000 +vertex 25.047661 14.199250 8.177359 +endloop +endfacet +facet normal 0.049852 0.175785 -0.983165 +outer loop +vertex 25.061609 13.654374 8.080646 +vertex 25.047661 14.199250 8.177359 +vertex 25.675266 13.692222 8.118527 +endloop +endfacet +facet normal 0.320723 0.490980 -0.809985 +outer loop +vertex 25.675266 13.692222 8.118527 +vertex 25.047661 14.199250 8.177359 +vertex 25.190845 14.267941 8.275694 +endloop +endfacet +facet normal 0.249862 0.445005 -0.859965 +outer loop +vertex 25.675266 13.692222 8.118527 +vertex 25.190845 14.267941 8.275694 +vertex 25.882959 13.725335 8.196007 +endloop +endfacet +facet normal 0.459444 0.475901 0.749953 +outer loop +vertex 25.882959 13.725335 8.196007 +vertex 25.190845 14.267941 8.275694 +vertex 25.047661 14.199251 8.407001 +endloop +endfacet +facet normal 0.428374 0.392727 0.813794 +outer loop +vertex 25.882959 13.725335 8.196007 +vertex 25.047661 14.199251 8.407001 +vertex 25.675266 13.692232 8.321312 +endloop +endfacet +facet normal 0.290536 0.201539 0.935399 +outer loop +vertex 25.675266 13.692232 8.321312 +vertex 25.047661 14.199251 8.407001 +vertex 24.762611 14.062502 8.525001 +endloop +endfacet +facet normal 0.269544 0.140295 0.952714 +outer loop +vertex 25.675266 13.692232 8.321312 +vertex 24.762611 14.062502 8.525001 +vertex 25.061607 13.654394 8.500504 +endloop +endfacet +facet normal 0.275863 0.066949 0.958863 +outer loop +vertex 26.005474 12.920482 8.280198 +vertex 25.675266 13.692232 8.321312 +vertex 25.061607 13.654394 8.500504 +endloop +endfacet +facet normal 0.269238 0.057685 0.961344 +outer loop +vertex 26.005474 12.920482 8.280198 +vertex 25.061607 13.654394 8.500504 +vertex 25.302429 12.910394 8.477700 +endloop +endfacet +facet normal 0.270178 0.017701 0.962648 +outer loop +vertex 26.129166 11.849897 8.265168 +vertex 26.005474 12.920482 8.280198 +vertex 25.302429 12.910394 8.477700 +endloop +endfacet +facet normal 0.268016 0.015887 0.963283 +outer loop +vertex 26.129166 11.849897 8.265168 +vertex 25.302429 12.910394 8.477700 +vertex 25.400064 11.848762 8.468046 +endloop +endfacet +facet normal 0.268070 0.001951 0.963397 +outer loop +vertex 26.146837 10.481909 8.263021 +vertex 26.129166 11.849897 8.265168 +vertex 25.400064 11.848762 8.468046 +endloop +endfacet +facet normal 0.267745 0.001759 0.963488 +outer loop +vertex 26.146837 10.481909 8.263021 +vertex 25.400064 11.848762 8.468046 +vertex 25.414009 10.482211 8.466667 +endloop +endfacet +facet normal 0.458701 0.004906 0.888577 +outer loop +vertex 26.391113 10.481605 8.137500 +vertex 26.372263 11.851037 8.139670 +vertex 26.129166 11.849897 8.265168 +endloop +endfacet +facet normal 0.457041 0.004507 0.889434 +outer loop +vertex 26.391113 10.481605 8.137500 +vertex 26.129166 11.849897 8.265168 +vertex 26.146837 10.481909 8.263021 +endloop +endfacet +facet normal 0.274929 0.004899 -0.961452 +outer loop +vertex 26.146835 10.481279 8.068229 +vertex 26.129168 11.849633 8.070150 +vertex 26.372263 11.851037 8.139670 +endloop +endfacet +facet normal 0.272809 0.005281 -0.962054 +outer loop +vertex 26.146835 10.481279 8.068229 +vertex 26.372263 11.851037 8.139670 +vertex 26.391113 10.481605 8.137500 +endloop +endfacet +facet normal 0.094174 0.867630 0.488210 +outer loop +vertex 21.163698 14.718087 8.937361 +vertex 22.682304 14.658746 8.749882 +vertex 22.698479 14.771414 8.546528 +endloop +endfacet +facet normal 0.074718 0.905827 0.417007 +outer loop +vertex 21.163698 14.718087 8.937361 +vertex 22.698479 14.771414 8.546528 +vertex 21.149673 14.834710 8.686545 +endloop +endfacet +facet normal 0.175628 0.798933 0.575206 +outer loop +vertex 22.682304 14.658746 8.749882 +vertex 24.028313 14.500335 8.558929 +vertex 24.096714 14.599972 8.399652 +endloop +endfacet +facet normal 0.156554 0.858600 0.488157 +outer loop +vertex 22.682304 14.658746 8.749882 +vertex 24.096714 14.599972 8.399652 +vertex 22.698479 14.771414 8.546528 +endloop +endfacet +facet normal -0.008983 0.870139 -0.492724 +outer loop +vertex 21.149673 14.834710 8.686545 +vertex 22.698479 14.771414 8.546528 +vertex 22.672430 14.658748 8.348035 +endloop +endfacet +facet normal 0.010635 0.906013 -0.423115 +outer loop +vertex 21.149673 14.834710 8.686545 +vertex 22.672430 14.658748 8.348035 +vertex 21.130371 14.718086 8.436337 +endloop +endfacet +facet normal 0.038324 0.811775 -0.582711 +outer loop +vertex 22.698479 14.771414 8.546528 +vertex 24.096714 14.599972 8.399652 +vertex 24.027081 14.500335 8.256269 +endloop +endfacet +facet normal 0.067209 0.863893 -0.499172 +outer loop +vertex 22.698479 14.771414 8.546528 +vertex 24.027081 14.500335 8.256269 +vertex 22.672430 14.658748 8.348035 +endloop +endfacet +facet normal 0.097537 0.510328 0.854431 +outer loop +vertex 19.733356 14.375003 9.305555 +vertex 21.174864 14.368311 9.145000 +vertex 21.163698 14.718087 8.937361 +endloop +endfacet +facet normal 0.077329 0.561655 0.823750 +outer loop +vertex 19.733356 14.375003 9.305555 +vertex 21.163698 14.718087 8.937361 +vertex 19.700632 14.726565 9.068924 +endloop +endfacet +facet normal 0.149635 0.432774 0.888997 +outer loop +vertex 21.174864 14.368311 9.145000 +vertex 22.665283 14.321471 8.916937 +vertex 22.682304 14.658746 8.749882 +endloop +endfacet +facet normal 0.125014 0.509412 0.851394 +outer loop +vertex 21.174864 14.368311 9.145000 +vertex 22.682304 14.658746 8.749882 +vertex 21.163698 14.718087 8.937361 +endloop +endfacet +facet normal 0.195237 0.347732 0.917041 +outer loop +vertex 22.665283 14.321471 8.916937 +vertex 23.949944 14.205942 8.687243 +vertex 24.028313 14.500335 8.558929 +endloop +endfacet +facet normal 0.176210 0.429746 0.885590 +outer loop +vertex 22.665283 14.321471 8.916937 +vertex 24.028313 14.500335 8.558929 +vertex 22.682304 14.658746 8.749882 +endloop +endfacet +facet normal 0.237569 0.301556 0.923377 +outer loop +vertex 23.949944 14.205942 8.687243 +vertex 24.762611 14.062502 8.525001 +vertex 25.047661 14.199251 8.407001 +endloop +endfacet +facet normal 0.234975 0.335129 0.912401 +outer loop +vertex 23.949944 14.205942 8.687243 +vertex 25.047661 14.199251 8.407001 +vertex 24.028313 14.500335 8.558929 +endloop +endfacet +facet normal 0.299377 0.671564 0.677772 +outer loop +vertex 24.028313 14.500335 8.558929 +vertex 25.047661 14.199251 8.407001 +vertex 25.190845 14.267941 8.275694 +endloop +endfacet +facet normal 0.294422 0.748252 0.594504 +outer loop +vertex 24.028313 14.500335 8.558929 +vertex 25.190845 14.267941 8.275694 +vertex 24.096714 14.599972 8.399652 +endloop +endfacet +facet normal 0.136319 0.707929 -0.693003 +outer loop +vertex 24.096714 14.599972 8.399652 +vertex 25.190845 14.267941 8.275694 +vertex 25.047661 14.199250 8.177359 +endloop +endfacet +facet normal 0.178012 0.765464 -0.618366 +outer loop +vertex 24.096714 14.599972 8.399652 +vertex 25.047661 14.199250 8.177359 +vertex 24.027081 14.500335 8.256269 +endloop +endfacet +facet normal 0.020907 0.319184 -0.947462 +outer loop +vertex 24.027081 14.500335 8.256269 +vertex 25.047661 14.199250 8.177359 +vertex 24.762611 14.062502 8.125000 +endloop +endfacet +facet normal 0.035814 0.341726 -0.939117 +outer loop +vertex 24.027081 14.500335 8.256269 +vertex 24.762611 14.062502 8.125000 +vertex 23.947687 14.205942 8.146118 +endloop +endfacet +facet normal -0.021727 0.355488 -0.934428 +outer loop +vertex 22.672430 14.658748 8.348035 +vertex 24.027081 14.500335 8.256269 +vertex 23.947687 14.205942 8.146118 +endloop +endfacet +facet normal 0.010905 0.432699 -0.901473 +outer loop +vertex 22.672430 14.658748 8.348035 +vertex 23.947687 14.205942 8.146118 +vertex 22.647228 14.321472 8.185841 +endloop +endfacet +facet normal -0.034768 0.435232 -0.899647 +outer loop +vertex 21.130371 14.718086 8.436337 +vertex 22.672430 14.658748 8.348035 +vertex 22.647228 14.321472 8.185841 +endloop +endfacet +facet normal -0.008821 0.509649 -0.860337 +outer loop +vertex 21.130371 14.718086 8.436337 +vertex 22.647228 14.321472 8.185841 +vertex 21.113926 14.368312 8.229306 +endloop +endfacet +facet normal -0.032112 0.510214 -0.859448 +outer loop +vertex 19.621639 14.726565 8.497743 +vertex 21.130371 14.718086 8.436337 +vertex 21.113926 14.368312 8.229306 +endloop +endfacet +facet normal -0.014833 0.559269 -0.828854 +outer loop +vertex 19.621639 14.726565 8.497743 +vertex 21.113926 14.368312 8.229306 +vertex 19.588913 14.375001 8.261111 +endloop +endfacet +facet normal -0.021865 0.906804 -0.420984 +outer loop +vertex 19.661137 14.843751 8.783334 +vertex 21.149673 14.834710 8.686545 +vertex 21.130371 14.718086 8.436337 +endloop +endfacet +facet normal -0.010198 0.925593 -0.378382 +outer loop +vertex 19.661137 14.843751 8.783334 +vertex 21.130371 14.718086 8.436337 +vertex 19.621639 14.726565 8.497743 +endloop +endfacet +facet normal 0.042957 0.906849 0.419261 +outer loop +vertex 19.700632 14.726565 9.068924 +vertex 21.163698 14.718087 8.937361 +vertex 21.149673 14.834710 8.686545 +endloop +endfacet +facet normal 0.030065 0.926179 0.375884 +outer loop +vertex 19.700632 14.726565 9.068924 +vertex 21.149673 14.834710 8.686545 +vertex 19.661137 14.843751 8.783334 +endloop +endfacet +facet normal -0.595026 0.014885 0.803569 +outer loop +vertex 15.731250 2.553990 8.604167 +vertex 15.695139 1.560369 8.595834 +vertex 16.068663 1.561682 8.872396 +endloop +endfacet +facet normal -0.618699 0.001989 0.785625 +outer loop +vertex 15.731250 2.553990 8.604167 +vertex 16.068663 1.561682 8.872396 +vertex 16.073177 2.555731 8.873438 +endloop +endfacet +facet normal -0.585481 0.007650 0.810650 +outer loop +vertex 15.695139 1.560369 8.595834 +vertex 15.679340 0.737497 8.592188 +vertex 16.066689 0.738199 8.871941 +endloop +endfacet +facet normal -0.595062 0.000980 0.803679 +outer loop +vertex 15.695139 1.560369 8.595834 +vertex 16.066689 0.738199 8.871941 +vertex 16.068663 1.561682 8.872396 +endloop +endfacet +facet normal -0.897700 0.269418 0.348638 +outer loop +vertex 15.767362 3.799347 8.177083 +vertex 15.437763 2.799557 8.101022 +vertex 15.527117 2.781798 8.344819 +endloop +endfacet +facet normal -0.820203 0.100823 -0.563118 +outer loop +vertex 15.767362 3.799347 8.177083 +vertex 15.527117 2.781798 8.344819 +vertex 15.635330 3.801585 8.369792 +endloop +endfacet +facet normal -0.584159 0.001216 0.811638 +outer loop +vertex 15.679340 0.737497 8.592188 +vertex 15.677083 0.000000 8.591667 +vertex 16.066406 0.000000 8.871875 +endloop +endfacet +facet normal -0.585496 0.000154 0.810675 +outer loop +vertex 15.679340 0.737497 8.592188 +vertex 16.066406 0.000000 8.871875 +vertex 16.066689 0.738199 8.871941 +endloop +endfacet +facet normal -0.502158 0.000114 0.864776 +outer loop +vertex 16.066689 0.738199 8.871941 +vertex 16.066406 0.000000 8.871875 +vertex 16.516666 0.000000 9.133333 +endloop +endfacet +facet normal -0.502302 0.000000 0.864693 +outer loop +vertex 16.066689 0.738199 8.871941 +vertex 16.516666 0.000000 9.133333 +vertex 16.516666 0.738753 9.133333 +endloop +endfacet +facet normal -0.502301 0.000725 0.864692 +outer loop +vertex 16.068663 1.561682 8.872396 +vertex 16.066689 0.738199 8.871941 +vertex 16.516666 0.738753 9.133333 +endloop +endfacet +facet normal -0.503297 0.000000 0.864113 +outer loop +vertex 16.068663 1.561682 8.872396 +vertex 16.516666 0.738753 9.133333 +vertex 16.516666 1.562718 9.133333 +endloop +endfacet +facet normal -0.503299 0.001380 0.864111 +outer loop +vertex 16.073177 2.555731 8.873438 +vertex 16.068663 1.561682 8.872396 +vertex 16.516666 1.562718 9.133333 +endloop +endfacet +facet normal -0.505600 0.000000 0.862768 +outer loop +vertex 16.073177 2.555731 8.873438 +vertex 16.516666 1.562718 9.133333 +vertex 16.516666 2.557108 9.133333 +endloop +endfacet +facet normal -0.505605 0.001107 0.862764 +outer loop +vertex 16.077690 3.805630 8.874479 +vertex 16.073177 2.555731 8.873438 +vertex 16.516666 2.557108 9.133333 +endloop +endfacet +facet normal -0.507944 0.000000 0.861390 +outer loop +vertex 16.077690 3.805630 8.874479 +vertex 16.516666 2.557108 9.133333 +vertex 16.516666 3.807135 9.133333 +endloop +endfacet +facet normal -0.618684 0.012638 0.785538 +outer loop +vertex 15.767361 3.803730 8.612500 +vertex 15.731250 2.553990 8.604167 +vertex 16.073177 2.555731 8.873438 +endloop +endfacet +facet normal -0.645074 0.001693 0.764118 +outer loop +vertex 15.767361 3.803730 8.612500 +vertex 16.073177 2.555731 8.873438 +vertex 16.077690 3.805630 8.874479 +endloop +endfacet +facet normal -0.875831 0.081288 0.475723 +outer loop +vertex 15.767361 3.803730 8.612500 +vertex 15.635330 3.801585 8.369792 +vertex 15.527117 2.781798 8.344819 +endloop +endfacet +facet normal -0.755954 0.064263 0.651463 +outer loop +vertex 15.538307 2.783193 8.357668 +vertex 15.518668 2.552154 8.357668 +vertex 15.731250 2.553990 8.604167 +endloop +endfacet +facet normal -0.754405 0.005387 0.656388 +outer loop +vertex 15.767361 3.803730 8.612500 +vertex 15.527117 2.781798 8.344819 +vertex 15.538307 2.783193 8.357668 +endloop +endfacet +facet normal -0.778982 0.018329 0.626778 +outer loop +vertex 15.538307 2.783193 8.357668 +vertex 15.731250 2.553990 8.604167 +vertex 15.767361 3.803730 8.612500 +endloop +endfacet +facet normal -0.931106 0.000000 0.364749 +outer loop +vertex 15.694011 8.850069 8.383333 +vertex 15.694011 7.087864 8.383333 +vertex 15.785417 7.089402 8.616667 +endloop +endfacet +facet normal -0.931105 0.000000 0.364751 +outer loop +vertex 15.694011 8.850069 8.383333 +vertex 15.785417 7.089402 8.616667 +vertex 15.785417 8.851082 8.616667 +endloop +endfacet +facet normal -0.925850 0.003136 0.377877 +outer loop +vertex 15.694011 7.087864 8.383333 +vertex 15.687522 5.352535 8.381836 +vertex 15.783160 5.354500 8.616146 +endloop +endfacet +facet normal -0.931107 0.001101 0.364744 +outer loop +vertex 15.694011 7.087864 8.383333 +vertex 15.783160 5.354500 8.616146 +vertex 15.785417 7.089402 8.616667 +endloop +endfacet +facet normal -0.659397 0.000000 0.751795 +outer loop +vertex 15.785417 8.851082 8.616667 +vertex 15.785417 7.089402 8.616667 +vertex 16.079948 7.090765 8.875000 +endloop +endfacet +facet normal -0.659398 0.000000 0.751794 +outer loop +vertex 15.785417 8.851082 8.616667 +vertex 16.079948 7.090765 8.875000 +vertex 16.079948 8.851977 8.875000 +endloop +endfacet +facet normal -0.657566 0.000627 0.753396 +outer loop +vertex 15.785417 7.089402 8.616667 +vertex 15.783160 5.354500 8.616146 +vertex 16.079666 5.356243 8.874935 +endloop +endfacet +facet normal -0.659397 0.000080 0.751795 +outer loop +vertex 15.785417 7.089402 8.616667 +vertex 16.079666 5.356243 8.874935 +vertex 16.079948 7.090765 8.875000 +endloop +endfacet +facet normal -0.727986 0.000000 -0.685592 +outer loop +vertex 15.866667 10.481091 8.200000 +vertex 15.866667 8.849014 8.200000 +vertex 15.694011 8.850069 8.383333 +endloop +endfacet +facet normal -0.727990 0.000000 -0.685587 +outer loop +vertex 15.866667 10.481091 8.200000 +vertex 15.694011 8.850069 8.383333 +vertex 15.694011 10.481650 8.383333 +endloop +endfacet +facet normal -0.727987 0.000000 -0.685591 +outer loop +vertex 15.866667 8.849014 8.200000 +vertex 15.866667 7.086260 8.200000 +vertex 15.694011 7.087864 8.383333 +endloop +endfacet +facet normal -0.727987 0.000000 -0.685591 +outer loop +vertex 15.866667 8.849014 8.200000 +vertex 15.694011 7.087864 8.383333 +vertex 15.694011 8.850069 8.383333 +endloop +endfacet +facet normal -0.734084 0.004633 -0.679043 +outer loop +vertex 15.866667 7.086260 8.200000 +vertex 15.857639 5.350487 8.197917 +vertex 15.687522 5.352535 8.381836 +endloop +endfacet +facet normal -0.727966 0.003314 -0.685605 +outer loop +vertex 15.866667 7.086260 8.200000 +vertex 15.687522 5.352535 8.381836 +vertex 15.694011 7.087864 8.383333 +endloop +endfacet +facet normal -0.823380 0.055509 -0.564769 +outer loop +vertex 15.857639 5.350487 8.197917 +vertex 15.767362 3.799347 8.177083 +vertex 15.635330 3.801585 8.369792 +endloop +endfacet +facet normal -0.733620 0.029959 -0.678900 +outer loop +vertex 15.857639 5.350487 8.197917 +vertex 15.635330 3.801585 8.369792 +vertex 15.687522 5.352535 8.381836 +endloop +endfacet +facet normal -0.878237 0.025846 0.477526 +outer loop +vertex 15.687522 5.352535 8.381836 +vertex 15.635330 3.801585 8.369792 +vertex 15.767361 3.803730 8.612500 +endloop +endfacet +facet normal -0.925837 0.008545 0.377827 +outer loop +vertex 15.687522 5.352535 8.381836 +vertex 15.767361 3.803730 8.612500 +vertex 15.783160 5.354500 8.616146 +endloop +endfacet +facet normal -0.645081 0.004776 0.764099 +outer loop +vertex 15.783160 5.354500 8.616146 +vertex 15.767361 3.803730 8.612500 +vertex 16.077690 3.805630 8.874479 +endloop +endfacet +facet normal -0.657567 0.000617 0.753395 +outer loop +vertex 15.783160 5.354500 8.616146 +vertex 16.077690 3.805630 8.874479 +vertex 16.079666 5.356243 8.874935 +endloop +endfacet +facet normal -0.507942 0.000393 0.861391 +outer loop +vertex 16.079666 5.356243 8.874935 +vertex 16.077690 3.805630 8.874479 +vertex 16.516666 3.807135 9.133333 +endloop +endfacet +facet normal -0.508979 0.000000 0.860779 +outer loop +vertex 16.079666 5.356243 8.874935 +vertex 16.516666 3.807135 9.133333 +vertex 16.516666 5.357624 9.133333 +endloop +endfacet +facet normal -0.508979 0.000051 0.860779 +outer loop +vertex 16.079948 7.090765 8.875000 +vertex 16.079666 5.356243 8.874935 +vertex 16.516666 5.357624 9.133333 +endloop +endfacet +facet normal -0.509126 0.000000 0.860692 +outer loop +vertex 16.079948 7.090765 8.875000 +vertex 16.516666 5.357624 9.133333 +vertex 16.516666 7.091847 9.133333 +endloop +endfacet +facet normal -0.509128 0.000000 0.860691 +outer loop +vertex 16.079948 8.851977 8.875000 +vertex 16.079948 7.090765 8.875000 +vertex 16.516666 7.091847 9.133333 +endloop +endfacet +facet normal -0.509127 0.000000 0.860691 +outer loop +vertex 16.079948 8.851977 8.875000 +vertex 16.516666 7.091847 9.133333 +vertex 16.516666 8.852689 9.133333 +endloop +endfacet +facet normal -0.509127 0.000000 0.860691 +outer loop +vertex 16.079948 10.482659 8.875000 +vertex 16.079948 8.851977 8.875000 +vertex 16.516666 8.852689 9.133333 +endloop +endfacet +facet normal -0.509128 0.000000 0.860691 +outer loop +vertex 16.079948 10.482659 8.875000 +vertex 16.516666 8.852689 9.133333 +vertex 16.516666 10.483034 9.133333 +endloop +endfacet +facet normal -0.659397 0.000000 0.751795 +outer loop +vertex 15.785417 10.482183 8.616667 +vertex 15.785417 8.851082 8.616667 +vertex 16.079948 8.851977 8.875000 +endloop +endfacet +facet normal -0.659397 0.000000 0.751795 +outer loop +vertex 15.785417 10.482183 8.616667 +vertex 16.079948 8.851977 8.875000 +vertex 16.079948 10.482659 8.875000 +endloop +endfacet +facet normal -0.931105 0.000000 0.364750 +outer loop +vertex 15.694011 10.481650 8.383333 +vertex 15.694011 8.850069 8.383333 +vertex 15.785417 8.851082 8.616667 +endloop +endfacet +facet normal -0.931105 0.000000 0.364750 +outer loop +vertex 15.694011 10.481650 8.383333 +vertex 15.785417 8.851082 8.616667 +vertex 15.785417 10.482183 8.616667 +endloop +endfacet +facet normal 0.184833 0.000000 0.982770 +outer loop +vertex 21.200653 8.852824 9.371354 +vertex 21.200655 7.092052 9.371354 +vertex 22.754240 7.091278 9.079166 +endloop +endfacet +facet normal 0.184832 -0.000001 0.982770 +outer loop +vertex 21.200653 8.852824 9.371354 +vertex 22.754240 7.091278 9.079166 +vertex 22.754240 8.852315 9.079167 +endloop +endfacet +facet normal 0.184833 0.000000 0.982770 +outer loop +vertex 21.200655 7.092052 9.371354 +vertex 21.200653 5.357885 9.371354 +vertex 22.754240 5.356898 9.079166 +endloop +endfacet +facet normal 0.184832 0.000000 0.982770 +outer loop +vertex 21.200655 7.092052 9.371354 +vertex 22.754240 5.356898 9.079166 +vertex 22.754240 7.091278 9.079166 +endloop +endfacet +facet normal 0.214559 -0.000000 0.976711 +outer loop +vertex 22.754240 8.852315 9.079167 +vertex 22.754240 7.091278 9.079166 +vertex 24.226576 7.090393 8.755729 +endloop +endfacet +facet normal 0.214560 -0.000001 0.976711 +outer loop +vertex 22.754240 8.852315 9.079167 +vertex 24.226576 7.090393 8.755729 +vertex 24.226576 8.851733 8.755730 +endloop +endfacet +facet normal 0.214560 0.000000 0.976711 +outer loop +vertex 22.754240 7.091278 9.079166 +vertex 22.754240 5.356898 9.079166 +vertex 24.226576 5.355767 8.755730 +endloop +endfacet +facet normal 0.214560 0.000001 0.976711 +outer loop +vertex 22.754240 7.091278 9.079166 +vertex 24.226576 5.355767 8.755730 +vertex 24.226576 7.090393 8.755729 +endloop +endfacet +facet normal 0.135216 0.000000 0.990816 +outer loop +vertex 19.769468 10.483306 9.566667 +vertex 19.769468 8.853203 9.566667 +vertex 21.200653 8.852824 9.371354 +endloop +endfacet +facet normal 0.135216 0.000000 0.990816 +outer loop +vertex 19.769468 10.483306 9.566667 +vertex 21.200653 8.852824 9.371354 +vertex 21.200653 10.483106 9.371354 +endloop +endfacet +facet normal 0.135216 0.000000 0.990816 +outer loop +vertex 19.769468 8.853203 9.566667 +vertex 19.769468 7.092627 9.566667 +vertex 21.200655 7.092052 9.371354 +endloop +endfacet +facet normal 0.135215 0.000000 0.990816 +outer loop +vertex 19.769468 8.853203 9.566667 +vertex 21.200655 7.092052 9.371354 +vertex 21.200653 8.852824 9.371354 +endloop +endfacet +facet normal 0.135216 0.000000 0.990816 +outer loop +vertex 19.769468 7.092627 9.566667 +vertex 19.769468 5.358619 9.566667 +vertex 21.200653 5.357885 9.371354 +endloop +endfacet +facet normal 0.135215 0.000000 0.990816 +outer loop +vertex 19.769468 7.092627 9.566667 +vertex 21.200653 5.357885 9.371354 +vertex 21.200655 7.092052 9.371354 +endloop +endfacet +facet normal 0.135215 0.000000 0.990816 +outer loop +vertex 19.769468 5.358619 9.566667 +vertex 19.769468 3.808219 9.566667 +vertex 21.200653 3.807420 9.371354 +endloop +endfacet +facet normal 0.135216 0.000000 0.990816 +outer loop +vertex 19.769468 5.358619 9.566667 +vertex 21.200653 3.807420 9.371354 +vertex 21.200653 5.357885 9.371354 +endloop +endfacet +facet normal 0.184833 0.000000 0.982770 +outer loop +vertex 21.200653 5.357885 9.371354 +vertex 21.200653 3.807420 9.371354 +vertex 22.754240 3.806343 9.079166 +endloop +endfacet +facet normal 0.184832 0.000000 0.982770 +outer loop +vertex 21.200653 5.357885 9.371354 +vertex 22.754240 3.806343 9.079166 +vertex 22.754240 5.356898 9.079166 +endloop +endfacet +facet normal 0.214560 0.000000 0.976711 +outer loop +vertex 22.754240 5.356898 9.079166 +vertex 22.754240 3.806343 9.079166 +vertex 24.226574 3.805111 8.755730 +endloop +endfacet +facet normal 0.214559 -0.000001 0.976711 +outer loop +vertex 22.754240 5.356898 9.079166 +vertex 24.226574 3.805111 8.755730 +vertex 24.226576 5.355767 8.755730 +endloop +endfacet +facet normal 0.236528 0.000000 0.971625 +outer loop +vertex 24.226576 5.355767 8.755730 +vertex 24.226574 3.805111 8.755730 +vertex 25.414011 3.803846 8.466667 +endloop +endfacet +facet normal 0.236527 0.000000 0.971625 +outer loop +vertex 24.226576 5.355767 8.755730 +vertex 25.414011 3.803846 8.466667 +vertex 25.414009 5.354605 8.466666 +endloop +endfacet +facet normal 0.236529 0.000001 0.971625 +outer loop +vertex 24.226576 7.090393 8.755729 +vertex 24.226576 5.355767 8.755730 +vertex 25.414009 5.354605 8.466666 +endloop +endfacet +facet normal 0.236525 -0.000001 0.971625 +outer loop +vertex 24.226576 7.090393 8.755729 +vertex 25.414009 5.354605 8.466666 +vertex 25.414009 7.089484 8.466667 +endloop +endfacet +facet normal 0.236526 -0.000000 0.971625 +outer loop +vertex 24.226576 8.851733 8.755730 +vertex 24.226576 7.090393 8.755729 +vertex 25.414009 7.089484 8.466667 +endloop +endfacet +facet normal 0.236527 0.000000 0.971625 +outer loop +vertex 24.226576 8.851733 8.755730 +vertex 25.414009 7.089484 8.466667 +vertex 25.414009 8.851135 8.466666 +endloop +endfacet +facet normal 0.236527 0.000000 0.971625 +outer loop +vertex 24.226574 10.482530 8.755730 +vertex 24.226576 8.851733 8.755730 +vertex 25.414009 8.851135 8.466666 +endloop +endfacet +facet normal 0.236527 -0.000000 0.971625 +outer loop +vertex 24.226574 10.482530 8.755730 +vertex 25.414009 8.851135 8.466666 +vertex 25.414009 10.482211 8.466667 +endloop +endfacet +facet normal 0.214560 0.000000 0.976711 +outer loop +vertex 22.754240 10.482836 9.079166 +vertex 22.754240 8.852315 9.079167 +vertex 24.226576 8.851733 8.755730 +endloop +endfacet +facet normal 0.214560 0.000001 0.976711 +outer loop +vertex 22.754240 10.482836 9.079166 +vertex 24.226576 8.851733 8.755730 +vertex 24.226574 10.482530 8.755730 +endloop +endfacet +facet normal 0.184832 0.000000 0.982770 +outer loop +vertex 21.200653 10.483106 9.371354 +vertex 21.200653 8.852824 9.371354 +vertex 22.754240 8.852315 9.079167 +endloop +endfacet +facet normal 0.184833 0.000001 0.982770 +outer loop +vertex 21.200653 10.483106 9.371354 +vertex 22.754240 8.852315 9.079167 +vertex 22.754240 10.482836 9.079166 +endloop +endfacet +facet normal 0.002253 0.000000 -0.999997 +outer loop +vertex 21.109249 8.846521 8.000521 +vertex 22.727156 8.847102 8.004167 +vertex 22.727156 7.083351 8.004167 +endloop +endfacet +facet normal 0.002254 0.000000 -0.999997 +outer loop +vertex 21.109249 8.846521 8.000521 +vertex 22.727156 7.083351 8.004167 +vertex 21.109247 7.082470 8.000521 +endloop +endfacet +facet normal 0.006615 0.000000 -0.999978 +outer loop +vertex 22.727156 8.847102 8.004167 +vertex 24.223190 8.847869 8.014062 +vertex 24.223190 7.084518 8.014062 +endloop +endfacet +facet normal 0.006614 0.000000 -0.999978 +outer loop +vertex 22.727156 8.847102 8.004167 +vertex 24.223190 7.084518 8.014062 +vertex 22.727156 7.083351 8.004167 +endloop +endfacet +facet normal 0.002254 0.000054 -0.999997 +outer loop +vertex 21.109247 7.082470 8.000521 +vertex 22.727156 7.083351 8.004167 +vertex 22.730549 5.346774 8.004080 +endloop +endfacet +facet normal 0.002202 0.000007 -0.999998 +outer loop +vertex 21.109247 7.082470 8.000521 +vertex 22.730549 5.346774 8.004080 +vertex 21.109673 5.345647 8.000510 +endloop +endfacet +facet normal 0.006614 0.000181 -0.999978 +outer loop +vertex 22.727156 7.083351 8.004167 +vertex 24.223190 7.084518 8.014062 +vertex 24.232944 5.348269 8.013813 +endloop +endfacet +facet normal 0.006477 0.000063 -0.999979 +outer loop +vertex 22.727156 7.083351 8.004167 +vertex 24.232944 5.348269 8.013813 +vertex 22.730549 5.346774 8.004080 +endloop +endfacet +facet normal 0.000335 0.000000 -1.000000 +outer loop +vertex 19.552803 10.479649 8.000000 +vertex 21.109249 10.479773 8.000521 +vertex 21.109249 8.846521 8.000521 +endloop +endfacet +facet normal 0.000335 0.000000 -1.000000 +outer loop +vertex 19.552803 10.479649 8.000000 +vertex 21.109249 8.846521 8.000521 +vertex 19.552803 8.846289 8.000000 +endloop +endfacet +facet normal 0.002252 -0.000000 -0.999997 +outer loop +vertex 21.109249 10.479773 8.000521 +vertex 22.727158 10.480080 8.004167 +vertex 22.727156 8.847102 8.004167 +endloop +endfacet +facet normal 0.002254 0.000000 -0.999997 +outer loop +vertex 21.109249 10.479773 8.000521 +vertex 22.727156 8.847102 8.004167 +vertex 21.109249 8.846521 8.000521 +endloop +endfacet +facet normal 0.006614 0.000000 -0.999978 +outer loop +vertex 22.727158 10.480080 8.004167 +vertex 24.223190 10.480485 8.014062 +vertex 24.223190 8.847869 8.014062 +endloop +endfacet +facet normal 0.006615 0.000000 -0.999978 +outer loop +vertex 22.727158 10.480080 8.004167 +vertex 24.223190 8.847869 8.014062 +vertex 22.727156 8.847102 8.004167 +endloop +endfacet +facet normal 0.016182 0.000000 -0.999869 +outer loop +vertex 24.223190 10.480485 8.014062 +vertex 25.414011 10.480907 8.033333 +vertex 25.414009 8.848668 8.033333 +endloop +endfacet +facet normal 0.016180 0.000000 -0.999869 +outer loop +vertex 24.223190 10.480485 8.014062 +vertex 25.414009 8.848668 8.033333 +vertex 24.223190 8.847869 8.014062 +endloop +endfacet +facet normal 0.016181 0.000000 -0.999869 +outer loop +vertex 24.223190 8.847869 8.014062 +vertex 25.414009 8.848668 8.033333 +vertex 25.414009 7.085731 8.033333 +endloop +endfacet +facet normal 0.016180 0.000000 -0.999869 +outer loop +vertex 24.223190 8.847869 8.014062 +vertex 25.414009 7.085731 8.033333 +vertex 24.223190 7.084518 8.014062 +endloop +endfacet +facet normal 0.016182 0.000326 -0.999869 +outer loop +vertex 24.223190 7.084518 8.014062 +vertex 25.414009 7.085731 8.033333 +vertex 25.427582 5.349819 8.032986 +endloop +endfacet +facet normal 0.016046 0.000234 -0.999871 +outer loop +vertex 24.223190 7.084518 8.014062 +vertex 25.427582 5.349819 8.032986 +vertex 24.232944 5.348269 8.013813 +endloop +endfacet +facet normal 0.016042 0.003642 -0.999865 +outer loop +vertex 24.232944 5.348269 8.013813 +vertex 25.427582 5.349819 8.032986 +vertex 25.563290 3.798691 8.029513 +endloop +endfacet +facet normal 0.014140 0.002009 -0.999898 +outer loop +vertex 24.232944 5.348269 8.013813 +vertex 25.563290 3.798691 8.029513 +vertex 24.311401 3.796976 8.011806 +endloop +endfacet +facet normal 0.006478 0.001622 -0.999978 +outer loop +vertex 22.730549 5.346774 8.004080 +vertex 24.232944 5.348269 8.013813 +vertex 24.311401 3.796976 8.011806 +endloop +endfacet +facet normal 0.005350 0.000473 -0.999986 +outer loop +vertex 22.730549 5.346774 8.004080 +vertex 24.311401 3.796976 8.011806 +vertex 22.754299 3.795325 8.003472 +endloop +endfacet +facet normal 0.002203 0.000425 -0.999997 +outer loop +vertex 21.109673 5.345647 8.000510 +vertex 22.730549 5.346774 8.004080 +vertex 22.754299 3.795325 8.003472 +endloop +endfacet +facet normal 0.001851 0.000053 -0.999998 +outer loop +vertex 21.109673 5.345647 8.000510 +vertex 22.754299 3.795325 8.003472 +vertex 21.112640 3.794090 8.000434 +endloop +endfacet +facet normal 0.000327 0.000050 -1.000000 +outer loop +vertex 19.552801 5.345193 8.000000 +vertex 21.109673 5.345647 8.000510 +vertex 21.112640 3.794090 8.000434 +endloop +endfacet +facet normal 0.000279 0.000000 -1.000000 +outer loop +vertex 19.552801 5.345193 8.000000 +vertex 21.112640 3.794090 8.000434 +vertex 19.552803 3.793593 8.000000 +endloop +endfacet +facet normal 0.000334 0.000006 -1.000000 +outer loop +vertex 19.552803 7.082114 8.000000 +vertex 21.109247 7.082470 8.000521 +vertex 21.109673 5.345647 8.000510 +endloop +endfacet +facet normal 0.000328 0.000000 -1.000000 +outer loop +vertex 19.552803 7.082114 8.000000 +vertex 21.109673 5.345647 8.000510 +vertex 19.552801 5.345193 8.000000 +endloop +endfacet +facet normal 0.000334 -0.000000 -1.000000 +outer loop +vertex 19.552803 8.846289 8.000000 +vertex 21.109249 8.846521 8.000521 +vertex 21.109247 7.082470 8.000521 +endloop +endfacet +facet normal 0.000335 0.000000 -1.000000 +outer loop +vertex 19.552803 8.846289 8.000000 +vertex 21.109247 7.082470 8.000521 +vertex 19.552803 7.082114 8.000000 +endloop +endfacet +facet normal -0.008823 0.066099 -0.997774 +outer loop +vertex 21.108089 13.782950 8.097133 +vertex 22.668369 13.756055 8.081554 +vertex 22.706612 12.940510 8.027189 +endloop +endfacet +facet normal -0.000779 0.081272 -0.996692 +outer loop +vertex 21.108089 13.782950 8.097133 +vertex 22.706612 12.940510 8.027189 +vertex 21.108513 12.949333 8.029158 +endloop +endfacet +facet normal -0.004329 0.051922 -0.998642 +outer loop +vertex 22.668369 13.756055 8.081554 +vertex 24.034252 13.696052 8.072515 +vertex 24.159176 12.921573 8.031707 +endloop +endfacet +facet normal 0.003973 0.066698 -0.997765 +outer loop +vertex 22.668369 13.756055 8.081554 +vertex 24.159176 12.921573 8.031707 +vertex 22.706612 12.940510 8.027189 +endloop +endfacet +facet normal -0.001129 0.018480 -0.999829 +outer loop +vertex 21.108513 12.949333 8.029158 +vertex 22.706612 12.940510 8.027189 +vertex 22.724588 11.851659 8.007044 +endloop +endfacet +facet normal 0.001837 0.022844 -0.999737 +outer loop +vertex 21.108513 12.949333 8.029158 +vertex 22.724588 11.851659 8.007044 +vertex 21.109156 11.852637 8.004100 +endloop +endfacet +facet normal 0.003299 0.014571 -0.999888 +outer loop +vertex 22.706612 12.940510 8.027189 +vertex 24.159176 12.921573 8.031707 +vertex 24.215187 11.849457 8.016268 +endloop +endfacet +facet normal 0.006215 0.018601 -0.999808 +outer loop +vertex 22.706612 12.940510 8.027189 +vertex 24.215187 11.849457 8.016268 +vertex 22.724588 11.851659 8.007044 +endloop +endfacet +facet normal -0.019371 0.220396 -0.975218 +outer loop +vertex 19.588913 14.375001 8.261111 +vertex 21.113926 14.368312 8.229306 +vertex 21.108089 13.782950 8.097133 +endloop +endfacet +facet normal -0.007570 0.248826 -0.968519 +outer loop +vertex 19.588913 14.375001 8.261111 +vertex 21.108089 13.782950 8.097133 +vertex 19.568035 13.786793 8.110156 +endloop +endfacet +facet normal -0.022359 0.180528 -0.983316 +outer loop +vertex 21.113926 14.368312 8.229306 +vertex 22.647228 14.321472 8.185841 +vertex 22.668369 13.756055 8.081554 +endloop +endfacet +facet normal -0.005942 0.220306 -0.975413 +outer loop +vertex 21.113926 14.368312 8.229306 +vertex 22.668369 13.756055 8.081554 +vertex 21.108089 13.782950 8.097133 +endloop +endfacet +facet normal -0.017813 0.139884 -0.990008 +outer loop +vertex 22.647228 14.321472 8.185841 +vertex 23.947687 14.205942 8.146118 +vertex 24.034252 13.696052 8.072515 +endloop +endfacet +facet normal 0.001462 0.181435 -0.983402 +outer loop +vertex 22.647228 14.321472 8.185841 +vertex 24.034252 13.696052 8.072515 +vertex 22.668369 13.756055 8.081554 +endloop +endfacet +facet normal -0.007751 0.102426 -0.994711 +outer loop +vertex 23.947687 14.205942 8.146118 +vertex 24.762611 14.062502 8.125000 +vertex 25.061609 13.654374 8.080646 +endloop +endfacet +facet normal 0.013719 0.145136 -0.989317 +outer loop +vertex 23.947687 14.205942 8.146118 +vertex 25.061609 13.654374 8.080646 +vertex 24.034252 13.696052 8.072515 +endloop +endfacet +facet normal 0.009810 0.047003 -0.998847 +outer loop +vertex 24.034252 13.696052 8.072515 +vertex 25.061609 13.654374 8.080646 +vertex 25.302427 12.910231 8.047994 +endloop +endfacet +facet normal 0.014770 0.054988 -0.998378 +outer loop +vertex 24.034252 13.696052 8.072515 +vertex 25.302427 12.910231 8.047994 +vertex 24.159176 12.921573 8.031707 +endloop +endfacet +facet normal 0.014378 0.013398 -0.999807 +outer loop +vertex 24.159176 12.921573 8.031707 +vertex 25.302427 12.910231 8.047994 +vertex 25.400063 11.848212 8.035166 +endloop +endfacet +facet normal 0.015961 0.015231 -0.999757 +outer loop +vertex 24.159176 12.921573 8.031707 +vertex 25.400063 11.848212 8.035166 +vertex 24.215187 11.849457 8.016268 +endloop +endfacet +facet normal 0.015950 0.001503 -0.999872 +outer loop +vertex 24.215187 11.849457 8.016268 +vertex 25.400063 11.848212 8.035166 +vertex 25.414011 10.480907 8.033333 +endloop +endfacet +facet normal 0.016180 0.001706 -0.999868 +outer loop +vertex 24.215187 11.849457 8.016268 +vertex 25.414011 10.480907 8.033333 +vertex 24.223190 10.480485 8.014062 +endloop +endfacet +facet normal 0.006190 0.001647 -0.999980 +outer loop +vertex 22.724588 11.851659 8.007044 +vertex 24.215187 11.849457 8.016268 +vertex 24.223190 10.480485 8.014062 +endloop +endfacet +facet normal 0.006613 0.002110 -0.999976 +outer loop +vertex 22.724588 11.851659 8.007044 +vertex 24.223190 10.480485 8.014062 +vertex 22.727158 10.480080 8.004167 +endloop +endfacet +facet normal 0.001824 0.002101 -0.999996 +outer loop +vertex 21.109156 11.852637 8.004100 +vertex 22.724588 11.851659 8.007044 +vertex 22.727158 10.480080 8.004167 +endloop +endfacet +facet normal 0.002254 0.002607 -0.999994 +outer loop +vertex 21.109156 11.852637 8.004100 +vertex 22.727158 10.480080 8.004167 +vertex 21.109249 10.479773 8.000521 +endloop +endfacet +facet normal 0.000012 0.002607 -0.999997 +outer loop +vertex 19.553366 11.852744 8.004080 +vertex 21.109156 11.852637 8.004100 +vertex 21.109249 10.479773 8.000521 +endloop +endfacet +facet normal 0.000335 0.002971 -0.999996 +outer loop +vertex 19.553366 11.852744 8.004080 +vertex 21.109249 10.479773 8.000521 +vertex 19.552803 10.479649 8.000000 +endloop +endfacet +facet normal -0.002227 0.022841 -0.999737 +outer loop +vertex 19.557316 12.950583 8.032639 +vertex 21.108513 12.949333 8.029158 +vertex 21.109156 11.852637 8.004100 +endloop +endfacet +facet normal 0.000016 0.026005 -0.999662 +outer loop +vertex 19.557316 12.950583 8.032639 +vertex 21.109156 11.852637 8.004100 +vertex 19.553366 11.852744 8.004080 +endloop +endfacet +facet normal -0.008225 0.081266 -0.996659 +outer loop +vertex 19.568035 13.786793 8.110156 +vertex 21.108089 13.782950 8.097133 +vertex 21.108513 12.949333 8.029158 +endloop +endfacet +facet normal -0.002161 0.092332 -0.995726 +outer loop +vertex 19.568035 13.786793 8.110156 +vertex 21.108513 12.949333 8.029158 +vertex 19.557316 12.950583 8.032639 +endloop +endfacet +facet normal 0.180586 0.080679 0.980245 +outer loop +vertex 21.186642 13.783004 9.276489 +vertex 21.196112 12.949749 9.343325 +vertex 22.732565 12.940852 9.061005 +endloop +endfacet +facet normal 0.171458 0.063177 0.983164 +outer loop +vertex 21.186642 13.783004 9.276489 +vertex 22.732565 12.940852 9.061005 +vertex 22.691643 13.756097 9.015754 +endloop +endfacet +facet normal 0.184294 0.022663 0.982610 +outer loop +vertex 21.196112 12.949749 9.343325 +vertex 21.200087 11.854041 9.367850 +vertex 22.751530 11.852822 9.076897 +endloop +endfacet +facet normal 0.180792 0.017514 0.983365 +outer loop +vertex 21.196112 12.949749 9.343325 +vertex 22.751530 11.852822 9.076897 +vertex 22.732565 12.940852 9.061005 +endloop +endfacet +facet normal 0.211063 0.064731 0.975327 +outer loop +vertex 22.691643 13.756097 9.015754 +vertex 22.732565 12.940852 9.061005 +vertex 24.162418 12.921827 8.752842 +endloop +endfacet +facet normal 0.202004 0.047845 0.978215 +outer loop +vertex 22.691643 13.756097 9.015754 +vertex 24.162418 12.921827 8.752842 +vertex 24.037163 13.696084 8.740838 +endloop +endfacet +facet normal 0.214084 0.017997 0.976649 +outer loop +vertex 22.732565 12.940852 9.061005 +vertex 22.751530 11.852822 9.076897 +vertex 24.218555 11.850319 8.755368 +endloop +endfacet +facet normal 0.210835 0.013350 0.977430 +outer loop +vertex 22.732565 12.940852 9.061005 +vertex 24.218555 11.850319 8.755368 +vertex 24.162418 12.921827 8.752842 +endloop +endfacet +facet normal 0.121374 0.250804 0.960399 +outer loop +vertex 19.733356 14.375003 9.305555 +vertex 19.754234 13.786851 9.456511 +vertex 21.186642 13.783004 9.276489 +endloop +endfacet +facet normal 0.108992 0.219970 0.969399 +outer loop +vertex 19.733356 14.375003 9.305555 +vertex 21.186642 13.783004 9.276489 +vertex 21.174864 14.368311 9.145000 +endloop +endfacet +facet normal 0.131593 0.093219 0.986911 +outer loop +vertex 19.754234 13.786851 9.456511 +vertex 19.764956 12.951040 9.534028 +vertex 21.196112 12.949749 9.343325 +endloop +endfacet +facet normal 0.124502 0.080737 0.988929 +outer loop +vertex 19.754234 13.786851 9.456511 +vertex 21.196112 12.949749 9.343325 +vertex 21.186642 13.783004 9.276489 +endloop +endfacet +facet normal 0.134783 0.026278 0.990527 +outer loop +vertex 19.764956 12.951040 9.534028 +vertex 19.768904 11.854286 9.562587 +vertex 21.200087 11.854041 9.367850 +endloop +endfacet +facet normal 0.132070 0.022661 0.990981 +outer loop +vertex 19.764956 12.951040 9.534028 +vertex 21.200087 11.854041 9.367850 +vertex 21.196112 12.949749 9.343325 +endloop +endfacet +facet normal 0.135215 0.003004 0.990812 +outer loop +vertex 19.768904 11.854286 9.562587 +vertex 19.769468 10.483306 9.566667 +vertex 21.200653 10.483106 9.371354 +endloop +endfacet +facet normal 0.134824 0.002588 0.990866 +outer loop +vertex 19.768904 11.854286 9.562587 +vertex 21.200653 10.483106 9.371354 +vertex 21.200087 11.854041 9.367850 +endloop +endfacet +facet normal 0.184832 0.002589 0.982767 +outer loop +vertex 21.200087 11.854041 9.367850 +vertex 21.200653 10.483106 9.371354 +vertex 22.754240 10.482836 9.079166 +endloop +endfacet +facet normal 0.184326 0.001993 0.982863 +outer loop +vertex 21.200087 11.854041 9.367850 +vertex 22.754240 10.482836 9.079166 +vertex 22.751530 11.852822 9.076897 +endloop +endfacet +facet normal 0.214560 0.002042 0.976709 +outer loop +vertex 22.751530 11.852822 9.076897 +vertex 22.754240 10.482836 9.079166 +vertex 24.226574 10.482530 8.755730 +endloop +endfacet +facet normal 0.214092 0.001513 0.976812 +outer loop +vertex 22.751530 11.852822 9.076897 +vertex 24.226574 10.482530 8.755730 +vertex 24.218555 11.850319 8.755368 +endloop +endfacet +facet normal 0.236527 0.001643 0.971624 +outer loop +vertex 24.218555 11.850319 8.755368 +vertex 24.226574 10.482530 8.755730 +vertex 25.414009 10.482211 8.466667 +endloop +endfacet +facet normal 0.236297 0.001430 0.971680 +outer loop +vertex 24.218555 11.850319 8.755368 +vertex 25.414009 10.482211 8.466667 +vertex 25.400064 11.848762 8.468046 +endloop +endfacet +facet normal 0.236288 0.014670 0.971572 +outer loop +vertex 24.162418 12.921827 8.752842 +vertex 24.218555 11.850319 8.755368 +vertex 25.400064 11.848762 8.468046 +endloop +endfacet +facet normal 0.234715 0.012748 0.971981 +outer loop +vertex 24.162418 12.921827 8.752842 +vertex 25.400064 11.848762 8.468046 +vertex 25.302429 12.910394 8.477700 +endloop +endfacet +facet normal 0.234786 0.053031 0.970600 +outer loop +vertex 24.037163 13.696084 8.740838 +vertex 24.162418 12.921827 8.752842 +vertex 25.302429 12.910394 8.477700 +endloop +endfacet +facet normal 0.229893 0.044615 0.972193 +outer loop +vertex 24.037163 13.696084 8.740838 +vertex 25.302429 12.910394 8.477700 +vertex 25.061607 13.654394 8.500504 +endloop +endfacet +facet normal 0.231550 0.140794 0.962581 +outer loop +vertex 23.949944 14.205942 8.687243 +vertex 24.037163 13.696084 8.740838 +vertex 25.061607 13.654394 8.500504 +endloop +endfacet +facet normal 0.211196 0.096345 0.972684 +outer loop +vertex 23.949944 14.205942 8.687243 +vertex 25.061607 13.654394 8.500504 +vertex 24.762611 14.062502 8.525001 +endloop +endfacet +facet normal 0.204599 0.177777 0.962567 +outer loop +vertex 22.665283 14.321471 8.916937 +vertex 22.691643 13.756097 9.015754 +vertex 24.037163 13.696084 8.740838 +endloop +endfacet +facet normal 0.186093 0.134147 0.973331 +outer loop +vertex 22.665283 14.321471 8.916937 +vertex 24.037163 13.696084 8.740838 +vertex 23.949944 14.205942 8.687243 +endloop +endfacet +facet normal 0.170355 0.219245 0.960682 +outer loop +vertex 21.174864 14.368311 9.145000 +vertex 21.186642 13.783004 9.276489 +vertex 22.691643 13.756097 9.015754 +endloop +endfacet +facet normal 0.154304 0.177086 0.972024 +outer loop +vertex 21.174864 14.368311 9.145000 +vertex 22.691643 13.756097 9.015754 +vertex 22.665283 14.321471 8.916937 +endloop +endfacet +facet normal -0.925336 0.179809 0.333800 +outer loop +vertex 15.926517 13.692226 8.431500 +vertex 15.764791 12.920452 8.398901 +vertex 15.848109 12.930644 8.624383 +endloop +endfacet +facet normal -0.942867 0.169688 0.286718 +outer loop +vertex 15.926517 13.692226 8.431500 +vertex 15.848109 12.930644 8.624383 +vertex 15.996692 13.725345 8.642670 +endloop +endfacet +facet normal -0.930933 0.049248 0.361855 +outer loop +vertex 15.764791 12.920452 8.398901 +vertex 15.702858 11.849790 8.385280 +vertex 15.793253 11.851281 8.617631 +endloop +endfacet +facet normal -0.937705 0.045501 0.344440 +outer loop +vertex 15.764791 12.920452 8.398901 +vertex 15.793253 11.851281 8.617631 +vertex 15.848109 12.930644 8.624383 +endloop +endfacet +facet normal -0.661215 0.106536 0.742593 +outer loop +vertex 15.996692 13.725345 8.642670 +vertex 15.848109 12.930644 8.624383 +vertex 16.126717 12.920577 8.873900 +endloop +endfacet +facet normal -0.680988 0.098469 0.725644 +outer loop +vertex 15.996692 13.725345 8.642670 +vertex 16.126717 12.920577 8.873900 +vertex 16.239573 13.692245 8.875096 +endloop +endfacet +facet normal -0.659997 0.028847 0.750714 +outer loop +vertex 15.848109 12.930644 8.624383 +vertex 15.793253 11.851281 8.617631 +vertex 16.085794 11.850214 8.874863 +endloop +endfacet +facet normal -0.666398 0.026147 0.745138 +outer loop +vertex 15.848109 12.930644 8.624383 +vertex 16.085794 11.850214 8.874863 +vertex 16.126717 12.920577 8.873900 +endloop +endfacet +facet normal -0.638856 0.372476 -0.673145 +outer loop +vertex 16.245834 14.062501 8.333333 +vertex 16.073439 13.654376 8.271119 +vertex 15.926517 13.692226 8.431500 +endloop +endfacet +facet normal -0.679728 0.428326 -0.595404 +outer loop +vertex 16.245834 14.062501 8.333333 +vertex 15.926517 13.692226 8.431500 +vertex 16.212664 14.199250 8.469577 +endloop +endfacet +facet normal -0.708344 0.179013 -0.682791 +outer loop +vertex 16.073439 13.654376 8.271119 +vertex 15.932369 12.910254 8.222376 +vertex 15.764791 12.920452 8.398901 +endloop +endfacet +facet normal -0.704649 0.176686 -0.687205 +outer loop +vertex 16.073439 13.654376 8.271119 +vertex 15.764791 12.920452 8.398901 +vertex 15.926517 13.692226 8.431500 +endloop +endfacet +facet normal -0.726457 0.051960 -0.685245 +outer loop +vertex 15.932369 12.910254 8.222376 +vertex 15.874880 11.848289 8.202797 +vertex 15.702858 11.849790 8.385280 +endloop +endfacet +facet normal -0.722856 0.050581 -0.689144 +outer loop +vertex 15.932369 12.910254 8.222376 +vertex 15.702858 11.849790 8.385280 +vertex 15.764791 12.920452 8.398901 +endloop +endfacet +facet normal -0.727964 0.005775 -0.685591 +outer loop +vertex 15.874880 11.848289 8.202797 +vertex 15.866667 10.481091 8.200000 +vertex 15.694011 10.481650 8.383333 +endloop +endfacet +facet normal -0.727620 0.005683 -0.685957 +outer loop +vertex 15.874880 11.848289 8.202797 +vertex 15.694011 10.481650 8.383333 +vertex 15.702858 11.849790 8.385280 +endloop +endfacet +facet normal -0.931095 0.005502 0.364735 +outer loop +vertex 15.702858 11.849790 8.385280 +vertex 15.694011 10.481650 8.383333 +vertex 15.785417 10.482183 8.616667 +endloop +endfacet +facet normal -0.931956 0.005079 0.362536 +outer loop +vertex 15.702858 11.849790 8.385280 +vertex 15.785417 10.482183 8.616667 +vertex 15.793253 11.851281 8.617631 +endloop +endfacet +facet normal -0.659395 0.003245 0.751790 +outer loop +vertex 15.793253 11.851281 8.617631 +vertex 15.785417 10.482183 8.616667 +vertex 16.079948 10.482659 8.875000 +endloop +endfacet +facet normal -0.660322 0.002898 0.750977 +outer loop +vertex 15.793253 11.851281 8.617631 +vertex 16.079948 10.482659 8.875000 +vertex 16.085794 11.850214 8.874863 +endloop +endfacet +facet normal -0.509129 0.002264 0.860687 +outer loop +vertex 16.085794 11.850214 8.874863 +vertex 16.079948 10.482659 8.875000 +vertex 16.516666 10.483034 9.133333 +endloop +endfacet +facet normal -0.509449 0.002124 0.860498 +outer loop +vertex 16.085794 11.850214 8.874863 +vertex 16.516666 10.483034 9.133333 +vertex 16.520052 11.849110 9.131964 +endloop +endfacet +facet normal -0.509309 0.020245 0.860346 +outer loop +vertex 16.126717 12.920577 8.873900 +vertex 16.085794 11.850214 8.874863 +vertex 16.520052 11.849110 9.131964 +endloop +endfacet +facet normal -0.511418 0.019182 0.859118 +outer loop +vertex 16.126717 12.920577 8.873900 +vertex 16.520052 11.849110 9.131964 +vertex 16.543751 12.910495 9.122376 +endloop +endfacet +facet normal -0.509175 0.073137 0.857550 +outer loop +vertex 16.239573 13.692245 8.875096 +vertex 16.126717 12.920577 8.873900 +vertex 16.543751 12.910495 9.122376 +endloop +endfacet +facet normal -0.516933 0.068762 0.853260 +outer loop +vertex 16.239573 13.692245 8.875096 +vertex 16.543751 12.910495 9.122376 +vertex 16.602932 13.654407 9.098280 +endloop +endfacet +facet normal -0.499636 0.188695 0.845433 +outer loop +vertex 16.475306 14.199250 8.901251 +vertex 16.239573 13.692245 8.875096 +vertex 16.602932 13.654407 9.098280 +endloop +endfacet +facet normal -0.551613 0.166355 0.817343 +outer loop +vertex 16.475306 14.199250 8.901251 +vertex 16.602932 13.654407 9.098280 +vertex 16.679167 14.062502 9.066667 +endloop +endfacet +facet normal -0.639902 0.292996 0.710408 +outer loop +vertex 16.284452 14.267941 8.678086 +vertex 15.996692 13.725345 8.642670 +vertex 16.239573 13.692245 8.875096 +endloop +endfacet +facet normal -0.684012 0.283353 0.672190 +outer loop +vertex 16.284452 14.267941 8.678086 +vertex 16.239573 13.692245 8.875096 +vertex 16.475306 14.199250 8.901251 +endloop +endfacet +facet normal -0.857875 0.468253 0.211637 +outer loop +vertex 16.212664 14.199250 8.469577 +vertex 15.926517 13.692226 8.431500 +vertex 15.996692 13.725345 8.642670 +endloop +endfacet +facet normal -0.877249 0.455323 0.152037 +outer loop +vertex 16.212664 14.199250 8.469577 +vertex 15.996692 13.725345 8.642670 +vertex 16.284452 14.267941 8.678086 +endloop +endfacet +facet normal 0.272812 0.001670 -0.962066 +outer loop +vertex 26.156590 5.351182 8.067980 +vertex 26.146835 7.086800 8.068229 +vertex 26.391111 7.087739 8.137500 +endloop +endfacet +facet normal 0.280158 0.000596 -0.959954 +outer loop +vertex 26.156590 5.351182 8.067980 +vertex 26.391111 7.087739 8.137500 +vertex 26.394505 5.352378 8.137413 +endloop +endfacet +facet normal 0.272823 0.000000 -0.962064 +outer loop +vertex 26.146835 7.086800 8.068229 +vertex 26.146837 8.849369 8.068229 +vertex 26.391111 8.849988 8.137500 +endloop +endfacet +facet normal 0.272818 0.000000 -0.962066 +outer loop +vertex 26.146835 7.086800 8.068229 +vertex 26.391111 8.849988 8.137500 +vertex 26.391111 7.087739 8.137500 +endloop +endfacet +facet normal 0.457040 0.000850 0.889446 +outer loop +vertex 26.394505 5.352378 8.137413 +vertex 26.391111 7.087739 8.137500 +vertex 26.146837 7.088612 8.263021 +endloop +endfacet +facet normal 0.452912 0.000105 0.891555 +outer loop +vertex 26.394505 5.352378 8.137413 +vertex 26.146837 7.088612 8.263021 +vertex 26.147263 5.353491 8.263010 +endloop +endfacet +facet normal 0.457043 0.000000 0.889445 +outer loop +vertex 26.391111 7.087739 8.137500 +vertex 26.391111 8.849988 8.137500 +vertex 26.146837 8.850560 8.263021 +endloop +endfacet +facet normal 0.457042 0.000000 0.889445 +outer loop +vertex 26.391111 7.087739 8.137500 +vertex 26.146837 8.850560 8.263021 +vertex 26.146837 7.088612 8.263021 +endloop +endfacet +facet normal 0.047932 0.006430 -0.998830 +outer loop +vertex 25.563290 3.798691 8.029513 +vertex 25.427582 5.349819 8.032986 +vertex 26.156590 5.351182 8.067980 +endloop +endfacet +facet normal 0.054188 0.004033 -0.998523 +outer loop +vertex 25.563290 3.798691 8.029513 +vertex 26.156590 5.351182 8.067980 +vertex 26.235046 3.800150 8.065972 +endloop +endfacet +facet normal 0.047565 0.000572 -0.998868 +outer loop +vertex 25.427582 5.349819 8.032986 +vertex 25.414009 7.085731 8.033333 +vertex 26.146835 7.086800 8.068229 +endloop +endfacet +facet normal 0.047943 0.000413 -0.998850 +outer loop +vertex 25.427582 5.349819 8.032986 +vertex 26.146835 7.086800 8.068229 +vertex 26.156590 5.351182 8.067980 +endloop +endfacet +facet normal 0.047566 0.000000 -0.998868 +outer loop +vertex 25.414009 7.085731 8.033333 +vertex 25.414009 8.848668 8.033333 +vertex 26.146837 8.849369 8.068229 +endloop +endfacet +facet normal 0.047563 0.000000 -0.998868 +outer loop +vertex 25.414009 7.085731 8.033333 +vertex 26.146837 8.849369 8.068229 +vertex 26.146835 7.086800 8.068229 +endloop +endfacet +facet normal 0.047565 0.000000 -0.998868 +outer loop +vertex 25.414009 8.848668 8.033333 +vertex 25.414011 10.480907 8.033333 +vertex 26.146835 10.481279 8.068229 +endloop +endfacet +facet normal 0.047563 0.000000 -0.998868 +outer loop +vertex 25.414009 8.848668 8.033333 +vertex 26.146835 10.481279 8.068229 +vertex 26.146837 8.849369 8.068229 +endloop +endfacet +facet normal 0.272819 0.000000 -0.962065 +outer loop +vertex 26.146837 8.849369 8.068229 +vertex 26.146835 10.481279 8.068229 +vertex 26.391113 10.481605 8.137500 +endloop +endfacet +facet normal 0.272821 0.000000 -0.962065 +outer loop +vertex 26.146837 8.849369 8.068229 +vertex 26.391113 10.481605 8.137500 +vertex 26.391111 8.849988 8.137500 +endloop +endfacet +facet normal 0.457041 0.000000 0.889446 +outer loop +vertex 26.391111 8.849988 8.137500 +vertex 26.391113 10.481605 8.137500 +vertex 26.146837 10.481909 8.263021 +endloop +endfacet +facet normal 0.457041 0.000000 0.889446 +outer loop +vertex 26.391111 8.849988 8.137500 +vertex 26.146837 10.481909 8.263021 +vertex 26.146837 8.850560 8.263021 +endloop +endfacet +facet normal 0.267744 0.000000 0.963490 +outer loop +vertex 26.146837 8.850560 8.263021 +vertex 26.146837 10.481909 8.263021 +vertex 25.414009 10.482211 8.466667 +endloop +endfacet +facet normal 0.267747 -0.000000 0.963489 +outer loop +vertex 26.146837 8.850560 8.263021 +vertex 25.414009 10.482211 8.466667 +vertex 25.414009 8.851135 8.466666 +endloop +endfacet +facet normal 0.267745 0.000000 0.963490 +outer loop +vertex 26.146837 7.088612 8.263021 +vertex 26.146837 8.850560 8.263021 +vertex 25.414009 8.851135 8.466666 +endloop +endfacet +facet normal 0.267747 0.000000 0.963489 +outer loop +vertex 26.146837 7.088612 8.263021 +vertex 25.414009 8.851135 8.466666 +vertex 25.414009 7.089484 8.466667 +endloop +endfacet +facet normal 0.267745 0.000061 0.963490 +outer loop +vertex 26.147263 5.353491 8.263010 +vertex 26.146837 7.088612 8.263021 +vertex 25.414009 7.089484 8.466667 +endloop +endfacet +facet normal 0.267615 -0.000001 0.963526 +outer loop +vertex 26.147263 5.353491 8.263010 +vertex 25.414009 7.089484 8.466667 +vertex 25.414009 5.354605 8.466666 +endloop +endfacet +facet normal 0.267612 0.000465 0.963526 +outer loop +vertex 26.150230 3.802635 8.262934 +vertex 26.147263 5.353491 8.263010 +vertex 25.414009 5.354605 8.466666 +endloop +endfacet +facet normal 0.266708 0.000000 0.963777 +outer loop +vertex 26.150230 3.802635 8.262934 +vertex 25.414009 5.354605 8.466666 +vertex 25.414011 3.803846 8.466667 +endloop +endfacet +facet normal 0.452912 0.006587 0.891531 +outer loop +vertex 26.418255 3.801430 8.136806 +vertex 26.394505 5.352378 8.137413 +vertex 26.147263 5.353491 8.263010 +endloop +endfacet +facet normal 0.425800 0.000771 0.904817 +outer loop +vertex 26.418255 3.801430 8.136806 +vertex 26.147263 5.353491 8.263010 +vertex 26.150230 3.802635 8.262934 +endloop +endfacet +facet normal 0.280041 0.015408 -0.959864 +outer loop +vertex 26.235046 3.800150 8.065972 +vertex 26.156590 5.351182 8.067980 +vertex 26.394505 5.352378 8.137413 +endloop +endfacet +facet normal 0.360580 0.005887 -0.932710 +outer loop +vertex 26.235046 3.800150 8.065972 +vertex 26.394505 5.352378 8.137413 +vertex 26.418255 3.801430 8.136806 +endloop +endfacet +facet normal 0.000279 -0.000002 -1.000000 +outer loop +vertex 19.549603 3.206118 8.000000 +vertex 19.552803 3.793593 8.000000 +vertex 21.112640 3.794090 8.000434 +endloop +endfacet +facet normal 0.000278 0.000141 -1.000000 +outer loop +vertex 21.112640 3.794090 8.000434 +vertex 21.113426 3.276875 8.000361 +vertex 20.253862 3.238130 8.000117 +endloop +endfacet +facet normal 0.000149 0.000336 -1.000000 +outer loop +vertex 21.112640 3.794090 8.000434 +vertex 20.253862 3.238130 8.000117 +vertex 19.549603 3.206118 8.000000 +endloop +endfacet +facet normal 0.001849 0.001191 -0.999998 +outer loop +vertex 21.112640 3.794090 8.000434 +vertex 22.754299 3.795325 8.003472 +vertex 22.772949 3.352315 8.002979 +endloop +endfacet +facet normal 0.001572 0.000143 -0.999999 +outer loop +vertex 21.112640 3.794090 8.000434 +vertex 22.772949 3.352315 8.002979 +vertex 21.113426 3.276875 8.000361 +endloop +endfacet +facet normal 0.005351 0.001338 -0.999985 +outer loop +vertex 22.772949 3.352315 8.002979 +vertex 22.754299 3.795325 8.003472 +vertex 24.311401 3.796976 8.011806 +endloop +endfacet +facet normal 0.004311 0.004769 -0.999979 +outer loop +vertex 24.311401 3.796976 8.011806 +vertex 24.394966 3.272750 8.009665 +vertex 22.854446 3.356021 8.003421 +endloop +endfacet +facet normal 0.005352 0.001310 -0.999985 +outer loop +vertex 24.311401 3.796976 8.011806 +vertex 22.854446 3.356021 8.003421 +vertex 22.772949 3.352315 8.002979 +endloop +endfacet +facet normal 0.014136 0.006335 -0.999880 +outer loop +vertex 24.394966 3.272750 8.009665 +vertex 24.311401 3.796976 8.011806 +vertex 25.563290 3.798691 8.029513 +endloop +endfacet +facet normal 0.004153 0.014740 -0.999883 +outer loop +vertex 25.563290 3.798691 8.029513 +vertex 25.864864 3.190336 8.021798 +vertex 25.666662 3.218757 8.021394 +endloop +endfacet +facet normal 0.005494 -0.086999 -0.996193 +outer loop +vertex 25.666662 3.218757 8.021394 +vertex 25.143169 3.211766 8.019117 +vertex 24.394966 3.272750 8.009665 +endloop +endfacet +facet normal 0.009890 0.015761 -0.999827 +outer loop +vertex 25.563290 3.798691 8.029513 +vertex 25.666662 3.218757 8.021394 +vertex 24.394966 3.272750 8.009665 +endloop +endfacet +facet normal -0.239839 0.068515 0.968392 +outer loop +vertex 17.072617 13.696096 9.291351 +vertex 17.062820 12.921923 9.343699 +vertex 17.730688 12.940925 9.507764 +endloop +endfacet +facet normal -0.226513 0.080775 0.970653 +outer loop +vertex 17.072617 13.696096 9.291351 +vertex 17.730688 12.940925 9.507764 +vertex 17.714960 13.756108 9.436255 +endloop +endfacet +facet normal -0.244656 0.018514 0.969433 +outer loop +vertex 17.062820 12.921923 9.343699 +vertex 17.055969 11.850637 9.362429 +vertex 17.735132 11.853064 9.533783 +endloop +endfacet +facet normal -0.239097 0.022242 0.970741 +outer loop +vertex 17.062820 12.921923 9.343699 +vertex 17.735132 11.853064 9.533783 +vertex 17.730688 12.940925 9.507764 +endloop +endfacet +facet normal -0.085274 0.085436 0.992688 +outer loop +vertex 17.714960 13.756108 9.436255 +vertex 17.730688 12.940925 9.507764 +vertex 18.612646 12.949788 9.582764 +endloop +endfacet +facet normal -0.078599 0.092845 0.992573 +outer loop +vertex 17.714960 13.756108 9.436255 +vertex 18.612646 12.949788 9.582764 +vertex 18.594265 13.783009 9.503368 +endloop +endfacet +facet normal -0.088100 0.023458 0.995835 +outer loop +vertex 17.730688 12.940925 9.507764 +vertex 17.735132 11.853064 9.533783 +vertex 18.619249 11.854171 9.611973 +endloop +endfacet +facet normal -0.084963 0.026042 0.996044 +outer loop +vertex 17.730688 12.940925 9.507764 +vertex 18.619249 11.854171 9.611973 +vertex 18.612646 12.949788 9.582764 +endloop +endfacet +facet normal -0.387115 0.142882 0.910893 +outer loop +vertex 16.679167 14.062502 9.066667 +vertex 16.602932 13.654407 9.098280 +vertex 17.072617 13.696096 9.291351 +endloop +endfacet +facet normal -0.356462 0.179492 0.916906 +outer loop +vertex 16.679167 14.062502 9.066667 +vertex 17.072617 13.696096 9.291351 +vertex 17.038143 14.205942 9.178142 +endloop +endfacet +facet normal -0.392621 0.060960 0.917678 +outer loop +vertex 16.602932 13.654407 9.098280 +vertex 16.543751 12.910495 9.122376 +vertex 17.062820 12.921923 9.343699 +endloop +endfacet +facet normal -0.384431 0.067120 0.920710 +outer loop +vertex 16.602932 13.654407 9.098280 +vertex 17.062820 12.921923 9.343699 +vertex 17.072617 13.696096 9.291351 +endloop +endfacet +facet normal -0.395039 0.017117 0.918505 +outer loop +vertex 16.543751 12.910495 9.122376 +vertex 16.520052 11.849110 9.131964 +vertex 17.055969 11.850637 9.362429 +endloop +endfacet +facet normal -0.392498 0.018588 0.919565 +outer loop +vertex 16.543751 12.910495 9.122376 +vertex 17.055969 11.850637 9.362429 +vertex 17.062820 12.921923 9.343699 +endloop +endfacet +facet normal -0.395447 0.001900 0.918487 +outer loop +vertex 16.520052 11.849110 9.131964 +vertex 16.516666 10.483034 9.133333 +vertex 17.054993 10.483283 9.365105 +endloop +endfacet +facet normal -0.395063 0.002080 0.918652 +outer loop +vertex 16.520052 11.849110 9.131964 +vertex 17.054993 10.483283 9.365105 +vertex 17.055969 11.850637 9.362429 +endloop +endfacet +facet normal -0.245485 0.002073 0.969398 +outer loop +vertex 17.055969 11.850637 9.362429 +vertex 17.054993 10.483283 9.365105 +vertex 17.735767 10.483404 9.537500 +endloop +endfacet +facet normal -0.244643 0.002518 0.969610 +outer loop +vertex 17.055969 11.850637 9.362429 +vertex 17.735767 10.483404 9.537500 +vertex 17.735132 11.853064 9.533783 +endloop +endfacet +facet normal -0.088573 0.002662 0.996066 +outer loop +vertex 17.735132 11.853064 9.533783 +vertex 17.735767 10.483404 9.537500 +vertex 18.620193 10.483410 9.616146 +endloop +endfacet +facet normal -0.088099 0.002972 0.996107 +outer loop +vertex 17.735132 11.853064 9.533783 +vertex 18.620193 10.483410 9.616146 +vertex 18.619249 11.854171 9.611973 +endloop +endfacet +facet normal 0.043015 0.003071 0.999070 +outer loop +vertex 18.619249 11.854171 9.611973 +vertex 18.620193 10.483410 9.616146 +vertex 19.769468 10.483306 9.566667 +endloop +endfacet +facet normal 0.042916 0.002991 0.999074 +outer loop +vertex 18.619249 11.854171 9.611973 +vertex 19.769468 10.483306 9.566667 +vertex 19.768904 11.854286 9.562587 +endloop +endfacet +facet normal 0.042899 0.026884 0.998718 +outer loop +vertex 18.612646 12.949788 9.582764 +vertex 18.619249 11.854171 9.611973 +vertex 19.768904 11.854286 9.562587 +endloop +endfacet +facet normal 0.042213 0.026159 0.998766 +outer loop +vertex 18.612646 12.949788 9.582764 +vertex 19.768904 11.854286 9.562587 +vertex 19.764956 12.951040 9.534028 +endloop +endfacet +facet normal 0.041959 0.095692 0.994526 +outer loop +vertex 18.594265 13.783009 9.503368 +vertex 18.612646 12.949788 9.582764 +vertex 19.764956 12.951040 9.534028 +endloop +endfacet +facet normal 0.039880 0.092783 0.994887 +outer loop +vertex 18.594265 13.783009 9.503368 +vertex 19.764956 12.951040 9.534028 +vertex 19.754234 13.786851 9.456511 +endloop +endfacet +facet normal 0.038138 0.258394 0.965287 +outer loop +vertex 18.556152 14.368310 9.348197 +vertex 18.594265 13.783009 9.503368 +vertex 19.754234 13.786851 9.456511 +endloop +endfacet +facet normal 0.033635 0.249582 0.967769 +outer loop +vertex 18.556152 14.368310 9.348197 +vertex 19.754234 13.786851 9.456511 +vertex 19.733356 14.375003 9.305555 +endloop +endfacet +facet normal -0.081163 0.238954 0.967633 +outer loop +vertex 17.665802 14.321471 9.292516 +vertex 17.714960 13.756108 9.436255 +vertex 18.594265 13.783009 9.503368 +endloop +endfacet +facet normal -0.073570 0.251088 0.965164 +outer loop +vertex 17.665802 14.321471 9.292516 +vertex 18.594265 13.783009 9.503368 +vertex 18.556152 14.368310 9.348197 +endloop +endfacet +facet normal -0.233162 0.195746 0.952533 +outer loop +vertex 17.038143 14.205942 9.178142 +vertex 17.072617 13.696096 9.291351 +vertex 17.714960 13.756108 9.436255 +endloop +endfacet +facet normal -0.214355 0.223125 0.950930 +outer loop +vertex 17.038143 14.205942 9.178142 +vertex 17.714960 13.756108 9.436255 +vertex 17.665802 14.321471 9.292516 +endloop +endfacet +facet normal -0.070047 0.096169 -0.992897 +outer loop +vertex 16.490507 13.696053 8.177488 +vertex 17.211208 13.756058 8.132457 +vertex 17.162565 12.940511 8.056896 +endloop +endfacet +facet normal -0.074129 0.092546 -0.992945 +outer loop +vertex 16.490507 13.696053 8.177488 +vertex 17.162565 12.940511 8.056896 +vertex 16.396286 12.921580 8.112339 +endloop +endfacet +facet normal -0.017663 0.095869 -0.995237 +outer loop +vertex 17.211208 13.756058 8.132457 +vertex 18.246180 13.782951 8.116679 +vertex 18.223684 12.949332 8.036777 +endloop +endfacet +facet normal -0.019650 0.093399 -0.995435 +outer loop +vertex 17.211208 13.756058 8.132457 +vertex 18.223684 12.949332 8.036777 +vertex 17.162565 12.940511 8.056896 +endloop +endfacet +facet normal -0.072800 0.026879 -0.996984 +outer loop +vertex 16.396286 12.921580 8.112339 +vertex 17.162565 12.940511 8.056896 +vertex 17.142763 11.851664 8.028987 +endloop +endfacet +facet normal -0.074728 0.025524 -0.996877 +outer loop +vertex 16.396286 12.921580 8.112339 +vertex 17.142763 11.851664 8.028987 +vertex 16.356508 11.849483 8.087871 +endloop +endfacet +facet normal -0.019174 0.026985 -0.999452 +outer loop +vertex 17.162565 12.940511 8.056896 +vertex 18.223684 12.949332 8.036777 +vertex 18.215160 11.852634 8.007331 +endloop +endfacet +facet normal -0.020208 0.025985 -0.999458 +outer loop +vertex 17.162565 12.940511 8.056896 +vertex 18.215160 11.852634 8.007331 +vertex 17.142763 11.851664 8.028987 +endloop +endfacet +facet normal -0.199719 0.267532 -0.942623 +outer loop +vertex 16.245834 14.062501 8.333333 +vertex 16.597235 14.205941 8.299591 +vertex 16.490507 13.696053 8.177488 +endloop +endfacet +facet normal -0.235532 0.242939 -0.941013 +outer loop +vertex 16.245834 14.062501 8.333333 +vertex 16.490507 13.696053 8.177488 +vertex 16.073439 13.654376 8.271119 +endloop +endfacet +facet normal -0.073220 0.257975 -0.963373 +outer loop +vertex 16.597235 14.205941 8.299591 +vertex 17.280115 14.321469 8.278626 +vertex 17.211208 13.756058 8.132457 +endloop +endfacet +facet normal -0.080975 0.248118 -0.965340 +outer loop +vertex 16.597235 14.205941 8.299591 +vertex 17.211208 13.756058 8.132457 +vertex 16.490507 13.696053 8.177488 +endloop +endfacet +facet normal -0.018209 0.257842 -0.966015 +outer loop +vertex 17.280115 14.321469 8.278626 +vertex 18.286760 14.368312 8.272155 +vertex 18.246180 13.782951 8.116679 +endloop +endfacet +facet normal -0.021312 0.252667 -0.967319 +outer loop +vertex 17.280115 14.321469 8.278626 +vertex 18.246180 13.782951 8.116679 +vertex 17.211208 13.756058 8.132457 +endloop +endfacet +facet normal -0.009492 0.248886 -0.968486 +outer loop +vertex 18.286760 14.368312 8.272155 +vertex 19.588913 14.375001 8.261111 +vertex 19.568035 13.786793 8.110156 +endloop +endfacet +facet normal -0.005515 0.257059 -0.966380 +outer loop +vertex 18.286760 14.368312 8.272155 +vertex 19.568035 13.786793 8.110156 +vertex 18.246180 13.782951 8.116679 +endloop +endfacet +facet normal -0.005183 0.092370 -0.995711 +outer loop +vertex 18.246180 13.782951 8.116679 +vertex 19.568035 13.786793 8.110156 +vertex 19.557316 12.950583 8.032639 +endloop +endfacet +facet normal -0.003178 0.095497 -0.995425 +outer loop +vertex 18.246180 13.782951 8.116679 +vertex 19.557316 12.950583 8.032639 +vertex 18.223684 12.949332 8.036777 +endloop +endfacet +facet normal -0.003128 0.026016 -0.999657 +outer loop +vertex 18.223684 12.949332 8.036777 +vertex 19.557316 12.950583 8.032639 +vertex 19.553366 11.852744 8.004080 +endloop +endfacet +facet normal -0.002431 0.026859 -0.999636 +outer loop +vertex 18.223684 12.949332 8.036777 +vertex 19.553366 11.852744 8.004080 +vertex 18.215160 11.852634 8.007331 +endloop +endfacet +facet normal -0.002431 0.002972 -0.999993 +outer loop +vertex 18.215160 11.852634 8.007331 +vertex 19.553366 11.852744 8.004080 +vertex 19.552803 10.479649 8.000000 +endloop +endfacet +facet normal -0.002333 0.003066 -0.999993 +outer loop +vertex 18.215160 11.852634 8.007331 +vertex 19.552803 10.479649 8.000000 +vertex 18.213943 10.479768 8.003125 +endloop +endfacet +facet normal -0.020192 0.003081 -0.999791 +outer loop +vertex 17.142763 11.851664 8.028987 +vertex 18.215160 11.852634 8.007331 +vertex 18.213943 10.479768 8.003125 +endloop +endfacet +facet normal -0.020361 0.002948 -0.999788 +outer loop +vertex 17.142763 11.851664 8.028987 +vertex 18.213943 10.479768 8.003125 +vertex 17.139935 10.480088 8.025000 +endloop +endfacet +facet normal -0.074690 0.003053 -0.997202 +outer loop +vertex 16.356508 11.849483 8.087871 +vertex 17.142763 11.851664 8.028987 +vertex 17.139935 10.480088 8.025000 +endloop +endfacet +facet normal -0.075031 0.002858 -0.997177 +outer loop +vertex 16.356508 11.849483 8.087871 +vertex 17.139935 10.480088 8.025000 +vertex 16.350824 10.480552 8.084374 +endloop +endfacet +facet normal -0.232106 0.003448 -0.972684 +outer loop +vertex 15.874880 11.848289 8.202797 +vertex 16.356508 11.849483 8.087871 +vertex 16.350824 10.480552 8.084374 +endloop +endfacet +facet normal -0.232286 0.003385 -0.972641 +outer loop +vertex 15.874880 11.848289 8.202797 +vertex 16.350824 10.480552 8.084374 +vertex 15.866667 10.481091 8.200000 +endloop +endfacet +facet normal -0.231388 0.030777 -0.972375 +outer loop +vertex 15.932369 12.910254 8.222376 +vertex 16.396286 12.921580 8.112339 +vertex 16.356508 11.849483 8.087871 +endloop +endfacet +facet normal -0.232069 0.030489 -0.972221 +outer loop +vertex 15.932369 12.910254 8.222376 +vertex 16.356508 11.849483 8.087871 +vertex 15.874880 11.848289 8.202797 +endloop +endfacet +facet normal -0.228104 0.109138 -0.967501 +outer loop +vertex 16.073439 13.654376 8.271119 +vertex 16.490507 13.696053 8.177488 +vertex 16.396286 12.921580 8.112339 +endloop +endfacet +facet normal -0.231940 0.107299 -0.966794 +outer loop +vertex 16.073439 13.654376 8.271119 +vertex 16.396286 12.921580 8.112339 +vertex 15.932369 12.910254 8.222376 +endloop +endfacet +facet normal -0.075032 0.000000 -0.997181 +outer loop +vertex 16.350824 8.847996 8.084374 +vertex 17.139935 8.847120 8.025000 +vertex 17.139935 7.083379 8.025000 +endloop +endfacet +facet normal -0.075029 0.000000 -0.997181 +outer loop +vertex 16.350824 8.847996 8.084374 +vertex 17.139935 7.083379 8.025000 +vertex 16.350824 7.084708 8.084374 +endloop +endfacet +facet normal -0.020364 0.000000 -0.999793 +outer loop +vertex 17.139935 8.847120 8.025000 +vertex 18.213943 8.846513 8.003125 +vertex 18.213943 7.082455 8.003125 +endloop +endfacet +facet normal -0.020362 0.000000 -0.999793 +outer loop +vertex 17.139935 8.847120 8.025000 +vertex 18.213943 7.082455 8.003125 +vertex 17.139935 7.083379 8.025000 +endloop +endfacet +facet normal -0.075030 0.000396 -0.997181 +outer loop +vertex 16.350824 7.084708 8.084374 +vertex 17.139935 7.083379 8.025000 +vertex 17.137676 5.346809 8.024479 +endloop +endfacet +facet normal -0.073410 0.001135 -0.997301 +outer loop +vertex 16.350824 7.084708 8.084374 +vertex 17.137676 5.346809 8.024479 +vertex 16.344336 5.348505 8.082877 +endloop +endfacet +facet normal -0.020363 0.000041 -0.999793 +outer loop +vertex 17.139935 7.083379 8.025000 +vertex 18.213943 7.082455 8.003125 +vertex 18.213661 5.345628 8.003059 +endloop +endfacet +facet normal -0.019902 0.000326 -0.999802 +outer loop +vertex 17.139935 7.083379 8.025000 +vertex 18.213661 5.345628 8.003059 +vertex 17.137676 5.346809 8.024479 +endloop +endfacet +facet normal -0.232287 0.000000 -0.972647 +outer loop +vertex 15.866667 10.481091 8.200000 +vertex 16.350824 10.480552 8.084374 +vertex 16.350824 8.847996 8.084374 +endloop +endfacet +facet normal -0.232285 0.000000 -0.972648 +outer loop +vertex 15.866667 10.481091 8.200000 +vertex 16.350824 8.847996 8.084374 +vertex 15.866667 8.849014 8.200000 +endloop +endfacet +facet normal -0.075030 0.000000 -0.997181 +outer loop +vertex 16.350824 10.480552 8.084374 +vertex 17.139935 10.480088 8.025000 +vertex 17.139935 8.847120 8.025000 +endloop +endfacet +facet normal -0.075030 0.000000 -0.997181 +outer loop +vertex 16.350824 10.480552 8.084374 +vertex 17.139935 8.847120 8.025000 +vertex 16.350824 8.847996 8.084374 +endloop +endfacet +facet normal -0.020364 0.000000 -0.999793 +outer loop +vertex 17.139935 10.480088 8.025000 +vertex 18.213943 10.479768 8.003125 +vertex 18.213943 8.846513 8.003125 +endloop +endfacet +facet normal -0.020362 0.000000 -0.999793 +outer loop +vertex 17.139935 10.480088 8.025000 +vertex 18.213943 8.846513 8.003125 +vertex 17.139935 8.847120 8.025000 +endloop +endfacet +facet normal -0.002334 0.000000 -0.999997 +outer loop +vertex 18.213943 10.479768 8.003125 +vertex 19.552803 10.479649 8.000000 +vertex 19.552803 8.846289 8.000000 +endloop +endfacet +facet normal -0.002334 0.000000 -0.999997 +outer loop +vertex 18.213943 10.479768 8.003125 +vertex 19.552803 8.846289 8.000000 +vertex 18.213943 8.846513 8.003125 +endloop +endfacet +facet normal -0.002334 0.000000 -0.999997 +outer loop +vertex 18.213943 8.846513 8.003125 +vertex 19.552803 8.846289 8.000000 +vertex 19.552803 7.082114 8.000000 +endloop +endfacet +facet normal -0.002335 0.000000 -0.999997 +outer loop +vertex 18.213943 8.846513 8.003125 +vertex 19.552803 7.082114 8.000000 +vertex 18.213943 7.082455 8.003125 +endloop +endfacet +facet normal -0.002333 0.000000 -0.999997 +outer loop +vertex 18.213943 7.082455 8.003125 +vertex 19.552803 7.082114 8.000000 +vertex 19.552801 5.345193 8.000000 +endloop +endfacet +facet normal -0.002284 0.000038 -0.999997 +outer loop +vertex 18.213943 7.082455 8.003125 +vertex 19.552801 5.345193 8.000000 +vertex 18.213661 5.345628 8.003059 +endloop +endfacet +facet normal -0.002284 0.000000 -0.999997 +outer loop +vertex 18.213661 5.345628 8.003059 +vertex 19.552801 5.345193 8.000000 +vertex 19.552803 3.793593 8.000000 +endloop +endfacet +facet normal -0.001942 0.000296 -0.999998 +outer loop +vertex 18.213661 5.345628 8.003059 +vertex 19.552803 3.793593 8.000000 +vertex 18.211685 3.794066 8.002604 +endloop +endfacet +facet normal -0.019902 0.000319 -0.999802 +outer loop +vertex 17.137676 5.346809 8.024479 +vertex 18.213661 5.345628 8.003059 +vertex 18.211685 3.794066 8.002604 +endloop +endfacet +facet normal -0.016721 0.002520 -0.999857 +outer loop +vertex 17.137676 5.346809 8.024479 +vertex 18.211685 3.794066 8.002604 +vertex 17.121878 3.795351 8.020833 +endloop +endfacet +facet normal -0.073407 0.003091 -0.997297 +outer loop +vertex 16.344336 5.348505 8.082877 +vertex 17.137676 5.346809 8.024479 +vertex 17.121878 3.795351 8.020833 +endloop +endfacet +facet normal -0.060126 0.009772 -0.998143 +outer loop +vertex 16.344336 5.348505 8.082877 +vertex 17.121878 3.795351 8.020833 +vertex 16.292145 3.797194 8.070833 +endloop +endfacet +facet normal -0.229944 0.015290 -0.973084 +outer loop +vertex 15.857639 5.350487 8.197917 +vertex 16.344336 5.348505 8.082877 +vertex 16.292145 3.797194 8.070833 +endloop +endfacet +facet normal -0.198281 0.024701 -0.979834 +outer loop +vertex 15.857639 5.350487 8.197917 +vertex 16.292145 3.797194 8.070833 +vertex 15.767362 3.799347 8.177083 +endloop +endfacet +facet normal -0.232282 0.001707 -0.972647 +outer loop +vertex 15.866667 7.086260 8.200000 +vertex 16.350824 7.084708 8.084374 +vertex 16.344336 5.348505 8.082877 +endloop +endfacet +facet normal -0.230020 0.002364 -0.973183 +outer loop +vertex 15.866667 7.086260 8.200000 +vertex 16.344336 5.348505 8.082877 +vertex 15.857639 5.350487 8.197917 +endloop +endfacet +facet normal -0.232285 0.000000 -0.972648 +outer loop +vertex 15.866667 8.849014 8.200000 +vertex 16.350824 8.847996 8.084374 +vertex 16.350824 7.084708 8.084374 +endloop +endfacet +facet normal -0.232286 0.000000 -0.972647 +outer loop +vertex 15.866667 8.849014 8.200000 +vertex 16.350824 7.084708 8.084374 +vertex 15.866667 7.086260 8.200000 +endloop +endfacet +facet normal -0.245485 0.000000 0.969400 +outer loop +vertex 17.054993 8.853159 9.365105 +vertex 17.054991 7.092562 9.365105 +vertex 17.735767 7.092913 9.537500 +endloop +endfacet +facet normal -0.245487 0.000000 0.969400 +outer loop +vertex 17.054993 8.853159 9.365105 +vertex 17.735767 7.092913 9.537500 +vertex 17.735767 8.853391 9.537500 +endloop +endfacet +facet normal -0.245487 -0.000000 0.969400 +outer loop +vertex 17.054991 7.092562 9.365105 +vertex 17.054993 5.358536 9.365105 +vertex 17.735767 5.358985 9.537500 +endloop +endfacet +facet normal -0.245484 0.000000 0.969401 +outer loop +vertex 17.054991 7.092562 9.365105 +vertex 17.735767 5.358985 9.537500 +vertex 17.735767 7.092913 9.537500 +endloop +endfacet +facet normal -0.088573 0.000000 0.996070 +outer loop +vertex 17.735767 8.853391 9.537500 +vertex 17.735767 7.092913 9.537500 +vertex 18.620193 7.092926 9.616146 +endloop +endfacet +facet normal -0.088574 0.000000 0.996070 +outer loop +vertex 17.735767 8.853391 9.537500 +vertex 18.620193 7.092926 9.616146 +vertex 18.620193 8.853397 9.616146 +endloop +endfacet +facet normal -0.088573 0.000000 0.996070 +outer loop +vertex 17.735767 7.092913 9.537500 +vertex 17.735767 5.358985 9.537500 +vertex 18.620193 5.359001 9.616146 +endloop +endfacet +facet normal -0.088572 0.000000 0.996070 +outer loop +vertex 17.735767 7.092913 9.537500 +vertex 18.620193 5.359001 9.616146 +vertex 18.620193 7.092926 9.616146 +endloop +endfacet +facet normal -0.395446 0.000000 0.918489 +outer loop +vertex 16.516666 10.483034 9.133333 +vertex 16.516666 8.852689 9.133333 +vertex 17.054993 8.853159 9.365105 +endloop +endfacet +facet normal -0.395448 0.000000 0.918488 +outer loop +vertex 16.516666 10.483034 9.133333 +vertex 17.054993 8.853159 9.365105 +vertex 17.054993 10.483283 9.365105 +endloop +endfacet +facet normal -0.395448 0.000000 0.918488 +outer loop +vertex 16.516666 8.852689 9.133333 +vertex 16.516666 7.091847 9.133333 +vertex 17.054991 7.092562 9.365105 +endloop +endfacet +facet normal -0.395445 0.000001 0.918489 +outer loop +vertex 16.516666 8.852689 9.133333 +vertex 17.054991 7.092562 9.365105 +vertex 17.054993 8.853159 9.365105 +endloop +endfacet +facet normal -0.395448 0.000000 0.918488 +outer loop +vertex 16.516666 7.091847 9.133333 +vertex 16.516666 5.357624 9.133333 +vertex 17.054993 5.358536 9.365105 +endloop +endfacet +facet normal -0.395448 -0.000001 0.918488 +outer loop +vertex 16.516666 7.091847 9.133333 +vertex 17.054993 5.358536 9.365105 +vertex 17.054991 7.092562 9.365105 +endloop +endfacet +facet normal -0.395449 0.000000 0.918488 +outer loop +vertex 16.516666 5.357624 9.133333 +vertex 16.516666 3.807135 9.133333 +vertex 17.054991 3.808129 9.365105 +endloop +endfacet +facet normal -0.395446 0.000001 0.918489 +outer loop +vertex 16.516666 5.357624 9.133333 +vertex 17.054991 3.808129 9.365105 +vertex 17.054993 5.358536 9.365105 +endloop +endfacet +facet normal -0.245485 0.000000 0.969400 +outer loop +vertex 17.054993 5.358536 9.365105 +vertex 17.054991 3.808129 9.365105 +vertex 17.735767 3.808617 9.537500 +endloop +endfacet +facet normal -0.245486 0.000000 0.969400 +outer loop +vertex 17.054993 5.358536 9.365105 +vertex 17.735767 3.808617 9.537500 +vertex 17.735767 5.358985 9.537500 +endloop +endfacet +facet normal -0.088573 0.000000 0.996070 +outer loop +vertex 17.735767 5.358985 9.537500 +vertex 17.735767 3.808617 9.537500 +vertex 18.620193 3.808635 9.616146 +endloop +endfacet +facet normal -0.088573 0.000000 0.996070 +outer loop +vertex 17.735767 5.358985 9.537500 +vertex 18.620193 3.808635 9.616146 +vertex 18.620193 5.359001 9.616146 +endloop +endfacet +facet normal 0.043013 0.000000 0.999075 +outer loop +vertex 18.620193 5.359001 9.616146 +vertex 18.620193 3.808635 9.616146 +vertex 19.769468 3.808219 9.566667 +endloop +endfacet +facet normal 0.043013 0.000000 0.999075 +outer loop +vertex 18.620193 5.359001 9.616146 +vertex 19.769468 3.808219 9.566667 +vertex 19.769468 5.358619 9.566667 +endloop +endfacet +facet normal 0.043014 0.000000 0.999075 +outer loop +vertex 18.620193 7.092926 9.616146 +vertex 18.620193 5.359001 9.616146 +vertex 19.769468 5.358619 9.566667 +endloop +endfacet +facet normal 0.043012 0.000000 0.999075 +outer loop +vertex 18.620193 7.092926 9.616146 +vertex 19.769468 5.358619 9.566667 +vertex 19.769468 7.092627 9.566667 +endloop +endfacet +facet normal 0.043014 0.000000 0.999074 +outer loop +vertex 18.620193 8.853397 9.616146 +vertex 18.620193 7.092926 9.616146 +vertex 19.769468 7.092627 9.566667 +endloop +endfacet +facet normal 0.043013 0.000000 0.999075 +outer loop +vertex 18.620193 8.853397 9.616146 +vertex 19.769468 7.092627 9.566667 +vertex 19.769468 8.853203 9.566667 +endloop +endfacet +facet normal 0.043014 0.000000 0.999074 +outer loop +vertex 18.620193 10.483410 9.616146 +vertex 18.620193 8.853397 9.616146 +vertex 19.769468 8.853203 9.566667 +endloop +endfacet +facet normal 0.043013 0.000000 0.999074 +outer loop +vertex 18.620193 10.483410 9.616146 +vertex 19.769468 8.853203 9.566667 +vertex 19.769468 10.483306 9.566667 +endloop +endfacet +facet normal -0.088573 0.000000 0.996070 +outer loop +vertex 17.735767 10.483404 9.537500 +vertex 17.735767 8.853391 9.537500 +vertex 18.620193 8.853397 9.616146 +endloop +endfacet +facet normal -0.088574 0.000000 0.996070 +outer loop +vertex 17.735767 10.483404 9.537500 +vertex 18.620193 8.853397 9.616146 +vertex 18.620193 10.483410 9.616146 +endloop +endfacet +facet normal -0.245486 0.000000 0.969400 +outer loop +vertex 17.054993 10.483283 9.365105 +vertex 17.054993 8.853159 9.365105 +vertex 17.735767 8.853391 9.537500 +endloop +endfacet +facet normal -0.245486 0.000000 0.969400 +outer loop +vertex 17.054993 10.483283 9.365105 +vertex 17.735767 8.853391 9.537500 +vertex 17.735767 10.483404 9.537500 +endloop +endfacet +facet normal -0.260777 0.853498 0.451151 +outer loop +vertex 16.905079 14.500335 8.978137 +vertex 17.568832 14.658748 9.062117 +vertex 17.455404 14.771413 8.783410 +endloop +endfacet +facet normal -0.242171 0.840189 0.485218 +outer loop +vertex 16.905079 14.500335 8.978137 +vertex 17.455404 14.771413 8.783410 +vertex 16.756197 14.599973 8.731298 +endloop +endfacet +facet normal -0.076539 0.920191 0.383914 +outer loop +vertex 17.568832 14.658748 9.062117 +vertex 18.493919 14.718086 9.104320 +vertex 18.419262 14.834710 8.809905 +endloop +endfacet +facet normal -0.071003 0.914397 0.398542 +outer loop +vertex 17.568832 14.658748 9.062117 +vertex 18.419262 14.834710 8.809905 +vertex 17.455404 14.771413 8.783410 +endloop +endfacet +facet normal -0.204917 0.929214 -0.307524 +outer loop +vertex 16.756197 14.599973 8.731298 +vertex 17.455404 14.771413 8.783410 +vertex 17.359531 14.658748 8.506865 +endloop +endfacet +facet normal -0.205023 0.929081 -0.307853 +outer loop +vertex 16.756197 14.599973 8.731298 +vertex 17.359531 14.658748 8.506865 +vertex 16.664705 14.500335 8.491524 +endloop +endfacet +facet normal -0.051432 0.932644 -0.357113 +outer loop +vertex 17.455404 14.771413 8.783410 +vertex 18.419262 14.834710 8.809905 +vertex 18.346798 14.718087 8.515761 +endloop +endfacet +facet normal -0.052708 0.931059 -0.361041 +outer loop +vertex 17.455404 14.771413 8.783410 +vertex 18.346798 14.718087 8.515761 +vertex 17.359531 14.658748 8.506865 +endloop +endfacet +facet normal -0.409180 0.378964 0.830035 +outer loop +vertex 16.679167 14.062502 9.066667 +vertex 17.038143 14.205942 9.178142 +vertex 16.905079 14.500335 8.978137 +endloop +endfacet +facet normal -0.414807 0.381097 0.826257 +outer loop +vertex 16.679167 14.062502 9.066667 +vertex 16.905079 14.500335 8.978137 +vertex 16.475306 14.199250 8.901251 +endloop +endfacet +facet normal -0.243370 0.498430 0.832069 +outer loop +vertex 17.038143 14.205942 9.178142 +vertex 17.665802 14.321471 9.292516 +vertex 17.568832 14.658748 9.062117 +endloop +endfacet +facet normal -0.221536 0.477507 0.850241 +outer loop +vertex 17.038143 14.205942 9.178142 +vertex 17.568832 14.658748 9.062117 +vertex 16.905079 14.500335 8.978137 +endloop +endfacet +facet normal -0.081027 0.560320 0.824303 +outer loop +vertex 17.665802 14.321471 9.292516 +vertex 18.556152 14.368310 9.348197 +vertex 18.493919 14.718086 9.104320 +endloop +endfacet +facet normal -0.073170 0.548127 0.833189 +outer loop +vertex 17.665802 14.321471 9.292516 +vertex 18.493919 14.718086 9.104320 +vertex 17.568832 14.658748 9.062117 +endloop +endfacet +facet normal 0.026814 0.559897 0.828128 +outer loop +vertex 18.556152 14.368310 9.348197 +vertex 19.733356 14.375003 9.305555 +vertex 19.700632 14.726565 9.068924 +endloop +endfacet +facet normal 0.019972 0.574211 0.818464 +outer loop +vertex 18.556152 14.368310 9.348197 +vertex 19.700632 14.726565 9.068924 +vertex 18.493919 14.718086 9.104320 +endloop +endfacet +facet normal 0.004617 0.925364 0.379051 +outer loop +vertex 18.493919 14.718086 9.104320 +vertex 19.700632 14.726565 9.068924 +vertex 19.661137 14.843751 8.783334 +endloop +endfacet +facet normal 0.001105 0.929810 0.368039 +outer loop +vertex 18.493919 14.718086 9.104320 +vertex 19.661137 14.843751 8.783334 +vertex 18.419262 14.834710 8.809905 +endloop +endfacet +facet normal -0.014824 0.925763 -0.377813 +outer loop +vertex 18.419262 14.834710 8.809905 +vertex 19.661137 14.843751 8.783334 +vertex 19.621639 14.726565 8.497743 +endloop +endfacet +facet normal -0.011363 0.930494 -0.366131 +outer loop +vertex 18.419262 14.834710 8.809905 +vertex 19.621639 14.726565 8.497743 +vertex 18.346798 14.718087 8.515761 +endloop +endfacet +facet normal -0.015434 0.559302 -0.828820 +outer loop +vertex 18.346798 14.718087 8.515761 +vertex 19.621639 14.726565 8.497743 +vertex 19.588913 14.375001 8.261111 +endloop +endfacet +facet normal -0.009894 0.572629 -0.819755 +outer loop +vertex 18.346798 14.718087 8.515761 +vertex 19.588913 14.375001 8.261111 +vertex 18.286760 14.368312 8.272155 +endloop +endfacet +facet normal -0.027153 0.574440 -0.818096 +outer loop +vertex 17.359531 14.658748 8.506865 +vertex 18.346798 14.718087 8.515761 +vertex 18.286760 14.368312 8.272155 +endloop +endfacet +facet normal -0.031604 0.565255 -0.824310 +outer loop +vertex 17.359531 14.658748 8.506865 +vertex 18.286760 14.368312 8.272155 +vertex 17.280115 14.321469 8.278626 +endloop +endfacet +facet normal -0.113200 0.574987 -0.810294 +outer loop +vertex 16.664705 14.500335 8.491524 +vertex 17.359531 14.658748 8.506865 +vertex 17.280115 14.321469 8.278626 +endloop +endfacet +facet normal -0.120109 0.561358 -0.818811 +outer loop +vertex 16.664705 14.500335 8.491524 +vertex 17.280115 14.321469 8.278626 +vertex 16.597235 14.205941 8.299591 +endloop +endfacet +facet normal -0.341250 0.566992 -0.749712 +outer loop +vertex 16.212664 14.199250 8.469577 +vertex 16.664705 14.500335 8.491524 +vertex 16.597235 14.205941 8.299591 +endloop +endfacet +facet normal -0.324005 0.627125 -0.708333 +outer loop +vertex 16.212664 14.199250 8.469577 +vertex 16.597235 14.205941 8.299591 +vertex 16.245834 14.062501 8.333333 +endloop +endfacet +facet normal -0.561493 0.817890 -0.125621 +outer loop +vertex 16.284452 14.267941 8.678086 +vertex 16.756197 14.599973 8.731298 +vertex 16.664705 14.500335 8.491524 +endloop +endfacet +facet normal -0.549505 0.831193 -0.084632 +outer loop +vertex 16.284452 14.267941 8.678086 +vertex 16.664705 14.500335 8.491524 +vertex 16.212664 14.199250 8.469577 +endloop +endfacet +facet normal -0.536386 0.619208 0.573473 +outer loop +vertex 16.475306 14.199250 8.901251 +vertex 16.905079 14.500335 8.978137 +vertex 16.756197 14.599973 8.731298 +endloop +endfacet +facet normal -0.499132 0.610628 0.614818 +outer loop +vertex 16.475306 14.199250 8.901251 +vertex 16.756197 14.599973 8.731298 +vertex 16.284452 14.267941 8.678086 +endloop +endfacet +facet normal 0.266707 0.001315 0.963777 +outer loop +vertex 26.157015 2.552997 8.262760 +vertex 26.150230 3.802635 8.262934 +vertex 25.414011 3.803846 8.466667 +endloop +endfacet +facet normal 0.264650 -0.000001 0.964345 +outer loop +vertex 26.157015 2.552997 8.262760 +vertex 25.414011 3.803846 8.466667 +vertex 25.414009 2.554101 8.466667 +endloop +endfacet +facet normal 0.185636 -0.004848 0.982607 +outer loop +vertex 21.194145 -2.557368 9.374599 +vertex 22.751976 -2.556384 9.080295 +vertex 22.736126 -1.562173 9.088195 +endloop +endfacet +facet normal 0.191110 -0.013657 0.981474 +outer loop +vertex 21.194145 -2.557368 9.374599 +vertex 22.736126 -1.562173 9.088195 +vertex 21.148577 -1.562913 9.397309 +endloop +endfacet +facet normal 0.191110 -0.013928 0.981470 +outer loop +vertex 21.148577 -1.562913 9.397309 +vertex 22.736126 -1.562173 9.088195 +vertex 22.697634 -0.738462 9.107379 +endloop +endfacet +facet normal 0.204879 -0.041043 0.977926 +outer loop +vertex 21.148577 -1.562913 9.397309 +vertex 22.697634 -0.738462 9.107379 +vertex 21.028854 -0.738857 9.456977 +endloop +endfacet +facet normal 0.214909 -0.000543 0.976634 +outer loop +vertex 22.751976 -2.556384 9.080295 +vertex 24.226292 -2.555258 8.755870 +vertex 24.224312 -1.561327 8.756858 +endloop +endfacet +facet normal 0.217324 -0.004292 0.976090 +outer loop +vertex 22.751976 -2.556384 9.080295 +vertex 24.224312 -1.561327 8.756858 +vertex 22.736126 -1.562173 9.088195 +endloop +endfacet +facet normal 0.217324 -0.001572 0.976098 +outer loop +vertex 22.736126 -1.562173 9.088195 +vertex 24.224312 -1.561327 8.756858 +vertex 24.219498 -0.738010 8.759255 +endloop +endfacet +facet normal 0.222975 -0.012281 0.974747 +outer loop +vertex 22.736126 -1.562173 9.088195 +vertex 24.219498 -0.738010 8.759255 +vertex 22.697634 -0.738462 9.107379 +endloop +endfacet +facet normal 0.135217 -0.001868 0.990814 +outer loop +vertex 19.769468 -3.808219 9.566667 +vertex 21.200653 -3.807420 9.371354 +vertex 21.194145 -2.557368 9.374599 +endloop +endfacet +facet normal 0.135843 -0.002594 0.990727 +outer loop +vertex 19.769468 -3.808219 9.566667 +vertex 21.194145 -2.557368 9.374599 +vertex 19.760412 -2.558099 9.571181 +endloop +endfacet +facet normal 0.135833 -0.016398 0.990596 +outer loop +vertex 19.760412 -2.558099 9.571181 +vertex 21.194145 -2.557368 9.374599 +vertex 21.148577 -1.562913 9.397309 +endloop +endfacet +facet normal 0.140126 -0.022514 0.989878 +outer loop +vertex 19.760412 -2.558099 9.571181 +vertex 21.148577 -1.562913 9.397309 +vertex 19.697014 -1.563463 9.602778 +endloop +endfacet +facet normal 0.139988 -0.051260 0.988825 +outer loop +vertex 19.697014 -1.563463 9.602778 +vertex 21.148577 -1.562913 9.397309 +vertex 21.028854 -0.738857 9.456977 +endloop +endfacet +facet normal 0.155681 -0.077323 0.984776 +outer loop +vertex 19.697014 -1.563463 9.602778 +vertex 21.028854 -0.738857 9.456977 +vertex 19.506817 -0.739151 9.697570 +endloop +endfacet +facet normal 0.155540 -0.088368 0.983869 +outer loop +vertex 19.506817 -0.739151 9.697570 +vertex 21.028854 -0.738857 9.456977 +vertex 20.833847 0.000000 9.554167 +endloop +endfacet +facet normal 0.219664 -0.209516 0.952812 +outer loop +vertex 19.506817 -0.739151 9.697570 +vertex 20.833847 0.000000 9.554167 +vertex 18.900000 0.000000 10.000000 +endloop +endfacet +facet normal 0.205006 -0.019935 0.978558 +outer loop +vertex 21.028854 -0.738857 9.456977 +vertex 22.697634 -0.738462 9.107379 +vertex 22.645555 0.000000 9.133333 +endloop +endfacet +facet normal 0.225734 -0.068252 0.971795 +outer loop +vertex 21.028854 -0.738857 9.456977 +vertex 22.645555 0.000000 9.133333 +vertex 20.833847 0.000000 9.554167 +endloop +endfacet +facet normal 0.222988 -0.002319 0.974818 +outer loop +vertex 22.697634 -0.738462 9.107379 +vertex 24.219498 -0.738010 8.759255 +vertex 24.212990 0.000000 8.762500 +endloop +endfacet +facet normal 0.230193 -0.017963 0.972979 +outer loop +vertex 22.697634 -0.738462 9.107379 +vertex 24.212990 0.000000 8.762500 +vertex 22.645555 0.000000 9.133333 +endloop +endfacet +facet normal 0.237910 0.000000 0.971287 +outer loop +vertex 24.219498 -0.738010 8.759255 +vertex 25.414009 -0.737545 8.466667 +vertex 25.414011 0.000000 8.466667 +endloop +endfacet +facet normal 0.239169 -0.002159 0.970976 +outer loop +vertex 24.219498 -0.738010 8.759255 +vertex 25.414011 0.000000 8.466667 +vertex 24.212990 0.000000 8.762500 +endloop +endfacet +facet normal 0.236973 -0.000002 0.971516 +outer loop +vertex 24.224312 -1.561327 8.756858 +vertex 25.414009 -1.560457 8.466666 +vertex 25.414009 -0.737545 8.466667 +endloop +endfacet +facet normal 0.237910 -0.001437 0.971286 +outer loop +vertex 24.224312 -1.561327 8.756858 +vertex 25.414009 -0.737545 8.466667 +vertex 24.219498 -0.738010 8.759255 +endloop +endfacet +facet normal 0.236582 0.000001 0.971611 +outer loop +vertex 24.226292 -2.555258 8.755870 +vertex 25.414009 -2.554101 8.466667 +vertex 25.414009 -1.560457 8.466666 +endloop +endfacet +facet normal 0.236973 -0.000494 0.971516 +outer loop +vertex 24.226292 -2.555258 8.755870 +vertex 25.414009 -1.560457 8.466666 +vertex 24.224312 -1.561327 8.756858 +endloop +endfacet +facet normal 0.236526 0.000001 0.971625 +outer loop +vertex 24.226574 -3.805111 8.755730 +vertex 25.414011 -3.803846 8.466667 +vertex 25.414009 -2.554101 8.466667 +endloop +endfacet +facet normal 0.236583 -0.000056 0.971611 +outer loop +vertex 24.226574 -3.805111 8.755730 +vertex 25.414009 -2.554101 8.466667 +vertex 24.226292 -2.555258 8.755870 +endloop +endfacet +facet normal 0.214560 -0.000062 0.976711 +outer loop +vertex 22.754240 -3.806343 9.079166 +vertex 24.226574 -3.805111 8.755730 +vertex 24.226292 -2.555258 8.755870 +endloop +endfacet +facet normal 0.214909 -0.000492 0.976634 +outer loop +vertex 22.754240 -3.806343 9.079166 +vertex 24.226292 -2.555258 8.755870 +vertex 22.751976 -2.556384 9.080295 +endloop +endfacet +facet normal 0.184832 -0.000552 0.982770 +outer loop +vertex 21.200653 -3.807420 9.371354 +vertex 22.754240 -3.806343 9.079166 +vertex 22.751976 -2.556384 9.080295 +endloop +endfacet +facet normal 0.185636 -0.001584 0.982617 +outer loop +vertex 21.200653 -3.807420 9.371354 +vertex 22.751976 -2.556384 9.080295 +vertex 21.194145 -2.557368 9.374599 +endloop +endfacet +facet normal -0.111632 -0.027793 0.993361 +outer loop +vertex 18.613682 -2.558479 9.619390 +vertex 18.568115 -1.563749 9.642101 +vertex 17.717653 -1.563737 9.546528 +endloop +endfacet +facet normal -0.091368 -0.009363 0.995773 +outer loop +vertex 18.613682 -2.558479 9.619390 +vertex 17.717653 -1.563737 9.546528 +vertex 17.733503 -2.558462 9.538629 +endloop +endfacet +facet normal -0.261688 -0.011834 0.965080 +outer loop +vertex 17.733503 -2.558462 9.538629 +vertex 17.717653 -1.563737 9.546528 +vertex 17.052727 -1.563401 9.366233 +endloop +endfacet +facet normal -0.247479 -0.001455 0.968892 +outer loop +vertex 17.733503 -2.558462 9.538629 +vertex 17.052727 -1.563401 9.366233 +vertex 17.054708 -2.558016 9.365246 +endloop +endfacet +facet normal -0.173365 -0.096112 0.980157 +outer loop +vertex 18.568115 -1.563749 9.642101 +vertex 18.448393 -0.739303 9.701769 +vertex 17.679161 -0.739297 9.565712 +endloop +endfacet +facet normal -0.111632 -0.028326 0.993346 +outer loop +vertex 18.568115 -1.563749 9.642101 +vertex 17.679161 -0.739297 9.565712 +vertex 17.717653 -1.563737 9.546528 +endloop +endfacet +facet normal -0.297839 -0.036104 0.953933 +outer loop +vertex 17.717653 -1.563737 9.546528 +vertex 17.679161 -0.739297 9.565712 +vertex 17.047916 -0.739118 9.368630 +endloop +endfacet +facet normal -0.261698 -0.004334 0.965140 +outer loop +vertex 17.717653 -1.563737 9.546528 +vertex 17.047916 -0.739118 9.368630 +vertex 17.052727 -1.563401 9.366233 +endloop +endfacet +facet normal 0.042005 -0.003304 0.999112 +outer loop +vertex 19.769468 -3.808219 9.566667 +vertex 19.760412 -2.558099 9.571181 +vertex 18.613682 -2.558479 9.619390 +endloop +endfacet +facet normal 0.043013 -0.002369 0.999072 +outer loop +vertex 19.769468 -3.808219 9.566667 +vertex 18.613682 -2.558479 9.619390 +vertex 18.620193 -3.808635 9.616146 +endloop +endfacet +facet normal -0.091374 -0.003061 0.995812 +outer loop +vertex 18.620193 -3.808635 9.616146 +vertex 18.613682 -2.558479 9.619390 +vertex 17.733503 -2.558462 9.538629 +endloop +endfacet +facet normal -0.088572 -0.001059 0.996069 +outer loop +vertex 18.620193 -3.808635 9.616146 +vertex 17.733503 -2.558462 9.538629 +vertex 17.735767 -3.808617 9.537500 +endloop +endfacet +facet normal -0.247484 -0.001322 0.968891 +outer loop +vertex 17.735767 -3.808617 9.537500 +vertex 17.733503 -2.558462 9.538629 +vertex 17.054708 -2.558016 9.365246 +endloop +endfacet +facet normal -0.245484 -0.000165 0.969401 +outer loop +vertex 17.735767 -3.808617 9.537500 +vertex 17.054708 -2.558016 9.365246 +vertex 17.054991 -3.808129 9.365105 +endloop +endfacet +facet normal -0.395828 -0.000193 0.918324 +outer loop +vertex 17.054991 -3.808129 9.365105 +vertex 17.054708 -2.558016 9.365246 +vertex 16.516666 -2.557108 9.133333 +endloop +endfacet +facet normal -0.395446 0.000000 0.918489 +outer loop +vertex 17.054991 -3.808129 9.365105 +vertex 16.516666 -2.557108 9.133333 +vertex 16.516666 -3.807135 9.133333 +endloop +endfacet +facet normal -0.398483 -0.001704 0.917174 +outer loop +vertex 17.054708 -2.558016 9.365246 +vertex 17.052727 -1.563401 9.366233 +vertex 16.516666 -1.562718 9.133333 +endloop +endfacet +facet normal -0.395827 0.000000 0.918325 +outer loop +vertex 17.054708 -2.558016 9.365246 +vertex 16.516666 -1.562718 9.133333 +vertex 16.516666 -2.557108 9.133333 +endloop +endfacet +facet normal -0.404967 -0.005022 0.914317 +outer loop +vertex 17.052727 -1.563401 9.366233 +vertex 17.047916 -0.739118 9.368630 +vertex 16.516666 -0.738753 9.133333 +endloop +endfacet +facet normal -0.398481 0.000000 0.917176 +outer loop +vertex 17.052727 -1.563401 9.366233 +vertex 16.516666 -0.738753 9.133333 +vertex 16.516666 -1.562718 9.133333 +endloop +endfacet +facet normal -0.413823 -0.007640 0.910325 +outer loop +vertex 17.047916 -0.739118 9.368630 +vertex 17.041407 0.000000 9.371875 +vertex 16.516666 0.000000 9.133333 +endloop +endfacet +facet normal -0.404970 0.000000 0.914330 +outer loop +vertex 17.047916 -0.739118 9.368630 +vertex 16.516666 0.000000 9.133333 +vertex 16.516666 -0.738753 9.133333 +endloop +endfacet +facet normal -0.350771 -0.057525 0.934693 +outer loop +vertex 17.679161 -0.739297 9.565712 +vertex 17.627083 0.000000 9.591667 +vertex 17.041407 0.000000 9.371875 +endloop +endfacet +facet normal -0.298019 -0.006815 0.954536 +outer loop +vertex 17.679161 -0.739297 9.565712 +vertex 17.041407 0.000000 9.371875 +vertex 17.047916 -0.739118 9.368630 +endloop +endfacet +facet normal -0.307649 -0.203345 0.929518 +outer loop +vertex 18.448393 -0.739303 9.701769 +vertex 18.253386 0.000000 9.798959 +vertex 17.627083 0.000000 9.591667 +endloop +endfacet +facet normal -0.173979 -0.046789 0.983637 +outer loop +vertex 18.448393 -0.739303 9.701769 +vertex 17.627083 0.000000 9.591667 +vertex 17.679161 -0.739297 9.565712 +endloop +endfacet +facet normal -0.250697 -0.535724 0.806319 +outer loop +vertex 19.506817 -0.739151 9.697570 +vertex 18.900000 0.000000 10.000000 +vertex 18.253386 0.000000 9.798959 +endloop +endfacet +facet normal 0.003953 -0.129314 0.991596 +outer loop +vertex 19.506817 -0.739151 9.697570 +vertex 18.253386 0.000000 9.798959 +vertex 18.448393 -0.739303 9.701769 +endloop +endfacet +facet normal 0.003957 -0.113339 0.993548 +outer loop +vertex 19.697014 -1.563463 9.602778 +vertex 19.506817 -0.739151 9.697570 +vertex 18.448393 -0.739303 9.701769 +endloop +endfacet +facet normal 0.034751 -0.067120 0.997140 +outer loop +vertex 19.697014 -1.563463 9.602778 +vertex 18.448393 -0.739303 9.701769 +vertex 18.568115 -1.563749 9.642101 +endloop +endfacet +facet normal 0.034805 -0.029516 0.998958 +outer loop +vertex 19.760412 -2.558099 9.571181 +vertex 19.697014 -1.563463 9.602778 +vertex 18.568115 -1.563749 9.642101 +endloop +endfacet +facet normal 0.042000 -0.020882 0.998899 +outer loop +vertex 19.760412 -2.558099 9.571181 +vertex 18.568115 -1.563749 9.642101 +vertex 18.613682 -2.558479 9.619390 +endloop +endfacet +facet normal 0.274405 -0.047052 -0.960462 +outer loop +vertex 26.129168 -11.849633 8.070150 +vertex 26.372263 -11.851037 8.139670 +vertex 26.240326 -12.930573 8.154860 +endloop +endfacet +facet normal 0.288243 -0.045314 -0.956485 +outer loop +vertex 26.129168 -11.849633 8.070150 +vertex 26.240326 -12.930573 8.154860 +vertex 26.005474 -12.920404 8.083603 +endloop +endfacet +facet normal 0.278988 -0.174332 -0.944338 +outer loop +vertex 26.005474 -12.920404 8.083603 +vertex 26.240326 -12.930573 8.154860 +vertex 25.882959 -13.725335 8.196007 +endloop +endfacet +facet normal 0.318796 -0.178510 -0.930862 +outer loop +vertex 26.005474 -12.920404 8.083603 +vertex 25.882959 -13.725335 8.196007 +vertex 25.675266 -13.692222 8.118527 +endloop +endfacet +facet normal 0.458197 -0.040470 0.887929 +outer loop +vertex 26.372263 -11.851037 8.139670 +vertex 26.129166 -11.849897 8.265168 +vertex 26.005474 -12.920482 8.280198 +endloop +endfacet +facet normal 0.468854 -0.044890 0.882134 +outer loop +vertex 26.372263 -11.851037 8.139670 +vertex 26.005474 -12.920482 8.280198 +vertex 26.240326 -12.930573 8.154860 +endloop +endfacet +facet normal 0.460435 -0.150400 0.874859 +outer loop +vertex 26.240326 -12.930573 8.154860 +vertex 26.005474 -12.920482 8.280198 +vertex 25.675266 -13.692232 8.321312 +endloop +endfacet +facet normal 0.487982 -0.175154 0.855099 +outer loop +vertex 26.240326 -12.930573 8.154860 +vertex 25.675266 -13.692232 8.321312 +vertex 25.882959 -13.725335 8.196007 +endloop +endfacet +facet normal 0.047563 -0.002017 -0.998866 +outer loop +vertex 25.414011 -10.480907 8.033333 +vertex 26.146835 -10.481279 8.068229 +vertex 26.129168 -11.849633 8.070150 +endloop +endfacet +facet normal 0.047924 -0.001828 -0.998849 +outer loop +vertex 25.414011 -10.480907 8.033333 +vertex 26.129168 -11.849633 8.070150 +vertex 25.400063 -11.848212 8.035166 +endloop +endfacet +facet normal 0.047885 -0.018078 -0.998689 +outer loop +vertex 25.400063 -11.848212 8.035166 +vertex 26.129168 -11.849633 8.070150 +vertex 26.005474 -12.920404 8.083603 +endloop +endfacet +facet normal 0.050335 -0.016690 -0.998593 +outer loop +vertex 25.400063 -11.848212 8.035166 +vertex 26.005474 -12.920404 8.083603 +vertex 25.302427 -12.910231 8.047994 +endloop +endfacet +facet normal 0.049517 -0.066280 -0.996572 +outer loop +vertex 25.302427 -12.910231 8.047994 +vertex 26.005474 -12.920404 8.083603 +vertex 25.675266 -13.692222 8.118527 +endloop +endfacet +facet normal 0.057660 -0.062379 -0.996386 +outer loop +vertex 25.302427 -12.910231 8.047994 +vertex 25.675266 -13.692222 8.118527 +vertex 25.061609 -13.654374 8.080646 +endloop +endfacet +facet normal 0.049852 -0.175785 -0.983165 +outer loop +vertex 25.061609 -13.654374 8.080646 +vertex 25.675266 -13.692222 8.118527 +vertex 25.047661 -14.199250 8.177359 +endloop +endfacet +facet normal 0.095358 -0.176334 -0.979701 +outer loop +vertex 25.061609 -13.654374 8.080646 +vertex 25.047661 -14.199250 8.177359 +vertex 24.762611 -14.062502 8.125000 +endloop +endfacet +facet normal 0.249862 -0.445005 -0.859965 +outer loop +vertex 25.675266 -13.692222 8.118527 +vertex 25.882959 -13.725335 8.196007 +vertex 25.190845 -14.267941 8.275694 +endloop +endfacet +facet normal 0.320723 -0.490980 -0.809985 +outer loop +vertex 25.675266 -13.692222 8.118527 +vertex 25.190845 -14.267941 8.275694 +vertex 25.047661 -14.199250 8.177359 +endloop +endfacet +facet normal 0.428374 -0.392727 0.813794 +outer loop +vertex 25.882959 -13.725335 8.196007 +vertex 25.675266 -13.692232 8.321312 +vertex 25.047661 -14.199251 8.407001 +endloop +endfacet +facet normal 0.459444 -0.475901 0.749953 +outer loop +vertex 25.882959 -13.725335 8.196007 +vertex 25.047661 -14.199251 8.407001 +vertex 25.190845 -14.267941 8.275694 +endloop +endfacet +facet normal 0.269544 -0.140295 0.952714 +outer loop +vertex 25.675266 -13.692232 8.321312 +vertex 25.061607 -13.654394 8.500504 +vertex 24.762611 -14.062502 8.525001 +endloop +endfacet +facet normal 0.290536 -0.201539 0.935399 +outer loop +vertex 25.675266 -13.692232 8.321312 +vertex 24.762611 -14.062502 8.525001 +vertex 25.047661 -14.199251 8.407001 +endloop +endfacet +facet normal 0.269238 -0.057685 0.961344 +outer loop +vertex 26.005474 -12.920482 8.280198 +vertex 25.302429 -12.910394 8.477700 +vertex 25.061607 -13.654394 8.500504 +endloop +endfacet +facet normal 0.275863 -0.066949 0.958863 +outer loop +vertex 26.005474 -12.920482 8.280198 +vertex 25.061607 -13.654394 8.500504 +vertex 25.675266 -13.692232 8.321312 +endloop +endfacet +facet normal 0.268016 -0.015887 0.963283 +outer loop +vertex 26.129166 -11.849897 8.265168 +vertex 25.400064 -11.848762 8.468046 +vertex 25.302429 -12.910394 8.477700 +endloop +endfacet +facet normal 0.270178 -0.017701 0.962648 +outer loop +vertex 26.129166 -11.849897 8.265168 +vertex 25.302429 -12.910394 8.477700 +vertex 26.005474 -12.920482 8.280198 +endloop +endfacet +facet normal 0.267745 -0.001759 0.963488 +outer loop +vertex 26.146837 -10.481909 8.263021 +vertex 25.414009 -10.482211 8.466667 +vertex 25.400064 -11.848762 8.468046 +endloop +endfacet +facet normal 0.268070 -0.001951 0.963397 +outer loop +vertex 26.146837 -10.481909 8.263021 +vertex 25.400064 -11.848762 8.468046 +vertex 26.129166 -11.849897 8.265168 +endloop +endfacet +facet normal 0.457041 -0.004507 0.889434 +outer loop +vertex 26.391113 -10.481605 8.137500 +vertex 26.146837 -10.481909 8.263021 +vertex 26.129166 -11.849897 8.265168 +endloop +endfacet +facet normal 0.458701 -0.004906 0.888577 +outer loop +vertex 26.391113 -10.481605 8.137500 +vertex 26.129166 -11.849897 8.265168 +vertex 26.372263 -11.851037 8.139670 +endloop +endfacet +facet normal 0.272809 -0.005281 -0.962054 +outer loop +vertex 26.146835 -10.481279 8.068229 +vertex 26.391113 -10.481605 8.137500 +vertex 26.372263 -11.851037 8.139670 +endloop +endfacet +facet normal 0.274929 -0.004899 -0.961452 +outer loop +vertex 26.146835 -10.481279 8.068229 +vertex 26.372263 -11.851037 8.139670 +vertex 26.129168 -11.849633 8.070150 +endloop +endfacet +facet normal 0.074718 -0.905827 0.417007 +outer loop +vertex 21.163698 -14.718087 8.937361 +vertex 21.149673 -14.834710 8.686545 +vertex 22.698479 -14.771414 8.546528 +endloop +endfacet +facet normal 0.094174 -0.867630 0.488210 +outer loop +vertex 21.163698 -14.718087 8.937361 +vertex 22.698479 -14.771414 8.546528 +vertex 22.682304 -14.658746 8.749882 +endloop +endfacet +facet normal 0.156554 -0.858600 0.488157 +outer loop +vertex 22.682304 -14.658746 8.749882 +vertex 22.698479 -14.771414 8.546528 +vertex 24.096714 -14.599972 8.399652 +endloop +endfacet +facet normal 0.175628 -0.798933 0.575206 +outer loop +vertex 22.682304 -14.658746 8.749882 +vertex 24.096714 -14.599972 8.399652 +vertex 24.028313 -14.500335 8.558929 +endloop +endfacet +facet normal 0.010635 -0.906013 -0.423115 +outer loop +vertex 21.149673 -14.834710 8.686545 +vertex 21.130371 -14.718086 8.436337 +vertex 22.672430 -14.658748 8.348035 +endloop +endfacet +facet normal -0.008983 -0.870139 -0.492724 +outer loop +vertex 21.149673 -14.834710 8.686545 +vertex 22.672430 -14.658748 8.348035 +vertex 22.698479 -14.771414 8.546528 +endloop +endfacet +facet normal 0.067209 -0.863893 -0.499172 +outer loop +vertex 22.698479 -14.771414 8.546528 +vertex 22.672430 -14.658748 8.348035 +vertex 24.027081 -14.500335 8.256269 +endloop +endfacet +facet normal 0.038324 -0.811775 -0.582711 +outer loop +vertex 22.698479 -14.771414 8.546528 +vertex 24.027081 -14.500335 8.256269 +vertex 24.096714 -14.599972 8.399652 +endloop +endfacet +facet normal 0.077329 -0.561655 0.823750 +outer loop +vertex 19.733356 -14.375003 9.305555 +vertex 19.700632 -14.726565 9.068924 +vertex 21.163698 -14.718087 8.937361 +endloop +endfacet +facet normal 0.097537 -0.510328 0.854431 +outer loop +vertex 19.733356 -14.375003 9.305555 +vertex 21.163698 -14.718087 8.937361 +vertex 21.174864 -14.368311 9.145000 +endloop +endfacet +facet normal 0.125014 -0.509412 0.851394 +outer loop +vertex 21.174864 -14.368311 9.145000 +vertex 21.163698 -14.718087 8.937361 +vertex 22.682304 -14.658746 8.749882 +endloop +endfacet +facet normal 0.149635 -0.432774 0.888997 +outer loop +vertex 21.174864 -14.368311 9.145000 +vertex 22.682304 -14.658746 8.749882 +vertex 22.665283 -14.321471 8.916937 +endloop +endfacet +facet normal 0.176210 -0.429746 0.885590 +outer loop +vertex 22.665283 -14.321471 8.916937 +vertex 22.682304 -14.658746 8.749882 +vertex 24.028313 -14.500335 8.558929 +endloop +endfacet +facet normal 0.195237 -0.347732 0.917041 +outer loop +vertex 22.665283 -14.321471 8.916937 +vertex 24.028313 -14.500335 8.558929 +vertex 23.949944 -14.205942 8.687243 +endloop +endfacet +facet normal 0.234975 -0.335129 0.912401 +outer loop +vertex 23.949944 -14.205942 8.687243 +vertex 24.028313 -14.500335 8.558929 +vertex 25.047661 -14.199251 8.407001 +endloop +endfacet +facet normal 0.237569 -0.301556 0.923377 +outer loop +vertex 23.949944 -14.205942 8.687243 +vertex 25.047661 -14.199251 8.407001 +vertex 24.762611 -14.062502 8.525001 +endloop +endfacet +facet normal 0.294422 -0.748252 0.594504 +outer loop +vertex 24.028313 -14.500335 8.558929 +vertex 24.096714 -14.599972 8.399652 +vertex 25.190845 -14.267941 8.275694 +endloop +endfacet +facet normal 0.299377 -0.671564 0.677772 +outer loop +vertex 24.028313 -14.500335 8.558929 +vertex 25.190845 -14.267941 8.275694 +vertex 25.047661 -14.199251 8.407001 +endloop +endfacet +facet normal 0.178012 -0.765464 -0.618366 +outer loop +vertex 24.096714 -14.599972 8.399652 +vertex 24.027081 -14.500335 8.256269 +vertex 25.047661 -14.199250 8.177359 +endloop +endfacet +facet normal 0.136319 -0.707929 -0.693003 +outer loop +vertex 24.096714 -14.599972 8.399652 +vertex 25.047661 -14.199250 8.177359 +vertex 25.190845 -14.267941 8.275694 +endloop +endfacet +facet normal 0.035814 -0.341726 -0.939117 +outer loop +vertex 24.027081 -14.500335 8.256269 +vertex 23.947687 -14.205942 8.146118 +vertex 24.762611 -14.062502 8.125000 +endloop +endfacet +facet normal 0.020907 -0.319184 -0.947462 +outer loop +vertex 24.027081 -14.500335 8.256269 +vertex 24.762611 -14.062502 8.125000 +vertex 25.047661 -14.199250 8.177359 +endloop +endfacet +facet normal 0.010905 -0.432699 -0.901473 +outer loop +vertex 22.672430 -14.658748 8.348035 +vertex 22.647228 -14.321472 8.185841 +vertex 23.947687 -14.205942 8.146118 +endloop +endfacet +facet normal -0.021727 -0.355488 -0.934428 +outer loop +vertex 22.672430 -14.658748 8.348035 +vertex 23.947687 -14.205942 8.146118 +vertex 24.027081 -14.500335 8.256269 +endloop +endfacet +facet normal -0.008821 -0.509649 -0.860337 +outer loop +vertex 21.130371 -14.718086 8.436337 +vertex 21.113926 -14.368312 8.229306 +vertex 22.647228 -14.321472 8.185841 +endloop +endfacet +facet normal -0.034768 -0.435232 -0.899647 +outer loop +vertex 21.130371 -14.718086 8.436337 +vertex 22.647228 -14.321472 8.185841 +vertex 22.672430 -14.658748 8.348035 +endloop +endfacet +facet normal -0.014833 -0.559269 -0.828854 +outer loop +vertex 19.621639 -14.726565 8.497743 +vertex 19.588913 -14.375001 8.261111 +vertex 21.113926 -14.368312 8.229306 +endloop +endfacet +facet normal -0.032112 -0.510214 -0.859448 +outer loop +vertex 19.621639 -14.726565 8.497743 +vertex 21.113926 -14.368312 8.229306 +vertex 21.130371 -14.718086 8.436337 +endloop +endfacet +facet normal -0.010198 -0.925593 -0.378382 +outer loop +vertex 19.661137 -14.843751 8.783334 +vertex 19.621639 -14.726565 8.497743 +vertex 21.130371 -14.718086 8.436337 +endloop +endfacet +facet normal -0.021865 -0.906804 -0.420984 +outer loop +vertex 19.661137 -14.843751 8.783334 +vertex 21.130371 -14.718086 8.436337 +vertex 21.149673 -14.834710 8.686545 +endloop +endfacet +facet normal 0.030065 -0.926179 0.375884 +outer loop +vertex 19.700632 -14.726565 9.068924 +vertex 19.661137 -14.843751 8.783334 +vertex 21.149673 -14.834710 8.686545 +endloop +endfacet +facet normal 0.042957 -0.906849 0.419261 +outer loop +vertex 19.700632 -14.726565 9.068924 +vertex 21.149673 -14.834710 8.686545 +vertex 21.163698 -14.718087 8.937361 +endloop +endfacet +facet normal -0.618699 -0.001989 0.785625 +outer loop +vertex 15.731250 -2.553990 8.604167 +vertex 16.073177 -2.555731 8.873438 +vertex 16.068663 -1.561682 8.872396 +endloop +endfacet +facet normal -0.595026 -0.014885 0.803569 +outer loop +vertex 15.731250 -2.553990 8.604167 +vertex 16.068663 -1.561682 8.872396 +vertex 15.695139 -1.560369 8.595834 +endloop +endfacet +facet normal -0.595062 -0.000980 0.803679 +outer loop +vertex 15.695139 -1.560369 8.595834 +vertex 16.068663 -1.561682 8.872396 +vertex 16.066689 -0.738199 8.871941 +endloop +endfacet +facet normal -0.585481 -0.007650 0.810650 +outer loop +vertex 15.695139 -1.560369 8.595834 +vertex 16.066689 -0.738199 8.871941 +vertex 15.679340 -0.737497 8.592188 +endloop +endfacet +facet normal -0.785302 -0.300087 -0.541525 +outer loop +vertex 15.436029 -2.794299 8.100622 +vertex 15.767362 -3.799347 8.177083 +vertex 15.635330 -3.801585 8.369792 +endloop +endfacet +facet normal -0.969785 -0.108257 -0.218626 +outer loop +vertex 15.635330 -3.801585 8.369792 +vertex 15.527050 -2.781158 8.344804 +vertex 15.539762 -2.781838 8.288755 +endloop +endfacet +facet normal -0.873666 -0.043369 0.484590 +outer loop +vertex 15.635330 -3.801585 8.369792 +vertex 15.539762 -2.781838 8.288755 +vertex 15.436029 -2.794299 8.100622 +endloop +endfacet +facet normal -0.585496 -0.000154 0.810675 +outer loop +vertex 15.679340 -0.737497 8.592188 +vertex 16.066689 -0.738199 8.871941 +vertex 16.066406 0.000000 8.871875 +endloop +endfacet +facet normal -0.584159 -0.001216 0.811638 +outer loop +vertex 15.679340 -0.737497 8.592188 +vertex 16.066406 0.000000 8.871875 +vertex 15.677083 0.000000 8.591667 +endloop +endfacet +facet normal -0.502302 0.000000 0.864693 +outer loop +vertex 16.066689 -0.738199 8.871941 +vertex 16.516666 -0.738753 9.133333 +vertex 16.516666 0.000000 9.133333 +endloop +endfacet +facet normal -0.502158 -0.000114 0.864776 +outer loop +vertex 16.066689 -0.738199 8.871941 +vertex 16.516666 0.000000 9.133333 +vertex 16.066406 0.000000 8.871875 +endloop +endfacet +facet normal -0.503297 0.000000 0.864113 +outer loop +vertex 16.068663 -1.561682 8.872396 +vertex 16.516666 -1.562718 9.133333 +vertex 16.516666 -0.738753 9.133333 +endloop +endfacet +facet normal -0.502301 -0.000725 0.864692 +outer loop +vertex 16.068663 -1.561682 8.872396 +vertex 16.516666 -0.738753 9.133333 +vertex 16.066689 -0.738199 8.871941 +endloop +endfacet +facet normal -0.505600 0.000000 0.862768 +outer loop +vertex 16.073177 -2.555731 8.873438 +vertex 16.516666 -2.557108 9.133333 +vertex 16.516666 -1.562718 9.133333 +endloop +endfacet +facet normal -0.503299 -0.001380 0.864111 +outer loop +vertex 16.073177 -2.555731 8.873438 +vertex 16.516666 -1.562718 9.133333 +vertex 16.068663 -1.561682 8.872396 +endloop +endfacet +facet normal -0.507944 0.000000 0.861390 +outer loop +vertex 16.077690 -3.805630 8.874479 +vertex 16.516666 -3.807135 9.133333 +vertex 16.516666 -2.557108 9.133333 +endloop +endfacet +facet normal -0.505605 -0.001107 0.862764 +outer loop +vertex 16.077690 -3.805630 8.874479 +vertex 16.516666 -2.557108 9.133333 +vertex 16.073177 -2.555731 8.873438 +endloop +endfacet +facet normal -0.645074 -0.001693 0.764118 +outer loop +vertex 15.767361 -3.803730 8.612500 +vertex 16.077690 -3.805630 8.874479 +vertex 16.073177 -2.555731 8.873438 +endloop +endfacet +facet normal -0.618684 -0.012638 0.785538 +outer loop +vertex 15.767361 -3.803730 8.612500 +vertex 16.073177 -2.555731 8.873438 +vertex 15.731250 -2.553990 8.604167 +endloop +endfacet +facet normal -0.875831 -0.081287 0.475723 +outer loop +vertex 15.527050 -2.781158 8.344804 +vertex 15.635330 -3.801585 8.369792 +vertex 15.767361 -3.803730 8.612500 +endloop +endfacet +facet normal -0.757231 -0.017527 0.652912 +outer loop +vertex 15.767361 -3.803730 8.612500 +vertex 15.731250 -2.553990 8.604167 +vertex 15.518668 -2.552154 8.357668 +endloop +endfacet +facet normal -0.820034 0.000000 0.572315 +outer loop +vertex 15.518668 -2.552154 8.357668 +vertex 15.533590 -2.727700 8.357668 +vertex 15.538308 -2.783193 8.357668 +endloop +endfacet +facet normal -0.752865 -0.004612 0.658159 +outer loop +vertex 15.538308 -2.783193 8.357668 +vertex 15.527050 -2.781158 8.344804 +vertex 15.767361 -3.803730 8.612500 +endloop +endfacet +facet normal -0.870708 -0.074008 0.486199 +outer loop +vertex 15.767361 -3.803730 8.612500 +vertex 15.518668 -2.552154 8.357668 +vertex 15.538308 -2.783193 8.357668 +endloop +endfacet +facet normal -0.931105 0.000000 0.364751 +outer loop +vertex 15.694011 -8.850069 8.383333 +vertex 15.785417 -8.851082 8.616667 +vertex 15.785417 -7.089402 8.616667 +endloop +endfacet +facet normal -0.931106 0.000000 0.364749 +outer loop +vertex 15.694011 -8.850069 8.383333 +vertex 15.785417 -7.089402 8.616667 +vertex 15.694011 -7.087864 8.383333 +endloop +endfacet +facet normal -0.931107 -0.001101 0.364744 +outer loop +vertex 15.694011 -7.087864 8.383333 +vertex 15.785417 -7.089402 8.616667 +vertex 15.783160 -5.354500 8.616146 +endloop +endfacet +facet normal -0.925850 -0.003136 0.377877 +outer loop +vertex 15.694011 -7.087864 8.383333 +vertex 15.783160 -5.354500 8.616146 +vertex 15.687522 -5.352535 8.381836 +endloop +endfacet +facet normal -0.659398 0.000000 0.751794 +outer loop +vertex 15.785417 -8.851082 8.616667 +vertex 16.079948 -8.851977 8.875000 +vertex 16.079948 -7.090765 8.875000 +endloop +endfacet +facet normal -0.659397 0.000000 0.751795 +outer loop +vertex 15.785417 -8.851082 8.616667 +vertex 16.079948 -7.090765 8.875000 +vertex 15.785417 -7.089402 8.616667 +endloop +endfacet +facet normal -0.659397 -0.000080 0.751795 +outer loop +vertex 15.785417 -7.089402 8.616667 +vertex 16.079948 -7.090765 8.875000 +vertex 16.079666 -5.356243 8.874935 +endloop +endfacet +facet normal -0.657566 -0.000627 0.753396 +outer loop +vertex 15.785417 -7.089402 8.616667 +vertex 16.079666 -5.356243 8.874935 +vertex 15.783160 -5.354500 8.616146 +endloop +endfacet +facet normal -0.727990 0.000000 -0.685587 +outer loop +vertex 15.866667 -10.481091 8.200000 +vertex 15.694011 -10.481650 8.383333 +vertex 15.694011 -8.850069 8.383333 +endloop +endfacet +facet normal -0.727986 0.000000 -0.685592 +outer loop +vertex 15.866667 -10.481091 8.200000 +vertex 15.694011 -8.850069 8.383333 +vertex 15.866667 -8.849014 8.200000 +endloop +endfacet +facet normal -0.727987 0.000000 -0.685591 +outer loop +vertex 15.866667 -8.849014 8.200000 +vertex 15.694011 -8.850069 8.383333 +vertex 15.694011 -7.087864 8.383333 +endloop +endfacet +facet normal -0.727987 0.000000 -0.685591 +outer loop +vertex 15.866667 -8.849014 8.200000 +vertex 15.694011 -7.087864 8.383333 +vertex 15.866667 -7.086260 8.200000 +endloop +endfacet +facet normal -0.727966 -0.003314 -0.685605 +outer loop +vertex 15.866667 -7.086260 8.200000 +vertex 15.694011 -7.087864 8.383333 +vertex 15.687522 -5.352535 8.381836 +endloop +endfacet +facet normal -0.734084 -0.004633 -0.679043 +outer loop +vertex 15.866667 -7.086260 8.200000 +vertex 15.687522 -5.352535 8.381836 +vertex 15.857639 -5.350487 8.197917 +endloop +endfacet +facet normal -0.733620 -0.029959 -0.678900 +outer loop +vertex 15.857639 -5.350487 8.197917 +vertex 15.687522 -5.352535 8.381836 +vertex 15.635330 -3.801585 8.369792 +endloop +endfacet +facet normal -0.823380 -0.055509 -0.564769 +outer loop +vertex 15.857639 -5.350487 8.197917 +vertex 15.635330 -3.801585 8.369792 +vertex 15.767362 -3.799347 8.177083 +endloop +endfacet +facet normal -0.925837 -0.008545 0.377827 +outer loop +vertex 15.687522 -5.352535 8.381836 +vertex 15.783160 -5.354500 8.616146 +vertex 15.767361 -3.803730 8.612500 +endloop +endfacet +facet normal -0.878237 -0.025846 0.477526 +outer loop +vertex 15.687522 -5.352535 8.381836 +vertex 15.767361 -3.803730 8.612500 +vertex 15.635330 -3.801585 8.369792 +endloop +endfacet +facet normal -0.657567 -0.000617 0.753395 +outer loop +vertex 15.783160 -5.354500 8.616146 +vertex 16.079666 -5.356243 8.874935 +vertex 16.077690 -3.805630 8.874479 +endloop +endfacet +facet normal -0.645081 -0.004776 0.764099 +outer loop +vertex 15.783160 -5.354500 8.616146 +vertex 16.077690 -3.805630 8.874479 +vertex 15.767361 -3.803730 8.612500 +endloop +endfacet +facet normal -0.508979 0.000000 0.860779 +outer loop +vertex 16.079666 -5.356243 8.874935 +vertex 16.516666 -5.357624 9.133333 +vertex 16.516666 -3.807135 9.133333 +endloop +endfacet +facet normal -0.507942 -0.000393 0.861391 +outer loop +vertex 16.079666 -5.356243 8.874935 +vertex 16.516666 -3.807135 9.133333 +vertex 16.077690 -3.805630 8.874479 +endloop +endfacet +facet normal -0.509126 0.000000 0.860692 +outer loop +vertex 16.079948 -7.090765 8.875000 +vertex 16.516666 -7.091847 9.133333 +vertex 16.516666 -5.357624 9.133333 +endloop +endfacet +facet normal -0.508979 -0.000051 0.860779 +outer loop +vertex 16.079948 -7.090765 8.875000 +vertex 16.516666 -5.357624 9.133333 +vertex 16.079666 -5.356243 8.874935 +endloop +endfacet +facet normal -0.509127 0.000000 0.860691 +outer loop +vertex 16.079948 -8.851977 8.875000 +vertex 16.516666 -8.852689 9.133333 +vertex 16.516666 -7.091847 9.133333 +endloop +endfacet +facet normal -0.509128 0.000000 0.860691 +outer loop +vertex 16.079948 -8.851977 8.875000 +vertex 16.516666 -7.091847 9.133333 +vertex 16.079948 -7.090765 8.875000 +endloop +endfacet +facet normal -0.509128 0.000000 0.860691 +outer loop +vertex 16.079948 -10.482659 8.875000 +vertex 16.516666 -10.483034 9.133333 +vertex 16.516666 -8.852689 9.133333 +endloop +endfacet +facet normal -0.509127 0.000000 0.860691 +outer loop +vertex 16.079948 -10.482659 8.875000 +vertex 16.516666 -8.852689 9.133333 +vertex 16.079948 -8.851977 8.875000 +endloop +endfacet +facet normal -0.659397 0.000000 0.751795 +outer loop +vertex 15.785417 -10.482183 8.616667 +vertex 16.079948 -10.482659 8.875000 +vertex 16.079948 -8.851977 8.875000 +endloop +endfacet +facet normal -0.659397 0.000000 0.751795 +outer loop +vertex 15.785417 -10.482183 8.616667 +vertex 16.079948 -8.851977 8.875000 +vertex 15.785417 -8.851082 8.616667 +endloop +endfacet +facet normal -0.931105 0.000000 0.364750 +outer loop +vertex 15.694011 -10.481650 8.383333 +vertex 15.785417 -10.482183 8.616667 +vertex 15.785417 -8.851082 8.616667 +endloop +endfacet +facet normal -0.931105 0.000000 0.364750 +outer loop +vertex 15.694011 -10.481650 8.383333 +vertex 15.785417 -8.851082 8.616667 +vertex 15.694011 -8.850069 8.383333 +endloop +endfacet +facet normal 0.184832 0.000001 0.982770 +outer loop +vertex 21.200653 -8.852824 9.371354 +vertex 22.754240 -8.852315 9.079167 +vertex 22.754240 -7.091278 9.079166 +endloop +endfacet +facet normal 0.184833 0.000000 0.982770 +outer loop +vertex 21.200653 -8.852824 9.371354 +vertex 22.754240 -7.091278 9.079166 +vertex 21.200655 -7.092052 9.371354 +endloop +endfacet +facet normal 0.184832 0.000000 0.982770 +outer loop +vertex 21.200655 -7.092052 9.371354 +vertex 22.754240 -7.091278 9.079166 +vertex 22.754240 -5.356898 9.079166 +endloop +endfacet +facet normal 0.184833 0.000000 0.982770 +outer loop +vertex 21.200655 -7.092052 9.371354 +vertex 22.754240 -5.356898 9.079166 +vertex 21.200653 -5.357885 9.371354 +endloop +endfacet +facet normal 0.214560 0.000001 0.976711 +outer loop +vertex 22.754240 -8.852315 9.079167 +vertex 24.226576 -8.851733 8.755730 +vertex 24.226576 -7.090393 8.755729 +endloop +endfacet +facet normal 0.214559 0.000000 0.976711 +outer loop +vertex 22.754240 -8.852315 9.079167 +vertex 24.226576 -7.090393 8.755729 +vertex 22.754240 -7.091278 9.079166 +endloop +endfacet +facet normal 0.214560 -0.000001 0.976711 +outer loop +vertex 22.754240 -7.091278 9.079166 +vertex 24.226576 -7.090393 8.755729 +vertex 24.226576 -5.355767 8.755730 +endloop +endfacet +facet normal 0.214560 0.000000 0.976711 +outer loop +vertex 22.754240 -7.091278 9.079166 +vertex 24.226576 -5.355767 8.755730 +vertex 22.754240 -5.356898 9.079166 +endloop +endfacet +facet normal 0.135216 0.000000 0.990816 +outer loop +vertex 19.769468 -10.483306 9.566667 +vertex 21.200653 -10.483106 9.371354 +vertex 21.200653 -8.852824 9.371354 +endloop +endfacet +facet normal 0.135216 0.000000 0.990816 +outer loop +vertex 19.769468 -10.483306 9.566667 +vertex 21.200653 -8.852824 9.371354 +vertex 19.769468 -8.853203 9.566667 +endloop +endfacet +facet normal 0.135215 0.000000 0.990816 +outer loop +vertex 19.769468 -8.853203 9.566667 +vertex 21.200653 -8.852824 9.371354 +vertex 21.200655 -7.092052 9.371354 +endloop +endfacet +facet normal 0.135216 0.000000 0.990816 +outer loop +vertex 19.769468 -8.853203 9.566667 +vertex 21.200655 -7.092052 9.371354 +vertex 19.769468 -7.092627 9.566667 +endloop +endfacet +facet normal 0.135215 0.000000 0.990816 +outer loop +vertex 19.769468 -7.092627 9.566667 +vertex 21.200655 -7.092052 9.371354 +vertex 21.200653 -5.357885 9.371354 +endloop +endfacet +facet normal 0.135216 0.000000 0.990816 +outer loop +vertex 19.769468 -7.092627 9.566667 +vertex 21.200653 -5.357885 9.371354 +vertex 19.769468 -5.358619 9.566667 +endloop +endfacet +facet normal 0.135216 0.000000 0.990816 +outer loop +vertex 19.769468 -5.358619 9.566667 +vertex 21.200653 -5.357885 9.371354 +vertex 21.200653 -3.807420 9.371354 +endloop +endfacet +facet normal 0.135215 0.000000 0.990816 +outer loop +vertex 19.769468 -5.358619 9.566667 +vertex 21.200653 -3.807420 9.371354 +vertex 19.769468 -3.808219 9.566667 +endloop +endfacet +facet normal 0.184832 0.000000 0.982770 +outer loop +vertex 21.200653 -5.357885 9.371354 +vertex 22.754240 -5.356898 9.079166 +vertex 22.754240 -3.806343 9.079166 +endloop +endfacet +facet normal 0.184833 0.000000 0.982770 +outer loop +vertex 21.200653 -5.357885 9.371354 +vertex 22.754240 -3.806343 9.079166 +vertex 21.200653 -3.807420 9.371354 +endloop +endfacet +facet normal 0.214559 0.000001 0.976711 +outer loop +vertex 22.754240 -5.356898 9.079166 +vertex 24.226576 -5.355767 8.755730 +vertex 24.226574 -3.805111 8.755730 +endloop +endfacet +facet normal 0.214560 0.000000 0.976711 +outer loop +vertex 22.754240 -5.356898 9.079166 +vertex 24.226574 -3.805111 8.755730 +vertex 22.754240 -3.806343 9.079166 +endloop +endfacet +facet normal 0.236527 -0.000000 0.971625 +outer loop +vertex 24.226576 -5.355767 8.755730 +vertex 25.414009 -5.354605 8.466666 +vertex 25.414011 -3.803846 8.466667 +endloop +endfacet +facet normal 0.236528 0.000000 0.971625 +outer loop +vertex 24.226576 -5.355767 8.755730 +vertex 25.414011 -3.803846 8.466667 +vertex 24.226574 -3.805111 8.755730 +endloop +endfacet +facet normal 0.236525 0.000001 0.971625 +outer loop +vertex 24.226576 -7.090393 8.755729 +vertex 25.414009 -7.089484 8.466667 +vertex 25.414009 -5.354605 8.466666 +endloop +endfacet +facet normal 0.236529 -0.000001 0.971625 +outer loop +vertex 24.226576 -7.090393 8.755729 +vertex 25.414009 -5.354605 8.466666 +vertex 24.226576 -5.355767 8.755730 +endloop +endfacet +facet normal 0.236527 -0.000000 0.971625 +outer loop +vertex 24.226576 -8.851733 8.755730 +vertex 25.414009 -8.851135 8.466666 +vertex 25.414009 -7.089484 8.466667 +endloop +endfacet +facet normal 0.236526 0.000000 0.971625 +outer loop +vertex 24.226576 -8.851733 8.755730 +vertex 25.414009 -7.089484 8.466667 +vertex 24.226576 -7.090393 8.755729 +endloop +endfacet +facet normal 0.236527 0.000000 0.971625 +outer loop +vertex 24.226574 -10.482530 8.755730 +vertex 25.414009 -10.482211 8.466667 +vertex 25.414009 -8.851135 8.466666 +endloop +endfacet +facet normal 0.236527 -0.000000 0.971625 +outer loop +vertex 24.226574 -10.482530 8.755730 +vertex 25.414009 -8.851135 8.466666 +vertex 24.226576 -8.851733 8.755730 +endloop +endfacet +facet normal 0.214560 -0.000001 0.976711 +outer loop +vertex 22.754240 -10.482836 9.079166 +vertex 24.226574 -10.482530 8.755730 +vertex 24.226576 -8.851733 8.755730 +endloop +endfacet +facet normal 0.214560 -0.000000 0.976711 +outer loop +vertex 22.754240 -10.482836 9.079166 +vertex 24.226576 -8.851733 8.755730 +vertex 22.754240 -8.852315 9.079167 +endloop +endfacet +facet normal 0.184833 -0.000001 0.982770 +outer loop +vertex 21.200653 -10.483106 9.371354 +vertex 22.754240 -10.482836 9.079166 +vertex 22.754240 -8.852315 9.079167 +endloop +endfacet +facet normal 0.184832 0.000000 0.982770 +outer loop +vertex 21.200653 -10.483106 9.371354 +vertex 22.754240 -8.852315 9.079167 +vertex 21.200653 -8.852824 9.371354 +endloop +endfacet +facet normal 0.002254 0.000000 -0.999997 +outer loop +vertex 21.109249 -8.846521 8.000521 +vertex 21.109247 -7.082470 8.000521 +vertex 22.727156 -7.083351 8.004167 +endloop +endfacet +facet normal 0.002253 0.000000 -0.999997 +outer loop +vertex 21.109249 -8.846521 8.000521 +vertex 22.727156 -7.083351 8.004167 +vertex 22.727156 -8.847102 8.004167 +endloop +endfacet +facet normal 0.006614 0.000000 -0.999978 +outer loop +vertex 22.727156 -8.847102 8.004167 +vertex 22.727156 -7.083351 8.004167 +vertex 24.223190 -7.084518 8.014062 +endloop +endfacet +facet normal 0.006615 0.000000 -0.999978 +outer loop +vertex 22.727156 -8.847102 8.004167 +vertex 24.223190 -7.084518 8.014062 +vertex 24.223190 -8.847869 8.014062 +endloop +endfacet +facet normal 0.002202 -0.000007 -0.999998 +outer loop +vertex 21.109247 -7.082470 8.000521 +vertex 21.109673 -5.345647 8.000510 +vertex 22.730549 -5.346774 8.004080 +endloop +endfacet +facet normal 0.002254 -0.000054 -0.999997 +outer loop +vertex 21.109247 -7.082470 8.000521 +vertex 22.730549 -5.346774 8.004080 +vertex 22.727156 -7.083351 8.004167 +endloop +endfacet +facet normal 0.006477 -0.000063 -0.999979 +outer loop +vertex 22.727156 -7.083351 8.004167 +vertex 22.730549 -5.346774 8.004080 +vertex 24.232944 -5.348269 8.013813 +endloop +endfacet +facet normal 0.006614 -0.000181 -0.999978 +outer loop +vertex 22.727156 -7.083351 8.004167 +vertex 24.232944 -5.348269 8.013813 +vertex 24.223190 -7.084518 8.014062 +endloop +endfacet +facet normal 0.000335 0.000000 -1.000000 +outer loop +vertex 19.552803 -10.479649 8.000000 +vertex 19.552803 -8.846289 8.000000 +vertex 21.109249 -8.846521 8.000521 +endloop +endfacet +facet normal 0.000335 0.000000 -1.000000 +outer loop +vertex 19.552803 -10.479649 8.000000 +vertex 21.109249 -8.846521 8.000521 +vertex 21.109249 -10.479773 8.000521 +endloop +endfacet +facet normal 0.002254 0.000000 -0.999997 +outer loop +vertex 21.109249 -10.479773 8.000521 +vertex 21.109249 -8.846521 8.000521 +vertex 22.727156 -8.847102 8.004167 +endloop +endfacet +facet normal 0.002252 0.000000 -0.999997 +outer loop +vertex 21.109249 -10.479773 8.000521 +vertex 22.727156 -8.847102 8.004167 +vertex 22.727158 -10.480080 8.004167 +endloop +endfacet +facet normal 0.006615 0.000000 -0.999978 +outer loop +vertex 22.727158 -10.480080 8.004167 +vertex 22.727156 -8.847102 8.004167 +vertex 24.223190 -8.847869 8.014062 +endloop +endfacet +facet normal 0.006614 0.000000 -0.999978 +outer loop +vertex 22.727158 -10.480080 8.004167 +vertex 24.223190 -8.847869 8.014062 +vertex 24.223190 -10.480485 8.014062 +endloop +endfacet +facet normal 0.016180 0.000000 -0.999869 +outer loop +vertex 24.223190 -10.480485 8.014062 +vertex 24.223190 -8.847869 8.014062 +vertex 25.414009 -8.848668 8.033333 +endloop +endfacet +facet normal 0.016182 0.000000 -0.999869 +outer loop +vertex 24.223190 -10.480485 8.014062 +vertex 25.414009 -8.848668 8.033333 +vertex 25.414011 -10.480907 8.033333 +endloop +endfacet +facet normal 0.016180 0.000000 -0.999869 +outer loop +vertex 24.223190 -8.847869 8.014062 +vertex 24.223190 -7.084518 8.014062 +vertex 25.414009 -7.085731 8.033333 +endloop +endfacet +facet normal 0.016181 0.000000 -0.999869 +outer loop +vertex 24.223190 -8.847869 8.014062 +vertex 25.414009 -7.085731 8.033333 +vertex 25.414009 -8.848668 8.033333 +endloop +endfacet +facet normal 0.016046 -0.000234 -0.999871 +outer loop +vertex 24.223190 -7.084518 8.014062 +vertex 24.232944 -5.348269 8.013813 +vertex 25.427582 -5.349819 8.032986 +endloop +endfacet +facet normal 0.016182 -0.000326 -0.999869 +outer loop +vertex 24.223190 -7.084518 8.014062 +vertex 25.427582 -5.349819 8.032986 +vertex 25.414009 -7.085731 8.033333 +endloop +endfacet +facet normal 0.014140 -0.002009 -0.999898 +outer loop +vertex 24.232944 -5.348269 8.013813 +vertex 24.311401 -3.796976 8.011806 +vertex 25.563290 -3.798691 8.029513 +endloop +endfacet +facet normal 0.016042 -0.003642 -0.999865 +outer loop +vertex 24.232944 -5.348269 8.013813 +vertex 25.563290 -3.798691 8.029513 +vertex 25.427582 -5.349819 8.032986 +endloop +endfacet +facet normal 0.005350 -0.000473 -0.999986 +outer loop +vertex 22.730549 -5.346774 8.004080 +vertex 22.754299 -3.795325 8.003472 +vertex 24.311401 -3.796976 8.011806 +endloop +endfacet +facet normal 0.006478 -0.001622 -0.999978 +outer loop +vertex 22.730549 -5.346774 8.004080 +vertex 24.311401 -3.796976 8.011806 +vertex 24.232944 -5.348269 8.013813 +endloop +endfacet +facet normal 0.001851 -0.000053 -0.999998 +outer loop +vertex 21.109673 -5.345647 8.000510 +vertex 21.112640 -3.794090 8.000434 +vertex 22.754299 -3.795325 8.003472 +endloop +endfacet +facet normal 0.002203 -0.000425 -0.999997 +outer loop +vertex 21.109673 -5.345647 8.000510 +vertex 22.754299 -3.795325 8.003472 +vertex 22.730549 -5.346774 8.004080 +endloop +endfacet +facet normal 0.000279 0.000000 -1.000000 +outer loop +vertex 19.552801 -5.345193 8.000000 +vertex 19.552803 -3.793593 8.000000 +vertex 21.112640 -3.794090 8.000434 +endloop +endfacet +facet normal 0.000327 -0.000050 -1.000000 +outer loop +vertex 19.552801 -5.345193 8.000000 +vertex 21.112640 -3.794090 8.000434 +vertex 21.109673 -5.345647 8.000510 +endloop +endfacet +facet normal 0.000328 0.000000 -1.000000 +outer loop +vertex 19.552803 -7.082114 8.000000 +vertex 19.552801 -5.345193 8.000000 +vertex 21.109673 -5.345647 8.000510 +endloop +endfacet +facet normal 0.000334 -0.000006 -1.000000 +outer loop +vertex 19.552803 -7.082114 8.000000 +vertex 21.109673 -5.345647 8.000510 +vertex 21.109247 -7.082470 8.000521 +endloop +endfacet +facet normal 0.000335 0.000000 -1.000000 +outer loop +vertex 19.552803 -8.846289 8.000000 +vertex 19.552803 -7.082114 8.000000 +vertex 21.109247 -7.082470 8.000521 +endloop +endfacet +facet normal 0.000334 0.000000 -1.000000 +outer loop +vertex 19.552803 -8.846289 8.000000 +vertex 21.109247 -7.082470 8.000521 +vertex 21.109249 -8.846521 8.000521 +endloop +endfacet +facet normal -0.000779 -0.081272 -0.996692 +outer loop +vertex 21.108089 -13.782950 8.097133 +vertex 21.108513 -12.949333 8.029158 +vertex 22.706612 -12.940510 8.027189 +endloop +endfacet +facet normal -0.008823 -0.066099 -0.997774 +outer loop +vertex 21.108089 -13.782950 8.097133 +vertex 22.706612 -12.940510 8.027189 +vertex 22.668369 -13.756055 8.081554 +endloop +endfacet +facet normal 0.003973 -0.066698 -0.997765 +outer loop +vertex 22.668369 -13.756055 8.081554 +vertex 22.706612 -12.940510 8.027189 +vertex 24.159176 -12.921573 8.031707 +endloop +endfacet +facet normal -0.004329 -0.051922 -0.998642 +outer loop +vertex 22.668369 -13.756055 8.081554 +vertex 24.159176 -12.921573 8.031707 +vertex 24.034252 -13.696052 8.072515 +endloop +endfacet +facet normal 0.001837 -0.022844 -0.999737 +outer loop +vertex 21.108513 -12.949333 8.029158 +vertex 21.109156 -11.852637 8.004100 +vertex 22.724588 -11.851659 8.007044 +endloop +endfacet +facet normal -0.001129 -0.018480 -0.999829 +outer loop +vertex 21.108513 -12.949333 8.029158 +vertex 22.724588 -11.851659 8.007044 +vertex 22.706612 -12.940510 8.027189 +endloop +endfacet +facet normal 0.006215 -0.018601 -0.999808 +outer loop +vertex 22.706612 -12.940510 8.027189 +vertex 22.724588 -11.851659 8.007044 +vertex 24.215187 -11.849457 8.016268 +endloop +endfacet +facet normal 0.003299 -0.014571 -0.999888 +outer loop +vertex 22.706612 -12.940510 8.027189 +vertex 24.215187 -11.849457 8.016268 +vertex 24.159176 -12.921573 8.031707 +endloop +endfacet +facet normal -0.007570 -0.248826 -0.968519 +outer loop +vertex 19.588913 -14.375001 8.261111 +vertex 19.568035 -13.786793 8.110156 +vertex 21.108089 -13.782950 8.097133 +endloop +endfacet +facet normal -0.019371 -0.220396 -0.975218 +outer loop +vertex 19.588913 -14.375001 8.261111 +vertex 21.108089 -13.782950 8.097133 +vertex 21.113926 -14.368312 8.229306 +endloop +endfacet +facet normal -0.005942 -0.220306 -0.975413 +outer loop +vertex 21.113926 -14.368312 8.229306 +vertex 21.108089 -13.782950 8.097133 +vertex 22.668369 -13.756055 8.081554 +endloop +endfacet +facet normal -0.022359 -0.180528 -0.983316 +outer loop +vertex 21.113926 -14.368312 8.229306 +vertex 22.668369 -13.756055 8.081554 +vertex 22.647228 -14.321472 8.185841 +endloop +endfacet +facet normal 0.001462 -0.181435 -0.983402 +outer loop +vertex 22.647228 -14.321472 8.185841 +vertex 22.668369 -13.756055 8.081554 +vertex 24.034252 -13.696052 8.072515 +endloop +endfacet +facet normal -0.017813 -0.139884 -0.990008 +outer loop +vertex 22.647228 -14.321472 8.185841 +vertex 24.034252 -13.696052 8.072515 +vertex 23.947687 -14.205942 8.146118 +endloop +endfacet +facet normal 0.013719 -0.145136 -0.989317 +outer loop +vertex 23.947687 -14.205942 8.146118 +vertex 24.034252 -13.696052 8.072515 +vertex 25.061609 -13.654374 8.080646 +endloop +endfacet +facet normal -0.007751 -0.102426 -0.994711 +outer loop +vertex 23.947687 -14.205942 8.146118 +vertex 25.061609 -13.654374 8.080646 +vertex 24.762611 -14.062502 8.125000 +endloop +endfacet +facet normal 0.014770 -0.054988 -0.998378 +outer loop +vertex 24.034252 -13.696052 8.072515 +vertex 24.159176 -12.921573 8.031707 +vertex 25.302427 -12.910231 8.047994 +endloop +endfacet +facet normal 0.009810 -0.047003 -0.998847 +outer loop +vertex 24.034252 -13.696052 8.072515 +vertex 25.302427 -12.910231 8.047994 +vertex 25.061609 -13.654374 8.080646 +endloop +endfacet +facet normal 0.015961 -0.015231 -0.999757 +outer loop +vertex 24.159176 -12.921573 8.031707 +vertex 24.215187 -11.849457 8.016268 +vertex 25.400063 -11.848212 8.035166 +endloop +endfacet +facet normal 0.014378 -0.013398 -0.999807 +outer loop +vertex 24.159176 -12.921573 8.031707 +vertex 25.400063 -11.848212 8.035166 +vertex 25.302427 -12.910231 8.047994 +endloop +endfacet +facet normal 0.016180 -0.001706 -0.999868 +outer loop +vertex 24.215187 -11.849457 8.016268 +vertex 24.223190 -10.480485 8.014062 +vertex 25.414011 -10.480907 8.033333 +endloop +endfacet +facet normal 0.015950 -0.001503 -0.999872 +outer loop +vertex 24.215187 -11.849457 8.016268 +vertex 25.414011 -10.480907 8.033333 +vertex 25.400063 -11.848212 8.035166 +endloop +endfacet +facet normal 0.006613 -0.002110 -0.999976 +outer loop +vertex 22.724588 -11.851659 8.007044 +vertex 22.727158 -10.480080 8.004167 +vertex 24.223190 -10.480485 8.014062 +endloop +endfacet +facet normal 0.006190 -0.001647 -0.999980 +outer loop +vertex 22.724588 -11.851659 8.007044 +vertex 24.223190 -10.480485 8.014062 +vertex 24.215187 -11.849457 8.016268 +endloop +endfacet +facet normal 0.002254 -0.002607 -0.999994 +outer loop +vertex 21.109156 -11.852637 8.004100 +vertex 21.109249 -10.479773 8.000521 +vertex 22.727158 -10.480080 8.004167 +endloop +endfacet +facet normal 0.001824 -0.002101 -0.999996 +outer loop +vertex 21.109156 -11.852637 8.004100 +vertex 22.727158 -10.480080 8.004167 +vertex 22.724588 -11.851659 8.007044 +endloop +endfacet +facet normal 0.000335 -0.002971 -0.999996 +outer loop +vertex 19.553366 -11.852744 8.004080 +vertex 19.552803 -10.479649 8.000000 +vertex 21.109249 -10.479773 8.000521 +endloop +endfacet +facet normal 0.000012 -0.002607 -0.999997 +outer loop +vertex 19.553366 -11.852744 8.004080 +vertex 21.109249 -10.479773 8.000521 +vertex 21.109156 -11.852637 8.004100 +endloop +endfacet +facet normal 0.000016 -0.026005 -0.999662 +outer loop +vertex 19.557316 -12.950583 8.032639 +vertex 19.553366 -11.852744 8.004080 +vertex 21.109156 -11.852637 8.004100 +endloop +endfacet +facet normal -0.002227 -0.022841 -0.999737 +outer loop +vertex 19.557316 -12.950583 8.032639 +vertex 21.109156 -11.852637 8.004100 +vertex 21.108513 -12.949333 8.029158 +endloop +endfacet +facet normal -0.002161 -0.092332 -0.995726 +outer loop +vertex 19.568035 -13.786793 8.110156 +vertex 19.557316 -12.950583 8.032639 +vertex 21.108513 -12.949333 8.029158 +endloop +endfacet +facet normal -0.008225 -0.081266 -0.996659 +outer loop +vertex 19.568035 -13.786793 8.110156 +vertex 21.108513 -12.949333 8.029158 +vertex 21.108089 -13.782950 8.097133 +endloop +endfacet +facet normal 0.171458 -0.063177 0.983164 +outer loop +vertex 21.186642 -13.783004 9.276489 +vertex 22.691643 -13.756097 9.015754 +vertex 22.732565 -12.940852 9.061005 +endloop +endfacet +facet normal 0.180586 -0.080679 0.980245 +outer loop +vertex 21.186642 -13.783004 9.276489 +vertex 22.732565 -12.940852 9.061005 +vertex 21.196112 -12.949749 9.343325 +endloop +endfacet +facet normal 0.180792 -0.017514 0.983365 +outer loop +vertex 21.196112 -12.949749 9.343325 +vertex 22.732565 -12.940852 9.061005 +vertex 22.751530 -11.852822 9.076897 +endloop +endfacet +facet normal 0.184294 -0.022663 0.982610 +outer loop +vertex 21.196112 -12.949749 9.343325 +vertex 22.751530 -11.852822 9.076897 +vertex 21.200087 -11.854041 9.367850 +endloop +endfacet +facet normal 0.202004 -0.047845 0.978215 +outer loop +vertex 22.691643 -13.756097 9.015754 +vertex 24.037163 -13.696084 8.740838 +vertex 24.162418 -12.921827 8.752842 +endloop +endfacet +facet normal 0.211063 -0.064731 0.975327 +outer loop +vertex 22.691643 -13.756097 9.015754 +vertex 24.162418 -12.921827 8.752842 +vertex 22.732565 -12.940852 9.061005 +endloop +endfacet +facet normal 0.210835 -0.013350 0.977430 +outer loop +vertex 22.732565 -12.940852 9.061005 +vertex 24.162418 -12.921827 8.752842 +vertex 24.218555 -11.850319 8.755368 +endloop +endfacet +facet normal 0.214084 -0.017997 0.976649 +outer loop +vertex 22.732565 -12.940852 9.061005 +vertex 24.218555 -11.850319 8.755368 +vertex 22.751530 -11.852822 9.076897 +endloop +endfacet +facet normal 0.108992 -0.219970 0.969399 +outer loop +vertex 19.733356 -14.375003 9.305555 +vertex 21.174864 -14.368311 9.145000 +vertex 21.186642 -13.783004 9.276489 +endloop +endfacet +facet normal 0.121374 -0.250804 0.960399 +outer loop +vertex 19.733356 -14.375003 9.305555 +vertex 21.186642 -13.783004 9.276489 +vertex 19.754234 -13.786851 9.456511 +endloop +endfacet +facet normal 0.124502 -0.080737 0.988929 +outer loop +vertex 19.754234 -13.786851 9.456511 +vertex 21.186642 -13.783004 9.276489 +vertex 21.196112 -12.949749 9.343325 +endloop +endfacet +facet normal 0.131593 -0.093219 0.986911 +outer loop +vertex 19.754234 -13.786851 9.456511 +vertex 21.196112 -12.949749 9.343325 +vertex 19.764956 -12.951040 9.534028 +endloop +endfacet +facet normal 0.132070 -0.022661 0.990981 +outer loop +vertex 19.764956 -12.951040 9.534028 +vertex 21.196112 -12.949749 9.343325 +vertex 21.200087 -11.854041 9.367850 +endloop +endfacet +facet normal 0.134783 -0.026278 0.990527 +outer loop +vertex 19.764956 -12.951040 9.534028 +vertex 21.200087 -11.854041 9.367850 +vertex 19.768904 -11.854286 9.562587 +endloop +endfacet +facet normal 0.134824 -0.002588 0.990866 +outer loop +vertex 19.768904 -11.854286 9.562587 +vertex 21.200087 -11.854041 9.367850 +vertex 21.200653 -10.483106 9.371354 +endloop +endfacet +facet normal 0.135215 -0.003004 0.990812 +outer loop +vertex 19.768904 -11.854286 9.562587 +vertex 21.200653 -10.483106 9.371354 +vertex 19.769468 -10.483306 9.566667 +endloop +endfacet +facet normal 0.184326 -0.001993 0.982863 +outer loop +vertex 21.200087 -11.854041 9.367850 +vertex 22.751530 -11.852822 9.076897 +vertex 22.754240 -10.482836 9.079166 +endloop +endfacet +facet normal 0.184832 -0.002589 0.982767 +outer loop +vertex 21.200087 -11.854041 9.367850 +vertex 22.754240 -10.482836 9.079166 +vertex 21.200653 -10.483106 9.371354 +endloop +endfacet +facet normal 0.214092 -0.001513 0.976812 +outer loop +vertex 22.751530 -11.852822 9.076897 +vertex 24.218555 -11.850319 8.755368 +vertex 24.226574 -10.482530 8.755730 +endloop +endfacet +facet normal 0.214560 -0.002042 0.976709 +outer loop +vertex 22.751530 -11.852822 9.076897 +vertex 24.226574 -10.482530 8.755730 +vertex 22.754240 -10.482836 9.079166 +endloop +endfacet +facet normal 0.236297 -0.001430 0.971680 +outer loop +vertex 24.218555 -11.850319 8.755368 +vertex 25.400064 -11.848762 8.468046 +vertex 25.414009 -10.482211 8.466667 +endloop +endfacet +facet normal 0.236527 -0.001643 0.971624 +outer loop +vertex 24.218555 -11.850319 8.755368 +vertex 25.414009 -10.482211 8.466667 +vertex 24.226574 -10.482530 8.755730 +endloop +endfacet +facet normal 0.234715 -0.012748 0.971981 +outer loop +vertex 24.162418 -12.921827 8.752842 +vertex 25.302429 -12.910394 8.477700 +vertex 25.400064 -11.848762 8.468046 +endloop +endfacet +facet normal 0.236288 -0.014670 0.971572 +outer loop +vertex 24.162418 -12.921827 8.752842 +vertex 25.400064 -11.848762 8.468046 +vertex 24.218555 -11.850319 8.755368 +endloop +endfacet +facet normal 0.229893 -0.044615 0.972193 +outer loop +vertex 24.037163 -13.696084 8.740838 +vertex 25.061607 -13.654394 8.500504 +vertex 25.302429 -12.910394 8.477700 +endloop +endfacet +facet normal 0.234786 -0.053031 0.970600 +outer loop +vertex 24.037163 -13.696084 8.740838 +vertex 25.302429 -12.910394 8.477700 +vertex 24.162418 -12.921827 8.752842 +endloop +endfacet +facet normal 0.211196 -0.096345 0.972684 +outer loop +vertex 23.949944 -14.205942 8.687243 +vertex 24.762611 -14.062502 8.525001 +vertex 25.061607 -13.654394 8.500504 +endloop +endfacet +facet normal 0.231550 -0.140794 0.962581 +outer loop +vertex 23.949944 -14.205942 8.687243 +vertex 25.061607 -13.654394 8.500504 +vertex 24.037163 -13.696084 8.740838 +endloop +endfacet +facet normal 0.186093 -0.134147 0.973331 +outer loop +vertex 22.665283 -14.321471 8.916937 +vertex 23.949944 -14.205942 8.687243 +vertex 24.037163 -13.696084 8.740838 +endloop +endfacet +facet normal 0.204599 -0.177777 0.962567 +outer loop +vertex 22.665283 -14.321471 8.916937 +vertex 24.037163 -13.696084 8.740838 +vertex 22.691643 -13.756097 9.015754 +endloop +endfacet +facet normal 0.154304 -0.177086 0.972024 +outer loop +vertex 21.174864 -14.368311 9.145000 +vertex 22.665283 -14.321471 8.916937 +vertex 22.691643 -13.756097 9.015754 +endloop +endfacet +facet normal 0.170355 -0.219245 0.960682 +outer loop +vertex 21.174864 -14.368311 9.145000 +vertex 22.691643 -13.756097 9.015754 +vertex 21.186642 -13.783004 9.276489 +endloop +endfacet +facet normal -0.942867 -0.169688 0.286718 +outer loop +vertex 15.926517 -13.692226 8.431500 +vertex 15.996692 -13.725345 8.642670 +vertex 15.848109 -12.930644 8.624383 +endloop +endfacet +facet normal -0.925336 -0.179809 0.333800 +outer loop +vertex 15.926517 -13.692226 8.431500 +vertex 15.848109 -12.930644 8.624383 +vertex 15.764791 -12.920452 8.398901 +endloop +endfacet +facet normal -0.937705 -0.045501 0.344440 +outer loop +vertex 15.764791 -12.920452 8.398901 +vertex 15.848109 -12.930644 8.624383 +vertex 15.793253 -11.851281 8.617631 +endloop +endfacet +facet normal -0.930933 -0.049248 0.361855 +outer loop +vertex 15.764791 -12.920452 8.398901 +vertex 15.793253 -11.851281 8.617631 +vertex 15.702858 -11.849790 8.385280 +endloop +endfacet +facet normal -0.680988 -0.098469 0.725644 +outer loop +vertex 15.996692 -13.725345 8.642670 +vertex 16.239573 -13.692245 8.875096 +vertex 16.126717 -12.920577 8.873900 +endloop +endfacet +facet normal -0.661215 -0.106536 0.742593 +outer loop +vertex 15.996692 -13.725345 8.642670 +vertex 16.126717 -12.920577 8.873900 +vertex 15.848109 -12.930644 8.624383 +endloop +endfacet +facet normal -0.666398 -0.026147 0.745138 +outer loop +vertex 15.848109 -12.930644 8.624383 +vertex 16.126717 -12.920577 8.873900 +vertex 16.085794 -11.850214 8.874863 +endloop +endfacet +facet normal -0.659997 -0.028847 0.750714 +outer loop +vertex 15.848109 -12.930644 8.624383 +vertex 16.085794 -11.850214 8.874863 +vertex 15.793253 -11.851281 8.617631 +endloop +endfacet +facet normal -0.679728 -0.428326 -0.595404 +outer loop +vertex 16.245834 -14.062501 8.333333 +vertex 16.212664 -14.199250 8.469577 +vertex 15.926517 -13.692226 8.431500 +endloop +endfacet +facet normal -0.638856 -0.372476 -0.673145 +outer loop +vertex 16.245834 -14.062501 8.333333 +vertex 15.926517 -13.692226 8.431500 +vertex 16.073439 -13.654376 8.271119 +endloop +endfacet +facet normal -0.704649 -0.176686 -0.687205 +outer loop +vertex 16.073439 -13.654376 8.271119 +vertex 15.926517 -13.692226 8.431500 +vertex 15.764791 -12.920452 8.398901 +endloop +endfacet +facet normal -0.708344 -0.179013 -0.682791 +outer loop +vertex 16.073439 -13.654376 8.271119 +vertex 15.764791 -12.920452 8.398901 +vertex 15.932369 -12.910254 8.222376 +endloop +endfacet +facet normal -0.722856 -0.050581 -0.689144 +outer loop +vertex 15.932369 -12.910254 8.222376 +vertex 15.764791 -12.920452 8.398901 +vertex 15.702858 -11.849790 8.385280 +endloop +endfacet +facet normal -0.726457 -0.051960 -0.685245 +outer loop +vertex 15.932369 -12.910254 8.222376 +vertex 15.702858 -11.849790 8.385280 +vertex 15.874880 -11.848289 8.202797 +endloop +endfacet +facet normal -0.727620 -0.005683 -0.685957 +outer loop +vertex 15.874880 -11.848289 8.202797 +vertex 15.702858 -11.849790 8.385280 +vertex 15.694011 -10.481650 8.383333 +endloop +endfacet +facet normal -0.727964 -0.005775 -0.685591 +outer loop +vertex 15.874880 -11.848289 8.202797 +vertex 15.694011 -10.481650 8.383333 +vertex 15.866667 -10.481091 8.200000 +endloop +endfacet +facet normal -0.931956 -0.005079 0.362536 +outer loop +vertex 15.702858 -11.849790 8.385280 +vertex 15.793253 -11.851281 8.617631 +vertex 15.785417 -10.482183 8.616667 +endloop +endfacet +facet normal -0.931095 -0.005502 0.364735 +outer loop +vertex 15.702858 -11.849790 8.385280 +vertex 15.785417 -10.482183 8.616667 +vertex 15.694011 -10.481650 8.383333 +endloop +endfacet +facet normal -0.660322 -0.002898 0.750977 +outer loop +vertex 15.793253 -11.851281 8.617631 +vertex 16.085794 -11.850214 8.874863 +vertex 16.079948 -10.482659 8.875000 +endloop +endfacet +facet normal -0.659395 -0.003245 0.751790 +outer loop +vertex 15.793253 -11.851281 8.617631 +vertex 16.079948 -10.482659 8.875000 +vertex 15.785417 -10.482183 8.616667 +endloop +endfacet +facet normal -0.509449 -0.002124 0.860498 +outer loop +vertex 16.085794 -11.850214 8.874863 +vertex 16.520052 -11.849110 9.131964 +vertex 16.516666 -10.483034 9.133333 +endloop +endfacet +facet normal -0.509129 -0.002264 0.860687 +outer loop +vertex 16.085794 -11.850214 8.874863 +vertex 16.516666 -10.483034 9.133333 +vertex 16.079948 -10.482659 8.875000 +endloop +endfacet +facet normal -0.511418 -0.019182 0.859118 +outer loop +vertex 16.126717 -12.920577 8.873900 +vertex 16.543751 -12.910495 9.122376 +vertex 16.520052 -11.849110 9.131964 +endloop +endfacet +facet normal -0.509309 -0.020245 0.860346 +outer loop +vertex 16.126717 -12.920577 8.873900 +vertex 16.520052 -11.849110 9.131964 +vertex 16.085794 -11.850214 8.874863 +endloop +endfacet +facet normal -0.516933 -0.068762 0.853260 +outer loop +vertex 16.239573 -13.692245 8.875096 +vertex 16.602932 -13.654407 9.098280 +vertex 16.543751 -12.910495 9.122376 +endloop +endfacet +facet normal -0.509175 -0.073137 0.857550 +outer loop +vertex 16.239573 -13.692245 8.875096 +vertex 16.543751 -12.910495 9.122376 +vertex 16.126717 -12.920577 8.873900 +endloop +endfacet +facet normal -0.551613 -0.166355 0.817343 +outer loop +vertex 16.475306 -14.199250 8.901251 +vertex 16.679167 -14.062502 9.066667 +vertex 16.602932 -13.654407 9.098280 +endloop +endfacet +facet normal -0.499636 -0.188695 0.845433 +outer loop +vertex 16.475306 -14.199250 8.901251 +vertex 16.602932 -13.654407 9.098280 +vertex 16.239573 -13.692245 8.875096 +endloop +endfacet +facet normal -0.684012 -0.283353 0.672190 +outer loop +vertex 16.284452 -14.267941 8.678086 +vertex 16.475306 -14.199250 8.901251 +vertex 16.239573 -13.692245 8.875096 +endloop +endfacet +facet normal -0.639902 -0.292996 0.710408 +outer loop +vertex 16.284452 -14.267941 8.678086 +vertex 16.239573 -13.692245 8.875096 +vertex 15.996692 -13.725345 8.642670 +endloop +endfacet +facet normal -0.877249 -0.455323 0.152037 +outer loop +vertex 16.212664 -14.199250 8.469577 +vertex 16.284452 -14.267941 8.678086 +vertex 15.996692 -13.725345 8.642670 +endloop +endfacet +facet normal -0.857875 -0.468253 0.211637 +outer loop +vertex 16.212664 -14.199250 8.469577 +vertex 15.996692 -13.725345 8.642670 +vertex 15.926517 -13.692226 8.431500 +endloop +endfacet +facet normal 0.280158 -0.000596 -0.959954 +outer loop +vertex 26.156590 -5.351182 8.067980 +vertex 26.394505 -5.352378 8.137413 +vertex 26.391111 -7.087739 8.137500 +endloop +endfacet +facet normal 0.272812 -0.001670 -0.962066 +outer loop +vertex 26.156590 -5.351182 8.067980 +vertex 26.391111 -7.087739 8.137500 +vertex 26.146835 -7.086800 8.068229 +endloop +endfacet +facet normal 0.272818 0.000000 -0.962066 +outer loop +vertex 26.146835 -7.086800 8.068229 +vertex 26.391111 -7.087739 8.137500 +vertex 26.391111 -8.849988 8.137500 +endloop +endfacet +facet normal 0.272823 0.000000 -0.962064 +outer loop +vertex 26.146835 -7.086800 8.068229 +vertex 26.391111 -8.849988 8.137500 +vertex 26.146837 -8.849369 8.068229 +endloop +endfacet +facet normal 0.452912 -0.000105 0.891555 +outer loop +vertex 26.394505 -5.352378 8.137413 +vertex 26.147263 -5.353491 8.263010 +vertex 26.146837 -7.088612 8.263021 +endloop +endfacet +facet normal 0.457040 -0.000850 0.889446 +outer loop +vertex 26.394505 -5.352378 8.137413 +vertex 26.146837 -7.088612 8.263021 +vertex 26.391111 -7.087739 8.137500 +endloop +endfacet +facet normal 0.457042 0.000000 0.889445 +outer loop +vertex 26.391111 -7.087739 8.137500 +vertex 26.146837 -7.088612 8.263021 +vertex 26.146837 -8.850560 8.263021 +endloop +endfacet +facet normal 0.457043 0.000000 0.889445 +outer loop +vertex 26.391111 -7.087739 8.137500 +vertex 26.146837 -8.850560 8.263021 +vertex 26.391111 -8.849988 8.137500 +endloop +endfacet +facet normal 0.054188 -0.004033 -0.998523 +outer loop +vertex 25.563290 -3.798691 8.029513 +vertex 26.235046 -3.800150 8.065972 +vertex 26.156590 -5.351182 8.067980 +endloop +endfacet +facet normal 0.047932 -0.006430 -0.998830 +outer loop +vertex 25.563290 -3.798691 8.029513 +vertex 26.156590 -5.351182 8.067980 +vertex 25.427582 -5.349819 8.032986 +endloop +endfacet +facet normal 0.047943 -0.000413 -0.998850 +outer loop +vertex 25.427582 -5.349819 8.032986 +vertex 26.156590 -5.351182 8.067980 +vertex 26.146835 -7.086800 8.068229 +endloop +endfacet +facet normal 0.047565 -0.000572 -0.998868 +outer loop +vertex 25.427582 -5.349819 8.032986 +vertex 26.146835 -7.086800 8.068229 +vertex 25.414009 -7.085731 8.033333 +endloop +endfacet +facet normal 0.047563 0.000000 -0.998868 +outer loop +vertex 25.414009 -7.085731 8.033333 +vertex 26.146835 -7.086800 8.068229 +vertex 26.146837 -8.849369 8.068229 +endloop +endfacet +facet normal 0.047566 0.000000 -0.998868 +outer loop +vertex 25.414009 -7.085731 8.033333 +vertex 26.146837 -8.849369 8.068229 +vertex 25.414009 -8.848668 8.033333 +endloop +endfacet +facet normal 0.047563 0.000000 -0.998868 +outer loop +vertex 25.414009 -8.848668 8.033333 +vertex 26.146837 -8.849369 8.068229 +vertex 26.146835 -10.481279 8.068229 +endloop +endfacet +facet normal 0.047565 0.000000 -0.998868 +outer loop +vertex 25.414009 -8.848668 8.033333 +vertex 26.146835 -10.481279 8.068229 +vertex 25.414011 -10.480907 8.033333 +endloop +endfacet +facet normal 0.272821 0.000000 -0.962065 +outer loop +vertex 26.146837 -8.849369 8.068229 +vertex 26.391111 -8.849988 8.137500 +vertex 26.391113 -10.481605 8.137500 +endloop +endfacet +facet normal 0.272819 0.000000 -0.962065 +outer loop +vertex 26.146837 -8.849369 8.068229 +vertex 26.391113 -10.481605 8.137500 +vertex 26.146835 -10.481279 8.068229 +endloop +endfacet +facet normal 0.457041 0.000000 0.889446 +outer loop +vertex 26.391111 -8.849988 8.137500 +vertex 26.146837 -8.850560 8.263021 +vertex 26.146837 -10.481909 8.263021 +endloop +endfacet +facet normal 0.457041 0.000000 0.889446 +outer loop +vertex 26.391111 -8.849988 8.137500 +vertex 26.146837 -10.481909 8.263021 +vertex 26.391113 -10.481605 8.137500 +endloop +endfacet +facet normal 0.267747 0.000000 0.963489 +outer loop +vertex 26.146837 -8.850560 8.263021 +vertex 25.414009 -8.851135 8.466666 +vertex 25.414009 -10.482211 8.466667 +endloop +endfacet +facet normal 0.267744 0.000000 0.963490 +outer loop +vertex 26.146837 -8.850560 8.263021 +vertex 25.414009 -10.482211 8.466667 +vertex 26.146837 -10.481909 8.263021 +endloop +endfacet +facet normal 0.267747 -0.000000 0.963489 +outer loop +vertex 26.146837 -7.088612 8.263021 +vertex 25.414009 -7.089484 8.466667 +vertex 25.414009 -8.851135 8.466666 +endloop +endfacet +facet normal 0.267745 0.000000 0.963490 +outer loop +vertex 26.146837 -7.088612 8.263021 +vertex 25.414009 -8.851135 8.466666 +vertex 26.146837 -8.850560 8.263021 +endloop +endfacet +facet normal 0.267615 0.000001 0.963526 +outer loop +vertex 26.147263 -5.353491 8.263010 +vertex 25.414009 -5.354605 8.466666 +vertex 25.414009 -7.089484 8.466667 +endloop +endfacet +facet normal 0.267745 -0.000061 0.963490 +outer loop +vertex 26.147263 -5.353491 8.263010 +vertex 25.414009 -7.089484 8.466667 +vertex 26.146837 -7.088612 8.263021 +endloop +endfacet +facet normal 0.266708 -0.000000 0.963777 +outer loop +vertex 26.150230 -3.802635 8.262934 +vertex 25.414011 -3.803846 8.466667 +vertex 25.414009 -5.354605 8.466666 +endloop +endfacet +facet normal 0.267612 -0.000465 0.963526 +outer loop +vertex 26.150230 -3.802635 8.262934 +vertex 25.414009 -5.354605 8.466666 +vertex 26.147263 -5.353491 8.263010 +endloop +endfacet +facet normal 0.425800 -0.000771 0.904817 +outer loop +vertex 26.418255 -3.801430 8.136806 +vertex 26.150230 -3.802635 8.262934 +vertex 26.147263 -5.353491 8.263010 +endloop +endfacet +facet normal 0.452912 -0.006587 0.891531 +outer loop +vertex 26.418255 -3.801430 8.136806 +vertex 26.147263 -5.353491 8.263010 +vertex 26.394505 -5.352378 8.137413 +endloop +endfacet +facet normal 0.360580 -0.005887 -0.932710 +outer loop +vertex 26.235046 -3.800150 8.065972 +vertex 26.418255 -3.801430 8.136806 +vertex 26.394505 -5.352378 8.137413 +endloop +endfacet +facet normal 0.280041 -0.015408 -0.959864 +outer loop +vertex 26.235046 -3.800150 8.065972 +vertex 26.394505 -5.352378 8.137413 +vertex 26.156590 -5.351182 8.067980 +endloop +endfacet +facet normal 0.000279 0.000002 -1.000000 +outer loop +vertex 21.112640 -3.794090 8.000434 +vertex 19.552803 -3.793593 8.000000 +vertex 19.549599 -3.205483 8.000000 +endloop +endfacet +facet normal 0.000277 -0.000139 -1.000000 +outer loop +vertex 20.747240 -3.260331 8.000258 +vertex 21.113426 -3.276976 8.000362 +vertex 21.112640 -3.794090 8.000434 +endloop +endfacet +facet normal 0.000208 -0.000187 -1.000000 +outer loop +vertex 19.549599 -3.205483 8.000000 +vertex 20.747240 -3.260331 8.000258 +vertex 21.112640 -3.794090 8.000434 +endloop +endfacet +facet normal 0.001571 -0.000141 -0.999999 +outer loop +vertex 21.112640 -3.794090 8.000434 +vertex 21.113426 -3.276976 8.000362 +vertex 22.772945 -3.352415 8.002979 +endloop +endfacet +facet normal 0.001849 -0.001191 -0.999997 +outer loop +vertex 21.112640 -3.794090 8.000434 +vertex 22.772945 -3.352415 8.002979 +vertex 22.754299 -3.795325 8.003472 +endloop +endfacet +facet normal 0.005351 -0.001338 -0.999985 +outer loop +vertex 24.311401 -3.796976 8.011806 +vertex 22.754299 -3.795325 8.003472 +vertex 22.772945 -3.352415 8.002979 +endloop +endfacet +facet normal 0.003892 -0.004703 -0.999981 +outer loop +vertex 23.345116 -3.377946 8.006075 +vertex 24.391867 -3.292191 8.009745 +vertex 24.311401 -3.796976 8.011806 +endloop +endfacet +facet normal 0.005347 -0.001337 -0.999985 +outer loop +vertex 22.772945 -3.352415 8.002979 +vertex 23.345116 -3.377946 8.006075 +vertex 24.311401 -3.796976 8.011806 +endloop +endfacet +facet normal 0.014136 -0.006335 -0.999880 +outer loop +vertex 25.563290 -3.798691 8.029513 +vertex 24.311401 -3.796976 8.011806 +vertex 24.391867 -3.292191 8.009745 +endloop +endfacet +facet normal 0.004140 -0.014740 -0.999883 +outer loop +vertex 25.696550 -3.224265 8.021599 +vertex 25.854183 -3.211885 8.022071 +vertex 25.563290 -3.798691 8.029513 +endloop +endfacet +facet normal 0.009923 -0.016077 -0.999822 +outer loop +vertex 24.391867 -3.292191 8.009745 +vertex 25.696550 -3.224265 8.021599 +vertex 25.563290 -3.798691 8.029513 +endloop +endfacet +facet normal -0.226513 -0.080775 0.970653 +outer loop +vertex 17.072617 -13.696096 9.291351 +vertex 17.714960 -13.756108 9.436255 +vertex 17.730688 -12.940925 9.507764 +endloop +endfacet +facet normal -0.239839 -0.068515 0.968392 +outer loop +vertex 17.072617 -13.696096 9.291351 +vertex 17.730688 -12.940925 9.507764 +vertex 17.062820 -12.921923 9.343699 +endloop +endfacet +facet normal -0.239097 -0.022242 0.970741 +outer loop +vertex 17.062820 -12.921923 9.343699 +vertex 17.730688 -12.940925 9.507764 +vertex 17.735132 -11.853064 9.533783 +endloop +endfacet +facet normal -0.244656 -0.018514 0.969433 +outer loop +vertex 17.062820 -12.921923 9.343699 +vertex 17.735132 -11.853064 9.533783 +vertex 17.055969 -11.850637 9.362429 +endloop +endfacet +facet normal -0.078599 -0.092845 0.992573 +outer loop +vertex 17.714960 -13.756108 9.436255 +vertex 18.594265 -13.783009 9.503368 +vertex 18.612646 -12.949788 9.582764 +endloop +endfacet +facet normal -0.085274 -0.085436 0.992688 +outer loop +vertex 17.714960 -13.756108 9.436255 +vertex 18.612646 -12.949788 9.582764 +vertex 17.730688 -12.940925 9.507764 +endloop +endfacet +facet normal -0.084963 -0.026042 0.996044 +outer loop +vertex 17.730688 -12.940925 9.507764 +vertex 18.612646 -12.949788 9.582764 +vertex 18.619249 -11.854171 9.611973 +endloop +endfacet +facet normal -0.088100 -0.023458 0.995835 +outer loop +vertex 17.730688 -12.940925 9.507764 +vertex 18.619249 -11.854171 9.611973 +vertex 17.735132 -11.853064 9.533783 +endloop +endfacet +facet normal -0.356462 -0.179492 0.916906 +outer loop +vertex 16.679167 -14.062502 9.066667 +vertex 17.038143 -14.205942 9.178142 +vertex 17.072617 -13.696096 9.291351 +endloop +endfacet +facet normal -0.387115 -0.142882 0.910893 +outer loop +vertex 16.679167 -14.062502 9.066667 +vertex 17.072617 -13.696096 9.291351 +vertex 16.602932 -13.654407 9.098280 +endloop +endfacet +facet normal -0.384431 -0.067120 0.920710 +outer loop +vertex 16.602932 -13.654407 9.098280 +vertex 17.072617 -13.696096 9.291351 +vertex 17.062820 -12.921923 9.343699 +endloop +endfacet +facet normal -0.392621 -0.060960 0.917678 +outer loop +vertex 16.602932 -13.654407 9.098280 +vertex 17.062820 -12.921923 9.343699 +vertex 16.543751 -12.910495 9.122376 +endloop +endfacet +facet normal -0.392498 -0.018588 0.919565 +outer loop +vertex 16.543751 -12.910495 9.122376 +vertex 17.062820 -12.921923 9.343699 +vertex 17.055969 -11.850637 9.362429 +endloop +endfacet +facet normal -0.395039 -0.017117 0.918505 +outer loop +vertex 16.543751 -12.910495 9.122376 +vertex 17.055969 -11.850637 9.362429 +vertex 16.520052 -11.849110 9.131964 +endloop +endfacet +facet normal -0.395063 -0.002080 0.918652 +outer loop +vertex 16.520052 -11.849110 9.131964 +vertex 17.055969 -11.850637 9.362429 +vertex 17.054993 -10.483283 9.365105 +endloop +endfacet +facet normal -0.395447 -0.001900 0.918487 +outer loop +vertex 16.520052 -11.849110 9.131964 +vertex 17.054993 -10.483283 9.365105 +vertex 16.516666 -10.483034 9.133333 +endloop +endfacet +facet normal -0.244643 -0.002518 0.969610 +outer loop +vertex 17.055969 -11.850637 9.362429 +vertex 17.735132 -11.853064 9.533783 +vertex 17.735767 -10.483404 9.537500 +endloop +endfacet +facet normal -0.245485 -0.002073 0.969398 +outer loop +vertex 17.055969 -11.850637 9.362429 +vertex 17.735767 -10.483404 9.537500 +vertex 17.054993 -10.483283 9.365105 +endloop +endfacet +facet normal -0.088099 -0.002972 0.996107 +outer loop +vertex 17.735132 -11.853064 9.533783 +vertex 18.619249 -11.854171 9.611973 +vertex 18.620193 -10.483410 9.616146 +endloop +endfacet +facet normal -0.088573 -0.002662 0.996066 +outer loop +vertex 17.735132 -11.853064 9.533783 +vertex 18.620193 -10.483410 9.616146 +vertex 17.735767 -10.483404 9.537500 +endloop +endfacet +facet normal 0.042916 -0.002991 0.999074 +outer loop +vertex 18.619249 -11.854171 9.611973 +vertex 19.768904 -11.854286 9.562587 +vertex 19.769468 -10.483306 9.566667 +endloop +endfacet +facet normal 0.043015 -0.003071 0.999070 +outer loop +vertex 18.619249 -11.854171 9.611973 +vertex 19.769468 -10.483306 9.566667 +vertex 18.620193 -10.483410 9.616146 +endloop +endfacet +facet normal 0.042213 -0.026159 0.998766 +outer loop +vertex 18.612646 -12.949788 9.582764 +vertex 19.764956 -12.951040 9.534028 +vertex 19.768904 -11.854286 9.562587 +endloop +endfacet +facet normal 0.042899 -0.026884 0.998718 +outer loop +vertex 18.612646 -12.949788 9.582764 +vertex 19.768904 -11.854286 9.562587 +vertex 18.619249 -11.854171 9.611973 +endloop +endfacet +facet normal 0.039880 -0.092783 0.994887 +outer loop +vertex 18.594265 -13.783009 9.503368 +vertex 19.754234 -13.786851 9.456511 +vertex 19.764956 -12.951040 9.534028 +endloop +endfacet +facet normal 0.041959 -0.095692 0.994526 +outer loop +vertex 18.594265 -13.783009 9.503368 +vertex 19.764956 -12.951040 9.534028 +vertex 18.612646 -12.949788 9.582764 +endloop +endfacet +facet normal 0.033635 -0.249582 0.967769 +outer loop +vertex 18.556152 -14.368310 9.348197 +vertex 19.733356 -14.375003 9.305555 +vertex 19.754234 -13.786851 9.456511 +endloop +endfacet +facet normal 0.038138 -0.258394 0.965287 +outer loop +vertex 18.556152 -14.368310 9.348197 +vertex 19.754234 -13.786851 9.456511 +vertex 18.594265 -13.783009 9.503368 +endloop +endfacet +facet normal -0.073570 -0.251088 0.965164 +outer loop +vertex 17.665802 -14.321471 9.292516 +vertex 18.556152 -14.368310 9.348197 +vertex 18.594265 -13.783009 9.503368 +endloop +endfacet +facet normal -0.081163 -0.238954 0.967633 +outer loop +vertex 17.665802 -14.321471 9.292516 +vertex 18.594265 -13.783009 9.503368 +vertex 17.714960 -13.756108 9.436255 +endloop +endfacet +facet normal -0.214355 -0.223125 0.950930 +outer loop +vertex 17.038143 -14.205942 9.178142 +vertex 17.665802 -14.321471 9.292516 +vertex 17.714960 -13.756108 9.436255 +endloop +endfacet +facet normal -0.233162 -0.195746 0.952533 +outer loop +vertex 17.038143 -14.205942 9.178142 +vertex 17.714960 -13.756108 9.436255 +vertex 17.072617 -13.696096 9.291351 +endloop +endfacet +facet normal -0.074129 -0.092546 -0.992945 +outer loop +vertex 16.490507 -13.696053 8.177488 +vertex 16.396286 -12.921580 8.112339 +vertex 17.162565 -12.940511 8.056896 +endloop +endfacet +facet normal -0.070047 -0.096169 -0.992897 +outer loop +vertex 16.490507 -13.696053 8.177488 +vertex 17.162565 -12.940511 8.056896 +vertex 17.211208 -13.756058 8.132457 +endloop +endfacet +facet normal -0.019650 -0.093399 -0.995435 +outer loop +vertex 17.211208 -13.756058 8.132457 +vertex 17.162565 -12.940511 8.056896 +vertex 18.223684 -12.949332 8.036777 +endloop +endfacet +facet normal -0.017663 -0.095869 -0.995237 +outer loop +vertex 17.211208 -13.756058 8.132457 +vertex 18.223684 -12.949332 8.036777 +vertex 18.246180 -13.782951 8.116679 +endloop +endfacet +facet normal -0.074728 -0.025524 -0.996877 +outer loop +vertex 16.396286 -12.921580 8.112339 +vertex 16.356508 -11.849483 8.087871 +vertex 17.142763 -11.851664 8.028987 +endloop +endfacet +facet normal -0.072800 -0.026879 -0.996984 +outer loop +vertex 16.396286 -12.921580 8.112339 +vertex 17.142763 -11.851664 8.028987 +vertex 17.162565 -12.940511 8.056896 +endloop +endfacet +facet normal -0.020208 -0.025985 -0.999458 +outer loop +vertex 17.162565 -12.940511 8.056896 +vertex 17.142763 -11.851664 8.028987 +vertex 18.215160 -11.852634 8.007331 +endloop +endfacet +facet normal -0.019174 -0.026985 -0.999452 +outer loop +vertex 17.162565 -12.940511 8.056896 +vertex 18.215160 -11.852634 8.007331 +vertex 18.223684 -12.949332 8.036777 +endloop +endfacet +facet normal -0.235532 -0.242939 -0.941013 +outer loop +vertex 16.245834 -14.062501 8.333333 +vertex 16.073439 -13.654376 8.271119 +vertex 16.490507 -13.696053 8.177488 +endloop +endfacet +facet normal -0.199719 -0.267532 -0.942623 +outer loop +vertex 16.245834 -14.062501 8.333333 +vertex 16.490507 -13.696053 8.177488 +vertex 16.597235 -14.205941 8.299591 +endloop +endfacet +facet normal -0.080975 -0.248118 -0.965340 +outer loop +vertex 16.597235 -14.205941 8.299591 +vertex 16.490507 -13.696053 8.177488 +vertex 17.211208 -13.756058 8.132457 +endloop +endfacet +facet normal -0.073220 -0.257975 -0.963373 +outer loop +vertex 16.597235 -14.205941 8.299591 +vertex 17.211208 -13.756058 8.132457 +vertex 17.280115 -14.321469 8.278626 +endloop +endfacet +facet normal -0.021312 -0.252667 -0.967319 +outer loop +vertex 17.280115 -14.321469 8.278626 +vertex 17.211208 -13.756058 8.132457 +vertex 18.246180 -13.782951 8.116679 +endloop +endfacet +facet normal -0.018209 -0.257842 -0.966015 +outer loop +vertex 17.280115 -14.321469 8.278626 +vertex 18.246180 -13.782951 8.116679 +vertex 18.286760 -14.368312 8.272155 +endloop +endfacet +facet normal -0.005515 -0.257059 -0.966380 +outer loop +vertex 18.286760 -14.368312 8.272155 +vertex 18.246180 -13.782951 8.116679 +vertex 19.568035 -13.786793 8.110156 +endloop +endfacet +facet normal -0.009492 -0.248886 -0.968486 +outer loop +vertex 18.286760 -14.368312 8.272155 +vertex 19.568035 -13.786793 8.110156 +vertex 19.588913 -14.375001 8.261111 +endloop +endfacet +facet normal -0.003178 -0.095497 -0.995425 +outer loop +vertex 18.246180 -13.782951 8.116679 +vertex 18.223684 -12.949332 8.036777 +vertex 19.557316 -12.950583 8.032639 +endloop +endfacet +facet normal -0.005183 -0.092370 -0.995711 +outer loop +vertex 18.246180 -13.782951 8.116679 +vertex 19.557316 -12.950583 8.032639 +vertex 19.568035 -13.786793 8.110156 +endloop +endfacet +facet normal -0.002431 -0.026859 -0.999636 +outer loop +vertex 18.223684 -12.949332 8.036777 +vertex 18.215160 -11.852634 8.007331 +vertex 19.553366 -11.852744 8.004080 +endloop +endfacet +facet normal -0.003128 -0.026016 -0.999657 +outer loop +vertex 18.223684 -12.949332 8.036777 +vertex 19.553366 -11.852744 8.004080 +vertex 19.557316 -12.950583 8.032639 +endloop +endfacet +facet normal -0.002333 -0.003066 -0.999993 +outer loop +vertex 18.215160 -11.852634 8.007331 +vertex 18.213943 -10.479768 8.003125 +vertex 19.552803 -10.479649 8.000000 +endloop +endfacet +facet normal -0.002431 -0.002972 -0.999993 +outer loop +vertex 18.215160 -11.852634 8.007331 +vertex 19.552803 -10.479649 8.000000 +vertex 19.553366 -11.852744 8.004080 +endloop +endfacet +facet normal -0.020361 -0.002948 -0.999788 +outer loop +vertex 17.142763 -11.851664 8.028987 +vertex 17.139935 -10.480088 8.025000 +vertex 18.213943 -10.479768 8.003125 +endloop +endfacet +facet normal -0.020192 -0.003081 -0.999791 +outer loop +vertex 17.142763 -11.851664 8.028987 +vertex 18.213943 -10.479768 8.003125 +vertex 18.215160 -11.852634 8.007331 +endloop +endfacet +facet normal -0.075031 -0.002858 -0.997177 +outer loop +vertex 16.356508 -11.849483 8.087871 +vertex 16.350824 -10.480552 8.084374 +vertex 17.139935 -10.480088 8.025000 +endloop +endfacet +facet normal -0.074690 -0.003053 -0.997202 +outer loop +vertex 16.356508 -11.849483 8.087871 +vertex 17.139935 -10.480088 8.025000 +vertex 17.142763 -11.851664 8.028987 +endloop +endfacet +facet normal -0.232286 -0.003385 -0.972641 +outer loop +vertex 15.874880 -11.848289 8.202797 +vertex 15.866667 -10.481091 8.200000 +vertex 16.350824 -10.480552 8.084374 +endloop +endfacet +facet normal -0.232106 -0.003448 -0.972684 +outer loop +vertex 15.874880 -11.848289 8.202797 +vertex 16.350824 -10.480552 8.084374 +vertex 16.356508 -11.849483 8.087871 +endloop +endfacet +facet normal -0.232069 -0.030489 -0.972221 +outer loop +vertex 15.932369 -12.910254 8.222376 +vertex 15.874880 -11.848289 8.202797 +vertex 16.356508 -11.849483 8.087871 +endloop +endfacet +facet normal -0.231388 -0.030777 -0.972375 +outer loop +vertex 15.932369 -12.910254 8.222376 +vertex 16.356508 -11.849483 8.087871 +vertex 16.396286 -12.921580 8.112339 +endloop +endfacet +facet normal -0.231940 -0.107299 -0.966794 +outer loop +vertex 16.073439 -13.654376 8.271119 +vertex 15.932369 -12.910254 8.222376 +vertex 16.396286 -12.921580 8.112339 +endloop +endfacet +facet normal -0.228104 -0.109138 -0.967501 +outer loop +vertex 16.073439 -13.654376 8.271119 +vertex 16.396286 -12.921580 8.112339 +vertex 16.490507 -13.696053 8.177488 +endloop +endfacet +facet normal -0.075029 0.000000 -0.997181 +outer loop +vertex 16.350824 -8.847996 8.084374 +vertex 16.350824 -7.084708 8.084374 +vertex 17.139935 -7.083379 8.025000 +endloop +endfacet +facet normal -0.075032 0.000000 -0.997181 +outer loop +vertex 16.350824 -8.847996 8.084374 +vertex 17.139935 -7.083379 8.025000 +vertex 17.139935 -8.847120 8.025000 +endloop +endfacet +facet normal -0.020362 0.000000 -0.999793 +outer loop +vertex 17.139935 -8.847120 8.025000 +vertex 17.139935 -7.083379 8.025000 +vertex 18.213943 -7.082455 8.003125 +endloop +endfacet +facet normal -0.020364 0.000000 -0.999793 +outer loop +vertex 17.139935 -8.847120 8.025000 +vertex 18.213943 -7.082455 8.003125 +vertex 18.213943 -8.846513 8.003125 +endloop +endfacet +facet normal -0.073410 -0.001135 -0.997301 +outer loop +vertex 16.350824 -7.084708 8.084374 +vertex 16.344336 -5.348505 8.082877 +vertex 17.137676 -5.346809 8.024479 +endloop +endfacet +facet normal -0.075030 -0.000396 -0.997181 +outer loop +vertex 16.350824 -7.084708 8.084374 +vertex 17.137676 -5.346809 8.024479 +vertex 17.139935 -7.083379 8.025000 +endloop +endfacet +facet normal -0.019902 -0.000326 -0.999802 +outer loop +vertex 17.139935 -7.083379 8.025000 +vertex 17.137676 -5.346809 8.024479 +vertex 18.213661 -5.345628 8.003059 +endloop +endfacet +facet normal -0.020363 -0.000041 -0.999793 +outer loop +vertex 17.139935 -7.083379 8.025000 +vertex 18.213661 -5.345628 8.003059 +vertex 18.213943 -7.082455 8.003125 +endloop +endfacet +facet normal -0.232285 0.000000 -0.972648 +outer loop +vertex 15.866667 -10.481091 8.200000 +vertex 15.866667 -8.849014 8.200000 +vertex 16.350824 -8.847996 8.084374 +endloop +endfacet +facet normal -0.232287 0.000000 -0.972647 +outer loop +vertex 15.866667 -10.481091 8.200000 +vertex 16.350824 -8.847996 8.084374 +vertex 16.350824 -10.480552 8.084374 +endloop +endfacet +facet normal -0.075030 0.000000 -0.997181 +outer loop +vertex 16.350824 -10.480552 8.084374 +vertex 16.350824 -8.847996 8.084374 +vertex 17.139935 -8.847120 8.025000 +endloop +endfacet +facet normal -0.075030 0.000000 -0.997181 +outer loop +vertex 16.350824 -10.480552 8.084374 +vertex 17.139935 -8.847120 8.025000 +vertex 17.139935 -10.480088 8.025000 +endloop +endfacet +facet normal -0.020362 0.000000 -0.999793 +outer loop +vertex 17.139935 -10.480088 8.025000 +vertex 17.139935 -8.847120 8.025000 +vertex 18.213943 -8.846513 8.003125 +endloop +endfacet +facet normal -0.020364 0.000000 -0.999793 +outer loop +vertex 17.139935 -10.480088 8.025000 +vertex 18.213943 -8.846513 8.003125 +vertex 18.213943 -10.479768 8.003125 +endloop +endfacet +facet normal -0.002334 0.000000 -0.999997 +outer loop +vertex 18.213943 -10.479768 8.003125 +vertex 18.213943 -8.846513 8.003125 +vertex 19.552803 -8.846289 8.000000 +endloop +endfacet +facet normal -0.002334 0.000000 -0.999997 +outer loop +vertex 18.213943 -10.479768 8.003125 +vertex 19.552803 -8.846289 8.000000 +vertex 19.552803 -10.479649 8.000000 +endloop +endfacet +facet normal -0.002335 0.000000 -0.999997 +outer loop +vertex 18.213943 -8.846513 8.003125 +vertex 18.213943 -7.082455 8.003125 +vertex 19.552803 -7.082114 8.000000 +endloop +endfacet +facet normal -0.002334 0.000000 -0.999997 +outer loop +vertex 18.213943 -8.846513 8.003125 +vertex 19.552803 -7.082114 8.000000 +vertex 19.552803 -8.846289 8.000000 +endloop +endfacet +facet normal -0.002284 -0.000038 -0.999997 +outer loop +vertex 18.213943 -7.082455 8.003125 +vertex 18.213661 -5.345628 8.003059 +vertex 19.552801 -5.345193 8.000000 +endloop +endfacet +facet normal -0.002333 0.000000 -0.999997 +outer loop +vertex 18.213943 -7.082455 8.003125 +vertex 19.552801 -5.345193 8.000000 +vertex 19.552803 -7.082114 8.000000 +endloop +endfacet +facet normal -0.001942 -0.000296 -0.999998 +outer loop +vertex 18.213661 -5.345628 8.003059 +vertex 18.211685 -3.794066 8.002604 +vertex 19.552803 -3.793593 8.000000 +endloop +endfacet +facet normal -0.002284 0.000000 -0.999997 +outer loop +vertex 18.213661 -5.345628 8.003059 +vertex 19.552803 -3.793593 8.000000 +vertex 19.552801 -5.345193 8.000000 +endloop +endfacet +facet normal -0.016721 -0.002520 -0.999857 +outer loop +vertex 17.137676 -5.346809 8.024479 +vertex 17.121878 -3.795351 8.020833 +vertex 18.211685 -3.794066 8.002604 +endloop +endfacet +facet normal -0.019902 -0.000319 -0.999802 +outer loop +vertex 17.137676 -5.346809 8.024479 +vertex 18.211685 -3.794066 8.002604 +vertex 18.213661 -5.345628 8.003059 +endloop +endfacet +facet normal -0.060126 -0.009772 -0.998143 +outer loop +vertex 16.344336 -5.348505 8.082877 +vertex 16.292145 -3.797194 8.070833 +vertex 17.121878 -3.795351 8.020833 +endloop +endfacet +facet normal -0.073407 -0.003091 -0.997297 +outer loop +vertex 16.344336 -5.348505 8.082877 +vertex 17.121878 -3.795351 8.020833 +vertex 17.137676 -5.346809 8.024479 +endloop +endfacet +facet normal -0.198281 -0.024701 -0.979834 +outer loop +vertex 15.857639 -5.350487 8.197917 +vertex 15.767362 -3.799347 8.177083 +vertex 16.292145 -3.797194 8.070833 +endloop +endfacet +facet normal -0.229944 -0.015290 -0.973084 +outer loop +vertex 15.857639 -5.350487 8.197917 +vertex 16.292145 -3.797194 8.070833 +vertex 16.344336 -5.348505 8.082877 +endloop +endfacet +facet normal -0.230020 -0.002364 -0.973183 +outer loop +vertex 15.866667 -7.086260 8.200000 +vertex 15.857639 -5.350487 8.197917 +vertex 16.344336 -5.348505 8.082877 +endloop +endfacet +facet normal -0.232282 -0.001707 -0.972647 +outer loop +vertex 15.866667 -7.086260 8.200000 +vertex 16.344336 -5.348505 8.082877 +vertex 16.350824 -7.084708 8.084374 +endloop +endfacet +facet normal -0.232286 0.000000 -0.972647 +outer loop +vertex 15.866667 -8.849014 8.200000 +vertex 15.866667 -7.086260 8.200000 +vertex 16.350824 -7.084708 8.084374 +endloop +endfacet +facet normal -0.232285 0.000000 -0.972648 +outer loop +vertex 15.866667 -8.849014 8.200000 +vertex 16.350824 -7.084708 8.084374 +vertex 16.350824 -8.847996 8.084374 +endloop +endfacet +facet normal -0.245487 0.000000 0.969400 +outer loop +vertex 17.054993 -8.853159 9.365105 +vertex 17.735767 -8.853391 9.537500 +vertex 17.735767 -7.092913 9.537500 +endloop +endfacet +facet normal -0.245485 -0.000000 0.969400 +outer loop +vertex 17.054993 -8.853159 9.365105 +vertex 17.735767 -7.092913 9.537500 +vertex 17.054991 -7.092562 9.365105 +endloop +endfacet +facet normal -0.245484 0.000000 0.969401 +outer loop +vertex 17.054991 -7.092562 9.365105 +vertex 17.735767 -7.092913 9.537500 +vertex 17.735767 -5.358985 9.537500 +endloop +endfacet +facet normal -0.245487 0.000000 0.969400 +outer loop +vertex 17.054991 -7.092562 9.365105 +vertex 17.735767 -5.358985 9.537500 +vertex 17.054993 -5.358536 9.365105 +endloop +endfacet +facet normal -0.088574 0.000000 0.996070 +outer loop +vertex 17.735767 -8.853391 9.537500 +vertex 18.620193 -8.853397 9.616146 +vertex 18.620193 -7.092926 9.616146 +endloop +endfacet +facet normal -0.088573 0.000000 0.996070 +outer loop +vertex 17.735767 -8.853391 9.537500 +vertex 18.620193 -7.092926 9.616146 +vertex 17.735767 -7.092913 9.537500 +endloop +endfacet +facet normal -0.088572 0.000000 0.996070 +outer loop +vertex 17.735767 -7.092913 9.537500 +vertex 18.620193 -7.092926 9.616146 +vertex 18.620193 -5.359001 9.616146 +endloop +endfacet +facet normal -0.088573 0.000000 0.996070 +outer loop +vertex 17.735767 -7.092913 9.537500 +vertex 18.620193 -5.359001 9.616146 +vertex 17.735767 -5.358985 9.537500 +endloop +endfacet +facet normal -0.395448 0.000000 0.918488 +outer loop +vertex 16.516666 -10.483034 9.133333 +vertex 17.054993 -10.483283 9.365105 +vertex 17.054993 -8.853159 9.365105 +endloop +endfacet +facet normal -0.395446 0.000000 0.918489 +outer loop +vertex 16.516666 -10.483034 9.133333 +vertex 17.054993 -8.853159 9.365105 +vertex 16.516666 -8.852689 9.133333 +endloop +endfacet +facet normal -0.395445 -0.000001 0.918489 +outer loop +vertex 16.516666 -8.852689 9.133333 +vertex 17.054993 -8.853159 9.365105 +vertex 17.054991 -7.092562 9.365105 +endloop +endfacet +facet normal -0.395448 0.000000 0.918488 +outer loop +vertex 16.516666 -8.852689 9.133333 +vertex 17.054991 -7.092562 9.365105 +vertex 16.516666 -7.091847 9.133333 +endloop +endfacet +facet normal -0.395448 0.000001 0.918488 +outer loop +vertex 16.516666 -7.091847 9.133333 +vertex 17.054991 -7.092562 9.365105 +vertex 17.054993 -5.358536 9.365105 +endloop +endfacet +facet normal -0.395448 0.000000 0.918488 +outer loop +vertex 16.516666 -7.091847 9.133333 +vertex 17.054993 -5.358536 9.365105 +vertex 16.516666 -5.357624 9.133333 +endloop +endfacet +facet normal -0.395446 -0.000001 0.918489 +outer loop +vertex 16.516666 -5.357624 9.133333 +vertex 17.054993 -5.358536 9.365105 +vertex 17.054991 -3.808129 9.365105 +endloop +endfacet +facet normal -0.395449 0.000000 0.918488 +outer loop +vertex 16.516666 -5.357624 9.133333 +vertex 17.054991 -3.808129 9.365105 +vertex 16.516666 -3.807135 9.133333 +endloop +endfacet +facet normal -0.245486 0.000000 0.969400 +outer loop +vertex 17.054993 -5.358536 9.365105 +vertex 17.735767 -5.358985 9.537500 +vertex 17.735767 -3.808617 9.537500 +endloop +endfacet +facet normal -0.245485 -0.000000 0.969400 +outer loop +vertex 17.054993 -5.358536 9.365105 +vertex 17.735767 -3.808617 9.537500 +vertex 17.054991 -3.808129 9.365105 +endloop +endfacet +facet normal -0.088573 0.000000 0.996070 +outer loop +vertex 17.735767 -5.358985 9.537500 +vertex 18.620193 -5.359001 9.616146 +vertex 18.620193 -3.808635 9.616146 +endloop +endfacet +facet normal -0.088573 0.000000 0.996070 +outer loop +vertex 17.735767 -5.358985 9.537500 +vertex 18.620193 -3.808635 9.616146 +vertex 17.735767 -3.808617 9.537500 +endloop +endfacet +facet normal 0.043013 0.000000 0.999075 +outer loop +vertex 18.620193 -5.359001 9.616146 +vertex 19.769468 -5.358619 9.566667 +vertex 19.769468 -3.808219 9.566667 +endloop +endfacet +facet normal 0.043013 0.000000 0.999075 +outer loop +vertex 18.620193 -5.359001 9.616146 +vertex 19.769468 -3.808219 9.566667 +vertex 18.620193 -3.808635 9.616146 +endloop +endfacet +facet normal 0.043012 0.000000 0.999075 +outer loop +vertex 18.620193 -7.092926 9.616146 +vertex 19.769468 -7.092627 9.566667 +vertex 19.769468 -5.358619 9.566667 +endloop +endfacet +facet normal 0.043014 0.000000 0.999075 +outer loop +vertex 18.620193 -7.092926 9.616146 +vertex 19.769468 -5.358619 9.566667 +vertex 18.620193 -5.359001 9.616146 +endloop +endfacet +facet normal 0.043013 0.000000 0.999075 +outer loop +vertex 18.620193 -8.853397 9.616146 +vertex 19.769468 -8.853203 9.566667 +vertex 19.769468 -7.092627 9.566667 +endloop +endfacet +facet normal 0.043014 0.000000 0.999074 +outer loop +vertex 18.620193 -8.853397 9.616146 +vertex 19.769468 -7.092627 9.566667 +vertex 18.620193 -7.092926 9.616146 +endloop +endfacet +facet normal 0.043013 0.000000 0.999074 +outer loop +vertex 18.620193 -10.483410 9.616146 +vertex 19.769468 -10.483306 9.566667 +vertex 19.769468 -8.853203 9.566667 +endloop +endfacet +facet normal 0.043014 0.000000 0.999074 +outer loop +vertex 18.620193 -10.483410 9.616146 +vertex 19.769468 -8.853203 9.566667 +vertex 18.620193 -8.853397 9.616146 +endloop +endfacet +facet normal -0.088574 0.000000 0.996070 +outer loop +vertex 17.735767 -10.483404 9.537500 +vertex 18.620193 -10.483410 9.616146 +vertex 18.620193 -8.853397 9.616146 +endloop +endfacet +facet normal -0.088573 0.000000 0.996070 +outer loop +vertex 17.735767 -10.483404 9.537500 +vertex 18.620193 -8.853397 9.616146 +vertex 17.735767 -8.853391 9.537500 +endloop +endfacet +facet normal -0.245486 0.000000 0.969400 +outer loop +vertex 17.054993 -10.483283 9.365105 +vertex 17.735767 -10.483404 9.537500 +vertex 17.735767 -8.853391 9.537500 +endloop +endfacet +facet normal -0.245486 0.000000 0.969400 +outer loop +vertex 17.054993 -10.483283 9.365105 +vertex 17.735767 -8.853391 9.537500 +vertex 17.054993 -8.853159 9.365105 +endloop +endfacet +facet normal -0.242171 -0.840189 0.485218 +outer loop +vertex 16.905079 -14.500335 8.978137 +vertex 16.756197 -14.599973 8.731298 +vertex 17.455404 -14.771413 8.783410 +endloop +endfacet +facet normal -0.260777 -0.853498 0.451151 +outer loop +vertex 16.905079 -14.500335 8.978137 +vertex 17.455404 -14.771413 8.783410 +vertex 17.568832 -14.658748 9.062117 +endloop +endfacet +facet normal -0.071003 -0.914397 0.398542 +outer loop +vertex 17.568832 -14.658748 9.062117 +vertex 17.455404 -14.771413 8.783410 +vertex 18.419262 -14.834710 8.809905 +endloop +endfacet +facet normal -0.076539 -0.920191 0.383914 +outer loop +vertex 17.568832 -14.658748 9.062117 +vertex 18.419262 -14.834710 8.809905 +vertex 18.493919 -14.718086 9.104320 +endloop +endfacet +facet normal -0.205023 -0.929081 -0.307853 +outer loop +vertex 16.756197 -14.599973 8.731298 +vertex 16.664705 -14.500335 8.491524 +vertex 17.359531 -14.658748 8.506865 +endloop +endfacet +facet normal -0.204917 -0.929214 -0.307524 +outer loop +vertex 16.756197 -14.599973 8.731298 +vertex 17.359531 -14.658748 8.506865 +vertex 17.455404 -14.771413 8.783410 +endloop +endfacet +facet normal -0.052708 -0.931059 -0.361041 +outer loop +vertex 17.455404 -14.771413 8.783410 +vertex 17.359531 -14.658748 8.506865 +vertex 18.346798 -14.718087 8.515761 +endloop +endfacet +facet normal -0.051432 -0.932644 -0.357113 +outer loop +vertex 17.455404 -14.771413 8.783410 +vertex 18.346798 -14.718087 8.515761 +vertex 18.419262 -14.834710 8.809905 +endloop +endfacet +facet normal -0.414807 -0.381097 0.826257 +outer loop +vertex 16.679167 -14.062502 9.066667 +vertex 16.475306 -14.199250 8.901251 +vertex 16.905079 -14.500335 8.978137 +endloop +endfacet +facet normal -0.409180 -0.378964 0.830035 +outer loop +vertex 16.679167 -14.062502 9.066667 +vertex 16.905079 -14.500335 8.978137 +vertex 17.038143 -14.205942 9.178142 +endloop +endfacet +facet normal -0.221536 -0.477507 0.850241 +outer loop +vertex 17.038143 -14.205942 9.178142 +vertex 16.905079 -14.500335 8.978137 +vertex 17.568832 -14.658748 9.062117 +endloop +endfacet +facet normal -0.243370 -0.498430 0.832069 +outer loop +vertex 17.038143 -14.205942 9.178142 +vertex 17.568832 -14.658748 9.062117 +vertex 17.665802 -14.321471 9.292516 +endloop +endfacet +facet normal -0.073170 -0.548127 0.833189 +outer loop +vertex 17.665802 -14.321471 9.292516 +vertex 17.568832 -14.658748 9.062117 +vertex 18.493919 -14.718086 9.104320 +endloop +endfacet +facet normal -0.081027 -0.560320 0.824303 +outer loop +vertex 17.665802 -14.321471 9.292516 +vertex 18.493919 -14.718086 9.104320 +vertex 18.556152 -14.368310 9.348197 +endloop +endfacet +facet normal 0.019972 -0.574211 0.818464 +outer loop +vertex 18.556152 -14.368310 9.348197 +vertex 18.493919 -14.718086 9.104320 +vertex 19.700632 -14.726565 9.068924 +endloop +endfacet +facet normal 0.026814 -0.559897 0.828128 +outer loop +vertex 18.556152 -14.368310 9.348197 +vertex 19.700632 -14.726565 9.068924 +vertex 19.733356 -14.375003 9.305555 +endloop +endfacet +facet normal 0.001105 -0.929810 0.368039 +outer loop +vertex 18.493919 -14.718086 9.104320 +vertex 18.419262 -14.834710 8.809905 +vertex 19.661137 -14.843751 8.783334 +endloop +endfacet +facet normal 0.004617 -0.925364 0.379051 +outer loop +vertex 18.493919 -14.718086 9.104320 +vertex 19.661137 -14.843751 8.783334 +vertex 19.700632 -14.726565 9.068924 +endloop +endfacet +facet normal -0.011363 -0.930494 -0.366131 +outer loop +vertex 18.419262 -14.834710 8.809905 +vertex 18.346798 -14.718087 8.515761 +vertex 19.621639 -14.726565 8.497743 +endloop +endfacet +facet normal -0.014824 -0.925763 -0.377813 +outer loop +vertex 18.419262 -14.834710 8.809905 +vertex 19.621639 -14.726565 8.497743 +vertex 19.661137 -14.843751 8.783334 +endloop +endfacet +facet normal -0.009894 -0.572629 -0.819755 +outer loop +vertex 18.346798 -14.718087 8.515761 +vertex 18.286760 -14.368312 8.272155 +vertex 19.588913 -14.375001 8.261111 +endloop +endfacet +facet normal -0.015434 -0.559302 -0.828820 +outer loop +vertex 18.346798 -14.718087 8.515761 +vertex 19.588913 -14.375001 8.261111 +vertex 19.621639 -14.726565 8.497743 +endloop +endfacet +facet normal -0.031604 -0.565255 -0.824310 +outer loop +vertex 17.359531 -14.658748 8.506865 +vertex 17.280115 -14.321469 8.278626 +vertex 18.286760 -14.368312 8.272155 +endloop +endfacet +facet normal -0.027153 -0.574440 -0.818096 +outer loop +vertex 17.359531 -14.658748 8.506865 +vertex 18.286760 -14.368312 8.272155 +vertex 18.346798 -14.718087 8.515761 +endloop +endfacet +facet normal -0.120109 -0.561358 -0.818811 +outer loop +vertex 16.664705 -14.500335 8.491524 +vertex 16.597235 -14.205941 8.299591 +vertex 17.280115 -14.321469 8.278626 +endloop +endfacet +facet normal -0.113200 -0.574987 -0.810294 +outer loop +vertex 16.664705 -14.500335 8.491524 +vertex 17.280115 -14.321469 8.278626 +vertex 17.359531 -14.658748 8.506865 +endloop +endfacet +facet normal -0.324005 -0.627125 -0.708333 +outer loop +vertex 16.212664 -14.199250 8.469577 +vertex 16.245834 -14.062501 8.333333 +vertex 16.597235 -14.205941 8.299591 +endloop +endfacet +facet normal -0.341250 -0.566992 -0.749712 +outer loop +vertex 16.212664 -14.199250 8.469577 +vertex 16.597235 -14.205941 8.299591 +vertex 16.664705 -14.500335 8.491524 +endloop +endfacet +facet normal -0.549505 -0.831193 -0.084632 +outer loop +vertex 16.284452 -14.267941 8.678086 +vertex 16.212664 -14.199250 8.469577 +vertex 16.664705 -14.500335 8.491524 +endloop +endfacet +facet normal -0.561493 -0.817890 -0.125621 +outer loop +vertex 16.284452 -14.267941 8.678086 +vertex 16.664705 -14.500335 8.491524 +vertex 16.756197 -14.599973 8.731298 +endloop +endfacet +facet normal -0.499132 -0.610628 0.614818 +outer loop +vertex 16.475306 -14.199250 8.901251 +vertex 16.284452 -14.267941 8.678086 +vertex 16.756197 -14.599973 8.731298 +endloop +endfacet +facet normal -0.536386 -0.619208 0.573473 +outer loop +vertex 16.475306 -14.199250 8.901251 +vertex 16.756197 -14.599973 8.731298 +vertex 16.905079 -14.500335 8.978137 +endloop +endfacet +facet normal 1.000000 -0.000008 -0.000007 +outer loop +vertex 55.000004 -0.141782 3.373485 +vertex 55.000004 0.281395 2.732860 +vertex 55.000008 0.484375 3.003500 +endloop +endfacet +facet normal 1.000000 0.000000 -0.000003 +outer loop +vertex 55.000004 -0.141782 3.373485 +vertex 55.000008 0.484375 3.003500 +vertex 55.000008 0.281395 3.515847 +endloop +endfacet +facet normal 1.000000 0.000008 -0.000006 +outer loop +vertex 55.000004 0.761863 2.168624 +vertex 55.000008 0.868634 2.732860 +vertex 55.000008 0.484375 3.003500 +endloop +endfacet +facet normal 1.000000 -0.000023 -0.000007 +outer loop +vertex 55.000004 0.761863 2.168624 +vertex 55.000008 0.484375 3.003500 +vertex 55.000004 0.281395 2.732860 +endloop +endfacet +facet normal 1.000000 0.000000 0.000000 +outer loop +vertex 55.000008 0.767072 3.380429 +vertex 55.000008 0.281395 3.515847 +vertex 55.000008 0.484375 3.003500 +endloop +endfacet +facet normal 1.000000 -0.000009 0.000000 +outer loop +vertex 55.000008 0.767072 3.380429 +vertex 55.000008 0.484375 3.003500 +vertex 55.000008 0.868634 2.732860 +endloop +endfacet +facet normal 1.000000 0.000000 0.000005 +outer loop +vertex 55.000008 -1.000000 3.691000 +vertex 55.000008 -0.500000 3.024334 +vertex 55.000004 -0.141782 3.373485 +endloop +endfacet +facet normal 1.000000 0.000000 -0.000004 +outer loop +vertex 55.000008 -1.000000 3.691000 +vertex 55.000004 -0.141782 3.373485 +vertex 55.000008 -0.546875 4.066000 +endloop +endfacet +facet normal 1.000000 0.000010 -0.000003 +outer loop +vertex 55.000008 -0.500000 3.024334 +vertex 55.000004 0.000000 2.357667 +vertex 55.000004 0.281395 2.732860 +endloop +endfacet +facet normal 1.000000 0.000020 0.000004 +outer loop +vertex 55.000008 -0.500000 3.024334 +vertex 55.000004 0.281395 2.732860 +vertex 55.000004 -0.141782 3.373485 +endloop +endfacet +facet normal 1.000000 0.000011 -0.000009 +outer loop +vertex 55.000008 -0.546875 4.066000 +vertex 55.000004 -0.141782 3.373485 +vertex 55.000008 0.281395 3.515847 +endloop +endfacet +facet normal 1.000000 0.000000 0.000000 +outer loop +vertex 55.000008 -0.546875 4.066000 +vertex 55.000008 0.281395 3.515847 +vertex 55.000008 0.000000 4.191000 +endloop +endfacet +facet normal 1.000000 0.000008 0.000002 +outer loop +vertex 55.000008 1.000000 1.024334 +vertex 55.000008 1.281250 1.628500 +vertex 55.000004 0.761863 2.168624 +endloop +endfacet +facet normal 1.000000 -0.000009 0.000005 +outer loop +vertex 55.000008 1.000000 1.024334 +vertex 55.000004 0.761863 2.168624 +vertex 55.000008 0.500000 1.691000 +endloop +endfacet +facet normal 1.000000 0.000000 0.000000 +outer loop +vertex 55.000008 1.281250 1.628500 +vertex 55.000008 1.375000 2.357667 +vertex 55.000008 0.868634 2.732860 +endloop +endfacet +facet normal 1.000000 -0.000011 -0.000004 +outer loop +vertex 55.000008 1.281250 1.628500 +vertex 55.000008 0.868634 2.732860 +vertex 55.000004 0.761863 2.168624 +endloop +endfacet +facet normal 1.000000 0.000000 0.000005 +outer loop +vertex 55.000008 0.500000 1.691000 +vertex 55.000004 0.761863 2.168624 +vertex 55.000004 0.281395 2.732860 +endloop +endfacet +facet normal 1.000000 0.000000 0.000003 +outer loop +vertex 55.000008 0.500000 1.691000 +vertex 55.000004 0.281395 2.732860 +vertex 55.000004 0.000000 2.357667 +endloop +endfacet +facet normal 1.000000 0.000000 -0.000007 +outer loop +vertex 55.000015 1.000000 3.691000 +vertex 55.000008 0.546875 4.066000 +vertex 55.000008 0.767072 3.380429 +endloop +endfacet +facet normal 1.000000 0.000000 -0.000017 +outer loop +vertex 55.000015 1.000000 3.691000 +vertex 55.000008 0.767072 3.380429 +vertex 55.000008 1.281250 3.086834 +endloop +endfacet +facet normal 1.000000 0.000000 0.000000 +outer loop +vertex 55.000008 0.546875 4.066000 +vertex 55.000008 0.000000 4.191000 +vertex 55.000008 0.281395 3.515847 +endloop +endfacet +facet normal 1.000000 -0.000003 0.000000 +outer loop +vertex 55.000008 0.546875 4.066000 +vertex 55.000008 0.281395 3.515847 +vertex 55.000008 0.767072 3.380429 +endloop +endfacet +facet normal 1.000000 0.000000 0.000000 +outer loop +vertex 55.000008 1.281250 3.086834 +vertex 55.000008 0.767072 3.380429 +vertex 55.000008 0.868634 2.732860 +endloop +endfacet +facet normal 1.000000 -0.000011 0.000000 +outer loop +vertex 55.000008 1.281250 3.086834 +vertex 55.000008 0.868634 2.732860 +vertex 55.000008 1.375000 2.357667 +endloop +endfacet +facet normal -0.185267 -0.973818 0.131736 +outer loop +vertex 1.539941 -2.191099 4.267486 +vertex 1.943580 -2.370726 3.507300 +vertex 2.261111 -2.373071 3.936525 +endloop +endfacet +facet normal -0.161360 -0.970018 0.181739 +outer loop +vertex 1.539941 -2.191099 4.267486 +vertex 2.261111 -2.373071 3.936525 +vertex 2.133636 -2.233862 4.566360 +endloop +endfacet +facet normal -0.052033 -0.998532 -0.015070 +outer loop +vertex 2.649281 -2.376406 2.817216 +vertex 2.909109 -2.402924 3.677179 +vertex 2.261111 -2.373071 3.936525 +endloop +endfacet +facet normal -0.007770 -0.999970 0.000285 +outer loop +vertex 2.649281 -2.376406 2.817216 +vertex 2.261111 -2.373071 3.936525 +vertex 1.943580 -2.370726 3.507300 +endloop +endfacet +facet normal -0.036345 -0.977314 0.208654 +outer loop +vertex 3.071936 -2.259743 4.608581 +vertex 2.133636 -2.233862 4.566360 +vertex 2.261111 -2.373071 3.936525 +endloop +endfacet +facet normal 0.014282 -0.988661 0.149487 +outer loop +vertex 3.071936 -2.259743 4.608581 +vertex 2.261111 -2.373071 3.936525 +vertex 2.909109 -2.402924 3.677179 +endloop +endfacet +facet normal -0.516100 -0.776904 0.360639 +outer loop +vertex 0.840000 -1.566667 4.611000 +vertex 1.143440 -2.154511 3.778884 +vertex 1.539941 -2.191099 4.267486 +endloop +endfacet +facet normal -0.524418 -0.778073 0.345815 +outer loop +vertex 0.840000 -1.566667 4.611000 +vertex 1.539941 -2.191099 4.267486 +vertex 1.394066 -1.776039 4.980145 +endloop +endfacet +facet normal -0.230695 -0.968710 0.091543 +outer loop +vertex 1.143440 -2.154511 3.778884 +vertex 1.609877 -2.343493 2.954529 +vertex 1.943580 -2.370726 3.507300 +endloop +endfacet +facet normal -0.224445 -0.968300 0.109629 +outer loop +vertex 1.143440 -2.154511 3.778884 +vertex 1.943580 -2.370726 3.507300 +vertex 1.539941 -2.191099 4.267486 +endloop +endfacet +facet normal -0.282420 -0.852964 0.438966 +outer loop +vertex 1.394066 -1.776039 4.980145 +vertex 1.539941 -2.191099 4.267486 +vertex 2.133636 -2.233862 4.566360 +endloop +endfacet +facet normal -0.282277 -0.852910 0.439164 +outer loop +vertex 1.394066 -1.776039 4.980145 +vertex 2.133636 -2.233862 4.566360 +vertex 2.083642 -1.867799 5.245167 +endloop +endfacet +facet normal -0.129097 -0.929282 -0.346077 +outer loop +vertex 3.212122 -1.828283 1.135445 +vertex 3.804913 -2.318981 2.231933 +vertex 2.649281 -2.376406 2.817216 +endloop +endfacet +facet normal 0.197745 -0.949578 -0.243307 +outer loop +vertex 3.212122 -1.828283 1.135445 +vertex 2.649281 -2.376406 2.817216 +vertex 2.251229 -2.276334 2.103142 +endloop +endfacet +facet normal -0.053123 -0.994461 -0.090688 +outer loop +vertex 3.804913 -2.318981 2.231933 +vertex 4.081018 -2.428884 3.275362 +vertex 2.909109 -2.402924 3.677179 +endloop +endfacet +facet normal 0.029515 -0.998775 -0.039717 +outer loop +vertex 3.804913 -2.318981 2.231933 +vertex 2.909109 -2.402924 3.677179 +vertex 2.649281 -2.376406 2.817216 +endloop +endfacet +facet normal -0.093136 -0.991838 -0.087081 +outer loop +vertex 2.251229 -2.276334 2.103142 +vertex 2.649281 -2.376406 2.817216 +vertex 1.943580 -2.370726 3.507300 +endloop +endfacet +facet normal 0.021777 -0.997820 -0.062305 +outer loop +vertex 2.251229 -2.276334 2.103142 +vertex 1.943580 -2.370726 3.507300 +vertex 1.609877 -2.343493 2.954529 +endloop +endfacet +facet normal -0.041653 -0.900109 0.433670 +outer loop +vertex 5.333334 -1.828283 5.721304 +vertex 3.171496 -1.861331 5.445072 +vertex 3.071936 -2.259743 4.608581 +endloop +endfacet +facet normal 0.014831 -0.942051 0.335141 +outer loop +vertex 5.333334 -1.828283 5.721304 +vertex 3.071936 -2.259743 4.608581 +vertex 4.454588 -2.322237 4.371733 +endloop +endfacet +facet normal -0.080858 -0.879766 0.468481 +outer loop +vertex 3.171496 -1.861331 5.445072 +vertex 2.083642 -1.867799 5.245167 +vertex 2.133636 -2.233862 4.566360 +endloop +endfacet +facet normal -0.044344 -0.899879 0.433880 +outer loop +vertex 3.171496 -1.861331 5.445072 +vertex 2.133636 -2.233862 4.566360 +vertex 3.071936 -2.259743 4.608581 +endloop +endfacet +facet normal -0.018092 -0.987748 0.155005 +outer loop +vertex 4.454588 -2.322237 4.371733 +vertex 3.071936 -2.259743 4.608581 +vertex 2.909109 -2.402924 3.677179 +endloop +endfacet +facet normal 0.009985 -0.995575 0.093441 +outer loop +vertex 4.454588 -2.322237 4.371733 +vertex 2.909109 -2.402924 3.677179 +vertex 4.081018 -2.428884 3.275362 +endloop +endfacet +facet normal -0.993309 0.019026 0.113909 +outer loop +vertex 0.194632 0.223443 3.953737 +vertex 0.108384 -0.402336 3.306158 +vertex 0.138021 -0.720486 3.617737 +endloop +endfacet +facet normal -0.991586 0.013646 0.128731 +outer loop +vertex 0.194632 0.223443 3.953737 +vertex 0.138021 -0.720486 3.617737 +vertex 0.211878 -0.430331 4.155883 +endloop +endfacet +facet normal -0.991095 -0.132667 0.011403 +outer loop +vertex 0.171079 -1.043817 2.729306 +vertex 0.204478 -1.241022 3.337755 +vertex 0.138021 -0.720486 3.617737 +endloop +endfacet +facet normal -0.995464 -0.095109 -0.002428 +outer loop +vertex 0.171079 -1.043817 2.729306 +vertex 0.138021 -0.720486 3.617737 +vertex 0.108384 -0.402336 3.306158 +endloop +endfacet +facet normal -0.959496 -0.171004 0.223886 +outer loop +vertex 0.314128 -1.133957 4.056663 +vertex 0.211878 -0.430331 4.155883 +vertex 0.138021 -0.720486 3.617737 +endloop +endfacet +facet normal -0.959260 -0.218682 0.178878 +outer loop +vertex 0.314128 -1.133957 4.056663 +vertex 0.138021 -0.720486 3.617737 +vertex 0.204478 -1.241022 3.337755 +endloop +endfacet +facet normal -0.934846 0.235015 0.266140 +outer loop +vertex 0.560000 1.566667 4.051001 +vertex 0.208924 0.785330 3.507765 +vertex 0.194632 0.223443 3.953737 +endloop +endfacet +facet normal -0.956068 0.248838 0.154963 +outer loop +vertex 0.560000 1.566667 4.051001 +vertex 0.194632 0.223443 3.953737 +vertex 0.439913 0.780122 4.573130 +endloop +endfacet +facet normal -0.994651 0.071555 0.074493 +outer loop +vertex 0.208924 0.785330 3.507765 +vertex 0.106944 0.041667 2.860445 +vertex 0.108384 -0.402336 3.306158 +endloop +endfacet +facet normal -0.995389 0.073877 0.061180 +outer loop +vertex 0.208924 0.785330 3.507765 +vertex 0.108384 -0.402336 3.306158 +vertex 0.194632 0.223443 3.953737 +endloop +endfacet +facet normal -0.947655 0.071239 0.311248 +outer loop +vertex 0.439913 0.780122 4.573130 +vertex 0.194632 0.223443 3.953737 +vertex 0.211878 -0.430331 4.155883 +endloop +endfacet +facet normal -0.959548 0.088655 0.267224 +outer loop +vertex 0.439913 0.780122 4.573130 +vertex 0.211878 -0.430331 4.155883 +vertex 0.423611 0.000000 4.773408 +endloop +endfacet +facet normal -0.963034 -0.214320 -0.163196 +outer loop +vertex 0.388889 -1.203704 1.653963 +vertex 0.380729 -1.598091 2.220051 +vertex 0.171079 -1.043817 2.729306 +endloop +endfacet +facet normal -0.963975 -0.209317 -0.164130 +outer loop +vertex 0.388889 -1.203704 1.653963 +vertex 0.171079 -1.043817 2.729306 +vertex 0.171354 -0.640046 2.212759 +endloop +endfacet +facet normal -0.948706 -0.312201 -0.049864 +outer loop +vertex 0.380729 -1.598091 2.220051 +vertex 0.406945 -1.789352 2.918778 +vertex 0.204478 -1.241022 3.337755 +endloop +endfacet +facet normal -0.948377 -0.313261 -0.049474 +outer loop +vertex 0.380729 -1.598091 2.220051 +vertex 0.204478 -1.241022 3.337755 +vertex 0.171079 -1.043817 2.729306 +endloop +endfacet +facet normal -0.997359 -0.056961 -0.045056 +outer loop +vertex 0.171354 -0.640046 2.212759 +vertex 0.171079 -1.043817 2.729306 +vertex 0.108384 -0.402336 3.306158 +endloop +endfacet +facet normal -0.997662 -0.050000 -0.046586 +outer loop +vertex 0.171354 -0.640046 2.212759 +vertex 0.108384 -0.402336 3.306158 +vertex 0.106944 0.041667 2.860445 +endloop +endfacet +facet normal -0.800291 -0.397577 0.448850 +outer loop +vertex 0.840000 -1.566667 4.611000 +vertex 0.537691 -0.780122 4.768686 +vertex 0.314128 -1.133957 4.056663 +endloop +endfacet +facet normal -0.791815 -0.482389 0.374606 +outer loop +vertex 0.840000 -1.566667 4.611000 +vertex 0.314128 -1.133957 4.056663 +vertex 0.535608 -1.766233 3.710613 +endloop +endfacet +facet normal -0.904731 -0.134748 0.404110 +outer loop +vertex 0.537691 -0.780122 4.768686 +vertex 0.423611 0.000000 4.773408 +vertex 0.211878 -0.430331 4.155883 +endloop +endfacet +facet normal -0.907576 -0.185039 0.376917 +outer loop +vertex 0.537691 -0.780122 4.768686 +vertex 0.211878 -0.430331 4.155883 +vertex 0.314128 -1.133957 4.056663 +endloop +endfacet +facet normal -0.886417 -0.418619 0.197544 +outer loop +vertex 0.535608 -1.766233 3.710613 +vertex 0.314128 -1.133957 4.056663 +vertex 0.204478 -1.241022 3.337755 +endloop +endfacet +facet normal -0.881790 -0.445001 0.156272 +outer loop +vertex 0.535608 -1.766233 3.710613 +vertex 0.204478 -1.241022 3.337755 +vertex 0.406945 -1.789352 2.918778 +endloop +endfacet +facet normal 0.181319 0.966822 0.179941 +outer loop +vertex 52.671993 1.719298 3.280712 +vertex 51.794785 1.992473 2.696870 +vertex 51.186733 2.056906 2.963377 +endloop +endfacet +facet normal 0.157565 0.949203 0.272374 +outer loop +vertex 52.671993 1.719298 3.280712 +vertex 51.186733 2.056906 2.963377 +vertex 51.447769 1.881940 3.422114 +endloop +endfacet +facet normal 0.115521 0.993281 0.006967 +outer loop +vertex 50.440521 2.149413 2.147905 +vertex 49.957466 2.201473 2.735353 +vertex 51.186733 2.056906 2.963377 +endloop +endfacet +facet normal 0.110433 0.993815 0.011685 +outer loop +vertex 50.440521 2.149413 2.147905 +vertex 51.186733 2.056906 2.963377 +vertex 51.794785 1.992473 2.696870 +endloop +endfacet +facet normal 0.088219 0.946386 0.310758 +outer loop +vertex 49.641869 2.055952 3.404844 +vertex 51.447769 1.881940 3.422114 +vertex 51.186733 2.056906 2.963377 +endloop +endfacet +facet normal 0.068771 0.967648 0.242749 +outer loop +vertex 49.641869 2.055952 3.404844 +vertex 51.186733 2.056906 2.963377 +vertex 49.957466 2.201473 2.735353 +endloop +endfacet +facet normal 0.231328 0.923403 0.306290 +outer loop +vertex 55.000015 1.000000 3.691000 +vertex 53.526051 1.599617 2.996491 +vertex 52.671993 1.719298 3.280712 +endloop +endfacet +facet normal 0.150699 0.810556 0.565941 +outer loop +vertex 55.000015 1.000000 3.691000 +vertex 52.671993 1.719298 3.280712 +vertex 53.066593 1.283501 3.799797 +endloop +endfacet +facet normal 0.208283 0.975178 0.075135 +outer loop +vertex 53.526051 1.599617 2.996491 +vertex 52.409729 1.888375 2.343264 +vertex 51.794785 1.992473 2.696870 +endloop +endfacet +facet normal 0.190815 0.967490 0.165988 +outer loop +vertex 53.526051 1.599617 2.996491 +vertex 51.794785 1.992473 2.696870 +vertex 52.671993 1.719298 3.280712 +endloop +endfacet +facet normal 0.172183 0.814978 0.553322 +outer loop +vertex 53.066593 1.283501 3.799797 +vertex 52.671993 1.719298 3.280712 +vertex 51.447769 1.881940 3.422114 +endloop +endfacet +facet normal 0.154133 0.790788 0.592366 +outer loop +vertex 53.066593 1.283501 3.799797 +vertex 51.447769 1.881940 3.422114 +vertex 51.558132 1.499486 3.903964 +endloop +endfacet +facet normal 0.127358 0.916657 -0.378840 +outer loop +vertex 49.363640 1.792930 0.923323 +vertex 48.242996 2.261178 1.679576 +vertex 50.440521 2.149413 2.147905 +endloop +endfacet +facet normal 0.017056 0.955880 -0.293263 +outer loop +vertex 49.363640 1.792930 0.923323 +vertex 50.440521 2.149413 2.147905 +vertex 51.159924 1.990409 1.671474 +endloop +endfacet +facet normal 0.089429 0.991998 -0.089126 +outer loop +vertex 48.242996 2.261178 1.679576 +vertex 47.717857 2.373972 2.408079 +vertex 49.957466 2.201473 2.735353 +endloop +endfacet +facet normal 0.059195 0.997456 -0.039721 +outer loop +vertex 48.242996 2.261178 1.679576 +vertex 49.957466 2.201473 2.735353 +vertex 50.440521 2.149413 2.147905 +endloop +endfacet +facet normal 0.153223 0.983435 -0.096846 +outer loop +vertex 51.159924 1.990409 1.671474 +vertex 50.440521 2.149413 2.147905 +vertex 51.794785 1.992473 2.696870 +endloop +endfacet +facet normal 0.122667 0.989383 -0.077939 +outer loop +vertex 51.159924 1.990409 1.671474 +vertex 51.794785 1.992473 2.696870 +vertex 52.409729 1.888375 2.343264 +endloop +endfacet +facet normal 0.074646 0.818859 0.569120 +outer loop +vertex 45.262634 1.792930 4.357667 +vertex 49.445156 1.646948 4.019125 +vertex 49.641869 2.055952 3.404844 +endloop +endfacet +facet normal 0.042905 0.894888 0.444223 +outer loop +vertex 45.262634 1.792930 4.357667 +vertex 49.641869 2.055952 3.404844 +vertex 46.986958 2.274199 3.221608 +endloop +endfacet +facet normal 0.088201 0.789948 0.606797 +outer loop +vertex 49.445156 1.646948 4.019125 +vertex 51.558132 1.499486 3.903964 +vertex 51.447769 1.881940 3.422114 +endloop +endfacet +facet normal 0.073486 0.819108 0.568913 +outer loop +vertex 49.445156 1.646948 4.019125 +vertex 51.447769 1.881940 3.422114 +vertex 49.641869 2.055952 3.404844 +endloop +endfacet +facet normal 0.063046 0.968657 0.240268 +outer loop +vertex 46.986958 2.274199 3.221608 +vertex 49.641869 2.055952 3.404844 +vertex 49.957466 2.201473 2.735353 +endloop +endfacet +facet normal 0.051438 0.984619 0.166970 +outer loop +vertex 46.986958 2.274199 3.221608 +vertex 49.957466 2.201473 2.735353 +vertex 47.717857 2.373972 2.408079 +endloop +endfacet +facet normal 0.030800 -0.006309 -0.999506 +outer loop +vertex 2.637526 -0.290024 0.511322 +vertex 1.918631 0.381511 0.484930 +vertex 2.191551 0.712577 0.491251 +endloop +endfacet +facet normal -0.028449 -0.032655 -0.999062 +outer loop +vertex 2.637526 -0.290024 0.511322 +vertex 2.191551 0.712577 0.491251 +vertex 2.830451 0.411186 0.482909 +endloop +endfacet +facet normal -0.094545 0.195170 -0.976202 +outer loop +vertex 1.460494 1.042770 0.628068 +vertex 1.971341 1.252340 0.620492 +vertex 2.191551 0.712577 0.491251 +endloop +endfacet +facet normal -0.128002 0.124306 -0.983953 +outer loop +vertex 1.460494 1.042770 0.628068 +vertex 2.191551 0.712577 0.491251 +vertex 1.918631 0.381511 0.484930 +endloop +endfacet +facet normal 0.076297 0.188834 -0.979041 +outer loop +vertex 2.813697 1.169283 0.627823 +vertex 2.830451 0.411186 0.482909 +vertex 2.191551 0.712577 0.491251 +endloop +endfacet +facet normal 0.032619 0.245301 -0.968898 +outer loop +vertex 2.813697 1.169283 0.627823 +vertex 2.191551 0.712577 0.491251 +vertex 1.971341 1.252340 0.620492 +endloop +endfacet +facet normal 0.211938 -0.298412 -0.930609 +outer loop +vertex 3.212122 -1.828283 1.135445 +vertex 2.250708 -0.876450 0.611273 +vertex 2.637526 -0.290024 0.511322 +endloop +endfacet +facet normal -0.140373 -0.416817 -0.898086 +outer loop +vertex 3.212122 -1.828283 1.135445 +vertex 2.637526 -0.290024 0.511322 +vertex 3.794400 -0.906173 0.616465 +endloop +endfacet +facet normal 0.053562 -0.085780 -0.994873 +outer loop +vertex 2.250708 -0.876450 0.611273 +vertex 1.605710 -0.068030 0.506844 +vertex 1.918631 0.381511 0.484930 +endloop +endfacet +facet normal -0.075041 -0.119242 -0.990025 +outer loop +vertex 2.250708 -0.876450 0.611273 +vertex 1.918631 0.381511 0.484930 +vertex 2.637526 -0.290024 0.511322 +endloop +endfacet +facet normal 0.060239 -0.056955 -0.996558 +outer loop +vertex 3.794400 -0.906173 0.616465 +vertex 2.637526 -0.290024 0.511322 +vertex 2.830451 0.411186 0.482909 +endloop +endfacet +facet normal -0.039881 -0.129627 -0.990760 +outer loop +vertex 3.794400 -0.906173 0.616465 +vertex 2.830451 0.411186 0.482909 +vertex 3.996914 -0.050026 0.496299 +endloop +endfacet +facet normal -0.401257 0.315867 -0.859779 +outer loop +vertex 0.777778 1.203704 1.005815 +vertex 1.136574 1.600775 0.984242 +vertex 1.460494 1.042770 0.628068 +endloop +endfacet +facet normal -0.403919 0.308189 -0.861318 +outer loop +vertex 0.777778 1.203704 1.005815 +vertex 1.460494 1.042770 0.628068 +vertex 1.126061 0.636751 0.639624 +endloop +endfacet +facet normal -0.190824 0.452324 -0.871200 +outer loop +vertex 1.136574 1.600775 0.984242 +vertex 1.689815 1.810828 0.972122 +vertex 1.971341 1.252340 0.620492 +endloop +endfacet +facet normal -0.195352 0.444584 -0.874175 +outer loop +vertex 1.136574 1.600775 0.984242 +vertex 1.971341 1.252340 0.620492 +vertex 1.460494 1.042770 0.628068 +endloop +endfacet +facet normal -0.158596 0.102685 -0.981989 +outer loop +vertex 1.126061 0.636751 0.639624 +vertex 1.460494 1.042770 0.628068 +vertex 1.918631 0.381511 0.484930 +endloop +endfacet +facet normal -0.169346 0.069959 -0.983071 +outer loop +vertex 1.126061 0.636751 0.639624 +vertex 1.918631 0.381511 0.484930 +vertex 1.605710 -0.068030 0.506844 +endloop +endfacet +facet normal 0.109645 0.460478 -0.880873 +outer loop +vertex 4.272728 1.792930 1.135445 +vertex 4.148535 0.817264 0.609955 +vertex 2.813697 1.169283 0.627823 +endloop +endfacet +facet normal 0.067900 0.529447 -0.845621 +outer loop +vertex 4.272728 1.792930 1.135445 +vertex 2.813697 1.169283 0.627823 +vertex 2.556761 1.841754 1.028229 +endloop +endfacet +facet normal 0.058674 0.119622 -0.991084 +outer loop +vertex 4.148535 0.817264 0.609955 +vertex 3.996914 -0.050026 0.496299 +vertex 2.830451 0.411186 0.482909 +endloop +endfacet +facet normal 0.036550 0.188409 -0.981410 +outer loop +vertex 4.148535 0.817264 0.609955 +vertex 2.830451 0.411186 0.482909 +vertex 2.813697 1.169283 0.627823 +endloop +endfacet +facet normal 0.059374 0.527350 -0.847571 +outer loop +vertex 2.556761 1.841754 1.028229 +vertex 2.813697 1.169283 0.627823 +vertex 1.971341 1.252340 0.620492 +endloop +endfacet +facet normal 0.034776 0.544975 -0.837731 +outer loop +vertex 2.556761 1.841754 1.028229 +vertex 1.971341 1.252340 0.620492 +vertex 1.689815 1.810828 0.972122 +endloop +endfacet +facet normal 0.054321 -0.000385 0.998523 +outer loop +vertex 50.247066 -0.515539 4.374654 +vertex 51.737465 0.086181 4.293806 +vertex 51.157322 0.422284 4.325496 +endloop +endfacet +facet normal 0.099741 -0.044705 0.994009 +outer loop +vertex 50.247066 -0.515539 4.374654 +vertex 51.157322 0.422284 4.325496 +vertex 49.893200 0.184938 4.441665 +endloop +endfacet +facet normal 0.091326 0.179932 0.979430 +outer loop +vertex 52.664707 0.710669 4.131961 +vertex 51.443138 0.940804 4.203588 +vertex 51.157322 0.422284 4.325496 +endloop +endfacet +facet normal 0.108925 0.094716 0.989527 +outer loop +vertex 52.664707 0.710669 4.131961 +vertex 51.157322 0.422284 4.325496 +vertex 51.737465 0.086181 4.293806 +endloop +endfacet +facet normal 0.064417 0.140482 0.987985 +outer loop +vertex 49.633720 0.952742 4.349410 +vertex 49.893200 0.184938 4.441665 +vertex 51.157322 0.422284 4.325496 +endloop +endfacet +facet normal 0.080147 0.186057 0.979265 +outer loop +vertex 49.633720 0.952742 4.349410 +vertex 51.157322 0.422284 4.325496 +vertex 51.443138 0.940804 4.203588 +endloop +endfacet +facet normal -0.018545 -0.272988 0.961839 +outer loop +vertex 48.166676 -2.000000 3.913223 +vertex 50.865345 -1.042833 4.236919 +vertex 50.247066 -0.515539 4.374654 +endloop +endfacet +facet normal 0.176459 -0.509150 0.842394 +outer loop +vertex 48.166676 -2.000000 3.913223 +vertex 50.247066 -0.515539 4.374654 +vertex 47.781036 -1.082973 4.548262 +endloop +endfacet +facet normal 0.012548 -0.059983 0.998121 +outer loop +vertex 50.865345 -1.042833 4.236919 +vertex 52.331310 -0.308579 4.262618 +vertex 51.737465 0.086181 4.293806 +endloop +endfacet +facet normal 0.106815 -0.132165 0.985456 +outer loop +vertex 50.865345 -1.042833 4.236919 +vertex 51.737465 0.086181 4.293806 +vertex 50.247066 -0.515539 4.374654 +endloop +endfacet +facet normal 0.082388 -0.053580 0.995159 +outer loop +vertex 47.781036 -1.082973 4.548262 +vertex 50.247066 -0.515539 4.374654 +vertex 49.893200 0.184938 4.441665 +endloop +endfacet +facet normal 0.137683 -0.147011 0.979506 +outer loop +vertex 47.781036 -1.082973 4.548262 +vertex 49.893200 0.184938 4.441665 +vertex 47.583881 -0.209556 4.707063 +endloop +endfacet +facet normal 0.114295 0.437116 0.892114 +outer loop +vertex 55.000015 1.000000 3.691000 +vertex 53.066593 1.283501 3.799797 +vertex 52.664707 0.710669 4.131961 +endloop +endfacet +facet normal 0.137123 0.321287 0.937002 +outer loop +vertex 55.000015 1.000000 3.691000 +vertex 52.664707 0.710669 4.131961 +vertex 53.516247 0.366665 4.125300 +endloop +endfacet +facet normal 0.125353 0.448738 0.884828 +outer loop +vertex 53.066593 1.283501 3.799797 +vertex 51.558132 1.499486 3.903964 +vertex 51.443138 0.940804 4.203588 +endloop +endfacet +facet normal 0.132709 0.425872 0.894998 +outer loop +vertex 53.066593 1.283501 3.799797 +vertex 51.443138 0.940804 4.203588 +vertex 52.664707 0.710669 4.131961 +endloop +endfacet +facet normal 0.069339 0.152545 0.985861 +outer loop +vertex 53.516247 0.366665 4.125300 +vertex 52.664707 0.710669 4.131961 +vertex 51.737465 0.086181 4.293806 +endloop +endfacet +facet normal 0.086202 0.051068 0.994968 +outer loop +vertex 53.516247 0.366665 4.125300 +vertex 51.737465 0.086181 4.293806 +vertex 52.331310 -0.308579 4.262618 +endloop +endfacet +facet normal 0.076994 0.391550 0.916930 +outer loop +vertex 45.262634 1.792930 4.357667 +vertex 46.970215 0.694892 4.683170 +vertex 49.633720 0.952742 4.349410 +endloop +endfacet +facet normal 0.087657 0.447287 0.890085 +outer loop +vertex 45.262634 1.792930 4.357667 +vertex 49.633720 0.952742 4.349410 +vertex 49.445156 1.646948 4.019125 +endloop +endfacet +facet normal 0.098039 0.092693 0.990856 +outer loop +vertex 46.970215 0.694892 4.683170 +vertex 47.583881 -0.209556 4.707063 +vertex 49.893200 0.184938 4.441665 +endloop +endfacet +facet normal 0.108100 0.154533 0.982056 +outer loop +vertex 46.970215 0.694892 4.683170 +vertex 49.893200 0.184938 4.441665 +vertex 49.633720 0.952742 4.349410 +endloop +endfacet +facet normal 0.074857 0.444928 0.892432 +outer loop +vertex 49.445156 1.646948 4.019125 +vertex 49.633720 0.952742 4.349410 +vertex 51.443138 0.940804 4.203588 +endloop +endfacet +facet normal 0.080225 0.458227 0.885207 +outer loop +vertex 49.445156 1.646948 4.019125 +vertex 51.443138 0.940804 4.203588 +vertex 51.558132 1.499486 3.903964 +endloop +endfacet +facet normal -0.485056 -0.030205 0.873961 +outer loop +vertex 0.883993 -0.216975 5.304646 +vertex 1.361070 0.453238 5.592591 +vertex 1.118056 0.746528 5.467853 +endloop +endfacet +facet normal -0.533801 -0.013542 0.845501 +outer loop +vertex 0.883993 -0.216975 5.304646 +vertex 1.118056 0.746528 5.467853 +vertex 0.761446 0.434430 5.237710 +endloop +endfacet +facet normal -0.291023 0.241946 0.925618 +outer loop +vertex 1.958024 1.200380 5.613314 +vertex 1.345271 1.293371 5.396353 +vertex 1.118056 0.746528 5.467853 +endloop +endfacet +facet normal -0.263567 0.184324 0.946867 +outer loop +vertex 1.958024 1.200380 5.613314 +vertex 1.118056 0.746528 5.467853 +vertex 1.361070 0.453238 5.592591 +endloop +endfacet +facet normal -0.665781 0.239685 0.706602 +outer loop +vertex 0.832530 1.140606 5.065147 +vertex 0.761446 0.434430 5.237710 +vertex 1.118056 0.746528 5.467853 +endloop +endfacet +facet normal -0.579649 0.337804 0.741549 +outer loop +vertex 0.832530 1.140606 5.065147 +vertex 1.118056 0.746528 5.467853 +vertex 1.345271 1.293371 5.396353 +endloop +endfacet +facet normal -0.728589 -0.294154 0.618572 +outer loop +vertex 0.840000 -1.566667 4.611000 +vertex 1.153953 -0.776505 5.356543 +vertex 0.883993 -0.216975 5.304646 +endloop +endfacet +facet normal -0.559611 -0.364320 0.744383 +outer loop +vertex 0.840000 -1.566667 4.611000 +vertex 0.883993 -0.216975 5.304646 +vertex 0.537691 -0.780122 4.768686 +endloop +endfacet +facet normal -0.428798 -0.100120 0.897835 +outer loop +vertex 1.153953 -0.776505 5.356543 +vertex 1.693982 0.028935 5.704272 +vertex 1.361070 0.453238 5.592591 +endloop +endfacet +facet normal -0.398405 -0.107739 0.910860 +outer loop +vertex 1.153953 -0.776505 5.356543 +vertex 1.361070 0.453238 5.592591 +vertex 0.883993 -0.216975 5.304646 +endloop +endfacet +facet normal -0.792535 -0.087077 0.603578 +outer loop +vertex 0.537691 -0.780122 4.768686 +vertex 0.883993 -0.216975 5.304646 +vertex 0.761446 0.434430 5.237710 +endloop +endfacet +facet normal -0.749797 -0.113591 0.651845 +outer loop +vertex 0.537691 -0.780122 4.768686 +vertex 0.761446 0.434430 5.237710 +vertex 0.423611 0.000000 4.773408 +endloop +endfacet +facet normal -0.108158 0.511312 0.852562 +outer loop +vertex 4.272728 1.863636 5.509182 +vertex 2.553637 1.874253 5.284729 +vertex 1.958024 1.200380 5.613314 +endloop +endfacet +facet normal -0.072594 0.396995 0.914945 +outer loop +vertex 4.272728 1.863636 5.509182 +vertex 1.958024 1.200380 5.613314 +vertex 2.557282 0.880763 5.799543 +endloop +endfacet +facet normal -0.194633 0.559673 0.805533 +outer loop +vertex 2.553637 1.874253 5.284729 +vertex 1.664815 1.871528 5.071865 +vertex 1.345271 1.293371 5.396353 +endloop +endfacet +facet normal -0.197768 0.565292 0.800832 +outer loop +vertex 2.553637 1.874253 5.284729 +vertex 1.345271 1.293371 5.396353 +vertex 1.958024 1.200380 5.613314 +endloop +endfacet +facet normal -0.220066 0.149091 0.964024 +outer loop +vertex 2.557282 0.880763 5.799543 +vertex 1.958024 1.200380 5.613314 +vertex 1.361070 0.453238 5.592591 +endloop +endfacet +facet normal -0.203227 0.096995 0.974316 +outer loop +vertex 2.557282 0.880763 5.799543 +vertex 1.361070 0.453238 5.592591 +vertex 1.693982 0.028935 5.704272 +endloop +endfacet +facet normal -0.838045 0.384748 0.386846 +outer loop +vertex 0.560000 1.566667 4.051001 +vertex 0.439913 0.780122 4.573130 +vertex 0.832530 1.140606 5.065147 +endloop +endfacet +facet normal -0.759342 0.501413 0.414710 +outer loop +vertex 0.560000 1.566667 4.051001 +vertex 0.832530 1.140606 5.065147 +vertex 1.052529 1.776505 4.699124 +endloop +endfacet +facet normal -0.859391 0.143921 0.490647 +outer loop +vertex 0.439913 0.780122 4.573130 +vertex 0.423611 0.000000 4.773408 +vertex 0.761446 0.434430 5.237710 +endloop +endfacet +facet normal -0.833280 0.208954 0.511842 +outer loop +vertex 0.439913 0.780122 4.573130 +vertex 0.761446 0.434430 5.237710 +vertex 0.832530 1.140606 5.065147 +endloop +endfacet +facet normal -0.562590 0.549949 0.617291 +outer loop +vertex 1.052529 1.776505 4.699124 +vertex 0.832530 1.140606 5.065147 +vertex 1.345271 1.293371 5.396353 +endloop +endfacet +facet normal -0.477260 0.615689 0.627017 +outer loop +vertex 1.052529 1.776505 4.699124 +vertex 1.345271 1.293371 5.396353 +vertex 1.664815 1.871528 5.071865 +endloop +endfacet +facet normal 0.021991 -0.005668 -0.999742 +outer loop +vertex 12.125395 -0.422749 0.552052 +vertex 10.102764 0.354268 0.503155 +vertex 10.985365 0.736143 0.520405 +endloop +endfacet +facet normal -0.005850 -0.033048 -0.999437 +outer loop +vertex 12.125395 -0.422749 0.552052 +vertex 10.985365 0.736143 0.520405 +vertex 12.626919 0.410041 0.521579 +endloop +endfacet +facet normal -0.012352 0.221554 -0.975070 +outer loop +vertex 8.320804 1.187877 0.656801 +vertex 10.215493 1.381170 0.676720 +vertex 10.985365 0.736143 0.520405 +endloop +endfacet +facet normal -0.031048 0.116599 -0.992694 +outer loop +vertex 8.320804 1.187877 0.656801 +vertex 10.985365 0.736143 0.520405 +vertex 10.102764 0.354268 0.503155 +endloop +endfacet +facet normal 0.043132 0.213605 -0.975968 +outer loop +vertex 12.492224 1.328601 0.716666 +vertex 12.626919 0.410041 0.521579 +vertex 10.985365 0.736143 0.520405 +endloop +endfacet +facet normal 0.022964 0.261264 -0.964994 +outer loop +vertex 12.492224 1.328601 0.716666 +vertex 10.985365 0.736143 0.520405 +vertex 10.215493 1.381170 0.676720 +endloop +endfacet +facet normal 0.112351 -0.356707 -0.927436 +outer loop +vertex 13.235235 -2.149359 1.350582 +vertex 11.022995 -1.088743 0.674657 +vertex 12.125395 -0.422749 0.552052 +endloop +endfacet +facet normal -0.085839 -0.463142 -0.882117 +outer loop +vertex 13.235235 -2.149359 1.350582 +vertex 12.125395 -0.422749 0.552052 +vertex 14.364196 -1.103987 0.691866 +endloop +endfacet +facet normal 0.032697 -0.097371 -0.994711 +outer loop +vertex 11.022995 -1.088743 0.674657 +vertex 8.954733 -0.142490 0.514045 +vertex 10.102764 0.354268 0.503155 +endloop +endfacet +facet normal -0.028179 -0.135674 -0.990353 +outer loop +vertex 11.022995 -1.088743 0.674657 +vertex 10.102764 0.354268 0.503155 +vertex 12.125395 -0.422749 0.552052 +endloop +endfacet +facet normal 0.043243 -0.062528 -0.997106 +outer loop +vertex 14.364196 -1.103987 0.691866 +vertex 12.125395 -0.422749 0.552052 +vertex 12.626919 0.410041 0.521579 +endloop +endfacet +facet normal -0.019751 -0.134098 -0.990771 +outer loop +vertex 14.364196 -1.103987 0.691866 +vertex 12.626919 0.410041 0.521579 +vertex 14.778099 -0.081578 0.545235 +endloop +endfacet +facet normal -0.032263 0.478369 -0.877566 +outer loop +vertex 4.272728 1.792930 1.135445 +vertex 6.835030 1.918170 1.109513 +vertex 8.320804 1.187877 0.656801 +endloop +endfacet +facet normal -0.062221 0.329100 -0.942243 +outer loop +vertex 4.272728 1.792930 1.135445 +vertex 8.320804 1.187877 0.656801 +vertex 6.811232 0.793336 0.618684 +endloop +endfacet +facet normal -0.027146 0.518106 -0.854885 +outer loop +vertex 6.835030 1.918170 1.109513 +vertex 9.145125 2.041365 1.110822 +vertex 10.215493 1.381170 0.676720 +endloop +endfacet +facet normal -0.038536 0.468681 -0.882526 +outer loop +vertex 6.835030 1.918170 1.109513 +vertex 10.215493 1.381170 0.676720 +vertex 8.320804 1.187877 0.656801 +endloop +endfacet +facet normal -0.014535 0.151107 -0.988411 +outer loop +vertex 6.811232 0.793336 0.618684 +vertex 8.320804 1.187877 0.656801 +vertex 10.102764 0.354268 0.503155 +endloop +endfacet +facet normal -0.029022 0.045179 -0.998557 +outer loop +vertex 6.811232 0.793336 0.618684 +vertex 10.102764 0.354268 0.503155 +vertex 8.954733 -0.142490 0.514045 +endloop +endfacet +facet normal 0.067961 0.508823 -0.858184 +outer loop +vertex 15.508273 2.303025 1.533252 +vertex 15.017767 0.994756 0.718727 +vertex 12.492224 1.328601 0.716666 +endloop +endfacet +facet normal 0.040768 0.564627 -0.824339 +outer loop +vertex 15.508273 2.303025 1.533252 +vertex 12.492224 1.328601 0.716666 +vertex 11.705572 2.128252 1.225479 +endloop +endfacet +facet normal 0.044961 0.149207 -0.987783 +outer loop +vertex 15.017767 0.994756 0.718727 +vertex 14.778099 -0.081578 0.545235 +vertex 12.626919 0.410041 0.521579 +endloop +endfacet +facet normal 0.028781 0.211701 -0.976911 +outer loop +vertex 15.017767 0.994756 0.718727 +vertex 12.626919 0.410041 0.521579 +vertex 12.492224 1.328601 0.716666 +endloop +endfacet +facet normal 0.027410 0.555686 -0.830940 +outer loop +vertex 11.705572 2.128252 1.225479 +vertex 12.492224 1.328601 0.716666 +vertex 10.215493 1.381170 0.676720 +endloop +endfacet +facet normal 0.017508 0.568987 -0.822160 +outer loop +vertex 11.705572 2.128252 1.225479 +vertex 10.215493 1.381170 0.676720 +vertex 9.145125 2.041365 1.110822 +endloop +endfacet +facet normal -0.262091 0.964859 0.018878 +outer loop +vertex 0.832788 2.175980 2.905423 +vertex 1.345435 2.325378 2.386925 +vertex 1.119097 2.270641 2.042254 +endloop +endfacet +facet normal -0.340166 0.940315 -0.009710 +outer loop +vertex 0.832788 2.175980 2.905423 +vertex 1.119097 2.270641 2.042254 +vertex 0.763476 2.143866 2.223727 +endloop +endfacet +facet normal -0.045910 0.971407 -0.232939 +outer loop +vertex 1.958174 2.226874 1.694363 +vertex 1.362232 2.158928 1.528469 +vertex 1.119097 2.270641 2.042254 +endloop +endfacet +facet normal -0.010634 0.988625 -0.150022 +outer loop +vertex 1.958174 2.226874 1.694363 +vertex 1.119097 2.270641 2.042254 +vertex 1.345435 2.325378 2.386925 +endloop +endfacet +facet normal -0.452941 0.839023 -0.301470 +outer loop +vertex 0.886872 1.968978 1.551597 +vertex 0.763476 2.143866 2.223727 +vertex 1.119097 2.270641 2.042254 +endloop +endfacet +facet normal -0.361419 0.860851 -0.358207 +outer loop +vertex 0.886872 1.968978 1.551597 +vertex 1.119097 2.270641 2.042254 +vertex 1.362232 2.158928 1.528469 +endloop +endfacet +facet normal -0.643293 0.728833 0.234471 +outer loop +vertex 0.560000 1.566667 4.051001 +vertex 1.052529 2.154190 3.576036 +vertex 0.832788 2.175980 2.905423 +endloop +endfacet +facet normal -0.634599 0.734736 0.239681 +outer loop +vertex 0.560000 1.566667 4.051001 +vertex 0.832788 2.175980 2.905423 +vertex 0.440260 1.766233 3.122204 +endloop +endfacet +facet normal -0.195052 0.976419 0.092523 +outer loop +vertex 1.052529 2.154190 3.576036 +vertex 1.664815 2.340921 2.896196 +vertex 1.345435 2.325378 2.386925 +endloop +endfacet +facet normal -0.189796 0.977318 0.093947 +outer loop +vertex 1.052529 2.154190 3.576036 +vertex 1.345435 2.325378 2.386925 +vertex 0.832788 2.175980 2.905423 +endloop +endfacet +facet normal -0.711112 0.701984 0.039233 +outer loop +vertex 0.440260 1.766233 3.122204 +vertex 0.832788 2.175980 2.905423 +vertex 0.763476 2.143866 2.223727 +endloop +endfacet +facet normal -0.719474 0.693746 0.032763 +outer loop +vertex 0.440260 1.766233 3.122204 +vertex 0.763476 2.143866 2.223727 +vertex 0.426389 1.789352 2.328038 +endloop +endfacet +facet normal 0.054097 0.884757 -0.462903 +outer loop +vertex 4.272728 1.792930 1.135445 +vertex 2.556761 1.841754 1.028229 +vertex 1.958174 2.226874 1.694363 +endloop +endfacet +facet normal 0.115189 0.957054 -0.266045 +outer loop +vertex 4.272728 1.792930 1.135445 +vertex 1.958174 2.226874 1.694363 +vertex 2.553637 2.266812 2.095851 +endloop +endfacet +facet normal 0.003942 0.848771 -0.528746 +outer loop +vertex 2.556761 1.841754 1.028229 +vertex 1.689815 1.810828 0.972122 +vertex 1.362232 2.158928 1.528469 +endloop +endfacet +facet normal 0.032949 0.877804 -0.477886 +outer loop +vertex 2.556761 1.841754 1.028229 +vertex 1.362232 2.158928 1.528469 +vertex 1.958174 2.226874 1.694363 +endloop +endfacet +facet normal 0.017912 0.991964 -0.125243 +outer loop +vertex 2.553637 2.266812 2.095851 +vertex 1.958174 2.226874 1.694363 +vertex 1.345435 2.325378 2.386925 +endloop +endfacet +facet normal 0.035651 0.997968 -0.052815 +outer loop +vertex 2.553637 2.266812 2.095851 +vertex 1.345435 2.325378 2.386925 +vertex 1.664815 2.340921 2.896196 +endloop +endfacet +facet normal -0.624413 0.510585 -0.591110 +outer loop +vertex 0.777778 1.203704 1.005815 +vertex 0.541146 1.598091 1.596440 +vertex 0.886872 1.968978 1.551597 +endloop +endfacet +facet normal -0.607987 0.516628 -0.602866 +outer loop +vertex 0.777778 1.203704 1.005815 +vertex 0.886872 1.968978 1.551597 +vertex 1.136574 1.600775 0.984242 +endloop +endfacet +facet normal -0.735721 0.618057 -0.276983 +outer loop +vertex 0.541146 1.598091 1.596440 +vertex 0.426389 1.789352 2.328038 +vertex 0.763476 2.143866 2.223727 +endloop +endfacet +facet normal -0.716302 0.631929 -0.295934 +outer loop +vertex 0.541146 1.598091 1.596440 +vertex 0.763476 2.143866 2.223727 +vertex 0.886872 1.968978 1.551597 +endloop +endfacet +facet normal -0.319261 0.724598 -0.610762 +outer loop +vertex 1.136574 1.600775 0.984242 +vertex 0.886872 1.968978 1.551597 +vertex 1.362232 2.158928 1.528469 +endloop +endfacet +facet normal -0.289197 0.725664 -0.624321 +outer loop +vertex 1.136574 1.600775 0.984242 +vertex 1.362232 2.158928 1.528469 +vertex 1.689815 1.810828 0.972122 +endloop +endfacet +facet normal -0.098370 -0.991958 0.079637 +outer loop +vertex 8.802366 -2.453447 5.302680 +vertex 10.254326 -2.673915 4.350039 +vertex 11.182098 -2.715471 4.978424 +endloop +endfacet +facet normal -0.091691 -0.987867 0.125347 +outer loop +vertex 8.802366 -2.453447 5.302680 +vertex 11.182098 -2.715471 4.978424 +vertex 10.676667 -2.563551 5.805993 +endloop +endfacet +facet normal -0.068967 -0.996923 -0.037261 +outer loop +vertex 12.164215 -2.729092 3.525036 +vertex 12.723382 -2.814001 4.761803 +vertex 11.182098 -2.715471 4.978424 +endloop +endfacet +facet normal -0.035057 -0.999283 -0.014324 +outer loop +vertex 12.164215 -2.729092 3.525036 +vertex 11.182098 -2.715471 4.978424 +vertex 10.254326 -2.673915 4.350039 +endloop +endfacet +facet normal -0.102259 -0.987633 0.118849 +outer loop +vertex 12.753977 -2.742223 6.108570 +vertex 10.676667 -2.563551 5.805993 +vertex 11.182098 -2.715471 4.978424 +endloop +endfacet +facet normal -0.056085 -0.996942 0.054407 +outer loop +vertex 12.753977 -2.742223 6.108570 +vertex 11.182098 -2.715471 4.978424 +vertex 12.723382 -2.814001 4.761803 +endloop +endfacet +facet normal -0.137872 -0.950809 0.277406 +outer loop +vertex 5.333334 -1.828283 5.721304 +vertex 7.178772 -2.418575 4.615271 +vertex 8.802366 -2.453447 5.302680 +endloop +endfacet +facet normal -0.118476 -0.915260 0.385048 +outer loop +vertex 5.333334 -1.828283 5.721304 +vertex 8.802366 -2.453447 5.302680 +vertex 8.131913 -1.975336 6.232861 +endloop +endfacet +facet normal -0.078702 -0.995832 0.046086 +outer loop +vertex 7.178772 -2.418575 4.615271 +vertex 9.061987 -2.615098 3.584776 +vertex 10.254326 -2.673915 4.350039 +endloop +endfacet +facet normal -0.071898 -0.990218 0.119581 +outer loop +vertex 7.178772 -2.418575 4.615271 +vertex 10.254326 -2.673915 4.350039 +vertex 8.802366 -2.453447 5.302680 +endloop +endfacet +facet normal -0.151552 -0.919275 0.363271 +outer loop +vertex 8.131913 -1.975336 6.232861 +vertex 8.802366 -2.453447 5.302680 +vertex 10.676667 -2.563551 5.805993 +endloop +endfacet +facet normal -0.147266 -0.913073 0.380278 +outer loop +vertex 8.131913 -1.975336 6.232861 +vertex 10.676667 -2.563551 5.805993 +vertex 10.391977 -2.143262 6.704890 +endloop +endfacet +facet normal -0.087903 -0.950882 -0.296812 +outer loop +vertex 13.235235 -2.149359 1.350582 +vertex 14.374381 -2.709676 2.808274 +vertex 12.164215 -2.729092 3.525036 +endloop +endfacet +facet normal 0.069456 -0.971901 -0.224909 +outer loop +vertex 13.235235 -2.149359 1.350582 +vertex 12.164215 -2.729092 3.525036 +vertex 11.040919 -2.582739 2.545703 +endloop +endfacet +facet normal -0.064487 -0.992113 -0.107483 +outer loop +vertex 14.374381 -2.709676 2.808274 +vertex 14.808001 -2.908951 4.387503 +vertex 12.723382 -2.814001 4.761803 +endloop +endfacet +facet normal -0.011732 -0.997931 -0.063208 +outer loop +vertex 14.374381 -2.709676 2.808274 +vertex 12.723382 -2.814001 4.761803 +vertex 12.164215 -2.729092 3.525036 +endloop +endfacet +facet normal -0.062176 -0.995060 -0.077388 +outer loop +vertex 11.040919 -2.582739 2.545703 +vertex 12.164215 -2.729092 3.525036 +vertex 10.254326 -2.673915 4.350039 +endloop +endfacet +facet normal -0.013181 -0.998333 -0.056193 +outer loop +vertex 11.040919 -2.582739 2.545703 +vertex 10.254326 -2.673915 4.350039 +vertex 9.061987 -2.615098 3.584776 +endloop +endfacet +facet normal -0.251464 -0.923204 0.290621 +outer loop +vertex 15.458335 -2.770834 8.357668 +vertex 12.673998 -2.361658 7.248292 +vertex 12.753977 -2.742223 6.108570 +endloop +endfacet +facet normal -0.096803 -0.989875 0.103806 +outer loop +vertex 15.458335 -2.770834 8.357668 +vertex 12.753977 -2.742223 6.108570 +vertex 14.999439 -2.963156 6.095771 +endloop +endfacet +facet normal -0.175573 -0.911968 0.370795 +outer loop +vertex 12.673998 -2.361658 7.248292 +vertex 10.391977 -2.143262 6.704890 +vertex 10.676667 -2.563551 5.805993 +endloop +endfacet +facet normal -0.125769 -0.943605 0.306254 +outer loop +vertex 12.673998 -2.361658 7.248292 +vertex 10.676667 -2.563551 5.805993 +vertex 12.753977 -2.742223 6.108570 +endloop +endfacet +facet normal -0.097457 -0.993709 0.055176 +outer loop +vertex 14.999439 -2.963156 6.095771 +vertex 12.753977 -2.742223 6.108570 +vertex 12.723382 -2.814001 4.761803 +endloop +endfacet +facet normal -0.050154 -0.998401 -0.026060 +outer loop +vertex 14.999439 -2.963156 6.095771 +vertex 12.723382 -2.814001 4.761803 +vertex 14.808001 -2.908951 4.387503 +endloop +endfacet +facet normal -0.051461 -0.998001 -0.036676 +outer loop +vertex 19.651859 -3.205200 6.661274 +vertex 21.579056 -3.249851 5.172173 +vertex 22.354593 -3.309949 5.719345 +endloop +endfacet +facet normal -0.044917 -0.998832 -0.017805 +outer loop +vertex 19.651859 -3.205200 6.661274 +vertex 22.354593 -3.309949 5.719345 +vertex 21.544149 -3.293628 6.848240 +endloop +endfacet +facet normal -0.056996 -0.994801 -0.084395 +outer loop +vertex 23.786083 -3.239633 3.923745 +vertex 23.963385 -3.355907 5.174582 +vertex 22.354593 -3.309949 5.719345 +endloop +endfacet +facet normal -0.031831 -0.997414 -0.064435 +outer loop +vertex 23.786083 -3.239633 3.923745 +vertex 22.354593 -3.309949 5.719345 +vertex 21.579056 -3.249851 5.172173 +endloop +endfacet +facet normal -0.045489 -0.998799 -0.018217 +outer loop +vertex 23.701311 -3.388976 6.689353 +vertex 21.544149 -3.293628 6.848240 +vertex 22.354593 -3.309949 5.719345 +endloop +endfacet +facet normal -0.038154 -0.998868 -0.028407 +outer loop +vertex 23.701311 -3.388976 6.689353 +vertex 22.354593 -3.309949 5.719345 +vertex 23.963385 -3.355907 5.174582 +endloop +endfacet +facet normal -0.152695 -0.988014 -0.022656 +outer loop +vertex 15.458335 -2.770834 8.357668 +vertex 15.539762 -2.781838 8.288755 +vertex 15.527050 -2.781158 8.344804 +endloop +endfacet +facet normal -0.152690 -0.988015 -0.022633 +outer loop +vertex 15.458335 -2.770834 8.357668 +vertex 15.527050 -2.781158 8.344804 +vertex 15.538308 -2.783193 8.357668 +endloop +endfacet +facet normal -0.045050 -0.998122 -0.041513 +outer loop +vertex 18.135849 -3.132686 6.091653 +vertex 20.531229 -3.172596 4.451771 +vertex 21.579056 -3.249851 5.172173 +endloop +endfacet +facet normal -0.039722 -0.998980 -0.021454 +outer loop +vertex 18.135849 -3.132686 6.091653 +vertex 21.579056 -3.249851 5.172173 +vertex 19.651859 -3.205200 6.661274 +endloop +endfacet +facet normal -0.090711 -0.931835 -0.351362 +outer loop +vertex 26.752544 -2.589665 1.434137 +vertex 26.704079 -3.180421 3.013374 +vertex 23.786083 -3.239633 3.923745 +endloop +endfacet +facet normal 0.044079 -0.978215 -0.202863 +outer loop +vertex 26.752544 -2.589665 1.434137 +vertex 23.786083 -3.239633 3.923745 +vertex 22.986065 -3.078571 2.973266 +endloop +endfacet +facet normal -0.033742 -0.991793 -0.123322 +outer loop +vertex 26.704079 -3.180421 3.013374 +vertex 26.492159 -3.367654 4.577150 +vertex 23.963385 -3.355907 5.174582 +endloop +endfacet +facet normal -0.008305 -0.995781 -0.091387 +outer loop +vertex 26.704079 -3.180421 3.013374 +vertex 23.963385 -3.355907 5.174582 +vertex 23.786083 -3.239633 3.923745 +endloop +endfacet +facet normal -0.061262 -0.991309 -0.116416 +outer loop +vertex 22.986065 -3.078571 2.973266 +vertex 23.786083 -3.239633 3.923745 +vertex 21.579056 -3.249851 5.172173 +endloop +endfacet +facet normal -0.013958 -0.996152 -0.086525 +outer loop +vertex 22.986065 -3.078571 2.973266 +vertex 21.579056 -3.249851 5.172173 +vertex 20.531229 -3.172596 4.451771 +endloop +endfacet +facet normal -0.011662 -0.999648 -0.023841 +outer loop +vertex 26.488607 -3.412277 6.302927 +vertex 23.701311 -3.388976 6.689353 +vertex 23.963385 -3.355907 5.174582 +endloop +endfacet +facet normal -0.010755 -0.999608 -0.025868 +outer loop +vertex 26.488607 -3.412277 6.302927 +vertex 23.963385 -3.355907 5.174582 +vertex 26.492159 -3.367654 4.577150 +endloop +endfacet +facet normal 0.010801 0.002288 -0.999939 +outer loop +vertex 24.168861 -0.458234 0.562916 +vertex 21.801546 0.458118 0.539441 +vertex 22.818352 0.906325 0.551450 +endloop +endfacet +facet normal -0.019894 -0.028087 -0.999408 +outer loop +vertex 24.168861 -0.458234 0.562916 +vertex 22.818352 0.906325 0.551450 +vertex 24.733583 0.530254 0.523895 +endloop +endfacet +facet normal -0.028836 0.235589 -0.971425 +outer loop +vertex 20.104874 1.469719 0.768631 +vertex 22.284901 1.664661 0.751195 +vertex 22.818352 0.906325 0.551450 +endloop +endfacet +facet normal -0.050065 0.140071 -0.988875 +outer loop +vertex 20.104874 1.469719 0.768631 +vertex 22.818352 0.906325 0.551450 +vertex 21.801546 0.458118 0.539441 +endloop +endfacet +facet normal 0.021616 0.182112 -0.983040 +outer loop +vertex 25.002594 1.567553 0.721974 +vertex 24.733583 0.530254 0.523895 +vertex 22.818352 0.906325 0.551450 +endloop +endfacet +facet normal -0.001330 0.253837 -0.967246 +outer loop +vertex 25.002594 1.567553 0.721974 +vertex 22.818352 0.906325 0.551450 +vertex 22.284901 1.664661 0.751195 +endloop +endfacet +facet normal 0.088396 -0.283195 -0.954980 +outer loop +vertex 26.752544 -2.589665 1.434137 +vertex 23.085478 -1.280291 0.706413 +vertex 24.168861 -0.458234 0.562916 +endloop +endfacet +facet normal -0.068269 -0.447273 -0.891788 +outer loop +vertex 26.752544 -2.589665 1.434137 +vertex 24.168861 -0.458234 0.562916 +vertex 27.419786 -1.179824 0.675958 +endloop +endfacet +facet normal 0.026385 -0.076248 -0.996740 +outer loop +vertex 23.085478 -1.280291 0.706413 +vertex 20.618484 -0.134188 0.553434 +vertex 21.801546 0.458118 0.539441 +endloop +endfacet +facet normal -0.037858 -0.123208 -0.991658 +outer loop +vertex 23.085478 -1.280291 0.706413 +vertex 21.801546 0.458118 0.539441 +vertex 24.168861 -0.458234 0.562916 +endloop +endfacet +facet normal 0.023045 -0.052576 -0.998351 +outer loop +vertex 27.419786 -1.179824 0.675958 +vertex 24.168861 -0.458234 0.562916 +vertex 24.733583 0.530254 0.523895 +endloop +endfacet +facet normal -0.020444 -0.120370 -0.992518 +outer loop +vertex 27.419786 -1.179824 0.675958 +vertex 24.733583 0.530254 0.523895 +vertex 27.720016 0.032394 0.522759 +endloop +endfacet +facet normal -0.041999 0.539786 -0.840754 +outer loop +vertex 15.508273 2.303025 1.533252 +vertex 19.303099 2.379055 1.392499 +vertex 20.104874 1.469719 0.768631 +endloop +endfacet +facet normal -0.082151 0.388844 -0.917634 +outer loop +vertex 15.508273 2.303025 1.533252 +vertex 20.104874 1.469719 0.768631 +vertex 18.347206 1.014438 0.733063 +endloop +endfacet +facet normal -0.040911 0.567476 -0.822373 +outer loop +vertex 19.303099 2.379055 1.392499 +vertex 21.998266 2.464462 1.317354 +vertex 22.284901 1.664661 0.751195 +endloop +endfacet +facet normal -0.054321 0.531884 -0.845073 +outer loop +vertex 19.303099 2.379055 1.392499 +vertex 22.284901 1.664661 0.751195 +vertex 20.104874 1.469719 0.768631 +endloop +endfacet +facet normal -0.026364 0.178620 -0.983565 +outer loop +vertex 18.347206 1.014438 0.733063 +vertex 20.104874 1.469719 0.768631 +vertex 21.801546 0.458118 0.539441 +endloop +endfacet +facet normal -0.045141 0.066616 -0.996757 +outer loop +vertex 18.347206 1.014438 0.733063 +vertex 21.801546 0.458118 0.539441 +vertex 20.618484 -0.134188 0.553434 +endloop +endfacet +facet normal 0.023968 0.397051 -0.917484 +outer loop +vertex 30.224367 2.412967 1.224249 +vertex 28.402740 1.203649 0.653316 +vertex 25.002594 1.567553 0.721974 +endloop +endfacet +facet normal -0.007408 0.544183 -0.838934 +outer loop +vertex 30.224367 2.412967 1.224249 +vertex 25.002594 1.567553 0.721974 +vertex 25.097067 2.476448 1.310704 +endloop +endfacet +facet normal 0.016502 0.101261 -0.994723 +outer loop +vertex 28.402740 1.203649 0.653316 +vertex 27.720016 0.032394 0.522759 +vertex 24.733583 0.530254 0.523895 +endloop +endfacet +facet normal 0.000234 0.187509 -0.982263 +outer loop +vertex 28.402740 1.203649 0.653316 +vertex 24.733583 0.530254 0.523895 +vertex 25.002594 1.567553 0.721974 +endloop +endfacet +facet normal 0.010368 0.542868 -0.839754 +outer loop +vertex 25.097067 2.476448 1.310704 +vertex 25.002594 1.567553 0.721974 +vertex 22.284901 1.664661 0.751195 +endloop +endfacet +facet normal -0.003984 0.576812 -0.816867 +outer loop +vertex 25.097067 2.476448 1.310704 +vertex 22.284901 1.664661 0.751195 +vertex 21.998266 2.464462 1.317354 +endloop +endfacet +facet normal -0.214887 0.017602 0.976480 +outer loop +vertex 6.192955 -0.172350 6.679617 +vertex 8.064869 0.641323 7.076889 +vertex 7.223382 0.924576 6.886603 +endloop +endfacet +facet normal -0.166813 -0.029270 0.985554 +outer loop +vertex 6.192955 -0.172350 6.679617 +vertex 7.223382 0.924576 6.886603 +vertex 5.782027 0.543884 6.631336 +endloop +endfacet +facet normal -0.215357 0.333843 0.917698 +outer loop +vertex 9.928230 1.566422 7.287859 +vertex 8.009556 1.544833 6.845456 +vertex 7.223382 0.924576 6.886603 +endloop +endfacet +facet normal -0.176078 0.132208 0.975458 +outer loop +vertex 9.928230 1.566422 7.287859 +vertex 7.223382 0.924576 6.886603 +vertex 8.064869 0.641323 7.076889 +endloop +endfacet +facet normal -0.238549 0.279570 0.930019 +outer loop +vertex 6.016459 1.322258 6.457483 +vertex 5.782027 0.543884 6.631336 +vertex 7.223382 0.924576 6.886603 +endloop +endfacet +facet normal -0.215922 0.334532 0.917314 +outer loop +vertex 6.016459 1.322258 6.457483 +vertex 7.223382 0.924576 6.886603 +vertex 8.009556 1.544833 6.845456 +endloop +endfacet +facet normal -0.269489 -0.373729 0.887526 +outer loop +vertex 5.333334 -1.828283 5.721304 +vertex 7.198318 -0.798686 6.721142 +vertex 6.192955 -0.172350 6.679617 +endloop +endfacet +facet normal -0.043669 -0.483330 0.874349 +outer loop +vertex 5.333334 -1.828283 5.721304 +vertex 6.192955 -0.172350 6.679617 +vertex 4.467706 -0.826319 6.231944 +endloop +endfacet +facet normal -0.214387 -0.110735 0.970452 +outer loop +vertex 7.198318 -0.798686 6.721142 +vertex 9.218365 0.199331 7.281278 +vertex 8.064869 0.641323 7.076889 +endloop +endfacet +facet normal -0.138807 -0.157990 0.977636 +outer loop +vertex 7.198318 -0.798686 6.721142 +vertex 8.064869 0.641323 7.076889 +vertex 6.192955 -0.172350 6.679617 +endloop +endfacet +facet normal -0.227473 -0.065013 0.971612 +outer loop +vertex 4.467706 -0.826319 6.231944 +vertex 6.192955 -0.172350 6.679617 +vertex 5.782027 0.543884 6.631336 +endloop +endfacet +facet normal -0.144871 -0.146277 0.978578 +outer loop +vertex 4.467706 -0.826319 6.231944 +vertex 5.782027 0.543884 6.631336 +vertex 4.185957 0.051183 6.321401 +endloop +endfacet +facet normal -0.279639 0.728761 0.625068 +outer loop +vertex 15.458333 2.770834 8.357668 +vertex 11.587097 2.393663 7.065519 +vertex 9.928230 1.566422 7.287859 +endloop +endfacet +facet normal -0.223054 0.171863 0.959536 +outer loop +vertex 15.458333 2.770834 8.357668 +vertex 9.928230 1.566422 7.287859 +vertex 11.600214 1.316005 7.721383 +endloop +endfacet +facet normal -0.212020 0.723188 0.657302 +outer loop +vertex 11.587097 2.393663 7.065519 +vertex 9.113427 2.193287 6.488069 +vertex 8.009556 1.544833 6.845456 +endloop +endfacet +facet normal -0.187966 0.588312 0.786484 +outer loop +vertex 11.587097 2.393663 7.065519 +vertex 8.009556 1.544833 6.845456 +vertex 9.928230 1.566422 7.287859 +endloop +endfacet +facet normal -0.214757 0.215320 0.952637 +outer loop +vertex 11.600214 1.316005 7.721383 +vertex 9.928230 1.566422 7.287859 +vertex 8.064869 0.641323 7.076889 +endloop +endfacet +facet normal -0.177720 -0.008758 0.984042 +outer loop +vertex 11.600214 1.316005 7.721383 +vertex 8.064869 0.641323 7.076889 +vertex 9.218365 0.199331 7.281278 +endloop +endfacet +facet normal -0.251593 0.565476 0.785454 +outer loop +vertex 4.272728 1.863636 5.509182 +vertex 4.172165 0.918773 6.157211 +vertex 6.016459 1.322258 6.457483 +endloop +endfacet +facet normal -0.181192 0.672813 0.717281 +outer loop +vertex 4.272728 1.863636 5.509182 +vertex 6.016459 1.322258 6.457483 +vertex 6.831068 2.026018 6.003131 +endloop +endfacet +facet normal -0.239946 0.176832 0.954545 +outer loop +vertex 4.172165 0.918773 6.157211 +vertex 4.185957 0.051183 6.321401 +vertex 5.782027 0.543884 6.631336 +endloop +endfacet +facet normal -0.212574 0.273546 0.938075 +outer loop +vertex 4.172165 0.918773 6.157211 +vertex 5.782027 0.543884 6.631336 +vertex 6.016459 1.322258 6.457483 +endloop +endfacet +facet normal -0.211694 0.691156 0.691006 +outer loop +vertex 6.831068 2.026018 6.003131 +vertex 6.016459 1.322258 6.457483 +vertex 8.009556 1.544833 6.845456 +endloop +endfacet +facet normal -0.196068 0.707802 0.678655 +outer loop +vertex 6.831068 2.026018 6.003131 +vertex 8.009556 1.544833 6.845456 +vertex 9.113427 2.193287 6.488069 +endloop +endfacet +facet normal -0.055414 0.998326 -0.016585 +outer loop +vertex 6.012343 2.489832 3.702746 +vertex 8.029861 2.588729 2.914806 +vertex 7.207201 2.535911 2.484139 +endloop +endfacet +facet normal -0.027336 0.999566 0.010993 +outer loop +vertex 6.012343 2.489832 3.702746 +vertex 7.207201 2.535911 2.484139 +vertex 5.726770 2.491796 2.814062 +endloop +endfacet +facet normal -0.024669 0.979463 -0.200110 +outer loop +vertex 9.997385 2.513603 2.030982 +vertex 8.029572 2.419185 1.811427 +vertex 7.207201 2.535911 2.484139 +endloop +endfacet +facet normal -0.009050 0.994465 -0.104676 +outer loop +vertex 9.997385 2.513603 2.030982 +vertex 7.207201 2.535911 2.484139 +vertex 8.029861 2.588729 2.914806 +endloop +endfacet +facet normal -0.070899 0.979773 -0.187130 +outer loop +vertex 6.012306 2.337867 1.899937 +vertex 5.726770 2.491796 2.814062 +vertex 7.207201 2.535911 2.484139 +endloop +endfacet +facet normal -0.049233 0.972209 -0.228879 +outer loop +vertex 6.012306 2.337867 1.899937 +vertex 7.207201 2.535911 2.484139 +vertex 8.029572 2.419185 1.811427 +endloop +endfacet +facet normal -0.139711 0.969469 0.201520 +outer loop +vertex 4.272728 1.863636 5.509182 +vertex 6.835320 2.433162 4.545931 +vertex 6.012343 2.489832 3.702746 +endloop +endfacet +facet normal 0.037649 0.932397 0.359469 +outer loop +vertex 4.272728 1.863636 5.509182 +vertex 6.012343 2.489832 3.702746 +vertex 4.161652 2.331292 4.307803 +endloop +endfacet +facet normal -0.066258 0.996717 0.046537 +outer loop +vertex 6.835320 2.433162 4.545931 +vertex 9.147440 2.632157 3.575842 +vertex 8.029861 2.588729 2.914806 +endloop +endfacet +facet normal -0.016427 0.996414 0.083002 +outer loop +vertex 6.835320 2.433162 4.545931 +vertex 8.029861 2.588729 2.914806 +vertex 6.012343 2.489832 3.702746 +endloop +endfacet +facet normal -0.076614 0.996700 0.026822 +outer loop +vertex 4.161652 2.331292 4.307803 +vertex 6.012343 2.489832 3.702746 +vertex 5.726770 2.491796 2.814062 +endloop +endfacet +facet normal -0.014082 0.995638 0.092228 +outer loop +vertex 4.161652 2.331292 4.307803 +vertex 5.726770 2.491796 2.814062 +vertex 4.101852 2.427727 3.257616 +endloop +endfacet +facet normal -0.005546 0.897442 -0.441097 +outer loop +vertex 15.508273 2.303025 1.533252 +vertex 11.705572 2.128252 1.225479 +vertex 9.997385 2.513603 2.030982 +endloop +endfacet +facet normal 0.014446 0.968220 -0.249682 +outer loop +vertex 15.508273 2.303025 1.533252 +vertex 9.997385 2.513603 2.030982 +vertex 11.713722 2.630891 2.585105 +endloop +endfacet +facet normal -0.007990 0.874773 -0.484467 +outer loop +vertex 11.705572 2.128252 1.225479 +vertex 9.145125 2.041365 1.110822 +vertex 8.029572 2.419185 1.811427 +endloop +endfacet +facet normal 0.003950 0.905314 -0.424725 +outer loop +vertex 11.705572 2.128252 1.225479 +vertex 8.029572 2.419185 1.811427 +vertex 9.997385 2.513603 2.030982 +endloop +endfacet +facet normal -0.023563 0.990341 -0.136634 +outer loop +vertex 11.713722 2.630891 2.585105 +vertex 9.997385 2.513603 2.030982 +vertex 8.029861 2.588729 2.914806 +endloop +endfacet +facet normal -0.015034 0.999078 -0.040220 +outer loop +vertex 11.713722 2.630891 2.585105 +vertex 8.029861 2.588729 2.914806 +vertex 9.147440 2.632157 3.575842 +endloop +endfacet +facet normal -0.092009 0.897832 -0.430619 +outer loop +vertex 4.272728 1.792930 1.135445 +vertex 4.161652 2.306381 2.229715 +vertex 6.012306 2.337867 1.899937 +endloop +endfacet +facet normal -0.047210 0.861043 -0.506335 +outer loop +vertex 4.272728 1.792930 1.135445 +vertex 6.012306 2.337867 1.899937 +vertex 6.835030 1.918170 1.109513 +endloop +endfacet +facet normal -0.072084 0.990024 -0.121068 +outer loop +vertex 4.161652 2.306381 2.229715 +vertex 4.101852 2.427727 3.257616 +vertex 5.726770 2.491796 2.814062 +endloop +endfacet +facet normal -0.048911 0.982323 -0.180691 +outer loop +vertex 4.161652 2.306381 2.229715 +vertex 5.726770 2.491796 2.814062 +vertex 6.012306 2.337867 1.899937 +endloop +endfacet +facet normal -0.057052 0.855963 -0.513880 +outer loop +vertex 6.835030 1.918170 1.109513 +vertex 6.012306 2.337867 1.899937 +vertex 8.029572 2.419185 1.811427 +endloop +endfacet +facet normal -0.044906 0.847665 -0.528628 +outer loop +vertex 6.835030 1.918170 1.109513 +vertex 8.029572 2.419185 1.811427 +vertex 9.145125 2.041365 1.110822 +endloop +endfacet +facet normal 0.029138 -0.029900 -0.999128 +outer loop +vertex 53.935028 0.015368 0.507757 +vertex 52.969692 0.580675 0.462687 +vertex 53.385418 0.730710 0.470321 +endloop +endfacet +facet normal -0.019652 -0.067301 -0.997539 +outer loop +vertex 53.935028 0.015368 0.507757 +vertex 53.385418 0.730710 0.470321 +vertex 54.087021 0.426941 0.476994 +endloop +endfacet +facet normal 0.020521 0.271626 -0.962184 +outer loop +vertex 52.143917 1.163148 0.565922 +vertex 53.116249 1.115542 0.573220 +vertex 53.385418 0.730710 0.470321 +endloop +endfacet +facet normal -0.029884 0.133207 -0.990638 +outer loop +vertex 52.143917 1.163148 0.565922 +vertex 53.385418 0.730710 0.470321 +vertex 52.969692 0.580675 0.462687 +endloop +endfacet +facet normal 0.125923 0.269867 -0.954628 +outer loop +vertex 54.058681 0.879590 0.601217 +vertex 54.087021 0.426941 0.476994 +vertex 53.385418 0.730710 0.470321 +endloop +endfacet +facet normal 0.109944 0.327799 -0.938328 +outer loop +vertex 54.058681 0.879590 0.601217 +vertex 53.385418 0.730710 0.470321 +vertex 53.116249 1.115542 0.573220 +endloop +endfacet +facet normal 0.126970 -0.340753 -0.931540 +outer loop +vertex 55.000004 -1.000000 1.024333 +vertex 53.526051 -0.368843 0.592556 +vertex 53.935028 0.015368 0.507757 +endloop +endfacet +facet normal -0.228010 -0.620776 -0.750099 +outer loop +vertex 55.000004 -1.000000 1.024333 +vertex 53.935028 0.015368 0.507757 +vertex 55.000008 -0.546875 0.649334 +endloop +endfacet +facet normal 0.039999 -0.112360 -0.992862 +outer loop +vertex 53.526051 -0.368843 0.592556 +vertex 52.409733 0.291152 0.472893 +vertex 52.969692 0.580675 0.462687 +endloop +endfacet +facet normal -0.050105 -0.164103 -0.985170 +outer loop +vertex 53.526051 -0.368843 0.592556 +vertex 52.969692 0.580675 0.462687 +vertex 53.935028 0.015368 0.507757 +endloop +endfacet +facet normal 0.077576 -0.102770 -0.991676 +outer loop +vertex 55.000008 -0.546875 0.649334 +vertex 53.935028 0.015368 0.507757 +vertex 54.087021 0.426941 0.476994 +endloop +endfacet +facet normal -0.053575 -0.222505 -0.973459 +outer loop +vertex 55.000008 -0.546875 0.649334 +vertex 54.087021 0.426941 0.476994 +vertex 55.000008 0.000000 0.524334 +endloop +endfacet +facet normal 0.017534 0.550917 -0.834376 +outer loop +vertex 49.363640 1.792930 0.923323 +vertex 51.705059 1.646369 0.875757 +vertex 52.143917 1.163148 0.565922 +endloop +endfacet +facet normal -0.043552 0.340707 -0.939160 +outer loop +vertex 49.363640 1.792930 0.923323 +vertex 52.143917 1.163148 0.565922 +vertex 51.159924 0.980571 0.545317 +endloop +endfacet +facet normal 0.066111 0.620924 -0.781078 +outer loop +vertex 51.705059 1.646369 0.875757 +vertex 52.962971 1.494856 0.861782 +vertex 53.116249 1.115542 0.573220 +endloop +endfacet +facet normal 0.033673 0.560946 -0.827168 +outer loop +vertex 51.705059 1.646369 0.875757 +vertex 53.116249 1.115542 0.573220 +vertex 52.143917 1.163148 0.565922 +endloop +endfacet +facet normal -0.009333 0.161664 -0.986802 +outer loop +vertex 51.159924 0.980571 0.545317 +vertex 52.143917 1.163148 0.565922 +vertex 52.969692 0.580675 0.462687 +endloop +endfacet +facet normal -0.037392 0.037118 -0.998611 +outer loop +vertex 51.159924 0.980571 0.545317 +vertex 52.969692 0.580675 0.462687 +vertex 52.409733 0.291152 0.472893 +endloop +endfacet +facet normal 0.255913 0.616340 -0.744738 +outer loop +vertex 55.000008 1.000000 1.024334 +vertex 55.000008 0.546875 0.649334 +vertex 54.058681 0.879590 0.601217 +endloop +endfacet +facet normal 0.250313 0.629107 -0.735913 +outer loop +vertex 55.000008 1.000000 1.024334 +vertex 54.058681 0.879590 0.601217 +vertex 54.016209 1.270190 0.920681 +endloop +endfacet +facet normal 0.152927 0.220204 -0.963392 +outer loop +vertex 55.000008 0.546875 0.649334 +vertex 55.000008 0.000000 0.524334 +vertex 54.087021 0.426941 0.476994 +endloop +endfacet +facet normal 0.144186 0.270269 -0.951927 +outer loop +vertex 55.000008 0.546875 0.649334 +vertex 54.087021 0.426941 0.476994 +vertex 54.058681 0.879590 0.601217 +endloop +endfacet +facet normal 0.181146 0.634347 -0.751525 +outer loop +vertex 54.016209 1.270190 0.920681 +vertex 54.058681 0.879590 0.601217 +vertex 53.116249 1.115542 0.573220 +endloop +endfacet +facet normal 0.178378 0.640395 -0.747044 +outer loop +vertex 54.016209 1.270190 0.920681 +vertex 53.116249 1.115542 0.573220 +vertex 52.962971 1.494856 0.861782 +endloop +endfacet +facet normal 0.132022 -0.986409 0.097817 +outer loop +vertex 51.965218 -1.882964 3.330094 +vertex 52.912369 -1.816551 2.721468 +vertex 53.356014 -1.733773 2.957440 +endloop +endfacet +facet normal 0.148050 -0.975629 0.161953 +outer loop +vertex 51.965218 -1.882964 3.330094 +vertex 53.356014 -1.733773 2.957440 +vertex 53.058926 -1.705439 3.399708 +endloop +endfacet +facet normal 0.177278 -0.983315 -0.040787 +outer loop +vertex 53.927742 -1.597909 2.166973 +vertex 54.082394 -1.592369 2.705612 +vertex 53.356014 -1.733773 2.957440 +endloop +endfacet +facet normal 0.196776 -0.980100 -0.026136 +outer loop +vertex 53.927742 -1.597909 2.166973 +vertex 53.356014 -1.733773 2.957440 +vertex 52.912369 -1.816551 2.721468 +endloop +endfacet +facet normal 0.216482 -0.954187 0.206548 +outer loop +vertex 54.051403 -1.504376 3.288356 +vertex 53.058926 -1.705439 3.399708 +vertex 53.356014 -1.733773 2.957440 +endloop +endfacet +facet normal 0.241005 -0.957672 0.157423 +outer loop +vertex 54.051403 -1.504376 3.288356 +vertex 53.356014 -1.733773 2.957440 +vertex 54.082394 -1.592369 2.705612 +endloop +endfacet +facet normal 0.074341 -0.953236 0.292942 +outer loop +vertex 48.166676 -2.000000 3.913223 +vertex 50.865349 -2.053394 3.054627 +vertex 51.965218 -1.882964 3.330094 +endloop +endfacet +facet normal 0.086768 -0.920736 0.380415 +outer loop +vertex 48.166676 -2.000000 3.913223 +vertex 51.965218 -1.882964 3.330094 +vertex 51.413963 -1.708487 3.878123 +endloop +endfacet +facet normal 0.122716 -0.991214 0.049349 +outer loop +vertex 50.865349 -2.053394 3.054627 +vertex 52.331310 -1.905801 2.373729 +vertex 52.912369 -1.816551 2.721468 +endloop +endfacet +facet normal 0.129476 -0.987138 0.093775 +outer loop +vertex 50.865349 -2.053394 3.054627 +vertex 52.912369 -1.816551 2.721468 +vertex 51.965218 -1.882964 3.330094 +endloop +endfacet +facet normal 0.120734 -0.904347 0.409365 +outer loop +vertex 51.413963 -1.708487 3.878123 +vertex 51.965218 -1.882964 3.330094 +vertex 53.058926 -1.705439 3.399708 +endloop +endfacet +facet normal 0.123844 -0.898992 0.420092 +outer loop +vertex 51.413963 -1.708487 3.878123 +vertex 53.058926 -1.705439 3.399708 +vertex 52.884544 -1.512283 3.864470 +endloop +endfacet +facet normal 0.055707 -0.905175 -0.421374 +outer loop +vertex 55.000004 -1.000000 1.024333 +vertex 55.000008 -1.281250 1.628500 +vertex 53.927742 -1.597909 2.166973 +endloop +endfacet +facet normal 0.267480 -0.933803 -0.237626 +outer loop +vertex 55.000004 -1.000000 1.024333 +vertex 53.927742 -1.597909 2.166973 +vertex 53.516243 -1.601796 1.719050 +endloop +endfacet +facet normal 0.183430 -0.975007 -0.125357 +outer loop +vertex 55.000008 -1.281250 1.628500 +vertex 55.000008 -1.375000 2.357667 +vertex 54.082394 -1.592369 2.705612 +endloop +endfacet +facet normal 0.253503 -0.965290 -0.062857 +outer loop +vertex 55.000008 -1.281250 1.628500 +vertex 54.082394 -1.592369 2.705612 +vertex 53.927742 -1.597909 2.166973 +endloop +endfacet +facet normal 0.143887 -0.981837 -0.123667 +outer loop +vertex 53.516243 -1.601796 1.719050 +vertex 53.927742 -1.597909 2.166973 +vertex 52.912369 -1.816551 2.721468 +endloop +endfacet +facet normal 0.202054 -0.975479 -0.087260 +outer loop +vertex 53.516243 -1.601796 1.719050 +vertex 52.912369 -1.816551 2.721468 +vertex 52.331310 -1.905801 2.373729 +endloop +endfacet +facet normal 0.280961 -0.863225 0.419408 +outer loop +vertex 55.000008 -1.000000 3.691000 +vertex 54.006409 -1.272369 3.796018 +vertex 54.051403 -1.504376 3.288356 +endloop +endfacet +facet normal 0.289890 -0.867655 0.403905 +outer loop +vertex 55.000008 -1.000000 3.691000 +vertex 54.051403 -1.504376 3.288356 +vertex 55.000008 -1.281250 3.086834 +endloop +endfacet +facet normal 0.213291 -0.871231 0.442113 +outer loop +vertex 54.006409 -1.272369 3.796018 +vertex 52.884544 -1.512283 3.864470 +vertex 53.058926 -1.705439 3.399708 +endloop +endfacet +facet normal 0.225243 -0.878447 0.421421 +outer loop +vertex 54.006409 -1.272369 3.796018 +vertex 53.058926 -1.705439 3.399708 +vertex 54.051403 -1.504376 3.288356 +endloop +endfacet +facet normal 0.257717 -0.953272 0.157650 +outer loop +vertex 55.000008 -1.281250 3.086834 +vertex 54.051403 -1.504376 3.288356 +vertex 54.082394 -1.592369 2.705612 +endloop +endfacet +facet normal 0.272575 -0.954280 0.122692 +outer loop +vertex 55.000008 -1.281250 3.086834 +vertex 54.082394 -1.592369 2.705612 +vertex 55.000008 -1.375000 2.357667 +endloop +endfacet +facet normal 0.167439 0.067301 0.983583 +outer loop +vertex 31.040508 -0.715920 7.494724 +vertex 35.292370 0.246160 6.705083 +vertex 33.537426 0.758488 6.968779 +endloop +endfacet +facet normal 0.181584 0.042938 0.982438 +outer loop +vertex 31.040508 -0.715920 7.494724 +vertex 33.537426 0.758488 6.968779 +vertex 30.348871 0.441312 7.571981 +endloop +endfacet +facet normal 0.181361 0.207236 0.961333 +outer loop +vertex 38.358265 1.213073 5.961304 +vertex 34.627728 1.534933 6.595708 +vertex 33.537426 0.758488 6.968779 +endloop +endfacet +facet normal 0.188967 0.147609 0.970826 +outer loop +vertex 38.358265 1.213073 5.961304 +vertex 33.537426 0.758488 6.968779 +vertex 35.292370 0.246160 6.705083 +endloop +endfacet +facet normal 0.173255 0.117851 0.977801 +outer loop +vertex 30.465677 1.665626 7.403723 +vertex 30.348871 0.441312 7.571981 +vertex 33.537426 0.758488 6.968779 +endloop +endfacet +facet normal 0.192844 0.191595 0.962342 +outer loop +vertex 30.465677 1.665626 7.403723 +vertex 33.537426 0.758488 6.968779 +vertex 34.627728 1.534933 6.595708 +endloop +endfacet +facet normal 0.164600 0.019458 0.986168 +outer loop +vertex 32.798649 -1.584844 7.157436 +vertex 37.555817 -0.354681 6.339149 +vertex 35.292370 0.246160 6.705083 +endloop +endfacet +facet normal 0.184416 -0.008358 0.982813 +outer loop +vertex 32.798649 -1.584844 7.157436 +vertex 35.292370 0.246160 6.705083 +vertex 31.040508 -0.715920 7.494724 +endloop +endfacet +facet normal 0.162435 0.031240 0.986225 +outer loop +vertex 26.000004 -1.750000 8.357668 +vertex 31.040508 -0.715920 7.494724 +vertex 30.348871 0.441312 7.571981 +endloop +endfacet +facet normal 0.177786 0.000000 0.984069 +outer loop +vertex 26.000004 -1.750000 8.357668 +vertex 30.348871 0.441312 7.571981 +vertex 26.000004 0.000000 8.357668 +endloop +endfacet +facet normal 0.148415 0.534277 0.832178 +outer loop +vertex 45.262634 1.792930 4.357667 +vertex 39.717136 2.070559 5.168432 +vertex 38.358265 1.213073 5.961304 +endloop +endfacet +facet normal 0.184967 0.343754 0.920663 +outer loop +vertex 45.262634 1.792930 4.357667 +vertex 38.358265 1.213073 5.961304 +vertex 41.577522 0.722469 5.497714 +endloop +endfacet +facet normal 0.177666 0.526795 0.831217 +outer loop +vertex 39.717136 2.070559 5.168432 +vertex 35.210911 2.342078 5.959519 +vertex 34.627728 1.534933 6.595708 +endloop +endfacet +facet normal 0.187058 0.490538 0.851106 +outer loop +vertex 39.717136 2.070559 5.168432 +vertex 34.627728 1.534933 6.595708 +vertex 38.358265 1.213073 5.961304 +endloop +endfacet +facet normal 0.169836 0.203241 0.964287 +outer loop +vertex 41.577522 0.722469 5.497714 +vertex 38.358265 1.213073 5.961304 +vertex 35.292370 0.246160 6.705083 +endloop +endfacet +facet normal 0.181541 0.087342 0.979497 +outer loop +vertex 41.577522 0.722469 5.497714 +vertex 35.292370 0.246160 6.705083 +vertex 37.555817 -0.354681 6.339149 +endloop +endfacet +facet normal 0.177787 0.000000 0.984069 +outer loop +vertex 26.000004 1.750000 8.357668 +vertex 26.000004 0.000000 8.357668 +vertex 30.348871 0.441312 7.571981 +endloop +endfacet +facet normal 0.209605 0.113473 0.971180 +outer loop +vertex 26.000004 1.750000 8.357668 +vertex 30.348871 0.441312 7.571981 +vertex 30.465677 1.665626 7.403723 +endloop +endfacet +facet normal 0.184607 0.437281 0.880174 +outer loop +vertex 30.651365 2.674705 6.863454 +vertex 30.465677 1.665626 7.403723 +vertex 34.627728 1.534933 6.595708 +endloop +endfacet +facet normal 0.202851 0.511551 0.834965 +outer loop +vertex 30.651365 2.674705 6.863454 +vertex 34.627728 1.534933 6.595708 +vertex 35.210911 2.342078 5.959519 +endloop +endfacet +facet normal 0.081666 0.991806 0.098240 +outer loop +vertex 38.388279 2.646122 4.363545 +vertex 35.528660 2.952158 3.651049 +vertex 33.655098 3.034144 4.380816 +endloop +endfacet +facet normal 0.081322 0.985299 0.150242 +outer loop +vertex 38.388279 2.646122 4.363545 +vertex 33.655098 3.034144 4.380816 +vertex 34.646252 2.840508 5.114205 +endloop +endfacet +facet normal 0.054177 0.997517 -0.044985 +outer loop +vertex 31.805523 3.078282 3.132048 +vertex 30.597834 3.201355 4.406643 +vertex 33.655098 3.034144 4.380816 +endloop +endfacet +facet normal 0.036450 0.999161 -0.018671 +outer loop +vertex 31.805523 3.078282 3.132048 +vertex 33.655098 3.034144 4.380816 +vertex 35.528660 2.952158 3.651049 +endloop +endfacet +facet normal 0.087986 0.986031 0.141429 +outer loop +vertex 30.497274 3.120947 5.740185 +vertex 34.646252 2.840508 5.114205 +vertex 33.655098 3.034144 4.380816 +endloop +endfacet +facet normal 0.055040 0.996416 0.064231 +outer loop +vertex 30.497274 3.120947 5.740185 +vertex 33.655098 3.034144 4.380816 +vertex 30.597834 3.201355 4.406643 +endloop +endfacet +facet normal 0.115900 0.931453 0.344909 +outer loop +vertex 45.262634 1.792930 4.357667 +vertex 41.623692 2.542653 3.555777 +vertex 38.388279 2.646122 4.363545 +endloop +endfacet +facet normal 0.110299 0.885594 0.451174 +outer loop +vertex 45.262634 1.792930 4.357667 +vertex 38.388279 2.646122 4.363545 +vertex 39.717136 2.070559 5.168432 +endloop +endfacet +facet normal 0.067884 0.995692 0.063155 +outer loop +vertex 41.623692 2.542653 3.555777 +vertex 37.925159 2.841050 2.826803 +vertex 35.528660 2.952158 3.651049 +endloop +endfacet +facet normal 0.068602 0.986544 0.148409 +outer loop +vertex 41.623692 2.542653 3.555777 +vertex 35.528660 2.952158 3.651049 +vertex 38.388279 2.646122 4.363545 +endloop +endfacet +facet normal 0.131547 0.896208 0.423683 +outer loop +vertex 39.717136 2.070559 5.168432 +vertex 38.388279 2.646122 4.363545 +vertex 34.646252 2.840508 5.114205 +endloop +endfacet +facet normal 0.130413 0.889713 0.437496 +outer loop +vertex 39.717136 2.070559 5.168432 +vertex 34.646252 2.840508 5.114205 +vertex 35.210911 2.342078 5.959519 +endloop +endfacet +facet normal 0.039131 0.932981 -0.357793 +outer loop +vertex 30.224367 2.412967 1.224249 +vertex 27.830294 3.080580 2.703281 +vertex 31.805523 3.078282 3.132048 +endloop +endfacet +facet normal -0.044689 0.954225 -0.295733 +outer loop +vertex 30.224367 2.412967 1.224249 +vertex 31.805523 3.078282 3.132048 +vertex 34.121059 2.869947 2.109917 +endloop +endfacet +facet normal 0.038652 0.990359 -0.133021 +outer loop +vertex 27.830294 3.080580 2.703281 +vertex 26.798485 3.337256 4.314457 +vertex 30.597834 3.201355 4.406643 +endloop +endfacet +facet normal 0.009935 0.996178 -0.086776 +outer loop +vertex 27.830294 3.080580 2.703281 +vertex 30.597834 3.201355 4.406643 +vertex 31.805523 3.078282 3.132048 +endloop +endfacet +facet normal 0.047068 0.994265 -0.096028 +outer loop +vertex 34.121059 2.869947 2.109917 +vertex 31.805523 3.078282 3.132048 +vertex 35.528660 2.952158 3.651049 +endloop +endfacet +facet normal 0.021258 0.997134 -0.072607 +outer loop +vertex 34.121059 2.869947 2.109917 +vertex 35.528660 2.952158 3.651049 +vertex 37.925159 2.841050 2.826803 +endloop +endfacet +facet normal 0.149574 0.892197 0.426161 +outer loop +vertex 30.651365 2.674705 6.863454 +vertex 35.210911 2.342078 5.959519 +vertex 34.646252 2.840508 5.114205 +endloop +endfacet +facet normal 0.116003 0.928432 0.352926 +outer loop +vertex 30.651365 2.674705 6.863454 +vertex 34.646252 2.840508 5.114205 +vertex 30.497274 3.120947 5.740185 +endloop +endfacet +facet normal 0.073450 0.995143 0.065542 +outer loop +vertex 26.406237 3.403702 6.031664 +vertex 30.497274 3.120947 5.740185 +vertex 30.597834 3.201355 4.406643 +endloop +endfacet +facet normal 0.036465 0.998875 -0.030321 +outer loop +vertex 26.406237 3.403702 6.031664 +vertex 30.597834 3.201355 4.406643 +vertex 26.798485 3.337256 4.314457 +endloop +endfacet +facet normal -0.040504 0.998778 -0.028303 +outer loop +vertex 21.356569 3.284150 6.661976 +vertex 19.487246 3.166282 5.177697 +vertex 18.679420 3.148952 5.722180 +endloop +endfacet +facet normal -0.045724 0.998864 -0.013447 +outer loop +vertex 21.356569 3.284150 6.661976 +vertex 18.679420 3.148952 5.722180 +vertex 19.461210 3.199903 6.848686 +endloop +endfacet +facet normal -0.036095 0.997273 -0.064373 +outer loop +vertex 17.431246 2.988852 3.941785 +vertex 17.108587 3.057137 5.180579 +vertex 18.679420 3.148952 5.722180 +endloop +endfacet +facet normal -0.055571 0.997166 -0.050709 +outer loop +vertex 17.431246 2.988852 3.941785 +vertex 18.679420 3.148952 5.722180 +vertex 19.487246 3.166282 5.177697 +endloop +endfacet +facet normal -0.045336 0.998878 -0.013715 +outer loop +vertex 17.307825 3.099989 6.690114 +vertex 19.461210 3.199903 6.848686 +vertex 18.679420 3.148952 5.722180 +endloop +endfacet +facet normal -0.050904 0.998469 -0.021626 +outer loop +vertex 17.307825 3.099989 6.690114 +vertex 18.679420 3.148952 5.722180 +vertex 17.108587 3.057137 5.180579 +endloop +endfacet +facet normal -0.044284 0.998359 -0.036314 +outer loop +vertex 22.875492 3.349853 6.092598 +vertex 20.559479 3.187713 4.459331 +vertex 19.487246 3.166282 5.177697 +endloop +endfacet +facet normal -0.049537 0.998629 -0.016914 +outer loop +vertex 22.875492 3.349853 6.092598 +vertex 19.487246 3.166282 5.177697 +vertex 21.356569 3.284150 6.661976 +endloop +endfacet +facet normal 0.027002 0.955533 -0.293645 +outer loop +vertex 15.508273 2.303025 1.533252 +vertex 15.109202 2.798170 3.107773 +vertex 17.431246 2.988852 3.941785 +endloop +endfacet +facet normal -0.116626 0.975840 -0.184755 +outer loop +vertex 15.508273 2.303025 1.533252 +vertex 17.431246 2.988852 3.941785 +vertex 18.347837 2.920243 3.000808 +endloop +endfacet +facet normal -0.034878 0.995267 -0.090702 +outer loop +vertex 15.109202 2.798170 3.107773 +vertex 15.010111 2.935162 4.649097 +vertex 17.108587 3.057137 5.180579 +endloop +endfacet +facet normal -0.056758 0.995953 -0.069682 +outer loop +vertex 15.109202 2.798170 3.107773 +vertex 17.108587 3.057137 5.180579 +vertex 17.431246 2.988852 3.941785 +endloop +endfacet +facet normal -0.026645 0.994781 -0.098487 +outer loop +vertex 18.347837 2.920243 3.000808 +vertex 17.431246 2.988852 3.941785 +vertex 19.487246 3.166282 5.177697 +endloop +endfacet +facet normal -0.070482 0.994650 -0.075527 +outer loop +vertex 18.347837 2.920243 3.000808 +vertex 19.487246 3.166282 5.177697 +vertex 20.559479 3.187713 4.459331 +endloop +endfacet +facet normal -0.152667 0.987945 0.025655 +outer loop +vertex 15.458333 2.770834 8.357668 +vertex 15.538307 2.783193 8.357668 +vertex 15.527117 2.781798 8.344819 +endloop +endfacet +facet normal -0.134205 0.983559 0.120833 +outer loop +vertex 15.458333 2.770834 8.357668 +vertex 15.527117 2.781798 8.344819 +vertex 15.437763 2.799557 8.101022 +endloop +endfacet +facet normal -0.056032 0.998429 -0.000117 +outer loop +vertex 17.658047 3.119799 8.010885 +vertex 17.307825 3.099989 6.690114 +vertex 14.959599 2.968169 6.376157 +endloop +endfacet +facet normal -0.149732 0.976245 0.156610 +outer loop +vertex 17.098806 3.033245 8.015749 +vertex 17.658047 3.119799 8.010885 +vertex 14.959599 2.968169 6.376157 +endloop +endfacet +facet normal -0.071194 0.990627 0.116577 +outer loop +vertex 14.959599 2.968169 6.376157 +vertex 15.458333 2.770834 8.357668 +vertex 15.437763 2.799557 8.101022 +endloop +endfacet +facet normal -0.146431 0.977434 0.152256 +outer loop +vertex 16.196001 2.892864 8.048681 +vertex 17.098806 3.033245 8.015749 +vertex 14.959599 2.968169 6.376157 +endloop +endfacet +facet normal -0.112465 0.985441 0.127508 +outer loop +vertex 15.437763 2.799557 8.101022 +vertex 16.196001 2.892864 8.048681 +vertex 14.959599 2.968169 6.376157 +endloop +endfacet +facet normal -0.053193 0.998357 -0.021320 +outer loop +vertex 14.959599 2.968169 6.376157 +vertex 17.307825 3.099989 6.690114 +vertex 17.108587 3.057137 5.180579 +endloop +endfacet +facet normal -0.052808 0.998392 -0.020625 +outer loop +vertex 14.959599 2.968169 6.376157 +vertex 17.108587 3.057137 5.180579 +vertex 15.010111 2.935162 4.649097 +endloop +endfacet +facet normal 0.000002 0.000000 1.000000 +outer loop +vertex 15.000001 -1.500000 8.357668 +vertex 15.458335 -2.770834 8.357668 +vertex 15.533590 -2.727700 8.357668 +endloop +endfacet +facet normal -0.000003 0.000000 1.000000 +outer loop +vertex 15.000001 -1.500000 8.357668 +vertex 15.533590 -2.727700 8.357668 +vertex 15.518668 -2.552154 8.357668 +endloop +endfacet +facet normal 0.000002 0.000000 1.000000 +outer loop +vertex 15.434759 -1.559115 8.357668 +vertex 15.427221 -1.296539 8.357668 +vertex 15.000001 -1.500000 8.357668 +endloop +endfacet +facet normal 0.000003 0.000000 1.000000 +outer loop +vertex 15.518668 -2.552154 8.357668 +vertex 15.434759 -1.559115 8.357668 +vertex 15.000001 -1.500000 8.357668 +endloop +endfacet +facet normal -0.000001 0.000000 1.000000 +outer loop +vertex 15.000001 0.000000 8.357668 +vertex 15.000001 -1.500000 8.357668 +vertex 15.427221 -1.296539 8.357668 +endloop +endfacet +facet normal 0.000005 0.000000 1.000000 +outer loop +vertex 15.000001 0.000000 8.357668 +vertex 15.427221 -1.296539 8.357668 +vertex 15.402760 -0.736852 8.357668 +endloop +endfacet +facet normal 0.000000 0.000000 1.000000 +outer loop +vertex 15.398325 0.000000 8.357668 +vertex 15.399197 0.125639 8.357668 +vertex 15.000001 0.000000 8.357668 +endloop +endfacet +facet normal 0.000000 0.000000 1.000000 +outer loop +vertex 15.402760 -0.736852 8.357668 +vertex 15.398325 0.000000 8.357668 +vertex 15.000001 0.000000 8.357668 +endloop +endfacet +facet normal 0.000000 0.000000 1.000000 +outer loop +vertex 15.538307 2.783193 8.357668 +vertex 15.458333 2.770834 8.357668 +vertex 15.000001 1.500000 8.357668 +endloop +endfacet +facet normal 0.000000 0.000000 1.000000 +outer loop +vertex 15.000001 1.500000 8.357668 +vertex 15.435318 1.565411 8.357668 +vertex 15.518668 2.552154 8.357668 +endloop +endfacet +facet normal -0.000007 0.000000 1.000000 +outer loop +vertex 15.000001 1.500000 8.357668 +vertex 15.518668 2.552154 8.357668 +vertex 15.538307 2.783193 8.357668 +endloop +endfacet +facet normal 0.000000 0.000000 1.000000 +outer loop +vertex 15.435318 1.565411 8.357668 +vertex 15.000001 1.500000 8.357668 +vertex 15.000001 0.000000 8.357668 +endloop +endfacet +facet normal 0.000000 0.000000 1.000000 +outer loop +vertex 15.000001 0.000000 8.357668 +vertex 15.399197 0.125639 8.357668 +vertex 15.402760 0.736852 8.357668 +endloop +endfacet +facet normal 0.000000 0.000000 1.000000 +outer loop +vertex 15.434760 1.559115 8.357668 +vertex 15.435318 1.565411 8.357668 +vertex 15.000001 0.000000 8.357668 +endloop +endfacet +facet normal 0.000003 0.000000 1.000000 +outer loop +vertex 15.000001 0.000000 8.357668 +vertex 15.402760 0.736852 8.357668 +vertex 15.434760 1.559115 8.357668 +endloop +endfacet +facet normal 0.000078 0.016928 -0.999857 +outer loop +vertex 43.736702 0.010560 0.445198 +vertex 40.305779 0.778190 0.457927 +vertex 42.050312 1.064699 0.462914 +endloop +endfacet +facet normal -0.006061 0.007108 -0.999956 +outer loop +vertex 43.736702 0.010560 0.445198 +vertex 42.050312 1.064699 0.462914 +vertex 44.715622 0.691151 0.444102 +endloop +endfacet +facet normal -0.010645 0.174425 -0.984613 +outer loop +vertex 37.501717 1.626225 0.611567 +vertex 41.149567 1.655752 0.577358 +vertex 42.050312 1.064699 0.462914 +endloop +endfacet +facet normal -0.017296 0.122588 -0.992307 +outer loop +vertex 37.501717 1.626225 0.611567 +vertex 42.050312 1.064699 0.462914 +vertex 40.305779 0.778190 0.457927 +endloop +endfacet +facet normal 0.015202 0.158187 -0.987292 +outer loop +vertex 44.902733 1.422932 0.564232 +vertex 44.715622 0.691151 0.444102 +vertex 42.050312 1.064699 0.462914 +endloop +endfacet +facet normal 0.009205 0.203594 -0.979012 +outer loop +vertex 44.902733 1.422932 0.564232 +vertex 42.050312 1.064699 0.462914 +vertex 41.149567 1.655752 0.577358 +endloop +endfacet +facet normal 0.023074 -0.155230 -0.987609 +outer loop +vertex 45.986675 -1.473333 0.731000 +vertex 41.912167 -0.620574 0.501772 +vertex 43.736702 0.010560 0.445198 +endloop +endfacet +facet normal -0.024671 -0.225012 -0.974044 +outer loop +vertex 45.986675 -1.473333 0.731000 +vertex 43.736702 0.010560 0.445198 +vertex 47.104279 -0.592443 0.499200 +endloop +endfacet +facet normal 0.001842 -0.029217 -0.999571 +outer loop +vertex 41.912167 -0.620574 0.501772 +vertex 38.036938 0.306147 0.467543 +vertex 40.305779 0.778190 0.457927 +endloop +endfacet +facet normal -0.014413 -0.047859 -0.998750 +outer loop +vertex 41.912167 -0.620574 0.501772 +vertex 40.305779 0.778190 0.457927 +vertex 43.736702 0.010560 0.445198 +endloop +endfacet +facet normal 0.012519 -0.019616 -0.999729 +outer loop +vertex 47.104279 -0.592443 0.499200 +vertex 43.736702 0.010560 0.445198 +vertex 44.715622 0.691151 0.444102 +endloop +endfacet +facet normal -0.008058 -0.057846 -0.998293 +outer loop +vertex 47.104279 -0.592443 0.499200 +vertex 44.715622 0.691151 0.444102 +vertex 47.743988 0.219856 0.446967 +endloop +endfacet +facet normal -0.034582 0.395028 -0.918018 +outer loop +vertex 30.224367 2.412967 1.224249 +vertex 36.144936 2.362384 0.979452 +vertex 37.501717 1.626225 0.611567 +endloop +endfacet +facet normal -0.039478 0.360558 -0.931901 +outer loop +vertex 30.224367 2.412967 1.224249 +vertex 37.501717 1.626225 0.611567 +vertex 34.217098 1.287853 0.619794 +endloop +endfacet +facet normal -0.010260 0.438657 -0.898596 +outer loop +vertex 36.144936 2.362384 0.979452 +vertex 40.623978 2.257716 0.877214 +vertex 41.149567 1.655752 0.577358 +endloop +endfacet +facet normal -0.011944 0.429291 -0.903087 +outer loop +vertex 36.144936 2.362384 0.979452 +vertex 41.149567 1.655752 0.577358 +vertex 37.501717 1.626225 0.611567 +endloop +endfacet +facet normal -0.015658 0.127888 -0.991665 +outer loop +vertex 34.217098 1.287853 0.619794 +vertex 37.501717 1.626225 0.611567 +vertex 40.305779 0.778190 0.457927 +endloop +endfacet +facet normal -0.020111 0.076352 -0.996878 +outer loop +vertex 34.217098 1.287853 0.619794 +vertex 40.305779 0.778190 0.457927 +vertex 38.036938 0.306147 0.467543 +endloop +endfacet +facet normal 0.041462 0.392034 -0.919016 +outer loop +vertex 49.363640 1.792930 0.923323 +vertex 48.246258 1.017376 0.542076 +vertex 44.902733 1.422932 0.564232 +endloop +endfacet +facet normal 0.035618 0.440952 -0.896824 +outer loop +vertex 49.363640 1.792930 0.923323 +vertex 44.902733 1.422932 0.564232 +vertex 44.908054 2.060014 0.877686 +endloop +endfacet +facet normal 0.017659 0.107426 -0.994056 +outer loop +vertex 48.246258 1.017376 0.542076 +vertex 47.743988 0.219856 0.446967 +vertex 44.715622 0.691151 0.444102 +endloop +endfacet +facet normal 0.012721 0.158811 -0.987227 +outer loop +vertex 48.246258 1.017376 0.542076 +vertex 44.715622 0.691151 0.444102 +vertex 44.902733 1.422932 0.564232 +endloop +endfacet +facet normal 0.024230 0.441181 -0.897091 +outer loop +vertex 44.908054 2.060014 0.877686 +vertex 44.902733 1.422932 0.564232 +vertex 41.149567 1.655752 0.577358 +endloop +endfacet +facet normal 0.021356 0.460648 -0.887326 +outer loop +vertex 44.908054 2.060014 0.877686 +vertex 41.149567 1.655752 0.577358 +vertex 40.623978 2.257716 0.877214 +endloop +endfacet +facet normal 0.050301 -0.995695 -0.077854 +outer loop +vertex 44.083652 -2.607777 2.596714 +vertex 40.060291 -2.776363 2.153366 +vertex 41.591160 -2.669416 1.774674 +endloop +endfacet +facet normal 0.045011 -0.997079 -0.061711 +outer loop +vertex 44.083652 -2.607777 2.596714 +vertex 41.591160 -2.669416 1.774674 +vertex 44.463726 -2.547658 1.902582 +endloop +endfacet +facet normal 0.024502 -0.939142 -0.342654 +outer loop +vertex 36.286263 -2.738104 1.583596 +vertex 39.933842 -2.550894 1.331318 +vertex 41.591160 -2.669416 1.774674 +endloop +endfacet +facet normal 0.019783 -0.980233 -0.196857 +outer loop +vertex 36.286263 -2.738104 1.583596 +vertex 41.591160 -2.669416 1.774674 +vertex 40.060291 -2.776363 2.153366 +endloop +endfacet +facet normal 0.056317 -0.919188 -0.389771 +outer loop +vertex 43.666763 -2.336409 1.289248 +vertex 44.463726 -2.547658 1.902582 +vertex 41.591160 -2.669416 1.774674 +endloop +endfacet +facet normal 0.047362 -0.906565 -0.419399 +outer loop +vertex 43.666763 -2.336409 1.289248 +vertex 41.591160 -2.669416 1.774674 +vertex 39.933842 -2.550894 1.331318 +endloop +endfacet +facet normal 0.091668 -0.981384 0.168765 +outer loop +vertex 48.166676 -2.000000 3.913223 +vertex 42.552837 -2.614465 3.389307 +vertex 44.083652 -2.607777 2.596714 +endloop +endfacet +facet normal 0.050249 -0.956931 0.285932 +outer loop +vertex 48.166676 -2.000000 3.913223 +vertex 44.083652 -2.607777 2.596714 +vertex 47.784302 -2.359905 2.775923 +endloop +endfacet +facet normal 0.052838 -0.998310 0.024212 +outer loop +vertex 42.552837 -2.614465 3.389307 +vertex 37.887997 -2.875850 2.791907 +vertex 40.060291 -2.776363 2.153366 +endloop +endfacet +facet normal 0.035231 -0.997599 0.059627 +outer loop +vertex 42.552837 -2.614465 3.389307 +vertex 40.060291 -2.776363 2.153366 +vertex 44.083652 -2.607777 2.596714 +endloop +endfacet +facet normal 0.069089 -0.996432 -0.048472 +outer loop +vertex 47.784302 -2.359905 2.775923 +vertex 44.083652 -2.607777 2.596714 +vertex 44.463726 -2.547658 1.902582 +endloop +endfacet +facet normal 0.060172 -0.998087 -0.014212 +outer loop +vertex 47.784302 -2.359905 2.775923 +vertex 44.463726 -2.547658 1.902582 +vertex 47.610008 -2.359042 1.977433 +endloop +endfacet +facet normal -0.003913 -0.823107 -0.567873 +outer loop +vertex 26.752544 -2.589665 1.434137 +vertex 33.108257 -2.339576 1.027848 +vertex 36.286263 -2.738104 1.583596 +endloop +endfacet +facet normal -0.008918 -0.933554 -0.358327 +outer loop +vertex 26.752544 -2.589665 1.434137 +vertex 36.286263 -2.738104 1.583596 +vertex 33.042091 -2.926533 2.155251 +endloop +endfacet +facet normal 0.007482 -0.733841 -0.679280 +outer loop +vertex 33.108257 -2.339576 1.027848 +vertex 37.724285 -2.146670 0.870290 +vertex 39.933842 -2.550894 1.331318 +endloop +endfacet +facet normal 0.001003 -0.809926 -0.586532 +outer loop +vertex 33.108257 -2.339576 1.027848 +vertex 39.933842 -2.550894 1.331318 +vertex 36.286263 -2.738104 1.583596 +endloop +endfacet +facet normal 0.020887 -0.978733 -0.204074 +outer loop +vertex 33.042091 -2.926533 2.155251 +vertex 36.286263 -2.738104 1.583596 +vertex 40.060291 -2.776363 2.153366 +endloop +endfacet +facet normal 0.021297 -0.996340 -0.082783 +outer loop +vertex 33.042091 -2.926533 2.155251 +vertex 40.060291 -2.776363 2.153366 +vertex 37.887997 -2.875850 2.791907 +endloop +endfacet +facet normal 0.040971 -0.617963 -0.785139 +outer loop +vertex 45.986675 -1.473333 0.731000 +vertex 47.087532 -2.123862 1.300462 +vertex 43.666763 -2.336409 1.289248 +endloop +endfacet +facet normal 0.045439 -0.625789 -0.778668 +outer loop +vertex 45.986675 -1.473333 0.731000 +vertex 43.666763 -2.336409 1.289248 +vertex 41.873085 -1.866991 0.807323 +endloop +endfacet +facet normal 0.064363 -0.926222 -0.371443 +outer loop +vertex 47.087532 -2.123862 1.300462 +vertex 47.610008 -2.359042 1.977433 +vertex 44.463726 -2.547658 1.902582 +endloop +endfacet +facet normal 0.058331 -0.918106 -0.392018 +outer loop +vertex 47.087532 -2.123862 1.300462 +vertex 44.463726 -2.547658 1.902582 +vertex 43.666763 -2.336409 1.289248 +endloop +endfacet +facet normal 0.029403 -0.659127 -0.751457 +outer loop +vertex 41.873085 -1.866991 0.807323 +vertex 43.666763 -2.336409 1.289248 +vertex 39.933842 -2.550894 1.331318 +endloop +endfacet +facet normal 0.033597 -0.666132 -0.745077 +outer loop +vertex 41.873085 -1.866991 0.807323 +vertex 39.933842 -2.550894 1.331318 +vertex 37.724285 -2.146670 0.870290 +endloop +endfacet +facet normal 1.000000 -0.000008 0.000002 +outer loop +vertex 55.000004 -0.761863 2.546710 +vertex 55.000004 -0.868634 1.982474 +vertex 55.000008 -0.484375 1.711834 +endloop +endfacet +facet normal 1.000000 0.000016 0.000007 +outer loop +vertex 55.000004 -0.761863 2.546710 +vertex 55.000008 -0.484375 1.711834 +vertex 55.000004 -0.281395 1.982474 +endloop +endfacet +facet normal 1.000000 0.000000 0.000000 +outer loop +vertex 55.000008 -0.767072 1.334905 +vertex 55.000008 -0.281395 1.199488 +vertex 55.000008 -0.484375 1.711834 +endloop +endfacet +facet normal 1.000000 -0.000009 0.000005 +outer loop +vertex 55.000008 -0.767072 1.334905 +vertex 55.000008 -0.484375 1.711834 +vertex 55.000004 -0.868634 1.982474 +endloop +endfacet +facet normal 1.000000 0.000016 0.000007 +outer loop +vertex 55.000004 0.141782 1.341849 +vertex 55.000004 -0.281395 1.982474 +vertex 55.000008 -0.484375 1.711834 +endloop +endfacet +facet normal 1.000000 0.000000 0.000003 +outer loop +vertex 55.000004 0.141782 1.341849 +vertex 55.000008 -0.484375 1.711834 +vertex 55.000008 -0.281395 1.199488 +endloop +endfacet +facet normal 1.000000 0.000016 -0.000002 +outer loop +vertex 55.000008 -1.000000 3.691000 +vertex 55.000008 -1.281250 3.086834 +vertex 55.000004 -0.761863 2.546710 +endloop +endfacet +facet normal 1.000000 -0.000009 -0.000005 +outer loop +vertex 55.000008 -1.000000 3.691000 +vertex 55.000004 -0.761863 2.546710 +vertex 55.000008 -0.500000 3.024334 +endloop +endfacet +facet normal 1.000000 0.000009 -0.000001 +outer loop +vertex 55.000008 -1.281250 3.086834 +vertex 55.000008 -1.375000 2.357667 +vertex 55.000004 -0.868634 1.982474 +endloop +endfacet +facet normal 1.000000 0.000000 -0.000001 +outer loop +vertex 55.000008 -1.281250 3.086834 +vertex 55.000004 -0.868634 1.982474 +vertex 55.000004 -0.761863 2.546710 +endloop +endfacet +facet normal 1.000000 -0.000020 -0.000005 +outer loop +vertex 55.000008 -0.500000 3.024334 +vertex 55.000004 -0.761863 2.546710 +vertex 55.000004 -0.281395 1.982474 +endloop +endfacet +facet normal 1.000000 0.000000 -0.000003 +outer loop +vertex 55.000008 -0.500000 3.024334 +vertex 55.000004 -0.281395 1.982474 +vertex 55.000004 0.000000 2.357667 +endloop +endfacet +facet normal 1.000000 0.000000 -0.000004 +outer loop +vertex 55.000004 -1.000000 1.024333 +vertex 55.000008 -0.546875 0.649334 +vertex 55.000008 -0.767072 1.334905 +endloop +endfacet +facet normal 1.000000 0.000017 -0.000009 +outer loop +vertex 55.000004 -1.000000 1.024333 +vertex 55.000008 -0.767072 1.334905 +vertex 55.000008 -1.281250 1.628500 +endloop +endfacet +facet normal 1.000000 0.000000 0.000000 +outer loop +vertex 55.000008 -0.546875 0.649334 +vertex 55.000008 0.000000 0.524334 +vertex 55.000008 -0.281395 1.199488 +endloop +endfacet +facet normal 1.000000 -0.000003 0.000000 +outer loop +vertex 55.000008 -0.546875 0.649334 +vertex 55.000008 -0.281395 1.199488 +vertex 55.000008 -0.767072 1.334905 +endloop +endfacet +facet normal 1.000000 0.000025 0.000006 +outer loop +vertex 55.000008 -1.281250 1.628500 +vertex 55.000008 -0.767072 1.334905 +vertex 55.000004 -0.868634 1.982474 +endloop +endfacet +facet normal 1.000000 0.000011 0.000001 +outer loop +vertex 55.000008 -1.281250 1.628500 +vertex 55.000004 -0.868634 1.982474 +vertex 55.000008 -1.375000 2.357667 +endloop +endfacet +facet normal 1.000000 0.000009 -0.000005 +outer loop +vertex 55.000008 1.000000 1.024334 +vertex 55.000008 0.500000 1.691000 +vertex 55.000004 0.141782 1.341849 +endloop +endfacet +facet normal 1.000000 0.000000 0.000004 +outer loop +vertex 55.000008 1.000000 1.024334 +vertex 55.000004 0.141782 1.341849 +vertex 55.000008 0.546875 0.649334 +endloop +endfacet +facet normal 1.000000 -0.000010 0.000003 +outer loop +vertex 55.000008 0.500000 1.691000 +vertex 55.000004 0.000000 2.357667 +vertex 55.000004 -0.281395 1.982474 +endloop +endfacet +facet normal 1.000000 -0.000020 -0.000004 +outer loop +vertex 55.000008 0.500000 1.691000 +vertex 55.000004 -0.281395 1.982474 +vertex 55.000004 0.141782 1.341849 +endloop +endfacet +facet normal 1.000000 0.000003 0.000009 +outer loop +vertex 55.000008 0.546875 0.649334 +vertex 55.000004 0.141782 1.341849 +vertex 55.000008 -0.281395 1.199488 +endloop +endfacet +facet normal 1.000000 0.000000 0.000000 +outer loop +vertex 55.000008 0.546875 0.649334 +vertex 55.000008 -0.281395 1.199488 +vertex 55.000008 0.000000 0.524334 +endloop +endfacet +facet normal -0.347592 -0.937177 0.029666 +outer loop +vertex 0.871076 -2.176219 3.139536 +vertex 0.727360 -2.144018 2.472892 +vertex 1.043808 -2.271605 2.150067 +endloop +endfacet +facet normal -0.280931 -0.958747 0.043383 +outer loop +vertex 0.871076 -2.176219 3.139536 +vertex 1.043808 -2.271605 2.150067 +vertex 1.281674 -2.327258 2.460489 +endloop +endfacet +facet normal -0.483806 -0.826760 -0.287052 +outer loop +vertex 0.725749 -1.969235 1.815254 +vertex 1.173840 -2.160953 1.612211 +vertex 1.043808 -2.271605 2.150067 +endloop +endfacet +facet normal -0.545184 -0.810521 -0.214080 +outer loop +vertex 0.725749 -1.969235 1.815254 +vertex 1.043808 -2.271605 2.150067 +vertex 0.727360 -2.144018 2.472892 +endloop +endfacet +facet normal -0.039823 -0.988382 -0.146683 +outer loop +vertex 1.698624 -2.233000 1.712161 +vertex 1.281674 -2.327258 2.460489 +vertex 1.043808 -2.271605 2.150067 +endloop +endfacet +facet normal -0.091052 -0.970845 -0.221743 +outer loop +vertex 1.698624 -2.233000 1.712161 +vertex 1.043808 -2.271605 2.150067 +vertex 1.173840 -2.160953 1.612211 +endloop +endfacet +facet normal -0.445325 -0.830489 0.334624 +outer loop +vertex 0.840000 -1.566667 4.611000 +vertex 0.535608 -1.766233 3.710613 +vertex 0.871076 -2.176219 3.139536 +endloop +endfacet +facet normal -0.620246 -0.729234 0.288985 +outer loop +vertex 0.840000 -1.566667 4.611000 +vertex 0.871076 -2.176219 3.139536 +vertex 1.143440 -2.154511 3.778884 +endloop +endfacet +facet normal -0.650841 -0.748414 0.127605 +outer loop +vertex 0.535608 -1.766233 3.710613 +vertex 0.406945 -1.789352 2.918778 +vertex 0.727360 -2.144018 2.472892 +endloop +endfacet +facet normal -0.685904 -0.718842 0.113147 +outer loop +vertex 0.535608 -1.766233 3.710613 +vertex 0.727360 -2.144018 2.472892 +vertex 0.871076 -2.176219 3.139536 +endloop +endfacet +facet normal -0.178805 -0.977787 0.109370 +outer loop +vertex 1.143440 -2.154511 3.778884 +vertex 0.871076 -2.176219 3.139536 +vertex 1.281674 -2.327258 2.460489 +endloop +endfacet +facet normal -0.207227 -0.972565 0.105706 +outer loop +vertex 1.143440 -2.154511 3.778884 +vertex 1.281674 -2.327258 2.460489 +vertex 1.609877 -2.343493 2.954529 +endloop +endfacet +facet normal -0.836686 -0.437568 -0.329379 +outer loop +vertex 0.388889 -1.203704 1.653963 +vertex 0.752797 -1.601241 1.257680 +vertex 0.725749 -1.969235 1.815254 +endloop +endfacet +facet normal -0.841795 -0.437141 -0.316685 +outer loop +vertex 0.388889 -1.203704 1.653963 +vertex 0.725749 -1.969235 1.815254 +vertex 0.380729 -1.598091 2.220051 +endloop +endfacet +facet normal -0.501130 -0.699600 -0.509341 +outer loop +vertex 0.752797 -1.601241 1.257680 +vertex 1.258488 -1.814558 1.053140 +vertex 1.173840 -2.160953 1.612211 +endloop +endfacet +facet normal -0.520777 -0.700671 -0.487700 +outer loop +vertex 0.752797 -1.601241 1.257680 +vertex 1.173840 -2.160953 1.612211 +vertex 0.725749 -1.969235 1.815254 +endloop +endfacet +facet normal -0.801061 -0.578984 -0.151916 +outer loop +vertex 0.380729 -1.598091 2.220051 +vertex 0.725749 -1.969235 1.815254 +vertex 0.727360 -2.144018 2.472892 +endloop +endfacet +facet normal -0.809904 -0.572781 -0.126400 +outer loop +vertex 0.380729 -1.598091 2.220051 +vertex 0.727360 -2.144018 2.472892 +vertex 0.406945 -1.789352 2.918778 +endloop +endfacet +facet normal 0.138145 -0.943925 -0.299870 +outer loop +vertex 3.212122 -1.828283 1.135445 +vertex 2.251229 -2.276334 2.103142 +vertex 1.698624 -2.233000 1.712161 +endloop +endfacet +facet normal 0.054306 -0.878761 -0.474162 +outer loop +vertex 3.212122 -1.828283 1.135445 +vertex 1.698624 -2.233000 1.712161 +vertex 1.937340 -1.854676 1.038357 +endloop +endfacet +facet normal 0.032398 -0.997998 -0.054319 +outer loop +vertex 2.251229 -2.276334 2.103142 +vertex 1.609877 -2.343493 2.954529 +vertex 1.281674 -2.327258 2.460489 +endloop +endfacet +facet normal 0.007619 -0.992649 -0.120787 +outer loop +vertex 2.251229 -2.276334 2.103142 +vertex 1.281674 -2.327258 2.460489 +vertex 1.698624 -2.233000 1.712161 +endloop +endfacet +facet normal -0.024677 -0.867934 -0.496066 +outer loop +vertex 1.937340 -1.854676 1.038357 +vertex 1.698624 -2.233000 1.712161 +vertex 1.173840 -2.160953 1.612211 +endloop +endfacet +facet normal -0.061487 -0.844255 -0.532402 +outer loop +vertex 1.937340 -1.854676 1.038357 +vertex 1.173840 -2.160953 1.612211 +vertex 1.258488 -1.814558 1.053140 +endloop +endfacet +facet normal -0.989048 0.147517 -0.004837 +outer loop +vertex 0.194890 1.137827 2.886624 +vertex 0.213908 1.243482 2.220033 +vertex 0.139063 0.736111 2.050549 +endloop +endfacet +facet normal -0.992676 0.120519 0.008377 +outer loop +vertex 0.194890 1.137827 2.886624 +vertex 0.139063 0.736111 2.050549 +vertex 0.108548 0.460785 2.395634 +endloop +endfacet +facet normal -0.955710 0.170720 -0.239736 +outer loop +vertex 0.318853 1.047687 1.555693 +vertex 0.206508 0.432790 1.565678 +vertex 0.139063 0.736111 2.050549 +endloop +endfacet +facet normal -0.953775 0.211887 -0.213113 +outer loop +vertex 0.318853 1.047687 1.555693 +vertex 0.139063 0.736111 2.050549 +vertex 0.213908 1.243482 2.220033 +endloop +endfacet +facet normal -0.995369 -0.009567 -0.095650 +outer loop +vertex 0.171337 -0.132326 1.801552 +vertex 0.108548 0.460785 2.395634 +vertex 0.139063 0.736111 2.050549 +endloop +endfacet +facet normal -0.990176 0.003280 -0.139785 +outer loop +vertex 0.171337 -0.132326 1.801552 +vertex 0.139063 0.736111 2.050549 +vertex 0.206508 0.432790 1.565678 +endloop +endfacet +facet normal -0.936978 0.296676 0.184540 +outer loop +vertex 0.560000 1.566667 4.051001 +vertex 0.440260 1.766233 3.122204 +vertex 0.194890 1.137827 2.886624 +endloop +endfacet +facet normal -0.938109 0.291692 0.186730 +outer loop +vertex 0.560000 1.566667 4.051001 +vertex 0.194890 1.137827 2.886624 +vertex 0.208924 0.785330 3.507765 +endloop +endfacet +facet normal -0.933334 0.358014 0.026725 +outer loop +vertex 0.440260 1.766233 3.122204 +vertex 0.426389 1.789352 2.328038 +vertex 0.213908 1.243482 2.220033 +endloop +endfacet +facet normal -0.934793 0.353970 0.029434 +outer loop +vertex 0.440260 1.766233 3.122204 +vertex 0.213908 1.243482 2.220033 +vertex 0.194890 1.137827 2.886624 +endloop +endfacet +facet normal -0.994680 0.078319 0.066920 +outer loop +vertex 0.208924 0.785330 3.507765 +vertex 0.194890 1.137827 2.886624 +vertex 0.108548 0.460785 2.395634 +endloop +endfacet +facet normal -0.994693 0.078095 0.066986 +outer loop +vertex 0.208924 0.785330 3.507765 +vertex 0.108548 0.460785 2.395634 +vertex 0.106944 0.041667 2.860445 +endloop +endfacet +facet normal -0.767130 0.340593 -0.543606 +outer loop +vertex 0.777778 1.203704 1.005815 +vertex 0.539062 0.645255 0.992794 +vertex 0.318853 1.047687 1.555693 +endloop +endfacet +facet normal -0.765771 0.349253 -0.540016 +outer loop +vertex 0.777778 1.203704 1.005815 +vertex 0.318853 1.047687 1.555693 +vertex 0.541146 1.598091 1.596440 +endloop +endfacet +facet normal -0.878046 0.142192 -0.456964 +outer loop +vertex 0.539062 0.645255 0.992794 +vertex 0.409722 -0.000000 1.040537 +vertex 0.206508 0.432790 1.565678 +endloop +endfacet +facet normal -0.878248 0.153103 -0.453035 +outer loop +vertex 0.539062 0.645255 0.992794 +vertex 0.206508 0.432790 1.565678 +vertex 0.318853 1.047687 1.555693 +endloop +endfacet +facet normal -0.890632 0.378373 -0.252206 +outer loop +vertex 0.541146 1.598091 1.596440 +vertex 0.318853 1.047687 1.555693 +vertex 0.213908 1.243482 2.220033 +endloop +endfacet +facet normal -0.887071 0.393161 -0.241929 +outer loop +vertex 0.541146 1.598091 1.596440 +vertex 0.213908 1.243482 2.220033 +vertex 0.426389 1.789352 2.328038 +endloop +endfacet +facet normal -0.964031 -0.167303 -0.206530 +outer loop +vertex 0.388889 -1.203704 1.653963 +vertex 0.171354 -0.640046 2.212759 +vertex 0.171337 -0.132326 1.801552 +endloop +endfacet +facet normal -0.962614 -0.165977 -0.214069 +outer loop +vertex 0.388889 -1.203704 1.653963 +vertex 0.171337 -0.132326 1.801552 +vertex 0.381076 -0.645255 1.256104 +endloop +endfacet +facet normal -0.997662 -0.049007 -0.047631 +outer loop +vertex 0.171354 -0.640046 2.212759 +vertex 0.106944 0.041667 2.860445 +vertex 0.108548 0.460785 2.395634 +endloop +endfacet +facet normal -0.997185 -0.047215 -0.058256 +outer loop +vertex 0.171354 -0.640046 2.212759 +vertex 0.108548 0.460785 2.395634 +vertex 0.171337 -0.132326 1.801552 +endloop +endfacet +facet normal -0.950782 -0.067091 -0.302510 +outer loop +vertex 0.381076 -0.645255 1.256104 +vertex 0.171337 -0.132326 1.801552 +vertex 0.206508 0.432790 1.565678 +endloop +endfacet +facet normal -0.947141 -0.063041 -0.314562 +outer loop +vertex 0.381076 -0.645255 1.256104 +vertex 0.206508 0.432790 1.565678 +vertex 0.409722 -0.000000 1.040537 +endloop +endfacet +facet normal 0.176119 0.983530 0.040642 +outer loop +vertex 53.935028 1.596290 2.549231 +vertex 54.087021 1.591341 2.010366 +vertex 53.385422 1.727238 1.761988 +endloop +endfacet +facet normal 0.195731 0.980302 0.026412 +outer loop +vertex 53.935028 1.596290 2.549231 +vertex 53.385422 1.727238 1.761988 +vertex 52.969688 1.803813 2.000689 +endloop +endfacet +facet normal 0.215299 0.954276 -0.207373 +outer loop +vertex 54.058685 1.502757 1.427992 +vertex 53.116249 1.692702 1.323606 +vertex 53.385422 1.727238 1.761988 +endloop +endfacet +facet normal 0.241210 0.957624 -0.157398 +outer loop +vertex 54.058685 1.502757 1.427992 +vertex 53.385422 1.727238 1.761988 +vertex 54.087021 1.591341 2.010366 +endloop +endfacet +facet normal 0.122349 0.987069 -0.103565 +outer loop +vertex 52.143909 1.843897 1.407164 +vertex 52.969688 1.803813 2.000689 +vertex 53.385422 1.727238 1.761988 +endloop +endfacet +facet normal 0.138040 0.977132 -0.161736 +outer loop +vertex 52.143909 1.843897 1.407164 +vertex 53.385422 1.727238 1.761988 +vertex 53.116249 1.692702 1.323606 +endloop +endfacet +facet normal 0.055059 0.905206 0.421391 +outer loop +vertex 55.000015 1.000000 3.691000 +vertex 55.000008 1.281250 3.086834 +vertex 53.935028 1.596290 2.549231 +endloop +endfacet +facet normal 0.267736 0.933666 0.237874 +outer loop +vertex 55.000015 1.000000 3.691000 +vertex 53.935028 1.596290 2.549231 +vertex 53.526051 1.599617 2.996491 +endloop +endfacet +facet normal 0.183352 0.975022 0.125359 +outer loop +vertex 55.000008 1.281250 3.086834 +vertex 55.000008 1.375000 2.357667 +vertex 54.087021 1.591341 2.010366 +endloop +endfacet +facet normal 0.253856 0.965205 0.062737 +outer loop +vertex 55.000008 1.281250 3.086834 +vertex 54.087021 1.591341 2.010366 +vertex 53.935028 1.596290 2.549231 +endloop +endfacet +facet normal 0.141701 0.982330 0.122265 +outer loop +vertex 53.526051 1.599617 2.996491 +vertex 53.935028 1.596290 2.549231 +vertex 52.969688 1.803813 2.000689 +endloop +endfacet +facet normal 0.201020 0.975649 0.087751 +outer loop +vertex 53.526051 1.599617 2.996491 +vertex 52.969688 1.803813 2.000689 +vertex 52.409729 1.888375 2.343264 +endloop +endfacet +facet normal 0.281243 0.863203 -0.419266 +outer loop +vertex 55.000008 1.000000 1.024334 +vertex 54.016209 1.270190 0.920681 +vertex 54.058685 1.502757 1.427992 +endloop +endfacet +facet normal 0.290181 0.867573 -0.403871 +outer loop +vertex 55.000008 1.000000 1.024334 +vertex 54.058685 1.502757 1.427992 +vertex 55.000008 1.281250 1.628500 +endloop +endfacet +facet normal 0.210646 0.871327 -0.443190 +outer loop +vertex 54.016209 1.270190 0.920681 +vertex 52.962971 1.494856 0.861782 +vertex 53.116249 1.692702 1.323606 +endloop +endfacet +facet normal 0.223803 0.878738 -0.421582 +outer loop +vertex 54.016209 1.270190 0.920681 +vertex 53.116249 1.692702 1.323606 +vertex 54.058685 1.502757 1.427992 +endloop +endfacet +facet normal 0.257870 0.953249 -0.157542 +outer loop +vertex 55.000008 1.281250 1.628500 +vertex 54.058685 1.502757 1.427992 +vertex 54.087021 1.591341 2.010366 +endloop +endfacet +facet normal 0.272780 0.954222 -0.122685 +outer loop +vertex 55.000008 1.281250 1.628500 +vertex 54.087021 1.591341 2.010366 +vertex 55.000008 1.375000 2.357667 +endloop +endfacet +facet normal 0.044312 0.934547 -0.353069 +outer loop +vertex 49.363640 1.792930 0.923323 +vertex 51.159924 1.990409 1.671474 +vertex 52.143909 1.843897 1.407164 +endloop +endfacet +facet normal 0.049913 0.922009 -0.383936 +outer loop +vertex 49.363640 1.792930 0.923323 +vertex 52.143909 1.843897 1.407164 +vertex 51.705059 1.646369 0.875757 +endloop +endfacet +facet normal 0.113147 0.991773 -0.059865 +outer loop +vertex 51.159924 1.990409 1.671474 +vertex 52.409729 1.888375 2.343264 +vertex 52.969688 1.803813 2.000689 +endloop +endfacet +facet normal 0.120095 0.987674 -0.100388 +outer loop +vertex 51.159924 1.990409 1.671474 +vertex 52.969688 1.803813 2.000689 +vertex 52.143909 1.843897 1.407164 +endloop +endfacet +facet normal 0.103964 0.901163 -0.420828 +outer loop +vertex 51.705059 1.646369 0.875757 +vertex 52.143909 1.843897 1.407164 +vertex 53.116249 1.692702 1.323606 +endloop +endfacet +facet normal 0.103885 0.901285 -0.420588 +outer loop +vertex 51.705059 1.646369 0.875757 +vertex 53.116249 1.692702 1.323606 +vertex 52.962971 1.494856 0.861782 +endloop +endfacet +facet normal -0.079497 -0.242369 -0.966922 +outer loop +vertex 1.698774 -1.194074 0.641540 +vertex 1.174004 -1.261905 0.701687 +vertex 1.044850 -0.745563 0.582879 +endloop +endfacet +facet normal -0.037206 -0.182741 -0.982457 +outer loop +vertex 1.698774 -1.194074 0.641540 +vertex 1.044850 -0.745563 0.582879 +vertex 1.282836 -0.479353 0.524350 +endloop +endfacet +facet normal -0.539801 -0.241520 -0.806401 +outer loop +vertex 0.726007 -1.050028 0.887499 +vertex 0.729391 -0.434278 0.700814 +vertex 1.044850 -0.745563 0.582879 +endloop +endfacet +facet normal -0.485511 -0.309565 -0.817587 +outer loop +vertex 0.726007 -1.050028 0.887499 +vertex 1.044850 -0.745563 0.582879 +vertex 1.174004 -1.261905 0.701687 +endloop +endfacet +facet normal -0.254551 0.014972 -0.966943 +outer loop +vertex 0.873956 0.129967 0.641424 +vertex 1.282836 -0.479353 0.524350 +vertex 1.044850 -0.745563 0.582879 +endloop +endfacet +facet normal -0.356281 -0.007064 -0.934352 +outer loop +vertex 0.873956 0.129967 0.641424 +vertex 1.044850 -0.745563 0.582879 +vertex 0.729391 -0.434278 0.700814 +endloop +endfacet +facet normal 0.076213 -0.493064 -0.866648 +outer loop +vertex 3.212122 -1.828283 1.135445 +vertex 1.937340 -1.854676 1.038357 +vertex 1.698774 -1.194074 0.641540 +endloop +endfacet +facet normal 0.152938 -0.353691 -0.922774 +outer loop +vertex 3.212122 -1.828283 1.135445 +vertex 1.698774 -1.194074 0.641540 +vertex 2.250708 -0.876450 0.611273 +endloop +endfacet +facet normal -0.050272 -0.541403 -0.839259 +outer loop +vertex 1.937340 -1.854676 1.038357 +vertex 1.258488 -1.814558 1.053140 +vertex 1.174004 -1.261905 0.701687 +endloop +endfacet +facet normal -0.030096 -0.522661 -0.852009 +outer loop +vertex 1.937340 -1.854676 1.038357 +vertex 1.174004 -1.261905 0.701687 +vertex 1.698774 -1.194074 0.641540 +endloop +endfacet +facet normal 0.029280 -0.145119 -0.988981 +outer loop +vertex 2.250708 -0.876450 0.611273 +vertex 1.698774 -1.194074 0.641540 +vertex 1.282836 -0.479353 0.524350 +endloop +endfacet +facet normal 0.054443 -0.085079 -0.994886 +outer loop +vertex 2.250708 -0.876450 0.611273 +vertex 1.282836 -0.479353 0.524350 +vertex 1.605710 -0.068030 0.506844 +endloop +endfacet +facet normal -0.841401 -0.321327 -0.434504 +outer loop +vertex 0.388889 -1.203704 1.653963 +vertex 0.381076 -0.645255 1.256104 +vertex 0.726007 -1.050028 0.887499 +endloop +endfacet +facet normal -0.836848 -0.332655 -0.434772 +outer loop +vertex 0.388889 -1.203704 1.653963 +vertex 0.726007 -1.050028 0.887499 +vertex 0.752797 -1.601241 1.257680 +endloop +endfacet +facet normal -0.809887 -0.153210 -0.566225 +outer loop +vertex 0.381076 -0.645255 1.256104 +vertex 0.409722 -0.000000 1.040537 +vertex 0.729391 -0.434278 0.700814 +endloop +endfacet +facet normal -0.805090 -0.168042 -0.568851 +outer loop +vertex 0.381076 -0.645255 1.256104 +vertex 0.729391 -0.434278 0.700814 +vertex 0.726007 -1.050028 0.887499 +endloop +endfacet +facet normal -0.521874 -0.492910 -0.696194 +outer loop +vertex 0.752797 -1.601241 1.257680 +vertex 0.726007 -1.050028 0.887499 +vertex 1.174004 -1.261905 0.701687 +endloop +endfacet +facet normal -0.499400 -0.517985 -0.694472 +outer loop +vertex 0.752797 -1.601241 1.257680 +vertex 1.174004 -1.261905 0.701687 +vertex 1.258488 -1.814558 1.053140 +endloop +endfacet +facet normal -0.489586 0.240574 -0.838111 +outer loop +vertex 0.777778 1.203704 1.005815 +vertex 1.126061 0.636751 0.639624 +vertex 0.873956 0.129967 0.641424 +endloop +endfacet +facet normal -0.506824 0.235979 -0.829122 +outer loop +vertex 0.777778 1.203704 1.005815 +vertex 0.873956 0.129967 0.641424 +vertex 0.539062 0.645255 0.992794 +endloop +endfacet +facet normal -0.155176 0.079900 -0.984650 +outer loop +vertex 1.126061 0.636751 0.639624 +vertex 1.605710 -0.068030 0.506844 +vertex 1.282836 -0.479353 0.524350 +endloop +endfacet +facet normal -0.164661 0.078421 -0.983228 +outer loop +vertex 1.126061 0.636751 0.639624 +vertex 1.282836 -0.479353 0.524350 +vertex 0.873956 0.129967 0.641424 +endloop +endfacet +facet normal -0.653249 0.088217 -0.751986 +outer loop +vertex 0.539062 0.645255 0.992794 +vertex 0.873956 0.129967 0.641424 +vertex 0.729391 -0.434278 0.700814 +endloop +endfacet +facet normal -0.672584 0.080388 -0.735642 +outer loop +vertex 0.539062 0.645255 0.992794 +vertex 0.729391 -0.434278 0.700814 +vertex 0.409722 -0.000000 1.040537 +endloop +endfacet +facet normal 0.041553 -0.274803 0.960602 +outer loop +vertex 51.965214 -1.202216 4.176255 +vertex 53.058922 -1.128279 4.150095 +vertex 53.356018 -0.737245 4.249107 +endloop +endfacet +facet normal -0.011195 -0.122011 0.992466 +outer loop +vertex 51.965214 -1.202216 4.176255 +vertex 53.356018 -0.737245 4.249107 +vertex 52.912373 -0.593412 4.261785 +endloop +endfacet +facet normal 0.128077 -0.269565 0.954427 +outer loop +vertex 54.051399 -0.881209 4.115131 +vertex 54.082394 -0.427969 4.238985 +vertex 53.356018 -0.737245 4.249107 +endloop +endfacet +facet normal 0.113803 -0.324253 0.939100 +outer loop +vertex 54.051399 -0.881209 4.115131 +vertex 53.356018 -0.737245 4.249107 +vertex 53.058922 -1.128279 4.150095 +endloop +endfacet +facet normal 0.037141 0.026509 0.998958 +outer loop +vertex 53.927742 -0.016987 4.208736 +vertex 52.912373 -0.593412 4.261785 +vertex 53.356018 -0.737245 4.249107 +endloop +endfacet +facet normal -0.014965 0.067793 0.997587 +outer loop +vertex 53.927742 -0.016987 4.208736 +vertex 53.356018 -0.737245 4.249107 +vertex 54.082394 -0.427969 4.238985 +endloop +endfacet +facet normal 0.058644 -0.553201 0.830981 +outer loop +vertex 48.166676 -2.000000 3.913223 +vertex 51.413963 -1.708487 3.878123 +vertex 51.965214 -1.202216 4.176255 +endloop +endfacet +facet normal 0.004120 -0.330760 0.943706 +outer loop +vertex 48.166676 -2.000000 3.913223 +vertex 51.965214 -1.202216 4.176255 +vertex 50.865345 -1.042833 4.236919 +endloop +endfacet +facet normal 0.090004 -0.620383 0.779117 +outer loop +vertex 51.413963 -1.708487 3.878123 +vertex 52.884544 -1.512283 3.864470 +vertex 53.058922 -1.128279 4.150095 +endloop +endfacet +facet normal 0.057222 -0.552129 0.831793 +outer loop +vertex 51.413963 -1.708487 3.878123 +vertex 53.058922 -1.128279 4.150095 +vertex 51.965214 -1.202216 4.176255 +endloop +endfacet +facet normal 0.027912 -0.181522 0.982991 +outer loop +vertex 50.865345 -1.042833 4.236919 +vertex 51.965214 -1.202216 4.176255 +vertex 52.912373 -0.593412 4.261785 +endloop +endfacet +facet normal -0.007944 -0.019132 0.999785 +outer loop +vertex 50.865345 -1.042833 4.236919 +vertex 52.912373 -0.593412 4.261785 +vertex 52.331310 -0.308579 4.262618 +endloop +endfacet +facet normal 0.255804 -0.616356 0.744761 +outer loop +vertex 55.000008 -1.000000 3.691000 +vertex 55.000008 -0.546875 4.066000 +vertex 54.051399 -0.881209 4.115131 +endloop +endfacet +facet normal 0.250243 -0.629145 0.735904 +outer loop +vertex 55.000008 -1.000000 3.691000 +vertex 54.051399 -0.881209 4.115131 +vertex 54.006409 -1.272369 3.796018 +endloop +endfacet +facet normal 0.153076 -0.220201 0.963369 +outer loop +vertex 55.000008 -0.546875 4.066000 +vertex 55.000008 0.000000 4.191000 +vertex 54.082394 -0.427969 4.238985 +endloop +endfacet +facet normal 0.144470 -0.270011 0.951957 +outer loop +vertex 55.000008 -0.546875 4.066000 +vertex 54.082394 -0.427969 4.238985 +vertex 54.051399 -0.881209 4.115131 +endloop +endfacet +facet normal 0.184278 -0.633950 0.751099 +outer loop +vertex 54.006409 -1.272369 3.796018 +vertex 54.051399 -0.881209 4.115131 +vertex 53.058922 -1.128279 4.150095 +endloop +endfacet +facet normal 0.182211 -0.638753 0.747525 +outer loop +vertex 54.006409 -1.272369 3.796018 +vertex 53.058922 -1.128279 4.150095 +vertex 52.884544 -1.512283 3.864470 +endloop +endfacet +facet normal 0.127756 0.339678 0.931825 +outer loop +vertex 55.000015 1.000000 3.691000 +vertex 53.516247 0.366665 4.125300 +vertex 53.927742 -0.016987 4.208736 +endloop +endfacet +facet normal -0.226665 0.620976 0.750341 +outer loop +vertex 55.000015 1.000000 3.691000 +vertex 53.927742 -0.016987 4.208736 +vertex 55.000008 0.546875 4.066000 +endloop +endfacet +facet normal 0.053967 0.107189 0.992773 +outer loop +vertex 53.516247 0.366665 4.125300 +vertex 52.331310 -0.308579 4.262618 +vertex 52.912373 -0.593412 4.261785 +endloop +endfacet +facet normal -0.043596 0.167437 0.984918 +outer loop +vertex 53.516247 0.366665 4.125300 +vertex 52.912373 -0.593412 4.261785 +vertex 53.927742 -0.016987 4.208736 +endloop +endfacet +facet normal 0.078160 0.102397 0.991668 +outer loop +vertex 55.000008 0.546875 4.066000 +vertex 53.927742 -0.016987 4.208736 +vertex 54.082394 -0.427969 4.238985 +endloop +endfacet +facet normal -0.052872 0.222516 0.973494 +outer loop +vertex 55.000008 0.546875 4.066000 +vertex 54.082394 -0.427969 4.238985 +vertex 55.000008 0.000000 4.191000 +endloop +endfacet +facet normal -0.354704 -0.234511 0.905091 +outer loop +vertex 1.547216 -1.136979 5.509017 +vertex 2.138190 -1.286114 5.701979 +vertex 2.290046 -0.728202 5.906047 +endloop +endfacet +facet normal -0.402864 -0.145558 0.903611 +outer loop +vertex 1.547216 -1.136979 5.509017 +vertex 2.290046 -0.728202 5.906047 +vertex 2.000845 -0.410237 5.828329 +endloop +endfacet +facet normal -0.147066 -0.220833 0.964160 +outer loop +vertex 3.079537 -1.179202 5.923172 +vertex 2.968978 -0.413501 6.081686 +vertex 2.290046 -0.728202 5.906047 +endloop +endfacet +facet normal -0.187207 -0.292097 0.937887 +outer loop +vertex 3.079537 -1.179202 5.923172 +vertex 2.290046 -0.728202 5.906047 +vertex 2.138190 -1.286114 5.701979 +endloop +endfacet +facet normal -0.230089 0.028490 0.972753 +outer loop +vertex 2.833053 0.292040 6.004605 +vertex 2.000845 -0.410237 5.828329 +vertex 2.290046 -0.728202 5.906047 +endloop +endfacet +facet normal -0.272804 0.052395 0.960642 +outer loop +vertex 2.833053 0.292040 6.004605 +vertex 2.290046 -0.728202 5.906047 +vertex 2.968978 -0.413501 6.081686 +endloop +endfacet +facet normal -0.607856 -0.414717 0.677142 +outer loop +vertex 0.840000 -1.566667 4.611000 +vertex 1.394066 -1.776039 4.980145 +vertex 1.547216 -1.136979 5.509017 +endloop +endfacet +facet normal -0.622161 -0.392137 0.677601 +outer loop +vertex 0.840000 -1.566667 4.611000 +vertex 1.547216 -1.136979 5.509017 +vertex 1.153953 -0.776505 5.356543 +endloop +endfacet +facet normal -0.361797 -0.554571 0.749369 +outer loop +vertex 1.394066 -1.776039 4.980145 +vertex 2.083642 -1.867799 5.245167 +vertex 2.138190 -1.286114 5.701979 +endloop +endfacet +facet normal -0.381163 -0.533510 0.755038 +outer loop +vertex 1.394066 -1.776039 4.980145 +vertex 2.138190 -1.286114 5.701979 +vertex 1.547216 -1.136979 5.509017 +endloop +endfacet +facet normal -0.446405 -0.111459 0.887863 +outer loop +vertex 1.153953 -0.776505 5.356543 +vertex 1.547216 -1.136979 5.509017 +vertex 2.000845 -0.410237 5.828329 +endloop +endfacet +facet normal -0.461265 -0.072506 0.884295 +outer loop +vertex 1.153953 -0.776505 5.356543 +vertex 2.000845 -0.410237 5.828329 +vertex 1.693982 0.028935 5.704272 +endloop +endfacet +facet normal -0.065862 -0.497668 0.864863 +outer loop +vertex 5.333334 -1.828283 5.721304 +vertex 4.467706 -0.826319 6.231944 +vertex 3.079537 -1.179202 5.923172 +endloop +endfacet +facet normal -0.094530 -0.579898 0.809186 +outer loop +vertex 5.333334 -1.828283 5.721304 +vertex 3.079537 -1.179202 5.923172 +vertex 3.171496 -1.861331 5.445072 +endloop +endfacet +facet normal -0.137956 -0.144190 0.979886 +outer loop +vertex 4.467706 -0.826319 6.231944 +vertex 4.185957 0.051183 6.321401 +vertex 2.968978 -0.413501 6.081686 +endloop +endfacet +facet normal -0.157608 -0.221957 0.962234 +outer loop +vertex 4.467706 -0.826319 6.231944 +vertex 2.968978 -0.413501 6.081686 +vertex 3.079537 -1.179202 5.923172 +endloop +endfacet +facet normal -0.123155 -0.580665 0.804774 +outer loop +vertex 3.171496 -1.861331 5.445072 +vertex 3.079537 -1.179202 5.923172 +vertex 2.138190 -1.286114 5.701979 +endloop +endfacet +facet normal -0.140668 -0.603298 0.785012 +outer loop +vertex 3.171496 -1.861331 5.445072 +vertex 2.138190 -1.286114 5.701979 +vertex 2.083642 -1.867799 5.245167 +endloop +endfacet +facet normal -0.022637 0.319377 0.947357 +outer loop +vertex 4.272728 1.863636 5.509182 +vertex 2.557282 0.880763 5.799543 +vertex 2.833053 0.292040 6.004605 +endloop +endfacet +facet normal -0.346115 0.555417 0.756119 +outer loop +vertex 4.272728 1.863636 5.509182 +vertex 2.833053 0.292040 6.004605 +vertex 4.172165 0.918773 6.157211 +endloop +endfacet +facet normal -0.222871 0.117637 0.967724 +outer loop +vertex 2.557282 0.880763 5.799543 +vertex 1.693982 0.028935 5.704272 +vertex 2.000845 -0.410237 5.828329 +endloop +endfacet +facet normal -0.336073 0.165526 0.927176 +outer loop +vertex 2.557282 0.880763 5.799543 +vertex 2.000845 -0.410237 5.828329 +vertex 2.833053 0.292040 6.004605 +endloop +endfacet +facet normal -0.149265 0.078927 0.985642 +outer loop +vertex 4.172165 0.918773 6.157211 +vertex 2.833053 0.292040 6.004605 +vertex 2.968978 -0.413501 6.081686 +endloop +endfacet +facet normal -0.254484 0.175919 0.950942 +outer loop +vertex 4.172165 0.918773 6.157211 +vertex 2.968978 -0.413501 6.081686 +vertex 4.185957 0.051183 6.321401 +endloop +endfacet +facet normal 0.019993 -0.243746 -0.969633 +outer loop +vertex 9.308265 -1.414347 0.689740 +vertex 7.432445 -1.480433 0.667675 +vertex 6.950618 -0.894483 0.510445 +endloop +endfacet +facet normal 0.041964 -0.150350 -0.987742 +outer loop +vertex 9.308265 -1.414347 0.689740 +vertex 6.950618 -0.894483 0.510445 +vertex 7.816463 -0.594631 0.501587 +endloop +endfacet +facet normal -0.039810 -0.206707 -0.977593 +outer loop +vertex 5.514132 -1.298165 0.654298 +vertex 5.571075 -0.536503 0.490929 +vertex 6.950618 -0.894483 0.510445 +endloop +endfacet +facet normal -0.019320 -0.273907 -0.961562 +outer loop +vertex 5.514132 -1.298165 0.654298 +vertex 6.950618 -0.894483 0.510445 +vertex 7.432445 -1.480433 0.667675 +endloop +endfacet +facet normal -0.008654 -0.004548 -0.999952 +outer loop +vertex 5.970649 0.172968 0.514071 +vertex 7.816463 -0.594631 0.501587 +vertex 6.950618 -0.894483 0.510445 +endloop +endfacet +facet normal 0.019719 0.021498 -0.999574 +outer loop +vertex 5.970649 0.172968 0.514071 +vertex 6.950618 -0.894483 0.510445 +vertex 5.571075 -0.536503 0.490929 +endloop +endfacet +facet normal 0.039007 -0.544753 -0.837689 +outer loop +vertex 13.235235 -2.149359 1.350582 +vertex 10.028108 -2.122718 1.183917 +vertex 9.308265 -1.414347 0.689740 +endloop +endfacet +facet normal 0.072566 -0.423970 -0.902765 +outer loop +vertex 13.235235 -2.149359 1.350582 +vertex 9.308265 -1.414347 0.689740 +vertex 11.022995 -1.088743 0.674657 +endloop +endfacet +facet normal 0.018704 -0.579360 -0.814857 +outer loop +vertex 10.028108 -2.122718 1.183917 +vertex 7.706276 -2.079218 1.099694 +vertex 7.432445 -1.480433 0.667675 +endloop +endfacet +facet normal 0.029242 -0.551751 -0.833496 +outer loop +vertex 10.028108 -2.122718 1.183917 +vertex 7.432445 -1.480433 0.667675 +vertex 9.308265 -1.414347 0.689740 +endloop +endfacet +facet normal 0.025427 -0.179458 -0.983437 +outer loop +vertex 11.022995 -1.088743 0.674657 +vertex 9.308265 -1.414347 0.689740 +vertex 7.816463 -0.594631 0.501587 +endloop +endfacet +facet normal 0.041784 -0.077744 -0.996097 +outer loop +vertex 11.022995 -1.088743 0.674657 +vertex 7.816463 -0.594631 0.501587 +vertex 8.954733 -0.142490 0.514045 +endloop +endfacet +facet normal -0.082683 -0.448631 -0.889884 +outer loop +vertex 3.212122 -1.828283 1.135445 +vertex 3.794400 -0.906173 0.616465 +vertex 5.514132 -1.298165 0.654298 +endloop +endfacet +facet normal -0.043684 -0.560753 -0.826830 +outer loop +vertex 3.212122 -1.828283 1.135445 +vertex 5.514132 -1.298165 0.654298 +vertex 5.514146 -1.967330 1.108122 +endloop +endfacet +facet normal -0.043195 -0.128838 -0.990724 +outer loop +vertex 3.794400 -0.906173 0.616465 +vertex 3.996914 -0.050026 0.496299 +vertex 5.571075 -0.536503 0.490929 +endloop +endfacet +facet normal -0.025854 -0.207801 -0.977829 +outer loop +vertex 3.794400 -0.906173 0.616465 +vertex 5.571075 -0.536503 0.490929 +vertex 5.514132 -1.298165 0.654298 +endloop +endfacet +facet normal -0.047506 -0.560655 -0.826686 +outer loop +vertex 5.514146 -1.967330 1.108122 +vertex 5.514132 -1.298165 0.654298 +vertex 7.432445 -1.480433 0.667675 +endloop +endfacet +facet normal -0.033447 -0.594788 -0.803187 +outer loop +vertex 5.514146 -1.967330 1.108122 +vertex 7.432445 -1.480433 0.667675 +vertex 7.706276 -2.079218 1.099694 +endloop +endfacet +facet normal -0.085594 0.277348 -0.956949 +outer loop +vertex 4.272728 1.792930 1.135445 +vertex 6.811232 0.793336 0.618684 +vertex 5.970649 0.172968 0.514071 +endloop +endfacet +facet normal 0.116135 0.459484 -0.880561 +outer loop +vertex 4.272728 1.792930 1.135445 +vertex 5.970649 0.172968 0.514071 +vertex 4.148535 0.817264 0.609955 +endloop +endfacet +facet normal -0.017477 0.071479 -0.997289 +outer loop +vertex 6.811232 0.793336 0.618684 +vertex 8.954733 -0.142490 0.514045 +vertex 7.816463 -0.594631 0.501587 +endloop +endfacet +facet normal 0.040235 0.112897 -0.992792 +outer loop +vertex 6.811232 0.793336 0.618684 +vertex 7.816463 -0.594631 0.501587 +vertex 5.970649 0.172968 0.514071 +endloop +endfacet +facet normal -0.034199 0.051816 -0.998071 +outer loop +vertex 4.148535 0.817264 0.609955 +vertex 5.970649 0.172968 0.514071 +vertex 5.571075 -0.536503 0.490929 +endloop +endfacet +facet normal 0.034895 0.123858 -0.991686 +outer loop +vertex 4.148535 0.817264 0.609955 +vertex 5.571075 -0.536503 0.490929 +vertex 3.996914 -0.050026 0.496299 +endloop +endfacet +facet normal -0.177314 0.972452 0.151314 +outer loop +vertex 1.413100 2.191117 4.134416 +vertex 1.957623 2.235735 4.485753 +vertex 2.211112 2.373071 3.900183 +endloop +endfacet +facet normal -0.192322 0.975924 0.102886 +outer loop +vertex 1.413100 2.191117 4.134416 +vertex 2.211112 2.373071 3.900183 +vertex 1.957623 2.368998 3.464983 +endloop +endfacet +facet normal 0.012141 0.988030 0.153781 +outer loop +vertex 2.818975 2.265612 4.542609 +vertex 2.888844 2.402780 3.655801 +vertex 2.211112 2.373071 3.900183 +endloop +endfacet +facet normal -0.047645 0.976865 0.208483 +outer loop +vertex 2.818975 2.265612 4.542609 +vertex 2.211112 2.373071 3.900183 +vertex 1.957623 2.235735 4.485753 +endloop +endfacet +facet normal -0.006157 0.999964 -0.005773 +outer loop +vertex 2.818976 2.370519 2.809858 +vertex 1.957623 2.368998 3.464983 +vertex 2.211112 2.373071 3.900183 +endloop +endfacet +facet normal -0.055802 0.997881 -0.033447 +outer loop +vertex 2.818976 2.370519 2.809858 +vertex 2.211112 2.373071 3.900183 +vertex 2.888844 2.402780 3.655801 +endloop +endfacet +facet normal -0.591580 0.781961 0.196391 +outer loop +vertex 0.560000 1.566667 4.051001 +vertex 1.052529 1.776505 4.699124 +vertex 1.413100 2.191117 4.134416 +endloop +endfacet +facet normal -0.579142 0.747851 0.324520 +outer loop +vertex 0.560000 1.566667 4.051001 +vertex 1.413100 2.191117 4.134416 +vertex 1.052529 2.154190 3.576036 +endloop +endfacet +facet normal -0.353218 0.863464 0.360093 +outer loop +vertex 1.052529 1.776505 4.699124 +vertex 1.664815 1.871528 5.071865 +vertex 1.957623 2.235735 4.485753 +endloop +endfacet +facet normal -0.334023 0.848772 0.409897 +outer loop +vertex 1.052529 1.776505 4.699124 +vertex 1.957623 2.235735 4.485753 +vertex 1.413100 2.191117 4.134416 +endloop +endfacet +facet normal -0.221081 0.972093 0.078474 +outer loop +vertex 1.052529 2.154190 3.576036 +vertex 1.413100 2.191117 4.134416 +vertex 1.957623 2.368998 3.464983 +endloop +endfacet +facet normal -0.222661 0.972618 0.066613 +outer loop +vertex 1.052529 2.154190 3.576036 +vertex 1.957623 2.368998 3.464983 +vertex 1.664815 2.340921 2.896196 +endloop +endfacet +facet normal 0.017576 0.932290 0.361283 +outer loop +vertex 4.272728 1.863636 5.509182 +vertex 4.161652 2.331292 4.307803 +vertex 2.818975 2.265612 4.542609 +endloop +endfacet +facet normal -0.053358 0.891025 0.450808 +outer loop +vertex 4.272728 1.863636 5.509182 +vertex 2.818975 2.265612 4.542609 +vertex 2.553637 1.874253 5.284729 +endloop +endfacet +facet normal 0.009362 0.995815 0.090909 +outer loop +vertex 4.161652 2.331292 4.307803 +vertex 4.101852 2.427727 3.257616 +vertex 2.888844 2.402780 3.655801 +endloop +endfacet +facet normal -0.021913 0.988270 0.151135 +outer loop +vertex 4.161652 2.331292 4.307803 +vertex 2.888844 2.402780 3.655801 +vertex 2.818975 2.265612 4.542609 +endloop +endfacet +facet normal -0.060539 0.891686 0.448589 +outer loop +vertex 2.553637 1.874253 5.284729 +vertex 2.818975 2.265612 4.542609 +vertex 1.957623 2.235735 4.485753 +endloop +endfacet +facet normal -0.117852 0.868776 0.480976 +outer loop +vertex 2.553637 1.874253 5.284729 +vertex 1.957623 2.235735 4.485753 +vertex 1.664815 1.871528 5.071865 +endloop +endfacet +facet normal 0.155860 0.967636 -0.198467 +outer loop +vertex 4.272728 1.792930 1.135445 +vertex 2.553637 2.266812 2.095851 +vertex 2.818976 2.370519 2.809858 +endloop +endfacet +facet normal -0.144269 0.890113 -0.432302 +outer loop +vertex 4.272728 1.792930 1.135445 +vertex 2.818976 2.370519 2.809858 +vertex 4.161652 2.306381 2.229715 +endloop +endfacet +facet normal 0.026538 0.997666 -0.062909 +outer loop +vertex 2.553637 2.266812 2.095851 +vertex 1.664815 2.340921 2.896196 +vertex 1.957623 2.368998 3.464983 +endloop +endfacet +facet normal -0.086627 0.989971 -0.111598 +outer loop +vertex 2.553637 2.266812 2.095851 +vertex 1.957623 2.368998 3.464983 +vertex 2.818976 2.370519 2.809858 +endloop +endfacet +facet normal 0.030174 0.998721 -0.040579 +outer loop +vertex 4.161652 2.306381 2.229715 +vertex 2.818976 2.370519 2.809858 +vertex 2.888844 2.402780 3.655801 +endloop +endfacet +facet normal -0.059923 0.990907 -0.120465 +outer loop +vertex 4.161652 2.306381 2.229715 +vertex 2.888844 2.402780 3.655801 +vertex 4.101852 2.427727 3.257616 +endloop +endfacet +facet normal -0.024915 -0.999333 0.026680 +outer loop +vertex 6.154458 -2.483407 3.738467 +vertex 5.628341 -2.494678 2.824974 +vertex 6.979553 -2.537423 2.485754 +endloop +endfacet +facet normal -0.051736 -0.998620 0.008983 +outer loop +vertex 6.154458 -2.483407 3.738467 +vertex 6.979553 -2.537423 2.485754 +vertex 7.876621 -2.580005 2.918531 +endloop +endfacet +facet normal -0.046870 -0.980837 -0.189108 +outer loop +vertex 5.521408 -2.354881 1.900373 +vertex 7.436999 -2.427878 1.804205 +vertex 6.979553 -2.537423 2.485754 +endloop +endfacet +facet normal -0.066795 -0.987667 -0.141609 +outer loop +vertex 5.521408 -2.354881 1.900373 +vertex 6.979553 -2.537423 2.485754 +vertex 5.628341 -2.494678 2.824974 +endloop +endfacet +facet normal -0.001211 -0.995435 -0.095434 +outer loop +vertex 9.316480 -2.494374 2.007067 +vertex 7.876621 -2.580005 2.918531 +vertex 6.979553 -2.537423 2.485754 +endloop +endfacet +facet normal -0.016568 -0.985391 -0.169501 +outer loop +vertex 9.316480 -2.494374 2.007067 +vertex 6.979553 -2.537423 2.485754 +vertex 7.436999 -2.427878 1.804205 +endloop +endfacet +facet normal 0.031593 -0.945072 0.325333 +outer loop +vertex 5.333334 -1.828283 5.721304 +vertex 4.454588 -2.322237 4.371733 +vertex 6.154458 -2.483407 3.738467 +endloop +endfacet +facet normal -0.154841 -0.955382 0.251534 +outer loop +vertex 5.333334 -1.828283 5.721304 +vertex 6.154458 -2.483407 3.738467 +vertex 7.178772 -2.418575 4.615271 +endloop +endfacet +facet normal -0.012858 -0.994788 0.101147 +outer loop +vertex 4.454588 -2.322237 4.371733 +vertex 4.081018 -2.428884 3.275362 +vertex 5.628341 -2.494678 2.824974 +endloop +endfacet +facet normal -0.073964 -0.995749 0.054885 +outer loop +vertex 4.454588 -2.322237 4.371733 +vertex 5.628341 -2.494678 2.824974 +vertex 6.154458 -2.483407 3.738467 +endloop +endfacet +facet normal -0.013366 -0.995919 0.089256 +outer loop +vertex 7.178772 -2.418575 4.615271 +vertex 6.154458 -2.483407 3.738467 +vertex 7.876621 -2.580005 2.918531 +endloop +endfacet +facet normal -0.067176 -0.995483 0.067083 +outer loop +vertex 7.178772 -2.418575 4.615271 +vertex 7.876621 -2.580005 2.918531 +vertex 9.061987 -2.615098 3.584776 +endloop +endfacet +facet normal -0.059376 -0.896912 -0.438204 +outer loop +vertex 3.212122 -1.828283 1.135445 +vertex 5.514146 -1.967330 1.108122 +vertex 5.521408 -2.354881 1.900373 +endloop +endfacet +facet normal -0.090043 -0.926304 -0.365858 +outer loop +vertex 3.212122 -1.828283 1.135445 +vertex 5.521408 -2.354881 1.900373 +vertex 3.804913 -2.318981 2.231933 +endloop +endfacet +facet normal -0.047082 -0.887985 -0.457456 +outer loop +vertex 5.514146 -1.967330 1.108122 +vertex 7.706276 -2.079218 1.099694 +vertex 7.436999 -2.427878 1.804205 +endloop +endfacet +facet normal -0.056189 -0.897066 -0.438309 +outer loop +vertex 5.514146 -1.967330 1.108122 +vertex 7.436999 -2.427878 1.804205 +vertex 5.521408 -2.354881 1.900373 +endloop +endfacet +facet normal -0.048457 -0.988414 -0.143842 +outer loop +vertex 3.804913 -2.318981 2.231933 +vertex 5.521408 -2.354881 1.900373 +vertex 5.628341 -2.494678 2.824974 +endloop +endfacet +facet normal -0.067534 -0.993932 -0.086819 +outer loop +vertex 3.804913 -2.318981 2.231933 +vertex 5.628341 -2.494678 2.824974 +vertex 4.081018 -2.428884 3.275362 +endloop +endfacet +facet normal 0.037829 -0.959677 -0.278547 +outer loop +vertex 13.235235 -2.149359 1.350582 +vertex 11.040919 -2.582739 2.545703 +vertex 9.316480 -2.494374 2.007067 +endloop +endfacet +facet normal 0.013280 -0.915584 -0.401908 +outer loop +vertex 13.235235 -2.149359 1.350582 +vertex 9.316480 -2.494374 2.007067 +vertex 10.028108 -2.122718 1.183917 +endloop +endfacet +facet normal -0.005840 -0.999091 -0.042236 +outer loop +vertex 11.040919 -2.582739 2.545703 +vertex 9.061987 -2.615098 3.584776 +vertex 7.876621 -2.580005 2.918531 +endloop +endfacet +facet normal -0.014561 -0.993107 -0.116304 +outer loop +vertex 11.040919 -2.582739 2.545703 +vertex 7.876621 -2.580005 2.918531 +vertex 9.316480 -2.494374 2.007067 +endloop +endfacet +facet normal 0.011175 -0.914939 -0.403438 +outer loop +vertex 10.028108 -2.122718 1.183917 +vertex 9.316480 -2.494374 2.007067 +vertex 7.436999 -2.427878 1.804205 +endloop +endfacet +facet normal -0.000692 -0.896144 -0.443763 +outer loop +vertex 10.028108 -2.122718 1.183917 +vertex 7.436999 -2.427878 1.804205 +vertex 7.706276 -2.079218 1.099694 +endloop +endfacet +facet normal -0.040521 -0.997608 -0.056007 +outer loop +vertex 17.317537 -3.084208 5.004945 +vertex 16.903872 -2.995256 3.719807 +vertex 18.486927 -3.029857 3.190796 +endloop +endfacet +facet normal -0.046639 -0.997112 -0.059936 +outer loop +vertex 17.317537 -3.084208 5.004945 +vertex 18.486927 -3.029857 3.190796 +vertex 19.410824 -3.104883 3.720019 +endloop +endfacet +facet normal -0.053940 -0.980851 -0.187143 +outer loop +vertex 16.758194 -2.787295 2.417759 +vertex 19.016983 -2.881913 2.262618 +vertex 18.486927 -3.029857 3.190796 +endloop +endfacet +facet normal -0.071516 -0.986171 -0.149509 +outer loop +vertex 16.758194 -2.787295 2.417759 +vertex 18.486927 -3.029857 3.190796 +vertex 16.903872 -2.995256 3.719807 +endloop +endfacet +facet normal -0.011128 -0.992556 -0.121283 +outer loop +vertex 21.142828 -2.968985 2.448945 +vertex 19.410824 -3.104883 3.720019 +vertex 18.486927 -3.029857 3.190796 +endloop +endfacet +facet normal -0.025313 -0.984870 -0.171436 +outer loop +vertex 21.142828 -2.968985 2.448945 +vertex 18.486927 -3.029857 3.190796 +vertex 19.016983 -2.881913 2.262618 +endloop +endfacet +facet normal -0.053978 -0.998535 -0.003898 +outer loop +vertex 14.999439 -2.963156 6.095771 +vertex 17.317537 -3.084208 5.004945 +vertex 18.135849 -3.132686 6.091653 +endloop +endfacet +facet normal -0.053604 -0.993996 0.095390 +outer loop +vertex 18.135849 -3.132686 6.091653 +vertex 15.780942 -2.814433 8.084641 +vertex 15.436029 -2.794299 8.100622 +endloop +endfacet +facet normal -0.053600 -0.993996 0.095388 +outer loop +vertex 15.436029 -2.794299 8.100622 +vertex 15.539762 -2.781838 8.288755 +vertex 15.458335 -2.770834 8.357668 +endloop +endfacet +facet normal -0.053602 -0.993996 0.095392 +outer loop +vertex 14.999439 -2.963156 6.095771 +vertex 18.135849 -3.132686 6.091653 +vertex 15.436029 -2.794299 8.100622 +endloop +endfacet +facet normal -0.053597 -0.993996 0.095394 +outer loop +vertex 15.458335 -2.770834 8.357668 +vertex 14.999439 -2.963156 6.095771 +vertex 15.436029 -2.794299 8.100622 +endloop +endfacet +facet normal -0.049442 -0.998435 -0.026141 +outer loop +vertex 14.999439 -2.963156 6.095771 +vertex 14.808001 -2.908951 4.387503 +vertex 16.903872 -2.995256 3.719807 +endloop +endfacet +facet normal -0.073363 -0.996274 -0.045343 +outer loop +vertex 14.999439 -2.963156 6.095771 +vertex 16.903872 -2.995256 3.719807 +vertex 17.317537 -3.084208 5.004945 +endloop +endfacet +facet normal -0.025465 -0.999353 -0.025406 +outer loop +vertex 18.135849 -3.132686 6.091653 +vertex 17.317537 -3.084208 5.004945 +vertex 19.410824 -3.104883 3.720019 +endloop +endfacet +facet normal -0.039013 -0.998704 -0.032681 +outer loop +vertex 18.135849 -3.132686 6.091653 +vertex 19.410824 -3.104883 3.720019 +vertex 20.531229 -3.172596 4.451771 +endloop +endfacet +facet normal -0.048406 -0.919580 -0.389908 +outer loop +vertex 13.235235 -2.149359 1.350582 +vertex 16.677395 -2.328955 1.346818 +vertex 16.758194 -2.787295 2.417759 +endloop +endfacet +facet normal -0.080440 -0.949832 -0.302241 +outer loop +vertex 13.235235 -2.149359 1.350582 +vertex 16.758194 -2.787295 2.417759 +vertex 14.374381 -2.709676 2.808274 +endloop +endfacet +facet normal -0.050820 -0.907086 -0.417866 +outer loop +vertex 16.677395 -2.328955 1.346818 +vertex 19.305408 -2.463877 1.320084 +vertex 19.016983 -2.881913 2.262618 +endloop +endfacet +facet normal -0.065183 -0.919157 -0.388461 +outer loop +vertex 16.677395 -2.328955 1.346818 +vertex 19.016983 -2.881913 2.262618 +vertex 16.758194 -2.787295 2.417759 +endloop +endfacet +facet normal -0.056911 -0.986856 -0.151252 +outer loop +vertex 14.374381 -2.709676 2.808274 +vertex 16.758194 -2.787295 2.417759 +vertex 16.903872 -2.995256 3.719807 +endloop +endfacet +facet normal -0.074213 -0.991724 -0.104763 +outer loop +vertex 14.374381 -2.709676 2.808274 +vertex 16.903872 -2.995256 3.719807 +vertex 14.808001 -2.908951 4.387503 +endloop +endfacet +facet normal 0.017575 -0.964533 -0.263376 +outer loop +vertex 26.752544 -2.589665 1.434137 +vertex 22.986065 -3.078571 2.973266 +vertex 21.142828 -2.968985 2.448945 +endloop +endfacet +facet normal -0.006963 -0.923448 -0.383662 +outer loop +vertex 26.752544 -2.589665 1.434137 +vertex 21.142828 -2.968985 2.448945 +vertex 22.056328 -2.526146 1.366480 +endloop +endfacet +facet normal -0.009040 -0.996881 -0.078405 +outer loop +vertex 22.986065 -3.078571 2.973266 +vertex 20.531229 -3.172596 4.451771 +vertex 19.410824 -3.104883 3.720019 +endloop +endfacet +facet normal -0.020734 -0.990740 -0.134179 +outer loop +vertex 22.986065 -3.078571 2.973266 +vertex 19.410824 -3.104883 3.720019 +vertex 21.142828 -2.968985 2.448945 +endloop +endfacet +facet normal -0.004391 -0.924230 -0.381811 +outer loop +vertex 22.056328 -2.526146 1.366480 +vertex 21.142828 -2.968985 2.448945 +vertex 19.016983 -2.881913 2.262618 +endloop +endfacet +facet normal -0.013758 -0.912470 -0.408912 +outer loop +vertex 22.056328 -2.526146 1.366480 +vertex 19.016983 -2.881913 2.262618 +vertex 19.305408 -2.463877 1.320084 +endloop +endfacet +facet normal 0.009464 -0.265393 -0.964094 +outer loop +vertex 21.152800 -1.671543 0.753253 +vertex 19.011806 -1.749285 0.753637 +vertex 18.485788 -1.047572 0.555308 +endloop +endfacet +facet normal 0.039705 -0.143966 -0.988786 +outer loop +vertex 21.152800 -1.671543 0.753253 +vertex 18.485788 -1.047572 0.555308 +vertex 19.435152 -0.680933 0.540048 +endloop +endfacet +facet normal -0.045444 -0.214786 -0.975603 +outer loop +vertex 16.746109 -1.541689 0.745126 +vertex 16.898190 -0.628839 0.537072 +vertex 18.485788 -1.047572 0.555308 +endloop +endfacet +facet normal -0.022762 -0.287675 -0.957458 +outer loop +vertex 16.746109 -1.541689 0.745126 +vertex 18.485788 -1.047572 0.555308 +vertex 19.011806 -1.749285 0.753637 +endloop +endfacet +facet normal -0.017933 0.004821 -0.999828 +outer loop +vertex 17.376574 0.244999 0.581435 +vertex 19.435152 -0.680933 0.540048 +vertex 18.485788 -1.047572 0.555308 +endloop +endfacet +facet normal 0.021717 0.038830 -0.999010 +outer loop +vertex 17.376574 0.244999 0.581435 +vertex 18.485788 -1.047572 0.555308 +vertex 16.898190 -0.628839 0.537072 +endloop +endfacet +facet normal 0.003884 -0.580278 -0.814409 +outer loop +vertex 26.752544 -2.589665 1.434137 +vertex 22.056328 -2.526146 1.366480 +vertex 21.152800 -1.671543 0.753253 +endloop +endfacet +facet normal 0.052271 -0.369286 -0.927845 +outer loop +vertex 26.752544 -2.589665 1.434137 +vertex 21.152800 -1.671543 0.753253 +vertex 23.085478 -1.280291 0.706413 +endloop +endfacet +facet normal -0.000852 -0.621409 -0.783486 +outer loop +vertex 22.056328 -2.526146 1.366480 +vertex 19.305408 -2.463877 1.320084 +vertex 19.011806 -1.749285 0.753637 +endloop +endfacet +facet normal 0.020495 -0.568482 -0.822441 +outer loop +vertex 22.056328 -2.526146 1.366480 +vertex 19.011806 -1.749285 0.753637 +vertex 21.152800 -1.671543 0.753253 +endloop +endfacet +facet normal 0.014057 -0.187031 -0.982253 +outer loop +vertex 23.085478 -1.280291 0.706413 +vertex 21.152800 -1.671543 0.753253 +vertex 19.435152 -0.680933 0.540048 +endloop +endfacet +facet normal 0.036513 -0.054596 -0.997841 +outer loop +vertex 23.085478 -1.280291 0.706413 +vertex 19.435152 -0.680933 0.540048 +vertex 20.618484 -0.134188 0.553434 +endloop +endfacet +facet normal -0.068268 -0.478058 -0.875671 +outer loop +vertex 13.235235 -2.149359 1.350582 +vertex 14.364196 -1.103987 0.691866 +vertex 16.746109 -1.541689 0.745126 +endloop +endfacet +facet normal -0.032443 -0.605127 -0.795467 +outer loop +vertex 13.235235 -2.149359 1.350582 +vertex 16.746109 -1.541689 0.745126 +vertex 16.677395 -2.328955 1.346818 +endloop +endfacet +facet normal -0.036678 -0.127304 -0.991185 +outer loop +vertex 14.364196 -1.103987 0.691866 +vertex 14.778099 -0.081578 0.545235 +vertex 16.898190 -0.628839 0.537072 +endloop +endfacet +facet normal -0.018478 -0.219254 -0.975493 +outer loop +vertex 14.364196 -1.103987 0.691866 +vertex 16.898190 -0.628839 0.537072 +vertex 16.746109 -1.541689 0.745126 +endloop +endfacet +facet normal -0.052309 -0.603519 -0.795631 +outer loop +vertex 16.677395 -2.328955 1.346818 +vertex 16.746109 -1.541689 0.745126 +vertex 19.011806 -1.749285 0.753637 +endloop +endfacet +facet normal -0.040268 -0.630799 -0.774901 +outer loop +vertex 16.677395 -2.328955 1.346818 +vertex 19.011806 -1.749285 0.753637 +vertex 19.305408 -2.463877 1.320084 +endloop +endfacet +facet normal -0.114675 0.329351 -0.937218 +outer loop +vertex 15.508273 2.303025 1.533252 +vertex 18.347206 1.014438 0.733063 +vertex 17.376574 0.244999 0.581435 +endloop +endfacet +facet normal 0.107539 0.496098 -0.861581 +outer loop +vertex 15.508273 2.303025 1.533252 +vertex 17.376574 0.244999 0.581435 +vertex 15.017767 0.994756 0.718727 +endloop +endfacet +facet normal -0.031693 0.092959 -0.995165 +outer loop +vertex 18.347206 1.014438 0.733063 +vertex 20.618484 -0.134188 0.553434 +vertex 19.435152 -0.680933 0.540048 +endloop +endfacet +facet normal 0.043249 0.140367 -0.989155 +outer loop +vertex 18.347206 1.014438 0.733063 +vertex 19.435152 -0.680933 0.540048 +vertex 17.376574 0.244999 0.581435 +endloop +endfacet +facet normal -0.035721 0.070167 -0.996895 +outer loop +vertex 15.017767 0.994756 0.718727 +vertex 17.376574 0.244999 0.581435 +vertex 16.898190 -0.628839 0.537072 +endloop +endfacet +facet normal 0.035271 0.151376 -0.987847 +outer loop +vertex 15.017767 0.994756 0.718727 +vertex 16.898190 -0.628839 0.537072 +vertex 14.778099 -0.081578 0.545235 +endloop +endfacet +facet normal -0.207907 -0.234473 0.949630 +outer loop +vertex 8.814745 -1.206727 6.949300 +vertex 10.684258 -1.438964 7.301260 +vertex 11.230325 -0.752508 7.590306 +endloop +endfacet +facet normal -0.221349 -0.176374 0.959112 +outer loop +vertex 8.814745 -1.206727 6.949300 +vertex 11.230325 -0.752508 7.590306 +vertex 10.351794 -0.324887 7.466191 +endloop +endfacet +facet normal -0.182416 -0.136784 0.973660 +outer loop +vertex 12.766925 -1.493038 7.774157 +vertex 12.825415 -0.437871 7.933350 +vertex 11.230325 -0.752508 7.590306 +endloop +endfacet +facet normal -0.221337 -0.223614 0.949214 +outer loop +vertex 12.766925 -1.493038 7.774157 +vertex 11.230325 -0.752508 7.590306 +vertex 10.684258 -1.438964 7.301260 +endloop +endfacet +facet normal -0.175156 -0.074923 0.981686 +outer loop +vertex 12.479491 0.556369 7.913082 +vertex 10.351794 -0.324887 7.466191 +vertex 11.230325 -0.752508 7.590306 +endloop +endfacet +facet normal -0.200587 -0.049845 0.978407 +outer loop +vertex 12.479491 0.556369 7.913082 +vertex 11.230325 -0.752508 7.590306 +vertex 12.825415 -0.437871 7.933350 +endloop +endfacet +facet normal -0.175617 -0.583240 0.793089 +outer loop +vertex 5.333334 -1.828283 5.721304 +vertex 8.131913 -1.975336 6.232861 +vertex 8.814745 -1.206727 6.949300 +endloop +endfacet +facet normal -0.231487 -0.428725 0.873275 +outer loop +vertex 5.333334 -1.828283 5.721304 +vertex 8.814745 -1.206727 6.949300 +vertex 7.198318 -0.798686 6.721142 +endloop +endfacet +facet normal -0.207574 -0.580538 0.787330 +outer loop +vertex 8.131913 -1.975336 6.232861 +vertex 10.391977 -2.143262 6.704890 +vertex 10.684258 -1.438964 7.301260 +endloop +endfacet +facet normal -0.219985 -0.553386 0.803349 +outer loop +vertex 8.131913 -1.975336 6.232861 +vertex 10.684258 -1.438964 7.301260 +vertex 8.814745 -1.206727 6.949300 +endloop +endfacet +facet normal -0.191770 -0.225608 0.955157 +outer loop +vertex 7.198318 -0.798686 6.721142 +vertex 8.814745 -1.206727 6.949300 +vertex 10.351794 -0.324887 7.466191 +endloop +endfacet +facet normal -0.211874 -0.115797 0.970413 +outer loop +vertex 7.198318 -0.798686 6.721142 +vertex 10.351794 -0.324887 7.466191 +vertex 9.218365 0.199331 7.281278 +endloop +endfacet +facet normal -0.252034 -0.090897 0.963440 +outer loop +vertex 15.458335 -2.770834 8.357668 +vertex 15.000001 -1.500000 8.357668 +vertex 12.766925 -1.493038 7.774157 +endloop +endfacet +facet normal -0.387026 -0.446878 0.806542 +outer loop +vertex 15.458335 -2.770834 8.357668 +vertex 12.766925 -1.493038 7.774157 +vertex 12.673998 -2.361658 7.248292 +endloop +endfacet +facet normal -0.191514 0.000000 0.981490 +outer loop +vertex 15.000001 -1.500000 8.357668 +vertex 15.000001 0.000000 8.357668 +vertex 12.825415 -0.437871 7.933350 +endloop +endfacet +facet normal -0.251025 -0.130785 0.959105 +outer loop +vertex 15.000001 -1.500000 8.357668 +vertex 12.825415 -0.437871 7.933350 +vertex 12.766925 -1.493038 7.774157 +endloop +endfacet +facet normal -0.205027 -0.490744 0.846838 +outer loop +vertex 12.673998 -2.361658 7.248292 +vertex 12.766925 -1.493038 7.774157 +vertex 10.684258 -1.438964 7.301260 +endloop +endfacet +facet normal -0.241796 -0.566639 0.787690 +outer loop +vertex 12.673998 -2.361658 7.248292 +vertex 10.684258 -1.438964 7.301260 +vertex 10.391977 -2.143262 6.704890 +endloop +endfacet +facet normal -0.178002 0.042065 0.983131 +outer loop +vertex 15.458333 2.770834 8.357668 +vertex 11.600214 1.316005 7.721383 +vertex 12.479491 0.556369 7.913082 +endloop +endfacet +facet normal -0.199291 0.071876 0.977301 +outer loop +vertex 15.458333 2.770834 8.357668 +vertex 12.479491 0.556369 7.913082 +vertex 15.000001 1.500000 8.357668 +endloop +endfacet +facet normal -0.171271 -0.022875 0.984958 +outer loop +vertex 11.600214 1.316005 7.721383 +vertex 9.218365 0.199331 7.281278 +vertex 10.351794 -0.324887 7.466191 +endloop +endfacet +facet normal -0.207969 0.006110 0.978116 +outer loop +vertex 11.600214 1.316005 7.721383 +vertex 10.351794 -0.324887 7.466191 +vertex 12.479491 0.556369 7.913082 +endloop +endfacet +facet normal -0.160593 -0.035767 0.986373 +outer loop +vertex 15.000001 1.500000 8.357668 +vertex 12.479491 0.556369 7.913082 +vertex 12.825415 -0.437871 7.933350 +endloop +endfacet +facet normal -0.191514 0.000000 0.981490 +outer loop +vertex 15.000001 1.500000 8.357668 +vertex 12.825415 -0.437871 7.933350 +vertex 15.000001 0.000000 8.357668 +endloop +endfacet +facet normal -0.084059 0.991947 0.094739 +outer loop +vertex 8.334797 2.473336 5.217071 +vertex 10.207706 2.583551 5.724866 +vertex 11.047479 2.728813 4.949031 +endloop +endfacet +facet normal -0.088305 0.994612 0.054306 +outer loop +vertex 8.334797 2.473336 5.217071 +vertex 11.047479 2.728813 4.949031 +vertex 10.230559 2.689977 4.331943 +endloop +endfacet +facet normal -0.053528 0.997617 0.043540 +outer loop +vertex 12.456796 2.756068 6.057173 +vertex 12.761621 2.829240 4.755350 +vertex 11.047479 2.728813 4.949031 +endloop +endfacet +facet normal -0.089260 0.992013 0.089121 +outer loop +vertex 12.456796 2.756068 6.057173 +vertex 11.047479 2.728813 4.949031 +vertex 10.207706 2.583551 5.724866 +endloop +endfacet +facet normal -0.036886 0.999221 -0.014055 +outer loop +vertex 12.535257 2.764018 3.547343 +vertex 10.230559 2.689977 4.331943 +vertex 11.047479 2.728813 4.949031 +endloop +endfacet +facet normal -0.063164 0.997119 -0.042001 +outer loop +vertex 12.535257 2.764018 3.547343 +vertex 11.047479 2.728813 4.949031 +vertex 12.761621 2.829240 4.755350 +endloop +endfacet +facet normal -0.119460 0.943694 0.308497 +outer loop +vertex 4.272728 1.863636 5.509182 +vertex 6.831068 2.026018 6.003131 +vertex 8.334797 2.473336 5.217071 +endloop +endfacet +facet normal -0.128361 0.964920 0.229027 +outer loop +vertex 4.272728 1.863636 5.509182 +vertex 8.334797 2.473336 5.217071 +vertex 6.835320 2.433162 4.545931 +endloop +endfacet +facet normal -0.131981 0.946425 0.294720 +outer loop +vertex 6.831068 2.026018 6.003131 +vertex 9.113427 2.193287 6.488069 +vertex 10.207706 2.583551 5.724866 +endloop +endfacet +facet normal -0.133205 0.949137 0.285299 +outer loop +vertex 6.831068 2.026018 6.003131 +vertex 10.207706 2.583551 5.724866 +vertex 8.334797 2.473336 5.217071 +endloop +endfacet +facet normal -0.069128 0.993074 0.095003 +outer loop +vertex 6.835320 2.433162 4.545931 +vertex 8.334797 2.473336 5.217071 +vertex 10.230559 2.689977 4.331943 +endloop +endfacet +facet normal -0.073565 0.996864 0.029151 +outer loop +vertex 6.835320 2.433162 4.545931 +vertex 10.230559 2.689977 4.331943 +vertex 9.147440 2.632157 3.575842 +endloop +endfacet +facet normal -0.099396 0.987373 0.123348 +outer loop +vertex 15.458333 2.770834 8.357668 +vertex 14.959599 2.968169 6.376157 +vertex 12.456796 2.756068 6.057173 +endloop +endfacet +facet normal -0.162862 0.964840 0.206300 +outer loop +vertex 15.458333 2.770834 8.357668 +vertex 12.456796 2.756068 6.057173 +vertex 11.587097 2.393663 7.065519 +endloop +endfacet +facet normal -0.048012 0.998637 -0.020490 +outer loop +vertex 14.959599 2.968169 6.376157 +vertex 15.010111 2.935162 4.649097 +vertex 12.761621 2.829240 4.755350 +endloop +endfacet +facet normal -0.088838 0.995426 0.035149 +outer loop +vertex 14.959599 2.968169 6.376157 +vertex 12.761621 2.829240 4.755350 +vertex 12.456796 2.756068 6.057173 +endloop +endfacet +facet normal -0.110743 0.961846 0.250177 +outer loop +vertex 11.587097 2.393663 7.065519 +vertex 12.456796 2.756068 6.057173 +vertex 10.207706 2.583551 5.724866 +endloop +endfacet +facet normal -0.142479 0.949067 0.281020 +outer loop +vertex 11.587097 2.393663 7.065519 +vertex 10.207706 2.583551 5.724866 +vertex 9.113427 2.193287 6.488069 +endloop +endfacet +facet normal 0.038270 0.984884 -0.168934 +outer loop +vertex 15.508273 2.303025 1.533252 +vertex 11.713722 2.630891 2.585105 +vertex 12.535257 2.764018 3.547343 +endloop +endfacet +facet normal -0.066287 0.946914 -0.314580 +outer loop +vertex 15.508273 2.303025 1.533252 +vertex 12.535257 2.764018 3.547343 +vertex 15.109202 2.798170 3.107773 +endloop +endfacet +facet normal -0.018665 0.998594 -0.049625 +outer loop +vertex 11.713722 2.630891 2.585105 +vertex 9.147440 2.632157 3.575842 +vertex 10.230559 2.689977 4.331943 +endloop +endfacet +facet normal -0.061045 0.994469 -0.085468 +outer loop +vertex 11.713722 2.630891 2.585105 +vertex 10.230559 2.689977 4.331943 +vertex 12.535257 2.764018 3.547343 +endloop +endfacet +facet normal -0.021759 0.998520 -0.049835 +outer loop +vertex 15.109202 2.798170 3.107773 +vertex 12.535257 2.764018 3.547343 +vertex 12.761621 2.829240 4.755350 +endloop +endfacet +facet normal -0.051180 0.994473 -0.091679 +outer loop +vertex 15.109202 2.798170 3.107773 +vertex 12.761621 2.829240 4.755350 +vertex 15.010111 2.935162 4.649097 +endloop +endfacet +facet normal 0.054722 -0.170693 -0.983804 +outer loop +vertex 52.674423 -0.709498 0.593456 +vertex 51.466869 -0.919875 0.562790 +vertex 51.196529 -0.417554 0.460599 +endloop +endfacet +facet normal 0.065258 -0.120434 -0.990574 +outer loop +vertex 52.674423 -0.709498 0.593456 +vertex 51.196529 -0.417554 0.460599 +vertex 51.796329 -0.097145 0.461157 +endloop +endfacet +facet normal -0.010837 -0.123996 -0.992224 +outer loop +vertex 49.705631 -0.887627 0.535626 +vertex 49.976562 -0.176008 0.443738 +vertex 51.196529 -0.417554 0.460599 +endloop +endfacet +facet normal 0.011591 -0.193348 -0.981062 +outer loop +vertex 49.705631 -0.887627 0.535626 +vertex 51.196529 -0.417554 0.460599 +vertex 51.466869 -0.919875 0.562790 +endloop +endfacet +facet normal -0.003247 0.007819 -0.999964 +outer loop +vertex 50.442947 0.478647 0.470053 +vertex 51.796329 -0.097145 0.461157 +vertex 51.196529 -0.417554 0.460599 +endloop +endfacet +facet normal 0.019077 0.026585 -0.999465 +outer loop +vertex 50.442947 0.478647 0.470053 +vertex 51.196529 -0.417554 0.460599 +vertex 49.976562 -0.176008 0.443738 +endloop +endfacet +facet normal 0.111522 -0.433531 -0.894211 +outer loop +vertex 55.000004 -1.000000 1.024333 +vertex 53.069855 -1.279745 0.919241 +vertex 52.674423 -0.709498 0.593456 +endloop +endfacet +facet normal 0.131659 -0.331615 -0.934183 +outer loop +vertex 55.000004 -1.000000 1.024333 +vertex 52.674423 -0.709498 0.593456 +vertex 53.526051 -0.368843 0.592556 +endloop +endfacet +facet normal 0.102334 -0.431799 -0.896146 +outer loop +vertex 53.069855 -1.279745 0.919241 +vertex 51.584263 -1.469445 0.841000 +vertex 51.466869 -0.919875 0.562790 +endloop +endfacet +facet normal 0.099437 -0.440718 -0.892121 +outer loop +vertex 53.069855 -1.279745 0.919241 +vertex 51.466869 -0.919875 0.562790 +vertex 52.674423 -0.709498 0.593456 +endloop +endfacet +facet normal 0.053660 -0.136761 -0.989150 +outer loop +vertex 53.526051 -0.368843 0.592556 +vertex 52.674423 -0.709498 0.593456 +vertex 51.796329 -0.097145 0.461157 +endloop +endfacet +facet normal 0.064366 -0.071597 -0.995355 +outer loop +vertex 53.526051 -0.368843 0.592556 +vertex 51.796329 -0.097145 0.461157 +vertex 52.409733 0.291152 0.472893 +endloop +endfacet +facet normal -0.013460 -0.238450 -0.971061 +outer loop +vertex 45.986675 -1.473333 0.731000 +vertex 47.104279 -0.592443 0.499200 +vertex 49.705631 -0.887627 0.535626 +endloop +endfacet +facet normal 0.011553 -0.381650 -0.924235 +outer loop +vertex 45.986675 -1.473333 0.731000 +vertex 49.705631 -0.887627 0.535626 +vertex 49.558994 -1.541163 0.803662 +endloop +endfacet +facet normal -0.011256 -0.055335 -0.998405 +outer loop +vertex 47.104279 -0.592443 0.499200 +vertex 47.743988 0.219856 0.446967 +vertex 49.976562 -0.176008 0.443738 +endloop +endfacet +facet normal -0.000617 -0.127831 -0.991796 +outer loop +vertex 47.104279 -0.592443 0.499200 +vertex 49.976562 -0.176008 0.443738 +vertex 49.705631 -0.887627 0.535626 +endloop +endfacet +facet normal 0.007287 -0.380846 -0.924610 +outer loop +vertex 49.558994 -1.541163 0.803662 +vertex 49.705631 -0.887627 0.535626 +vertex 51.466869 -0.919875 0.562790 +endloop +endfacet +facet normal 0.032282 -0.445925 -0.894488 +outer loop +vertex 49.558994 -1.541163 0.803662 +vertex 51.466869 -0.919875 0.562790 +vertex 51.584263 -1.469445 0.841000 +endloop +endfacet +facet normal -0.083283 0.263095 -0.961169 +outer loop +vertex 49.363640 1.792930 0.923323 +vertex 51.159924 0.980571 0.545317 +vertex 50.442947 0.478647 0.470053 +endloop +endfacet +facet normal 0.060146 0.369231 -0.927389 +outer loop +vertex 49.363640 1.792930 0.923323 +vertex 50.442947 0.478647 0.470053 +vertex 48.246258 1.017376 0.542076 +endloop +endfacet +facet normal -0.022004 0.064914 -0.997648 +outer loop +vertex 51.159924 0.980571 0.545317 +vertex 52.409733 0.291152 0.472893 +vertex 51.796329 -0.097145 0.461157 +endloop +endfacet +facet normal 0.035397 0.098564 -0.994501 +outer loop +vertex 51.159924 0.980571 0.545317 +vertex 51.796329 -0.097145 0.461157 +vertex 50.442947 0.478647 0.470053 +endloop +endfacet +facet normal -0.019487 0.054012 -0.998350 +outer loop +vertex 48.246258 1.017376 0.542076 +vertex 50.442947 0.478647 0.470053 +vertex 49.976562 -0.176008 0.443738 +endloop +endfacet +facet normal 0.017615 0.107453 -0.994054 +outer loop +vertex 48.246258 1.017376 0.542076 +vertex 49.976562 -0.176008 0.443738 +vertex 47.743988 0.219856 0.446967 +endloop +endfacet +facet normal 0.103997 -0.993227 -0.051811 +outer loop +vertex 50.249496 -2.189126 2.495076 +vertex 49.912304 -2.191964 1.872657 +vertex 51.167130 -2.052176 1.711607 +endloop +endfacet +facet normal 0.108150 -0.993027 -0.046913 +outer loop +vertex 50.249496 -2.189126 2.495076 +vertex 51.167130 -2.052176 1.711607 +vertex 51.739006 -2.003437 1.998294 +endloop +endfacet +facet normal 0.067192 -0.926506 -0.370233 +outer loop +vertex 49.697483 -1.986714 1.281070 +vertex 51.462238 -1.861012 1.286779 +vertex 51.167130 -2.052176 1.711607 +endloop +endfacet +facet normal 0.059813 -0.936137 -0.346512 +outer loop +vertex 49.697483 -1.986714 1.281070 +vertex 51.167130 -2.052176 1.711607 +vertex 49.912304 -2.191964 1.872657 +endloop +endfacet +facet normal 0.178912 -0.964775 -0.192870 +outer loop +vertex 52.667137 -1.718126 1.432071 +vertex 51.739006 -2.003437 1.998294 +vertex 51.167130 -2.052176 1.711607 +endloop +endfacet +facet normal 0.149342 -0.936386 -0.317613 +outer loop +vertex 52.667137 -1.718126 1.432071 +vertex 51.167130 -2.052176 1.711607 +vertex 51.462238 -1.861012 1.286779 +endloop +endfacet +facet normal 0.097164 -0.957821 0.270441 +outer loop +vertex 48.166676 -2.000000 3.913223 +vertex 47.784302 -2.359905 2.775923 +vertex 50.249496 -2.189126 2.495076 +endloop +endfacet +facet normal 0.041678 -0.980515 0.191974 +outer loop +vertex 48.166676 -2.000000 3.913223 +vertex 50.249496 -2.189126 2.495076 +vertex 50.865349 -2.053394 3.054627 +endloop +endfacet +facet normal 0.071613 -0.997293 -0.016709 +outer loop +vertex 47.784302 -2.359905 2.775923 +vertex 47.610008 -2.359042 1.977433 +vertex 49.912304 -2.191964 1.872657 +endloop +endfacet +facet normal 0.065565 -0.997367 -0.030972 +outer loop +vertex 47.784302 -2.359905 2.775923 +vertex 49.912304 -2.191964 1.872657 +vertex 50.249496 -2.189126 2.495076 +endloop +endfacet +facet normal 0.148268 -0.986023 0.075995 +outer loop +vertex 50.865349 -2.053394 3.054627 +vertex 50.249496 -2.189126 2.495076 +vertex 51.739006 -2.003437 1.998294 +endloop +endfacet +facet normal 0.126570 -0.990270 0.057849 +outer loop +vertex 50.865349 -2.053394 3.054627 +vertex 51.739006 -2.003437 1.998294 +vertex 52.331310 -1.905801 2.373729 +endloop +endfacet +facet normal -0.000003 -0.731078 -0.682293 +outer loop +vertex 45.986675 -1.473333 0.731000 +vertex 49.558994 -1.541163 0.803662 +vertex 49.697483 -1.986714 1.281070 +endloop +endfacet +facet normal 0.027440 -0.631728 -0.774704 +outer loop +vertex 45.986675 -1.473333 0.731000 +vertex 49.697483 -1.986714 1.281070 +vertex 47.087532 -2.123862 1.300462 +endloop +endfacet +facet normal 0.038818 -0.755992 -0.653429 +outer loop +vertex 49.558994 -1.541163 0.803662 +vertex 51.584263 -1.469445 0.841000 +vertex 51.462238 -1.861012 1.286779 +endloop +endfacet +facet normal 0.053673 -0.722210 -0.689588 +outer loop +vertex 49.558994 -1.541163 0.803662 +vertex 51.462238 -1.861012 1.286779 +vertex 49.697483 -1.986714 1.281070 +endloop +endfacet +facet normal 0.046763 -0.938340 -0.342535 +outer loop +vertex 47.087532 -2.123862 1.300462 +vertex 49.697483 -1.986714 1.281070 +vertex 49.912304 -2.191964 1.872657 +endloop +endfacet +facet normal 0.051025 -0.930529 -0.362647 +outer loop +vertex 47.087532 -2.123862 1.300462 +vertex 49.912304 -2.191964 1.872657 +vertex 47.610008 -2.359042 1.977433 +endloop +endfacet +facet normal 0.230432 -0.923203 -0.307567 +outer loop +vertex 55.000004 -1.000000 1.024333 +vertex 53.516243 -1.601796 1.719050 +vertex 52.667137 -1.718126 1.432071 +endloop +endfacet +facet normal 0.148033 -0.806161 -0.572879 +outer loop +vertex 55.000004 -1.000000 1.024333 +vertex 52.667137 -1.718126 1.432071 +vertex 53.069855 -1.279745 0.919241 +endloop +endfacet +facet normal 0.208521 -0.975108 -0.075387 +outer loop +vertex 53.516243 -1.601796 1.719050 +vertex 52.331310 -1.905801 2.373729 +vertex 51.739006 -2.003437 1.998294 +endloop +endfacet +facet normal 0.191047 -0.966100 -0.173645 +outer loop +vertex 53.516243 -1.601796 1.719050 +vertex 51.739006 -2.003437 1.998294 +vertex 52.667137 -1.718126 1.432071 +endloop +endfacet +facet normal 0.163964 -0.809735 -0.563422 +outer loop +vertex 53.069855 -1.279745 0.919241 +vertex 52.667137 -1.718126 1.432071 +vertex 51.462238 -1.861012 1.286779 +endloop +endfacet +facet normal 0.130727 -0.762334 -0.633843 +outer loop +vertex 53.069855 -1.279745 0.919241 +vertex 51.462238 -1.861012 1.286779 +vertex 51.584263 -1.469445 0.841000 +endloop +endfacet +facet normal 0.184375 -0.318695 0.929752 +outer loop +vertex 36.147072 -1.831106 6.448225 +vertex 40.017311 -1.760391 5.704975 +vertex 41.560101 -1.103757 5.624108 +endloop +endfacet +facet normal 0.165458 -0.122603 0.978566 +outer loop +vertex 36.147072 -1.831106 6.448225 +vertex 41.560101 -1.103757 5.624108 +vertex 39.862602 -0.822579 5.946353 +endloop +endfacet +facet normal 0.183797 -0.244654 0.952031 +outer loop +vertex 44.075966 -1.492789 5.038428 +vertex 44.441277 -0.694113 5.173146 +vertex 41.560101 -1.103757 5.624108 +endloop +endfacet +facet normal 0.173716 -0.292338 0.940405 +outer loop +vertex 44.075966 -1.492789 5.038428 +vertex 41.560101 -1.103757 5.624108 +vertex 40.017311 -1.760391 5.704975 +endloop +endfacet +facet normal 0.180735 -0.035334 0.982897 +outer loop +vertex 43.582516 0.046202 5.293565 +vertex 39.862602 -0.822579 5.946353 +vertex 41.560101 -1.103757 5.624108 +endloop +endfacet +facet normal 0.152392 0.016036 0.988190 +outer loop +vertex 43.582516 0.046202 5.293565 +vertex 41.560101 -1.103757 5.624108 +vertex 44.441277 -0.694113 5.173146 +endloop +endfacet +facet normal 0.172939 -0.712636 0.679884 +outer loop +vertex 32.833088 -2.745604 6.499722 +vertex 37.831306 -2.456728 5.531137 +vertex 40.017311 -1.760391 5.704975 +endloop +endfacet +facet normal 0.166410 -0.557232 0.813511 +outer loop +vertex 32.833088 -2.745604 6.499722 +vertex 40.017311 -1.760391 5.704975 +vertex 36.147072 -1.831106 6.448225 +endloop +endfacet +facet normal 0.187405 -0.213269 0.958851 +outer loop +vertex 32.798649 -1.584844 7.157436 +vertex 36.147072 -1.831106 6.448225 +vertex 39.862602 -0.822579 5.946353 +endloop +endfacet +facet normal 0.168591 0.003703 0.985679 +outer loop +vertex 32.798649 -1.584844 7.157436 +vertex 39.862602 -0.822579 5.946353 +vertex 37.555817 -0.354681 6.339149 +endloop +endfacet +facet normal 0.168089 -0.512462 0.842097 +outer loop +vertex 48.166676 -2.000000 3.913223 +vertex 47.781036 -1.082973 4.548262 +vertex 44.075966 -1.492789 5.038428 +endloop +endfacet +facet normal 0.136009 -0.619029 0.773502 +outer loop +vertex 48.166676 -2.000000 3.913223 +vertex 44.075966 -1.492789 5.038428 +vertex 42.545757 -2.222376 4.723609 +endloop +endfacet +facet normal 0.166339 -0.139921 0.976091 +outer loop +vertex 47.781036 -1.082973 4.548262 +vertex 47.583881 -0.209556 4.707063 +vertex 44.441277 -0.694113 5.173146 +endloop +endfacet +facet normal 0.152744 -0.231906 0.960671 +outer loop +vertex 47.781036 -1.082973 4.548262 +vertex 44.441277 -0.694113 5.173146 +vertex 44.075966 -1.492789 5.038428 +endloop +endfacet +facet normal 0.163914 -0.660109 0.733068 +outer loop +vertex 42.545757 -2.222376 4.723609 +vertex 44.075966 -1.492789 5.038428 +vertex 40.017311 -1.760391 5.704975 +endloop +endfacet +facet normal 0.157177 -0.673692 0.722104 +outer loop +vertex 42.545757 -2.222376 4.723609 +vertex 40.017311 -1.760391 5.704975 +vertex 37.831306 -2.456728 5.531137 +endloop +endfacet +facet normal 0.198517 0.307649 0.930561 +outer loop +vertex 45.262634 1.792930 4.357667 +vertex 41.577522 0.722469 5.497714 +vertex 43.582516 0.046202 5.293565 +endloop +endfacet +facet normal 0.086579 0.404526 0.910419 +outer loop +vertex 45.262634 1.792930 4.357667 +vertex 43.582516 0.046202 5.293565 +vertex 46.970215 0.694892 4.683170 +endloop +endfacet +facet normal 0.183268 0.081065 0.979715 +outer loop +vertex 41.577522 0.722469 5.497714 +vertex 37.555817 -0.354681 6.339149 +vertex 39.862602 -0.822579 5.946353 +endloop +endfacet +facet normal 0.142676 0.126675 0.981630 +outer loop +vertex 41.577522 0.722469 5.497714 +vertex 39.862602 -0.822579 5.946353 +vertex 43.582516 0.046202 5.293565 +endloop +endfacet +facet normal 0.170270 0.037342 0.984690 +outer loop +vertex 46.970215 0.694892 4.683170 +vertex 43.582516 0.046202 5.293565 +vertex 44.441277 -0.694113 5.173146 +endloop +endfacet +facet normal 0.128644 0.113311 0.985196 +outer loop +vertex 46.970215 0.694892 4.683170 +vertex 44.441277 -0.694113 5.173146 +vertex 47.583881 -0.209556 4.707063 +endloop +endfacet +facet normal 0.039897 0.997857 0.051864 +outer loop +vertex 43.657722 2.568572 2.769760 +vertex 44.696526 2.563327 2.071559 +vertex 42.040512 2.681520 1.840692 +endloop +endfacet +facet normal 0.050933 0.998167 0.032691 +outer loop +vertex 43.657722 2.568572 2.769760 +vertex 42.040512 2.681520 1.840692 +vertex 40.275978 2.759886 2.197073 +endloop +endfacet +facet normal 0.046625 0.963783 -0.262580 +outer loop +vertex 44.900307 2.428381 1.419360 +vertex 41.148026 2.594087 1.361296 +vertex 42.040512 2.681520 1.840692 +endloop +endfacet +facet normal 0.059680 0.981049 -0.184341 +outer loop +vertex 44.900307 2.428381 1.419360 +vertex 42.040512 2.681520 1.840692 +vertex 44.696526 2.563327 2.071559 +endloop +endfacet +facet normal 0.017645 0.991277 -0.130608 +outer loop +vertex 37.490425 2.725876 1.562616 +vertex 40.275978 2.759886 2.197073 +vertex 42.040512 2.681520 1.840692 +endloop +endfacet +facet normal 0.022990 0.975085 -0.220638 +outer loop +vertex 37.490425 2.725876 1.562616 +vertex 42.040512 2.681520 1.840692 +vertex 41.148026 2.594087 1.361296 +endloop +endfacet +facet normal 0.023267 0.907364 0.419702 +outer loop +vertex 45.262634 1.792930 4.357667 +vertex 46.986958 2.274199 3.221608 +vertex 43.657722 2.568572 2.769760 +endloop +endfacet +facet normal 0.118241 0.934128 0.336784 +outer loop +vertex 45.262634 1.792930 4.357667 +vertex 43.657722 2.568572 2.769760 +vertex 41.623692 2.542653 3.555777 +endloop +endfacet +facet normal 0.043934 0.986073 0.160405 +outer loop +vertex 46.986958 2.274199 3.221608 +vertex 47.717857 2.373972 2.408079 +vertex 44.696526 2.563327 2.071559 +endloop +endfacet +facet normal 0.073819 0.992003 0.102378 +outer loop +vertex 46.986958 2.274199 3.221608 +vertex 44.696526 2.563327 2.071559 +vertex 43.657722 2.568572 2.769760 +endloop +endfacet +facet normal 0.035158 0.991699 0.123681 +outer loop +vertex 41.623692 2.542653 3.555777 +vertex 43.657722 2.568572 2.769760 +vertex 40.275978 2.759886 2.197073 +endloop +endfacet +facet normal 0.060704 0.993274 0.098594 +outer loop +vertex 41.623692 2.542653 3.555777 +vertex 40.275978 2.759886 2.197073 +vertex 37.925159 2.841050 2.826803 +endloop +endfacet +facet normal 0.055260 0.826010 -0.560941 +outer loop +vertex 49.363640 1.792930 0.923323 +vertex 44.908054 2.060014 0.877686 +vertex 44.900307 2.428381 1.419360 +endloop +endfacet +facet normal 0.078874 0.895661 -0.437687 +outer loop +vertex 49.363640 1.792930 0.923323 +vertex 44.900307 2.428381 1.419360 +vertex 48.242996 2.261178 1.679576 +endloop +endfacet +facet normal 0.037049 0.801405 -0.596974 +outer loop +vertex 44.908054 2.060014 0.877686 +vertex 40.623978 2.257716 0.877214 +vertex 41.148026 2.594087 1.361296 +endloop +endfacet +facet normal 0.045179 0.826363 -0.561323 +outer loop +vertex 44.908054 2.060014 0.877686 +vertex 41.148026 2.594087 1.361296 +vertex 44.900307 2.428381 1.419360 +endloop +endfacet +facet normal 0.063333 0.981034 -0.183196 +outer loop +vertex 48.242996 2.261178 1.679576 +vertex 44.900307 2.428381 1.419360 +vertex 44.696526 2.563327 2.071559 +endloop +endfacet +facet normal 0.073402 0.992204 -0.100712 +outer loop +vertex 48.242996 2.261178 1.679576 +vertex 44.696526 2.563327 2.071559 +vertex 47.717857 2.373972 2.408079 +endloop +endfacet +facet normal -0.022142 0.924819 -0.379763 +outer loop +vertex 30.224367 2.412967 1.224249 +vertex 34.121059 2.869947 2.109917 +vertex 37.490425 2.725876 1.562616 +endloop +endfacet +facet normal -0.013562 0.862312 -0.506196 +outer loop +vertex 30.224367 2.412967 1.224249 +vertex 37.490425 2.725876 1.562616 +vertex 36.144936 2.362384 0.979452 +endloop +endfacet +facet normal 0.018682 0.998089 -0.058900 +outer loop +vertex 34.121059 2.869947 2.109917 +vertex 37.925159 2.841050 2.826803 +vertex 40.275978 2.759886 2.197073 +endloop +endfacet +facet normal 0.019679 0.990031 -0.139468 +outer loop +vertex 34.121059 2.869947 2.109917 +vertex 40.275978 2.759886 2.197073 +vertex 37.490425 2.725876 1.562616 +endloop +endfacet +facet normal 0.001296 0.847296 -0.531120 +outer loop +vertex 36.144936 2.362384 0.979452 +vertex 37.490425 2.725876 1.562616 +vertex 41.148026 2.594087 1.361296 +endloop +endfacet +facet normal 0.005994 0.818142 -0.574985 +outer loop +vertex 36.144936 2.362384 0.979452 +vertex 41.148026 2.594087 1.361296 +vertex 40.623978 2.257716 0.877214 +endloop +endfacet +facet normal -0.035335 0.996555 -0.075031 +outer loop +vertex 23.709536 3.370836 5.004611 +vertex 24.248417 3.292628 3.712090 +vertex 22.616539 3.195441 3.189772 +endloop +endfacet +facet normal -0.029504 0.996475 -0.078536 +outer loop +vertex 23.709536 3.370836 5.004611 +vertex 22.616539 3.195441 3.189772 +vertex 21.666407 3.209487 3.724936 +endloop +endfacet +facet normal -0.010336 0.973966 -0.226459 +outer loop +vertex 24.699970 3.032526 2.394014 +vertex 22.188141 2.974855 2.260623 +vertex 22.616539 3.195441 3.189772 +endloop +endfacet +facet normal 0.003188 0.981282 -0.192549 +outer loop +vertex 24.699970 3.032526 2.394014 +vertex 22.616539 3.195441 3.189772 +vertex 24.248417 3.292628 3.712090 +endloop +endfacet +facet normal -0.064025 0.988135 -0.139607 +outer loop +vertex 20.080088 2.928699 2.465025 +vertex 21.666407 3.209487 3.724936 +vertex 22.616539 3.195441 3.189772 +endloop +endfacet +facet normal -0.041972 0.976276 -0.212422 +outer loop +vertex 20.080088 2.928699 2.465025 +vertex 22.616539 3.195441 3.189772 +vertex 22.188141 2.974855 2.260623 +endloop +endfacet +facet normal -0.007926 0.999149 -0.040472 +outer loop +vertex 26.406237 3.403702 6.031664 +vertex 26.798485 3.337256 4.314457 +vertex 24.248417 3.292628 3.712090 +endloop +endfacet +facet normal 0.009354 0.998358 -0.056509 +outer loop +vertex 26.406237 3.403702 6.031664 +vertex 24.248417 3.292628 3.712090 +vertex 23.709536 3.370836 5.004611 +endloop +endfacet +facet normal -0.061375 0.997727 -0.027808 +outer loop +vertex 22.875492 3.349853 6.092598 +vertex 23.709536 3.370836 5.004611 +vertex 21.666407 3.209487 3.724936 +endloop +endfacet +facet normal -0.043999 0.998357 -0.036718 +outer loop +vertex 22.875492 3.349853 6.092598 +vertex 21.666407 3.209487 3.724936 +vertex 20.559479 3.187713 4.459331 +endloop +endfacet +facet normal 0.003337 0.890130 -0.455693 +outer loop +vertex 30.224367 2.412967 1.224249 +vertex 25.097067 2.476448 1.310704 +vertex 24.699970 3.032526 2.394014 +endloop +endfacet +facet normal 0.023317 0.924814 -0.379705 +outer loop +vertex 30.224367 2.412967 1.224249 +vertex 24.699970 3.032526 2.394014 +vertex 27.830294 3.080580 2.703281 +endloop +endfacet +facet normal -0.004423 0.879868 -0.475198 +outer loop +vertex 25.097067 2.476448 1.310704 +vertex 21.998266 2.464462 1.317354 +vertex 22.188141 2.974855 2.260623 +endloop +endfacet +facet normal 0.003754 0.890191 -0.455572 +outer loop +vertex 25.097067 2.476448 1.310704 +vertex 22.188141 2.974855 2.260623 +vertex 24.699970 3.032526 2.394014 +endloop +endfacet +facet normal 0.003935 0.981328 -0.192301 +outer loop +vertex 27.830294 3.080580 2.703281 +vertex 24.699970 3.032526 2.394014 +vertex 24.248417 3.292628 3.712090 +endloop +endfacet +facet normal 0.017294 0.989061 -0.146492 +outer loop +vertex 27.830294 3.080580 2.703281 +vertex 24.248417 3.292628 3.712090 +vertex 26.798485 3.337256 4.314457 +endloop +endfacet +facet normal -0.081501 0.965257 -0.248268 +outer loop +vertex 15.508273 2.303025 1.533252 +vertex 18.347837 2.920243 3.000808 +vertex 20.080088 2.928699 2.465025 +endloop +endfacet +facet normal -0.034191 0.899259 -0.436078 +outer loop +vertex 15.508273 2.303025 1.533252 +vertex 20.080088 2.928699 2.465025 +vertex 19.303099 2.379055 1.392499 +endloop +endfacet +facet normal -0.070078 0.994632 -0.076136 +outer loop +vertex 18.347837 2.920243 3.000808 +vertex 20.559479 3.187713 4.459331 +vertex 21.666407 3.209487 3.724936 +endloop +endfacet +facet normal -0.052418 0.986695 -0.153901 +outer loop +vertex 18.347837 2.920243 3.000808 +vertex 21.666407 3.209487 3.724936 +vertex 20.080088 2.928699 2.465025 +endloop +endfacet +facet normal -0.060562 0.905436 -0.420139 +outer loop +vertex 19.303099 2.379055 1.392499 +vertex 20.080088 2.928699 2.465025 +vertex 22.188141 2.974855 2.260623 +endloop +endfacet +facet normal -0.041035 0.882197 -0.469088 +outer loop +vertex 19.303099 2.379055 1.392499 +vertex 22.188141 2.974855 2.260623 +vertex 21.998266 2.464462 1.317354 +endloop +endfacet +facet normal 0.000000 0.000000 1.000000 +outer loop +vertex 15.458335 -2.770834 8.357668 +vertex 15.538308 -2.783193 8.357668 +vertex 15.533590 -2.727700 8.357668 +endloop +endfacet +facet normal 0.000000 0.000000 1.000000 +outer loop +vertex 25.813204 -1.764621 8.357668 +vertex 26.000004 -1.750000 8.357668 +vertex 26.000004 0.000000 8.357668 +endloop +endfacet +facet normal -0.000008 0.000000 1.000000 +outer loop +vertex 26.000004 0.000000 8.357668 +vertex 25.816088 -0.050794 8.357668 +vertex 25.815907 -0.737309 8.357668 +endloop +endfacet +facet normal 0.000000 0.000000 1.000000 +outer loop +vertex 25.814472 -1.560014 8.357668 +vertex 25.813204 -1.764621 8.357668 +vertex 26.000004 0.000000 8.357668 +endloop +endfacet +facet normal 0.000000 0.000000 1.000000 +outer loop +vertex 26.000004 0.000000 8.357668 +vertex 25.815907 -0.737309 8.357668 +vertex 25.814472 -1.560014 8.357668 +endloop +endfacet +facet normal -0.000003 0.000000 1.000000 +outer loop +vertex 26.000004 0.000000 8.357668 +vertex 26.000004 1.750000 8.357668 +vertex 25.813848 1.660502 8.357668 +endloop +endfacet +facet normal 0.000013 0.000000 1.000000 +outer loop +vertex 26.000004 0.000000 8.357668 +vertex 25.813848 1.660502 8.357668 +vertex 25.814472 1.560014 8.357668 +endloop +endfacet +facet normal 0.000000 0.000000 1.000000 +outer loop +vertex 25.816114 0.000000 8.357668 +vertex 25.816088 -0.050794 8.357668 +vertex 26.000004 0.000000 8.357668 +endloop +endfacet +facet normal 0.000000 0.000000 1.000000 +outer loop +vertex 26.000004 0.000000 8.357668 +vertex 25.814472 1.560014 8.357668 +vertex 25.815907 0.737309 8.357668 +endloop +endfacet +facet normal 0.000000 0.000000 1.000000 +outer loop +vertex 25.815907 0.737309 8.357668 +vertex 25.816114 0.000000 8.357668 +vertex 26.000004 0.000000 8.357668 +endloop +endfacet +facet normal 0.001470 -0.143936 -0.989586 +outer loop +vertex 39.094803 -1.120972 0.539543 +vertex 35.647991 -1.432970 0.579802 +vertex 34.200043 -0.732904 0.475826 +endloop +endfacet +facet normal 0.008056 -0.062250 -0.998028 +outer loop +vertex 39.094803 -1.120972 0.539543 +vertex 34.200043 -0.732904 0.475826 +vertex 35.827679 -0.267875 0.459959 +endloop +endfacet +facet normal -0.021287 -0.152833 -0.988023 +outer loop +vertex 31.578562 -1.461071 0.644944 +vertex 31.257000 -0.427498 0.491994 +vertex 34.200043 -0.732904 0.475826 +endloop +endfacet +facet normal -0.014538 -0.176252 -0.984238 +outer loop +vertex 31.578562 -1.461071 0.644944 +vertex 34.200043 -0.732904 0.475826 +vertex 35.647991 -1.432970 0.579802 +endloop +endfacet +facet normal -0.013702 0.013843 -0.999810 +outer loop +vertex 32.156475 0.529089 0.521305 +vertex 35.827679 -0.267875 0.459959 +vertex 34.200043 -0.732904 0.475826 +endloop +endfacet +facet normal -0.002107 0.032606 -0.999466 +outer loop +vertex 32.156475 0.529089 0.521305 +vertex 34.200043 -0.732904 0.475826 +vertex 31.257000 -0.427498 0.491994 +endloop +endfacet +facet normal 0.011105 -0.300928 -0.953582 +outer loop +vertex 45.986675 -1.473333 0.731000 +vertex 41.873085 -1.866991 0.807323 +vertex 39.094803 -1.120972 0.539543 +endloop +endfacet +facet normal 0.018277 -0.177180 -0.984009 +outer loop +vertex 45.986675 -1.473333 0.731000 +vertex 39.094803 -1.120972 0.539543 +vertex 41.912167 -0.620574 0.501772 +endloop +endfacet +facet normal 0.009590 -0.352907 -0.935609 +outer loop +vertex 41.873085 -1.866991 0.807323 +vertex 37.724285 -2.146670 0.870290 +vertex 35.647991 -1.432970 0.579802 +endloop +endfacet +facet normal 0.014902 -0.288180 -0.957460 +outer loop +vertex 41.873085 -1.866991 0.807323 +vertex 35.647991 -1.432970 0.579802 +vertex 39.094803 -1.120972 0.539543 +endloop +endfacet +facet normal 0.001875 -0.085762 -0.996314 +outer loop +vertex 41.912167 -0.620574 0.501772 +vertex 39.094803 -1.120972 0.539543 +vertex 35.827679 -0.267875 0.459959 +endloop +endfacet +facet normal 0.006244 -0.010821 -0.999922 +outer loop +vertex 41.912167 -0.620574 0.501772 +vertex 35.827679 -0.267875 0.459959 +vertex 38.036938 0.306147 0.467543 +endloop +endfacet +facet normal -0.037686 -0.459402 -0.887429 +outer loop +vertex 26.752544 -2.589665 1.434137 +vertex 27.419786 -1.179824 0.675958 +vertex 31.578562 -1.461071 0.644944 +endloop +endfacet +facet normal -0.038934 -0.455450 -0.889410 +outer loop +vertex 26.752544 -2.589665 1.434137 +vertex 31.578562 -1.461071 0.644944 +vertex 33.108257 -2.339576 1.027848 +endloop +endfacet +facet normal -0.024165 -0.119452 -0.992546 +outer loop +vertex 27.419786 -1.179824 0.675958 +vertex 27.720016 0.032394 0.522759 +vertex 31.257000 -0.427498 0.491994 +endloop +endfacet +facet normal -0.017631 -0.151731 -0.988265 +outer loop +vertex 27.419786 -1.179824 0.675958 +vertex 31.257000 -0.427498 0.491994 +vertex 31.578562 -1.461071 0.644944 +endloop +endfacet +facet normal -0.011675 -0.416542 -0.909041 +outer loop +vertex 33.108257 -2.339576 1.027848 +vertex 31.578562 -1.461071 0.644944 +vertex 35.647991 -1.432970 0.579802 +endloop +endfacet +facet normal -0.013914 -0.411410 -0.911344 +outer loop +vertex 33.108257 -2.339576 1.027848 +vertex 35.647991 -1.432970 0.579802 +vertex 37.724285 -2.146670 0.870290 +endloop +endfacet +facet normal -0.062065 0.292420 -0.954274 +outer loop +vertex 30.224367 2.412967 1.224249 +vertex 34.217098 1.287853 0.619794 +vertex 32.156475 0.529089 0.521305 +endloop +endfacet +facet normal 0.036104 0.381657 -0.923599 +outer loop +vertex 30.224367 2.412967 1.224249 +vertex 32.156475 0.529089 0.521305 +vertex 28.402740 1.203649 0.653316 +endloop +endfacet +facet normal -0.018264 0.083456 -0.996344 +outer loop +vertex 34.217098 1.287853 0.619794 +vertex 38.036938 0.306147 0.467543 +vertex 35.827679 -0.267875 0.459959 +endloop +endfacet +facet normal 0.007171 0.109542 -0.993956 +outer loop +vertex 34.217098 1.287853 0.619794 +vertex 35.827679 -0.267875 0.459959 +vertex 32.156475 0.529089 0.521305 +endloop +endfacet +facet normal -0.025328 0.054402 -0.998198 +outer loop +vertex 28.402740 1.203649 0.653316 +vertex 32.156475 0.529089 0.521305 +vertex 31.257000 -0.427498 0.491994 +endloop +endfacet +facet normal 0.005356 0.107696 -0.994169 +outer loop +vertex 28.402740 1.203649 0.653316 +vertex 31.257000 -0.427498 0.491994 +vertex 27.720016 0.032394 0.522759 +endloop +endfacet +facet normal 0.065139 -0.992975 0.098780 +outer loop +vertex 39.476257 -2.712869 4.191426 +vertex 35.635860 -2.889090 4.952492 +vertex 33.974491 -3.061083 4.319118 +endloop +endfacet +facet normal 0.064169 -0.996860 0.046393 +outer loop +vertex 39.476257 -2.712869 4.191426 +vertex 33.974491 -3.061083 4.319118 +vertex 35.673954 -2.984780 3.608021 +endloop +endfacet +facet normal 0.048487 -0.998051 0.039288 +outer loop +vertex 31.104549 -3.148645 5.636679 +vertex 30.579285 -3.223353 4.387111 +vertex 33.974491 -3.061083 4.319118 +endloop +endfacet +facet normal 0.069964 -0.993805 0.086351 +outer loop +vertex 31.104549 -3.148645 5.636679 +vertex 33.974491 -3.061083 4.319118 +vertex 35.635860 -2.889090 4.952492 +endloop +endfacet +facet normal 0.033576 -0.999072 -0.026961 +outer loop +vertex 31.234276 -3.121788 3.156084 +vertex 35.673954 -2.984780 3.608021 +vertex 33.974491 -3.061083 4.319118 +endloop +endfacet +facet normal 0.046511 -0.997260 -0.057531 +outer loop +vertex 31.234276 -3.121788 3.156084 +vertex 33.974491 -3.061083 4.319118 +vertex 30.579285 -3.223353 4.387111 +endloop +endfacet +facet normal 0.087711 -0.931605 0.352731 +outer loop +vertex 48.166676 -2.000000 3.913223 +vertex 42.545757 -2.222376 4.723609 +vertex 39.476257 -2.712869 4.191426 +endloop +endfacet +facet normal 0.086649 -0.973212 0.212956 +outer loop +vertex 48.166676 -2.000000 3.913223 +vertex 39.476257 -2.712869 4.191426 +vertex 42.552837 -2.614465 3.389307 +endloop +endfacet +facet normal 0.101486 -0.942296 0.319029 +outer loop +vertex 42.545757 -2.222376 4.723609 +vertex 37.831306 -2.456728 5.531137 +vertex 35.635860 -2.889090 4.952492 +endloop +endfacet +facet normal 0.101432 -0.951147 0.291600 +outer loop +vertex 42.545757 -2.222376 4.723609 +vertex 35.635860 -2.889090 4.952492 +vertex 39.476257 -2.712869 4.191426 +endloop +endfacet +facet normal 0.056520 -0.993885 0.094858 +outer loop +vertex 42.552837 -2.614465 3.389307 +vertex 39.476257 -2.712869 4.191426 +vertex 35.673954 -2.984780 3.608021 +endloop +endfacet +facet normal 0.054186 -0.998436 0.013738 +outer loop +vertex 42.552837 -2.614465 3.389307 +vertex 35.673954 -2.984780 3.608021 +vertex 37.887997 -2.875850 2.791907 +endloop +endfacet +facet normal 0.034076 -0.999087 -0.025763 +outer loop +vertex 26.488607 -3.412277 6.302927 +vertex 26.492159 -3.367654 4.577150 +vertex 30.579285 -3.223353 4.387111 +endloop +endfacet +facet normal 0.061829 -0.997519 0.033649 +outer loop +vertex 26.488607 -3.412277 6.302927 +vertex 30.579285 -3.223353 4.387111 +vertex 31.104549 -3.148645 5.636679 +endloop +endfacet +facet normal 0.094295 -0.961011 0.259935 +outer loop +vertex 32.833088 -2.745604 6.499722 +vertex 31.104549 -3.148645 5.636679 +vertex 35.635860 -2.889090 4.952492 +endloop +endfacet +facet normal 0.111006 -0.950793 0.289259 +outer loop +vertex 32.833088 -2.745604 6.499722 +vertex 35.635860 -2.889090 4.952492 +vertex 37.831306 -2.456728 5.531137 +endloop +endfacet +facet normal -0.025109 -0.971689 -0.234924 +outer loop +vertex 26.752544 -2.589665 1.434137 +vertex 33.042091 -2.926533 2.155251 +vertex 31.234276 -3.121788 3.156084 +endloop +endfacet +facet normal 0.023137 -0.936595 -0.349649 +outer loop +vertex 26.752544 -2.589665 1.434137 +vertex 31.234276 -3.121788 3.156084 +vertex 26.704079 -3.180421 3.013374 +endloop +endfacet +facet normal 0.020573 -0.996801 -0.077235 +outer loop +vertex 33.042091 -2.926533 2.155251 +vertex 37.887997 -2.875850 2.791907 +vertex 35.673954 -2.984780 3.608021 +endloop +endfacet +facet normal 0.042510 -0.992246 -0.116794 +outer loop +vertex 33.042091 -2.926533 2.155251 +vertex 35.673954 -2.984780 3.608021 +vertex 31.234276 -3.121788 3.156084 +endloop +endfacet +facet normal 0.015242 -0.997130 -0.074158 +outer loop +vertex 26.704079 -3.180421 3.013374 +vertex 31.234276 -3.121788 3.156084 +vertex 30.579285 -3.223353 4.387111 +endloop +endfacet +facet normal 0.029716 -0.992937 -0.114859 +outer loop +vertex 26.704079 -3.180421 3.013374 +vertex 30.579285 -3.223353 4.387111 +vertex 26.492159 -3.367654 4.577150 +endloop +endfacet +facet normal -0.045029 0.998983 -0.002168 +outer loop +vertex 19.461210 3.199903 6.848686 +vertex 20.253862 3.238130 8.000117 +vertex 21.113426 3.276875 8.000361 +endloop +endfacet +facet normal -0.045408 0.998965 -0.002823 +outer loop +vertex 22.772949 3.352315 8.002979 +vertex 22.854446 3.356021 8.003421 +vertex 21.356569 3.284150 6.661976 +endloop +endfacet +facet normal -0.045409 0.998967 -0.001621 +outer loop +vertex 19.461210 3.199903 6.848686 +vertex 21.113426 3.276875 8.000361 +vertex 22.772949 3.352315 8.002979 +endloop +endfacet +facet normal -0.044751 0.998992 -0.003514 +outer loop +vertex 22.772949 3.352315 8.002979 +vertex 21.356569 3.284150 6.661976 +vertex 19.461210 3.199903 6.848686 +endloop +endfacet +facet normal -0.012835 -0.007060 -0.999893 +outer loop +vertex 17.121878 -3.795351 8.020833 +vertex 17.098297 -3.016442 8.015636 +vertex 18.147570 -3.141765 8.003051 +endloop +endfacet +facet normal -0.016735 -0.000960 -0.999860 +outer loop +vertex 18.147570 -3.141765 8.003051 +vertex 18.206795 -3.144454 8.002062 +vertex 18.211685 -3.794066 8.002604 +endloop +endfacet +facet normal -0.016724 -0.000958 -0.999860 +outer loop +vertex 18.147570 -3.141765 8.003051 +vertex 18.211685 -3.794066 8.002604 +vertex 17.121878 -3.795351 8.020833 +endloop +endfacet +facet normal 0.264648 -0.001304 0.964344 +outer loop +vertex 26.150230 -3.802635 8.262934 +vertex 26.155199 -2.887410 8.262807 +vertex 25.946306 -2.553310 8.320586 +endloop +endfacet +facet normal 0.264650 0.000001 0.964345 +outer loop +vertex 25.946306 -2.553310 8.320586 +vertex 25.414009 -2.554101 8.466667 +vertex 25.414011 -3.803846 8.466667 +endloop +endfacet +facet normal 0.266708 -0.000942 0.963777 +outer loop +vertex 25.946306 -2.553310 8.320586 +vertex 25.414011 -3.803846 8.466667 +vertex 26.150230 -3.802635 8.262934 +endloop +endfacet +facet normal -0.044557 -0.999000 -0.003685 +outer loop +vertex 23.701311 -3.388976 6.689353 +vertex 23.345116 -3.377946 8.006075 +vertex 22.772945 -3.352415 8.002979 +endloop +endfacet +facet normal -0.045407 -0.998965 -0.002538 +outer loop +vertex 21.113426 -3.276976 8.000362 +vertex 20.747240 -3.260331 8.000258 +vertex 21.544149 -3.293628 6.848240 +endloop +endfacet +facet normal -0.045404 -0.998960 -0.004285 +outer loop +vertex 23.701311 -3.388976 6.689353 +vertex 22.772945 -3.352415 8.002979 +vertex 21.113426 -3.276976 8.000362 +endloop +endfacet +facet normal -0.044314 -0.999015 -0.002128 +outer loop +vertex 21.113426 -3.276976 8.000362 +vertex 21.544149 -3.293628 6.848240 +vertex 23.701311 -3.388976 6.689353 +endloop +endfacet +facet normal 0.262625 0.000457 0.964898 +outer loop +vertex 25.815907 0.737309 8.357668 +vertex 25.814472 1.560014 8.357668 +vertex 25.414009 1.560457 8.466666 +endloop +endfacet +facet normal 0.261761 0.000002 0.965133 +outer loop +vertex 25.815907 0.737309 8.357668 +vertex 25.414009 1.560457 8.466666 +vertex 25.414009 0.737545 8.466667 +endloop +endfacet +facet normal -0.045748 -0.998949 -0.002773 +outer loop +vertex 21.544149 -3.293628 6.848240 +vertex 20.747240 -3.260331 8.000258 +vertex 19.549599 -3.205483 8.000000 +endloop +endfacet +facet normal -0.045409 -0.998962 -0.003690 +outer loop +vertex 18.206795 -3.144454 8.002062 +vertex 18.147570 -3.141765 8.003051 +vertex 19.651859 -3.205200 6.661274 +endloop +endfacet +facet normal -0.045406 -0.998966 -0.002179 +outer loop +vertex 21.544149 -3.293628 6.848240 +vertex 19.549599 -3.205483 8.000000 +vertex 18.206795 -3.144454 8.002062 +endloop +endfacet +facet normal -0.046229 -0.998920 -0.004567 +outer loop +vertex 18.206795 -3.144454 8.002062 +vertex 19.651859 -3.205200 6.661274 +vertex 21.544149 -3.293628 6.848240 +endloop +endfacet +facet normal 0.095073 0.059732 -0.993677 +outer loop +vertex 26.344246 3.115694 8.063178 +vertex 25.864864 3.190336 8.021798 +vertex 25.563290 3.798691 8.029513 +endloop +endfacet +facet normal 0.054163 0.012717 -0.998451 +outer loop +vertex 26.344246 3.115694 8.063178 +vertex 25.563290 3.798691 8.029513 +vertex 26.235046 3.800150 8.065972 +endloop +endfacet +facet normal 0.054085 0.992060 -0.113543 +outer loop +vertex 21.356569 3.284150 6.661976 +vertex 22.854446 3.356021 8.003421 +vertex 24.394966 3.272750 8.009665 +endloop +endfacet +facet normal 0.081522 0.996369 -0.024541 +outer loop +vertex 24.394966 3.272750 8.009665 +vertex 25.143169 3.211766 8.019117 +vertex 22.875492 3.349853 6.092598 +endloop +endfacet +facet normal -0.021684 0.998120 0.057330 +outer loop +vertex 24.394966 3.272750 8.009665 +vertex 22.875492 3.349853 6.092598 +vertex 21.356569 3.284150 6.661976 +endloop +endfacet +facet normal 0.000009 0.000000 1.000000 +outer loop +vertex 25.813204 -1.764621 8.357668 +vertex 25.811184 -2.342206 8.357668 +vertex 26.000004 -1.750000 8.357668 +endloop +endfacet +facet normal -0.646731 0.003771 0.762709 +outer loop +vertex 15.679340 0.737497 8.592188 +vertex 15.402760 0.736852 8.357668 +vertex 15.399197 0.125639 8.357668 +endloop +endfacet +facet normal -0.642932 0.004442 0.765911 +outer loop +vertex 15.399197 0.125639 8.357668 +vertex 15.398325 0.000000 8.357668 +vertex 15.677083 0.000000 8.591667 +endloop +endfacet +facet normal -0.643740 0.001431 0.765243 +outer loop +vertex 15.399197 0.125639 8.357668 +vertex 15.677083 0.000000 8.591667 +vertex 15.679340 0.737497 8.592188 +endloop +endfacet +facet normal 0.261757 -0.000068 0.965134 +outer loop +vertex 25.414009 -0.737545 8.466667 +vertex 25.815907 -0.737309 8.357668 +vertex 25.816088 -0.050794 8.357668 +endloop +endfacet +facet normal 0.261630 -0.000135 0.965168 +outer loop +vertex 25.816088 -0.050794 8.357668 +vertex 25.816114 0.000000 8.357668 +vertex 25.414011 0.000000 8.466667 +endloop +endfacet +facet normal 0.261647 -0.000002 0.965164 +outer loop +vertex 25.816088 -0.050794 8.357668 +vertex 25.414011 0.000000 8.466667 +vertex 25.414009 -0.737545 8.466667 +endloop +endfacet +facet normal -0.037314 -0.007796 -0.999273 +outer loop +vertex 16.194366 -2.877492 8.048306 +vertex 17.098297 -3.016442 8.015636 +vertex 17.121878 -3.795351 8.020833 +endloop +endfacet +facet normal -0.060056 -0.030823 -0.997719 +outer loop +vertex 16.194366 -2.877492 8.048306 +vertex 17.121878 -3.795351 8.020833 +vertex 16.292145 -3.797194 8.070833 +endloop +endfacet +facet normal -0.013682 0.996071 0.087501 +outer loop +vertex 22.875492 3.349853 6.092598 +vertex 25.143169 3.211766 8.019117 +vertex 25.666662 3.218757 8.021394 +endloop +endfacet +facet normal -0.041527 0.996154 0.077157 +outer loop +vertex 25.666662 3.218757 8.021394 +vertex 26.406237 3.403702 6.031664 +vertex 23.709536 3.370836 5.004611 +endloop +endfacet +facet normal 0.021972 0.999106 0.036112 +outer loop +vertex 25.666662 3.218757 8.021394 +vertex 23.709536 3.370836 5.004611 +vertex 22.875492 3.349853 6.092598 +endloop +endfacet +facet normal 0.374263 0.015226 0.927198 +outer loop +vertex 26.157015 2.552997 8.262760 +vertex 26.450327 2.551991 8.144380 +vertex 26.471371 2.578741 8.135446 +endloop +endfacet +facet normal 0.425797 0.017492 0.904649 +outer loop +vertex 26.471371 2.578741 8.135446 +vertex 26.418255 3.801430 8.136806 +vertex 26.150230 3.802635 8.262934 +endloop +endfacet +facet normal 0.375244 0.001908 0.926924 +outer loop +vertex 26.471371 2.578741 8.135446 +vertex 26.150230 3.802635 8.262934 +vertex 26.157015 2.552997 8.262760 +endloop +endfacet +facet normal 0.261756 0.000075 0.965134 +outer loop +vertex 25.816114 0.000000 8.357668 +vertex 25.815907 0.737309 8.357668 +vertex 25.414009 0.737545 8.466667 +endloop +endfacet +facet normal 0.261631 0.000000 0.965168 +outer loop +vertex 25.816114 0.000000 8.357668 +vertex 25.414009 0.737545 8.466667 +vertex 25.414011 0.000000 8.466667 +endloop +endfacet +facet normal 0.262627 0.001635 0.964896 +outer loop +vertex 25.414009 1.560457 8.466666 +vertex 25.814472 1.560014 8.357668 +vertex 25.813848 1.660502 8.357668 +endloop +endfacet +facet normal 0.263724 0.001634 0.964597 +outer loop +vertex 25.811188 2.342197 8.357667 +vertex 26.159176 2.236687 8.262705 +vertex 26.157015 2.552997 8.262760 +endloop +endfacet +facet normal 0.262766 0.001027 0.964859 +outer loop +vertex 25.414009 1.560457 8.466666 +vertex 25.813848 1.660502 8.357668 +vertex 25.811188 2.342197 8.357667 +endloop +endfacet +facet normal 0.264650 0.000006 0.964344 +outer loop +vertex 25.811188 2.342197 8.357667 +vertex 26.157015 2.552997 8.262760 +vertex 25.414009 2.554101 8.466667 +endloop +endfacet +facet normal 0.264654 -0.000002 0.964343 +outer loop +vertex 25.811188 2.342197 8.357667 +vertex 25.414009 2.554101 8.466667 +vertex 25.414009 1.560457 8.466666 +endloop +endfacet +facet normal 0.179891 -0.057355 0.982013 +outer loop +vertex 26.000004 -1.750000 8.357668 +vertex 25.811184 -2.342206 8.357668 +vertex 25.946306 -2.553310 8.320586 +endloop +endfacet +facet normal 0.171538 -0.039531 0.984384 +outer loop +vertex 26.155199 -2.887410 8.262807 +vertex 26.175591 -3.047504 8.252825 +vertex 32.798649 -1.584844 7.157436 +endloop +endfacet +facet normal 0.179874 -0.057356 0.982016 +outer loop +vertex 26.000004 -1.750000 8.357668 +vertex 25.946306 -2.553310 8.320586 +vertex 26.155199 -2.887410 8.262807 +endloop +endfacet +facet normal 0.174462 -0.029048 0.984235 +outer loop +vertex 32.798649 -1.584844 7.157436 +vertex 31.040508 -0.715920 7.494724 +vertex 26.000004 -1.750000 8.357668 +endloop +endfacet +facet normal 0.174927 -0.058104 0.982866 +outer loop +vertex 26.155199 -2.887410 8.262807 +vertex 32.798649 -1.584844 7.157436 +vertex 26.000004 -1.750000 8.357668 +endloop +endfacet +facet normal -0.046076 0.998934 -0.002765 +outer loop +vertex 17.307825 3.099989 6.690114 +vertex 17.658047 3.119799 8.010885 +vertex 18.206800 3.145085 8.002063 +endloop +endfacet +facet normal -0.045408 0.998967 -0.001906 +outer loop +vertex 19.549603 3.206118 8.000000 +vertex 20.253862 3.238130 8.000117 +vertex 19.461210 3.199903 6.848686 +endloop +endfacet +facet normal -0.045409 0.998963 -0.003222 +outer loop +vertex 17.307825 3.099989 6.690114 +vertex 18.206800 3.145085 8.002063 +vertex 19.549603 3.206118 8.000000 +endloop +endfacet +facet normal -0.046213 0.998930 -0.001845 +outer loop +vertex 19.549603 3.206118 8.000000 +vertex 19.461210 3.199903 6.848686 +vertex 17.307825 3.099989 6.690114 +endloop +endfacet +facet normal 0.534949 -0.088776 -0.840207 +outer loop +vertex 26.235046 -3.800150 8.065972 +vertex 26.337137 -3.160255 8.063360 +vertex 26.443146 -3.132867 8.127961 +endloop +endfacet +facet normal 0.889279 -0.039139 -0.455688 +outer loop +vertex 26.443146 -3.132867 8.127961 +vertex 26.448036 -3.115854 8.136044 +vertex 26.418255 -3.801430 8.136806 +endloop +endfacet +facet normal 0.360335 -0.025751 -0.932467 +outer loop +vertex 26.443146 -3.132867 8.127961 +vertex 26.418255 -3.801430 8.136806 +vertex 26.235046 -3.800150 8.065972 +endloop +endfacet +facet normal -0.646510 -0.028257 0.762382 +outer loop +vertex 15.679340 -0.737497 8.592188 +vertex 15.402760 -0.736852 8.357668 +vertex 15.427221 -1.296539 8.357668 +endloop +endfacet +facet normal -0.674858 -0.019374 0.737694 +outer loop +vertex 15.427221 -1.296539 8.357668 +vertex 15.434759 -1.559115 8.357668 +vertex 15.695139 -1.560369 8.595834 +endloop +endfacet +facet normal -0.669606 -0.009564 0.742655 +outer loop +vertex 15.427221 -1.296539 8.357668 +vertex 15.695139 -1.560369 8.595834 +vertex 15.679340 -0.737497 8.592188 +endloop +endfacet +facet normal 0.050350 -0.990036 0.131507 +outer loop +vertex 26.488607 -3.412277 6.302927 +vertex 25.696550 -3.224265 8.021599 +vertex 24.391867 -3.292191 8.009745 +endloop +endfacet +facet normal 0.081508 -0.996209 0.030395 +outer loop +vertex 24.391867 -3.292191 8.009745 +vertex 23.345116 -3.377946 8.006075 +vertex 23.701311 -3.388976 6.689353 +endloop +endfacet +facet normal 0.001676 -0.997386 0.072232 +outer loop +vertex 24.391867 -3.292191 8.009745 +vertex 23.701311 -3.388976 6.689353 +vertex 26.488607 -3.412277 6.302927 +endloop +endfacet +facet normal 0.115149 -0.968319 0.221582 +outer loop +vertex 32.833088 -2.745604 6.499722 +vertex 26.443146 -3.132867 8.127961 +vertex 26.337137 -3.160255 8.063360 +endloop +endfacet +facet normal 0.077055 -0.986654 0.143447 +outer loop +vertex 25.854183 -3.211885 8.022071 +vertex 25.696550 -3.224265 8.021599 +vertex 26.488607 -3.412277 6.302927 +endloop +endfacet +facet normal 0.094369 -0.986971 0.130319 +outer loop +vertex 32.833088 -2.745604 6.499722 +vertex 26.337137 -3.160255 8.063360 +vertex 25.854183 -3.211885 8.022071 +endloop +endfacet +facet normal 0.092770 -0.960406 0.262706 +outer loop +vertex 26.488607 -3.412277 6.302927 +vertex 31.104549 -3.148645 5.636679 +vertex 32.833088 -2.745604 6.499722 +endloop +endfacet +facet normal 0.098669 -0.983587 0.151064 +outer loop +vertex 25.854183 -3.211885 8.022071 +vertex 26.488607 -3.412277 6.302927 +vertex 32.833088 -2.745604 6.499722 +endloop +endfacet +facet normal 0.087076 -0.017958 -0.996040 +outer loop +vertex 25.854183 -3.211885 8.022071 +vertex 26.337137 -3.160255 8.063360 +vertex 26.235046 -3.800150 8.065972 +endloop +endfacet +facet normal 0.054068 -0.039456 -0.997757 +outer loop +vertex 25.854183 -3.211885 8.022071 +vertex 26.235046 -3.800150 8.065972 +vertex 25.563290 -3.798691 8.029513 +endloop +endfacet +facet normal -0.646558 0.025163 0.762450 +outer loop +vertex 15.434760 1.559115 8.357668 +vertex 15.402760 0.736852 8.357668 +vertex 15.679340 0.737497 8.592188 +endloop +endfacet +facet normal -0.674927 0.009687 0.737821 +outer loop +vertex 15.434760 1.559115 8.357668 +vertex 15.679340 0.737497 8.592188 +vertex 15.695139 1.560369 8.595834 +endloop +endfacet +facet normal 0.287964 0.091813 0.953230 +outer loop +vertex 30.651365 2.674705 6.863454 +vertex 26.429348 3.098415 8.098086 +vertex 26.471371 2.578741 8.135446 +endloop +endfacet +facet normal 0.287966 0.091854 0.953225 +outer loop +vertex 30.651365 2.674705 6.863454 +vertex 26.471371 2.578741 8.135446 +vertex 26.450327 2.551991 8.144380 +endloop +endfacet +facet normal 0.195991 0.434585 0.879047 +outer loop +vertex 26.000004 1.750000 8.357668 +vertex 30.465677 1.665626 7.403723 +vertex 30.651365 2.674705 6.863454 +endloop +endfacet +facet normal 0.287964 0.091816 0.953230 +outer loop +vertex 26.159176 2.236687 8.262705 +vertex 25.811188 2.342197 8.357667 +vertex 26.000004 1.750000 8.357668 +endloop +endfacet +facet normal 0.287964 0.091814 0.953230 +outer loop +vertex 30.651365 2.674705 6.863454 +vertex 26.450327 2.551991 8.144380 +vertex 26.159176 2.236687 8.262705 +endloop +endfacet +facet normal 0.287964 0.091817 0.953229 +outer loop +vertex 26.159176 2.236687 8.262705 +vertex 26.000004 1.750000 8.357668 +vertex 30.651365 2.674705 6.863454 +endloop +endfacet +facet normal -0.016121 0.000954 -0.999870 +outer loop +vertex 18.211685 3.794066 8.002604 +vertex 18.206800 3.145085 8.002063 +vertex 17.658047 3.119799 8.010885 +endloop +endfacet +facet normal -0.009774 0.006966 -0.999928 +outer loop +vertex 17.658047 3.119799 8.010885 +vertex 17.098806 3.033245 8.015749 +vertex 17.121878 3.795351 8.020833 +endloop +endfacet +facet normal -0.016724 0.001451 -0.999859 +outer loop +vertex 17.658047 3.119799 8.010885 +vertex 17.121878 3.795351 8.020833 +vertex 18.211685 3.794066 8.002604 +endloop +endfacet +facet normal 0.261755 -0.000457 0.965134 +outer loop +vertex 25.814472 -1.560014 8.357668 +vertex 25.815907 -0.737309 8.357668 +vertex 25.414009 -0.737545 8.466667 +endloop +endfacet +facet normal 0.262631 -0.000000 0.964896 +outer loop +vertex 25.814472 -1.560014 8.357668 +vertex 25.414009 -0.737545 8.466667 +vertex 25.414009 -1.560457 8.466666 +endloop +endfacet +facet normal -0.119174 -0.989068 -0.086848 +outer loop +vertex 19.651859 -3.205200 6.661274 +vertex 18.147570 -3.141765 8.003051 +vertex 17.098297 -3.016442 8.015636 +endloop +endfacet +facet normal -0.152691 -0.988015 -0.022647 +outer loop +vertex 16.194366 -2.877492 8.048306 +vertex 15.780942 -2.814433 8.084641 +vertex 18.135849 -3.132686 6.091653 +endloop +endfacet +facet normal -0.155594 -0.975192 -0.157450 +outer loop +vertex 19.651859 -3.205200 6.661274 +vertex 17.098297 -3.016442 8.015636 +vertex 16.194366 -2.877492 8.048306 +endloop +endfacet +facet normal -0.070236 -0.995714 0.060173 +outer loop +vertex 16.194366 -2.877492 8.048306 +vertex 18.135849 -3.132686 6.091653 +vertex 19.651859 -3.205200 6.661274 +endloop +endfacet +facet normal 0.264651 -0.000001 0.964344 +outer loop +vertex 25.414009 -2.554101 8.466667 +vertex 25.946306 -2.553310 8.320586 +vertex 25.811184 -2.342206 8.357668 +endloop +endfacet +facet normal 0.262626 -0.001634 0.964896 +outer loop +vertex 25.813204 -1.764621 8.357668 +vertex 25.814472 -1.560014 8.357668 +vertex 25.414009 -1.560457 8.466666 +endloop +endfacet +facet normal 0.265109 -0.000928 0.964218 +outer loop +vertex 25.414009 -2.554101 8.466667 +vertex 25.811184 -2.342206 8.357668 +vertex 25.813204 -1.764621 8.357668 +endloop +endfacet +facet normal 0.263406 0.000002 0.964685 +outer loop +vertex 25.813204 -1.764621 8.357668 +vertex 25.414009 -1.560457 8.466666 +vertex 25.414009 -2.554101 8.466667 +endloop +endfacet +facet normal -0.040914 0.028815 -0.998747 +outer loop +vertex 17.098806 3.033245 8.015749 +vertex 16.196001 2.892864 8.048681 +vertex 16.292145 3.797194 8.070833 +endloop +endfacet +facet normal -0.060129 0.008479 -0.998155 +outer loop +vertex 17.098806 3.033245 8.015749 +vertex 16.292145 3.797194 8.070833 +vertex 17.121878 3.795351 8.020833 +endloop +endfacet +facet normal 0.390536 -0.015941 0.920450 +outer loop +vertex 26.418255 -3.801430 8.136806 +vertex 26.448036 -3.115854 8.136044 +vertex 26.175591 -3.047504 8.252825 +endloop +endfacet +facet normal 0.425774 -0.002187 0.904827 +outer loop +vertex 26.175591 -3.047504 8.252825 +vertex 26.155199 -2.887410 8.262807 +vertex 26.150230 -3.802635 8.262934 +endloop +endfacet +facet normal 0.425804 -0.002187 0.904813 +outer loop +vertex 26.175591 -3.047504 8.252825 +vertex 26.150230 -3.802635 8.262934 +vertex 26.418255 -3.801430 8.136806 +endloop +endfacet +facet normal 0.374271 0.002397 0.927316 +outer loop +vertex 26.159176 2.236687 8.262705 +vertex 26.450327 2.551991 8.144380 +vertex 26.157015 2.552997 8.262760 +endloop +endfacet +facet normal -0.001574 0.000845 -0.999998 +outer loop +vertex 19.549603 3.206118 8.000000 +vertex 18.206800 3.145085 8.002063 +vertex 18.211685 3.794066 8.002604 +endloop +endfacet +facet normal -0.001941 0.000011 -0.999998 +outer loop +vertex 19.549603 3.206118 8.000000 +vertex 18.211685 3.794066 8.002604 +vertex 19.552803 3.793593 8.000000 +endloop +endfacet +facet normal -0.646730 -0.003892 0.762709 +outer loop +vertex 15.398325 0.000000 8.357668 +vertex 15.402760 -0.736852 8.357668 +vertex 15.679340 -0.737497 8.592188 +endloop +endfacet +facet normal -0.642936 -0.001426 0.765918 +outer loop +vertex 15.398325 0.000000 8.357668 +vertex 15.679340 -0.737497 8.592188 +vertex 15.677083 0.000000 8.591667 +endloop +endfacet +facet normal 0.000000 0.000001 1.000000 +outer loop +vertex 25.811188 2.342197 8.357667 +vertex 25.813848 1.660502 8.357668 +vertex 26.000004 1.750000 8.357668 +endloop +endfacet +facet normal 0.889208 0.039135 -0.455825 +outer loop +vertex 26.418255 3.801430 8.136806 +vertex 26.471371 2.578741 8.135446 +vertex 26.429348 3.098415 8.098086 +endloop +endfacet +facet normal 0.390112 0.065989 -0.918400 +outer loop +vertex 26.429348 3.098415 8.098086 +vertex 26.344246 3.115694 8.063178 +vertex 26.235046 3.800150 8.065972 +endloop +endfacet +facet normal 0.359681 0.056970 -0.931335 +outer loop +vertex 26.429348 3.098415 8.098086 +vertex 26.235046 3.800150 8.065972 +vertex 26.418255 3.801430 8.136806 +endloop +endfacet +facet normal -0.051486 -0.092620 -0.994370 +outer loop +vertex 15.767362 -3.799347 8.177083 +vertex 15.436029 -2.794299 8.100622 +vertex 15.780942 -2.814433 8.084641 +endloop +endfacet +facet normal -0.092678 -0.034228 -0.995108 +outer loop +vertex 15.780942 -2.814433 8.084641 +vertex 16.194366 -2.877492 8.048306 +vertex 16.292145 -3.797194 8.070833 +endloop +endfacet +facet normal -0.197299 -0.088913 -0.976303 +outer loop +vertex 15.780942 -2.814433 8.084641 +vertex 16.292145 -3.797194 8.070833 +vertex 15.767362 -3.799347 8.177083 +endloop +endfacet +facet normal -0.081004 0.102134 -0.991467 +outer loop +vertex 16.196001 2.892864 8.048681 +vertex 15.437763 2.799557 8.101022 +vertex 15.767362 3.799347 8.177083 +endloop +endfacet +facet normal -0.198061 0.045040 -0.979154 +outer loop +vertex 16.196001 2.892864 8.048681 +vertex 15.767362 3.799347 8.177083 +vertex 16.292145 3.797194 8.070833 +endloop +endfacet +facet normal -0.755974 0.063856 0.651480 +outer loop +vertex 15.731250 2.553990 8.604167 +vertex 15.518668 2.552154 8.357668 +vertex 15.435318 1.565411 8.357668 +endloop +endfacet +facet normal -0.673871 0.059786 0.736426 +outer loop +vertex 15.435318 1.565411 8.357668 +vertex 15.434760 1.559115 8.357668 +vertex 15.695139 1.560369 8.595834 +endloop +endfacet +facet normal -0.675412 0.018365 0.737212 +outer loop +vertex 15.435318 1.565411 8.357668 +vertex 15.695139 1.560369 8.595834 +vertex 15.731250 2.553990 8.604167 +endloop +endfacet +facet normal 0.140188 0.979719 0.143172 +outer loop +vertex 26.406237 3.403702 6.031664 +vertex 25.666662 3.218757 8.021394 +vertex 25.864864 3.190336 8.021798 +endloop +endfacet +facet normal 0.140189 0.979720 0.143165 +outer loop +vertex 26.344246 3.115694 8.063178 +vertex 26.429348 3.098415 8.098086 +vertex 30.651365 2.674705 6.863454 +endloop +endfacet +facet normal 0.140192 0.979718 0.143174 +outer loop +vertex 26.406237 3.403702 6.031664 +vertex 25.864864 3.190336 8.021798 +vertex 26.344246 3.115694 8.063178 +endloop +endfacet +facet normal 0.089702 0.929763 0.357062 +outer loop +vertex 30.651365 2.674705 6.863454 +vertex 30.497274 3.120947 5.740185 +vertex 26.406237 3.403702 6.031664 +endloop +endfacet +facet normal 0.140190 0.979719 0.143173 +outer loop +vertex 26.344246 3.115694 8.063178 +vertex 30.651365 2.674705 6.863454 +vertex 26.406237 3.403702 6.031664 +endloop +endfacet +facet normal -0.755974 -0.063878 0.651478 +outer loop +vertex 15.434759 -1.559115 8.357668 +vertex 15.518668 -2.552154 8.357668 +vertex 15.731250 -2.553990 8.604167 +endloop +endfacet +facet normal -0.674866 -0.018339 0.737712 +outer loop +vertex 15.434759 -1.559115 8.357668 +vertex 15.731250 -2.553990 8.604167 +vertex 15.695139 -1.560369 8.595834 +endloop +endfacet +facet normal 0.244400 -0.472541 0.846743 +outer loop +vertex 32.798649 -1.584844 7.157436 +vertex 26.175591 -3.047504 8.252825 +vertex 26.448036 -3.115854 8.136044 +endloop +endfacet +facet normal 0.244393 -0.472518 0.846758 +outer loop +vertex 26.448036 -3.115854 8.136044 +vertex 26.443146 -3.132867 8.127961 +vertex 32.833088 -2.745604 6.499722 +endloop +endfacet +facet normal 0.147050 -0.484320 0.862445 +outer loop +vertex 32.833088 -2.745604 6.499722 +vertex 36.147072 -1.831106 6.448225 +vertex 32.798649 -1.584844 7.157436 +endloop +endfacet +facet normal 0.244400 -0.472535 0.846746 +outer loop +vertex 26.448036 -3.115854 8.136044 +vertex 32.833088 -2.745604 6.499722 +vertex 32.798649 -1.584844 7.157436 +endloop +endfacet +facet normal -0.001535 -0.000008 -0.999999 +outer loop +vertex 18.206795 -3.144454 8.002062 +vertex 19.549599 -3.205483 8.000000 +vertex 19.552803 -3.793593 8.000000 +endloop +endfacet +facet normal -0.001942 -0.000848 -0.999998 +outer loop +vertex 18.206795 -3.144454 8.002062 +vertex 19.552803 -3.793593 8.000000 +vertex 18.211685 -3.794066 8.002604 +endloop +endfacet +endsolid Exported from Blender-2.80 (sub 74) diff --git a/tests/pytest/results.json b/tests/pytest/results.json index 8cd51ad9..5b8427e5 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -978,6 +978,50 @@ "total_badness": 84181.20294 } ], + "plane.stl": [ + { + "ne1d": 890, + "ne2d": 2646, + "ne3d": 8528, + "quality_histogram": "[4, 14, 27, 37, 43, 46, 41, 91, 102, 180, 331, 464, 679, 978, 1233, 1340, 1240, 987, 555, 136]", + "total_badness": 12856.87891 + }, + { + "ne1d": 572, + "ne2d": 1228, + "ne3d": 1901, + "quality_histogram": "[2, 18, 45, 48, 51, 66, 60, 92, 128, 133, 165, 191, 187, 197, 168, 128, 114, 65, 39, 4]", + "total_badness": 4320.0075948 + }, + { + "ne1d": 724, + "ne2d": 1754, + "ne3d": 3285, + "quality_histogram": "[4, 20, 30, 41, 36, 43, 44, 68, 96, 154, 170, 280, 339, 436, 436, 406, 340, 206, 107, 29]", + "total_badness": 5959.5331564 + }, + { + "ne1d": 956, + "ne2d": 2886, + "ne3d": 8682, + "quality_histogram": "[3, 11, 23, 48, 51, 47, 53, 55, 92, 133, 207, 340, 555, 905, 1236, 1446, 1418, 1197, 665, 197]", + "total_badness": 12703.577343 + }, + { + "ne1d": 1554, + "ne2d": 6466, + "ne3d": 31866, + "quality_histogram": "[4, 7, 10, 5, 21, 54, 53, 79, 111, 204, 328, 684, 1327, 2460, 3983, 5375, 6122, 5827, 4106, 1106]", + "total_badness": 41304.661508 + }, + { + "ne1d": 2992, + "ne2d": 23396, + "ne3d": 276949, + "quality_histogram": "[5, 10, 11, 13, 8, 23, 34, 93, 171, 459, 1121, 2702, 6581, 15040, 28425, 44154, 58179, 60855, 45197, 13868]", + "total_badness": 341180.22628 + } + ], "revolution.geo": [ { "ne1d": 320, diff --git a/tests/pytest/test_tutorials.py b/tests/pytest/test_tutorials.py index 80a53fee..bb3be546 100644 --- a/tests/pytest/test_tutorials.py +++ b/tests/pytest/test_tutorials.py @@ -31,11 +31,16 @@ def checkData(mesh, mp, ref): assert ref['quality_histogram'] == data['quality_histogram'] assert ref['total_badness'] == pytest.approx(data['total_badness'], rel=1e-5) - +# get tutorials def getFiles(fileEnding): r, d, files = next(os.walk(os.path.join("..","..","tutorials"))) return (f for f in files if f.endswith(fileEnding)) +# get additional tests +def getAdditionalFiles(fileEnding): + r, d, files = next(os.walk("geofiles")) + return (f for f in files if f.endswith(fileEnding)) + @pytest.fixture def refdata(): return json.load(open('results.json','r')) @@ -59,25 +64,30 @@ _geofiles = [f for f in getFiles(".geo")] + [f for f in getFiles(".stl")] if has_occ: _geofiles += [f for f in getFiles(".step")] _geofiles.sort() +_additional_testfiles = [f for f in getAdditionalFiles(".stl")] +if has_occ: + _additional_testfiles += [f for f in getAdditionalFiles(".step")] +_additional_testfiles.sort() def generateMesh(filename, mp): + folder = os.path.join("..","..","tutorials") if filename in _geofiles else "geofiles" if filename.endswith(".geo"): - geo = csg.CSGeometry(os.path.join("..","..","tutorials", filename)) + geo = csg.CSGeometry(os.path.join(folder, filename)) elif filename.endswith(".stl"): - geo = stl.STLGeometry(os.path.join("..","..","tutorials", filename)) + geo = stl.STLGeometry(os.path.join(folder, filename)) elif filename.endswith(".step"): - geo = occ.OCCGeometry(os.path.join("..","..","tutorials", filename)) + geo = occ.OCCGeometry(os.path.join(folder, filename)) return geo.GenerateMesh(mp) def isSlowTest(filename): return filename in ["cubemcyl.geo", "frame.step", "revolution.geo", "manyholes.geo", "torus.geo", "cubemsphere.geo", "manyholes2.geo", "matrix.geo", "trafo.geo", "ellipticcone.geo", "period.geo", "shaft.geo", "cubeandring.geo", "ellipticcyl.geo", - "ellipsoid.geo", "cone.geo"] + "ellipsoid.geo", "cone.geo", "plane.stl"] def getParameters(): res = [] - for f in _geofiles: + for f in _geofiles + _additional_testfiles: for i,mp in enumerate(getMeshingparameters(f)): if isSlowTest(f): res.append( pytest.param(f, mp, i, marks=pytest.mark.slow ) ) @@ -105,7 +115,7 @@ def generateResultFile(): import re, time data = {} with TaskManager(): - for _file in _geofiles: + for _file in _geofiles + _additional_testfiles: print("generate "+_file) start = time.time() mps = getMeshingparameters(_file) @@ -116,10 +126,11 @@ def generateResultFile(): mesh = generateMesh(_file, mp) meshdata.append( getData(mesh, mp) ) data[_file] = meshdata + print("needed", time.time() - start, "seconds") - print("needed", time.time() - start, "seconds") s = json.dumps(data, sort_keys=True, indent=4) open("results.json", "w").write(s) + print("done") if __name__ == "__main__": generateResultFile() From bee097b153b43d9346819789534536cd1b773428 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Wed, 2 Oct 2019 17:20:13 +0200 Subject: [PATCH 013/120] start unify meshing with occ meshing --- libsrc/meshing/basegeom.cpp | 68 +++++++--- libsrc/meshing/basegeom.hpp | 9 +- libsrc/meshing/improve2.cpp | 135 ++++++++++---------- libsrc/meshing/meshclass.hpp | 2 +- libsrc/occ/occgenmesh.cpp | 199 +----------------------------- libsrc/occ/occgeom.cpp | 38 +++++- libsrc/occ/occgeom.hpp | 83 +++++++------ libsrc/occ/occpkg.cpp | 2 + libsrc/occ/python_occ.cpp | 5 +- libsrc/stlgeom/meshstlsurface.cpp | 16 +++ ng/ngpkg.cpp | 1 + 11 files changed, 235 insertions(+), 323 deletions(-) diff --git a/libsrc/meshing/basegeom.cpp b/libsrc/meshing/basegeom.cpp index 6df0cf6e..36782786 100644 --- a/libsrc/meshing/basegeom.cpp +++ b/libsrc/meshing/basegeom.cpp @@ -27,29 +27,59 @@ namespace netgen int NetgenGeometry :: GenerateMesh (shared_ptr & mesh, MeshingParameters & mparam) { - if (!mesh) return 1; + multithread.percent = 0; - if (mparam.perfstepsstart <= MESHCONST_MESHVOLUME) + if(mparam.perfstepsstart <= MESHCONST_ANALYSE) { - multithread.task = "Volume meshing"; - - MESHING3_RESULT res = - MeshVolume (mparam, *mesh); - - if (res != MESHING3_OK) return 1; - - if (multithread.terminate) return 0; - - RemoveIllegalElements (*mesh); - if (multithread.terminate) return 0; - - MeshQuality3d (*mesh); + if(!mesh) + mesh = make_shared(); + mesh->geomtype = GetGeomType(); + Analyse(*mesh, mparam); } - - if (multithread.terminate || mparam.perfstepsend <= MESHCONST_MESHVOLUME) + if(multithread.terminate || mparam.perfstepsend <= MESHCONST_ANALYSE) return 0; + if(mparam.perfstepsstart <= MESHCONST_MESHEDGES) + FindEdges(*mesh, mparam); + + if(multithread.terminate || mparam.perfstepsend <= MESHCONST_MESHEDGES) + return 0; + + if (mparam.perfstepsstart <= MESHCONST_MESHSURFACE) + { + MeshSurface(*mesh, mparam); + mesh->CalcSurfacesOfNode(); + } + + if (multithread.terminate || mparam.perfstepsend <= MESHCONST_MESHSURFACE) + return 0; + + if (mparam.perfstepsstart <= MESHCONST_OPTSURFACE) + OptimizeSurface(*mesh, mparam); + + if (multithread.terminate || mparam.perfstepsend <= MESHCONST_OPTSURFACE) + return 0; + + + if(mparam.perfstepsstart <= MESHCONST_MESHVOLUME) + { + multithread.task = "Volume meshing"; + + MESHING3_RESULT res = MeshVolume (mparam, *mesh); + + if (res != MESHING3_OK) return 1; + if (multithread.terminate) return 0; + + RemoveIllegalElements (*mesh); + if (multithread.terminate) return 0; + + MeshQuality3d (*mesh); + } + + if (multithread.terminate || mparam.perfstepsend <= MESHCONST_MESHVOLUME) + return 0; + if (mparam.perfstepsstart <= MESHCONST_OPTVOLUME) { @@ -58,9 +88,9 @@ namespace netgen OptimizeVolume (mparam, *mesh); if (multithread.terminate) return 0; } - + FinalizeMesh(*mesh); return 0; - } + } const Refinement & NetgenGeometry :: GetRefinement () const diff --git a/libsrc/meshing/basegeom.hpp b/libsrc/meshing/basegeom.hpp index f6e63046..1c2223b3 100644 --- a/libsrc/meshing/basegeom.hpp +++ b/libsrc/meshing/basegeom.hpp @@ -22,9 +22,16 @@ namespace netgen virtual const Refinement & GetRefinement () const; - virtual void DoArchive(Archive&) + virtual void DoArchive(Archive&) { throw NgException("DoArchive not implemented for " + Demangle(typeid(*this).name())); } + virtual Mesh::GEOM_TYPE GetGeomType() const { return Mesh::NO_GEOM; } + virtual void Analyse(Mesh& mesh, + const MeshingParameters& mparam) {} + virtual void FindEdges(Mesh& mesh, const MeshingParameters& mparam) {} + virtual void MeshSurface(Mesh& mesh, const MeshingParameters& mparam) {} + virtual void OptimizeSurface(Mesh& mesh, const MeshingParameters& mparam) {} + virtual void FinalizeMesh(Mesh& mesh) const {} virtual void Save (string filename) const; virtual void SaveToMeshFile (ostream & /* ost */) const { ; } }; diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index 2fc9f5f4..9fcfc25a 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -862,70 +862,81 @@ namespace netgen // TODO: split also bad trigs, nut just illegal ones if (mesh.LegalTrig(sel)) continue; - for (int j = 0; j < 3; j++) + // find longest edge + INDEX_2 edge; + double edge_len = 0; + PointIndex pi1, pi2, pi3, pi4; + PointGeomInfo gi1, gi2, gi3, gi4; + for(auto j : Range(1,4)) { - PointIndex pi1 = sel.PNumMod(j+2); - PointIndex pi2 = sel.PNumMod(j+3); - PointIndex pi3 = sel.PNumMod(j+1); - PointIndex pi4; - PointGeomInfo gi1 = sel.GeomInfoPiMod(j+2); - PointGeomInfo gi2 = sel.GeomInfoPiMod(j+3); - PointGeomInfo gi3 = sel.GeomInfoPiMod(j+1); - PointGeomInfo gi4; - - if (mesh.IsSegment (pi1, pi2)) continue; - - // get neighbor element - INDEX_2 ii2 (pi1, pi2); - ii2.Sort(); - auto els = els_on_edge.Get(ii2); - SurfaceElementIndex other_i = get<0>(els); - if(other_i==sei) other_i = get<1>(els); - auto & other = mesh[other_i]; - - // find opposite point of neighbor element - for (int j = 0; j < 3; j++) - if(other[j]!=pi1 && other[j]!=pi2) - { - pi4 = other[j]; - gi4 = other.GeomInfoPi(j); - break; - } - - // split edge pi1,pi2 - Point<3> p5; - PointIndex pi5; - PointGeomInfo gi5; - - mesh.GetGeometry()->GetRefinement().PointBetween (mesh[pi1], mesh[pi2], 0.5, - faceindex, - gi1, gi2, p5, gi5); - - pi5 = mesh.AddPoint(p5); - - Element2d e1(3); - e1.SetIndex(faceindex); - e1={ {pi1,gi1}, {pi5,gi5}, {pi3,gi3} }; - mesh.AddSurfaceElement( e1 ); - - Element2d e2(3); - e2.SetIndex(faceindex); - e2 ={ {pi5,gi5}, {pi2,gi2}, {pi3,gi3} }; - mesh.AddSurfaceElement( e2 ); - - Element2d e3(3); - e3.SetIndex(faceindex); - e3 ={ {pi1,gi1}, {pi4,gi4}, {pi5,gi5} }; - mesh.AddSurfaceElement( e3 ); - - Element2d e4(3); - e4.SetIndex(faceindex); - e4 ={ {pi4,gi4}, {pi2,gi2}, {pi5,gi5} }; - mesh.AddSurfaceElement( e4 ); - - sel.Delete(); - other.Delete(); + auto test_pi1 = sel.PNumMod(j); + auto test_pi2 = sel.PNumMod(j+1); + if (mesh.IsSegment(test_pi1, test_pi2)) + continue; + auto len = (mesh[test_pi2]-mesh[test_pi1]).Length(); + if(len > edge_len) + { + edge = {test_pi1, test_pi2}; + edge.Sort(); + edge_len = len; + pi1 = test_pi1; + pi2 = test_pi2; + pi3 = sel.PNumMod(j+2); + gi1 = sel.GeomInfoPiMod(j); + gi2 = sel.GeomInfoPiMod(j+1); + gi3 = sel.GeomInfoPiMod(j+2); + } } + if(!edge_len) + throw Exception("Couldn't find edge to split, something is wrong"); + // get neighbor element + auto els = els_on_edge.Get(edge); + SurfaceElementIndex other_i = get<0>(els); + if(other_i==sei) other_i = get<1>(els); + auto & other = mesh[other_i]; + + // find opposite point of neighbor element + for (int j = 0; j < 3; j++) + if(other[j]!=pi1 && other[j]!=pi2) + { + pi4 = other[j]; + gi4 = other.GeomInfoPi(j); + break; + } + + // split edge pi1,pi2 + Point<3> p5; + PointIndex pi5; + PointGeomInfo gi5; + + mesh.GetGeometry()->GetRefinement().PointBetween (mesh[pi1], mesh[pi2], 0.5, + faceindex, + gi1, gi2, p5, gi5); + + pi5 = mesh.AddPoint(p5); + + Element2d e1(3); + e1.SetIndex(faceindex); + e1={ {pi1,gi1}, {pi5,gi5}, {pi3,gi3} }; + mesh.AddSurfaceElement( e1 ); + + Element2d e2(3); + e2.SetIndex(faceindex); + e2 ={ {pi5,gi5}, {pi2,gi2}, {pi3,gi3} }; + mesh.AddSurfaceElement( e2 ); + + Element2d e3(3); + e3.SetIndex(faceindex); + e3 ={ {pi1,gi1}, {pi4,gi4}, {pi5,gi5} }; + mesh.AddSurfaceElement( e3 ); + + Element2d e4(3); + e4.SetIndex(faceindex); + e4 ={ {pi4,gi4}, {pi2,gi2}, {pi5,gi5} }; + mesh.AddSurfaceElement( e4 ); + + sel.Delete(); + other.Delete(); } mesh.SetNextTimeStamp(); diff --git a/libsrc/meshing/meshclass.hpp b/libsrc/meshing/meshclass.hpp index 372430ee..db9c96c3 100644 --- a/libsrc/meshing/meshclass.hpp +++ b/libsrc/meshing/meshclass.hpp @@ -864,7 +864,7 @@ namespace netgen /// friend class Meshing3; - + // only for saving the geometry enum GEOM_TYPE { NO_GEOM = 0, GEOM_2D = 1, GEOM_CSG = 10, GEOM_STL = 11, GEOM_OCC = 12, GEOM_ACIS = 13 }; GEOM_TYPE geomtype; diff --git a/libsrc/occ/occgenmesh.cpp b/libsrc/occ/occgenmesh.cpp index 45721490..c8642400 100644 --- a/libsrc/occ/occgenmesh.cpp +++ b/libsrc/occ/occgenmesh.cpp @@ -602,7 +602,7 @@ namespace netgen void OCCMeshSurface (OCCGeometry & geom, Mesh & mesh, - MeshingParameters & mparam) + const MeshingParameters & mparam) { static Timer t("OCCMeshSurface"); RegionTimer r(t); @@ -796,7 +796,7 @@ namespace netgen // Philippose - 15/01/2009 double maxh = geom.face_maxh[k-1]; //double maxh = mparam.maxh; - mparam.checkoverlap = 0; + // mparam.checkoverlap = 0; // int noldpoints = mesh->GetNP(); int noldsurfel = mesh.GetNSE(); @@ -916,7 +916,7 @@ namespace netgen } void OCCOptimizeSurface(OCCGeometry & geom, Mesh & mesh, - MeshingParameters & mparam) + const MeshingParameters & mparam) { const char * savetask = multithread.task; multithread.task = "Optimizing surface"; @@ -991,7 +991,7 @@ namespace netgen - void OCCSetLocalMeshSize(OCCGeometry & geom, Mesh & mesh, + void OCCSetLocalMeshSize(const OCCGeometry & geom, Mesh & mesh, const MeshingParameters & mparam, const OCCParameters& occparam) { static Timer t1("OCCSetLocalMeshSize"); @@ -1279,197 +1279,6 @@ namespace netgen mesh.LoadLocalMeshSize (mparam.meshsizefilename); } - - - - int OCCGenerateMesh (OCCGeometry & geom, shared_ptr & mesh, MeshingParameters & mparam, - const OCCParameters& occparam) - { - multithread.percent = 0; - - if (mparam.perfstepsstart <= MESHCONST_ANALYSE) - { - if(mesh.get() == nullptr) - mesh = make_shared(); - mesh->geomtype = Mesh::GEOM_OCC; - - OCCSetLocalMeshSize(geom,*mesh, mparam, occparam); - } - - if (multithread.terminate || mparam.perfstepsend <= MESHCONST_ANALYSE) - return TCL_OK; - - if (mparam.perfstepsstart <= MESHCONST_MESHEDGES) - { - OCCFindEdges (geom, *mesh, mparam); - - /* - cout << "Removing redundant points" << endl; - - int i, j; - int np = mesh->GetNP(); - NgArray equalto; - - equalto.SetSize (np); - equalto = 0; - - for (i = 1; i <= np; i++) - { - for (j = i+1; j <= np; j++) - { - if (!equalto[j-1] && (Dist2 (mesh->Point(i), mesh->Point(j)) < 1e-12)) - equalto[j-1] = i; - } - } - - for (i = 1; i <= np; i++) - if (equalto[i-1]) - { - cout << "Point " << i << " is equal to Point " << equalto[i-1] << endl; - for (j = 1; j <= mesh->GetNSeg(); j++) - { - Segment & seg = mesh->LineSegment(j); - if (seg[0] == i) seg[0] = equalto[i-1]; - if (seg[1] == i) seg[1] = equalto[i-1]; - } - } - - cout << "Removing degenerated segments" << endl; - for (j = 1; j <= mesh->GetNSeg(); j++) - { - Segment & seg = mesh->LineSegment(j); - if (seg[0] == seg[1]) - { - mesh->DeleteSegment(j); - cout << "Deleting Segment " << j << endl; - } - } - - mesh->Compress(); - */ - - /* - for (int i = 1; i <= geom.fmap.Extent(); i++) - { - Handle(Geom_Surface) hf1 = - BRep_Tool::Surface(TopoDS::Face(geom.fmap(i))); - for (int j = i+1; j <= geom.fmap.Extent(); j++) - { - Handle(Geom_Surface) hf2 = - BRep_Tool::Surface(TopoDS::Face(geom.fmap(j))); - if (hf1 == hf2) cout << "face " << i << " and face " << j << " lie on same surface" << endl; - } - } - */ - -#ifdef LOG_STREAM - (*logout) << "Edges meshed" << endl - << "time = " << GetTime() << " sec" << endl - << "points: " << mesh->GetNP() << endl; -#endif - } - - if (multithread.terminate || mparam.perfstepsend <= MESHCONST_MESHEDGES) - return TCL_OK; - - if (mparam.perfstepsstart <= MESHCONST_MESHSURFACE) - { - OCCMeshSurface (geom, *mesh, mparam); - if (multithread.terminate) return TCL_OK; - -#ifdef LOG_STREAM - (*logout) << "Surfaces meshed" << endl - << "time = " << GetTime() << " sec" << endl - << "points: " << mesh->GetNP() << endl; -#endif - -#ifdef STAT_STREAM - (*statout) << mesh->GetNSeg() << " & " - << mesh->GetNSE() << " & - &" - << GetTime() << " & " << endl; -#endif - - // MeshQuality2d (*mesh); - mesh->CalcSurfacesOfNode(); - } - - if (multithread.terminate || mparam.perfstepsend <= MESHCONST_MESHSURFACE) - return TCL_OK; - - if (mparam.perfstepsstart <= MESHCONST_OPTSURFACE) - { - OCCOptimizeSurface(geom, *mesh, mparam); - } - - if (multithread.terminate || mparam.perfstepsend <= MESHCONST_OPTSURFACE) - return TCL_OK; - - if (mparam.perfstepsstart <= MESHCONST_MESHVOLUME) - { - multithread.task = "Volume meshing"; - - MESHING3_RESULT res = MeshVolume (mparam, *mesh); - - if (res != MESHING3_OK) return TCL_ERROR; - if (multithread.terminate) return TCL_OK; - - RemoveIllegalElements (*mesh); - if (multithread.terminate) return TCL_OK; - - MeshQuality3d (*mesh); - -#ifdef STAT_STREAM - (*statout) << GetTime() << " & "; -#endif - -#ifdef LOG_STREAM - (*logout) << "Volume meshed" << endl - << "time = " << GetTime() << " sec" << endl - << "points: " << mesh->GetNP() << endl; -#endif - } - - if (multithread.terminate || mparam.perfstepsend <= MESHCONST_MESHVOLUME) - return TCL_OK; - - if (mparam.perfstepsstart <= MESHCONST_OPTVOLUME) - { - multithread.task = "Volume optimization"; - - OptimizeVolume (mparam, *mesh); - if (multithread.terminate) return TCL_OK; - -#ifdef STAT_STREAM - (*statout) << GetTime() << " & " - << mesh->GetNE() << " & " - << mesh->GetNP() << " " << '\\' << '\\' << " \\" << "hline" << endl; -#endif - -#ifdef LOG_STREAM - (*logout) << "Volume optimized" << endl - << "time = " << GetTime() << " sec" << endl - << "points: " << mesh->GetNP() << endl; -#endif - - // cout << "Optimization complete" << endl; - - } - - /* - (*testout) << "NP: " << mesh->GetNP() << endl; - for (int i = 1; i <= mesh->GetNP(); i++) - (*testout) << mesh->Point(i) << endl; - - (*testout) << endl << "NSegments: " << mesh->GetNSeg() << endl; - for (int i = 1; i <= mesh->GetNSeg(); i++) - (*testout) << mesh->LineSegment(i) << endl; - */ - - for (int i = 0; i < mesh->GetNDomains(); i++) - if (geom.snames.Size()) - mesh->SetMaterial (i+1, geom.snames[i]); - return TCL_OK; - } } #endif diff --git a/libsrc/occ/occgeom.cpp b/libsrc/occ/occgeom.cpp index 0faf7f0a..49c9742e 100644 --- a/libsrc/occ/occgeom.cpp +++ b/libsrc/occ/occgeom.cpp @@ -74,6 +74,36 @@ void STEP_GetEntityName(const TopoDS_Shape & theShape, STEPCAFControl_Reader * a } } + void OCCGeometry :: Analyse(Mesh& mesh, + const MeshingParameters& mparam) + { + OCCSetLocalMeshSize(*this, mesh, mparam, occparam); + } + + void OCCGeometry :: FindEdges(Mesh& mesh, + const MeshingParameters& mparam) + { + OCCFindEdges(*this, mesh, mparam); + } + + void OCCGeometry :: MeshSurface(Mesh& mesh, + const MeshingParameters& mparam) + { + OCCMeshSurface(*this, mesh, mparam); + } + + void OCCGeometry :: OptimizeSurface(Mesh& mesh, + const MeshingParameters& mparam) + { + OCCOptimizeSurface(*this, mesh, mparam); + } + + void OCCGeometry :: FinalizeMesh(Mesh& mesh) const + { + for (int i = 0; i < mesh.GetNDomains(); i++) + if (snames.Size()) + mesh.SetMaterial (i+1, snames[i]); + } void OCCGeometry :: PrintNrShapes () { @@ -1703,10 +1733,10 @@ void STEP_GetEntityName(const TopoDS_Shape & theShape, STEPCAFControl_Reader * a DLL_HEADER extern OCCParameters occparam; OCCParameters occparam; - int OCCGeometry :: GenerateMesh (shared_ptr & mesh, MeshingParameters & mparam) - { - return OCCGenerateMesh (*this, mesh, mparam, occparam); - } + // int OCCGeometry :: GenerateMesh (shared_ptr & mesh, MeshingParameters & mparam) + // { + // return OCCGenerateMesh (*this, mesh, mparam, occparam); + // } } diff --git a/libsrc/occ/occgeom.hpp b/libsrc/occ/occgeom.hpp index 750c6e29..6b0415d0 100644 --- a/libsrc/occ/occgeom.hpp +++ b/libsrc/occ/occgeom.hpp @@ -183,12 +183,33 @@ namespace netgen return a00*a11*a22 + a01*a12*a20 + a10*a21*a02 - a20*a11*a02 - a10*a01*a22 - a21*a12*a00; } + class DLL_HEADER OCCParameters + { + public: + /// Factor for meshing close edges + double resthcloseedgefac = 2.; + /// Enable / Disable detection of close edges + int resthcloseedgeenable = true; + + /// Minimum edge length to be used for dividing edges to mesh points + double resthminedgelen = 0.001; + + /// Enable / Disable use of the minimum edge length (by default use 1e-4) + int resthminedgelenenable = true; + + /*! + Dump all the OpenCascade specific meshing parameters + to console + */ + void Print (ostream & ost) const; + }; class OCCGeometry : public NetgenGeometry { Point<3> center; + OCCParameters occparam; public: TopoDS_Shape shape; @@ -239,11 +260,26 @@ namespace netgen emap.Clear(); vmap.Clear(); } + + Mesh::GEOM_TYPE GetGeomType() const override + { return Mesh::GEOM_OCC; } + + void SetOCCParameters(const OCCParameters& par) + { cout << "set occ pars to = " << par.resthcloseedgefac << endl; occparam = par; } + + void Analyse(Mesh& mesh, + const MeshingParameters& mparam) override; + void FindEdges(Mesh& mesh, + const MeshingParameters& mparam) override; + void MeshSurface(Mesh& mesh, + const MeshingParameters& mparam) override; + void OptimizeSurface(Mesh& mesh, + const MeshingParameters& mparam) override; + void FinalizeMesh(Mesh& mesh) const override; + DLL_HEADER void Save (string filename) const override; - DLL_HEADER virtual void Save (string filename) const; - - void DoArchive(Archive& ar); + void DoArchive(Archive& ar) override; DLL_HEADER void BuildFMap(); @@ -391,37 +427,9 @@ namespace netgen // void WriteOCC_STL(char * filename); - DLL_HEADER virtual int GenerateMesh (shared_ptr & mesh, MeshingParameters & mparam); + // DLL_HEADER virtual int GenerateMesh (shared_ptr & mesh, MeshingParameters & mparam); - DLL_HEADER virtual const Refinement & GetRefinement () const; - }; - - - - class DLL_HEADER OCCParameters - { - public: - - /// Factor for meshing close edges - double resthcloseedgefac = 2.; - - - /// Enable / Disable detection of close edges - int resthcloseedgeenable = true; - - - /// Minimum edge length to be used for dividing edges to mesh points - double resthminedgelen = 0.001; - - - /// Enable / Disable use of the minimum edge length (by default use 1e-4) - int resthminedgelenenable = true; - - /*! - Dump all the OpenCascade specific meshing parameters - to console - */ - void Print (ostream & ost) const; + DLL_HEADER const Refinement & GetRefinement () const override; }; @@ -434,15 +442,12 @@ namespace netgen // Philippose - 31.09.2009 // External access to the mesh generation functions within the OCC // subsystem (Not sure if this is the best way to implement this....!!) - DLL_HEADER extern int OCCGenerateMesh (OCCGeometry & occgeometry, shared_ptr & mesh, - MeshingParameters & mparam, const OCCParameters& occparam); - - DLL_HEADER extern void OCCSetLocalMeshSize(OCCGeometry & geom, Mesh & mesh, const MeshingParameters & mparam, + DLL_HEADER extern void OCCSetLocalMeshSize(const OCCGeometry & geom, Mesh & mesh, const MeshingParameters & mparam, const OCCParameters& occparam); - DLL_HEADER extern void OCCMeshSurface (OCCGeometry & geom, Mesh & mesh, MeshingParameters & mparam); + DLL_HEADER extern void OCCMeshSurface (OCCGeometry & geom, Mesh & mesh, const MeshingParameters & mparam); - DLL_HEADER extern void OCCOptimizeSurface (OCCGeometry & geom, Mesh & mesh, MeshingParameters & mparam); + DLL_HEADER extern void OCCOptimizeSurface (OCCGeometry & geom, Mesh & mesh, const MeshingParameters & mparam); DLL_HEADER extern void OCCFindEdges (OCCGeometry & geom, Mesh & mesh, const MeshingParameters & mparam); } diff --git a/libsrc/occ/occpkg.cpp b/libsrc/occ/occpkg.cpp index de9367d7..7ebc13d3 100644 --- a/libsrc/occ/occpkg.cpp +++ b/libsrc/occ/occpkg.cpp @@ -53,6 +53,8 @@ namespace netgen atof (Tcl_GetVar (interp, "::stloptions.resthminedgelen", 0)); occparam.resthminedgelenenable = atoi (Tcl_GetVar (interp, "::stloptions.resthminedgelenenable", 0)); + if(auto geo = dynamic_pointer_cast(ng_geometry); geo) + geo->SetOCCParameters(occparam); } }; diff --git a/libsrc/occ/python_occ.cpp b/libsrc/occ/python_occ.cpp index 6a847e14..d3a38c15 100644 --- a/libsrc/occ/python_occ.cpp +++ b/libsrc/occ/python_occ.cpp @@ -183,11 +183,12 @@ DLL_HEADER void ExportNgOCC(py::module &m) CreateOCCParametersFromKwargs(occparam, kwargs); CreateMPfromKwargs(mp, kwargs); } + geo->SetOCCParameters(occparam); auto mesh = make_shared(); - SetGlobalMesh(mesh); + geo->GenerateMesh(mesh, mp); mesh->SetGeometry(geo); + SetGlobalMesh(mesh); ng_geometry = geo; - OCCGenerateMesh(*geo, mesh, mp, occparam); return mesh; }, py::arg("mp") = nullptr, py::call_guard(), diff --git a/libsrc/stlgeom/meshstlsurface.cpp b/libsrc/stlgeom/meshstlsurface.cpp index d7b25e8f..25932abe 100644 --- a/libsrc/stlgeom/meshstlsurface.cpp +++ b/libsrc/stlgeom/meshstlsurface.cpp @@ -867,6 +867,22 @@ void STLSurfaceOptimization (STLGeometry & geom, break; } } + while(mesh.CheckOverlappingBoundary()) + { + for(const auto & el : mesh.SurfaceElements()) + { + if(el.BadElement()) + { + cout << "Restrict localh at el nr " << el << endl; + for(const auto& p : el.PNums()) + { + const auto& pnt = mesh[p]; + mesh.RestrictLocalH(pnt, 0.5*mesh.GetH(pnt)); + } + } + } + optmesh.SplitImprove(mesh); + } //(*testout) << "optimize, after, step = " << meshparam.optimize2d[j-1] << mesh.Point (3679) << endl; } diff --git a/ng/ngpkg.cpp b/ng/ngpkg.cpp index 5c0b8638..85052353 100644 --- a/ng/ngpkg.cpp +++ b/ng/ngpkg.cpp @@ -537,6 +537,7 @@ namespace netgen // delete ng_geometry; // ng_geometry = hgeom; ng_geometry = shared_ptr (hgeom); + geometryregister[i]->SetParameters(interp); mesh.reset(); return TCL_OK; From 43cc5e68b1d98d2463cb80bf222d8b6def835f14 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Wed, 2 Oct 2019 18:14:38 +0200 Subject: [PATCH 014/120] occ use optimize surface functionality from basegeom --- libsrc/meshing/basegeom.cpp | 34 ++++++++++++++++++++++++++++++++++ libsrc/meshing/basegeom.hpp | 4 +++- libsrc/occ/occgeom.cpp | 6 ------ libsrc/occ/occgeom.hpp | 7 ++++--- 4 files changed, 41 insertions(+), 10 deletions(-) diff --git a/libsrc/meshing/basegeom.cpp b/libsrc/meshing/basegeom.cpp index 36782786..c4e4e1fd 100644 --- a/libsrc/meshing/basegeom.cpp +++ b/libsrc/meshing/basegeom.cpp @@ -10,6 +10,40 @@ namespace netgen GeometryRegister :: ~GeometryRegister() { ; } + void NetgenGeometry :: OptimizeSurface(Mesh& mesh, const MeshingParameters& mparam) + { + const auto savetask = multithread.task; + multithread.task = "Optimizing surface"; + + static Timer timer_opt2d("Optimization 2D"); + RegionTimer reg(timer_opt2d); + auto meshopt = GetMeshOptimizer(); + for(auto i : Range(mparam.optsteps2d)) + { + PrintMessage(2, "Optimization step ", i); + for(auto optstep : mparam.optimize2d) + { + switch(optstep) + { + case 's': + meshopt->EdgeSwapping(mesh, 0); + break; + case 'S': + meshopt->EdgeSwapping(mesh, 1); + break; + case 'm': + meshopt->ImproveMesh(mesh, mparam); + break; + case 'c': + meshopt->CombineImprove (mesh); + break; + } + } + } + mesh.CalcSurfacesOfNode(); + mesh.Compress(); + multithread.task = savetask; + } shared_ptr GeometryRegisterArray :: LoadFromMeshFile (istream & ist) const { diff --git a/libsrc/meshing/basegeom.hpp b/libsrc/meshing/basegeom.hpp index 1c2223b3..5eeeee4a 100644 --- a/libsrc/meshing/basegeom.hpp +++ b/libsrc/meshing/basegeom.hpp @@ -30,7 +30,9 @@ namespace netgen const MeshingParameters& mparam) {} virtual void FindEdges(Mesh& mesh, const MeshingParameters& mparam) {} virtual void MeshSurface(Mesh& mesh, const MeshingParameters& mparam) {} - virtual void OptimizeSurface(Mesh& mesh, const MeshingParameters& mparam) {} + virtual void OptimizeSurface(Mesh& mesh, const MeshingParameters& mparam); + virtual unique_ptr GetMeshOptimizer() const + { return make_unique(); } virtual void FinalizeMesh(Mesh& mesh) const {} virtual void Save (string filename) const; virtual void SaveToMeshFile (ostream & /* ost */) const { ; } diff --git a/libsrc/occ/occgeom.cpp b/libsrc/occ/occgeom.cpp index 49c9742e..3ebe7bec 100644 --- a/libsrc/occ/occgeom.cpp +++ b/libsrc/occ/occgeom.cpp @@ -92,12 +92,6 @@ void STEP_GetEntityName(const TopoDS_Shape & theShape, STEPCAFControl_Reader * a OCCMeshSurface(*this, mesh, mparam); } - void OCCGeometry :: OptimizeSurface(Mesh& mesh, - const MeshingParameters& mparam) - { - OCCOptimizeSurface(*this, mesh, mparam); - } - void OCCGeometry :: FinalizeMesh(Mesh& mesh) const { for (int i = 0; i < mesh.GetNDomains(); i++) diff --git a/libsrc/occ/occgeom.hpp b/libsrc/occ/occgeom.hpp index 6b0415d0..87622600 100644 --- a/libsrc/occ/occgeom.hpp +++ b/libsrc/occ/occgeom.hpp @@ -265,7 +265,7 @@ namespace netgen { return Mesh::GEOM_OCC; } void SetOCCParameters(const OCCParameters& par) - { cout << "set occ pars to = " << par.resthcloseedgefac << endl; occparam = par; } + { occparam = par; } void Analyse(Mesh& mesh, const MeshingParameters& mparam) override; @@ -273,8 +273,9 @@ namespace netgen const MeshingParameters& mparam) override; void MeshSurface(Mesh& mesh, const MeshingParameters& mparam) override; - void OptimizeSurface(Mesh& mesh, - const MeshingParameters& mparam) override; + unique_ptr GetMeshOptimizer() const override + { return make_unique(*this); } + void FinalizeMesh(Mesh& mesh) const override; DLL_HEADER void Save (string filename) const override; From 05881c0eb5f6043cf36c449477bd91a30e518f4d Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Wed, 2 Oct 2019 20:29:18 +0200 Subject: [PATCH 015/120] refactor a lot of the old code, stl still needs to be done --- libsrc/csg/csgeom.cpp | 87 +++++++++-- libsrc/csg/csgeom.hpp | 18 +++ libsrc/csg/genmesh.cpp | 16 +- libsrc/csg/meshsurf.cpp | 143 ----------------- libsrc/csg/meshsurf.hpp | 56 ------- libsrc/geom2d/CMakeLists.txt | 4 +- libsrc/geom2d/geom2dmesh.cpp | 119 -------------- libsrc/geom2d/geom2dmesh.hpp | 52 ------ libsrc/geom2d/geometry2d.cpp | 78 ++++++++- libsrc/geom2d/geometry2d.hpp | 31 +++- libsrc/interface/CMakeLists.txt | 2 +- libsrc/meshing/basegeom.cpp | 12 +- libsrc/meshing/basegeom.hpp | 52 +++++- libsrc/meshing/bisect.cpp | 114 +++----------- libsrc/meshing/bisect.hpp | 45 +----- libsrc/meshing/curvedelems.cpp | 46 +++--- libsrc/meshing/curvedelems.hpp | 1 + libsrc/meshing/improve2.cpp | 41 +++-- libsrc/meshing/improve2.hpp | 50 ++---- libsrc/meshing/improve2gen.cpp | 10 +- libsrc/meshing/meshfunc2d.cpp | 16 +- libsrc/meshing/refine.cpp | 34 ++-- libsrc/meshing/secondorder.cpp | 22 +-- libsrc/meshing/smoothing2.5.cpp | 8 +- libsrc/meshing/smoothing2.cpp | 81 +++------- libsrc/meshing/validate.cpp | 15 +- libsrc/occ/occgenmesh.cpp | 16 +- libsrc/occ/occgeom.cpp | 197 +++++++++++++++++++++-- libsrc/occ/occgeom.hpp | 29 +++- libsrc/occ/occmeshsurf.cpp | 252 ------------------------------ libsrc/occ/occmeshsurf.hpp | 56 ------- libsrc/stlgeom/meshstlsurface.cpp | 30 ++-- libsrc/stlgeom/meshstlsurface.hpp | 54 ------- libsrc/stlgeom/stlgeom.cpp | 13 -- nglib/CMakeLists.txt | 7 +- nglib/nglib.cpp | 10 +- 36 files changed, 644 insertions(+), 1173 deletions(-) delete mode 100644 libsrc/geom2d/geom2dmesh.cpp delete mode 100644 libsrc/geom2d/geom2dmesh.hpp diff --git a/libsrc/csg/csgeom.cpp b/libsrc/csg/csgeom.cpp index b4004a41..c812d1a4 100644 --- a/libsrc/csg/csgeom.cpp +++ b/libsrc/csg/csgeom.cpp @@ -72,6 +72,84 @@ namespace netgen Clean(); } + void CSGeometry :: ProjectPoint(int surfind, Point<3> & p) const + { + Point<3> hp = p; + GetSurface(surfind)->Project (hp); + p = hp; + } + + void CSGeometry :: ProjectPointEdge(int surfind, INDEX surfind2, + Point<3> & p) const + { + Point<3> hp = p; + ProjectToEdge (GetSurface(surfind), + GetSurface(surfind2), hp); + p = hp; + } + + + Vec<3> CSGeometry :: GetNormal(int surfind, const Point<3> & p) const + { + Vec<3> hn; + GetSurface(surfind)->CalcGradient(p, hn); + hn.Normalize(); + return hn; + } + + void CSGeometry :: + PointBetween(const Point<3> & p1, const Point<3> & p2, double secpoint, + int surfi, + const PointGeomInfo & gi1, + const PointGeomInfo & gi2, + Point<3> & newp, PointGeomInfo & newgi) const + { + Point<3> hnewp; + hnewp = p1+secpoint*(p2-p1); + if (surfi != -1) + { + GetSurface (surfi) -> Project (hnewp); + newgi.trignum = 1; + } + + newp = hnewp; + } + + void CSGeometry :: PointBetweenEdge(const Point<3> & p1, const Point<3> & p2, double secpoint, + int surfi1, int surfi2, + const EdgePointGeomInfo & ap1, + const EdgePointGeomInfo & ap2, + Point<3> & newp, EdgePointGeomInfo & newgi) const + { + Point<3> hnewp = p1+secpoint*(p2-p1); + //(*testout) << "hnewp " << hnewp << " s1 " << surfi1 << " s2 " << surfi2 << endl; + if (surfi1 != -1 && surfi2 != -1 && surfi1 != surfi2) + { + netgen::ProjectToEdge (GetSurface(surfi1), + GetSurface(surfi2), + hnewp); + // (*testout) << "Pointbetween, newp = " << hnewp << endl + // << ", err = " << sqrt (sqr (hnewp(0))+ sqr(hnewp(1)) + sqr (hnewp(2))) - 1 << endl; + newgi.edgenr = 1; + //(*testout) << "hnewp (a1) " << hnewp << endl; + } + else if (surfi1 != -1) + { + GetSurface (surfi1) -> Project (hnewp); + //(*testout) << "hnewp (a2) " << hnewp << endl; + } + + newp = hnewp; + }; + + Vec<3> CSGeometry :: GetTangent(const Point<3> & p, int surfi1, int surfi2, + const EdgePointGeomInfo & ap1) const + { + Vec<3> n1 = GetSurface (surfi1)->GetNormalVector (p); + Vec<3> n2 = GetSurface (surfi2)->GetNormalVector (p); + Vec<3> tau = Cross (n1, n2).Normalize(); + return tau; + } void CSGeometry :: Clean () { @@ -137,15 +215,6 @@ namespace netgen return CSGGenerateMesh (*this, mesh, mparam); } - const Refinement & CSGeometry :: GetRefinement () const - { - // cout << "get CSGeometry - Refinement" << endl; - // should become class variables - RefinementSurfaces * ref = new RefinementSurfaces(*this); - ref -> Set2dOptimizer(new MeshOptimize2dSurfaces(*this)); - return *ref; - } - class WritePrimitivesIt : public SolidIterator { ostream & ost; diff --git a/libsrc/csg/csgeom.hpp b/libsrc/csg/csgeom.hpp index d178b81c..0983749e 100644 --- a/libsrc/csg/csgeom.hpp +++ b/libsrc/csg/csgeom.hpp @@ -188,6 +188,24 @@ namespace netgen virtual void SaveToMeshFile (ostream & ost) const override; + void ProjectPoint(INDEX surfind, Point<3> & p) const override; + void ProjectPointEdge(INDEX surfind, INDEX surfind2, Point<3> & p) const override; + Vec<3> GetNormal(int surfind, const Point<3> & p) const override; + void PointBetween(const Point<3> & p1, const Point<3> & p2, + double secpoint, int surfi, + const PointGeomInfo & gi1, + const PointGeomInfo & gi2, + Point<3> & newp, PointGeomInfo & newgi) const override; + + void PointBetweenEdge(const Point<3> & p1, const Point<3> & p2, double secpoint, + int surfi1, int surfi2, + const EdgePointGeomInfo & ap1, + const EdgePointGeomInfo & ap2, + Point<3> & newp, EdgePointGeomInfo & newgi) const override; + + Vec<3> GetTangent (const Point<3> & p, int surfi1, int surfi2, + const EdgePointGeomInfo & ap1) const override; + int GetChangeVal() { return changeval; } void Change() { changeval++; } diff --git a/libsrc/csg/genmesh.cpp b/libsrc/csg/genmesh.cpp index 3bc1c440..9ac96715 100644 --- a/libsrc/csg/genmesh.cpp +++ b/libsrc/csg/genmesh.cpp @@ -523,48 +523,48 @@ namespace netgen if (multithread.terminate) return; { - MeshOptimize2dSurfaces meshopt(geom); + MeshOptimize2d meshopt(mesh); meshopt.SetFaceIndex (k); meshopt.SetImproveEdges (0); meshopt.SetMetricWeight (mparam.elsizeweight); meshopt.SetWriteStatus (0); - meshopt.EdgeSwapping (mesh, (i > mparam.optsteps2d/2)); + meshopt.EdgeSwapping (i > mparam.optsteps2d/2); } if (multithread.terminate) return; { // mesh.CalcSurfacesOfNode(); - MeshOptimize2dSurfaces meshopt(geom); + MeshOptimize2d meshopt(mesh); meshopt.SetFaceIndex (k); meshopt.SetImproveEdges (0); meshopt.SetMetricWeight (mparam.elsizeweight); meshopt.SetWriteStatus (0); - meshopt.ImproveMesh (mesh, mparam); + meshopt.ImproveMesh(mparam); } { - MeshOptimize2dSurfaces meshopt(geom); + MeshOptimize2d meshopt(mesh); meshopt.SetFaceIndex (k); meshopt.SetImproveEdges (0); meshopt.SetMetricWeight (mparam.elsizeweight); meshopt.SetWriteStatus (0); - meshopt.CombineImprove (mesh); + meshopt.CombineImprove(); // mesh.CalcSurfacesOfNode(); } if (multithread.terminate) return; { - MeshOptimize2dSurfaces meshopt(geom); + MeshOptimize2d meshopt(mesh); meshopt.SetFaceIndex (k); meshopt.SetImproveEdges (0); meshopt.SetMetricWeight (mparam.elsizeweight); meshopt.SetWriteStatus (0); - meshopt.ImproveMesh (mesh, mparam); + meshopt.ImproveMesh(mparam); } } } diff --git a/libsrc/csg/meshsurf.cpp b/libsrc/csg/meshsurf.cpp index 1fcaeb17..f7b8d3fb 100644 --- a/libsrc/csg/meshsurf.cpp +++ b/libsrc/csg/meshsurf.cpp @@ -59,147 +59,4 @@ double Meshing2Surfaces :: CalcLocalH (const Point<3> & p, double gh) const return loch; */ } - - - - - - -MeshOptimize2dSurfaces :: MeshOptimize2dSurfaces (const CSGeometry & ageometry) - : MeshOptimize2d(), geometry(ageometry) -{ - ; -} - - -void MeshOptimize2dSurfaces :: ProjectPoint (INDEX surfind, Point<3> & p) const -{ - Point<3> hp = p; - geometry.GetSurface(surfind)->Project (hp); - p = hp; -} - -void MeshOptimize2dSurfaces :: ProjectPoint2 (INDEX surfind, INDEX surfind2, - Point<3> & p) const -{ - Point<3> hp = p; - ProjectToEdge ( geometry.GetSurface(surfind), - geometry.GetSurface(surfind2), hp); - p = hp; -} - - -void MeshOptimize2dSurfaces :: -GetNormalVector(INDEX surfind, const Point<3> & p, Vec<3> & n) const -{ - Vec<3> hn = n; - geometry.GetSurface(surfind)->CalcGradient (p, hn); - hn.Normalize(); - n = hn; - - /* - if (geometry.GetSurface(surfind)->Inverse()) - n *= -1; - */ -} - - - - - - - -RefinementSurfaces :: RefinementSurfaces (const CSGeometry & ageometry) - : Refinement(), geometry(ageometry) -{ - if(geometry.GetNSurf() == 0) - *testout << endl - << "WARNING: Initializing 2D refinement with 0-surface geometry" << endl - << "==========================================================" << endl - << endl << endl; -} - -RefinementSurfaces :: ~RefinementSurfaces () -{ - ; -} - -void RefinementSurfaces :: -PointBetween (const Point<3> & p1, const Point<3> & p2, double secpoint, - int surfi, - const PointGeomInfo & gi1, - const PointGeomInfo & gi2, - Point<3> & newp, PointGeomInfo & newgi) const -{ - Point<3> hnewp; - hnewp = p1+secpoint*(p2-p1); - if (surfi != -1) - { - geometry.GetSurface (surfi) -> Project (hnewp); - newgi.trignum = 1; - } - - newp = hnewp; -} - -void RefinementSurfaces :: -PointBetween (const Point<3> & p1, const Point<3> & p2, double secpoint, - int surfi1, int surfi2, - const EdgePointGeomInfo & ap1, - const EdgePointGeomInfo & ap2, - Point<3> & newp, EdgePointGeomInfo & newgi) const -{ - Point<3> hnewp = p1+secpoint*(p2-p1); - //(*testout) << "hnewp " << hnewp << " s1 " << surfi1 << " s2 " << surfi2 << endl; - if (surfi1 != -1 && surfi2 != -1 && surfi1 != surfi2) - { - netgen::ProjectToEdge (geometry.GetSurface(surfi1), - geometry.GetSurface(surfi2), - hnewp); - // (*testout) << "Pointbetween, newp = " << hnewp << endl - // << ", err = " << sqrt (sqr (hnewp(0))+ sqr(hnewp(1)) + sqr (hnewp(2))) - 1 << endl; - newgi.edgenr = 1; - //(*testout) << "hnewp (a1) " << hnewp << endl; - } - else if (surfi1 != -1) - { - geometry.GetSurface (surfi1) -> Project (hnewp); - //(*testout) << "hnewp (a2) " << hnewp << endl; - } - - newp = hnewp; -}; - -Vec<3> RefinementSurfaces :: GetTangent (const Point<3> & p, int surfi1, int surfi2, - const EdgePointGeomInfo & ap1) const -{ - Vec<3> n1 = geometry.GetSurface (surfi1)->GetNormalVector (p); - Vec<3> n2 = geometry.GetSurface (surfi2)->GetNormalVector (p); - Vec<3> tau = Cross (n1, n2).Normalize(); - return tau; -} - -Vec<3> RefinementSurfaces :: GetNormal (const Point<3> & p, int surfi1, - const PointGeomInfo & gi) const -{ - return geometry.GetSurface (surfi1)->GetNormalVector (p); -} - - - -void RefinementSurfaces :: ProjectToSurface (Point<3> & p, int surfi) const -{ - if (surfi != -1) - geometry.GetSurface (surfi) -> Project (p); -}; - -void RefinementSurfaces :: ProjectToEdge (Point<3> & p, int surfi1, int surfi2, const EdgePointGeomInfo & egi) const -{ - netgen::ProjectToEdge (geometry.GetSurface(surfi1), - geometry.GetSurface(surfi2), - p); - -} - - } diff --git a/libsrc/csg/meshsurf.hpp b/libsrc/csg/meshsurf.hpp index 88e8f741..25e23857 100644 --- a/libsrc/csg/meshsurf.hpp +++ b/libsrc/csg/meshsurf.hpp @@ -38,62 +38,6 @@ namespace netgen /// double CalcLocalH(const Point<3> & p, double gh) const override; }; - - - - /// - class MeshOptimize2dSurfaces : public MeshOptimize2d - { - /// - const CSGeometry & geometry; - - public: - /// - MeshOptimize2dSurfaces (const CSGeometry & ageometry); - - /// - virtual void ProjectPoint (INDEX surfind, Point<3> & p) const override; - /// - virtual void ProjectPoint2 (INDEX surfind, INDEX surfind2, Point<3> & p) const override; - /// - virtual void GetNormalVector(INDEX surfind, const Point<3> & p, Vec<3> & n) const override; - }; - - - - class RefinementSurfaces : public Refinement - { - const CSGeometry & geometry; - - public: - RefinementSurfaces (const CSGeometry & ageometry); - virtual ~RefinementSurfaces (); - - virtual void PointBetween (const Point<3> & p1, const Point<3> & p2, double secpoint, - int surfi, - const PointGeomInfo & gi1, - const PointGeomInfo & gi2, - Point<3> & newp, PointGeomInfo & newgi) const override; - - virtual void PointBetween (const Point<3> & p1, const Point<3> & p2, double secpoint, - int surfi1, int surfi2, - const EdgePointGeomInfo & ap1, - const EdgePointGeomInfo & ap2, - Point<3> & newp, EdgePointGeomInfo & newgi) const override; - - virtual Vec<3> GetTangent (const Point<3> & p, int surfi1, int surfi2, - const EdgePointGeomInfo & ap1) const override; - - virtual Vec<3> GetNormal (const Point<3> & p, int surfi1, - const PointGeomInfo & gi) const override; - - - virtual void ProjectToSurface (Point<3> & p, int surfi) const override; - - virtual void ProjectToEdge (Point<3> & p, int surfi1, int surfi2, const EdgePointGeomInfo & egi) const override; - - }; - } #endif diff --git a/libsrc/geom2d/CMakeLists.txt b/libsrc/geom2d/CMakeLists.txt index 8809e06c..2a29f6e5 100644 --- a/libsrc/geom2d/CMakeLists.txt +++ b/libsrc/geom2d/CMakeLists.txt @@ -1,5 +1,5 @@ add_definitions(-DNGLIB_EXPORTS) -add_library(geom2d ${NG_LIB_TYPE} genmesh2d.cpp geom2dmesh.cpp geometry2d.cpp python_geom2d.cpp ) +add_library(geom2d ${NG_LIB_TYPE} genmesh2d.cpp geometry2d.cpp python_geom2d.cpp ) if(APPLE) set_target_properties( geom2d PROPERTIES SUFFIX ".so") endif(APPLE) @@ -18,7 +18,7 @@ if(USE_GUI) endif(USE_GUI) install(FILES - geom2dmesh.hpp geometry2d.hpp spline2d.hpp + geometry2d.hpp spline2d.hpp vsgeom2d.hpp DESTINATION ${NG_INSTALL_DIR_INCLUDE}/geom2d COMPONENT netgen_devel ) diff --git a/libsrc/geom2d/geom2dmesh.cpp b/libsrc/geom2d/geom2dmesh.cpp deleted file mode 100644 index bc5fef19..00000000 --- a/libsrc/geom2d/geom2dmesh.cpp +++ /dev/null @@ -1,119 +0,0 @@ -#include -#include - -namespace netgen -{ - - Refinement2d :: Refinement2d (const SplineGeometry2d & ageometry) - : Refinement(), geometry(ageometry) - { - ; - } - - Refinement2d :: ~Refinement2d () - { - ; - } - - - void Refinement2d :: - PointBetween (const Point<3> & p1, const Point<3> & p2, double secpoint, - int surfi, - const PointGeomInfo & gi1, - const PointGeomInfo & gi2, - Point<3> & newp, PointGeomInfo & newgi) const - { - newp = p1+secpoint*(p2-p1); - newgi.trignum = 1; - } - - - - void Refinement2d :: - PointBetween (const Point<3> & p1, const Point<3> & p2, double secpoint, - int surfi1, int surfi2, - const EdgePointGeomInfo & ap1, - const EdgePointGeomInfo & ap2, - Point<3> & newp, EdgePointGeomInfo & newgi) const - { - Point<2> p2d; - double newdist; - auto spline = geometry.GetSplines().Get(ap1.edgenr); - if( (ap1.dist == 0.0) && (ap2.dist == 0.0) ) - { - // used for manually generated meshes - const SplineSeg3<2> * ss3; - const LineSeg<2> * ls; - auto ext = dynamic_cast(spline); - if(ext) - { - ss3 = dynamic_cast *>(ext->seg); - ls = dynamic_cast *>(ext->seg); - } - else - { - ss3 = dynamic_cast *>(spline); - ls = dynamic_cast *>(spline); - } - Point<2> p12d(p1(0),p1(1)), p22d(p2(0),p2(1)); - Point<2> p1_proj(0.0,0.0), p2_proj(0.0,0.0); - double t1_proj = 0.0; - double t2_proj = 0.0; - if(ss3) - { - ss3->Project(p12d,p1_proj,t1_proj); - ss3->Project(p22d,p2_proj,t2_proj); - } - else if(ls) - { - ls->Project(p12d,p1_proj,t1_proj); - ls->Project(p22d,p2_proj,t2_proj); - } - p2d = spline->GetPoint (((1-secpoint)*t1_proj+secpoint*t2_proj)); - newdist = (1-secpoint)*t1_proj+secpoint*t2_proj; - } - else - { - p2d = spline->GetPoint (((1-secpoint)*ap1.dist+secpoint*ap2.dist)); - newdist = (1-secpoint)*ap1.dist+secpoint*ap2.dist; - } - - // (*testout) << "refine 2d line, ap1.dist, ap2.dist = " << ap1.dist << ", " << ap2.dist << endl; - // (*testout) << "p1, p2 = " << p1 << p2 << ", newp = " << p2d << endl; - - newp = Point3d (p2d(0), p2d(1), 0); - newgi.edgenr = ap1.edgenr; - newgi.dist = newdist; - }; - - - - Vec<3> Refinement2d :: GetTangent (const Point<3> & p, int surfi1, int surfi2, - const EdgePointGeomInfo & ap1) const - { - Vec<2> t2d = geometry.GetSplines().Get(ap1.edgenr) -> GetTangent(ap1.dist); - return Vec<3> (t2d(0), t2d(1), 0); - } - - Vec<3> Refinement2d :: GetNormal (const Point<3> & p, int surfi1, - const PointGeomInfo & gi) const - { - return Vec<3> (0,0,1); - } - - - void Refinement2d :: ProjectToSurface (Point<3> & p, int surfi, PointGeomInfo & /* gi */) const - { - p(2) = 0; - } - - - void Refinement2d :: ProjectToEdge (Point<3> & p, int surfi1, int surfi2, - const EdgePointGeomInfo & egi) const - { - Point<2> p2d (p(0), p(1)), pp; - double t; - geometry.GetSplines().Get(egi.edgenr) -> Project (p2d, pp, t); - p = Point<3> (pp(0), pp(1), 0); - } -} diff --git a/libsrc/geom2d/geom2dmesh.hpp b/libsrc/geom2d/geom2dmesh.hpp deleted file mode 100644 index cab3418e..00000000 --- a/libsrc/geom2d/geom2dmesh.hpp +++ /dev/null @@ -1,52 +0,0 @@ -#ifndef FILE_GEOM2DMESH -#define FILE_GEOM2DMESH - -/**************************************************************************/ -/* File: geom2dmesh.hh */ -/* Author: Joachim Schoeberl */ -/* Date: 22. Jan. 01 */ -/**************************************************************************/ - - -namespace netgen -{ - - class Refinement2d : public Refinement - { - const class SplineGeometry2d & geometry; - - public: - Refinement2d (const class SplineGeometry2d & ageometry); - virtual ~Refinement2d (); - - virtual void PointBetween (const Point<3> & p1, const Point<3> & p2, double secpoint, - int surfi, - const PointGeomInfo & gi1, - const PointGeomInfo & gi2, - Point<3> & newp, PointGeomInfo & newgi) const override; - - virtual void PointBetween (const Point<3> & p1, const Point<3> & p2, double secpoint, - int surfi1, int surfi2, - const EdgePointGeomInfo & ap1, - const EdgePointGeomInfo & ap2, - Point<3> & newp, EdgePointGeomInfo & newgi) const override; - - - virtual Vec<3> GetTangent (const Point<3> & p, int surfi1, int surfi2, - const EdgePointGeomInfo & ap1) const override; - - virtual Vec<3> GetNormal (const Point<3> & p, int surfi1, - const PointGeomInfo & gi) const override; - - virtual void ProjectToSurface (Point<3> & p, int surfi, PointGeomInfo & /* gi */) const override; - - virtual void ProjectToEdge (Point<3> & p, int surfi1, int surfi2, - const EdgePointGeomInfo & egi) const override; - }; - - -} - - - -#endif diff --git a/libsrc/geom2d/geometry2d.cpp b/libsrc/geom2d/geometry2d.cpp index 3f5cac0c..6d78f7d9 100644 --- a/libsrc/geom2d/geometry2d.cpp +++ b/libsrc/geom2d/geometry2d.cpp @@ -20,6 +20,76 @@ namespace netgen delete [] materials[i]; } + void SplineGeometry2d :: PointBetweenEdge(const Point<3> & p1, const Point<3> & p2, double secpoint, + int surfi1, int surfi2, + const EdgePointGeomInfo & ap1, + const EdgePointGeomInfo & ap2, + Point<3> & newp, EdgePointGeomInfo & newgi) const + { + Point<2> p2d; + double newdist; + auto spline = GetSplines().Get(ap1.edgenr); + if( (ap1.dist == 0.0) && (ap2.dist == 0.0) ) + { + // used for manually generated meshes + const SplineSeg3<2> * ss3; + const LineSeg<2> * ls; + auto ext = dynamic_cast(spline); + if(ext) + { + ss3 = dynamic_cast *>(ext->seg); + ls = dynamic_cast *>(ext->seg); + } + else + { + ss3 = dynamic_cast *>(spline); + ls = dynamic_cast *>(spline); + } + Point<2> p12d(p1(0),p1(1)), p22d(p2(0),p2(1)); + Point<2> p1_proj(0.0,0.0), p2_proj(0.0,0.0); + double t1_proj = 0.0; + double t2_proj = 0.0; + if(ss3) + { + ss3->Project(p12d,p1_proj,t1_proj); + ss3->Project(p22d,p2_proj,t2_proj); + } + else if(ls) + { + ls->Project(p12d,p1_proj,t1_proj); + ls->Project(p22d,p2_proj,t2_proj); + } + p2d = spline->GetPoint (((1-secpoint)*t1_proj+secpoint*t2_proj)); + newdist = (1-secpoint)*t1_proj+secpoint*t2_proj; + } + else + { + p2d = spline->GetPoint (((1-secpoint)*ap1.dist+secpoint*ap2.dist)); + newdist = (1-secpoint)*ap1.dist+secpoint*ap2.dist; + } + + // (*testout) << "refine 2d line, ap1.dist, ap2.dist = " << ap1.dist << ", " << ap2.dist << endl; + // (*testout) << "p1, p2 = " << p1 << p2 << ", newp = " << p2d << endl; + + newp = Point3d (p2d(0), p2d(1), 0); + newgi.edgenr = ap1.edgenr; + newgi.dist = newdist; + }; + + + + Vec<3> SplineGeometry2d :: GetTangent(const Point<3> & p, int surfi1, int surfi2, + const EdgePointGeomInfo & ap1) const + { + Vec<2> t2d = GetSplines().Get(ap1.edgenr) -> GetTangent(ap1.dist); + return Vec<3> (t2d(0), t2d(1), 0); + } + + Vec<3> SplineGeometry2d :: GetNormal(int surfi1, const Point<3> & p, + const PointGeomInfo & gi) const + { + return Vec<3> (0,0,1); + } void SplineGeometry2d :: Load (const char * filename) { @@ -992,14 +1062,6 @@ namespace netgen return 0; } - - Refinement & SplineGeometry2d :: GetRefinement () const - { - return * new Refinement2d (*this); - } - - - class SplineGeometryRegister : public GeometryRegister { public: diff --git a/libsrc/geom2d/geometry2d.hpp b/libsrc/geom2d/geometry2d.hpp index f8b55430..051b1487 100644 --- a/libsrc/geom2d/geometry2d.hpp +++ b/libsrc/geom2d/geometry2d.hpp @@ -13,7 +13,6 @@ // #include "../gprim/spline.hpp" // #include "../gprim/splinegeometry.hpp" -#include "geom2dmesh.hpp" namespace netgen { @@ -151,12 +150,35 @@ namespace netgen void TestComment ( ifstream & infile ) ; - void DoArchive(Archive& ar) + void DoArchive(Archive& ar) override { SplineGeometry<2>::DoArchive(ar); ar & materials & maxh & quadmeshing & tensormeshing & layer & bcnames & elto0; } + + void PointBetween(const Point<3> & p1, const Point<3> & p2, double secpoint, + int surfi, + const PointGeomInfo & gi1, + const PointGeomInfo & gi2, + Point<3> & newp, PointGeomInfo & newgi) const override + { + newp = p1+secpoint*(p2-p1); + newgi.trignum = 1; + } + + void PointBetweenEdge(const Point<3> & p1, const Point<3> & p2, double secpoint, + int surfi1, int surfi2, + const EdgePointGeomInfo & ap1, + const EdgePointGeomInfo & ap2, + Point<3> & newp, EdgePointGeomInfo & newgi) const override; + + + Vec<3> GetTangent (const Point<3> & p, int surfi1, int surfi2, + const EdgePointGeomInfo & ap1) const override; + Vec<3> GetNormal(int surfi1, const Point<3> & p, + const PointGeomInfo & gi) const override; + const SplineSegExt & GetSpline (const int i) const { return dynamic_cast (*splines[i]); @@ -168,7 +190,7 @@ namespace netgen } - DLL_HEADER virtual int GenerateMesh (shared_ptr & mesh, MeshingParameters & mparam); + DLL_HEADER int GenerateMesh (shared_ptr & mesh, MeshingParameters & mparam) override; void PartitionBoundary (MeshingParameters & mp, double h, Mesh & mesh2d); @@ -205,9 +227,6 @@ namespace netgen int AddBCName (string name); string * BCNamePtr ( const int bcnr ); - - - DLL_HEADER virtual Refinement & GetRefinement () const; }; } diff --git a/libsrc/interface/CMakeLists.txt b/libsrc/interface/CMakeLists.txt index bc1bc2f3..d8d935a1 100644 --- a/libsrc/interface/CMakeLists.txt +++ b/libsrc/interface/CMakeLists.txt @@ -7,7 +7,7 @@ add_library(interface ${NG_LIB_TYPE} wuchemnitz.cpp writegmsh2.cpp writeOpenFOAM15x.cpp ) -target_link_libraries(interface mesh csg geom2d stl visual) +target_link_libraries(interface mesh csg geom2d visual) if(NOT WIN32) install( TARGETS interface ${NG_INSTALL_DIR}) diff --git a/libsrc/meshing/basegeom.cpp b/libsrc/meshing/basegeom.cpp index c4e4e1fd..ac3c8171 100644 --- a/libsrc/meshing/basegeom.cpp +++ b/libsrc/meshing/basegeom.cpp @@ -17,7 +17,7 @@ namespace netgen static Timer timer_opt2d("Optimization 2D"); RegionTimer reg(timer_opt2d); - auto meshopt = GetMeshOptimizer(); + auto meshopt = MeshOptimize2d(mesh); for(auto i : Range(mparam.optsteps2d)) { PrintMessage(2, "Optimization step ", i); @@ -26,16 +26,16 @@ namespace netgen switch(optstep) { case 's': - meshopt->EdgeSwapping(mesh, 0); + meshopt.EdgeSwapping(0); break; case 'S': - meshopt->EdgeSwapping(mesh, 1); + meshopt.EdgeSwapping(1); break; case 'm': - meshopt->ImproveMesh(mesh, mparam); + meshopt.ImproveMesh(mparam); break; case 'c': - meshopt->CombineImprove (mesh); + meshopt.CombineImprove(); break; } } @@ -129,7 +129,7 @@ namespace netgen const Refinement & NetgenGeometry :: GetRefinement () const { - return *new Refinement;; + return *new Refinement(*this); } diff --git a/libsrc/meshing/basegeom.hpp b/libsrc/meshing/basegeom.hpp index 5eeeee4a..50eeffb4 100644 --- a/libsrc/meshing/basegeom.hpp +++ b/libsrc/meshing/basegeom.hpp @@ -31,9 +31,57 @@ namespace netgen virtual void FindEdges(Mesh& mesh, const MeshingParameters& mparam) {} virtual void MeshSurface(Mesh& mesh, const MeshingParameters& mparam) {} virtual void OptimizeSurface(Mesh& mesh, const MeshingParameters& mparam); - virtual unique_ptr GetMeshOptimizer() const - { return make_unique(); } + virtual void FinalizeMesh(Mesh& mesh) const {} + + virtual void ProjectPoint (int surfind, Point<3> & p) const + { } + virtual void ProjectPointEdge (int surfind, int surfind2, Point<3> & p) const { } + virtual void ProjectPointEdge (int surfind, int surfind2, Point<3> & p, EdgePointGeomInfo& gi) const + { ProjectPointEdge(surfind, surfind2, p); } + + virtual bool CalcPointGeomInfo(int surfind, PointGeomInfo& gi, const Point<3> & p3) const {return false;} + virtual bool ProjectPointGI (int surfind, Point<3> & p, PointGeomInfo & gi) const + { + ProjectPoint(surfind, p); + return CalcPointGeomInfo(surfind, gi, p); + } + virtual Vec<3> GetNormal(int surfind, const Point<3> & p) const + { return {0.,0.,1.}; } + virtual Vec<3> GetNormal(int surfind, const Point<3> & p, const PointGeomInfo & gi) const + { return GetNormal(surfind, p); } + [[deprecated]] + void GetNormal(int surfind, const Point<3> & p, Vec<3> & n) const + { + n = GetNormal(surfind, p); + } + + virtual void PointBetween (const Point<3> & p1, + const Point<3> & p2, double secpoint, + int surfi, + const PointGeomInfo & gi1, + const PointGeomInfo & gi2, + Point<3> & newp, + PointGeomInfo & newgi) const + { + newp = p1 + secpoint * (p2-p1); + } + + virtual void PointBetweenEdge(const Point<3> & p1, + const Point<3> & p2, double secpoint, + int surfi1, int surfi2, + const EdgePointGeomInfo & ap1, + const EdgePointGeomInfo & ap2, + Point<3> & newp, + EdgePointGeomInfo & newgi) const + { + newp = p1+secpoint*(p2-p1); + } + + virtual Vec<3> GetTangent(const Point<3> & p, int surfi1, + int surfi2, + const EdgePointGeomInfo & egi) const + { throw Exception("Call GetTangent of " + Demangle(typeid(*this).name())); } virtual void Save (string filename) const; virtual void SaveToMeshFile (ostream & /* ost */) const { ; } }; diff --git a/libsrc/meshing/bisect.cpp b/libsrc/meshing/bisect.cpp index 9696fd81..1a7ebce7 100644 --- a/libsrc/meshing/bisect.cpp +++ b/libsrc/meshing/bisect.cpp @@ -3430,11 +3430,11 @@ namespace netgen PointGeomInfo npgi; if (mesh[newp].Type() != EDGEPOINT) - PointBetween (mesh.Point (oldpi1), mesh.Point (oldpi2), - 0.5, si, - oldtri.pgeominfo[(oldtri.markededge+1)%3], - oldtri.pgeominfo[(oldtri.markededge+2)%3], - mesh.Point (newp), npgi); + geo.PointBetween (mesh.Point (oldpi1), mesh.Point (oldpi2), + 0.5, si, + oldtri.pgeominfo[(oldtri.markededge+1)%3], + oldtri.pgeominfo[(oldtri.markededge+2)%3], + mesh.Point (newp), npgi); BTBisectTri (oldtri, newp, npgi, newtri1, newtri2); @@ -3508,28 +3508,16 @@ namespace netgen PointGeomInfo npgi1, npgi2; int si = mesh.GetFaceDescriptor (oldquad.surfid).SurfNr(); - // geom->GetSurface(si)->Project (mesh.Point(newp1)); - // geom->GetSurface(si)->Project (mesh.Point(newp2)); - -// (*testout) -// cerr << "project point 1 " << newp1 << " old: " << mesh.Point(newp1); - PointBetween (mesh.Point (edge1.I1()), mesh.Point (edge1.I2()), - 0.5, si, - pgi11, - pgi12, - mesh.Point (newp1), npgi1); -// (*testout) -// cerr << " new: " << mesh.Point(newp1) << endl; - - -// cerr << "project point 2 " << newp2 << " old: " << mesh.Point(newp2); - PointBetween (mesh.Point (edge2.I1()), mesh.Point (edge2.I2()), - 0.5, si, - pgi21, - pgi22, - mesh.Point (newp2), npgi2); -// cerr << " new: " << mesh.Point(newp2) << endl; - + geo.PointBetween(mesh.Point (edge1.I1()), mesh.Point (edge1.I2()), + 0.5, si, + pgi11, + pgi12, + mesh.Point (newp1), npgi1); + geo.PointBetween (mesh.Point (edge2.I1()), mesh.Point (edge2.I2()), + 0.5, si, + pgi21, + pgi22, + mesh.Point (newp2), npgi2); BTBisectQuad (oldquad, newp1, npgi1, newp2, npgi2, newquad1, newquad2); @@ -3565,16 +3553,10 @@ namespace netgen EdgePointGeomInfo newepgi; - -// -// cerr << "move edgepoint " << newpi << " from " << mesh.Point(newpi); - PointBetween (mesh.Point (seg[0]), mesh.Point (seg[1]), - 0.5, seg.surfnr1, seg.surfnr2, - seg.epgeominfo[0], seg.epgeominfo[1], - mesh.Point (newpi), newepgi); -// cerr << " to " << mesh.Point (newpi) << endl; - - + geo.PointBetweenEdge(mesh.Point (seg[0]), mesh.Point (seg[1]), + 0.5, seg.surfnr1, seg.surfnr2, + seg.epgeominfo[0], seg.epgeominfo[1], + mesh.Point (newpi), newepgi); nseg1.epgeominfo[1] = newepgi; nseg2.epgeominfo[0] = newepgi; @@ -4141,62 +4123,4 @@ namespace netgen refine_hp = 0; refine_p = 0; } - - - Refinement :: Refinement () - { - optimizer2d = NULL; - } - - Refinement :: ~Refinement () - { - ; - } - - - void Refinement :: PointBetween (const Point<3> & p1, const Point<3> & p2, double secpoint, - int surfi, - const PointGeomInfo & gi1, - const PointGeomInfo & gi2, - Point<3> & newp, PointGeomInfo & newgi) const - { - newp = p1+secpoint*(p2-p1); - } - - void Refinement :: PointBetween (const Point<3> & p1, const Point<3> & p2, double secpoint, - int surfi1, int surfi2, - const EdgePointGeomInfo & ap1, - const EdgePointGeomInfo & ap2, - Point<3> & newp, EdgePointGeomInfo & newgi) const - { - //cout << "base class edge point between" << endl; - newp = p1+secpoint*(p2-p1); - } - - - Vec<3> Refinement :: GetTangent (const Point<3> & p, int surfi1, int surfi2, - const EdgePointGeomInfo & ap1) const - { - cerr << "Refinement::GetTangent not overloaded" << endl; - return Vec<3> (0,0,0); - } - - Vec<3> Refinement :: GetNormal (const Point<3> & p, int surfi1, - const PointGeomInfo & gi) const - { - cerr << "Refinement::GetNormal not overloaded" << endl; - return Vec<3> (0,0,0); - } - - - void Refinement :: ProjectToSurface (Point<3> & p, int surfi) const - { - if (printmessage_importance>0) - cerr << "Refinement :: ProjectToSurface ERROR: no geometry set" << endl; - }; - - void Refinement :: ProjectToEdge (Point<3> & p, int surfi1, int surfi2, const EdgePointGeomInfo & egi) const - { - cerr << "Refinement::ProjectToEdge not overloaded" << endl; - } } diff --git a/libsrc/meshing/bisect.hpp b/libsrc/meshing/bisect.hpp index 7da7443c..6b96bd07 100644 --- a/libsrc/meshing/bisect.hpp +++ b/libsrc/meshing/bisect.hpp @@ -38,11 +38,11 @@ DLL_HEADER extern void ZRefinement (Mesh &, const class NetgenGeometry *, class DLL_HEADER Refinement { - MeshOptimize2d * optimizer2d; + const NetgenGeometry& geo; public: - Refinement (); - virtual ~Refinement (); + Refinement (const NetgenGeometry& ageo) : geo(ageo) {} + virtual ~Refinement () {} void Refine (Mesh & mesh) const; void Refine (Mesh & mesh); @@ -51,48 +51,9 @@ public: void MakeSecondOrder (Mesh & mesh) const; void MakeSecondOrder (Mesh & mesh); - virtual void PointBetween (const Point<3> & p1, const Point<3> & p2, double secpoint, - int surfi, - const PointGeomInfo & gi1, - const PointGeomInfo & gi2, - Point<3> & newp, PointGeomInfo & newgi) const; - - virtual void PointBetween (const Point<3> & p1, const Point<3> & p2, double secpoint, - int surfi1, int surfi2, - const EdgePointGeomInfo & ap1, - const EdgePointGeomInfo & ap2, - Point<3> & newp, EdgePointGeomInfo & newgi) const; - - virtual Vec<3> GetTangent (const Point<3> & p, int surfi1, int surfi2, - const EdgePointGeomInfo & egi) const; - - virtual Vec<3> GetNormal (const Point<3> & p, int surfi1, - const PointGeomInfo & gi) const; - - - virtual void ProjectToSurface (Point<3> & p, int surfi) const; - - virtual void ProjectToSurface (Point<3> & p, int surfi, PointGeomInfo & /* gi */) const - { - ProjectToSurface (p, surfi); - } - - virtual void ProjectToEdge (Point<3> & p, int surfi1, int surfi2, const EdgePointGeomInfo & egi) const; - - void ValidateSecondOrder (Mesh & mesh); void ValidateRefinedMesh (Mesh & mesh, NgArray & parents); - - MeshOptimize2d * Get2dOptimizer(void) const - { - return optimizer2d; - } - void Set2dOptimizer(MeshOptimize2d * opti) - { - optimizer2d = opti; - } - virtual void LocalizeEdgePoints(Mesh & /* mesh */) const {;} }; diff --git a/libsrc/meshing/curvedelems.cpp b/libsrc/meshing/curvedelems.cpp index 392ef0ef..49a716b9 100644 --- a/libsrc/meshing/curvedelems.cpp +++ b/libsrc/meshing/curvedelems.cpp @@ -539,7 +539,7 @@ namespace netgen CurvedElements :: CurvedElements (const Mesh & amesh) - : mesh (amesh) + : mesh(amesh), geo(*mesh.GetGeometry()) { order = 1; rational = 0; @@ -838,8 +838,8 @@ namespace netgen { Point<3> pm = Center (p1, p2); - Vec<3> n1 = ref -> GetNormal (p1, surfnr[e], gi0[e]); - Vec<3> n2 = ref -> GetNormal (p2, surfnr[e], gi1[e]); + Vec<3> n1 = geo.GetNormal (surfnr[e], p1, gi0[e]); + Vec<3> n2 = geo.GetNormal (surfnr[e], p2, gi1[e]); // p3 = pm + alpha1 n1 + alpha2 n2 @@ -876,7 +876,7 @@ namespace netgen Vec<3> v05 = 0.25 * Vec<3> (p1) + 0.5*w* Vec<3>(p3) + 0.25 * Vec<3> (p2); v05 /= 1 + (w-1) * 0.5; Point<3> p05 (v05), pp05(v05); - ref -> ProjectToSurface (pp05, surfnr[e], gi0[e]); + geo.ProjectPointGI(surfnr[e], pp05, gi0[e]); double d = Dist (pp05, p05); if (d < dold) @@ -911,16 +911,16 @@ namespace netgen if (swap) { p = p1 + xi[j] * (p2-p1); - ref -> PointBetween (p1, p2, xi[j], - surfnr[e], gi0[e], gi1[e], - pp, ppgi); + geo.PointBetween (p1, p2, xi[j], + surfnr[e], gi0[e], gi1[e], + pp, ppgi); } else { p = p2 + xi[j] * (p1-p2); - ref -> PointBetween (p2, p1, xi[j], - surfnr[e], gi1[e], gi0[e], - pp, ppgi); + geo.PointBetween (p2, p1, xi[j], + surfnr[e], gi1[e], gi0[e], + pp, ppgi); } Vec<3> dist = pp - p; @@ -1053,10 +1053,10 @@ namespace netgen if (rational) { - Vec<3> tau1 = ref -> GetTangent (p1, edge_surfnr2[edgenr], edge_surfnr1[edgenr], - edge_gi0[edgenr]); - Vec<3> tau2 = ref -> GetTangent (p2, edge_surfnr2[edgenr], edge_surfnr1[edgenr], - edge_gi1[edgenr]); + Vec<3> tau1 = geo.GetTangent(p1, edge_surfnr2[edgenr], edge_surfnr1[edgenr], + edge_gi0[edgenr]); + Vec<3> tau2 = geo.GetTangent(p2, edge_surfnr2[edgenr], edge_surfnr1[edgenr], + edge_gi1[edgenr]); // p1 + alpha1 tau1 = p2 + alpha2 tau2; Mat<3,2> mat; @@ -1082,8 +1082,8 @@ namespace netgen Vec<3> v05 = 0.25 * Vec<3> (p1) + 0.5*w* Vec<3>(p3) + 0.25 * Vec<3> (p2); v05 /= 1 + (w-1) * 0.5; Point<3> p05 (v05), pp05(v05); - ref -> ProjectToEdge (pp05, edge_surfnr1[edgenr], edge_surfnr2[edgenr], - edge_gi0[edgenr]); + geo.ProjectPointEdge(edge_surfnr1[edgenr], edge_surfnr2[edgenr], pp05, + edge_gi0[edgenr]); double d = Dist (pp05, p05); if (d < dold) @@ -1127,15 +1127,15 @@ namespace netgen if (swap) { p = p1 + xi[j] * (p2-p1); - ref -> PointBetween (p1, p2, xi[j], - edge_surfnr2[edgenr], edge_surfnr1[edgenr], - edge_gi0[edgenr], edge_gi1[edgenr], - pp, ppgi); + geo.PointBetweenEdge(p1, p2, xi[j], + edge_surfnr2[edgenr], edge_surfnr1[edgenr], + edge_gi0[edgenr], edge_gi1[edgenr], + pp, ppgi); } else { p = p2 + xi[j] * (p1-p2); - ref -> PointBetween (p2, p1, xi[j], + geo.PointBetweenEdge(p2, p1, xi[j], edge_surfnr2[edgenr], edge_surfnr1[edgenr], edge_gi1[edgenr], edge_gi0[edgenr], pp, ppgi); @@ -1302,10 +1302,10 @@ namespace netgen SurfaceElementIndex sei = top.GetFace2SurfaceElement (f+1)-1; if (sei != SurfaceElementIndex(-1)) { PointGeomInfo gi = mesh[sei].GeomInfoPi(1); - ref -> ProjectToSurface (pp, surfnr[facenr], gi); + geo.ProjectPointGI(surfnr[facenr], pp, gi); } else - { ref -> ProjectToSurface (pp, surfnr[facenr]); } + { geo.ProjectPoint(surfnr[facenr], pp); } Vec<3> dist = pp-xa[jj]; CalcTrigShape (order1, lami[fnums[1]]-lami[fnums[0]], diff --git a/libsrc/meshing/curvedelems.hpp b/libsrc/meshing/curvedelems.hpp index f1a732a0..da46ae21 100644 --- a/libsrc/meshing/curvedelems.hpp +++ b/libsrc/meshing/curvedelems.hpp @@ -17,6 +17,7 @@ class Refinement; class CurvedElements { const Mesh & mesh; + const NetgenGeometry& geo; NgArray edgeorder; NgArray faceorder; diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index 9fcfc25a..7e3f5953 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -39,7 +39,7 @@ namespace netgen - void MeshOptimize2d :: EdgeSwapping (Mesh & mesh, int usemetric) + void MeshOptimize2d :: EdgeSwapping (int usemetric) { static Timer timer("EdgeSwapping (2D)"); RegionTimer reg(timer); if (!faceindex) @@ -51,7 +51,7 @@ namespace netgen for (faceindex = 1; faceindex <= mesh.GetNFD(); faceindex++) { - EdgeSwapping (mesh, usemetric); + EdgeSwapping (usemetric); if (multithread.terminate) throw NgException ("Meshing stopped"); @@ -81,7 +81,7 @@ namespace netgen for (SurfaceElementIndex sei : seia) if (mesh[sei].GetNP() != 3) { - GenericImprove (mesh); + GenericImprove(); return; } @@ -317,14 +317,13 @@ namespace netgen nv1.Normalize(); nv2.Normalize(); - Vec<3> nvp3, nvp4; - SelectSurfaceOfPoint (mesh.Point(pi3), gi3); - GetNormalVector (surfnr, mesh.Point(pi3), gi3, nvp3); + // SelectSurfaceOfPoint (mesh.Point(pi3), gi3); + auto nvp3 = geo.GetNormal(surfnr, mesh.Point(pi3), gi3); nvp3.Normalize(); - SelectSurfaceOfPoint (mesh.Point(pi4), gi4); - GetNormalVector (surfnr, mesh.Point(pi4), gi4, nvp4); + // SelectSurfaceOfPoint (mesh.Point(pi4), gi4); + auto nvp4 = geo.GetNormal(surfnr, mesh.Point(pi4), gi4); nvp4.Normalize(); @@ -426,16 +425,16 @@ namespace netgen - void MeshOptimize2d :: CombineImprove (Mesh & mesh) + void MeshOptimize2d :: CombineImprove() { if (!faceindex) { - SplitImprove(mesh); + SplitImprove(); PrintMessage (3, "Combine improve"); for (faceindex = 1; faceindex <= mesh.GetNFD(); faceindex++) { - CombineImprove (mesh); + CombineImprove(); if (multithread.terminate) throw NgException ("Meshing stopped"); @@ -530,8 +529,8 @@ namespace netgen for (int k = 0; k < 3; k++) if (hel[k] == pi) { - SelectSurfaceOfPoint (mesh[pi], hel.GeomInfoPi(k+1)); - GetNormalVector (surfnr, mesh[pi], hel.GeomInfoPi(k+1), normals[pi]); + // SelectSurfaceOfPoint (mesh[pi], hel.GeomInfoPi(k+1)); + normals[pi] = geo.GetNormal(surfnr, mesh[pi], hel.GeomInfoPi(k+1)); break; } } @@ -624,9 +623,9 @@ namespace netgen for (int k = 0; k < 3; k++) if (hel[k] == pi1) { - SelectSurfaceOfPoint (mesh[pi1], - hel.GeomInfoPi(k+1)); - GetNormalVector (surfnr, mesh[pi1], hel.GeomInfoPi(k+1), nv); + // SelectSurfaceOfPoint (mesh[pi1], + // hel.GeomInfoPi(k+1)); + nv = geo.GetNormal(surfnr, mesh[pi1], hel.GeomInfoPi(k+1)); break; } @@ -794,7 +793,7 @@ namespace netgen mesh.SetNextTimeStamp(); } - void MeshOptimize2d :: SplitImprove (Mesh & mesh) + void MeshOptimize2d :: SplitImprove() { if (!faceindex) { @@ -803,7 +802,7 @@ namespace netgen mesh.CalcSurfacesOfNode(); // TODO: needed? for (faceindex = 1; faceindex <= mesh.GetNFD(); faceindex++) { - SplitImprove (mesh); + SplitImprove(); if (multithread.terminate) throw NgException ("Meshing stopped"); @@ -909,9 +908,9 @@ namespace netgen PointIndex pi5; PointGeomInfo gi5; - mesh.GetGeometry()->GetRefinement().PointBetween (mesh[pi1], mesh[pi2], 0.5, - faceindex, - gi1, gi2, p5, gi5); + geo.PointBetween(mesh[pi1], mesh[pi2], 0.5, + faceindex, + gi1, gi2, p5, gi5); pi5 = mesh.AddPoint(p5); diff --git a/libsrc/meshing/improve2.hpp b/libsrc/meshing/improve2.hpp index c9fbae4b..b93d4091 100644 --- a/libsrc/meshing/improve2.hpp +++ b/libsrc/meshing/improve2.hpp @@ -6,27 +6,29 @@ /// class MeshOptimize2d { - int faceindex; - int improveedges; - double metricweight; - int writestatus; - + int faceindex = 0; + int improveedges = 0; + double metricweight = 0.; + int writestatus = 1; + Mesh& mesh; + const NetgenGeometry& geo; public: /// - MeshOptimize2d (); + MeshOptimize2d(Mesh& amesh) : mesh(amesh), geo(*mesh.GetGeometry()) + {} virtual ~MeshOptimize2d() { ; } /// - void ImproveMesh (Mesh & mesh2d, const MeshingParameters & mp); - void ImproveMeshJacobian (Mesh & mesh2d, const MeshingParameters & mp); - void ImproveVolumeMesh (Mesh & mesh); + void ImproveMesh (const MeshingParameters & mp); + void ImproveMeshJacobian (const MeshingParameters & mp); + void ImproveVolumeMesh (); void ProjectBoundaryPoints(NgArray & surfaceindex, const NgArray* > & from, NgArray* > & dest); - void EdgeSwapping (Mesh & mesh, int usemetric); - void CombineImprove (Mesh & mesh); - void SplitImprove (Mesh & mesh); + void EdgeSwapping (int usemetric); + void CombineImprove (); + void SplitImprove (); - void GenericImprove (Mesh & mesh); + void GenericImprove (); void SetFaceIndex (int fi) { faceindex = fi; } @@ -35,31 +37,9 @@ public: void SetWriteStatus (int ws) { writestatus = ws; } - - /// - virtual void SelectSurfaceOfPoint (const Point<3> & p, - const PointGeomInfo & gi); - /// - virtual void ProjectPoint (INDEX /* surfind */, Point<3> & /* p */) const { }; - - /// project point, use gi as initial value, and compute new gi - virtual int ProjectPointGI (INDEX surfind, Point<3> & p, PointGeomInfo & gi) const - { ProjectPoint (surfind, p); return CalcPointGeomInfo (surfind, gi, p); } - - /// - virtual void ProjectPoint2 (INDEX /* surfind */, INDEX /* surfind2 */, Point<3> & /* p */) const { }; - /// liefert zu einem 3d-Punkt die geominfo (Dreieck) und liefert 1, wenn erfolgreich, /// 0, wenn nicht (Punkt ausserhalb von chart) - virtual int CalcPointGeomInfo(PointGeomInfo& gi, const Point<3> & /*p3*/) const - { gi.trignum = 1; return 1;}; - - virtual int CalcPointGeomInfo(int /* surfind */, PointGeomInfo& gi, const Point<3> & p3) const - { return CalcPointGeomInfo (gi, p3); } - /// - virtual void GetNormalVector(INDEX surfind, const Point<3> & p, PointGeomInfo & gi, Vec<3> & n) const; - virtual void GetNormalVector(INDEX surfind, const Point<3> & p, Vec<3> & n) const; void CheckMeshApproximation (Mesh & mesh); diff --git a/libsrc/meshing/improve2gen.cpp b/libsrc/meshing/improve2gen.cpp index 2c2b8cb5..4df98e75 100644 --- a/libsrc/meshing/improve2gen.cpp +++ b/libsrc/meshing/improve2gen.cpp @@ -19,7 +19,7 @@ namespace netgen }; - void MeshOptimize2d :: GenericImprove (Mesh & mesh) + void MeshOptimize2d :: GenericImprove () { if (!faceindex) { @@ -27,7 +27,7 @@ namespace netgen PrintMessage (3, "Generic Improve"); for (faceindex = 1; faceindex <= mesh.GetNFD(); faceindex++) - GenericImprove (mesh); + GenericImprove (); faceindex = 0; } @@ -395,10 +395,8 @@ namespace netgen // calc metric badness double bad1 = 0, bad2 = 0; - Vec<3> n; - - SelectSurfaceOfPoint (mesh.Point(pmap.Get(1)), pgi.Get(1)); - GetNormalVector (surfnr, mesh.Point(pmap.Get(1)), pgi.Elem(1), n); + // SelectSurfaceOfPoint (mesh.Point(pmap.Get(1)), pgi.Get(1)); + auto n = geo.GetNormal(surfnr, mesh.Point(pmap.Get(1)), pgi.Elem(1)); for (int j = 0; j < rule.oldels.Size(); j++) bad1 += mesh[elmap[j]].CalcJacobianBadness (mesh.Points(), n); diff --git a/libsrc/meshing/meshfunc2d.cpp b/libsrc/meshing/meshfunc2d.cpp index 9c794da2..90ac9b68 100644 --- a/libsrc/meshing/meshfunc2d.cpp +++ b/libsrc/meshing/meshfunc2d.cpp @@ -31,30 +31,30 @@ namespace netgen { case 's': { // topological swap - MeshOptimize2d meshopt; + MeshOptimize2d meshopt(mesh); meshopt.SetMetricWeight (mp.elsizeweight); - meshopt.EdgeSwapping (mesh, 0); + meshopt.EdgeSwapping (0); break; } case 'S': { // metric swap - MeshOptimize2d meshopt; + MeshOptimize2d meshopt(mesh); meshopt.SetMetricWeight (mp.elsizeweight); - meshopt.EdgeSwapping (mesh, 1); + meshopt.EdgeSwapping (1); break; } case 'm': { - MeshOptimize2d meshopt; + MeshOptimize2d meshopt(mesh); meshopt.SetMetricWeight (mp.elsizeweight); - meshopt.ImproveMesh(mesh, mp); + meshopt.ImproveMesh(mp); break; } case 'c': { - MeshOptimize2d meshopt; + MeshOptimize2d meshopt(mesh); meshopt.SetMetricWeight (mp.elsizeweight); - meshopt.CombineImprove(mesh); + meshopt.CombineImprove(); break; } default: diff --git a/libsrc/meshing/refine.cpp b/libsrc/meshing/refine.cpp index ef99ff0a..228ebf2b 100644 --- a/libsrc/meshing/refine.cpp +++ b/libsrc/meshing/refine.cpp @@ -147,11 +147,11 @@ namespace netgen { pointset[pinew] = true; Point<3> pnew; - PointBetween (mesh.Point (el[0]), - mesh.Point (el[1]), 0.5, - el.surfnr1, el.surfnr2, - el.epgeominfo[0], el.epgeominfo[1], - pnew, ngi); + geo.PointBetweenEdge(mesh.Point (el[0]), + mesh.Point (el[1]), 0.5, + el.surfnr1, el.surfnr2, + el.epgeominfo[0], el.epgeominfo[1], + pnew, ngi); // pinew = mesh.AddPoint (pnew); mesh.Point(pinew) = pnew; @@ -216,12 +216,12 @@ namespace netgen Point<3> pb; PointGeomInfo pgi; - PointBetween (mesh.Point (pi1), - mesh.Point (pi2), 0.5, - mesh.GetFaceDescriptor(el.GetIndex ()).SurfNr(), - el.GeomInfoPi (betw[j][0]), - el.GeomInfoPi (betw[j][1]), - pb, pgi); + geo.PointBetween(mesh.Point (pi1), + mesh.Point (pi2), 0.5, + mesh.GetFaceDescriptor(el.GetIndex ()).SurfNr(), + el.GeomInfoPi (betw[j][0]), + el.GeomInfoPi (betw[j][1]), + pb, pgi); pgis.Elem(4+j) = pgi; @@ -307,12 +307,12 @@ namespace netgen else { Point<3> pb; - PointBetween (mesh.Point (pi1), - mesh.Point (pi2), 0.5, - mesh.GetFaceDescriptor(el.GetIndex ()).SurfNr(), - el.GeomInfoPi (betw[j][0]), - el.GeomInfoPi (betw[j][1]), - pb, pgis.Elem(5+j)); + geo.PointBetween(mesh.Point (pi1), + mesh.Point (pi2), 0.5, + mesh.GetFaceDescriptor(el.GetIndex ()).SurfNr(), + el.GeomInfoPi (betw[j][0]), + el.GeomInfoPi (betw[j][1]), + pb, pgis.Elem(5+j)); pnums.Elem(5+j) = mesh.AddPoint (pb); diff --git a/libsrc/meshing/secondorder.cpp b/libsrc/meshing/secondorder.cpp index 14fc43d4..3a7368a9 100644 --- a/libsrc/meshing/secondorder.cpp +++ b/libsrc/meshing/secondorder.cpp @@ -100,11 +100,11 @@ namespace netgen { Point<3> pb; EdgePointGeomInfo ngi; - PointBetween (mesh.Point (el[0]), - mesh.Point (el[1]), 0.5, - el.surfnr1, el.surfnr2, - el.epgeominfo[0], el.epgeominfo[1], - pb, ngi); + geo.PointBetweenEdge(mesh.Point (el[0]), + mesh.Point (el[1]), 0.5, + el.surfnr1, el.surfnr2, + el.epgeominfo[0], el.epgeominfo[1], + pb, ngi); el[2] = mesh.AddPoint (pb, mesh.Point(el[0]).GetLayer(), EDGEPOINT); @@ -184,12 +184,12 @@ namespace netgen { Point<3> pb; PointGeomInfo newgi; - PointBetween (mesh.Point (pi1), - mesh.Point (pi2), 0.5, - mesh.GetFaceDescriptor(el.GetIndex ()).SurfNr(), - el.GeomInfoPi (betw[j][0]+1), - el.GeomInfoPi (betw[j][1]+1), - pb, newgi); + geo.PointBetween(mesh.Point (pi1), + mesh.Point (pi2), 0.5, + mesh.GetFaceDescriptor(el.GetIndex ()).SurfNr(), + el.GeomInfoPi (betw[j][0]+1), + el.GeomInfoPi (betw[j][1]+1), + pb, newgi); newel[onp+j] = mesh.AddPoint (pb, mesh.Point(pi1).GetLayer(), SURFACEPOINT); diff --git a/libsrc/meshing/smoothing2.5.cpp b/libsrc/meshing/smoothing2.5.cpp index 3bcefee8..587c8d47 100644 --- a/libsrc/meshing/smoothing2.5.cpp +++ b/libsrc/meshing/smoothing2.5.cpp @@ -15,14 +15,14 @@ namespace netgen if(surfaceindex[i] >= 0) { *dest[i] = *from[i]; - ProjectPoint(surfaceindex[i],*dest[i]); + geo.ProjectPoint(surfaceindex[i],*dest[i]); } } } - void MeshOptimize2d :: ImproveVolumeMesh (Mesh & mesh) + void MeshOptimize2d :: ImproveVolumeMesh () { if (!faceindex) @@ -31,7 +31,7 @@ namespace netgen for (faceindex = 1; faceindex <= mesh.GetNFD(); faceindex++) { - ImproveVolumeMesh (mesh); + ImproveVolumeMesh (); if (multithread.terminate) throw NgException ("Meshing stopped"); } @@ -229,7 +229,7 @@ namespace netgen //cout << "origp " << origp << " newp " << mesh[pi]; ngi = gi1; - moveisok = (ProjectPointGI (surfi, mesh[pi], ngi) != 0); + moveisok = (geo.ProjectPointGI(surfi, mesh[pi], ngi) != 0); //cout << " projected " << mesh[pi] << endl; diff --git a/libsrc/meshing/smoothing2.cpp b/libsrc/meshing/smoothing2.cpp index cc56497c..a59bcba9 100644 --- a/libsrc/meshing/smoothing2.cpp +++ b/libsrc/meshing/smoothing2.cpp @@ -205,22 +205,20 @@ namespace netgen class Opti2SurfaceMinFunction : public MinFunction { - const Mesh & mesh; Opti2dLocalData & ld; + const NetgenGeometry& geo; public: Opti2SurfaceMinFunction (const Mesh & amesh, Opti2dLocalData & ald) - : mesh(amesh), ld(ald) + : ld(ald), geo(*amesh.GetGeometry()) { } ; virtual double Func (const Vector & x) const { - Vec<3> n; - double badness = 0; - ld.meshthis -> GetNormalVector (ld.surfi, ld.sp1, ld.gi1, n); + auto n = geo.GetNormal(ld.surfi, ld.sp1, ld.gi1); Point<3> pp1 = ld.sp1 + x(0) * ld.t1 + x(1) * ld.t2; for (int j = 0; j < ld.locelements.Size(); j++) @@ -355,13 +353,13 @@ namespace netgen // static int timer = NgProfiler::CreateTimer ("opti2surface - funcgrad"); // NgProfiler::RegionTimer reg (timer); - Vec<3> n, vgrad; + Vec<3> vgrad; Point<3> pp1; vgrad = 0; double badness = 0; - ld.meshthis -> GetNormalVector (ld.surfi, ld.sp1, ld.gi1, n); + auto n = geo.GetNormal(ld.surfi, ld.sp1, ld.gi1); pp1 = ld.sp1 + x(0) * ld.t1 + x(1) * ld.t2; // meshthis -> ProjectPoint (surfi, pp1); @@ -410,13 +408,13 @@ namespace netgen // static int timer = NgProfiler::CreateTimer ("opti2surface - funcderiv"); // NgProfiler::RegionTimer reg (timer); - Vec<3> n, vgrad; + Vec<3> vgrad; Point<3> pp1; vgrad = 0; double badness = 0; - ld.meshthis -> GetNormalVector (ld.surfi, ld.sp1, ld.gi1, n); + auto n = geo.GetNormal(ld.surfi, ld.sp1, ld.gi1); pp1 = ld.sp1 + x(0) * ld.t1 + x(1) * ld.t2; for (int j = 0; j < ld.locelements.Size(); j++) @@ -474,11 +472,12 @@ namespace netgen { const Mesh & mesh; Opti2dLocalData & ld; + const NetgenGeometry& geo; public: Opti2EdgeMinFunction (const Mesh & amesh, Opti2dLocalData & ald) - : mesh(amesh), ld(ald) { } ; + : mesh(amesh), ld(ald), geo(*amesh.GetGeometry()) { } ; virtual double FuncGrad (const Vector & x, Vector & g) const; virtual double Func (const Vector & x) const; @@ -493,7 +492,7 @@ namespace netgen double Opti2EdgeMinFunction :: FuncGrad (const Vector & x, Vector & grad) const { int j, rot; - Vec<3> n1, n2, v1, v2, e1, e2, vgrad; + Vec<3> v1, v2, e1, e2, vgrad; Point<3> pp1; Vec<2> g1; double badness, hbadness; @@ -502,7 +501,7 @@ namespace netgen badness = 0; pp1 = ld.sp1 + x(0) * ld.t1; - ld.meshthis -> ProjectPoint2 (ld.surfi, ld.surfi2, pp1); + geo.ProjectPointEdge(ld.surfi, ld.surfi2, pp1); for (j = 0; j < ld.locelements.Size(); j++) { @@ -526,8 +525,8 @@ namespace netgen vgrad += g1(0) * e1 + g1(1) * e2; } - ld.meshthis -> GetNormalVector (ld.surfi, pp1, n1); - ld.meshthis -> GetNormalVector (ld.surfi2, pp1, n2); + auto n1 = geo.GetNormal(ld.surfi, pp1); + auto n2 = geo.GetNormal(ld.surfi2, pp1); v1 = Cross (n1, n2); v1.Normalize(); @@ -544,11 +543,12 @@ namespace netgen { const Mesh & mesh; Opti2dLocalData & ld; + const NetgenGeometry& geo; public: Opti2SurfaceMinFunctionJacobian (const Mesh & amesh, Opti2dLocalData & ald) - : mesh(amesh), ld(ald) + : mesh(amesh), ld(ald), geo(*amesh.GetGeometry()) { } ; virtual double FuncGrad (const Vector & x, Vector & g) const; virtual double FuncDeriv (const Vector & x, const Vector & dir, double & deriv) const; @@ -569,7 +569,7 @@ namespace netgen // from 2d: int lpi, gpi; - Vec<3> n, vgrad; + Vec<3> vgrad; Point<3> pp1; Vec<2> g1, vdir; double badness, hbad, hderiv; @@ -577,7 +577,7 @@ namespace netgen vgrad = 0; badness = 0; - ld.meshthis -> GetNormalVector (ld.surfi, ld.sp1, ld.gi1, n); + auto n = geo.GetNormal(ld.surfi, ld.sp1, ld.gi1); pp1 = ld.sp1 + x(0) * ld.t1 + x(1) * ld.t2; @@ -641,7 +641,7 @@ namespace netgen // from 2d: int j, k, lpi, gpi; - Vec<3> n, vgrad; + Vec<3> vgrad; Point<3> pp1; Vec<2> g1, vdir; double badness, hbad, hderiv; @@ -649,8 +649,6 @@ namespace netgen vgrad = 0; badness = 0; - ld.meshthis -> GetNormalVector (ld.surfi, ld.sp1, ld.gi1, n); - // pp1 = sp1; // pp1.Add2 (x.Get(1), t1, x.Get(2), t2); pp1 = ld.sp1 + x(0) * ld.t1 + x(1) * ld.t2; @@ -690,30 +688,7 @@ namespace netgen return badness; } - - - - - - - MeshOptimize2d dummy; - - MeshOptimize2d :: MeshOptimize2d () - { - SetFaceIndex (0); - SetImproveEdges (0); - SetMetricWeight (0); - SetWriteStatus (1); - } - - - void MeshOptimize2d :: SelectSurfaceOfPoint (const Point<3> & p, - const PointGeomInfo & gi) - { - ; - } - - void MeshOptimize2d :: ImproveMesh (Mesh & mesh, const MeshingParameters & mp) + void MeshOptimize2d :: ImproveMesh (const MeshingParameters & mp) { if (!faceindex) { @@ -721,7 +696,7 @@ namespace netgen for (faceindex = 1; faceindex <= mesh.GetNFD(); faceindex++) { - ImproveMesh (mesh, mp); + ImproveMesh (mp); if (multithread.terminate) throw NgException ("Meshing stopped"); } @@ -959,7 +934,7 @@ namespace netgen } ld.gi1 = hel.GeomInfoPi(hpi); - SelectSurfaceOfPoint (ld.sp1, ld.gi1); + // SelectSurfaceOfPoint (ld.sp1, ld.gi1); ld.locelements.SetSize(0); ld.locrots.SetSize (0); @@ -992,7 +967,7 @@ namespace netgen } - GetNormalVector (ld.surfi, ld.sp1, ld.gi1, ld.normal); + ld.normal = geo.GetNormal(ld.surfi, ld.sp1, ld.gi1); ld.t1 = ld.normal.GetNormal (); ld.t2 = Cross (ld.normal, ld.t1); @@ -1070,7 +1045,7 @@ namespace netgen PointGeomInfo ngi; ngi = ld.gi1; - moveisok = ProjectPointGI (ld.surfi, mesh[pi], ngi); + moveisok = geo.ProjectPointGI(ld.surfi, mesh[pi], ngi); // point lies on same chart in stlsurface if (moveisok) @@ -1094,14 +1069,4 @@ namespace netgen CheckMeshApproximation (mesh); mesh.SetNextTimeStamp(); } - - void MeshOptimize2d :: GetNormalVector(INDEX /* surfind */, const Point<3> & p, Vec<3> & nv) const - { - nv = Vec<3> (0, 0, 1); - } - - void MeshOptimize2d :: GetNormalVector(INDEX surfind, const Point<3> & p, PointGeomInfo & gi, Vec<3> & n) const - { - GetNormalVector (surfind, p, n); - } } diff --git a/libsrc/meshing/validate.cpp b/libsrc/meshing/validate.cpp index 06122ce9..f5fbff75 100644 --- a/libsrc/meshing/validate.cpp +++ b/libsrc/meshing/validate.cpp @@ -276,8 +276,8 @@ namespace netgen double oldlamedge,oldlamface; - MeshOptimize2d * optimizer2d = refinement.Get2dOptimizer(); - if(!optimizer2d) + auto geo = mesh.GetGeometry(); + if(!geo) { cerr << "No 2D Optimizer!" << endl; return; @@ -382,8 +382,15 @@ namespace netgen for (int i = 1; i <= np; i++) *can.Elem(i) = mesh.Point(i); - if(optimizer2d) - optimizer2d->ProjectBoundaryPoints(surfaceindex,can,should); + if(geo) + for(int i=0; i= 0) + { + *should[i] = *can[i]; + geo->ProjectPoint(surfaceindex[i],*should[i]); + } + } } diff --git a/libsrc/occ/occgenmesh.cpp b/libsrc/occ/occgenmesh.cpp index c8642400..5f8d1009 100644 --- a/libsrc/occ/occgenmesh.cpp +++ b/libsrc/occ/occgenmesh.cpp @@ -941,41 +941,41 @@ namespace netgen if (multithread.terminate) return; { - MeshOptimize2dOCCSurfaces meshopt(geom); + MeshOptimize2d meshopt(mesh); meshopt.SetFaceIndex (k); meshopt.SetImproveEdges (0); meshopt.SetMetricWeight (mparam.elsizeweight); meshopt.SetWriteStatus (0); - meshopt.EdgeSwapping (mesh, (i > mparam.optsteps2d/2)); + meshopt.EdgeSwapping (i > mparam.optsteps2d/2); } if (multithread.terminate) return; { - MeshOptimize2dOCCSurfaces meshopt(geom); + MeshOptimize2d meshopt(mesh); meshopt.SetFaceIndex (k); meshopt.SetImproveEdges (0); meshopt.SetMetricWeight (mparam.elsizeweight); meshopt.SetWriteStatus (0); - meshopt.ImproveMesh (mesh, mparam); + meshopt.ImproveMesh (mparam); } { - MeshOptimize2dOCCSurfaces meshopt(geom); + MeshOptimize2d meshopt(mesh); meshopt.SetFaceIndex (k); meshopt.SetImproveEdges (0); meshopt.SetMetricWeight (mparam.elsizeweight); meshopt.SetWriteStatus (0); - meshopt.CombineImprove (mesh); + meshopt.CombineImprove (); } if (multithread.terminate) return; { - MeshOptimize2dOCCSurfaces meshopt(geom); + MeshOptimize2d meshopt(mesh); meshopt.SetFaceIndex (k); meshopt.SetImproveEdges (0); meshopt.SetMetricWeight (mparam.elsizeweight); meshopt.SetWriteStatus (0); - meshopt.ImproveMesh (mesh, mparam); + meshopt.ImproveMesh (mparam); } } diff --git a/libsrc/occ/occgeom.cpp b/libsrc/occ/occgeom.cpp index 3ebe7bec..fb8006f6 100644 --- a/libsrc/occ/occgeom.cpp +++ b/libsrc/occ/occgeom.cpp @@ -1034,10 +1034,7 @@ void STEP_GetEntityName(const TopoDS_Shape & theShape, STEPCAFControl_Reader * a SetCenter(); } - - - - void OCCGeometry :: Project (int surfi, Point<3> & p) const + void OCCGeometry :: ProjectPoint(int surfi, Point<3> & p) const { static int cnt = 0; if (++cnt % 1000 == 0) cout << "Project cnt = " << cnt << endl; @@ -1056,8 +1053,47 @@ void STEP_GetEntityName(const TopoDS_Shape & theShape, STEPCAFControl_Reader * a } + bool OCCGeometry :: ProjectPointGI(int surfind, Point<3>& p, PointGeomInfo& gi) const + { + double u = gi.u; + double v = gi.v; + Point<3> hp = p; + if (FastProject (surfind, hp, u, v)) + { + p = hp; + return 1; + } + ProjectPoint (surfind, p); + return CalcPointGeomInfo (surfind, gi, p); + } + void OCCGeometry :: ProjectPointEdge(int surfind, INDEX surfind2, + Point<3> & p) const + { + TopExp_Explorer exp0, exp1; + bool done = false; + Handle(Geom_Curve) c; + + for (exp0.Init(fmap(surfind), TopAbs_EDGE); !done && exp0.More(); exp0.Next()) + for (exp1.Init(fmap(surfind2), TopAbs_EDGE); !done && exp1.More(); exp1.Next()) + { + if (TopoDS::Edge(exp0.Current()).IsSame(TopoDS::Edge(exp1.Current()))) + { + done = true; + double s0, s1; + c = BRep_Tool::Curve(TopoDS::Edge(exp0.Current()), s0, s1); + } + } + + gp_Pnt pnt(p(0), p(1), p(2)); + GeomAPI_ProjectPointOnCurve proj(pnt, c); + pnt = proj.NearestPoint(); + p(0) = pnt.X(); + p(1) = pnt.Y(); + p(2) = pnt.Z(); + + } bool OCCGeometry :: FastProject (int surfi, Point<3> & ap, double& u, double& v) const { @@ -1115,7 +1151,148 @@ void STEP_GetEntityName(const TopoDS_Shape & theShape, STEPCAFControl_Reader * a return true; } + Vec<3> OCCGeometry :: GetNormal(int surfind, const Point<3> & p, const PointGeomInfo & geominfo) const + { + gp_Pnt pnt; + gp_Vec du, dv; + Handle(Geom_Surface) occface; + occface = BRep_Tool::Surface(TopoDS::Face(fmap(surfind))); + + occface->D1(geominfo.u,geominfo.v,pnt,du,dv); + + auto n = Cross (Vec<3>(du.X(), du.Y(), du.Z()), + Vec<3>(dv.X(), dv.Y(), dv.Z())); + n.Normalize(); + + if (fmap(surfind).Orientation() == TopAbs_REVERSED) n *= -1; + return n; + } + + Vec<3> OCCGeometry :: GetNormal(int surfind, const Point<3> & p) const + { + Standard_Real u,v; + + gp_Pnt pnt(p(0), p(1), p(2)); + + Handle(Geom_Surface) occface; + occface = BRep_Tool::Surface(TopoDS::Face(fmap(surfind))); + + /* + GeomAPI_ProjectPointOnSurf proj(pnt, occface); + + if (proj.NbPoints() < 1) + { + cout << "ERROR: OCCSurface :: GetNormalVector: GeomAPI_ProjectPointOnSurf failed!" + << endl; + cout << p << endl; + return; + } + + proj.LowerDistanceParameters (u, v); + */ + + Handle( ShapeAnalysis_Surface ) su = new ShapeAnalysis_Surface( occface ); + gp_Pnt2d suval = su->ValueOfUV ( pnt, BRep_Tool::Tolerance( TopoDS::Face(fmap(surfind)) ) ); + suval.Coord( u, v); + pnt = occface->Value( u, v ); + + gp_Vec du, dv; + occface->D1(u,v,pnt,du,dv); + + /* + if (!occface->IsCNu (1) || !occface->IsCNv (1)) + (*testout) << "SurfOpt: Differentiation FAIL" << endl; + */ + + auto n = Cross (Vec3d(du.X(), du.Y(), du.Z()), + Vec3d(dv.X(), dv.Y(), dv.Z())); + n.Normalize(); + + if (fmap(surfind).Orientation() == TopAbs_REVERSED) n *= -1; + return n; + } + + bool OCCGeometry :: CalcPointGeomInfo(int surfind, PointGeomInfo& gi, const Point<3> & p) const + { + Standard_Real u,v; + + gp_Pnt pnt(p(0), p(1), p(2)); + + Handle(Geom_Surface) occface; + occface = BRep_Tool::Surface(TopoDS::Face(fmap(surfind))); + + /* + GeomAPI_ProjectPointOnSurf proj(pnt, occface); + + if (proj.NbPoints() < 1) + { + cout << "ERROR: OCCSurface :: GetNormalVector: GeomAPI_ProjectPointOnSurf failed!" + << endl; + cout << p << endl; + return 0; + } + + proj.LowerDistanceParameters (u, v); + */ + + Handle( ShapeAnalysis_Surface ) su = new ShapeAnalysis_Surface( occface ); + gp_Pnt2d suval = su->ValueOfUV ( pnt, BRep_Tool::Tolerance( TopoDS::Face(fmap(surfind)) ) ); + suval.Coord( u, v); + //pnt = occface->Value( u, v ); + + + gi.u = u; + gi.v = v; + return true; + } + + void OCCGeometry :: PointBetween(const Point<3> & p1, const Point<3> & p2, double secpoint, + int surfi, + const PointGeomInfo & gi1, + const PointGeomInfo & gi2, + Point<3> & newp, PointGeomInfo & newgi) const + { + Point<3> hnewp; + hnewp = p1+secpoint*(p2-p1); + + if (surfi > 0) + { + double u = gi1.u+secpoint*(gi2.u-gi1.u); + double v = gi1.v+secpoint*(gi2.v-gi1.v); + + auto savept = hnewp; + if (!FastProject(surfi, hnewp, u, v) || Dist(hnewp, savept) > Dist(p1,p2)) + { + // cout << "Fast projection to surface fails! Using OCC projection" << endl; + hnewp = savept; + ProjectPoint(surfi, hnewp); + } + newgi.trignum = 1; + newgi.u = u; + newgi.v = v; + } + newp = hnewp; + } + + + void OCCGeometry :: PointBetweenEdge(const Point<3> & p1, + const Point<3> & p2, double secpoint, + int surfi1, int surfi2, + const EdgePointGeomInfo & ap1, + const EdgePointGeomInfo & ap2, + Point<3> & newp, EdgePointGeomInfo & newgi) const + { + double s0, s1; + + Point<3> hnewp = p1+secpoint*(p2-p1); + gp_Pnt pnt(hnewp(0), hnewp(1), hnewp(2)); + GeomAPI_ProjectPointOnCurve proj(pnt, BRep_Tool::Curve(TopoDS::Edge(emap(ap1.edgenr)), s0, s1)); + pnt = proj.NearestPoint(); + hnewp = Point<3> (pnt.X(), pnt.Y(), pnt.Z()); + newp = hnewp; + newgi = ap1; + }; // void OCCGeometry :: WriteOCC_STL(char * filename) @@ -1705,17 +1882,7 @@ void STEP_GetEntityName(const TopoDS_Shape & theShape, STEPCAFControl_Reader * a return false; } - - - - - - const Refinement & OCCGeometry :: GetRefinement () const - { - return * new OCCRefinementSurfaces (*this); - } - - void OCCParameters :: Print(ostream & ost) const + void OCCParameters :: Print(ostream & ost) const { ost << "OCC Parameters:" << endl << "close edges: " << resthcloseedgeenable diff --git a/libsrc/occ/occgeom.hpp b/libsrc/occ/occgeom.hpp index 87622600..45f06026 100644 --- a/libsrc/occ/occgeom.hpp +++ b/libsrc/occ/occgeom.hpp @@ -273,15 +273,31 @@ namespace netgen const MeshingParameters& mparam) override; void MeshSurface(Mesh& mesh, const MeshingParameters& mparam) override; - unique_ptr GetMeshOptimizer() const override - { return make_unique(*this); } void FinalizeMesh(Mesh& mesh) const override; DLL_HEADER void Save (string filename) const override; void DoArchive(Archive& ar) override; - + + void ProjectPoint(int surfind, Point<3> & p) const override; + void ProjectPointEdge (int surfind, int surfind2, Point<3> & p) const override; + bool ProjectPointGI (int surfind, Point<3> & p, PointGeomInfo & gi) const override; + Vec<3> GetNormal(int surfind, const Point<3> & p) const override; + Vec<3> GetNormal(int surfind, const Point<3> & p, const PointGeomInfo & gi) const override; + bool CalcPointGeomInfo(int surfind, PointGeomInfo& gi, const Point<3> & p3) const override; + + void PointBetweenEdge(const Point<3> & p1, const Point<3> & p2, double secpoint, + int surfi1, int surfi2, + const EdgePointGeomInfo & ap1, + const EdgePointGeomInfo & ap2, + Point<3> & newp, EdgePointGeomInfo & newgi) const override; + void PointBetween(const Point<3> & p1, const Point<3> & p2, double secpoint, + int surfi, + const PointGeomInfo & gi1, + const PointGeomInfo & gi2, + Point<3> & newp, PointGeomInfo & newgi) const override; + DLL_HEADER void BuildFMap(); Box<3> GetBoundingBox() const @@ -301,9 +317,6 @@ namespace netgen Point<3> Center() const { return center; } - void Project (int surfi, Point<3> & p) const; - bool FastProject (int surfi, Point<3> & ap, double& u, double& v) const; - OCCSurface GetSurface (int surfi) { cout << "OCCGeometry::GetSurface using PLANESPACE" << endl; @@ -429,8 +442,8 @@ namespace netgen // void WriteOCC_STL(char * filename); // DLL_HEADER virtual int GenerateMesh (shared_ptr & mesh, MeshingParameters & mparam); - - DLL_HEADER const Refinement & GetRefinement () const override; + private: + bool FastProject (int surfi, Point<3> & ap, double& u, double& v) const; }; diff --git a/libsrc/occ/occmeshsurf.cpp b/libsrc/occ/occmeshsurf.cpp index 01c86423..d297af45 100644 --- a/libsrc/occ/occmeshsurf.cpp +++ b/libsrc/occ/occmeshsurf.cpp @@ -463,188 +463,6 @@ namespace netgen return gh; } - - - - - - MeshOptimize2dOCCSurfaces :: MeshOptimize2dOCCSurfaces (const OCCGeometry & ageometry) - : MeshOptimize2d(), geometry(ageometry) - { - ; - } - - - void MeshOptimize2dOCCSurfaces :: ProjectPoint (INDEX surfind, Point<3> & p) const - { - geometry.Project (surfind, p); - } - - - int MeshOptimize2dOCCSurfaces :: ProjectPointGI (INDEX surfind, Point<3> & p, PointGeomInfo & gi) const - { - double u = gi.u; - double v = gi.v; - - Point<3> hp = p; - if (geometry.FastProject (surfind, hp, u, v)) - { - p = hp; - return 1; - } - ProjectPoint (surfind, p); - return CalcPointGeomInfo (surfind, gi, p); - } - - - void MeshOptimize2dOCCSurfaces :: ProjectPoint2 (INDEX surfind, INDEX surfind2, - Point<3> & p) const - { - TopExp_Explorer exp0, exp1; - bool done = false; - Handle(Geom_Curve) c; - - for (exp0.Init(geometry.fmap(surfind), TopAbs_EDGE); !done && exp0.More(); exp0.Next()) - for (exp1.Init(geometry.fmap(surfind2), TopAbs_EDGE); !done && exp1.More(); exp1.Next()) - { - if (TopoDS::Edge(exp0.Current()).IsSame(TopoDS::Edge(exp1.Current()))) - { - done = true; - double s0, s1; - c = BRep_Tool::Curve(TopoDS::Edge(exp0.Current()), s0, s1); - } - } - - gp_Pnt pnt(p(0), p(1), p(2)); - GeomAPI_ProjectPointOnCurve proj(pnt, c); - pnt = proj.NearestPoint(); - p(0) = pnt.X(); - p(1) = pnt.Y(); - p(2) = pnt.Z(); - - } - - void MeshOptimize2dOCCSurfaces :: - GetNormalVector(INDEX surfind, const Point<3> & p, PointGeomInfo & geominfo, Vec<3> & n) const - { - gp_Pnt pnt; - gp_Vec du, dv; - - Handle(Geom_Surface) occface; - occface = BRep_Tool::Surface(TopoDS::Face(geometry.fmap(surfind))); - - occface->D1(geominfo.u,geominfo.v,pnt,du,dv); - - n = Cross (Vec<3>(du.X(), du.Y(), du.Z()), - Vec<3>(dv.X(), dv.Y(), dv.Z())); - n.Normalize(); - - if (geometry.fmap(surfind).Orientation() == TopAbs_REVERSED) n = -1*n; - - // GetNormalVector (surfind, p, n); - } - - - void MeshOptimize2dOCCSurfaces :: - GetNormalVector(INDEX surfind, const Point<3> & p, Vec<3> & n) const - { - // static int cnt = 0; - // if (cnt++ % 1000 == 0) cout << "GetNV cnt = " << cnt << endl; - Standard_Real u,v; - - gp_Pnt pnt(p(0), p(1), p(2)); - - Handle(Geom_Surface) occface; - occface = BRep_Tool::Surface(TopoDS::Face(geometry.fmap(surfind))); - - /* - GeomAPI_ProjectPointOnSurf proj(pnt, occface); - - if (proj.NbPoints() < 1) - { - cout << "ERROR: OCCSurface :: GetNormalVector: GeomAPI_ProjectPointOnSurf failed!" - << endl; - cout << p << endl; - return; - } - - proj.LowerDistanceParameters (u, v); - */ - - Handle( ShapeAnalysis_Surface ) su = new ShapeAnalysis_Surface( occface ); - gp_Pnt2d suval = su->ValueOfUV ( pnt, BRep_Tool::Tolerance( TopoDS::Face(geometry.fmap(surfind)) ) ); - suval.Coord( u, v); - pnt = occface->Value( u, v ); - - - - gp_Vec du, dv; - occface->D1(u,v,pnt,du,dv); - - /* - if (!occface->IsCNu (1) || !occface->IsCNv (1)) - (*testout) << "SurfOpt: Differentiation FAIL" << endl; - */ - - n = Cross (Vec3d(du.X(), du.Y(), du.Z()), - Vec3d(dv.X(), dv.Y(), dv.Z())); - n.Normalize(); - - if (geometry.fmap(surfind).Orientation() == TopAbs_REVERSED) n = -1*n; - } - - - int MeshOptimize2dOCCSurfaces :: - CalcPointGeomInfo(int surfind, PointGeomInfo& gi, const Point<3> & p) const - { - Standard_Real u,v; - - gp_Pnt pnt(p(0), p(1), p(2)); - - Handle(Geom_Surface) occface; - occface = BRep_Tool::Surface(TopoDS::Face(geometry.fmap(surfind))); - - /* - GeomAPI_ProjectPointOnSurf proj(pnt, occface); - - if (proj.NbPoints() < 1) - { - cout << "ERROR: OCCSurface :: GetNormalVector: GeomAPI_ProjectPointOnSurf failed!" - << endl; - cout << p << endl; - return 0; - } - - proj.LowerDistanceParameters (u, v); - */ - - Handle( ShapeAnalysis_Surface ) su = new ShapeAnalysis_Surface( occface ); - gp_Pnt2d suval = su->ValueOfUV ( pnt, BRep_Tool::Tolerance( TopoDS::Face(geometry.fmap(surfind)) ) ); - suval.Coord( u, v); - //pnt = occface->Value( u, v ); - - - gi.u = u; - gi.v = v; - return 1; - } - - - - - - - OCCRefinementSurfaces :: OCCRefinementSurfaces (const OCCGeometry & ageometry) - : Refinement(), geometry(ageometry) - { - ; - } - - OCCRefinementSurfaces :: ~OCCRefinementSurfaces () - { - ; - } - /* inline double Det3 (double a00, double a01, double a02, double a10, double a11, double a12, @@ -703,76 +521,6 @@ namespace netgen return true; } */ - - void OCCRefinementSurfaces :: - PointBetween (const Point<3> & p1, const Point<3> & p2, double secpoint, - int surfi, - const PointGeomInfo & gi1, - const PointGeomInfo & gi2, - Point<3> & newp, PointGeomInfo & newgi) const - { - Point<3> hnewp; - hnewp = p1+secpoint*(p2-p1); - - if (surfi > 0) - { - double u = gi1.u+secpoint*(gi2.u-gi1.u); - double v = gi1.v+secpoint*(gi2.v-gi1.v); - - auto savept = hnewp; - if (!geometry.FastProject (surfi, hnewp, u, v) || Dist(hnewp, savept) > Dist(p1,p2)) - { - // cout << "Fast projection to surface fails! Using OCC projection" << endl; - hnewp = savept; - geometry.Project (surfi, hnewp); - } - - newgi.trignum = 1; - newgi.u = u; - newgi.v = v; - } - - newp = hnewp; - } - - - void OCCRefinementSurfaces :: - PointBetween (const Point<3> & p1, const Point<3> & p2, double secpoint, - int surfi1, int surfi2, - const EdgePointGeomInfo & ap1, - const EdgePointGeomInfo & ap2, - Point<3> & newp, EdgePointGeomInfo & newgi) const - { - double s0, s1; - - Point<3> hnewp = p1+secpoint*(p2-p1); - gp_Pnt pnt(hnewp(0), hnewp(1), hnewp(2)); - GeomAPI_ProjectPointOnCurve proj(pnt, BRep_Tool::Curve(TopoDS::Edge(geometry.emap(ap1.edgenr)), s0, s1)); - pnt = proj.NearestPoint(); - hnewp = Point<3> (pnt.X(), pnt.Y(), pnt.Z()); - newp = hnewp; - newgi = ap1; - }; - - - void OCCRefinementSurfaces :: ProjectToSurface (Point<3> & p, int surfi) const - { - if (surfi > 0) - geometry.Project (surfi, p); - }; - - void OCCRefinementSurfaces :: ProjectToSurface (Point<3> & p, int surfi, PointGeomInfo & gi) const - { - if (surfi > 0) - if (!geometry.FastProject (surfi, p, gi.u, gi.v)) - { - cout << "Fast projection to surface fails! Using OCC projection" << endl; - geometry.Project (surfi, p); - } - }; - - - } diff --git a/libsrc/occ/occmeshsurf.hpp b/libsrc/occ/occmeshsurf.hpp index d88657df..3a74b170 100644 --- a/libsrc/occ/occmeshsurf.hpp +++ b/libsrc/occ/occmeshsurf.hpp @@ -141,64 +141,8 @@ protected: }; - - -/// -class MeshOptimize2dOCCSurfaces : public MeshOptimize2d - { - /// - const OCCGeometry & geometry; - -public: - /// - MeshOptimize2dOCCSurfaces (const OCCGeometry & ageometry); - - /// - virtual void ProjectPoint (INDEX surfind, Point<3> & p) const; - /// - virtual void ProjectPoint2 (INDEX surfind, INDEX surfind2, Point<3> & p) const; - /// - virtual int ProjectPointGI (INDEX surfind, Point<3> & p, PointGeomInfo & gi) const; - /// - virtual void GetNormalVector(INDEX surfind, const Point<3> & p, Vec<3> & n) const; - /// - virtual void GetNormalVector(INDEX surfind, const Point<3> & p, PointGeomInfo & gi, Vec<3> & n) const; - - virtual int CalcPointGeomInfo(int surfind, PointGeomInfo& gi, const Point<3> & p3) const; -}; - - - class OCCGeometry; - -class DLL_HEADER OCCRefinementSurfaces : public Refinement -{ - const OCCGeometry & geometry; - -public: - OCCRefinementSurfaces (const OCCGeometry & ageometry); - virtual ~OCCRefinementSurfaces (); - - virtual void PointBetween (const Point<3> & p1, const Point<3> & p2, double secpoint, - int surfi, - const PointGeomInfo & gi1, - const PointGeomInfo & gi2, - Point<3> & newp, PointGeomInfo & newgi) const override; - - virtual void PointBetween (const Point<3> & p1, const Point<3> & p2, double secpoint, - int surfi1, int surfi2, - const EdgePointGeomInfo & ap1, - const EdgePointGeomInfo & ap2, - Point<3> & newp, EdgePointGeomInfo & newgi) const override; - - virtual void ProjectToSurface (Point<3> & p, int surfi) const override; - - virtual void ProjectToSurface (Point<3> & p, int surfi, PointGeomInfo & gi) const override; -}; - - - #endif diff --git a/libsrc/stlgeom/meshstlsurface.cpp b/libsrc/stlgeom/meshstlsurface.cpp index 25932abe..ace69e6d 100644 --- a/libsrc/stlgeom/meshstlsurface.cpp +++ b/libsrc/stlgeom/meshstlsurface.cpp @@ -299,15 +299,15 @@ int STLSurfaceMeshing (STLGeometry & geom, class Mesh & mesh, const MeshingParam geom.SetMarkedTrig(seg.geominfo[1].trignum,1); } - MeshOptimizeSTLSurface optmesh(geom); + MeshOptimize2d optmesh(mesh); optmesh.SetFaceIndex (0); optmesh.SetImproveEdges (0); optmesh.SetMetricWeight (0); mesh.CalcSurfacesOfNode(); - optmesh.EdgeSwapping (mesh, 0); + optmesh.EdgeSwapping(0); mesh.CalcSurfacesOfNode(); - optmesh.ImproveMesh (mesh, mparam); + optmesh.ImproveMesh(mparam); } mesh.Compress(); @@ -827,7 +827,7 @@ void STLSurfaceOptimization (STLGeometry & geom, { PrintFnStart("optimize STL Surface"); - MeshOptimizeSTLSurface optmesh(geom); + MeshOptimize2d optmesh(mesh); optmesh.SetFaceIndex (0); optmesh.SetImproveEdges (0); @@ -848,22 +848,22 @@ void STLSurfaceOptimization (STLGeometry & geom, { case 's': { - optmesh.EdgeSwapping (mesh, 0); + optmesh.EdgeSwapping(0); break; } case 'S': { - optmesh.EdgeSwapping (mesh, 1); + optmesh.EdgeSwapping(1); break; } case 'm': { - optmesh.ImproveMesh(mesh, mparam); + optmesh.ImproveMesh(mparam); break; } case 'c': { - optmesh.CombineImprove (mesh); + optmesh.CombineImprove(); break; } } @@ -881,7 +881,7 @@ void STLSurfaceOptimization (STLGeometry & geom, } } } - optmesh.SplitImprove(mesh); + optmesh.SplitImprove(); } //(*testout) << "optimize, after, step = " << meshparam.optimize2d[j-1] << mesh.Point (3679) << endl; } @@ -1068,18 +1068,6 @@ double MeshingSTLSurface :: Area () const return geom.Area(); } - - - - - -MeshOptimizeSTLSurface :: MeshOptimizeSTLSurface (STLGeometry & ageom) - : MeshOptimize2d(), geom(ageom) -{ - ; -} - - void MeshOptimizeSTLSurface :: SelectSurfaceOfPoint (const Point<3> & p, const PointGeomInfo & gi) { diff --git a/libsrc/stlgeom/meshstlsurface.hpp b/libsrc/stlgeom/meshstlsurface.hpp index c12cbff9..aad08708 100644 --- a/libsrc/stlgeom/meshstlsurface.hpp +++ b/libsrc/stlgeom/meshstlsurface.hpp @@ -63,59 +63,5 @@ protected: double Area () const override; }; - - -/// -class MeshOptimizeSTLSurface : public MeshOptimize2d - { - /// - STLGeometry & geom; - -public: - /// - MeshOptimizeSTLSurface (STLGeometry & ageom); - - /// - virtual void SelectSurfaceOfPoint (const Point<3> & p, - const PointGeomInfo & gi); - /// - virtual void ProjectPoint (INDEX surfind, Point<3> & p) const; - /// - virtual void ProjectPoint2 (INDEX surfind, INDEX surfind2, Point<3> & p) const; - /// - virtual int CalcPointGeomInfo(PointGeomInfo& gi, const Point<3> & p3) const; - /// - virtual void GetNormalVector(INDEX surfind, const Point<3> & p, Vec<3> & n) const; -}; - - - - -class RefinementSTLGeometry : public Refinement -{ - const STLGeometry & geom; - -public: - RefinementSTLGeometry (const STLGeometry & ageom); - virtual ~RefinementSTLGeometry (); - - virtual void PointBetween (const Point<3> & p1, const Point<3> & p2, double secpoint, - int surfi, - const PointGeomInfo & gi1, - const PointGeomInfo & gi2, - Point<3> & newp, PointGeomInfo & newgi) const override; - - virtual void PointBetween (const Point<3> & p1, const Point<3> & p2, double secpoint, - int surfi1, int surfi2, - const EdgePointGeomInfo & ap1, - const EdgePointGeomInfo & ap2, - Point<3> & newp, EdgePointGeomInfo & newgi) const override; - - virtual void ProjectToSurface (Point<3> & p, int surfi) const override; - virtual void ProjectToSurface (Point<3> & p, int surfi, PointGeomInfo & gi) const override; -}; - - - #endif diff --git a/libsrc/stlgeom/stlgeom.cpp b/libsrc/stlgeom/stlgeom.cpp index b34f38c5..5c01d88f 100644 --- a/libsrc/stlgeom/stlgeom.cpp +++ b/libsrc/stlgeom/stlgeom.cpp @@ -66,7 +66,6 @@ STLGeometry :: ~STLGeometry() { // for (auto p : atlas) delete p; // delete edgedata; - delete ref; } void STLGeometry :: Save (string filename) const @@ -102,18 +101,6 @@ int STLGeometry :: GenerateMesh (shared_ptr & mesh, MeshingParameters & mp return STLMeshingDummy (this, mesh, mparam, stlpar); } - -const Refinement & STLGeometry :: GetRefinement () const -{ - delete ref; - ref = new RefinementSTLGeometry(*this); - // ref -> Set2dOptimizer(new MeshOptimizeSTLSurface(*this)); ??? copied from CSG - return *ref; - -} - - - void STLGeometry :: STLInfo(double* data) { data[0] = GetNT(); diff --git a/nglib/CMakeLists.txt b/nglib/CMakeLists.txt index 7253230a..ba2496f9 100644 --- a/nglib/CMakeLists.txt +++ b/nglib/CMakeLists.txt @@ -3,18 +3,15 @@ add_definitions(-DNGLIB_EXPORTS) if(WIN32) set(nglib_objects $ - $ $ $ $ - $ $ $ ) if(USE_GUI) set(nglib_objects ${nglib_objects} - $ $ $ ) @@ -23,9 +20,9 @@ endif(WIN32) add_library(nglib SHARED nglib.cpp ${nglib_objects}) if(NOT WIN32) - target_link_libraries( nglib PUBLIC mesh stl interface geom2d csg stl visual) + target_link_libraries( nglib PUBLIC mesh interface geom2d csg visual) if(USE_GUI) - target_link_libraries( nglib PUBLIC stlvis geom2dvis csgvis ) + target_link_libraries( nglib PUBLIC geom2dvis csgvis ) endif(USE_GUI) endif(NOT WIN32) diff --git a/nglib/nglib.cpp b/nglib/nglib.cpp index d369eb27..a988b106 100644 --- a/nglib/nglib.cpp +++ b/nglib/nglib.cpp @@ -536,7 +536,7 @@ namespace nglib Ng_Mesh * mesh, int levels) { - Refinement2d ref(*(SplineGeometry2d*)geom); + Refinement ref(*(SplineGeometry2d*)geom); HPRefinement (*(Mesh*)mesh, &ref, levels); } @@ -547,7 +547,7 @@ namespace nglib Ng_Mesh * mesh, int levels, double parameter) { - Refinement2d ref(*(SplineGeometry2d*)geom); + Refinement ref(*(SplineGeometry2d*)geom); HPRefinement (*(Mesh*)mesh, &ref, levels, parameter); } @@ -1090,7 +1090,7 @@ namespace nglib // ------------------ Begin - Second Order Mesh generation functions ---------------- DLL_HEADER void Ng_Generate_SecondOrder(Ng_Mesh * mesh) { - Refinement ref; + Refinement ref(*((Mesh*) mesh)->GetGeometry()); ref.MakeSecondOrder(*(Mesh*) mesh); } @@ -1139,8 +1139,8 @@ namespace nglib // ------------------ Begin - Uniform Mesh Refinement functions --------------------- DLL_HEADER void Ng_Uniform_Refinement (Ng_Mesh * mesh) { - Refinement ref; - ref.Refine ( * (Mesh*) mesh ); + Refinement ref(*((Mesh*)mesh)->GetGeometry()); + ref.Refine ( * (Mesh*) mesh ); } From 562800babcdbbb9ccc9841d559fa92f5420994dd Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Thu, 3 Oct 2019 10:45:09 +0200 Subject: [PATCH 016/120] Clean up STLGeometry --- libsrc/csg/csgeom.hpp | 2 - libsrc/stlgeom/meshstlsurface.cpp | 179 ------------------------------ libsrc/stlgeom/stlgeom.cpp | 120 +++++++++++++++++++- libsrc/stlgeom/stlgeom.hpp | 27 +++-- libsrc/stlgeom/stlgeommesh.cpp | 2 +- 5 files changed, 140 insertions(+), 190 deletions(-) diff --git a/libsrc/csg/csgeom.hpp b/libsrc/csg/csgeom.hpp index 0983749e..21407d8e 100644 --- a/libsrc/csg/csgeom.hpp +++ b/libsrc/csg/csgeom.hpp @@ -366,8 +366,6 @@ namespace netgen virtual int GenerateMesh (shared_ptr & mesh, MeshingParameters & mparam) override; - virtual const Refinement & GetRefinement () const override; - void AddSplineSurface (shared_ptr ss) { spline_surfaces.Append(ss); } }; diff --git a/libsrc/stlgeom/meshstlsurface.cpp b/libsrc/stlgeom/meshstlsurface.cpp index ace69e6d..b02d4098 100644 --- a/libsrc/stlgeom/meshstlsurface.cpp +++ b/libsrc/stlgeom/meshstlsurface.cpp @@ -1068,183 +1068,4 @@ double MeshingSTLSurface :: Area () const return geom.Area(); } -void MeshOptimizeSTLSurface :: SelectSurfaceOfPoint (const Point<3> & p, - const PointGeomInfo & gi) -{ - // (*testout) << "sel char: " << gi.trignum << endl; - - geom.SelectChartOfTriangle (gi.trignum); - // geom.SelectChartOfPoint (p); -} - - -void MeshOptimizeSTLSurface :: ProjectPoint (INDEX surfind, Point<3> & p) const -{ - if (!geom.Project (p)) - { - PrintMessage(7,"project failed"); - - if (!geom.ProjectOnWholeSurface(p)) - { - PrintMessage(7, "project on whole surface failed"); - } - } - - // geometry.GetSurface(surfind)->Project (p); -} - -void MeshOptimizeSTLSurface :: ProjectPoint2 (INDEX surfind, INDEX surfind2, Point<3> & p) const -{ - /* - ProjectToEdge ( geometry.GetSurface(surfind), - geometry.GetSurface(surfind2), p); - */ -} - -int MeshOptimizeSTLSurface :: CalcPointGeomInfo(PointGeomInfo& gi, const Point<3> & p3) const -{ - Point<3> hp = p3; - gi.trignum = geom.Project (hp); - - if (gi.trignum) return 1; - - return 0; - -} - -void MeshOptimizeSTLSurface :: GetNormalVector(INDEX surfind, const Point<3> & p, Vec<3> & n) const -{ - n = geom.GetChartNormalVector(); -} - - - - - - - - - - -RefinementSTLGeometry :: RefinementSTLGeometry (const STLGeometry & ageom) - : Refinement(), geom(ageom) -{ - ; -} - -RefinementSTLGeometry :: ~RefinementSTLGeometry () -{ - ; -} - -void RefinementSTLGeometry :: -PointBetween (const Point<3> & p1, const Point<3> & p2, double secpoint, - int surfi, - const PointGeomInfo & gi1, - const PointGeomInfo & gi2, - Point<3> & newp, PointGeomInfo & newgi) const -{ - newp = p1+secpoint*(p2-p1); - - /* - (*testout) << "surf-between: p1 = " << p1 << ", p2 = " << p2 - << ", gi = " << gi1 << " - " << gi2 << endl; - */ - - if (gi1.trignum > 0) - { - // ((STLGeometry&)geom).SelectChartOfTriangle (gi1.trignum); - - Point<3> np1 = newp; - Point<3> np2 = newp; - ((STLGeometry&)geom).SelectChartOfTriangle (gi1.trignum); - int tn1 = geom.Project (np1); - - ((STLGeometry&)geom).SelectChartOfTriangle (gi2.trignum); - int tn2 = geom.Project (np2); - - newgi.trignum = tn1; //urspruengliche version - newp = np1; //urspruengliche version - - if (!newgi.trignum) - { newgi.trignum = tn2; newp = np2; } - if (!newgi.trignum) newgi.trignum = gi1.trignum; - - /* - if (tn1 != 0 && tn2 != 0 && ((STLGeometry&)geom).GetAngle(tn1,tn2) < M_PI*0.05) { - newgi.trignum = tn1; - newp = np1; - } - else - { - newp = ((STLGeometry&)geom).PointBetween(p1, gi1.trignum, p2, gi2.trignum); - tn1 = ((STLGeometry&)geom).Project(newp); - newgi.trignum = tn1; - - if (!tn1) - { - newp = Center (p1, p2); - newgi.trignum = 0; - - } - } - */ - } - else - { - // (*testout) << "WARNING: PointBetween got geominfo = 0" << endl; - newp = p1+secpoint*(p2-p1); - newgi.trignum = 0; - } - - // (*testout) << "newp = " << newp << ", ngi = " << newgi << endl; -} - -void RefinementSTLGeometry :: -PointBetween (const Point<3> & p1, const Point<3> & p2, double secpoint, - int surfi1, int surfi2, - const EdgePointGeomInfo & gi1, - const EdgePointGeomInfo & gi2, - Point<3> & newp, EdgePointGeomInfo & newgi) const -{ - /* - (*testout) << "edge-between: p1 = " << p1 << ", p2 = " << p2 - << ", gi1,2 = " << gi1 << ", " << gi2 << endl; - */ - /* - newp = Center (p1, p2); - ((STLGeometry&)geom).SelectChartOfTriangle (gi1.trignum); - newgi.trignum = geom.Project (newp); - */ - int hi; - newgi.dist = (1.0-secpoint) * gi1.dist + secpoint*gi2.dist; - newgi.edgenr = gi1.edgenr; - - /* - (*testout) << "p1 = " << p1 << ", p2 = " << p2 << endl; - (*testout) << "refedge: " << gi1.edgenr - << " d1 = " << gi1.dist << ", d2 = " << gi2.dist << endl; - */ - newp = geom.GetLine (gi1.edgenr)->GetPointInDist (geom.GetPoints(), newgi.dist, hi); - - // (*testout) << "newp = " << newp << endl; -} - - -void RefinementSTLGeometry :: ProjectToSurface (Point<3> & p, int surfi) const -{ - cout << "RefinementSTLGeometry :: ProjectToSurface not implemented!" << endl; -}; - - -void RefinementSTLGeometry :: ProjectToSurface (Point<3> & p, int surfi, - PointGeomInfo & gi) const -{ - ((STLGeometry&)geom).SelectChartOfTriangle (gi.trignum); - gi.trignum = geom.Project (p); - // if (!gi.trignum) - // cout << "projectSTL failed" << endl; -}; - - } diff --git a/libsrc/stlgeom/stlgeom.cpp b/libsrc/stlgeom/stlgeom.cpp index 5c01d88f..21dbf076 100644 --- a/libsrc/stlgeom/stlgeom.cpp +++ b/libsrc/stlgeom/stlgeom.cpp @@ -44,7 +44,6 @@ void STLMeshing (STLGeometry & geom, lineendpoints(), spiralpoints(), selectedmultiedge() */ { - ref = NULL; edgedata = make_unique(*this); externaledges.SetSize(0); Clear(); @@ -101,6 +100,125 @@ int STLGeometry :: GenerateMesh (shared_ptr & mesh, MeshingParameters & mp return STLMeshingDummy (this, mesh, mparam, stlpar); } +Vec<3> STLGeometry :: GetNormal(INDEX surfind, const Point<3> & p) const +{ + return GetChartNormalVector(); +} + +bool STLGeometry :: CalcPointGeomInfo(int /*surfind*/, PointGeomInfo& gi, const Point<3> & p3) const +{ + Point<3> hp = p3; + SelectChartOfTriangle(gi.trignum); + + gi.trignum = Project (hp); + + if (gi.trignum) return true; + + return false; +} + +bool STLGeometry :: ProjectPointGI (int surfind, Point<3> & p, PointGeomInfo & gi) const +{ + SelectChartOfTriangle(gi.trignum); + gi.trignum = Project (p); + if (!gi.trignum) + { + PrintMessage(7,"project failed"); + + gi.trignum = ProjectOnWholeSurface(p); + if (!gi.trignum) + { + PrintMessage(7, "project on whole surface failed"); + return false; + } + } + return true; +} + +void STLGeometry :: ProjectPoint (INDEX surfind, Point<3> & p) const +{ + if (!Project (p)) + { + PrintMessage(7,"project failed"); + + if (!ProjectOnWholeSurface(p)) + { + PrintMessage(7, "project on whole surface failed"); + } + } +} + +void STLGeometry :: +PointBetween (const Point<3> & p1, const Point<3> & p2, double secpoint, + int surfi, + const PointGeomInfo & gi1, + const PointGeomInfo & gi2, + Point<3> & newp, PointGeomInfo & newgi) const +{ + newp = p1+secpoint*(p2-p1); + + /* + (*testout) << "surf-between: p1 = " << p1 << ", p2 = " << p2 + << ", gi = " << gi1 << " - " << gi2 << endl; + */ + + if (gi1.trignum > 0) + { + // ((STLGeometry&)geom).SelectChartOfTriangle (gi1.trignum); + + Point<3> np1 = newp; + Point<3> np2 = newp; + SelectChartOfTriangle (gi1.trignum); + int tn1 = Project (np1); + + SelectChartOfTriangle (gi2.trignum); + int tn2 = Project (np2); + + newgi.trignum = tn1; //urspruengliche version + newp = np1; //urspruengliche version + + if (!newgi.trignum) + { newgi.trignum = tn2; newp = np2; } + if (!newgi.trignum) newgi.trignum = gi1.trignum; + } + else + { + // (*testout) << "WARNING: PointBetween got geominfo = 0" << endl; + newp = p1+secpoint*(p2-p1); + newgi.trignum = 0; + } +} + +void STLGeometry :: +PointBetweenEdge (const Point<3> & p1, const Point<3> & p2, double secpoint, + int surfi1, int surfi2, + const EdgePointGeomInfo & gi1, + const EdgePointGeomInfo & gi2, + Point<3> & newp, EdgePointGeomInfo & newgi) const +{ + /* + (*testout) << "edge-between: p1 = " << p1 << ", p2 = " << p2 + << ", gi1,2 = " << gi1 << ", " << gi2 << endl; + */ + /* + newp = Center (p1, p2); + ((STLGeometry&)geom).SelectChartOfTriangle (gi1.trignum); + newgi.trignum = geom.Project (newp); + */ + int hi; + newgi.dist = (1.0-secpoint) * gi1.dist + secpoint*gi2.dist; + newgi.edgenr = gi1.edgenr; + + /* + (*testout) << "p1 = " << p1 << ", p2 = " << p2 << endl; + (*testout) << "refedge: " << gi1.edgenr + << " d1 = " << gi1.dist << ", d2 = " << gi2.dist << endl; + */ + newp = GetLine (gi1.edgenr)->GetPointInDist (GetPoints(), newgi.dist, hi); + + // (*testout) << "newp = " << newp << endl; +} + void STLGeometry :: STLInfo(double* data) { data[0] = GetNT(); diff --git a/libsrc/stlgeom/stlgeom.hpp b/libsrc/stlgeom/stlgeom.hpp index 3d6ddb22..25994ce2 100644 --- a/libsrc/stlgeom/stlgeom.hpp +++ b/libsrc/stlgeom/stlgeom.hpp @@ -148,7 +148,7 @@ namespace netgen //for meshing and project: NgArray meshcharttrigs; //per trig: 1=belong to chart, 0 not - int meshchart; + mutable int meshchart; NgArray ha_points; // help array, np long, filled with 0 @@ -159,12 +159,10 @@ namespace netgen //transformation: - Vec<3> meshtrignv; + mutable Vec<3> meshtrignv; Vec<3> ex, ey, ez; Point<3> p1; - mutable class RefinementSTLGeometry * ref; - public: int edgesfound; int surfacemeshed; @@ -194,6 +192,23 @@ namespace netgen virtual void Save (string filename) const override; + bool CalcPointGeomInfo(int surfind, PointGeomInfo& gi, const Point<3> & p3) const override; + void ProjectPoint(INDEX surfind, Point<3> & p) const override; + bool ProjectPointGI (int surfind, Point<3> & p, PointGeomInfo & gi) const override; + Vec<3> GetNormal(int surfind, const Point<3> & p) const override; + void PointBetween(const Point<3> & p1, const Point<3> & p2, + double secpoint, int surfi, + const PointGeomInfo & gi1, + const PointGeomInfo & gi2, + Point<3> & newp, PointGeomInfo & newgi) const override; + + void PointBetweenEdge(const Point<3> & p1, const Point<3> & p2, double secpoint, + int surfi1, int surfi2, + const EdgePointGeomInfo & ap1, + const EdgePointGeomInfo & ap2, + Point<3> & newp, EdgePointGeomInfo & newgi) const override; + + DLL_HEADER void STLInfo(double* data); //stldoctor: @@ -419,7 +434,7 @@ namespace netgen // void DefineTangentialPlane(const Point<3> & ap1, const Point<3> & ap2, int trig); // - void SelectChartOfTriangle (int trignum); + void SelectChartOfTriangle (int trignum) const; // void SelectChartOfPoint (const Point<3> & p); // @@ -459,8 +474,6 @@ namespace netgen int GenerateMesh (shared_ptr & mesh, MeshingParameters & mparam) override; - virtual const Refinement & GetRefinement () const override; - // Add additional Point to chart to close the surface and write the resulting stl to a file DLL_HEADER void WriteChartToFile( ChartId chartnumber, string filename="chart.slb" ); }; diff --git a/libsrc/stlgeom/stlgeommesh.cpp b/libsrc/stlgeom/stlgeommesh.cpp index ca1552e2..a5d32c9e 100644 --- a/libsrc/stlgeom/stlgeommesh.cpp +++ b/libsrc/stlgeom/stlgeommesh.cpp @@ -392,7 +392,7 @@ void STLGeometry :: DefineTangentialPlane (const Point<3> & ap1, const Point<3> } -void STLGeometry :: SelectChartOfTriangle (int trignum) +void STLGeometry :: SelectChartOfTriangle (int trignum) const { meshchart = GetChartNr(trignum); meshtrignv = GetTriangle(trignum).Normal(); From 8acf84b6ec5fb2d8a6b581641e8292a9c5d5410c Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Thu, 3 Oct 2019 11:00:44 +0200 Subject: [PATCH 017/120] Link stl library on Windows --- nglib/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/nglib/CMakeLists.txt b/nglib/CMakeLists.txt index ba2496f9..3dcbe693 100644 --- a/nglib/CMakeLists.txt +++ b/nglib/CMakeLists.txt @@ -3,6 +3,7 @@ add_definitions(-DNGLIB_EXPORTS) if(WIN32) set(nglib_objects $ + $ $ $ $ From c24e00f6d4e295f24435cf92876f035a6e63f52b Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Thu, 3 Oct 2019 11:05:56 +0200 Subject: [PATCH 018/120] Link stl --- libsrc/interface/CMakeLists.txt | 2 +- nglib/CMakeLists.txt | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/libsrc/interface/CMakeLists.txt b/libsrc/interface/CMakeLists.txt index d8d935a1..bc1bc2f3 100644 --- a/libsrc/interface/CMakeLists.txt +++ b/libsrc/interface/CMakeLists.txt @@ -7,7 +7,7 @@ add_library(interface ${NG_LIB_TYPE} wuchemnitz.cpp writegmsh2.cpp writeOpenFOAM15x.cpp ) -target_link_libraries(interface mesh csg geom2d visual) +target_link_libraries(interface mesh csg geom2d stl visual) if(NOT WIN32) install( TARGETS interface ${NG_INSTALL_DIR}) diff --git a/nglib/CMakeLists.txt b/nglib/CMakeLists.txt index 3dcbe693..8fa7444b 100644 --- a/nglib/CMakeLists.txt +++ b/nglib/CMakeLists.txt @@ -13,6 +13,7 @@ if(WIN32) ) if(USE_GUI) set(nglib_objects ${nglib_objects} + $ $ $ ) @@ -21,9 +22,9 @@ endif(WIN32) add_library(nglib SHARED nglib.cpp ${nglib_objects}) if(NOT WIN32) - target_link_libraries( nglib PUBLIC mesh interface geom2d csg visual) + target_link_libraries( nglib PUBLIC mesh interface geom2d csg stl visual) if(USE_GUI) - target_link_libraries( nglib PUBLIC geom2dvis csgvis ) + target_link_libraries( nglib PUBLIC stlvis geom2dvis csgvis ) endif(USE_GUI) endif(NOT WIN32) From 4d98a6eb8ca28a413fc32c9e3ab989e8ccf873e9 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Thu, 3 Oct 2019 11:26:08 +0200 Subject: [PATCH 019/120] STLGeometry::GetNormal only valid with PointGeomInfo --- libsrc/stlgeom/stlgeom.cpp | 7 ++++++- libsrc/stlgeom/stlgeom.hpp | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/libsrc/stlgeom/stlgeom.cpp b/libsrc/stlgeom/stlgeom.cpp index 21dbf076..0036bbb8 100644 --- a/libsrc/stlgeom/stlgeom.cpp +++ b/libsrc/stlgeom/stlgeom.cpp @@ -102,7 +102,12 @@ int STLGeometry :: GenerateMesh (shared_ptr & mesh, MeshingParameters & mp Vec<3> STLGeometry :: GetNormal(INDEX surfind, const Point<3> & p) const { - return GetChartNormalVector(); + throw Exception("STLGeometry::GetNormal without PointGeomInfo called"); +} + +Vec<3> STLGeometry :: GetNormal(int surfind, const Point<3> & p, const PointGeomInfo & gi) const +{ + return GetChart(GetChartNr(gi.trignum)).GetNormal(); } bool STLGeometry :: CalcPointGeomInfo(int /*surfind*/, PointGeomInfo& gi, const Point<3> & p3) const diff --git a/libsrc/stlgeom/stlgeom.hpp b/libsrc/stlgeom/stlgeom.hpp index 25994ce2..e29e4824 100644 --- a/libsrc/stlgeom/stlgeom.hpp +++ b/libsrc/stlgeom/stlgeom.hpp @@ -196,6 +196,7 @@ namespace netgen void ProjectPoint(INDEX surfind, Point<3> & p) const override; bool ProjectPointGI (int surfind, Point<3> & p, PointGeomInfo & gi) const override; Vec<3> GetNormal(int surfind, const Point<3> & p) const override; + Vec<3> GetNormal(int surfind, const Point<3> & p, const PointGeomInfo & gi) const override; void PointBetween(const Point<3> & p1, const Point<3> & p2, double secpoint, int surfi, const PointGeomInfo & gi1, From fa3ae333ce306bae5459a1c72a7f51269c42aa59 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Thu, 3 Oct 2019 12:09:13 +0200 Subject: [PATCH 020/120] delete trailing whitespaces in new commits --- libsrc/csg/csgeom.cpp | 14 +++++++------- libsrc/csg/csgeom.hpp | 10 +++++----- libsrc/geom2d/geometry2d.cpp | 8 ++++---- libsrc/geom2d/geometry2d.hpp | 9 ++++----- libsrc/meshing/basegeom.cpp | 15 +++++++-------- libsrc/meshing/bisect.cpp | 2 +- libsrc/meshing/curvedelems.cpp | 16 ++++++++-------- 7 files changed, 36 insertions(+), 38 deletions(-) diff --git a/libsrc/csg/csgeom.cpp b/libsrc/csg/csgeom.cpp index c812d1a4..9a12443e 100644 --- a/libsrc/csg/csgeom.cpp +++ b/libsrc/csg/csgeom.cpp @@ -97,10 +97,10 @@ namespace netgen return hn; } - void CSGeometry :: + void CSGeometry :: PointBetween(const Point<3> & p1, const Point<3> & p2, double secpoint, - int surfi, - const PointGeomInfo & gi1, + int surfi, + const PointGeomInfo & gi1, const PointGeomInfo & gi2, Point<3> & newp, PointGeomInfo & newgi) const { @@ -116,8 +116,8 @@ namespace netgen } void CSGeometry :: PointBetweenEdge(const Point<3> & p1, const Point<3> & p2, double secpoint, - int surfi1, int surfi2, - const EdgePointGeomInfo & ap1, + int surfi1, int surfi2, + const EdgePointGeomInfo & ap1, const EdgePointGeomInfo & ap2, Point<3> & newp, EdgePointGeomInfo & newgi) const { @@ -125,8 +125,8 @@ namespace netgen //(*testout) << "hnewp " << hnewp << " s1 " << surfi1 << " s2 " << surfi2 << endl; if (surfi1 != -1 && surfi2 != -1 && surfi1 != surfi2) { - netgen::ProjectToEdge (GetSurface(surfi1), - GetSurface(surfi2), + netgen::ProjectToEdge (GetSurface(surfi1), + GetSurface(surfi2), hnewp); // (*testout) << "Pointbetween, newp = " << hnewp << endl // << ", err = " << sqrt (sqr (hnewp(0))+ sqr(hnewp(1)) + sqr (hnewp(2))) - 1 << endl; diff --git a/libsrc/csg/csgeom.hpp b/libsrc/csg/csgeom.hpp index 21407d8e..398c21bc 100644 --- a/libsrc/csg/csgeom.hpp +++ b/libsrc/csg/csgeom.hpp @@ -192,20 +192,20 @@ namespace netgen void ProjectPointEdge(INDEX surfind, INDEX surfind2, Point<3> & p) const override; Vec<3> GetNormal(int surfind, const Point<3> & p) const override; void PointBetween(const Point<3> & p1, const Point<3> & p2, - double secpoint, int surfi, - const PointGeomInfo & gi1, + double secpoint, int surfi, + const PointGeomInfo & gi1, const PointGeomInfo & gi2, Point<3> & newp, PointGeomInfo & newgi) const override; void PointBetweenEdge(const Point<3> & p1, const Point<3> & p2, double secpoint, - int surfi1, int surfi2, - const EdgePointGeomInfo & ap1, + int surfi1, int surfi2, + const EdgePointGeomInfo & ap1, const EdgePointGeomInfo & ap2, Point<3> & newp, EdgePointGeomInfo & newgi) const override; Vec<3> GetTangent (const Point<3> & p, int surfi1, int surfi2, const EdgePointGeomInfo & ap1) const override; - + int GetChangeVal() { return changeval; } void Change() { changeval++; } diff --git a/libsrc/geom2d/geometry2d.cpp b/libsrc/geom2d/geometry2d.cpp index 6d78f7d9..43282cff 100644 --- a/libsrc/geom2d/geometry2d.cpp +++ b/libsrc/geom2d/geometry2d.cpp @@ -20,9 +20,9 @@ namespace netgen delete [] materials[i]; } - void SplineGeometry2d :: PointBetweenEdge(const Point<3> & p1, const Point<3> & p2, double secpoint, - int surfi1, int surfi2, - const EdgePointGeomInfo & ap1, + void SplineGeometry2d :: PointBetweenEdge(const Point<3> & p1, const Point<3> & p2, double secpoint, + int surfi1, int surfi2, + const EdgePointGeomInfo & ap1, const EdgePointGeomInfo & ap2, Point<3> & newp, EdgePointGeomInfo & newgi) const { @@ -67,7 +67,7 @@ namespace netgen p2d = spline->GetPoint (((1-secpoint)*ap1.dist+secpoint*ap2.dist)); newdist = (1-secpoint)*ap1.dist+secpoint*ap2.dist; } - + // (*testout) << "refine 2d line, ap1.dist, ap2.dist = " << ap1.dist << ", " << ap2.dist << endl; // (*testout) << "p1, p2 = " << p1 << p2 << ", newp = " << p2d << endl; diff --git a/libsrc/geom2d/geometry2d.hpp b/libsrc/geom2d/geometry2d.hpp index 051b1487..13c1887b 100644 --- a/libsrc/geom2d/geometry2d.hpp +++ b/libsrc/geom2d/geometry2d.hpp @@ -156,10 +156,9 @@ namespace netgen ar & materials & maxh & quadmeshing & tensormeshing & layer & bcnames & elto0; } - void PointBetween(const Point<3> & p1, const Point<3> & p2, double secpoint, - int surfi, - const PointGeomInfo & gi1, + int surfi, + const PointGeomInfo & gi1, const PointGeomInfo & gi2, Point<3> & newp, PointGeomInfo & newgi) const override { @@ -168,8 +167,8 @@ namespace netgen } void PointBetweenEdge(const Point<3> & p1, const Point<3> & p2, double secpoint, - int surfi1, int surfi2, - const EdgePointGeomInfo & ap1, + int surfi1, int surfi2, + const EdgePointGeomInfo & ap1, const EdgePointGeomInfo & ap2, Point<3> & newp, EdgePointGeomInfo & newgi) const override; diff --git a/libsrc/meshing/basegeom.cpp b/libsrc/meshing/basegeom.cpp index ac3c8171..7dc12a35 100644 --- a/libsrc/meshing/basegeom.cpp +++ b/libsrc/meshing/basegeom.cpp @@ -31,10 +31,10 @@ namespace netgen case 'S': meshopt.EdgeSwapping(1); break; - case 'm': + case 'm': meshopt.ImproveMesh(mparam); break; - case 'c': + case 'c': meshopt.CombineImprove(); break; } @@ -85,17 +85,17 @@ namespace netgen MeshSurface(*mesh, mparam); mesh->CalcSurfacesOfNode(); } - + if (multithread.terminate || mparam.perfstepsend <= MESHCONST_MESHSURFACE) return 0; - + if (mparam.perfstepsstart <= MESHCONST_OPTSURFACE) OptimizeSurface(*mesh, mparam); if (multithread.terminate || mparam.perfstepsend <= MESHCONST_OPTSURFACE) return 0; - + if(mparam.perfstepsstart <= MESHCONST_MESHVOLUME) { multithread.task = "Volume meshing"; @@ -113,19 +113,18 @@ namespace netgen if (multithread.terminate || mparam.perfstepsend <= MESHCONST_MESHVOLUME) return 0; - + if (mparam.perfstepsstart <= MESHCONST_OPTVOLUME) { multithread.task = "Volume optimization"; - + OptimizeVolume (mparam, *mesh); if (multithread.terminate) return 0; } FinalizeMesh(*mesh); return 0; } - const Refinement & NetgenGeometry :: GetRefinement () const { diff --git a/libsrc/meshing/bisect.cpp b/libsrc/meshing/bisect.cpp index 1a7ebce7..9b5c770f 100644 --- a/libsrc/meshing/bisect.cpp +++ b/libsrc/meshing/bisect.cpp @@ -3554,7 +3554,7 @@ namespace netgen EdgePointGeomInfo newepgi; geo.PointBetweenEdge(mesh.Point (seg[0]), mesh.Point (seg[1]), - 0.5, seg.surfnr1, seg.surfnr2, + 0.5, seg.surfnr1, seg.surfnr2, seg.epgeominfo[0], seg.epgeominfo[1], mesh.Point (newpi), newepgi); nseg1.epgeominfo[1] = newepgi; diff --git a/libsrc/meshing/curvedelems.cpp b/libsrc/meshing/curvedelems.cpp index 49a716b9..0ffc9b7a 100644 --- a/libsrc/meshing/curvedelems.cpp +++ b/libsrc/meshing/curvedelems.cpp @@ -911,14 +911,14 @@ namespace netgen if (swap) { p = p1 + xi[j] * (p2-p1); - geo.PointBetween (p1, p2, xi[j], + geo.PointBetween (p1, p2, xi[j], surfnr[e], gi0[e], gi1[e], pp, ppgi); } else { p = p2 + xi[j] * (p1-p2); - geo.PointBetween (p2, p1, xi[j], + geo.PointBetween (p2, p1, xi[j], surfnr[e], gi1[e], gi0[e], pp, ppgi); } @@ -1053,9 +1053,9 @@ namespace netgen if (rational) { - Vec<3> tau1 = geo.GetTangent(p1, edge_surfnr2[edgenr], edge_surfnr1[edgenr], + Vec<3> tau1 = geo.GetTangent(p1, edge_surfnr2[edgenr], edge_surfnr1[edgenr], edge_gi0[edgenr]); - Vec<3> tau2 = geo.GetTangent(p2, edge_surfnr2[edgenr], edge_surfnr1[edgenr], + Vec<3> tau2 = geo.GetTangent(p2, edge_surfnr2[edgenr], edge_surfnr1[edgenr], edge_gi1[edgenr]); // p1 + alpha1 tau1 = p2 + alpha2 tau2; @@ -1127,16 +1127,16 @@ namespace netgen if (swap) { p = p1 + xi[j] * (p2-p1); - geo.PointBetweenEdge(p1, p2, xi[j], - edge_surfnr2[edgenr], edge_surfnr1[edgenr], + geo.PointBetweenEdge(p1, p2, xi[j], + edge_surfnr2[edgenr], edge_surfnr1[edgenr], edge_gi0[edgenr], edge_gi1[edgenr], pp, ppgi); } else { p = p2 + xi[j] * (p1-p2); - geo.PointBetweenEdge(p2, p1, xi[j], - edge_surfnr2[edgenr], edge_surfnr1[edgenr], + geo.PointBetweenEdge(p2, p1, xi[j], + edge_surfnr2[edgenr], edge_surfnr1[edgenr], edge_gi1[edgenr], edge_gi0[edgenr], pp, ppgi); } From c309c9846f35ffd2547fc8b3472b7e4aeca8f76a Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Thu, 3 Oct 2019 13:52:59 +0200 Subject: [PATCH 021/120] store refinement --- libsrc/meshing/basegeom.cpp | 6 ------ libsrc/meshing/basegeom.hpp | 10 +++++++++- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/libsrc/meshing/basegeom.cpp b/libsrc/meshing/basegeom.cpp index 7dc12a35..4868b5a0 100644 --- a/libsrc/meshing/basegeom.cpp +++ b/libsrc/meshing/basegeom.cpp @@ -126,12 +126,6 @@ namespace netgen return 0; } - const Refinement & NetgenGeometry :: GetRefinement () const - { - return *new Refinement(*this); - } - - void NetgenGeometry :: Save (string filename) const { throw NgException("Cannot save geometry - no geometry available"); diff --git a/libsrc/meshing/basegeom.hpp b/libsrc/meshing/basegeom.hpp index 50eeffb4..221e875b 100644 --- a/libsrc/meshing/basegeom.hpp +++ b/libsrc/meshing/basegeom.hpp @@ -15,12 +15,20 @@ namespace netgen class DLL_HEADER NetgenGeometry { + unique_ptr ref; public: + NetgenGeometry() + { + ref = make_unique(*this); + } virtual ~NetgenGeometry () { ; } virtual int GenerateMesh (shared_ptr & mesh, MeshingParameters & mparam); - virtual const Refinement & GetRefinement () const; + virtual const Refinement & GetRefinement () const + { + return *ref; + } virtual void DoArchive(Archive&) { throw NgException("DoArchive not implemented for " + Demangle(typeid(*this).name())); } From 94c17c2f460eb229f058d2be3c0efcf243befd25 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Fri, 4 Oct 2019 15:35:39 +0200 Subject: [PATCH 022/120] modernize code to use handle --- libsrc/occ/Partition_Inter3d.cxx | 6 +++--- libsrc/occ/Partition_Inter3d.hxx | 8 ++++---- libsrc/occ/Partition_Spliter.hxx | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/libsrc/occ/Partition_Inter3d.cxx b/libsrc/occ/Partition_Inter3d.cxx index 38787fbe..df02e94c 100644 --- a/libsrc/occ/Partition_Inter3d.cxx +++ b/libsrc/occ/Partition_Inter3d.cxx @@ -206,7 +206,7 @@ static void PutInBounds (const TopoDS_Face& F, Handle (Geom_Surface) S = BRep_Tool::Surface(F,L); if (S->IsKind(STANDARD_TYPE(Geom_RectangularTrimmedSurface))) { - S = (*(Handle_Geom_RectangularTrimmedSurface*)&S)->BasisSurface(); + S = Handle(Geom_RectangularTrimmedSurface)::DownCast(S)->BasisSurface(); } if (!S->IsUPeriodic() && !S->IsVPeriodic()) return; @@ -702,7 +702,7 @@ TopTools_MapOfShape& Partition_Inter3d::TouchedFaces() //purpose : //======================================================================= -Handle_BRepAlgo_AsDes Partition_Inter3d::AsDes() const +Handle(BRepAlgo_AsDes) Partition_Inter3d::AsDes() const { return myAsDes; } @@ -829,7 +829,7 @@ TopoDS_Vertex Partition_Inter3d::ReplaceSameDomainV(const TopoDS_Vertex& V, //purpose : //======================================================================= -Handle_BRepAlgo_AsDes Partition_Inter3d::SectionEdgesAD() const +Handle(BRepAlgo_AsDes) Partition_Inter3d::SectionEdgesAD() const { return mySectionEdgesAD; } diff --git a/libsrc/occ/Partition_Inter3d.hxx b/libsrc/occ/Partition_Inter3d.hxx index 93af0773..f2133c24 100644 --- a/libsrc/occ/Partition_Inter3d.hxx +++ b/libsrc/occ/Partition_Inter3d.hxx @@ -96,13 +96,13 @@ public: void FacesPartition(const TopoDS_Face& F1,const TopoDS_Face& F2) ; Standard_Boolean IsDone(const TopoDS_Face& F1,const TopoDS_Face& F2) const; TopTools_MapOfShape& TouchedFaces() ; - Handle_BRepAlgo_AsDes AsDes() const; + Handle(BRepAlgo_AsDes) AsDes() const; TopTools_MapOfShape& NewEdges() ; Standard_Boolean HasSameDomainF(const TopoDS_Shape& F) const; Standard_Boolean IsSameDomainF(const TopoDS_Shape& F1,const TopoDS_Shape& F2) const; const TopTools_ListOfShape& SameDomain(const TopoDS_Face& F) const; TopoDS_Vertex ReplaceSameDomainV(const TopoDS_Vertex& V,const TopoDS_Edge& E) const; - Handle_BRepAlgo_AsDes SectionEdgesAD() const; + Handle(BRepAlgo_AsDes) SectionEdgesAD() const; Standard_Boolean IsSectionEdge(const TopoDS_Edge& E) const; Standard_Boolean HasSectionEdge(const TopoDS_Face& F) const; Standard_Boolean IsSplitOn(const TopoDS_Edge& NewE,const TopoDS_Edge& OldE,const TopoDS_Face& F) const; @@ -134,11 +134,11 @@ private: // Fields PRIVATE // - Handle_BRepAlgo_AsDes myAsDes; + Handle(BRepAlgo_AsDes) myAsDes; TopTools_DataMapOfShapeListOfShape myDone; TopTools_MapOfShape myTouched; TopTools_MapOfShape myNewEdges; - Handle_BRepAlgo_AsDes mySectionEdgesAD; + Handle(BRepAlgo_AsDes) mySectionEdgesAD; TopTools_DataMapOfShapeListOfShape mySameDomainFM; TopTools_DataMapOfShapeShape mySameDomainVM; diff --git a/libsrc/occ/Partition_Spliter.hxx b/libsrc/occ/Partition_Spliter.hxx index e75e9893..1cb6c571 100644 --- a/libsrc/occ/Partition_Spliter.hxx +++ b/libsrc/occ/Partition_Spliter.hxx @@ -143,7 +143,7 @@ private: TopTools_DataMapOfShapeShape myFaceShapeMap; TopTools_DataMapOfShapeShape myInternalFaces; TopTools_DataMapOfShapeShape myIntNotClFaces; - Handle_BRepAlgo_AsDes myAsDes; + Handle(BRepAlgo_AsDes) myAsDes; BRepAlgo_Image myImagesFaces; BRepAlgo_Image myImagesEdges; BRepAlgo_Image myImageShape; From 2fbf6d56bcc26ddcef94768d3fa73ecac05bef6a Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Mon, 7 Oct 2019 16:00:50 +0200 Subject: [PATCH 023/120] create test results --- tests/pytest/results.json | 1350 ++++++++++++++++++------------------- 1 file changed, 675 insertions(+), 675 deletions(-) diff --git a/tests/pytest/results.json b/tests/pytest/results.json index 5b8427e5..c38cd7a0 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -3,9 +3,9 @@ { "ne1d": 74, "ne2d": 54, - "ne3d": 50, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 5, 8, 13, 3, 9, 5, 0, 1, 1]", - "total_badness": 74.774553826 + "ne3d": 49, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 6, 13, 2, 12, 4, 0, 1, 2]", + "total_badness": 71.991209508 }, { "ne1d": 59, @@ -24,155 +24,155 @@ { "ne1d": 74, "ne2d": 54, - "ne3d": 50, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 5, 8, 13, 3, 9, 5, 0, 1, 1]", - "total_badness": 74.77454941 + "ne3d": 49, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 6, 13, 2, 12, 4, 0, 1, 2]", + "total_badness": 71.991205092 }, { "ne1d": 118, - "ne2d": 140, - "ne3d": 165, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 5, 13, 13, 25, 31, 25, 20, 17, 12, 1]", - "total_badness": 228.72078637 + "ne2d": 128, + "ne3d": 146, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 5, 4, 11, 10, 20, 23, 30, 14, 6, 8, 10, 4]", + "total_badness": 218.29947525 }, { "ne1d": 181, - "ne2d": 323, - "ne3d": 507, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 9, 20, 35, 56, 56, 81, 90, 83, 59, 15]", - "total_badness": 661.00817809 + "ne2d": 293, + "ne3d": 453, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 9, 23, 32, 41, 67, 91, 85, 55, 37, 6]", + "total_badness": 605.80122988 } ], "boxcyl.geo": [ { "ne1d": 190, - "ne2d": 468, - "ne3d": 858, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 31, 91, 73, 79, 87, 106, 114, 102, 89, 66, 18]", - "total_badness": 1232.0426735 + "ne2d": 452, + "ne3d": 841, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 3, 23, 119, 77, 90, 116, 110, 79, 85, 77, 45, 13]", + "total_badness": 1250.1700248 }, { "ne1d": 94, "ne2d": 114, - "ne3d": 158, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 7, 10, 16, 5, 8, 15, 13, 17, 13, 9, 25, 7, 11]", - "total_badness": 247.68310336 + "ne3d": 156, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 6, 9, 10, 8, 12, 9, 13, 7, 20, 15, 15, 22, 5, 3]", + "total_badness": 257.95680767 }, { "ne1d": 136, - "ne2d": 222, - "ne3d": 384, - "quality_histogram": "[0, 0, 1, 0, 3, 3, 3, 6, 11, 17, 21, 28, 34, 44, 68, 64, 49, 19, 11, 2]", - "total_badness": 598.99833044 + "ne2d": 218, + "ne3d": 378, + "quality_histogram": "[0, 0, 0, 1, 1, 1, 1, 3, 14, 20, 20, 34, 45, 51, 41, 52, 56, 18, 19, 1]", + "total_badness": 576.7536717 }, { "ne1d": 190, - "ne2d": 468, - "ne3d": 850, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 29, 87, 73, 75, 86, 106, 97, 112, 87, 75, 21]", - "total_badness": 1214.229893 + "ne2d": 452, + "ne3d": 830, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 1, 21, 116, 81, 89, 105, 110, 79, 92, 75, 47, 11]", + "total_badness": 1226.878881 }, { "ne1d": 284, - "ne2d": 938, - "ne3d": 3761, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 20, 59, 118, 250, 456, 628, 751, 755, 564, 153]", - "total_badness": 4693.1208525 + "ne2d": 908, + "ne3d": 3647, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 13, 36, 80, 158, 279, 473, 606, 716, 669, 474, 138]", + "total_badness": 4634.0005088 }, { "ne1d": 456, - "ne2d": 2496, - "ne3d": 18969, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 5, 8, 15, 43, 130, 353, 876, 1713, 3018, 4122, 4317, 3271, 1098]", - "total_badness": 23072.833527 + "ne2d": 2444, + "ne3d": 18525, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 3, 25, 53, 178, 437, 946, 1780, 2925, 3860, 4149, 3103, 1063]", + "total_badness": 22663.686748 } ], "circle_on_cube.geo": [ { "ne1d": 94, - "ne2d": 174, - "ne3d": 646, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 10, 23, 48, 81, 117, 100, 123, 86, 43, 10]", - "total_badness": 859.43881883 + "ne2d": 154, + "ne3d": 604, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 14, 39, 50, 68, 83, 109, 102, 80, 45, 9]", + "total_badness": 815.17294986 }, { "ne1d": 40, "ne2d": 38, - "ne3d": 46, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 2, 4, 8, 8, 6, 7, 5, 1, 2, 1, 0, 0, 0, 0]", - "total_badness": 97.326231112 + "ne3d": 53, + "quality_histogram": "[0, 0, 0, 0, 1, 3, 1, 4, 6, 12, 4, 9, 2, 2, 4, 3, 0, 2, 0, 0]", + "total_badness": 109.70868385 }, { "ne1d": 62, - "ne2d": 94, - "ne3d": 182, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 14, 21, 35, 35, 33, 19, 9, 8, 0]", - "total_badness": 258.4064329 + "ne2d": 86, + "ne3d": 169, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 1, 7, 8, 18, 23, 25, 18, 25, 22, 14, 7, 0]", + "total_badness": 247.43773483 }, { "ne1d": 94, - "ne2d": 174, - "ne3d": 621, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 11, 45, 59, 93, 114, 121, 104, 53, 14]", - "total_badness": 804.68562065 + "ne2d": 154, + "ne3d": 592, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 12, 34, 35, 57, 92, 97, 118, 80, 45, 16]", + "total_badness": 787.43887104 }, { "ne1d": 138, - "ne2d": 382, - "ne3d": 2054, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 15, 57, 129, 210, 330, 426, 450, 321, 109]", - "total_badness": 2526.4427939 + "ne2d": 370, + "ne3d": 1924, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 12, 26, 68, 115, 226, 338, 390, 380, 293, 74]", + "total_badness": 2398.6322242 }, { "ne1d": 224, - "ne2d": 944, - "ne3d": 11988, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 17, 33, 82, 226, 556, 1140, 1929, 2512, 2801, 2061, 628]", - "total_badness": 14608.275962 + "ne2d": 906, + "ne3d": 11615, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 12, 31, 93, 235, 611, 1173, 1864, 2424, 2590, 1985, 592]", + "total_badness": 14210.918388 } ], "cone.geo": [ { "ne1d": 64, - "ne2d": 722, - "ne3d": 1231, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 8, 22, 29, 50, 88, 118, 123, 158, 175, 140, 137, 111, 52, 19]", - "total_badness": 1853.3096959 + "ne2d": 714, + "ne3d": 1198, + "quality_histogram": "[0, 0, 0, 0, 1, 4, 18, 24, 50, 78, 87, 135, 129, 149, 140, 140, 105, 89, 38, 11]", + "total_badness": 1899.21263 }, { "ne1d": 32, "ne2d": 220, - "ne3d": 753, - "quality_histogram": "[0, 1, 28, 40, 63, 54, 61, 53, 61, 59, 67, 47, 38, 52, 39, 23, 27, 21, 16, 3]", - "total_badness": 2038.817175 + "ne3d": 737, + "quality_histogram": "[0, 0, 16, 46, 43, 51, 72, 61, 53, 51, 52, 46, 68, 44, 31, 27, 41, 18, 13, 4]", + "total_badness": 1894.7838255 }, { "ne1d": 48, - "ne2d": 428, - "ne3d": 755, - "quality_histogram": "[1, 33, 42, 29, 32, 26, 29, 27, 64, 81, 73, 80, 67, 48, 55, 18, 23, 16, 11, 0]", - "total_badness": 2283.6586444 + "ne2d": 418, + "ne3d": 694, + "quality_histogram": "[0, 7, 25, 28, 25, 14, 32, 29, 62, 97, 65, 64, 56, 54, 45, 32, 32, 19, 5, 3]", + "total_badness": 1708.6126829 }, { "ne1d": 64, - "ne2d": 722, - "ne3d": 1208, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 15, 22, 47, 81, 110, 131, 144, 172, 150, 145, 112, 62, 14]", - "total_badness": 1783.4859474 + "ne2d": 714, + "ne3d": 1174, + "quality_histogram": "[0, 0, 0, 0, 1, 1, 13, 19, 46, 52, 80, 116, 129, 141, 160, 150, 120, 86, 45, 15]", + "total_badness": 1805.767771 }, { "ne1d": 96, - "ne2d": 1660, - "ne3d": 4423, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 35, 88, 158, 276, 400, 584, 726, 802, 735, 464, 150]", - "total_badness": 5769.9946848 + "ne2d": 1656, + "ne3d": 4332, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 0, 16, 44, 89, 184, 339, 462, 611, 739, 730, 584, 406, 126]", + "total_badness": 5771.741417 }, { "ne1d": 160, - "ne2d": 4748, - "ne3d": 27126, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 13, 31, 83, 303, 735, 1519, 2944, 4316, 5668, 5807, 4355, 1349]", - "total_badness": 33434.663911 + "ne2d": 4722, + "ne3d": 27116, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 16, 43, 146, 382, 845, 1736, 2853, 4482, 5619, 5559, 4124, 1308]", + "total_badness": 33667.780696 } ], "cube.geo": [ @@ -213,54 +213,54 @@ }, { "ne1d": 72, - "ne2d": 118, - "ne3d": 184, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 10, 7, 19, 18, 37, 33, 33, 14, 6]", - "total_badness": 241.24676972 + "ne2d": 110, + "ne3d": 174, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 6, 10, 18, 17, 22, 27, 30, 23, 12, 4]", + "total_badness": 238.68878057 } ], "cubeandring.geo": [ { "ne1d": 262, - "ne2d": 722, - "ne3d": 2188, - "quality_histogram": "[1, 9, 25, 36, 90, 100, 108, 114, 90, 73, 63, 100, 149, 190, 251, 264, 241, 168, 96, 20]", - "total_badness": 4412.1941358 + "ne2d": 682, + "ne3d": 2118, + "quality_histogram": "[1, 8, 18, 31, 57, 110, 98, 76, 102, 82, 96, 110, 169, 194, 245, 237, 206, 156, 99, 23]", + "total_badness": 4154.4021114 }, { "ne1d": 134, - "ne2d": 162, - "ne3d": 252, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 2, 1, 3, 8, 24, 28, 49, 38, 41, 29, 19, 7, 1]", - "total_badness": 365.81827351 + "ne2d": 156, + "ne3d": 263, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 2, 2, 16, 17, 40, 47, 38, 38, 27, 21, 8, 2]", + "total_badness": 384.77338498 }, { "ne1d": 190, - "ne2d": 298, - "ne3d": 613, - "quality_histogram": "[0, 0, 0, 0, 2, 0, 0, 4, 3, 17, 49, 47, 61, 93, 110, 82, 52, 60, 28, 5]", - "total_badness": 897.54658869 + "ne2d": 276, + "ne3d": 576, + "quality_histogram": "[0, 0, 0, 1, 1, 0, 2, 4, 7, 25, 52, 52, 74, 94, 92, 57, 60, 35, 17, 3]", + "total_badness": 877.04655513 }, { "ne1d": 262, - "ne2d": 722, - "ne3d": 2054, - "quality_histogram": "[0, 3, 12, 28, 61, 84, 109, 97, 80, 55, 48, 68, 112, 166, 245, 277, 249, 212, 116, 32]", - "total_badness": 3795.4750393 + "ne2d": 682, + "ne3d": 2014, + "quality_histogram": "[0, 0, 2, 21, 42, 92, 89, 58, 93, 59, 79, 94, 133, 179, 225, 269, 231, 218, 103, 27]", + "total_badness": 3541.9483795 }, { "ne1d": 378, - "ne2d": 1412, - "ne3d": 7752, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 1, 9, 13, 27, 56, 136, 281, 548, 921, 1256, 1534, 1557, 1091, 320]", - "total_badness": 9761.7065165 + "ne2d": 1314, + "ne3d": 7313, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 10, 20, 59, 105, 195, 346, 584, 898, 1274, 1343, 1375, 890, 211]", + "total_badness": 9422.7875587 }, { "ne1d": 624, - "ne2d": 3942, - "ne3d": 38282, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 10, 28, 117, 334, 795, 2026, 3889, 5942, 8057, 8537, 6447, 2097]", - "total_badness": 46825.777983 + "ne2d": 3792, + "ne3d": 37404, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 10, 16, 49, 139, 345, 895, 2097, 4029, 6066, 7901, 8036, 5989, 1830]", + "total_badness": 46060.601796 } ], "cubeandspheres.geo": [ @@ -268,360 +268,360 @@ "ne1d": 144, "ne2d": 148, "ne3d": 98, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 18, 19, 13, 20, 2, 9, 1, 0]", - "total_badness": 145.83375109 - }, - { - "ne1d": 144, - "ne2d": 150, - "ne3d": 100, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 7, 10, 16, 18, 15, 17, 6, 5, 4, 0]", - "total_badness": 146.646861 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 14, 14, 14, 18, 14, 6, 6, 0, 0]", + "total_badness": 149.18816997 }, { "ne1d": 144, "ne2d": 148, "ne3d": 98, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 6, 6, 19, 21, 12, 18, 5, 4, 4, 0]", - "total_badness": 145.14580662 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 11, 11, 17, 13, 16, 18, 3, 6, 0, 0]", + "total_badness": 148.56830588 }, { "ne1d": 144, "ne2d": 148, "ne3d": 98, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 18, 19, 13, 20, 2, 9, 1, 0]", - "total_badness": 145.83375109 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 8, 12, 14, 22, 10, 18, 4, 6, 0, 0]", + "total_badness": 148.71179128 + }, + { + "ne1d": 144, + "ne2d": 148, + "ne3d": 98, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 14, 14, 14, 18, 14, 6, 6, 0, 0]", + "total_badness": 149.18816997 }, { "ne1d": 264, - "ne2d": 386, - "ne3d": 365, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 6, 24, 31, 43, 39, 53, 35, 44, 51, 28, 9, 0]", - "total_badness": 553.03362076 + "ne2d": 352, + "ne3d": 323, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 17, 30, 42, 35, 42, 44, 22, 38, 30, 16, 5, 0]", + "total_badness": 519.87992051 }, { "ne1d": 428, - "ne2d": 930, - "ne3d": 1080, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 19, 59, 37, 100, 136, 100, 123, 162, 160, 66, 65, 28, 22]", - "total_badness": 1684.1500639 + "ne2d": 896, + "ne3d": 1041, + "quality_histogram": "[0, 0, 0, 0, 1, 0, 22, 65, 52, 55, 108, 133, 116, 87, 121, 117, 71, 50, 35, 8]", + "total_badness": 1741.9077189 } ], "cubemcyl.geo": [ { "ne1d": 142, - "ne2d": 2488, - "ne3d": 20940, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 22, 78, 213, 367, 738, 1237, 1875, 2588, 3120, 3314, 3117, 2521, 1385, 365]", - "total_badness": 29036.424267 + "ne2d": 2446, + "ne3d": 20325, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 20, 92, 231, 460, 766, 1183, 1905, 2410, 2914, 3288, 2936, 2375, 1346, 399]", + "total_badness": 28342.436807 }, { "ne1d": 64, - "ne2d": 642, - "ne3d": 3203, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 12, 17, 66, 128, 250, 364, 425, 515, 512, 463, 282, 137, 29]", - "total_badness": 4539.3174908 + "ne2d": 614, + "ne3d": 3139, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 17, 29, 33, 83, 171, 248, 355, 443, 490, 441, 384, 266, 139, 39]", + "total_badness": 4570.602164 }, { "ne1d": 102, - "ne2d": 1404, - "ne3d": 8421, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 7, 30, 87, 181, 362, 596, 792, 1120, 1271, 1262, 1165, 892, 516, 140]", - "total_badness": 11848.69595 + "ne2d": 1368, + "ne3d": 7908, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 9, 26, 74, 155, 343, 583, 878, 1123, 1166, 1167, 1068, 757, 405, 151]", + "total_badness": 11199.979147 }, { "ne1d": 142, - "ne2d": 2488, - "ne3d": 19608, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 6, 40, 75, 246, 608, 1243, 2030, 2896, 3459, 3612, 2986, 1887, 518]", - "total_badness": 25605.226153 + "ne2d": 2446, + "ne3d": 18974, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 8, 46, 130, 283, 637, 1146, 1993, 2808, 3265, 3451, 2949, 1780, 477]", + "total_badness": 24882.179707 }, { "ne1d": 210, - "ne2d": 5508, - "ne3d": 88843, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 23, 113, 364, 946, 2450, 5445, 10022, 14690, 18368, 18746, 13521, 4155]", - "total_badness": 109927.85826 + "ne2d": 5442, + "ne3d": 88762, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 8, 10, 46, 139, 446, 1122, 2673, 5668, 10362, 14952, 18108, 18162, 13099, 3966]", + "total_badness": 110409.45349 }, { "ne1d": 362, - "ne2d": 15120, - "ne3d": 521218, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 25, 119, 374, 1224, 3269, 9296, 24328, 50521, 82283, 109285, 119759, 91721, 29013]", - "total_badness": 633985.71695 + "ne2d": 14990, + "ne3d": 521283, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 31, 105, 442, 1248, 3487, 9538, 24363, 50655, 81983, 109930, 118710, 92196, 28593]", + "total_badness": 634417.38261 } ], "cubemsphere.geo": [ { "ne1d": 90, - "ne2d": 698, - "ne3d": 4877, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 6, 28, 55, 96, 194, 261, 445, 559, 740, 798, 698, 576, 333, 87]", - "total_badness": 6790.976699 + "ne2d": 634, + "ne3d": 4703, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 4, 26, 50, 102, 180, 271, 448, 602, 711, 733, 681, 539, 268, 87]", + "total_badness": 6582.1722514 }, { "ne1d": 44, - "ne2d": 280, - "ne3d": 783, - "quality_histogram": "[0, 0, 0, 0, 1, 2, 6, 19, 38, 61, 70, 94, 100, 91, 104, 76, 58, 38, 24, 1]", - "total_badness": 1271.4564508 + "ne2d": 220, + "ne3d": 592, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 11, 24, 38, 55, 74, 77, 81, 69, 58, 49, 30, 20, 3, 0]", + "total_badness": 1025.6506383 }, { "ne1d": 68, - "ne2d": 402, - "ne3d": 1571, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 12, 20, 68, 134, 170, 243, 246, 237, 214, 145, 59, 17]", - "total_badness": 2230.374452 + "ne2d": 376, + "ne3d": 1507, + "quality_histogram": "[0, 0, 0, 1, 0, 0, 1, 8, 27, 33, 82, 130, 185, 226, 255, 212, 182, 90, 63, 12]", + "total_badness": 2204.9089212 }, { "ne1d": 90, - "ne2d": 698, - "ne3d": 4583, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 9, 25, 77, 128, 251, 516, 657, 826, 857, 685, 432, 116]", - "total_badness": 5995.4068967 + "ne2d": 634, + "ne3d": 4404, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 9, 24, 77, 158, 268, 476, 650, 823, 776, 659, 379, 104]", + "total_badness": 5795.3747481 }, { "ne1d": 146, - "ne2d": 1490, - "ne3d": 17783, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 11, 31, 90, 203, 496, 1110, 1957, 3109, 3695, 3723, 2641, 714]", - "total_badness": 22085.583903 + "ne2d": 1378, + "ne3d": 17460, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 6, 39, 98, 248, 602, 1147, 1971, 2860, 3607, 3614, 2512, 754]", + "total_badness": 21776.503681 }, { "ne1d": 248, - "ne2d": 4356, - "ne3d": 113522, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 9, 35, 117, 341, 885, 2307, 5764, 11384, 18322, 23667, 25754, 19043, 5893]", - "total_badness": 138835.8933 + "ne2d": 4172, + "ne3d": 112451, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 12, 36, 142, 362, 921, 2362, 5754, 11538, 18135, 23443, 25137, 18809, 5798]", + "total_badness": 137714.88539 } ], "cylinder.geo": [ { "ne1d": 52, "ne2d": 288, - "ne3d": 413, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 10, 18, 31, 43, 56, 76, 61, 45, 47, 18, 5]", - "total_badness": 584.63640908 + "ne3d": 373, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 17, 48, 41, 57, 46, 46, 40, 40, 21, 10, 1]", + "total_badness": 570.55070099 }, { "ne1d": 24, "ne2d": 66, - "ne3d": 103, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 7, 15, 14, 21, 32, 10, 1]", - "total_badness": 127.27629078 + "ne3d": 113, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 5, 11, 14, 21, 20, 26, 5, 7]", + "total_badness": 144.11768709 }, { "ne1d": 36, "ne2d": 152, - "ne3d": 437, - "quality_histogram": "[0, 0, 14, 22, 37, 32, 30, 36, 31, 29, 34, 25, 27, 28, 22, 16, 33, 9, 9, 3]", - "total_badness": 1146.634165 + "ne3d": 350, + "quality_histogram": "[7, 11, 19, 25, 33, 33, 23, 20, 37, 19, 9, 14, 28, 12, 12, 4, 32, 4, 6, 2]", + "total_badness": 1478.5840853 }, { "ne1d": 52, "ne2d": 288, - "ne3d": 411, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 15, 29, 37, 61, 76, 59, 48, 52, 21, 3]", - "total_badness": 574.34537671 + "ne3d": 373, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 17, 48, 40, 56, 45, 48, 40, 40, 22, 10, 1]", + "total_badness": 570.48747936 }, { "ne1d": 76, "ne2d": 636, - "ne3d": 1155, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 10, 16, 50, 99, 120, 164, 206, 224, 139, 105, 18]", - "total_badness": 1536.3995031 + "ne3d": 1137, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 7, 27, 48, 71, 98, 132, 182, 156, 180, 136, 79, 19]", + "total_badness": 1578.5996937 }, { "ne1d": 124, - "ne2d": 1672, - "ne3d": 8102, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 13, 53, 167, 414, 787, 1233, 1788, 1856, 1334, 453]", - "total_badness": 9877.1010566 + "ne2d": 1666, + "ne3d": 8088, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 1, 8, 24, 76, 190, 400, 860, 1346, 1715, 1707, 1320, 440]", + "total_badness": 9920.5591087 } ], "cylsphere.geo": [ { "ne1d": 104, "ne2d": 496, - "ne3d": 711, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 10, 16, 35, 64, 89, 107, 102, 100, 57, 59, 50, 17, 2]", - "total_badness": 1105.7991926 + "ne3d": 769, + "quality_histogram": "[0, 0, 0, 0, 1, 1, 8, 10, 20, 31, 64, 104, 111, 105, 113, 63, 69, 47, 18, 4]", + "total_badness": 1205.3563502 }, { "ne1d": 48, - "ne2d": 140, - "ne3d": 225, - "quality_histogram": "[0, 0, 1, 13, 20, 34, 20, 21, 7, 6, 2, 8, 13, 18, 10, 23, 13, 7, 9, 0]", - "total_badness": 584.42426831 + "ne2d": 134, + "ne3d": 238, + "quality_histogram": "[0, 0, 0, 12, 19, 26, 14, 10, 19, 14, 10, 13, 23, 9, 9, 9, 16, 29, 6, 0]", + "total_badness": 566.26384849 }, { "ne1d": 72, - "ne2d": 324, - "ne3d": 665, - "quality_histogram": "[0, 1, 9, 14, 21, 37, 57, 76, 63, 57, 53, 60, 32, 54, 23, 35, 39, 16, 13, 5]", - "total_badness": 1528.6973752 + "ne2d": 320, + "ne3d": 543, + "quality_histogram": "[0, 0, 0, 1, 6, 18, 30, 55, 48, 44, 51, 46, 50, 26, 42, 37, 44, 17, 22, 6]", + "total_badness": 1046.4044454 }, { "ne1d": 104, "ne2d": 496, - "ne3d": 709, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 6, 15, 27, 62, 89, 110, 109, 90, 68, 66, 45, 15, 4]", - "total_badness": 1092.2233629 + "ne3d": 763, + "quality_histogram": "[0, 0, 0, 0, 1, 1, 6, 8, 15, 24, 53, 92, 109, 105, 114, 87, 71, 48, 28, 1]", + "total_badness": 1166.824818 }, { "ne1d": 152, "ne2d": 1084, - "ne3d": 2865, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 3, 28, 44, 88, 157, 276, 340, 471, 505, 493, 358, 99]", - "total_badness": 3710.287399 + "ne3d": 2754, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 18, 57, 104, 179, 269, 338, 409, 497, 462, 330, 86]", + "total_badness": 3593.8604452 }, { "ne1d": 248, - "ne2d": 2820, - "ne3d": 17765, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 15, 48, 129, 362, 859, 1699, 2843, 3786, 4041, 3023, 954]", - "total_badness": 21668.180843 + "ne2d": 2796, + "ne3d": 17632, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 14, 65, 169, 393, 961, 1708, 2855, 3774, 3844, 2922, 922]", + "total_badness": 21617.406219 } ], "ellipsoid.geo": [ { "ne1d": 0, - "ne2d": 704, - "ne3d": 1262, - "quality_histogram": "[0, 0, 0, 0, 1, 0, 8, 26, 39, 86, 118, 127, 178, 146, 148, 147, 107, 76, 43, 12]", - "total_badness": 1984.8094939 + "ne2d": 680, + "ne3d": 1253, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 11, 20, 53, 100, 111, 111, 155, 149, 154, 148, 135, 63, 34, 7]", + "total_badness": 1985.7030805 }, { "ne1d": 0, - "ne2d": 192, - "ne3d": 942, - "quality_histogram": "[22, 148, 137, 126, 91, 56, 81, 69, 47, 36, 29, 32, 23, 13, 12, 9, 5, 5, 1, 0]", - "total_badness": 5747.5204438 + "ne2d": 178, + "ne3d": 868, + "quality_histogram": "[4, 98, 135, 97, 109, 65, 50, 59, 43, 52, 38, 31, 31, 17, 17, 9, 6, 4, 3, 0]", + "total_badness": 4464.8470583 }, { "ne1d": 0, - "ne2d": 394, - "ne3d": 598, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 15, 17, 44, 69, 81, 100, 91, 53, 54, 39, 20, 9]", - "total_badness": 903.65236615 + "ne2d": 382, + "ne3d": 580, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 4, 14, 25, 55, 78, 93, 94, 67, 62, 37, 33, 12, 2]", + "total_badness": 904.85287903 }, { "ne1d": 0, - "ne2d": 704, - "ne3d": 1256, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 18, 35, 52, 103, 128, 169, 173, 155, 154, 121, 81, 49, 18]", - "total_badness": 1908.051206 + "ne2d": 680, + "ne3d": 1247, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 12, 46, 72, 103, 109, 149, 167, 171, 151, 126, 86, 36, 15]", + "total_badness": 1912.2663825 }, { "ne1d": 0, - "ne2d": 1618, - "ne3d": 5592, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 22, 74, 178, 307, 491, 711, 944, 1067, 921, 675, 199]", - "total_badness": 7199.7867843 + "ne2d": 1598, + "ne3d": 5187, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 12, 30, 120, 186, 330, 487, 671, 818, 900, 916, 552, 163]", + "total_badness": 6777.2750162 }, { "ne1d": 0, - "ne2d": 4236, - "ne3d": 41345, - "quality_histogram": "[0, 0, 0, 0, 3, 20, 108, 266, 403, 644, 1110, 1904, 2921, 4621, 6100, 6869, 6568, 5527, 3324, 957]", - "total_badness": 56476.648492 + "ne2d": 4194, + "ne3d": 37326, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 4, 4, 15, 38, 101, 309, 805, 1892, 3619, 5837, 7850, 8414, 6510, 1927]", + "total_badness": 45621.246486 } ], "ellipticcone.geo": [ { "ne1d": 174, - "ne2d": 1556, - "ne3d": 5213, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 7, 26, 47, 141, 216, 357, 555, 760, 902, 879, 712, 459, 151]", - "total_badness": 6957.997336 + "ne2d": 1514, + "ne3d": 5133, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 14, 23, 82, 130, 251, 424, 603, 797, 868, 844, 647, 341, 107]", + "total_badness": 6981.6197599 }, { "ne1d": 86, - "ne2d": 380, - "ne3d": 587, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 8, 8, 14, 33, 55, 67, 67, 76, 85, 69, 56, 32, 14]", - "total_badness": 853.7762584 + "ne2d": 368, + "ne3d": 589, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 14, 16, 25, 60, 55, 55, 68, 70, 73, 70, 48, 30, 5]", + "total_badness": 894.91658405 }, { "ne1d": 130, - "ne2d": 864, - "ne3d": 1780, - "quality_histogram": "[0, 0, 0, 1, 3, 4, 12, 22, 34, 43, 79, 96, 136, 191, 227, 251, 258, 253, 129, 41]", - "total_badness": 2537.0484182 + "ne2d": 834, + "ne3d": 1605, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 6, 24, 40, 69, 119, 192, 205, 235, 242, 200, 161, 86, 23]", + "total_badness": 2293.3504808 }, { "ne1d": 174, - "ne2d": 1556, - "ne3d": 4971, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 17, 53, 107, 248, 431, 665, 897, 978, 791, 593, 187]", - "total_badness": 6359.4493283 + "ne2d": 1514, + "ne3d": 4920, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 1, 24, 68, 142, 286, 532, 774, 876, 900, 747, 441, 128]", + "total_badness": 6425.5732257 }, { "ne1d": 258, - "ne2d": 3454, - "ne3d": 13441, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 8, 29, 62, 198, 341, 643, 1044, 1682, 2259, 2506, 2486, 1671, 511]", - "total_badness": 17201.441954 + "ne2d": 3350, + "ne3d": 13033, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 7, 35, 106, 181, 363, 681, 1120, 1738, 2146, 2478, 2187, 1501, 486]", + "total_badness": 16847.718951 }, { "ne1d": 432, - "ne2d": 9518, - "ne3d": 69596, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 40, 121, 306, 826, 1862, 3802, 7575, 11204, 14503, 14913, 11126, 3312]", - "total_badness": 85930.227173 + "ne2d": 9278, + "ne3d": 69660, + "quality_histogram": "[0, 0, 0, 0, 3, 5, 9, 30, 75, 155, 423, 954, 2071, 4217, 7619, 11353, 14206, 14652, 10674, 3214]", + "total_badness": 86601.731893 } ], "ellipticcyl.geo": [ { "ne1d": 156, - "ne2d": 994, - "ne3d": 2275, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 10, 26, 44, 84, 125, 208, 263, 341, 376, 326, 261, 175, 35]", - "total_badness": 3156.3970605 + "ne2d": 962, + "ne3d": 2143, + "quality_histogram": "[0, 0, 0, 0, 1, 3, 4, 22, 46, 68, 111, 155, 207, 300, 298, 285, 264, 221, 121, 37]", + "total_badness": 3112.7584751 }, { "ne1d": 76, - "ne2d": 238, + "ne2d": 234, "ne3d": 325, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 18, 28, 26, 37, 71, 54, 46, 27, 10, 2]", - "total_badness": 459.39040523 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 16, 23, 20, 48, 68, 50, 40, 32, 17, 5]", + "total_badness": 453.9976362 }, { "ne1d": 116, - "ne2d": 596, - "ne3d": 1114, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 10, 17, 41, 80, 144, 172, 205, 165, 155, 97, 25]", - "total_badness": 1483.3007518 + "ne2d": 588, + "ne3d": 1087, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 5, 12, 24, 58, 102, 152, 175, 168, 178, 116, 75, 20]", + "total_badness": 1485.3521875 }, { "ne1d": 156, - "ne2d": 994, - "ne3d": 2199, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 8, 35, 43, 95, 163, 238, 314, 377, 378, 307, 193, 45]", - "total_badness": 2944.2434449 + "ne2d": 962, + "ne3d": 2073, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 3, 12, 21, 57, 74, 130, 165, 270, 319, 299, 291, 238, 155, 36]", + "total_badness": 2905.3559173 }, { "ne1d": 232, - "ne2d": 2198, - "ne3d": 8225, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 5, 9, 46, 106, 269, 605, 988, 1459, 1629, 1655, 1138, 313]", - "total_badness": 10297.191925 + "ne2d": 2134, + "ne3d": 8123, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 14, 25, 66, 136, 318, 644, 1021, 1431, 1662, 1489, 1001, 314]", + "total_badness": 10284.60484 }, { "ne1d": 388, - "ne2d": 6124, - "ne3d": 55078, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 10, 28, 97, 356, 939, 2483, 5114, 8528, 11618, 12908, 9908, 3088]", - "total_badness": 66822.93034 + "ne2d": 5968, + "ne3d": 55441, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 6, 13, 49, 145, 382, 944, 2547, 5198, 8766, 11807, 12906, 9584, 3094]", + "total_badness": 67425.887286 } ], "fichera.geo": [ { "ne1d": 50, "ne2d": 38, - "ne3d": 40, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 4, 3, 5, 7, 8, 2, 1, 0, 2]", - "total_badness": 62.361996883 + "ne3d": 35, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 0, 14, 6, 4, 3, 0, 0, 0]", + "total_badness": 52.723984269 }, { "ne1d": 42, @@ -640,90 +640,90 @@ { "ne1d": 50, "ne2d": 38, - "ne3d": 40, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 4, 3, 5, 7, 8, 2, 1, 0, 2]", - "total_badness": 62.361996883 + "ne3d": 35, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 0, 14, 6, 4, 3, 0, 0, 0]", + "total_badness": 52.723984269 }, { "ne1d": 96, - "ne2d": 118, - "ne3d": 208, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 6, 10, 16, 24, 36, 33, 41, 30, 6]", - "total_badness": 266.1986561 + "ne2d": 106, + "ne3d": 179, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 10, 20, 26, 30, 24, 23, 20, 12, 6]", + "total_badness": 245.27475687 }, { "ne1d": 144, - "ne2d": 274, - "ne3d": 514, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 14, 32, 55, 87, 97, 91, 71, 52, 13]", - "total_badness": 666.67507269 + "ne2d": 254, + "ne3d": 517, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 5, 18, 36, 63, 77, 102, 79, 72, 50, 9]", + "total_badness": 684.87955167 } ], "frame.step": [ { "ne1d": 12694, - "ne2d": 39776, - "ne3d": 220900, - "quality_histogram": "[2, 7, 7, 9, 9, 30, 241, 749, 1682, 3420, 6081, 10465, 17172, 25221, 31864, 35916, 35505, 29651, 18174, 4695]", - "total_badness": 300459.85413 + "ne2d": 40332, + "ne3d": 219871, + "quality_histogram": "[6, 17, 44, 80, 144, 282, 622, 1386, 2744, 4711, 7763, 12601, 18734, 26125, 30767, 33959, 32515, 26161, 16434, 4776]", + "total_badness": 308302.22502 }, { "ne1d": 6026, - "ne2d": 11146, - "ne3d": 30128, - "quality_histogram": "[4, 4, 5, 11, 20, 39, 120, 286, 624, 1025, 1679, 2533, 3356, 4137, 4506, 4206, 3471, 2402, 1366, 334]", - "total_badness": 44746.768359 + "ne2d": 11628, + "ne3d": 31342, + "quality_histogram": "[5, 23, 31, 67, 108, 202, 376, 605, 929, 1349, 2047, 2892, 3463, 3840, 4298, 3992, 3263, 2153, 1276, 423]", + "total_badness": 49470.722238 }, { "ne1d": 9704, - "ne2d": 24660, - "ne3d": 85967, - "quality_histogram": "[1, 6, 3, 11, 7, 34, 76, 191, 485, 1084, 2525, 4810, 7803, 11031, 13503, 14079, 12909, 10074, 5899, 1436]", - "total_badness": 118291.03172 + "ne2d": 25206, + "ne3d": 96716, + "quality_histogram": "[18, 50, 120, 346, 612, 1385, 2473, 3464, 4660, 6070, 7868, 8980, 10994, 11496, 10655, 9863, 7951, 5390, 3181, 1140]", + "total_badness": 165439.49583 } ], "hinge.stl": [ { "ne1d": 456, "ne2d": 1230, - "ne3d": 1990, - "quality_histogram": "[0, 0, 0, 0, 1, 2, 3, 9, 21, 47, 69, 116, 164, 237, 326, 280, 298, 225, 151, 41]", - "total_badness": 2772.6154636 + "ne3d": 1982, + "quality_histogram": "[0, 0, 0, 1, 2, 1, 4, 8, 22, 45, 68, 119, 169, 255, 300, 273, 286, 241, 147, 41]", + "total_badness": 2769.400459 }, { "ne1d": 298, - "ne2d": 608, - "ne3d": 770, - "quality_histogram": "[0, 0, 0, 1, 10, 9, 19, 15, 35, 46, 62, 87, 79, 89, 83, 87, 64, 45, 30, 9]", - "total_badness": 1284.6220542 + "ne2d": 614, + "ne3d": 778, + "quality_histogram": "[0, 0, 0, 0, 12, 11, 21, 18, 43, 53, 58, 71, 88, 85, 92, 93, 60, 44, 22, 7]", + "total_badness": 1321.0009733 }, { "ne1d": 370, - "ne2d": 854, - "ne3d": 1130, - "quality_histogram": "[0, 0, 0, 0, 2, 4, 17, 25, 26, 34, 64, 107, 137, 161, 156, 181, 93, 73, 42, 8]", - "total_badness": 1739.2621504 + "ne2d": 856, + "ne3d": 1137, + "quality_histogram": "[0, 0, 0, 0, 2, 7, 12, 20, 30, 43, 62, 114, 125, 155, 157, 182, 105, 64, 44, 15]", + "total_badness": 1746.193159 }, { "ne1d": 516, "ne2d": 1584, - "ne3d": 2549, - "quality_histogram": "[0, 0, 0, 0, 2, 1, 7, 19, 30, 53, 121, 174, 224, 296, 384, 362, 331, 304, 201, 40]", - "total_badness": 3600.6650263 + "ne3d": 2541, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 7, 7, 22, 58, 110, 180, 233, 292, 361, 381, 338, 309, 196, 47]", + "total_badness": 3554.0634047 }, { "ne1d": 722, "ne2d": 2888, - "ne3d": 6818, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 12, 29, 67, 167, 379, 655, 877, 1099, 1146, 1177, 948, 258]", - "total_badness": 8742.2896959 + "ne3d": 6849, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 2, 18, 24, 66, 167, 352, 617, 884, 1136, 1241, 1156, 907, 278]", + "total_badness": 8770.1231664 }, { "ne1d": 1862, "ne2d": 19516, - "ne3d": 135482, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 6, 30, 145, 444, 1158, 3034, 7025, 13447, 21335, 28448, 30344, 22953, 7112]", - "total_badness": 165806.81509 + "ne3d": 138101, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 7, 31, 129, 400, 1163, 2873, 7052, 13502, 21822, 29035, 31031, 23540, 7514]", + "total_badness": 168731.72877 } ], "lshape3d.geo": [ @@ -757,93 +757,93 @@ }, { "ne1d": 80, - "ne2d": 76, - "ne3d": 88, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 10, 9, 21, 23, 7, 6, 1, 4]", - "total_badness": 121.1271849 + "ne2d": 66, + "ne3d": 73, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 9, 9, 9, 17, 14, 2, 3, 6]", + "total_badness": 97.371969345 }, { "ne1d": 122, - "ne2d": 204, - "ne3d": 331, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 7, 21, 26, 41, 39, 61, 57, 46, 24, 7]", - "total_badness": 443.95235947 + "ne2d": 190, + "ne3d": 304, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 6, 8, 20, 38, 34, 59, 55, 27, 37, 9]", + "total_badness": 408.34610106 } ], "manyholes.geo": [ { "ne1d": 5886, - "ne2d": 48038, - "ne3d": 179405, - "quality_histogram": "[0, 0, 2, 1, 8, 27, 65, 207, 559, 1418, 3370, 7627, 12710, 20134, 27407, 30177, 29994, 24813, 16843, 4043]", - "total_badness": 238774.17579 + "ne2d": 46994, + "ne3d": 178258, + "quality_histogram": "[0, 0, 0, 0, 8, 50, 338, 268, 1001, 1782, 4230, 9114, 12778, 22138, 26582, 30068, 28574, 22323, 12911, 6093]", + "total_badness": 241077.60229 }, { "ne1d": 2746, - "ne2d": 13838, - "ne3d": 29184, - "quality_histogram": "[0, 0, 0, 1, 5, 26, 45, 181, 387, 817, 1524, 2280, 3331, 4394, 4120, 3700, 3202, 2567, 1880, 724]", - "total_badness": 42098.721268 + "ne2d": 13378, + "ne3d": 29015, + "quality_histogram": "[0, 0, 0, 0, 11, 36, 101, 261, 569, 928, 1565, 2421, 3036, 3930, 4729, 4059, 2750, 2077, 1180, 1362]", + "total_badness": 42502.70594 }, { "ne1d": 4106, - "ne2d": 27992, - "ne3d": 70789, - "quality_histogram": "[0, 0, 0, 2, 30, 78, 189, 443, 837, 1706, 2919, 4402, 7061, 9455, 10197, 10269, 9498, 7395, 4474, 1834]", - "total_badness": 100213.31676 + "ne2d": 27348, + "ne3d": 69176, + "quality_histogram": "[0, 0, 0, 3, 31, 109, 199, 524, 999, 1835, 3521, 5175, 7195, 10701, 9247, 9303, 8279, 6175, 3449, 2431]", + "total_badness": 99864.410415 } ], "manyholes2.geo": [ { "ne1d": 10202, - "ne2d": 55340, - "ne3d": 128088, - "quality_histogram": "[0, 0, 0, 0, 7, 30, 95, 288, 823, 2105, 4573, 7847, 11840, 18008, 18739, 18350, 16782, 14747, 10264, 3590]", - "total_badness": 176960.02706 + "ne2d": 53486, + "ne3d": 139190, + "quality_histogram": "[0, 1, 168, 441, 975, 1689, 2691, 3289, 4667, 5762, 8158, 11621, 13472, 16651, 21820, 18509, 12164, 7790, 3882, 5440]", + "total_badness": 223824.49195 } ], "matrix.geo": [ { "ne1d": 174, - "ne2d": 1194, - "ne3d": 5295, - "quality_histogram": "[0, 0, 32, 147, 135, 100, 130, 147, 177, 237, 361, 409, 554, 617, 583, 555, 457, 385, 212, 57]", - "total_badness": 9761.5954211 + "ne2d": 1084, + "ne3d": 4699, + "quality_histogram": "[0, 0, 13, 73, 49, 72, 104, 195, 232, 324, 348, 450, 518, 514, 513, 418, 364, 308, 157, 47]", + "total_badness": 8342.3218051 }, { "ne1d": 106, - "ne2d": 600, - "ne3d": 2001, - "quality_histogram": "[0, 3, 20, 65, 122, 160, 137, 169, 184, 189, 172, 190, 184, 137, 89, 53, 45, 54, 20, 8]", - "total_badness": 4865.5803344 + "ne2d": 566, + "ne3d": 1890, + "quality_histogram": "[0, 6, 46, 100, 165, 157, 187, 195, 175, 172, 157, 126, 113, 91, 67, 50, 34, 20, 19, 10]", + "total_badness": 5257.1128921 }, { "ne1d": 132, - "ne2d": 828, - "ne3d": 2783, - "quality_histogram": "[0, 0, 13, 51, 108, 146, 173, 161, 225, 265, 333, 287, 211, 205, 173, 161, 117, 93, 45, 16]", - "total_badness": 5980.1022567 + "ne2d": 760, + "ne3d": 2545, + "quality_histogram": "[0, 0, 12, 35, 55, 94, 105, 187, 268, 293, 293, 266, 233, 187, 152, 115, 121, 65, 49, 15]", + "total_badness": 5261.0373333 }, { "ne1d": 174, - "ne2d": 1194, - "ne3d": 5105, - "quality_histogram": "[0, 0, 20, 134, 116, 78, 117, 149, 152, 188, 285, 371, 498, 547, 578, 611, 503, 441, 254, 63]", - "total_badness": 9068.0076408 + "ne2d": 1084, + "ne3d": 4585, + "quality_histogram": "[0, 0, 11, 44, 38, 56, 90, 162, 223, 280, 328, 417, 462, 526, 487, 490, 431, 301, 185, 54]", + "total_badness": 7814.6531832 }, { "ne1d": 248, - "ne2d": 2324, - "ne3d": 16255, - "quality_histogram": "[0, 0, 0, 0, 0, 5, 24, 75, 128, 202, 346, 678, 1062, 1517, 2149, 2515, 2754, 2540, 1722, 538]", - "total_badness": 21663.043545 + "ne2d": 2214, + "ne3d": 15658, + "quality_histogram": "[0, 0, 0, 2, 2, 20, 40, 101, 153, 301, 415, 740, 1135, 1544, 1997, 2392, 2499, 2362, 1552, 403]", + "total_badness": 21309.771439 }, { "ne1d": 418, - "ne2d": 5966, - "ne3d": 100388, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 6, 24, 71, 195, 503, 1186, 2824, 5989, 10497, 16251, 20497, 21258, 16049, 5037]", - "total_badness": 124129.95267 + "ne2d": 5826, + "ne3d": 100044, + "quality_histogram": "[0, 0, 0, 1, 3, 12, 22, 40, 112, 259, 681, 1477, 3255, 6325, 10800, 16144, 20094, 20986, 15199, 4634]", + "total_badness": 124683.88481 } ], "ortho.geo": [ @@ -884,473 +884,473 @@ }, { "ne1d": 72, - "ne2d": 116, - "ne3d": 180, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 14, 9, 27, 39, 31, 30, 17, 5]", - "total_badness": 233.34798934 + "ne2d": 110, + "ne3d": 172, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 10, 15, 17, 30, 27, 25, 30, 7, 5]", + "total_badness": 232.48733688 } ], "part1.stl": [ { "ne1d": 170, - "ne2d": 454, - "ne3d": 1228, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 5, 20, 38, 51, 111, 128, 195, 211, 190, 152, 90, 31]", - "total_badness": 1672.6379358 + "ne2d": 452, + "ne3d": 1221, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 9, 15, 14, 42, 45, 91, 129, 124, 150, 175, 182, 137, 87, 19]", + "total_badness": 1752.7121974 }, { "ne1d": 112, - "ne2d": 212, - "ne3d": 346, - "quality_histogram": "[0, 0, 0, 3, 8, 8, 8, 9, 19, 25, 40, 40, 35, 39, 38, 37, 17, 14, 5, 1]", - "total_badness": 629.86936176 + "ne2d": 210, + "ne3d": 331, + "quality_histogram": "[0, 0, 1, 0, 6, 6, 9, 13, 20, 24, 35, 36, 36, 42, 35, 26, 25, 9, 7, 1]", + "total_badness": 593.98191451 }, { "ne1d": 134, - "ne2d": 288, - "ne3d": 523, - "quality_histogram": "[0, 0, 0, 0, 0, 5, 5, 4, 14, 15, 32, 48, 68, 67, 66, 76, 44, 43, 29, 7]", - "total_badness": 790.86141744 + "ne2d": 286, + "ne3d": 519, + "quality_histogram": "[0, 0, 0, 0, 1, 3, 4, 5, 11, 9, 28, 39, 66, 73, 64, 71, 65, 46, 28, 6]", + "total_badness": 768.26259551 }, { "ne1d": 194, - "ne2d": 594, - "ne3d": 1742, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 5, 9, 40, 88, 126, 192, 280, 281, 279, 241, 165, 34]", - "total_badness": 2325.4945287 + "ne2d": 592, + "ne3d": 1740, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 8, 29, 68, 110, 201, 256, 293, 262, 269, 195, 46]", + "total_badness": 2286.299101 }, { "ne1d": 266, "ne2d": 990, - "ne3d": 4103, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 13, 28, 69, 162, 317, 534, 761, 831, 732, 513, 140]", - "total_badness": 5196.8765579 + "ne3d": 4048, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 7, 14, 39, 67, 175, 322, 533, 730, 789, 739, 499, 134]", + "total_badness": 5148.0493548 }, { "ne1d": 674, "ne2d": 6870, - "ne3d": 82768, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 14, 59, 188, 513, 1613, 4088, 7976, 12954, 17553, 18871, 14413, 4526]", - "total_badness": 100797.22838 + "ne3d": 84183, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 21, 60, 225, 579, 1748, 4156, 8065, 12832, 17827, 19301, 14804, 4562]", + "total_badness": 102573.89785 } ], "period.geo": [ { "ne1d": 344, - "ne2d": 1130, - "ne3d": 3294, - "quality_histogram": "[0, 0, 0, 0, 0, 11, 22, 35, 81, 112, 210, 253, 402, 409, 494, 439, 371, 274, 135, 46]", - "total_badness": 4918.0434035 + "ne2d": 1084, + "ne3d": 3278, + "quality_histogram": "[0, 5, 14, 14, 23, 25, 47, 84, 110, 154, 256, 310, 348, 386, 396, 354, 307, 234, 155, 56]", + "total_badness": 5432.5002888 }, { "ne1d": 160, - "ne2d": 286, - "ne3d": 659, - "quality_histogram": "[0, 4, 8, 11, 15, 22, 23, 30, 40, 58, 66, 57, 66, 59, 57, 36, 43, 42, 16, 6]", - "total_badness": 1346.7559432 + "ne2d": 266, + "ne3d": 587, + "quality_histogram": "[0, 0, 1, 6, 17, 26, 27, 41, 51, 52, 39, 54, 43, 44, 41, 44, 24, 47, 20, 10]", + "total_badness": 1164.3298304 }, { "ne1d": 232, - "ne2d": 590, - "ne3d": 1593, - "quality_histogram": "[0, 0, 21, 30, 45, 47, 61, 92, 104, 145, 141, 138, 146, 148, 134, 114, 107, 63, 46, 11]", - "total_badness": 3241.6735555 + "ne2d": 542, + "ne3d": 1307, + "quality_histogram": "[0, 0, 2, 8, 20, 50, 54, 71, 94, 89, 105, 157, 139, 116, 109, 84, 104, 51, 33, 21]", + "total_badness": 2452.0445067 }, { "ne1d": 344, - "ne2d": 1130, - "ne3d": 3209, - "quality_histogram": "[0, 0, 0, 0, 0, 4, 19, 29, 56, 85, 162, 229, 352, 413, 479, 468, 390, 320, 156, 47]", - "total_badness": 4660.4012194 + "ne2d": 1084, + "ne3d": 3191, + "quality_histogram": "[0, 1, 5, 6, 22, 12, 27, 55, 85, 133, 225, 274, 317, 391, 403, 388, 344, 252, 180, 71]", + "total_badness": 4959.2612367 }, { "ne1d": 480, - "ne2d": 2260, - "ne3d": 11824, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 15, 44, 152, 298, 546, 944, 1504, 2045, 2229, 2105, 1531, 408]", - "total_badness": 15109.078092 + "ne2d": 2170, + "ne3d": 11358, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 8, 32, 78, 156, 319, 661, 1069, 1444, 1903, 2141, 1909, 1239, 399]", + "total_badness": 14721.191349 }, { "ne1d": 820, - "ne2d": 6218, - "ne3d": 68383, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 12, 37, 108, 252, 694, 1708, 3917, 7031, 11058, 14173, 14782, 11158, 3451]", - "total_badness": 84181.20294 + "ne2d": 6080, + "ne3d": 67352, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 28, 98, 306, 824, 1965, 4113, 7215, 11082, 13763, 14092, 10512, 3350]", + "total_badness": 83350.921624 } ], "plane.stl": [ { "ne1d": 890, - "ne2d": 2646, - "ne3d": 8528, - "quality_histogram": "[4, 14, 27, 37, 43, 46, 41, 91, 102, 180, 331, 464, 679, 978, 1233, 1340, 1240, 987, 555, 136]", - "total_badness": 12856.87891 + "ne2d": 2642, + "ne3d": 8595, + "quality_histogram": "[4, 13, 28, 37, 47, 45, 46, 76, 119, 205, 339, 501, 686, 989, 1187, 1277, 1290, 971, 584, 151]", + "total_badness": 12988.842256 }, { "ne1d": 572, - "ne2d": 1228, - "ne3d": 1901, - "quality_histogram": "[2, 18, 45, 48, 51, 66, 60, 92, 128, 133, 165, 191, 187, 197, 168, 128, 114, 65, 39, 4]", - "total_badness": 4320.0075948 + "ne2d": 1226, + "ne3d": 1904, + "quality_histogram": "[2, 15, 45, 48, 51, 64, 68, 85, 111, 137, 157, 178, 181, 193, 185, 151, 109, 79, 35, 10]", + "total_badness": 4266.5881394 }, { "ne1d": 724, - "ne2d": 1754, - "ne3d": 3285, - "quality_histogram": "[4, 20, 30, 41, 36, 43, 44, 68, 96, 154, 170, 280, 339, 436, 436, 406, 340, 206, 107, 29]", - "total_badness": 5959.5331564 + "ne2d": 1748, + "ne3d": 3263, + "quality_histogram": "[5, 21, 30, 43, 40, 47, 39, 66, 96, 148, 182, 302, 323, 393, 459, 390, 329, 197, 124, 29]", + "total_badness": 5975.2670543 }, { "ne1d": 956, - "ne2d": 2886, - "ne3d": 8682, - "quality_histogram": "[3, 11, 23, 48, 51, 47, 53, 55, 92, 133, 207, 340, 555, 905, 1236, 1446, 1418, 1197, 665, 197]", - "total_badness": 12703.577343 + "ne2d": 2882, + "ne3d": 8446, + "quality_histogram": "[4, 12, 23, 50, 42, 48, 44, 59, 82, 157, 207, 360, 560, 882, 1225, 1335, 1352, 1160, 663, 181]", + "total_badness": 12444.826653 }, { "ne1d": 1554, "ne2d": 6466, - "ne3d": 31866, - "quality_histogram": "[4, 7, 10, 5, 21, 54, 53, 79, 111, 204, 328, 684, 1327, 2460, 3983, 5375, 6122, 5827, 4106, 1106]", - "total_badness": 41304.661508 + "ne3d": 32031, + "quality_histogram": "[5, 6, 8, 8, 23, 53, 54, 80, 112, 196, 405, 711, 1412, 2584, 3934, 5449, 6160, 5835, 3889, 1107]", + "total_badness": 41668.344524 }, { "ne1d": 2992, "ne2d": 23396, - "ne3d": 276949, - "quality_histogram": "[5, 10, 11, 13, 8, 23, 34, 93, 171, 459, 1121, 2702, 6581, 15040, 28425, 44154, 58179, 60855, 45197, 13868]", - "total_badness": 341180.22628 + "ne3d": 278063, + "quality_histogram": "[5, 7, 10, 7, 10, 24, 35, 101, 221, 488, 1182, 2740, 6870, 15308, 29180, 44805, 57832, 60855, 44767, 13616]", + "total_badness": 343096.47286 } ], "revolution.geo": [ { "ne1d": 320, - "ne2d": 3080, - "ne3d": 8493, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 14, 37, 141, 292, 516, 761, 908, 1113, 1149, 1153, 1021, 809, 454, 124]", - "total_badness": 12348.498749 + "ne2d": 2954, + "ne3d": 8130, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 15, 66, 164, 321, 511, 753, 963, 1055, 1091, 997, 911, 712, 457, 112]", + "total_badness": 11989.408099 }, { "ne1d": 160, - "ne2d": 822, - "ne3d": 1275, - "quality_histogram": "[0, 0, 0, 0, 1, 13, 46, 79, 104, 128, 151, 162, 143, 122, 97, 67, 79, 44, 33, 6]", - "total_badness": 2301.511908 + "ne2d": 796, + "ne3d": 1285, + "quality_histogram": "[0, 2, 3, 11, 14, 24, 57, 98, 126, 126, 148, 122, 112, 120, 86, 87, 69, 48, 29, 3]", + "total_badness": 2509.4805977 }, { "ne1d": 240, - "ne2d": 1814, - "ne3d": 4263, - "quality_histogram": "[0, 0, 0, 1, 24, 48, 98, 178, 257, 329, 374, 485, 464, 451, 424, 377, 341, 236, 134, 42]", - "total_badness": 7266.9014253 + "ne2d": 1760, + "ne3d": 3853, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 15, 29, 96, 198, 280, 418, 475, 513, 491, 435, 388, 290, 178, 47]", + "total_badness": 5821.5572222 }, { "ne1d": 320, - "ne2d": 3080, - "ne3d": 8289, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 6, 11, 68, 186, 384, 601, 825, 1052, 1157, 1179, 1159, 966, 521, 172]", - "total_badness": 11619.248926 + "ne2d": 2954, + "ne3d": 7952, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 5, 37, 90, 213, 416, 639, 885, 1020, 1079, 1061, 987, 837, 540, 142]", + "total_badness": 11344.409226 }, { "ne1d": 480, - "ne2d": 6802, - "ne3d": 32879, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 12, 84, 271, 645, 1296, 2517, 4137, 5621, 6316, 6268, 4405, 1302]", - "total_badness": 41520.358013 + "ne2d": 6588, + "ne3d": 32800, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 36, 118, 313, 732, 1437, 2573, 4093, 5522, 6343, 6179, 4242, 1207]", + "total_badness": 41659.895413 }, { "ne1d": 800, - "ne2d": 17838, - "ne3d": 201709, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 11, 55, 165, 539, 1581, 4149, 10238, 19945, 31707, 42528, 45753, 34593, 10445]", - "total_badness": 246377.26479 + "ne2d": 17344, + "ne3d": 200087, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 11, 50, 218, 615, 1690, 4420, 10233, 19967, 31844, 41733, 45345, 33688, 10271]", + "total_badness": 244872.84796 } ], "screw.step": [ { "ne1d": 400, - "ne2d": 1416, - "ne3d": 2398, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 13, 88, 80, 176, 187, 220, 248, 278, 289, 245, 252, 182, 114, 25]", - "total_badness": 3755.3705458 + "ne2d": 1472, + "ne3d": 2610, + "quality_histogram": "[0, 0, 1, 3, 8, 20, 35, 69, 118, 163, 209, 264, 308, 299, 293, 297, 230, 170, 98, 25]", + "total_badness": 4229.5875828 }, { "ne1d": 530, - "ne2d": 2688, - "ne3d": 7837, - "quality_histogram": "[0, 0, 0, 0, 1, 1, 5, 12, 27, 70, 147, 275, 499, 797, 1087, 1289, 1486, 1215, 709, 217]", - "total_badness": 10345.591253 + "ne2d": 2744, + "ne3d": 7955, + "quality_histogram": "[0, 0, 0, 1, 6, 15, 21, 60, 79, 138, 234, 346, 553, 787, 1044, 1230, 1339, 1153, 741, 208]", + "total_badness": 10866.407655 }, { "ne1d": 668, - "ne2d": 4906, - "ne3d": 31514, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 2, 20, 64, 145, 345, 846, 1782, 3209, 5128, 6751, 6771, 4886, 1562]", - "total_badness": 38907.122664 + "ne2d": 4972, + "ne3d": 32058, + "quality_histogram": "[0, 0, 0, 1, 0, 3, 6, 23, 48, 90, 239, 476, 1018, 1874, 3372, 5249, 6538, 6742, 4891, 1488]", + "total_badness": 39939.885256 } ], "sculpture.geo": [ { "ne1d": 192, - "ne2d": 412, - "ne3d": 474, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 1, 4, 16, 22, 41, 56, 66, 94, 93, 45, 22, 10, 2]", - "total_badness": 694.32501707 + "ne2d": 396, + "ne3d": 456, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 2, 10, 22, 37, 41, 52, 70, 77, 75, 41, 17, 9, 1]", + "total_badness": 693.76412329 }, { "ne1d": 102, - "ne2d": 144, - "ne3d": 138, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 11, 22, 22, 30, 28, 19, 1]", - "total_badness": 172.99655803 + "ne2d": 142, + "ne3d": 135, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 3, 10, 14, 14, 18, 29, 21, 18, 3]", + "total_badness": 176.12964862 }, { "ne1d": 144, - "ne2d": 248, - "ne3d": 259, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 7, 14, 25, 29, 47, 50, 46, 25, 7]", - "total_badness": 337.75654539 + "ne2d": 234, + "ne3d": 234, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 8, 12, 11, 19, 36, 50, 41, 30, 20, 2]", + "total_badness": 314.37494393 }, { "ne1d": 192, - "ne2d": 412, - "ne3d": 473, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 3, 16, 22, 41, 56, 67, 94, 93, 45, 22, 10, 2]", - "total_badness": 690.01007288 + "ne2d": 396, + "ne3d": 456, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 2, 10, 22, 37, 41, 52, 70, 77, 75, 41, 17, 9, 1]", + "total_badness": 693.76413573 }, { "ne1d": 288, - "ne2d": 962, - "ne3d": 1342, - "quality_histogram": "[0, 0, 0, 0, 1, 0, 8, 25, 55, 76, 126, 141, 130, 145, 122, 136, 146, 128, 84, 19]", - "total_badness": 2068.4211724 + "ne2d": 928, + "ne3d": 1247, + "quality_histogram": "[0, 0, 0, 0, 1, 2, 14, 34, 68, 68, 133, 144, 132, 125, 140, 135, 109, 67, 53, 22]", + "total_badness": 2003.8623066 }, { "ne1d": 480, - "ne2d": 2396, - "ne3d": 6759, - "quality_histogram": "[0, 0, 0, 0, 3, 7, 8, 20, 26, 48, 63, 134, 286, 497, 697, 1121, 1313, 1288, 944, 304]", - "total_badness": 8628.8134106 + "ne2d": 2310, + "ne3d": 6419, + "quality_histogram": "[0, 0, 0, 3, 6, 11, 18, 14, 20, 60, 89, 176, 293, 543, 879, 1085, 1182, 1071, 702, 267]", + "total_badness": 8393.0036926 } ], "shaft.geo": [ { "ne1d": 708, - "ne2d": 1726, - "ne3d": 2758, - "quality_histogram": "[5, 19, 22, 27, 27, 37, 60, 74, 82, 160, 296, 372, 295, 251, 231, 278, 234, 181, 86, 21]", - "total_badness": 5318.0297732 + "ne2d": 1668, + "ne3d": 2420, + "quality_histogram": "[0, 0, 2, 0, 2, 5, 18, 35, 71, 156, 392, 338, 271, 271, 204, 255, 201, 106, 73, 20]", + "total_badness": 3933.8460804 }, { "ne1d": 410, - "ne2d": 604, - "ne3d": 951, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 6, 17, 32, 42, 65, 90, 111, 140, 137, 132, 103, 58, 17]", - "total_badness": 1354.4698007 + "ne2d": 580, + "ne3d": 841, + "quality_histogram": "[0, 0, 0, 0, 1, 3, 5, 14, 21, 34, 49, 54, 80, 99, 105, 104, 112, 100, 39, 21]", + "total_badness": 1241.4009871 }, { "ne1d": 510, - "ne2d": 1012, - "ne3d": 2088, - "quality_histogram": "[20, 46, 76, 95, 111, 105, 97, 134, 91, 101, 96, 141, 150, 177, 193, 168, 177, 56, 41, 13]", - "total_badness": 6181.8600404 + "ne2d": 968, + "ne3d": 1643, + "quality_histogram": "[0, 0, 4, 26, 41, 57, 73, 68, 102, 118, 144, 145, 167, 173, 158, 140, 125, 53, 36, 13]", + "total_badness": 3172.6008055 }, { "ne1d": 708, - "ne2d": 1726, - "ne3d": 2749, - "quality_histogram": "[0, 2, 15, 16, 32, 30, 44, 71, 72, 143, 302, 400, 289, 259, 236, 273, 259, 196, 88, 22]", - "total_badness": 4725.048506 + "ne2d": 1668, + "ne3d": 2413, + "quality_histogram": "[0, 0, 0, 0, 0, 6, 12, 25, 57, 154, 394, 335, 291, 260, 206, 271, 199, 113, 72, 18]", + "total_badness": 3870.1528345 }, { "ne1d": 1138, - "ne2d": 4220, - "ne3d": 11186, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 30, 80, 154, 350, 602, 945, 1409, 1830, 2160, 1870, 1352, 400]", - "total_badness": 14442.588212 + "ne2d": 4046, + "ne3d": 10795, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 4, 17, 52, 135, 270, 441, 682, 1028, 1431, 1789, 1884, 1646, 1064, 351]", + "total_badness": 14312.868281 }, { "ne1d": 1792, - "ne2d": 10588, - "ne3d": 63583, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 16, 57, 199, 505, 1317, 3246, 6239, 10147, 13375, 14218, 10750, 3513]", - "total_badness": 77700.722539 + "ne2d": 10340, + "ne3d": 61826, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 21, 94, 245, 701, 1655, 3629, 6683, 10068, 12847, 13004, 9674, 3201]", + "total_badness": 76334.81853 } ], "sphere.geo": [ { "ne1d": 0, - "ne2d": 126, - "ne3d": 126, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 28, 46, 29, 15, 0, 2, 0, 0, 0, 0, 0]", - "total_badness": 237.49105852 + "ne2d": 104, + "ne3d": 104, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 25, 41, 7, 6, 8, 2, 6, 3, 3, 0, 0]", + "total_badness": 189.21001627 }, { "ne1d": 0, - "ne2d": 56, - "ne3d": 56, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 14, 24, 11, 2, 0]", - "total_badness": 68.823759015 + "ne2d": 50, + "ne3d": 50, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 4, 12, 14, 14, 3, 0]", + "total_badness": 61.628499364 }, { "ne1d": 0, - "ne2d": 80, - "ne3d": 80, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 12, 28, 24, 10, 4, 0, 0, 0]", - "total_badness": 114.85441614 + "ne2d": 66, + "ne3d": 66, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 5, 12, 21, 5, 6, 7, 3, 0, 4]", + "total_badness": 96.358043846 }, { "ne1d": 0, - "ne2d": 126, - "ne3d": 126, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 28, 46, 29, 15, 0, 2, 0, 0, 0, 0, 0]", - "total_badness": 237.49105852 + "ne2d": 104, + "ne3d": 104, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 25, 41, 7, 6, 8, 2, 6, 3, 3, 0, 0]", + "total_badness": 189.21001627 }, { "ne1d": 0, - "ne2d": 258, - "ne3d": 365, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 8, 21, 36, 47, 55, 52, 32, 40, 28, 22, 15, 9]", - "total_badness": 557.72385462 + "ne2d": 254, + "ne3d": 350, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 8, 28, 47, 48, 43, 51, 47, 20, 20, 20, 10, 6]", + "total_badness": 555.65023551 }, { "ne1d": 0, - "ne2d": 660, - "ne3d": 2315, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 6, 30, 51, 141, 273, 396, 472, 471, 361, 111]", - "total_badness": 2861.2824595 + "ne2d": 656, + "ne3d": 2286, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 15, 37, 92, 152, 276, 397, 471, 429, 303, 111]", + "total_badness": 2868.3272967 } ], "sphereincube.geo": [ { "ne1d": 46, - "ne2d": 202, - "ne3d": 495, - "quality_histogram": "[0, 0, 7, 60, 37, 29, 46, 41, 57, 46, 44, 16, 23, 10, 15, 12, 12, 24, 11, 5]", - "total_badness": 1405.0779325 + "ne2d": 182, + "ne3d": 452, + "quality_histogram": "[0, 0, 11, 60, 38, 40, 63, 53, 49, 26, 30, 21, 11, 11, 14, 14, 5, 2, 4, 0]", + "total_badness": 1421.7705054 }, { "ne1d": 24, "ne2d": 60, - "ne3d": 187, - "quality_histogram": "[0, 0, 4, 11, 14, 25, 27, 14, 4, 2, 2, 3, 7, 13, 19, 16, 11, 6, 6, 3]", - "total_badness": 493.44997215 + "ne3d": 167, + "quality_histogram": "[0, 0, 8, 15, 17, 13, 17, 7, 5, 4, 5, 6, 9, 7, 12, 11, 11, 9, 11, 0]", + "total_badness": 475.36379061 }, { "ne1d": 30, - "ne2d": 116, - "ne3d": 352, - "quality_histogram": "[0, 0, 7, 15, 30, 48, 31, 27, 35, 44, 27, 19, 22, 15, 9, 8, 6, 6, 3, 0]", - "total_badness": 970.12716912 + "ne2d": 98, + "ne3d": 271, + "quality_histogram": "[0, 2, 11, 18, 20, 32, 35, 31, 21, 28, 19, 13, 9, 10, 14, 2, 4, 1, 1, 0]", + "total_badness": 830.84203375 }, { "ne1d": 46, - "ne2d": 202, - "ne3d": 501, - "quality_histogram": "[0, 0, 4, 44, 27, 20, 51, 40, 68, 51, 51, 21, 20, 17, 17, 16, 15, 23, 11, 5]", - "total_badness": 1303.491863 + "ne2d": 182, + "ne3d": 453, + "quality_histogram": "[0, 0, 10, 45, 33, 33, 50, 45, 60, 34, 36, 36, 15, 15, 14, 15, 6, 2, 4, 0]", + "total_badness": 1318.0366276 }, { "ne1d": 74, - "ne2d": 416, - "ne3d": 1711, - "quality_histogram": "[0, 0, 0, 0, 2, 3, 7, 15, 23, 28, 56, 85, 135, 188, 256, 270, 252, 194, 131, 66]", - "total_badness": 2380.2313828 + "ne2d": 390, + "ne3d": 1611, + "quality_histogram": "[0, 0, 0, 0, 1, 8, 12, 13, 26, 44, 101, 132, 188, 206, 230, 237, 187, 121, 73, 32]", + "total_badness": 2385.1746327 }, { "ne1d": 122, - "ne2d": 1080, - "ne3d": 13950, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 2, 8, 27, 100, 220, 499, 870, 1449, 2270, 2791, 2947, 2086, 679]", - "total_badness": 17374.576935 + "ne2d": 1042, + "ne3d": 13375, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 5, 25, 58, 132, 275, 532, 955, 1526, 2092, 2698, 2651, 1866, 556]", + "total_badness": 16888.449659 } ], "torus.geo": [ { "ne1d": 0, - "ne2d": 2534, - "ne3d": 5567, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 24, 44, 120, 251, 427, 577, 708, 736, 700, 671, 555, 393, 274, 86]", - "total_badness": 8384.3048813 + "ne2d": 2508, + "ne3d": 5657, + "quality_histogram": "[0, 0, 0, 0, 2, 10, 32, 78, 156, 274, 498, 598, 770, 767, 731, 613, 526, 367, 172, 63]", + "total_badness": 8749.7305986 }, { "ne1d": 0, - "ne2d": 692, - "ne3d": 3145, - "quality_histogram": "[195, 700, 454, 360, 340, 221, 170, 157, 140, 91, 96, 60, 44, 31, 33, 26, 12, 7, 6, 2]", - "total_badness": 25137.501541 + "ne2d": 660, + "ne3d": 2886, + "quality_histogram": "[117, 543, 423, 314, 289, 218, 194, 135, 146, 121, 112, 70, 62, 41, 40, 25, 12, 12, 11, 1]", + "total_badness": 19763.210938 }, { "ne1d": 0, - "ne2d": 1446, - "ne3d": 2727, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 5, 12, 62, 161, 219, 352, 418, 401, 380, 266, 239, 155, 55]", - "total_badness": 3909.4618458 + "ne2d": 1424, + "ne3d": 2673, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 6, 32, 92, 182, 315, 348, 414, 365, 343, 262, 166, 117, 28]", + "total_badness": 3963.6416021 }, { "ne1d": 0, - "ne2d": 2534, - "ne3d": 5419, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 19, 42, 209, 332, 508, 665, 720, 748, 656, 613, 495, 305, 103]", - "total_badness": 7868.8410035 + "ne2d": 2508, + "ne3d": 5476, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 9, 34, 74, 197, 375, 566, 685, 791, 755, 684, 546, 453, 238, 69]", + "total_badness": 8099.109234 }, { "ne1d": 0, - "ne2d": 5892, - "ne3d": 25297, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 6, 57, 140, 381, 917, 1672, 2967, 4341, 5051, 5114, 3588, 1059]", - "total_badness": 31635.159095 + "ne2d": 5842, + "ne3d": 24278, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 6, 22, 74, 224, 573, 1134, 1971, 3110, 4129, 4763, 4456, 2976, 840]", + "total_badness": 30936.500907 }, { "ne1d": 0, - "ne2d": 16286, - "ne3d": 175540, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 23, 105, 378, 1086, 3067, 7730, 16270, 26910, 37673, 40911, 31553, 9832]", - "total_badness": 212959.87194 + "ne2d": 16146, + "ne3d": 174106, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 39, 156, 448, 1266, 3517, 8397, 16897, 27428, 36623, 40129, 29926, 9277]", + "total_badness": 212310.14221 } ], "trafo.geo": [ { "ne1d": 690, - "ne2d": 1684, - "ne3d": 5207, - "quality_histogram": "[0, 1, 2, 0, 8, 23, 26, 43, 130, 209, 256, 376, 434, 574, 672, 714, 598, 554, 460, 127]", - "total_badness": 7609.297723 + "ne2d": 1646, + "ne3d": 5126, + "quality_histogram": "[1, 4, 2, 3, 5, 29, 53, 90, 147, 211, 320, 377, 471, 594, 643, 655, 546, 442, 421, 112]", + "total_badness": 7799.7835055 }, { "ne1d": 390, - "ne2d": 522, - "ne3d": 1348, - "quality_histogram": "[0, 2, 3, 17, 13, 39, 77, 130, 126, 139, 162, 128, 136, 115, 80, 88, 48, 32, 11, 2]", - "total_badness": 2770.7952646 + "ne2d": 520, + "ne3d": 1346, + "quality_histogram": "[0, 0, 7, 14, 33, 25, 63, 120, 124, 153, 167, 155, 137, 114, 92, 67, 31, 21, 22, 1]", + "total_badness": 2774.32686 }, { "ne1d": 512, - "ne2d": 876, - "ne3d": 2390, - "quality_histogram": "[0, 0, 2, 1, 11, 17, 45, 82, 116, 145, 178, 211, 303, 386, 349, 231, 147, 96, 45, 25]", - "total_badness": 3971.1275129 + "ne2d": 860, + "ne3d": 2371, + "quality_histogram": "[0, 0, 1, 3, 11, 26, 63, 72, 159, 180, 212, 248, 278, 290, 285, 262, 140, 47, 57, 37]", + "total_badness": 4066.6122044 }, { "ne1d": 690, - "ne2d": 1684, - "ne3d": 5136, - "quality_histogram": "[0, 0, 0, 0, 3, 14, 20, 37, 122, 193, 254, 362, 416, 558, 664, 720, 625, 547, 463, 138]", - "total_badness": 7387.3184406 + "ne2d": 1646, + "ne3d": 5032, + "quality_histogram": "[0, 0, 1, 1, 3, 24, 33, 83, 142, 202, 307, 347, 451, 584, 623, 688, 546, 455, 430, 112]", + "total_badness": 7479.98992 }, { "ne1d": 1050, - "ne2d": 3816, - "ne3d": 17915, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 26, 41, 68, 180, 504, 1428, 2170, 2266, 2730, 2780, 2666, 2365, 685]", - "total_badness": 23360.270089 + "ne2d": 3712, + "ne3d": 17405, + "quality_histogram": "[0, 0, 0, 0, 1, 0, 8, 32, 53, 107, 255, 624, 1664, 2121, 2356, 2568, 2554, 2462, 1933, 667]", + "total_badness": 23080.231635 }, { "ne1d": 1722, - "ne2d": 10044, - "ne3d": 84569, - "quality_histogram": "[0, 0, 0, 0, 3, 8, 60, 1414, 732, 421, 765, 1392, 2637, 5659, 9077, 13242, 16177, 16531, 12448, 4003]", - "total_badness": 108711.84635 + "ne2d": 9850, + "ne3d": 83872, + "quality_histogram": "[0, 0, 0, 1, 3, 7, 107, 1446, 645, 540, 977, 1757, 3237, 6101, 9524, 13281, 15629, 15661, 11299, 3657]", + "total_badness": 109051.31473 } ], "twobricks.geo": [ @@ -1384,17 +1384,17 @@ }, { "ne1d": 116, - "ne2d": 136, - "ne3d": 171, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 7, 10, 12, 40, 34, 23, 22, 13, 3]", - "total_badness": 228.1897295 + "ne2d": 124, + "ne3d": 159, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 5, 14, 26, 22, 29, 20, 18, 9, 9, 5]", + "total_badness": 225.25116924 }, { "ne1d": 186, - "ne2d": 346, - "ne3d": 594, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 22, 29, 70, 88, 100, 109, 115, 43, 14]", - "total_badness": 771.14009171 + "ne2d": 308, + "ne3d": 526, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 12, 26, 59, 56, 79, 97, 76, 65, 43, 8]", + "total_badness": 709.96091399 } ], "twocubes.geo": [ @@ -1428,61 +1428,61 @@ }, { "ne1d": 116, - "ne2d": 136, - "ne3d": 171, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 7, 10, 12, 40, 34, 23, 22, 13, 3]", - "total_badness": 228.1897295 + "ne2d": 124, + "ne3d": 159, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 5, 14, 26, 22, 29, 20, 18, 9, 9, 5]", + "total_badness": 225.25116924 }, { "ne1d": 186, - "ne2d": 346, - "ne3d": 594, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 22, 29, 70, 88, 100, 109, 115, 43, 14]", - "total_badness": 771.14009171 + "ne2d": 308, + "ne3d": 526, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 12, 26, 59, 56, 79, 97, 76, 65, 43, 8]", + "total_badness": 709.96091399 } ], "twocyl.geo": [ { "ne1d": 144, - "ne2d": 408, - "ne3d": 572, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 7, 7, 17, 34, 51, 57, 89, 111, 75, 73, 35, 12, 1]", - "total_badness": 851.35923972 + "ne2d": 402, + "ne3d": 535, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 5, 11, 23, 31, 51, 49, 74, 70, 65, 60, 43, 39, 11, 2]", + "total_badness": 848.77250581 }, { "ne1d": 68, "ne2d": 100, - "ne3d": 209, - "quality_histogram": "[0, 0, 0, 1, 3, 6, 11, 2, 8, 5, 15, 18, 12, 28, 28, 27, 24, 17, 3, 1]", - "total_badness": 357.15502356 + "ne3d": 188, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 6, 14, 23, 27, 28, 25, 22, 28, 8, 0]", + "total_badness": 267.41201716 }, { "ne1d": 102, - "ne2d": 236, - "ne3d": 551, - "quality_histogram": "[0, 29, 41, 30, 31, 36, 49, 40, 55, 27, 38, 32, 26, 26, 20, 13, 37, 16, 4, 1]", - "total_badness": 1900.92706 + "ne2d": 234, + "ne3d": 540, + "quality_histogram": "[0, 14, 30, 32, 40, 40, 55, 59, 43, 38, 24, 29, 26, 16, 25, 15, 39, 4, 11, 0]", + "total_badness": 1706.6298917 }, { "ne1d": 144, - "ne2d": 408, - "ne3d": 568, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 7, 16, 23, 51, 53, 95, 117, 69, 73, 43, 14, 4]", - "total_badness": 824.30043375 + "ne2d": 402, + "ne3d": 534, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 4, 10, 19, 26, 44, 53, 82, 67, 66, 64, 41, 40, 13, 3]", + "total_badness": 838.16101585 }, { "ne1d": 214, - "ne2d": 910, - "ne3d": 1894, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 20, 72, 118, 190, 292, 365, 352, 262, 179, 40]", - "total_badness": 2477.4306124 + "ne2d": 900, + "ne3d": 1820, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 15, 43, 103, 172, 235, 307, 303, 304, 187, 120, 28]", + "total_badness": 2474.9963091 }, { "ne1d": 350, - "ne2d": 2374, - "ne3d": 13452, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 25, 83, 244, 626, 1288, 2202, 2860, 3100, 2290, 728]", - "total_badness": 16367.358392 + "ne2d": 2336, + "ne3d": 13150, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 10, 38, 121, 325, 712, 1379, 2153, 2848, 2841, 2058, 663]", + "total_badness": 16159.006532 } ] } \ No newline at end of file From 62e3e790d8b23b675a94c30aea28278476499174 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joachim=20Sch=C3=B6berl?= Date: Mon, 7 Oct 2019 23:45:13 +0200 Subject: [PATCH 024/120] switch OCC meshing to physical space, and optimize FromPlane projection using uv-geominfo --- libsrc/meshing/meshing2.cpp | 1 + libsrc/occ/occgenmesh.cpp | 2 +- libsrc/occ/occmeshsurf.cpp | 81 +++++++++++++++++++++++++++++++++---- 3 files changed, 75 insertions(+), 9 deletions(-) diff --git a/libsrc/meshing/meshing2.cpp b/libsrc/meshing/meshing2.cpp index 94f5b71c..f407e995 100644 --- a/libsrc/meshing/meshing2.cpp +++ b/libsrc/meshing/meshing2.cpp @@ -853,6 +853,7 @@ namespace netgen for (int i = oldnp+1; i <= plainpoints.Size(); i++) { Point<3> locp; + upgeominfo.Elem(i) = *blgeominfo1; int err = TransformFromPlain (plainpoints.Elem(i), locp, upgeominfo.Elem(i), h); diff --git a/libsrc/occ/occgenmesh.cpp b/libsrc/occ/occgenmesh.cpp index 45721490..d4633928 100644 --- a/libsrc/occ/occgenmesh.cpp +++ b/libsrc/occ/occgenmesh.cpp @@ -647,7 +647,7 @@ namespace netgen Box<3> bb = geom.GetBoundingBox(); - // int projecttype = PLANESPACE; + int projecttype = PLANESPACE; static Timer tinit("init"); tinit.Start(); diff --git a/libsrc/occ/occmeshsurf.cpp b/libsrc/occ/occmeshsurf.cpp index 01c86423..a2693700 100644 --- a/libsrc/occ/occmeshsurf.cpp +++ b/libsrc/occ/occmeshsurf.cpp @@ -342,7 +342,9 @@ namespace netgen Point<3> & p3d, PointGeomInfo & gi, double h) - { + { + static Timer t("FromPlane"); RegionTimer reg(t); + if (projecttype == PLANESPACE) { // cout << "2d : " << pplane << endl; @@ -366,12 +368,75 @@ namespace netgen - void OCCSurface :: Project (Point<3> & p, PointGeomInfo & gi) + void OCCSurface :: Project (Point<3> & ap, PointGeomInfo & gi) { + static Timer t("OccSurface::Project"); RegionTimer reg(t); + + + // try Newton's method ... + + gp_Pnt p(ap(0), ap(1), ap(2)); + + double u = gi.u; + double v = gi.v; + gp_Pnt x = occface->Value (u,v); + + if (p.SquareDistance(x) <= sqr(PROJECTION_TOLERANCE)) return; + + gp_Vec du, dv; + occface->D1(u,v,x,du,dv); + + int count = 0; + + gp_Pnt xold; + gp_Vec n; + double det, lambda, mu; + + do + { + count++; + + n = du^dv; + + det = Det3 (n.X(), du.X(), dv.X(), + n.Y(), du.Y(), dv.Y(), + n.Z(), du.Z(), dv.Z()); + + if (det < 1e-15) + break; + + lambda = Det3 (n.X(), p.X()-x.X(), dv.X(), + n.Y(), p.Y()-x.Y(), dv.Y(), + n.Z(), p.Z()-x.Z(), dv.Z())/det; + + mu = Det3 (n.X(), du.X(), p.X()-x.X(), + n.Y(), du.Y(), p.Y()-x.Y(), + n.Z(), du.Z(), p.Z()-x.Z())/det; + + u += lambda; + v += mu; + + xold = x; + occface->D1(u,v,x,du,dv); + + if (xold.SquareDistance(x) < sqr(PROJECTION_TOLERANCE)) + { + ap = Point<3> (x.X(), x.Y(), x.Z()); + gi.u = u; + gi.v = v; + return; + } + } + while (count < 20); + + + // Newton did not converge, use OCC projection + + // static int cnt = 0; // if (cnt++ % 1000 == 0) cout << "********************************************** OCCSurfce :: Project, cnt = " << cnt << endl; - gp_Pnt pnt(p(0), p(1), p(2)); + gp_Pnt pnt = p; // (p(0), p(1), p(2)); //(*testout) << "pnt = " << pnt.X() << ", " << pnt.Y() << ", " << pnt.Z() << endl; @@ -406,20 +471,20 @@ namespace netgen proj.LowerDistanceParameters (gi.u, gi.v); */ - double u,v; + // double u,v; Handle( ShapeAnalysis_Surface ) su = new ShapeAnalysis_Surface( occface ); - gp_Pnt2d suval = su->ValueOfUV ( pnt, BRep_Tool::Tolerance( topods_face ) ); + auto toltool = BRep_Tool::Tolerance( topods_face ); + + gp_Pnt2d suval = su->ValueOfUV ( pnt, toltool); suval.Coord( u, v); pnt = occface->Value( u, v ); //(*testout) << "pnt(proj) = " << pnt.X() << ", " << pnt.Y() << ", " << pnt.Z() << endl; gi.u = u; gi.v = v; - - gi.trignum = 1; - p = Point<3> (pnt.X(), pnt.Y(), pnt.Z()); + ap = Point<3> (pnt.X(), pnt.Y(), pnt.Z()); } From 6d21ef01d97cfa0efbe3a952e4cad0c4e4112f16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joachim=20Sch=C3=B6berl?= Date: Tue, 8 Oct 2019 00:26:44 +0200 Subject: [PATCH 025/120] updated results --- tests/pytest/results.json | 216 +++++++++++++++++++------------------- 1 file changed, 108 insertions(+), 108 deletions(-) diff --git a/tests/pytest/results.json b/tests/pytest/results.json index 5b8427e5..33a5b1f9 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -415,7 +415,7 @@ "ne2d": 152, "ne3d": 437, "quality_histogram": "[0, 0, 14, 22, 37, 32, 30, 36, 31, 29, 34, 25, 27, 28, 22, 16, 33, 9, 9, 3]", - "total_badness": 1146.634165 + "total_badness": 1146.6330331 }, { "ne1d": 52, @@ -661,25 +661,25 @@ ], "frame.step": [ { - "ne1d": 12694, - "ne2d": 39776, - "ne3d": 220900, - "quality_histogram": "[2, 7, 7, 9, 9, 30, 241, 749, 1682, 3420, 6081, 10465, 17172, 25221, 31864, 35916, 35505, 29651, 18174, 4695]", - "total_badness": 300459.85413 + "ne1d": 12598, + "ne2d": 39584, + "ne3d": 206912, + "quality_histogram": "[2, 7, 10, 6, 8, 51, 267, 754, 1657, 3220, 5916, 10101, 16380, 23982, 29831, 33403, 32942, 27252, 16766, 4357]", + "total_badness": 282356.88304 }, { - "ne1d": 6026, - "ne2d": 11146, - "ne3d": 30128, - "quality_histogram": "[4, 4, 5, 11, 20, 39, 120, 286, 624, 1025, 1679, 2533, 3356, 4137, 4506, 4206, 3471, 2402, 1366, 334]", - "total_badness": 44746.768359 + "ne1d": 5988, + "ne2d": 11000, + "ne3d": 29550, + "quality_histogram": "[4, 4, 5, 9, 38, 43, 98, 250, 657, 975, 1573, 2448, 3228, 4023, 4505, 4163, 3405, 2486, 1309, 327]", + "total_badness": 43795.960391 }, { - "ne1d": 9704, - "ne2d": 24660, - "ne3d": 85967, - "quality_histogram": "[1, 6, 3, 11, 7, 34, 76, 191, 485, 1084, 2525, 4810, 7803, 11031, 13503, 14079, 12909, 10074, 5899, 1436]", - "total_badness": 118291.03172 + "ne1d": 9622, + "ne2d": 23822, + "ne3d": 80847, + "quality_histogram": "[3, 4, 5, 9, 10, 35, 87, 168, 435, 1074, 2327, 4359, 7354, 10497, 12681, 13413, 12204, 9475, 5382, 1325]", + "total_badness": 111262.92766 } ], "hinge.stl": [ @@ -691,39 +691,39 @@ "total_badness": 2772.6154636 }, { - "ne1d": 298, - "ne2d": 608, - "ne3d": 770, - "quality_histogram": "[0, 0, 0, 1, 10, 9, 19, 15, 35, 46, 62, 87, 79, 89, 83, 87, 64, 45, 30, 9]", - "total_badness": 1284.6220542 + "ne1d": 398, + "ne2d": 1030, + "ne3d": 1389, + "quality_histogram": "[0, 0, 0, 0, 2, 5, 18, 35, 47, 74, 111, 126, 131, 179, 189, 185, 134, 93, 46, 14]", + "total_badness": 2178.5663259 }, { - "ne1d": 370, - "ne2d": 854, - "ne3d": 1130, - "quality_histogram": "[0, 0, 0, 0, 2, 4, 17, 25, 26, 34, 64, 107, 137, 161, 156, 181, 93, 73, 42, 8]", - "total_badness": 1739.2621504 + "ne1d": 422, + "ne2d": 1094, + "ne3d": 1530, + "quality_histogram": "[0, 0, 0, 0, 0, 7, 14, 43, 46, 79, 94, 164, 155, 163, 212, 180, 180, 118, 61, 14]", + "total_badness": 2364.3186941 }, { - "ne1d": 516, - "ne2d": 1584, - "ne3d": 2549, - "quality_histogram": "[0, 0, 0, 0, 2, 1, 7, 19, 30, 53, 121, 174, 224, 296, 384, 362, 331, 304, 201, 40]", - "total_badness": 3600.6650263 + "ne1d": 456, + "ne2d": 1230, + "ne3d": 1988, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 2, 5, 19, 39, 62, 112, 177, 236, 314, 304, 295, 236, 140, 45]", + "total_badness": 2747.770553 }, { - "ne1d": 722, - "ne2d": 2888, - "ne3d": 6818, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 12, 29, 67, 167, 379, 655, 877, 1099, 1146, 1177, 948, 258]", - "total_badness": 8742.2896959 + "ne1d": 498, + "ne2d": 1396, + "ne3d": 2903, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 4, 13, 31, 64, 136, 221, 397, 484, 533, 504, 399, 114]", + "total_badness": 3701.6633824 }, { - "ne1d": 1862, - "ne2d": 19516, - "ne3d": 135482, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 6, 30, 145, 444, 1158, 3034, 7025, 13447, 21335, 28448, 30344, 22953, 7112]", - "total_badness": 165806.81509 + "ne1d": 538, + "ne2d": 1670, + "ne3d": 4609, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 14, 45, 103, 220, 448, 693, 963, 1055, 803, 257]", + "total_badness": 5628.2514122 } ], "lshape3d.geo": [ @@ -899,39 +899,39 @@ "total_badness": 1672.6379358 }, { - "ne1d": 112, - "ne2d": 212, - "ne3d": 346, - "quality_histogram": "[0, 0, 0, 3, 8, 8, 8, 9, 19, 25, 40, 40, 35, 39, 38, 37, 17, 14, 5, 1]", - "total_badness": 629.86936176 + "ne1d": 146, + "ne2d": 378, + "ne3d": 629, + "quality_histogram": "[0, 0, 0, 0, 1, 4, 13, 14, 23, 44, 56, 74, 86, 82, 70, 72, 36, 38, 10, 6]", + "total_badness": 1030.3136745 }, { - "ne1d": 134, - "ne2d": 288, - "ne3d": 523, - "quality_histogram": "[0, 0, 0, 0, 0, 5, 5, 4, 14, 15, 32, 48, 68, 67, 66, 76, 44, 43, 29, 7]", - "total_badness": 790.86141744 + "ne1d": 156, + "ne2d": 394, + "ne3d": 758, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 10, 24, 33, 62, 90, 103, 138, 113, 90, 60, 22, 10]", + "total_badness": 1097.0227588 }, { - "ne1d": 194, - "ne2d": 594, - "ne3d": 1742, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 5, 9, 40, 88, 126, 192, 280, 281, 279, 241, 165, 34]", - "total_badness": 2325.4945287 + "ne1d": 170, + "ne2d": 454, + "ne3d": 1180, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 4, 12, 16, 43, 89, 116, 178, 208, 222, 153, 99, 37]", + "total_badness": 1563.8386897 }, { - "ne1d": 266, - "ne2d": 990, - "ne3d": 4103, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 13, 28, 69, 162, 317, 534, 761, 831, 732, 513, 140]", - "total_badness": 5196.8765579 + "ne1d": 190, + "ne2d": 504, + "ne3d": 1516, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 20, 50, 73, 141, 210, 280, 272, 238, 170, 55]", + "total_badness": 1957.4591373 }, { - "ne1d": 674, - "ne2d": 6870, - "ne3d": 82768, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 14, 59, 188, 513, 1613, 4088, 7976, 12954, 17553, 18871, 14413, 4526]", - "total_badness": 100797.22838 + "ne1d": 230, + "ne2d": 698, + "ne3d": 3545, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 6, 12, 20, 44, 109, 246, 424, 580, 665, 742, 515, 180]", + "total_badness": 4425.483014 } ], "period.geo": [ @@ -987,39 +987,39 @@ "total_badness": 12856.87891 }, { - "ne1d": 572, - "ne2d": 1228, - "ne3d": 1901, - "quality_histogram": "[2, 18, 45, 48, 51, 66, 60, 92, 128, 133, 165, 191, 187, 197, 168, 128, 114, 65, 39, 4]", - "total_badness": 4320.0075948 + "ne1d": 688, + "ne2d": 1570, + "ne3d": 2332, + "quality_histogram": "[7, 14, 56, 53, 77, 97, 96, 145, 155, 176, 211, 240, 230, 218, 182, 145, 119, 68, 35, 8]", + "total_badness": 5431.1732784 }, { - "ne1d": 724, - "ne2d": 1754, - "ne3d": 3285, - "quality_histogram": "[4, 20, 30, 41, 36, 43, 44, 68, 96, 154, 170, 280, 339, 436, 436, 406, 340, 206, 107, 29]", - "total_badness": 5959.5331564 + "ne1d": 758, + "ne2d": 1916, + "ne3d": 3493, + "quality_histogram": "[6, 22, 23, 43, 41, 51, 71, 76, 134, 140, 223, 273, 365, 438, 463, 442, 323, 231, 101, 27]", + "total_badness": 6431.3412423 }, { - "ne1d": 956, - "ne2d": 2886, - "ne3d": 8682, - "quality_histogram": "[3, 11, 23, 48, 51, 47, 53, 55, 92, 133, 207, 340, 555, 905, 1236, 1446, 1418, 1197, 665, 197]", - "total_badness": 12703.577343 + "ne1d": 890, + "ne2d": 2646, + "ne3d": 8199, + "quality_histogram": "[3, 10, 29, 35, 40, 44, 30, 65, 78, 129, 218, 314, 569, 809, 1154, 1334, 1342, 1117, 716, 163]", + "total_badness": 11955.360034 }, { - "ne1d": 1554, - "ne2d": 6466, - "ne3d": 31866, - "quality_histogram": "[4, 7, 10, 5, 21, 54, 53, 79, 111, 204, 328, 684, 1327, 2460, 3983, 5375, 6122, 5827, 4106, 1106]", - "total_badness": 41304.661508 + "ne1d": 1100, + "ne2d": 4024, + "ne3d": 21052, + "quality_histogram": "[4, 13, 25, 31, 48, 32, 41, 40, 77, 141, 257, 450, 846, 1556, 2542, 3449, 4146, 3956, 2679, 719]", + "total_badness": 27767.456205 }, { - "ne1d": 2992, - "ne2d": 23396, - "ne3d": 276949, - "quality_histogram": "[5, 10, 11, 13, 8, 23, 34, 93, 171, 459, 1121, 2702, 6581, 15040, 28425, 44154, 58179, 60855, 45197, 13868]", - "total_badness": 341180.22628 + "ne1d": 1518, + "ne2d": 8840, + "ne3d": 117428, + "quality_histogram": "[4, 10, 18, 14, 31, 30, 54, 59, 111, 225, 521, 1211, 2798, 6484, 12180, 18799, 24241, 25605, 19083, 5950]", + "total_badness": 145344.31496 } ], "revolution.geo": [ @@ -1069,24 +1069,24 @@ "screw.step": [ { "ne1d": 400, - "ne2d": 1416, - "ne3d": 2398, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 13, 88, 80, 176, 187, 220, 248, 278, 289, 245, 252, 182, 114, 25]", - "total_badness": 3755.3705458 + "ne2d": 1428, + "ne3d": 2445, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 9, 85, 96, 179, 195, 223, 282, 305, 283, 308, 202, 161, 89, 25]", + "total_badness": 3866.2182561 }, { - "ne1d": 530, - "ne2d": 2688, - "ne3d": 7837, - "quality_histogram": "[0, 0, 0, 0, 1, 1, 5, 12, 27, 70, 147, 275, 499, 797, 1087, 1289, 1486, 1215, 709, 217]", - "total_badness": 10345.591253 + "ne1d": 528, + "ne2d": 2754, + "ne3d": 8177, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 3, 9, 26, 77, 160, 259, 507, 763, 1151, 1319, 1483, 1277, 885, 257]", + "total_badness": 10717.590471 }, { - "ne1d": 668, - "ne2d": 4906, - "ne3d": 31514, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 2, 20, 64, 145, 345, 846, 1782, 3209, 5128, 6751, 6771, 4886, 1562]", - "total_badness": 38907.122664 + "ne1d": 666, + "ne2d": 4934, + "ne3d": 31828, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 8, 21, 58, 177, 347, 799, 1817, 3313, 5119, 6775, 6843, 5106, 1442]", + "total_badness": 39308.002921 } ], "sculpture.geo": [ @@ -1139,7 +1139,7 @@ "ne2d": 1726, "ne3d": 2758, "quality_histogram": "[5, 19, 22, 27, 27, 37, 60, 74, 82, 160, 296, 372, 295, 251, 231, 278, 234, 181, 86, 21]", - "total_badness": 5318.0297732 + "total_badness": 5318.0297042 }, { "ne1d": 410, @@ -1153,14 +1153,14 @@ "ne2d": 1012, "ne3d": 2088, "quality_histogram": "[20, 46, 76, 95, 111, 105, 97, 134, 91, 101, 96, 141, 150, 177, 193, 168, 177, 56, 41, 13]", - "total_badness": 6181.8600404 + "total_badness": 6181.860032 }, { "ne1d": 708, "ne2d": 1726, "ne3d": 2749, "quality_histogram": "[0, 2, 15, 16, 32, 30, 44, 71, 72, 143, 302, 400, 289, 259, 236, 273, 259, 196, 88, 22]", - "total_badness": 4725.048506 + "total_badness": 4725.048513 }, { "ne1d": 1138, From cedc0657a3203c6f075c913f57410cef70648888 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Tue, 8 Oct 2019 12:04:40 +0200 Subject: [PATCH 026/120] updated results --- tests/pytest/results.json | 216 +++++++++++++++++++------------------- 1 file changed, 108 insertions(+), 108 deletions(-) diff --git a/tests/pytest/results.json b/tests/pytest/results.json index 33a5b1f9..6334c27e 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -415,7 +415,7 @@ "ne2d": 152, "ne3d": 437, "quality_histogram": "[0, 0, 14, 22, 37, 32, 30, 36, 31, 29, 34, 25, 27, 28, 22, 16, 33, 9, 9, 3]", - "total_badness": 1146.6330331 + "total_badness": 1146.634165 }, { "ne1d": 52, @@ -661,25 +661,25 @@ ], "frame.step": [ { - "ne1d": 12598, - "ne2d": 39584, - "ne3d": 206912, - "quality_histogram": "[2, 7, 10, 6, 8, 51, 267, 754, 1657, 3220, 5916, 10101, 16380, 23982, 29831, 33403, 32942, 27252, 16766, 4357]", - "total_badness": 282356.88304 + "ne1d": 12694, + "ne2d": 40474, + "ne3d": 221182, + "quality_histogram": "[2, 7, 8, 9, 8, 45, 297, 719, 1786, 3439, 6255, 10896, 17573, 25401, 32432, 35856, 35294, 28822, 17734, 4599]", + "total_badness": 301822.09951 }, { - "ne1d": 5988, - "ne2d": 11000, - "ne3d": 29550, - "quality_histogram": "[4, 4, 5, 9, 38, 43, 98, 250, 657, 975, 1573, 2448, 3228, 4023, 4505, 4163, 3405, 2486, 1309, 327]", - "total_badness": 43795.960391 + "ne1d": 6026, + "ne2d": 11330, + "ne3d": 33930, + "quality_histogram": "[4, 44, 54, 95, 236, 493, 862, 1288, 1877, 2386, 2810, 3502, 3735, 3948, 3901, 3241, 2597, 1776, 871, 210]", + "total_badness": 59128.564033 }, { - "ne1d": 9622, - "ne2d": 23822, - "ne3d": 80847, - "quality_histogram": "[3, 4, 5, 9, 10, 35, 87, 168, 435, 1074, 2327, 4359, 7354, 10497, 12681, 13413, 12204, 9475, 5382, 1325]", - "total_badness": 111262.92766 + "ne1d": 9704, + "ne2d": 24358, + "ne3d": 85648, + "quality_histogram": "[2, 6, 5, 10, 5, 24, 87, 165, 425, 1072, 2383, 4552, 7532, 10936, 13505, 14259, 13226, 10274, 5670, 1510]", + "total_badness": 117436.51999 } ], "hinge.stl": [ @@ -691,39 +691,39 @@ "total_badness": 2772.6154636 }, { - "ne1d": 398, - "ne2d": 1030, - "ne3d": 1389, - "quality_histogram": "[0, 0, 0, 0, 2, 5, 18, 35, 47, 74, 111, 126, 131, 179, 189, 185, 134, 93, 46, 14]", - "total_badness": 2178.5663259 + "ne1d": 298, + "ne2d": 608, + "ne3d": 770, + "quality_histogram": "[0, 0, 0, 1, 10, 9, 19, 15, 35, 46, 62, 87, 79, 89, 83, 87, 64, 45, 30, 9]", + "total_badness": 1284.6220542 }, { - "ne1d": 422, - "ne2d": 1094, - "ne3d": 1530, - "quality_histogram": "[0, 0, 0, 0, 0, 7, 14, 43, 46, 79, 94, 164, 155, 163, 212, 180, 180, 118, 61, 14]", - "total_badness": 2364.3186941 + "ne1d": 370, + "ne2d": 854, + "ne3d": 1130, + "quality_histogram": "[0, 0, 0, 0, 2, 4, 17, 25, 26, 34, 64, 107, 137, 161, 156, 181, 93, 73, 42, 8]", + "total_badness": 1739.2621504 }, { - "ne1d": 456, - "ne2d": 1230, - "ne3d": 1988, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 2, 5, 19, 39, 62, 112, 177, 236, 314, 304, 295, 236, 140, 45]", - "total_badness": 2747.770553 + "ne1d": 516, + "ne2d": 1584, + "ne3d": 2549, + "quality_histogram": "[0, 0, 0, 0, 2, 1, 7, 19, 30, 53, 121, 174, 224, 296, 384, 362, 331, 304, 201, 40]", + "total_badness": 3600.6650263 }, { - "ne1d": 498, - "ne2d": 1396, - "ne3d": 2903, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 4, 13, 31, 64, 136, 221, 397, 484, 533, 504, 399, 114]", - "total_badness": 3701.6633824 + "ne1d": 722, + "ne2d": 2888, + "ne3d": 6818, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 12, 29, 67, 167, 379, 655, 877, 1099, 1146, 1177, 948, 258]", + "total_badness": 8742.2896959 }, { - "ne1d": 538, - "ne2d": 1670, - "ne3d": 4609, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 14, 45, 103, 220, 448, 693, 963, 1055, 803, 257]", - "total_badness": 5628.2514122 + "ne1d": 1862, + "ne2d": 19516, + "ne3d": 135482, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 6, 30, 145, 444, 1158, 3034, 7025, 13447, 21335, 28448, 30344, 22953, 7112]", + "total_badness": 165806.81509 } ], "lshape3d.geo": [ @@ -899,39 +899,39 @@ "total_badness": 1672.6379358 }, { - "ne1d": 146, - "ne2d": 378, - "ne3d": 629, - "quality_histogram": "[0, 0, 0, 0, 1, 4, 13, 14, 23, 44, 56, 74, 86, 82, 70, 72, 36, 38, 10, 6]", - "total_badness": 1030.3136745 + "ne1d": 112, + "ne2d": 212, + "ne3d": 346, + "quality_histogram": "[0, 0, 0, 3, 8, 8, 8, 9, 19, 25, 40, 40, 35, 39, 38, 37, 17, 14, 5, 1]", + "total_badness": 629.86936176 }, { - "ne1d": 156, - "ne2d": 394, - "ne3d": 758, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 10, 24, 33, 62, 90, 103, 138, 113, 90, 60, 22, 10]", - "total_badness": 1097.0227588 + "ne1d": 134, + "ne2d": 288, + "ne3d": 523, + "quality_histogram": "[0, 0, 0, 0, 0, 5, 5, 4, 14, 15, 32, 48, 68, 67, 66, 76, 44, 43, 29, 7]", + "total_badness": 790.86141744 }, { - "ne1d": 170, - "ne2d": 454, - "ne3d": 1180, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 4, 12, 16, 43, 89, 116, 178, 208, 222, 153, 99, 37]", - "total_badness": 1563.8386897 + "ne1d": 194, + "ne2d": 594, + "ne3d": 1742, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 5, 9, 40, 88, 126, 192, 280, 281, 279, 241, 165, 34]", + "total_badness": 2325.4945287 }, { - "ne1d": 190, - "ne2d": 504, - "ne3d": 1516, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 20, 50, 73, 141, 210, 280, 272, 238, 170, 55]", - "total_badness": 1957.4591373 + "ne1d": 266, + "ne2d": 990, + "ne3d": 4103, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 13, 28, 69, 162, 317, 534, 761, 831, 732, 513, 140]", + "total_badness": 5196.8765579 }, { - "ne1d": 230, - "ne2d": 698, - "ne3d": 3545, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 6, 12, 20, 44, 109, 246, 424, 580, 665, 742, 515, 180]", - "total_badness": 4425.483014 + "ne1d": 674, + "ne2d": 6870, + "ne3d": 82768, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 14, 59, 188, 513, 1613, 4088, 7976, 12954, 17553, 18871, 14413, 4526]", + "total_badness": 100797.22838 } ], "period.geo": [ @@ -987,39 +987,39 @@ "total_badness": 12856.87891 }, { - "ne1d": 688, - "ne2d": 1570, - "ne3d": 2332, - "quality_histogram": "[7, 14, 56, 53, 77, 97, 96, 145, 155, 176, 211, 240, 230, 218, 182, 145, 119, 68, 35, 8]", - "total_badness": 5431.1732784 + "ne1d": 572, + "ne2d": 1228, + "ne3d": 1901, + "quality_histogram": "[2, 18, 45, 48, 51, 66, 60, 92, 128, 133, 165, 191, 187, 197, 168, 128, 114, 65, 39, 4]", + "total_badness": 4320.0075948 }, { - "ne1d": 758, - "ne2d": 1916, - "ne3d": 3493, - "quality_histogram": "[6, 22, 23, 43, 41, 51, 71, 76, 134, 140, 223, 273, 365, 438, 463, 442, 323, 231, 101, 27]", - "total_badness": 6431.3412423 + "ne1d": 724, + "ne2d": 1754, + "ne3d": 3285, + "quality_histogram": "[4, 20, 30, 41, 36, 43, 44, 68, 96, 154, 170, 280, 339, 436, 436, 406, 340, 206, 107, 29]", + "total_badness": 5959.5331564 }, { - "ne1d": 890, - "ne2d": 2646, - "ne3d": 8199, - "quality_histogram": "[3, 10, 29, 35, 40, 44, 30, 65, 78, 129, 218, 314, 569, 809, 1154, 1334, 1342, 1117, 716, 163]", - "total_badness": 11955.360034 + "ne1d": 956, + "ne2d": 2886, + "ne3d": 8682, + "quality_histogram": "[3, 11, 23, 48, 51, 47, 53, 55, 92, 133, 207, 340, 555, 905, 1236, 1446, 1418, 1197, 665, 197]", + "total_badness": 12703.577343 }, { - "ne1d": 1100, - "ne2d": 4024, - "ne3d": 21052, - "quality_histogram": "[4, 13, 25, 31, 48, 32, 41, 40, 77, 141, 257, 450, 846, 1556, 2542, 3449, 4146, 3956, 2679, 719]", - "total_badness": 27767.456205 + "ne1d": 1554, + "ne2d": 6466, + "ne3d": 31866, + "quality_histogram": "[4, 7, 10, 5, 21, 54, 53, 79, 111, 204, 328, 684, 1327, 2460, 3983, 5375, 6122, 5827, 4106, 1106]", + "total_badness": 41304.661508 }, { - "ne1d": 1518, - "ne2d": 8840, - "ne3d": 117428, - "quality_histogram": "[4, 10, 18, 14, 31, 30, 54, 59, 111, 225, 521, 1211, 2798, 6484, 12180, 18799, 24241, 25605, 19083, 5950]", - "total_badness": 145344.31496 + "ne1d": 2992, + "ne2d": 23396, + "ne3d": 276949, + "quality_histogram": "[5, 10, 11, 13, 8, 23, 34, 93, 171, 459, 1121, 2702, 6581, 15040, 28425, 44154, 58179, 60855, 45197, 13868]", + "total_badness": 341180.22628 } ], "revolution.geo": [ @@ -1069,24 +1069,24 @@ "screw.step": [ { "ne1d": 400, - "ne2d": 1428, - "ne3d": 2445, - "quality_histogram": "[0, 0, 0, 0, 0, 3, 9, 85, 96, 179, 195, 223, 282, 305, 283, 308, 202, 161, 89, 25]", - "total_badness": 3866.2182561 + "ne2d": 1426, + "ne3d": 2472, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 12, 81, 91, 181, 174, 234, 298, 277, 288, 283, 242, 190, 101, 19]", + "total_badness": 3876.6679484 }, { - "ne1d": 528, - "ne2d": 2754, - "ne3d": 8177, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 3, 9, 26, 77, 160, 259, 507, 763, 1151, 1319, 1483, 1277, 885, 257]", - "total_badness": 10717.590471 + "ne1d": 530, + "ne2d": 2672, + "ne3d": 7959, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 13, 27, 70, 146, 225, 454, 786, 1144, 1323, 1454, 1239, 822, 250]", + "total_badness": 10425.046404 }, { - "ne1d": 666, - "ne2d": 4934, - "ne3d": 31828, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 8, 21, 58, 177, 347, 799, 1817, 3313, 5119, 6775, 6843, 5106, 1442]", - "total_badness": 39308.002921 + "ne1d": 668, + "ne2d": 4982, + "ne3d": 31524, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 5, 18, 51, 119, 302, 759, 1716, 3303, 5151, 6604, 6989, 5042, 1462]", + "total_badness": 38816.567058 } ], "sculpture.geo": [ @@ -1139,7 +1139,7 @@ "ne2d": 1726, "ne3d": 2758, "quality_histogram": "[5, 19, 22, 27, 27, 37, 60, 74, 82, 160, 296, 372, 295, 251, 231, 278, 234, 181, 86, 21]", - "total_badness": 5318.0297042 + "total_badness": 5318.0297732 }, { "ne1d": 410, @@ -1153,14 +1153,14 @@ "ne2d": 1012, "ne3d": 2088, "quality_histogram": "[20, 46, 76, 95, 111, 105, 97, 134, 91, 101, 96, 141, 150, 177, 193, 168, 177, 56, 41, 13]", - "total_badness": 6181.860032 + "total_badness": 6181.8600404 }, { "ne1d": 708, "ne2d": 1726, "ne3d": 2749, "quality_histogram": "[0, 2, 15, 16, 32, 30, 44, 71, 72, 143, 302, 400, 289, 259, 236, 273, 259, 196, 88, 22]", - "total_badness": 4725.048513 + "total_badness": 4725.048506 }, { "ne1d": 1138, From d4b376024a5ff772ef6a6e0728108656f7334157 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Tue, 8 Oct 2019 12:34:15 +0200 Subject: [PATCH 027/120] Automatically select correct chart in MeshOptimizeSTLSurface::GetNormalVector --- libsrc/stlgeom/meshstlsurface.cpp | 7 +++++++ libsrc/stlgeom/meshstlsurface.hpp | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/libsrc/stlgeom/meshstlsurface.cpp b/libsrc/stlgeom/meshstlsurface.cpp index d7b25e8f..ff1410ca 100644 --- a/libsrc/stlgeom/meshstlsurface.cpp +++ b/libsrc/stlgeom/meshstlsurface.cpp @@ -1108,8 +1108,15 @@ int MeshOptimizeSTLSurface :: CalcPointGeomInfo(PointGeomInfo& gi, const Point< } +void MeshOptimizeSTLSurface :: GetNormalVector(INDEX surfind, const Point<3> & p, PointGeomInfo & gi, Vec<3> & n) const; +{ + throw Exception("MeshOptimizeSTLSurface :: GetNormalVector without PointGeomInfo called"); +} + + void MeshOptimizeSTLSurface :: GetNormalVector(INDEX surfind, const Point<3> & p, Vec<3> & n) const { + geom.SelectChartOfTriangle (gi.trignum) n = geom.GetChartNormalVector(); } diff --git a/libsrc/stlgeom/meshstlsurface.hpp b/libsrc/stlgeom/meshstlsurface.hpp index c12cbff9..6f6c72a9 100644 --- a/libsrc/stlgeom/meshstlsurface.hpp +++ b/libsrc/stlgeom/meshstlsurface.hpp @@ -85,7 +85,8 @@ public: /// virtual int CalcPointGeomInfo(PointGeomInfo& gi, const Point<3> & p3) const; /// - virtual void GetNormalVector(INDEX surfind, const Point<3> & p, Vec<3> & n) const; + void GetNormalVector(INDEX surfind, const Point<3> & p, Vec<3> & n) const override; + void GetNormalVector(INDEX surfind, const Point<3> & p, PointGeomInfo & gi, Vec<3> & n) const override; }; From ed5ea4408fc0a9dfd38325e83fceea1655abc381 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Tue, 8 Oct 2019 12:35:58 +0200 Subject: [PATCH 028/120] Revert "Automatically select correct chart in MeshOptimizeSTLSurface::GetNormalVector" This reverts commit d4b376024a5ff772ef6a6e0728108656f7334157. --- libsrc/stlgeom/meshstlsurface.cpp | 7 ------- libsrc/stlgeom/meshstlsurface.hpp | 3 +-- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/libsrc/stlgeom/meshstlsurface.cpp b/libsrc/stlgeom/meshstlsurface.cpp index ff1410ca..d7b25e8f 100644 --- a/libsrc/stlgeom/meshstlsurface.cpp +++ b/libsrc/stlgeom/meshstlsurface.cpp @@ -1108,15 +1108,8 @@ int MeshOptimizeSTLSurface :: CalcPointGeomInfo(PointGeomInfo& gi, const Point< } -void MeshOptimizeSTLSurface :: GetNormalVector(INDEX surfind, const Point<3> & p, PointGeomInfo & gi, Vec<3> & n) const; -{ - throw Exception("MeshOptimizeSTLSurface :: GetNormalVector without PointGeomInfo called"); -} - - void MeshOptimizeSTLSurface :: GetNormalVector(INDEX surfind, const Point<3> & p, Vec<3> & n) const { - geom.SelectChartOfTriangle (gi.trignum) n = geom.GetChartNormalVector(); } diff --git a/libsrc/stlgeom/meshstlsurface.hpp b/libsrc/stlgeom/meshstlsurface.hpp index 6f6c72a9..c12cbff9 100644 --- a/libsrc/stlgeom/meshstlsurface.hpp +++ b/libsrc/stlgeom/meshstlsurface.hpp @@ -85,8 +85,7 @@ public: /// virtual int CalcPointGeomInfo(PointGeomInfo& gi, const Point<3> & p3) const; /// - void GetNormalVector(INDEX surfind, const Point<3> & p, Vec<3> & n) const override; - void GetNormalVector(INDEX surfind, const Point<3> & p, PointGeomInfo & gi, Vec<3> & n) const override; + virtual void GetNormalVector(INDEX surfind, const Point<3> & p, Vec<3> & n) const; }; From ed087848efe35ff635b8dee13d83a1a7f8632a59 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Tue, 8 Oct 2019 12:41:26 +0200 Subject: [PATCH 029/120] this check is too hard sometimes and prevents some stls from meshing bone.stl fails on moderate because of this --- libsrc/stlgeom/meshstlsurface.cpp | 32 +++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/libsrc/stlgeom/meshstlsurface.cpp b/libsrc/stlgeom/meshstlsurface.cpp index b02d4098..8a1830e5 100644 --- a/libsrc/stlgeom/meshstlsurface.cpp +++ b/libsrc/stlgeom/meshstlsurface.cpp @@ -867,22 +867,22 @@ void STLSurfaceOptimization (STLGeometry & geom, break; } } - while(mesh.CheckOverlappingBoundary()) - { - for(const auto & el : mesh.SurfaceElements()) - { - if(el.BadElement()) - { - cout << "Restrict localh at el nr " << el << endl; - for(const auto& p : el.PNums()) - { - const auto& pnt = mesh[p]; - mesh.RestrictLocalH(pnt, 0.5*mesh.GetH(pnt)); - } - } - } - optmesh.SplitImprove(); - } + // while(mesh.CheckOverlappingBoundary()) + // { + // for(const auto & el : mesh.SurfaceElements()) + // { + // if(el.BadElement()) + // { + // cout << "Restrict localh at el nr " << el << endl; + // for(const auto& p : el.PNums()) + // { + // const auto& pnt = mesh[p]; + // mesh.RestrictLocalH(pnt, 0.5*mesh.GetH(pnt)); + // } + // } + // } + // optmesh.SplitImprove(); + // } //(*testout) << "optimize, after, step = " << meshparam.optimize2d[j-1] << mesh.Point (3679) << endl; } From 893df3a79f103b369319d7f9deaf8590dd32d965 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Tue, 8 Oct 2019 12:42:06 +0200 Subject: [PATCH 030/120] Automatically select correct chart in MeshOptimizeSTLSurface::GetNormalVector --- libsrc/stlgeom/meshstlsurface.cpp | 9 ++++++++- libsrc/stlgeom/meshstlsurface.hpp | 13 +++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/libsrc/stlgeom/meshstlsurface.cpp b/libsrc/stlgeom/meshstlsurface.cpp index d7b25e8f..73416966 100644 --- a/libsrc/stlgeom/meshstlsurface.cpp +++ b/libsrc/stlgeom/meshstlsurface.cpp @@ -1108,9 +1108,16 @@ int MeshOptimizeSTLSurface :: CalcPointGeomInfo(PointGeomInfo& gi, const Point< } +void MeshOptimizeSTLSurface :: GetNormalVector(INDEX surfind, const Point<3> & p, PointGeomInfo & gi, Vec<3> & n) const +{ + geom.SelectChartOfTriangle (gi.trignum); + n = geom.GetChartNormalVector(); +} + + void MeshOptimizeSTLSurface :: GetNormalVector(INDEX surfind, const Point<3> & p, Vec<3> & n) const { - n = geom.GetChartNormalVector(); + throw Exception("MeshOptimizeSTLSurface :: GetNormalVector called without PointGeomInfo"); } diff --git a/libsrc/stlgeom/meshstlsurface.hpp b/libsrc/stlgeom/meshstlsurface.hpp index c12cbff9..9790bdca 100644 --- a/libsrc/stlgeom/meshstlsurface.hpp +++ b/libsrc/stlgeom/meshstlsurface.hpp @@ -76,16 +76,17 @@ public: MeshOptimizeSTLSurface (STLGeometry & ageom); /// - virtual void SelectSurfaceOfPoint (const Point<3> & p, - const PointGeomInfo & gi); + void SelectSurfaceOfPoint (const Point<3> & p, + const PointGeomInfo & gi) override; /// - virtual void ProjectPoint (INDEX surfind, Point<3> & p) const; + void ProjectPoint (INDEX surfind, Point<3> & p) const override; /// - virtual void ProjectPoint2 (INDEX surfind, INDEX surfind2, Point<3> & p) const; + void ProjectPoint2 (INDEX surfind, INDEX surfind2, Point<3> & p) const override; /// - virtual int CalcPointGeomInfo(PointGeomInfo& gi, const Point<3> & p3) const; + int CalcPointGeomInfo(PointGeomInfo& gi, const Point<3> & p3) const override; /// - virtual void GetNormalVector(INDEX surfind, const Point<3> & p, Vec<3> & n) const; + void GetNormalVector(INDEX surfind, const Point<3> & p, Vec<3> & n) const override; + void GetNormalVector(INDEX surfind, const Point<3> & p, PointGeomInfo & gi, Vec<3> & n) const override; }; From fea75d6ff526f17191d2681fc7271deeb76f7b4c Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Tue, 8 Oct 2019 12:44:00 +0200 Subject: [PATCH 031/120] Remove MeshOptimize2d::SelectSurfaceOfPoint() --- libsrc/meshing/improve2.cpp | 5 ----- libsrc/meshing/improve2.hpp | 3 --- libsrc/meshing/improve2gen.cpp | 1 - libsrc/meshing/smoothing2.cpp | 7 ------- libsrc/stlgeom/meshstlsurface.cpp | 9 --------- libsrc/stlgeom/meshstlsurface.hpp | 3 --- 6 files changed, 28 deletions(-) diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index 2fc9f5f4..07e32fef 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -318,12 +318,10 @@ namespace netgen nv2.Normalize(); Vec<3> nvp3, nvp4; - SelectSurfaceOfPoint (mesh.Point(pi3), gi3); GetNormalVector (surfnr, mesh.Point(pi3), gi3, nvp3); nvp3.Normalize(); - SelectSurfaceOfPoint (mesh.Point(pi4), gi4); GetNormalVector (surfnr, mesh.Point(pi4), gi4, nvp4); nvp4.Normalize(); @@ -530,7 +528,6 @@ namespace netgen for (int k = 0; k < 3; k++) if (hel[k] == pi) { - SelectSurfaceOfPoint (mesh[pi], hel.GeomInfoPi(k+1)); GetNormalVector (surfnr, mesh[pi], hel.GeomInfoPi(k+1), normals[pi]); break; } @@ -624,8 +621,6 @@ namespace netgen for (int k = 0; k < 3; k++) if (hel[k] == pi1) { - SelectSurfaceOfPoint (mesh[pi1], - hel.GeomInfoPi(k+1)); GetNormalVector (surfnr, mesh[pi1], hel.GeomInfoPi(k+1), nv); break; } diff --git a/libsrc/meshing/improve2.hpp b/libsrc/meshing/improve2.hpp index c9fbae4b..ec09b237 100644 --- a/libsrc/meshing/improve2.hpp +++ b/libsrc/meshing/improve2.hpp @@ -36,9 +36,6 @@ public: - /// - virtual void SelectSurfaceOfPoint (const Point<3> & p, - const PointGeomInfo & gi); /// virtual void ProjectPoint (INDEX /* surfind */, Point<3> & /* p */) const { }; diff --git a/libsrc/meshing/improve2gen.cpp b/libsrc/meshing/improve2gen.cpp index 2c2b8cb5..07587ed9 100644 --- a/libsrc/meshing/improve2gen.cpp +++ b/libsrc/meshing/improve2gen.cpp @@ -397,7 +397,6 @@ namespace netgen double bad1 = 0, bad2 = 0; Vec<3> n; - SelectSurfaceOfPoint (mesh.Point(pmap.Get(1)), pgi.Get(1)); GetNormalVector (surfnr, mesh.Point(pmap.Get(1)), pgi.Elem(1), n); for (int j = 0; j < rule.oldels.Size(); j++) diff --git a/libsrc/meshing/smoothing2.cpp b/libsrc/meshing/smoothing2.cpp index cc56497c..f28cf10c 100644 --- a/libsrc/meshing/smoothing2.cpp +++ b/libsrc/meshing/smoothing2.cpp @@ -707,12 +707,6 @@ namespace netgen } - void MeshOptimize2d :: SelectSurfaceOfPoint (const Point<3> & p, - const PointGeomInfo & gi) - { - ; - } - void MeshOptimize2d :: ImproveMesh (Mesh & mesh, const MeshingParameters & mp) { if (!faceindex) @@ -959,7 +953,6 @@ namespace netgen } ld.gi1 = hel.GeomInfoPi(hpi); - SelectSurfaceOfPoint (ld.sp1, ld.gi1); ld.locelements.SetSize(0); ld.locrots.SetSize (0); diff --git a/libsrc/stlgeom/meshstlsurface.cpp b/libsrc/stlgeom/meshstlsurface.cpp index 73416966..333ed39d 100644 --- a/libsrc/stlgeom/meshstlsurface.cpp +++ b/libsrc/stlgeom/meshstlsurface.cpp @@ -1064,15 +1064,6 @@ MeshOptimizeSTLSurface :: MeshOptimizeSTLSurface (STLGeometry & ageom) } -void MeshOptimizeSTLSurface :: SelectSurfaceOfPoint (const Point<3> & p, - const PointGeomInfo & gi) -{ - // (*testout) << "sel char: " << gi.trignum << endl; - - geom.SelectChartOfTriangle (gi.trignum); - // geom.SelectChartOfPoint (p); -} - void MeshOptimizeSTLSurface :: ProjectPoint (INDEX surfind, Point<3> & p) const { diff --git a/libsrc/stlgeom/meshstlsurface.hpp b/libsrc/stlgeom/meshstlsurface.hpp index 9790bdca..00cb1277 100644 --- a/libsrc/stlgeom/meshstlsurface.hpp +++ b/libsrc/stlgeom/meshstlsurface.hpp @@ -75,9 +75,6 @@ public: /// MeshOptimizeSTLSurface (STLGeometry & ageom); - /// - void SelectSurfaceOfPoint (const Point<3> & p, - const PointGeomInfo & gi) override; /// void ProjectPoint (INDEX surfind, Point<3> & p) const override; /// From 359b8125eaa2e6fae6cfdb8fe9c5bd2773d67aa4 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Tue, 8 Oct 2019 12:58:31 +0200 Subject: [PATCH 032/120] result file from master --- tests/pytest/results.json | 1350 ++++++++++++++++++------------------- 1 file changed, 675 insertions(+), 675 deletions(-) diff --git a/tests/pytest/results.json b/tests/pytest/results.json index c38cd7a0..6334c27e 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -3,9 +3,9 @@ { "ne1d": 74, "ne2d": 54, - "ne3d": 49, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 6, 13, 2, 12, 4, 0, 1, 2]", - "total_badness": 71.991209508 + "ne3d": 50, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 5, 8, 13, 3, 9, 5, 0, 1, 1]", + "total_badness": 74.774553826 }, { "ne1d": 59, @@ -24,155 +24,155 @@ { "ne1d": 74, "ne2d": 54, - "ne3d": 49, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 6, 13, 2, 12, 4, 0, 1, 2]", - "total_badness": 71.991205092 + "ne3d": 50, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 5, 8, 13, 3, 9, 5, 0, 1, 1]", + "total_badness": 74.77454941 }, { "ne1d": 118, - "ne2d": 128, - "ne3d": 146, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 5, 4, 11, 10, 20, 23, 30, 14, 6, 8, 10, 4]", - "total_badness": 218.29947525 + "ne2d": 140, + "ne3d": 165, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 5, 13, 13, 25, 31, 25, 20, 17, 12, 1]", + "total_badness": 228.72078637 }, { "ne1d": 181, - "ne2d": 293, - "ne3d": 453, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 9, 23, 32, 41, 67, 91, 85, 55, 37, 6]", - "total_badness": 605.80122988 + "ne2d": 323, + "ne3d": 507, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 9, 20, 35, 56, 56, 81, 90, 83, 59, 15]", + "total_badness": 661.00817809 } ], "boxcyl.geo": [ { "ne1d": 190, - "ne2d": 452, - "ne3d": 841, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 3, 23, 119, 77, 90, 116, 110, 79, 85, 77, 45, 13]", - "total_badness": 1250.1700248 + "ne2d": 468, + "ne3d": 858, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 31, 91, 73, 79, 87, 106, 114, 102, 89, 66, 18]", + "total_badness": 1232.0426735 }, { "ne1d": 94, "ne2d": 114, - "ne3d": 156, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 6, 9, 10, 8, 12, 9, 13, 7, 20, 15, 15, 22, 5, 3]", - "total_badness": 257.95680767 + "ne3d": 158, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 7, 10, 16, 5, 8, 15, 13, 17, 13, 9, 25, 7, 11]", + "total_badness": 247.68310336 }, { "ne1d": 136, - "ne2d": 218, - "ne3d": 378, - "quality_histogram": "[0, 0, 0, 1, 1, 1, 1, 3, 14, 20, 20, 34, 45, 51, 41, 52, 56, 18, 19, 1]", - "total_badness": 576.7536717 + "ne2d": 222, + "ne3d": 384, + "quality_histogram": "[0, 0, 1, 0, 3, 3, 3, 6, 11, 17, 21, 28, 34, 44, 68, 64, 49, 19, 11, 2]", + "total_badness": 598.99833044 }, { "ne1d": 190, - "ne2d": 452, - "ne3d": 830, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 1, 21, 116, 81, 89, 105, 110, 79, 92, 75, 47, 11]", - "total_badness": 1226.878881 + "ne2d": 468, + "ne3d": 850, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 29, 87, 73, 75, 86, 106, 97, 112, 87, 75, 21]", + "total_badness": 1214.229893 }, { "ne1d": 284, - "ne2d": 908, - "ne3d": 3647, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 13, 36, 80, 158, 279, 473, 606, 716, 669, 474, 138]", - "total_badness": 4634.0005088 + "ne2d": 938, + "ne3d": 3761, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 20, 59, 118, 250, 456, 628, 751, 755, 564, 153]", + "total_badness": 4693.1208525 }, { "ne1d": 456, - "ne2d": 2444, - "ne3d": 18525, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 3, 25, 53, 178, 437, 946, 1780, 2925, 3860, 4149, 3103, 1063]", - "total_badness": 22663.686748 + "ne2d": 2496, + "ne3d": 18969, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 5, 8, 15, 43, 130, 353, 876, 1713, 3018, 4122, 4317, 3271, 1098]", + "total_badness": 23072.833527 } ], "circle_on_cube.geo": [ { "ne1d": 94, - "ne2d": 154, - "ne3d": 604, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 14, 39, 50, 68, 83, 109, 102, 80, 45, 9]", - "total_badness": 815.17294986 + "ne2d": 174, + "ne3d": 646, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 10, 23, 48, 81, 117, 100, 123, 86, 43, 10]", + "total_badness": 859.43881883 }, { "ne1d": 40, "ne2d": 38, - "ne3d": 53, - "quality_histogram": "[0, 0, 0, 0, 1, 3, 1, 4, 6, 12, 4, 9, 2, 2, 4, 3, 0, 2, 0, 0]", - "total_badness": 109.70868385 + "ne3d": 46, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 2, 4, 8, 8, 6, 7, 5, 1, 2, 1, 0, 0, 0, 0]", + "total_badness": 97.326231112 }, { "ne1d": 62, - "ne2d": 86, - "ne3d": 169, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 1, 7, 8, 18, 23, 25, 18, 25, 22, 14, 7, 0]", - "total_badness": 247.43773483 + "ne2d": 94, + "ne3d": 182, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 14, 21, 35, 35, 33, 19, 9, 8, 0]", + "total_badness": 258.4064329 }, { "ne1d": 94, - "ne2d": 154, - "ne3d": 592, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 12, 34, 35, 57, 92, 97, 118, 80, 45, 16]", - "total_badness": 787.43887104 + "ne2d": 174, + "ne3d": 621, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 11, 45, 59, 93, 114, 121, 104, 53, 14]", + "total_badness": 804.68562065 }, { "ne1d": 138, - "ne2d": 370, - "ne3d": 1924, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 12, 26, 68, 115, 226, 338, 390, 380, 293, 74]", - "total_badness": 2398.6322242 + "ne2d": 382, + "ne3d": 2054, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 15, 57, 129, 210, 330, 426, 450, 321, 109]", + "total_badness": 2526.4427939 }, { "ne1d": 224, - "ne2d": 906, - "ne3d": 11615, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 12, 31, 93, 235, 611, 1173, 1864, 2424, 2590, 1985, 592]", - "total_badness": 14210.918388 + "ne2d": 944, + "ne3d": 11988, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 17, 33, 82, 226, 556, 1140, 1929, 2512, 2801, 2061, 628]", + "total_badness": 14608.275962 } ], "cone.geo": [ { "ne1d": 64, - "ne2d": 714, - "ne3d": 1198, - "quality_histogram": "[0, 0, 0, 0, 1, 4, 18, 24, 50, 78, 87, 135, 129, 149, 140, 140, 105, 89, 38, 11]", - "total_badness": 1899.21263 + "ne2d": 722, + "ne3d": 1231, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 8, 22, 29, 50, 88, 118, 123, 158, 175, 140, 137, 111, 52, 19]", + "total_badness": 1853.3096959 }, { "ne1d": 32, "ne2d": 220, - "ne3d": 737, - "quality_histogram": "[0, 0, 16, 46, 43, 51, 72, 61, 53, 51, 52, 46, 68, 44, 31, 27, 41, 18, 13, 4]", - "total_badness": 1894.7838255 + "ne3d": 753, + "quality_histogram": "[0, 1, 28, 40, 63, 54, 61, 53, 61, 59, 67, 47, 38, 52, 39, 23, 27, 21, 16, 3]", + "total_badness": 2038.817175 }, { "ne1d": 48, - "ne2d": 418, - "ne3d": 694, - "quality_histogram": "[0, 7, 25, 28, 25, 14, 32, 29, 62, 97, 65, 64, 56, 54, 45, 32, 32, 19, 5, 3]", - "total_badness": 1708.6126829 + "ne2d": 428, + "ne3d": 755, + "quality_histogram": "[1, 33, 42, 29, 32, 26, 29, 27, 64, 81, 73, 80, 67, 48, 55, 18, 23, 16, 11, 0]", + "total_badness": 2283.6586444 }, { "ne1d": 64, - "ne2d": 714, - "ne3d": 1174, - "quality_histogram": "[0, 0, 0, 0, 1, 1, 13, 19, 46, 52, 80, 116, 129, 141, 160, 150, 120, 86, 45, 15]", - "total_badness": 1805.767771 + "ne2d": 722, + "ne3d": 1208, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 15, 22, 47, 81, 110, 131, 144, 172, 150, 145, 112, 62, 14]", + "total_badness": 1783.4859474 }, { "ne1d": 96, - "ne2d": 1656, - "ne3d": 4332, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 0, 16, 44, 89, 184, 339, 462, 611, 739, 730, 584, 406, 126]", - "total_badness": 5771.741417 + "ne2d": 1660, + "ne3d": 4423, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 35, 88, 158, 276, 400, 584, 726, 802, 735, 464, 150]", + "total_badness": 5769.9946848 }, { "ne1d": 160, - "ne2d": 4722, - "ne3d": 27116, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 16, 43, 146, 382, 845, 1736, 2853, 4482, 5619, 5559, 4124, 1308]", - "total_badness": 33667.780696 + "ne2d": 4748, + "ne3d": 27126, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 13, 31, 83, 303, 735, 1519, 2944, 4316, 5668, 5807, 4355, 1349]", + "total_badness": 33434.663911 } ], "cube.geo": [ @@ -213,54 +213,54 @@ }, { "ne1d": 72, - "ne2d": 110, - "ne3d": 174, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 6, 10, 18, 17, 22, 27, 30, 23, 12, 4]", - "total_badness": 238.68878057 + "ne2d": 118, + "ne3d": 184, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 10, 7, 19, 18, 37, 33, 33, 14, 6]", + "total_badness": 241.24676972 } ], "cubeandring.geo": [ { "ne1d": 262, - "ne2d": 682, - "ne3d": 2118, - "quality_histogram": "[1, 8, 18, 31, 57, 110, 98, 76, 102, 82, 96, 110, 169, 194, 245, 237, 206, 156, 99, 23]", - "total_badness": 4154.4021114 + "ne2d": 722, + "ne3d": 2188, + "quality_histogram": "[1, 9, 25, 36, 90, 100, 108, 114, 90, 73, 63, 100, 149, 190, 251, 264, 241, 168, 96, 20]", + "total_badness": 4412.1941358 }, { "ne1d": 134, - "ne2d": 156, - "ne3d": 263, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 2, 2, 16, 17, 40, 47, 38, 38, 27, 21, 8, 2]", - "total_badness": 384.77338498 + "ne2d": 162, + "ne3d": 252, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 2, 1, 3, 8, 24, 28, 49, 38, 41, 29, 19, 7, 1]", + "total_badness": 365.81827351 }, { "ne1d": 190, - "ne2d": 276, - "ne3d": 576, - "quality_histogram": "[0, 0, 0, 1, 1, 0, 2, 4, 7, 25, 52, 52, 74, 94, 92, 57, 60, 35, 17, 3]", - "total_badness": 877.04655513 + "ne2d": 298, + "ne3d": 613, + "quality_histogram": "[0, 0, 0, 0, 2, 0, 0, 4, 3, 17, 49, 47, 61, 93, 110, 82, 52, 60, 28, 5]", + "total_badness": 897.54658869 }, { "ne1d": 262, - "ne2d": 682, - "ne3d": 2014, - "quality_histogram": "[0, 0, 2, 21, 42, 92, 89, 58, 93, 59, 79, 94, 133, 179, 225, 269, 231, 218, 103, 27]", - "total_badness": 3541.9483795 + "ne2d": 722, + "ne3d": 2054, + "quality_histogram": "[0, 3, 12, 28, 61, 84, 109, 97, 80, 55, 48, 68, 112, 166, 245, 277, 249, 212, 116, 32]", + "total_badness": 3795.4750393 }, { "ne1d": 378, - "ne2d": 1314, - "ne3d": 7313, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 10, 20, 59, 105, 195, 346, 584, 898, 1274, 1343, 1375, 890, 211]", - "total_badness": 9422.7875587 + "ne2d": 1412, + "ne3d": 7752, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 1, 9, 13, 27, 56, 136, 281, 548, 921, 1256, 1534, 1557, 1091, 320]", + "total_badness": 9761.7065165 }, { "ne1d": 624, - "ne2d": 3792, - "ne3d": 37404, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 10, 16, 49, 139, 345, 895, 2097, 4029, 6066, 7901, 8036, 5989, 1830]", - "total_badness": 46060.601796 + "ne2d": 3942, + "ne3d": 38282, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 10, 28, 117, 334, 795, 2026, 3889, 5942, 8057, 8537, 6447, 2097]", + "total_badness": 46825.777983 } ], "cubeandspheres.geo": [ @@ -268,360 +268,360 @@ "ne1d": 144, "ne2d": 148, "ne3d": 98, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 14, 14, 14, 18, 14, 6, 6, 0, 0]", - "total_badness": 149.18816997 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 18, 19, 13, 20, 2, 9, 1, 0]", + "total_badness": 145.83375109 + }, + { + "ne1d": 144, + "ne2d": 150, + "ne3d": 100, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 7, 10, 16, 18, 15, 17, 6, 5, 4, 0]", + "total_badness": 146.646861 }, { "ne1d": 144, "ne2d": 148, "ne3d": 98, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 11, 11, 17, 13, 16, 18, 3, 6, 0, 0]", - "total_badness": 148.56830588 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 6, 6, 19, 21, 12, 18, 5, 4, 4, 0]", + "total_badness": 145.14580662 }, { "ne1d": 144, "ne2d": 148, "ne3d": 98, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 8, 12, 14, 22, 10, 18, 4, 6, 0, 0]", - "total_badness": 148.71179128 - }, - { - "ne1d": 144, - "ne2d": 148, - "ne3d": 98, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 14, 14, 14, 18, 14, 6, 6, 0, 0]", - "total_badness": 149.18816997 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 18, 19, 13, 20, 2, 9, 1, 0]", + "total_badness": 145.83375109 }, { "ne1d": 264, - "ne2d": 352, - "ne3d": 323, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 17, 30, 42, 35, 42, 44, 22, 38, 30, 16, 5, 0]", - "total_badness": 519.87992051 + "ne2d": 386, + "ne3d": 365, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 6, 24, 31, 43, 39, 53, 35, 44, 51, 28, 9, 0]", + "total_badness": 553.03362076 }, { "ne1d": 428, - "ne2d": 896, - "ne3d": 1041, - "quality_histogram": "[0, 0, 0, 0, 1, 0, 22, 65, 52, 55, 108, 133, 116, 87, 121, 117, 71, 50, 35, 8]", - "total_badness": 1741.9077189 + "ne2d": 930, + "ne3d": 1080, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 19, 59, 37, 100, 136, 100, 123, 162, 160, 66, 65, 28, 22]", + "total_badness": 1684.1500639 } ], "cubemcyl.geo": [ { "ne1d": 142, - "ne2d": 2446, - "ne3d": 20325, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 20, 92, 231, 460, 766, 1183, 1905, 2410, 2914, 3288, 2936, 2375, 1346, 399]", - "total_badness": 28342.436807 + "ne2d": 2488, + "ne3d": 20940, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 22, 78, 213, 367, 738, 1237, 1875, 2588, 3120, 3314, 3117, 2521, 1385, 365]", + "total_badness": 29036.424267 }, { "ne1d": 64, - "ne2d": 614, - "ne3d": 3139, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 17, 29, 33, 83, 171, 248, 355, 443, 490, 441, 384, 266, 139, 39]", - "total_badness": 4570.602164 + "ne2d": 642, + "ne3d": 3203, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 12, 17, 66, 128, 250, 364, 425, 515, 512, 463, 282, 137, 29]", + "total_badness": 4539.3174908 }, { "ne1d": 102, - "ne2d": 1368, - "ne3d": 7908, - "quality_histogram": "[0, 0, 0, 0, 0, 3, 9, 26, 74, 155, 343, 583, 878, 1123, 1166, 1167, 1068, 757, 405, 151]", - "total_badness": 11199.979147 + "ne2d": 1404, + "ne3d": 8421, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 7, 30, 87, 181, 362, 596, 792, 1120, 1271, 1262, 1165, 892, 516, 140]", + "total_badness": 11848.69595 }, { "ne1d": 142, - "ne2d": 2446, - "ne3d": 18974, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 8, 46, 130, 283, 637, 1146, 1993, 2808, 3265, 3451, 2949, 1780, 477]", - "total_badness": 24882.179707 + "ne2d": 2488, + "ne3d": 19608, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 6, 40, 75, 246, 608, 1243, 2030, 2896, 3459, 3612, 2986, 1887, 518]", + "total_badness": 25605.226153 }, { "ne1d": 210, - "ne2d": 5442, - "ne3d": 88762, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 8, 10, 46, 139, 446, 1122, 2673, 5668, 10362, 14952, 18108, 18162, 13099, 3966]", - "total_badness": 110409.45349 + "ne2d": 5508, + "ne3d": 88843, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 23, 113, 364, 946, 2450, 5445, 10022, 14690, 18368, 18746, 13521, 4155]", + "total_badness": 109927.85826 }, { "ne1d": 362, - "ne2d": 14990, - "ne3d": 521283, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 31, 105, 442, 1248, 3487, 9538, 24363, 50655, 81983, 109930, 118710, 92196, 28593]", - "total_badness": 634417.38261 + "ne2d": 15120, + "ne3d": 521218, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 25, 119, 374, 1224, 3269, 9296, 24328, 50521, 82283, 109285, 119759, 91721, 29013]", + "total_badness": 633985.71695 } ], "cubemsphere.geo": [ { "ne1d": 90, - "ne2d": 634, - "ne3d": 4703, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 4, 26, 50, 102, 180, 271, 448, 602, 711, 733, 681, 539, 268, 87]", - "total_badness": 6582.1722514 + "ne2d": 698, + "ne3d": 4877, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 6, 28, 55, 96, 194, 261, 445, 559, 740, 798, 698, 576, 333, 87]", + "total_badness": 6790.976699 }, { "ne1d": 44, - "ne2d": 220, - "ne3d": 592, - "quality_histogram": "[0, 0, 0, 0, 0, 3, 11, 24, 38, 55, 74, 77, 81, 69, 58, 49, 30, 20, 3, 0]", - "total_badness": 1025.6506383 + "ne2d": 280, + "ne3d": 783, + "quality_histogram": "[0, 0, 0, 0, 1, 2, 6, 19, 38, 61, 70, 94, 100, 91, 104, 76, 58, 38, 24, 1]", + "total_badness": 1271.4564508 }, { "ne1d": 68, - "ne2d": 376, - "ne3d": 1507, - "quality_histogram": "[0, 0, 0, 1, 0, 0, 1, 8, 27, 33, 82, 130, 185, 226, 255, 212, 182, 90, 63, 12]", - "total_badness": 2204.9089212 + "ne2d": 402, + "ne3d": 1571, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 12, 20, 68, 134, 170, 243, 246, 237, 214, 145, 59, 17]", + "total_badness": 2230.374452 }, { "ne1d": 90, - "ne2d": 634, - "ne3d": 4404, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 9, 24, 77, 158, 268, 476, 650, 823, 776, 659, 379, 104]", - "total_badness": 5795.3747481 + "ne2d": 698, + "ne3d": 4583, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 9, 25, 77, 128, 251, 516, 657, 826, 857, 685, 432, 116]", + "total_badness": 5995.4068967 }, { "ne1d": 146, - "ne2d": 1378, - "ne3d": 17460, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 6, 39, 98, 248, 602, 1147, 1971, 2860, 3607, 3614, 2512, 754]", - "total_badness": 21776.503681 + "ne2d": 1490, + "ne3d": 17783, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 11, 31, 90, 203, 496, 1110, 1957, 3109, 3695, 3723, 2641, 714]", + "total_badness": 22085.583903 }, { "ne1d": 248, - "ne2d": 4172, - "ne3d": 112451, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 12, 36, 142, 362, 921, 2362, 5754, 11538, 18135, 23443, 25137, 18809, 5798]", - "total_badness": 137714.88539 + "ne2d": 4356, + "ne3d": 113522, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 9, 35, 117, 341, 885, 2307, 5764, 11384, 18322, 23667, 25754, 19043, 5893]", + "total_badness": 138835.8933 } ], "cylinder.geo": [ { "ne1d": 52, "ne2d": 288, - "ne3d": 373, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 17, 48, 41, 57, 46, 46, 40, 40, 21, 10, 1]", - "total_badness": 570.55070099 + "ne3d": 413, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 10, 18, 31, 43, 56, 76, 61, 45, 47, 18, 5]", + "total_badness": 584.63640908 }, { "ne1d": 24, "ne2d": 66, - "ne3d": 113, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 5, 11, 14, 21, 20, 26, 5, 7]", - "total_badness": 144.11768709 + "ne3d": 103, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 7, 15, 14, 21, 32, 10, 1]", + "total_badness": 127.27629078 }, { "ne1d": 36, "ne2d": 152, - "ne3d": 350, - "quality_histogram": "[7, 11, 19, 25, 33, 33, 23, 20, 37, 19, 9, 14, 28, 12, 12, 4, 32, 4, 6, 2]", - "total_badness": 1478.5840853 + "ne3d": 437, + "quality_histogram": "[0, 0, 14, 22, 37, 32, 30, 36, 31, 29, 34, 25, 27, 28, 22, 16, 33, 9, 9, 3]", + "total_badness": 1146.634165 }, { "ne1d": 52, "ne2d": 288, - "ne3d": 373, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 17, 48, 40, 56, 45, 48, 40, 40, 22, 10, 1]", - "total_badness": 570.48747936 + "ne3d": 411, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 15, 29, 37, 61, 76, 59, 48, 52, 21, 3]", + "total_badness": 574.34537671 }, { "ne1d": 76, "ne2d": 636, - "ne3d": 1137, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 7, 27, 48, 71, 98, 132, 182, 156, 180, 136, 79, 19]", - "total_badness": 1578.5996937 + "ne3d": 1155, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 10, 16, 50, 99, 120, 164, 206, 224, 139, 105, 18]", + "total_badness": 1536.3995031 }, { "ne1d": 124, - "ne2d": 1666, - "ne3d": 8088, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 1, 8, 24, 76, 190, 400, 860, 1346, 1715, 1707, 1320, 440]", - "total_badness": 9920.5591087 + "ne2d": 1672, + "ne3d": 8102, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 13, 53, 167, 414, 787, 1233, 1788, 1856, 1334, 453]", + "total_badness": 9877.1010566 } ], "cylsphere.geo": [ { "ne1d": 104, "ne2d": 496, - "ne3d": 769, - "quality_histogram": "[0, 0, 0, 0, 1, 1, 8, 10, 20, 31, 64, 104, 111, 105, 113, 63, 69, 47, 18, 4]", - "total_badness": 1205.3563502 + "ne3d": 711, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 10, 16, 35, 64, 89, 107, 102, 100, 57, 59, 50, 17, 2]", + "total_badness": 1105.7991926 }, { "ne1d": 48, - "ne2d": 134, - "ne3d": 238, - "quality_histogram": "[0, 0, 0, 12, 19, 26, 14, 10, 19, 14, 10, 13, 23, 9, 9, 9, 16, 29, 6, 0]", - "total_badness": 566.26384849 + "ne2d": 140, + "ne3d": 225, + "quality_histogram": "[0, 0, 1, 13, 20, 34, 20, 21, 7, 6, 2, 8, 13, 18, 10, 23, 13, 7, 9, 0]", + "total_badness": 584.42426831 }, { "ne1d": 72, - "ne2d": 320, - "ne3d": 543, - "quality_histogram": "[0, 0, 0, 1, 6, 18, 30, 55, 48, 44, 51, 46, 50, 26, 42, 37, 44, 17, 22, 6]", - "total_badness": 1046.4044454 + "ne2d": 324, + "ne3d": 665, + "quality_histogram": "[0, 1, 9, 14, 21, 37, 57, 76, 63, 57, 53, 60, 32, 54, 23, 35, 39, 16, 13, 5]", + "total_badness": 1528.6973752 }, { "ne1d": 104, "ne2d": 496, - "ne3d": 763, - "quality_histogram": "[0, 0, 0, 0, 1, 1, 6, 8, 15, 24, 53, 92, 109, 105, 114, 87, 71, 48, 28, 1]", - "total_badness": 1166.824818 + "ne3d": 709, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 6, 15, 27, 62, 89, 110, 109, 90, 68, 66, 45, 15, 4]", + "total_badness": 1092.2233629 }, { "ne1d": 152, "ne2d": 1084, - "ne3d": 2754, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 18, 57, 104, 179, 269, 338, 409, 497, 462, 330, 86]", - "total_badness": 3593.8604452 + "ne3d": 2865, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 3, 28, 44, 88, 157, 276, 340, 471, 505, 493, 358, 99]", + "total_badness": 3710.287399 }, { "ne1d": 248, - "ne2d": 2796, - "ne3d": 17632, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 14, 65, 169, 393, 961, 1708, 2855, 3774, 3844, 2922, 922]", - "total_badness": 21617.406219 + "ne2d": 2820, + "ne3d": 17765, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 15, 48, 129, 362, 859, 1699, 2843, 3786, 4041, 3023, 954]", + "total_badness": 21668.180843 } ], "ellipsoid.geo": [ { "ne1d": 0, - "ne2d": 680, - "ne3d": 1253, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 11, 20, 53, 100, 111, 111, 155, 149, 154, 148, 135, 63, 34, 7]", - "total_badness": 1985.7030805 + "ne2d": 704, + "ne3d": 1262, + "quality_histogram": "[0, 0, 0, 0, 1, 0, 8, 26, 39, 86, 118, 127, 178, 146, 148, 147, 107, 76, 43, 12]", + "total_badness": 1984.8094939 }, { "ne1d": 0, - "ne2d": 178, - "ne3d": 868, - "quality_histogram": "[4, 98, 135, 97, 109, 65, 50, 59, 43, 52, 38, 31, 31, 17, 17, 9, 6, 4, 3, 0]", - "total_badness": 4464.8470583 + "ne2d": 192, + "ne3d": 942, + "quality_histogram": "[22, 148, 137, 126, 91, 56, 81, 69, 47, 36, 29, 32, 23, 13, 12, 9, 5, 5, 1, 0]", + "total_badness": 5747.5204438 }, { "ne1d": 0, - "ne2d": 382, - "ne3d": 580, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 4, 14, 25, 55, 78, 93, 94, 67, 62, 37, 33, 12, 2]", - "total_badness": 904.85287903 + "ne2d": 394, + "ne3d": 598, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 15, 17, 44, 69, 81, 100, 91, 53, 54, 39, 20, 9]", + "total_badness": 903.65236615 }, { "ne1d": 0, - "ne2d": 680, - "ne3d": 1247, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 12, 46, 72, 103, 109, 149, 167, 171, 151, 126, 86, 36, 15]", - "total_badness": 1912.2663825 + "ne2d": 704, + "ne3d": 1256, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 18, 35, 52, 103, 128, 169, 173, 155, 154, 121, 81, 49, 18]", + "total_badness": 1908.051206 }, { "ne1d": 0, - "ne2d": 1598, - "ne3d": 5187, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 12, 30, 120, 186, 330, 487, 671, 818, 900, 916, 552, 163]", - "total_badness": 6777.2750162 + "ne2d": 1618, + "ne3d": 5592, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 22, 74, 178, 307, 491, 711, 944, 1067, 921, 675, 199]", + "total_badness": 7199.7867843 }, { "ne1d": 0, - "ne2d": 4194, - "ne3d": 37326, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 4, 4, 15, 38, 101, 309, 805, 1892, 3619, 5837, 7850, 8414, 6510, 1927]", - "total_badness": 45621.246486 + "ne2d": 4236, + "ne3d": 41345, + "quality_histogram": "[0, 0, 0, 0, 3, 20, 108, 266, 403, 644, 1110, 1904, 2921, 4621, 6100, 6869, 6568, 5527, 3324, 957]", + "total_badness": 56476.648492 } ], "ellipticcone.geo": [ { "ne1d": 174, - "ne2d": 1514, - "ne3d": 5133, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 14, 23, 82, 130, 251, 424, 603, 797, 868, 844, 647, 341, 107]", - "total_badness": 6981.6197599 + "ne2d": 1556, + "ne3d": 5213, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 7, 26, 47, 141, 216, 357, 555, 760, 902, 879, 712, 459, 151]", + "total_badness": 6957.997336 }, { "ne1d": 86, - "ne2d": 368, - "ne3d": 589, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 14, 16, 25, 60, 55, 55, 68, 70, 73, 70, 48, 30, 5]", - "total_badness": 894.91658405 + "ne2d": 380, + "ne3d": 587, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 8, 8, 14, 33, 55, 67, 67, 76, 85, 69, 56, 32, 14]", + "total_badness": 853.7762584 }, { "ne1d": 130, - "ne2d": 834, - "ne3d": 1605, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 6, 24, 40, 69, 119, 192, 205, 235, 242, 200, 161, 86, 23]", - "total_badness": 2293.3504808 + "ne2d": 864, + "ne3d": 1780, + "quality_histogram": "[0, 0, 0, 1, 3, 4, 12, 22, 34, 43, 79, 96, 136, 191, 227, 251, 258, 253, 129, 41]", + "total_badness": 2537.0484182 }, { "ne1d": 174, - "ne2d": 1514, - "ne3d": 4920, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 1, 24, 68, 142, 286, 532, 774, 876, 900, 747, 441, 128]", - "total_badness": 6425.5732257 + "ne2d": 1556, + "ne3d": 4971, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 17, 53, 107, 248, 431, 665, 897, 978, 791, 593, 187]", + "total_badness": 6359.4493283 }, { "ne1d": 258, - "ne2d": 3350, - "ne3d": 13033, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 7, 35, 106, 181, 363, 681, 1120, 1738, 2146, 2478, 2187, 1501, 486]", - "total_badness": 16847.718951 + "ne2d": 3454, + "ne3d": 13441, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 8, 29, 62, 198, 341, 643, 1044, 1682, 2259, 2506, 2486, 1671, 511]", + "total_badness": 17201.441954 }, { "ne1d": 432, - "ne2d": 9278, - "ne3d": 69660, - "quality_histogram": "[0, 0, 0, 0, 3, 5, 9, 30, 75, 155, 423, 954, 2071, 4217, 7619, 11353, 14206, 14652, 10674, 3214]", - "total_badness": 86601.731893 + "ne2d": 9518, + "ne3d": 69596, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 40, 121, 306, 826, 1862, 3802, 7575, 11204, 14503, 14913, 11126, 3312]", + "total_badness": 85930.227173 } ], "ellipticcyl.geo": [ { "ne1d": 156, - "ne2d": 962, - "ne3d": 2143, - "quality_histogram": "[0, 0, 0, 0, 1, 3, 4, 22, 46, 68, 111, 155, 207, 300, 298, 285, 264, 221, 121, 37]", - "total_badness": 3112.7584751 + "ne2d": 994, + "ne3d": 2275, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 10, 26, 44, 84, 125, 208, 263, 341, 376, 326, 261, 175, 35]", + "total_badness": 3156.3970605 }, { "ne1d": 76, - "ne2d": 234, + "ne2d": 238, "ne3d": 325, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 16, 23, 20, 48, 68, 50, 40, 32, 17, 5]", - "total_badness": 453.9976362 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 18, 28, 26, 37, 71, 54, 46, 27, 10, 2]", + "total_badness": 459.39040523 }, { "ne1d": 116, - "ne2d": 588, - "ne3d": 1087, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 5, 12, 24, 58, 102, 152, 175, 168, 178, 116, 75, 20]", - "total_badness": 1485.3521875 + "ne2d": 596, + "ne3d": 1114, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 10, 17, 41, 80, 144, 172, 205, 165, 155, 97, 25]", + "total_badness": 1483.3007518 }, { "ne1d": 156, - "ne2d": 962, - "ne3d": 2073, - "quality_histogram": "[0, 0, 0, 0, 0, 3, 3, 12, 21, 57, 74, 130, 165, 270, 319, 299, 291, 238, 155, 36]", - "total_badness": 2905.3559173 + "ne2d": 994, + "ne3d": 2199, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 8, 35, 43, 95, 163, 238, 314, 377, 378, 307, 193, 45]", + "total_badness": 2944.2434449 }, { "ne1d": 232, - "ne2d": 2134, - "ne3d": 8123, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 14, 25, 66, 136, 318, 644, 1021, 1431, 1662, 1489, 1001, 314]", - "total_badness": 10284.60484 + "ne2d": 2198, + "ne3d": 8225, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 5, 9, 46, 106, 269, 605, 988, 1459, 1629, 1655, 1138, 313]", + "total_badness": 10297.191925 }, { "ne1d": 388, - "ne2d": 5968, - "ne3d": 55441, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 6, 13, 49, 145, 382, 944, 2547, 5198, 8766, 11807, 12906, 9584, 3094]", - "total_badness": 67425.887286 + "ne2d": 6124, + "ne3d": 55078, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 10, 28, 97, 356, 939, 2483, 5114, 8528, 11618, 12908, 9908, 3088]", + "total_badness": 66822.93034 } ], "fichera.geo": [ { "ne1d": 50, "ne2d": 38, - "ne3d": 35, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 0, 14, 6, 4, 3, 0, 0, 0]", - "total_badness": 52.723984269 + "ne3d": 40, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 4, 3, 5, 7, 8, 2, 1, 0, 2]", + "total_badness": 62.361996883 }, { "ne1d": 42, @@ -640,90 +640,90 @@ { "ne1d": 50, "ne2d": 38, - "ne3d": 35, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 0, 14, 6, 4, 3, 0, 0, 0]", - "total_badness": 52.723984269 + "ne3d": 40, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 4, 3, 5, 7, 8, 2, 1, 0, 2]", + "total_badness": 62.361996883 }, { "ne1d": 96, - "ne2d": 106, - "ne3d": 179, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 10, 20, 26, 30, 24, 23, 20, 12, 6]", - "total_badness": 245.27475687 + "ne2d": 118, + "ne3d": 208, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 6, 10, 16, 24, 36, 33, 41, 30, 6]", + "total_badness": 266.1986561 }, { "ne1d": 144, - "ne2d": 254, - "ne3d": 517, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 5, 18, 36, 63, 77, 102, 79, 72, 50, 9]", - "total_badness": 684.87955167 + "ne2d": 274, + "ne3d": 514, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 14, 32, 55, 87, 97, 91, 71, 52, 13]", + "total_badness": 666.67507269 } ], "frame.step": [ { "ne1d": 12694, - "ne2d": 40332, - "ne3d": 219871, - "quality_histogram": "[6, 17, 44, 80, 144, 282, 622, 1386, 2744, 4711, 7763, 12601, 18734, 26125, 30767, 33959, 32515, 26161, 16434, 4776]", - "total_badness": 308302.22502 + "ne2d": 40474, + "ne3d": 221182, + "quality_histogram": "[2, 7, 8, 9, 8, 45, 297, 719, 1786, 3439, 6255, 10896, 17573, 25401, 32432, 35856, 35294, 28822, 17734, 4599]", + "total_badness": 301822.09951 }, { "ne1d": 6026, - "ne2d": 11628, - "ne3d": 31342, - "quality_histogram": "[5, 23, 31, 67, 108, 202, 376, 605, 929, 1349, 2047, 2892, 3463, 3840, 4298, 3992, 3263, 2153, 1276, 423]", - "total_badness": 49470.722238 + "ne2d": 11330, + "ne3d": 33930, + "quality_histogram": "[4, 44, 54, 95, 236, 493, 862, 1288, 1877, 2386, 2810, 3502, 3735, 3948, 3901, 3241, 2597, 1776, 871, 210]", + "total_badness": 59128.564033 }, { "ne1d": 9704, - "ne2d": 25206, - "ne3d": 96716, - "quality_histogram": "[18, 50, 120, 346, 612, 1385, 2473, 3464, 4660, 6070, 7868, 8980, 10994, 11496, 10655, 9863, 7951, 5390, 3181, 1140]", - "total_badness": 165439.49583 + "ne2d": 24358, + "ne3d": 85648, + "quality_histogram": "[2, 6, 5, 10, 5, 24, 87, 165, 425, 1072, 2383, 4552, 7532, 10936, 13505, 14259, 13226, 10274, 5670, 1510]", + "total_badness": 117436.51999 } ], "hinge.stl": [ { "ne1d": 456, "ne2d": 1230, - "ne3d": 1982, - "quality_histogram": "[0, 0, 0, 1, 2, 1, 4, 8, 22, 45, 68, 119, 169, 255, 300, 273, 286, 241, 147, 41]", - "total_badness": 2769.400459 + "ne3d": 1990, + "quality_histogram": "[0, 0, 0, 0, 1, 2, 3, 9, 21, 47, 69, 116, 164, 237, 326, 280, 298, 225, 151, 41]", + "total_badness": 2772.6154636 }, { "ne1d": 298, - "ne2d": 614, - "ne3d": 778, - "quality_histogram": "[0, 0, 0, 0, 12, 11, 21, 18, 43, 53, 58, 71, 88, 85, 92, 93, 60, 44, 22, 7]", - "total_badness": 1321.0009733 + "ne2d": 608, + "ne3d": 770, + "quality_histogram": "[0, 0, 0, 1, 10, 9, 19, 15, 35, 46, 62, 87, 79, 89, 83, 87, 64, 45, 30, 9]", + "total_badness": 1284.6220542 }, { "ne1d": 370, - "ne2d": 856, - "ne3d": 1137, - "quality_histogram": "[0, 0, 0, 0, 2, 7, 12, 20, 30, 43, 62, 114, 125, 155, 157, 182, 105, 64, 44, 15]", - "total_badness": 1746.193159 + "ne2d": 854, + "ne3d": 1130, + "quality_histogram": "[0, 0, 0, 0, 2, 4, 17, 25, 26, 34, 64, 107, 137, 161, 156, 181, 93, 73, 42, 8]", + "total_badness": 1739.2621504 }, { "ne1d": 516, "ne2d": 1584, - "ne3d": 2541, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 7, 7, 22, 58, 110, 180, 233, 292, 361, 381, 338, 309, 196, 47]", - "total_badness": 3554.0634047 + "ne3d": 2549, + "quality_histogram": "[0, 0, 0, 0, 2, 1, 7, 19, 30, 53, 121, 174, 224, 296, 384, 362, 331, 304, 201, 40]", + "total_badness": 3600.6650263 }, { "ne1d": 722, "ne2d": 2888, - "ne3d": 6849, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 2, 18, 24, 66, 167, 352, 617, 884, 1136, 1241, 1156, 907, 278]", - "total_badness": 8770.1231664 + "ne3d": 6818, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 12, 29, 67, 167, 379, 655, 877, 1099, 1146, 1177, 948, 258]", + "total_badness": 8742.2896959 }, { "ne1d": 1862, "ne2d": 19516, - "ne3d": 138101, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 7, 31, 129, 400, 1163, 2873, 7052, 13502, 21822, 29035, 31031, 23540, 7514]", - "total_badness": 168731.72877 + "ne3d": 135482, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 6, 30, 145, 444, 1158, 3034, 7025, 13447, 21335, 28448, 30344, 22953, 7112]", + "total_badness": 165806.81509 } ], "lshape3d.geo": [ @@ -757,93 +757,93 @@ }, { "ne1d": 80, - "ne2d": 66, - "ne3d": 73, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 9, 9, 9, 17, 14, 2, 3, 6]", - "total_badness": 97.371969345 + "ne2d": 76, + "ne3d": 88, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 10, 9, 21, 23, 7, 6, 1, 4]", + "total_badness": 121.1271849 }, { "ne1d": 122, - "ne2d": 190, - "ne3d": 304, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 6, 8, 20, 38, 34, 59, 55, 27, 37, 9]", - "total_badness": 408.34610106 + "ne2d": 204, + "ne3d": 331, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 7, 21, 26, 41, 39, 61, 57, 46, 24, 7]", + "total_badness": 443.95235947 } ], "manyholes.geo": [ { "ne1d": 5886, - "ne2d": 46994, - "ne3d": 178258, - "quality_histogram": "[0, 0, 0, 0, 8, 50, 338, 268, 1001, 1782, 4230, 9114, 12778, 22138, 26582, 30068, 28574, 22323, 12911, 6093]", - "total_badness": 241077.60229 + "ne2d": 48038, + "ne3d": 179405, + "quality_histogram": "[0, 0, 2, 1, 8, 27, 65, 207, 559, 1418, 3370, 7627, 12710, 20134, 27407, 30177, 29994, 24813, 16843, 4043]", + "total_badness": 238774.17579 }, { "ne1d": 2746, - "ne2d": 13378, - "ne3d": 29015, - "quality_histogram": "[0, 0, 0, 0, 11, 36, 101, 261, 569, 928, 1565, 2421, 3036, 3930, 4729, 4059, 2750, 2077, 1180, 1362]", - "total_badness": 42502.70594 + "ne2d": 13838, + "ne3d": 29184, + "quality_histogram": "[0, 0, 0, 1, 5, 26, 45, 181, 387, 817, 1524, 2280, 3331, 4394, 4120, 3700, 3202, 2567, 1880, 724]", + "total_badness": 42098.721268 }, { "ne1d": 4106, - "ne2d": 27348, - "ne3d": 69176, - "quality_histogram": "[0, 0, 0, 3, 31, 109, 199, 524, 999, 1835, 3521, 5175, 7195, 10701, 9247, 9303, 8279, 6175, 3449, 2431]", - "total_badness": 99864.410415 + "ne2d": 27992, + "ne3d": 70789, + "quality_histogram": "[0, 0, 0, 2, 30, 78, 189, 443, 837, 1706, 2919, 4402, 7061, 9455, 10197, 10269, 9498, 7395, 4474, 1834]", + "total_badness": 100213.31676 } ], "manyholes2.geo": [ { "ne1d": 10202, - "ne2d": 53486, - "ne3d": 139190, - "quality_histogram": "[0, 1, 168, 441, 975, 1689, 2691, 3289, 4667, 5762, 8158, 11621, 13472, 16651, 21820, 18509, 12164, 7790, 3882, 5440]", - "total_badness": 223824.49195 + "ne2d": 55340, + "ne3d": 128088, + "quality_histogram": "[0, 0, 0, 0, 7, 30, 95, 288, 823, 2105, 4573, 7847, 11840, 18008, 18739, 18350, 16782, 14747, 10264, 3590]", + "total_badness": 176960.02706 } ], "matrix.geo": [ { "ne1d": 174, - "ne2d": 1084, - "ne3d": 4699, - "quality_histogram": "[0, 0, 13, 73, 49, 72, 104, 195, 232, 324, 348, 450, 518, 514, 513, 418, 364, 308, 157, 47]", - "total_badness": 8342.3218051 + "ne2d": 1194, + "ne3d": 5295, + "quality_histogram": "[0, 0, 32, 147, 135, 100, 130, 147, 177, 237, 361, 409, 554, 617, 583, 555, 457, 385, 212, 57]", + "total_badness": 9761.5954211 }, { "ne1d": 106, - "ne2d": 566, - "ne3d": 1890, - "quality_histogram": "[0, 6, 46, 100, 165, 157, 187, 195, 175, 172, 157, 126, 113, 91, 67, 50, 34, 20, 19, 10]", - "total_badness": 5257.1128921 + "ne2d": 600, + "ne3d": 2001, + "quality_histogram": "[0, 3, 20, 65, 122, 160, 137, 169, 184, 189, 172, 190, 184, 137, 89, 53, 45, 54, 20, 8]", + "total_badness": 4865.5803344 }, { "ne1d": 132, - "ne2d": 760, - "ne3d": 2545, - "quality_histogram": "[0, 0, 12, 35, 55, 94, 105, 187, 268, 293, 293, 266, 233, 187, 152, 115, 121, 65, 49, 15]", - "total_badness": 5261.0373333 + "ne2d": 828, + "ne3d": 2783, + "quality_histogram": "[0, 0, 13, 51, 108, 146, 173, 161, 225, 265, 333, 287, 211, 205, 173, 161, 117, 93, 45, 16]", + "total_badness": 5980.1022567 }, { "ne1d": 174, - "ne2d": 1084, - "ne3d": 4585, - "quality_histogram": "[0, 0, 11, 44, 38, 56, 90, 162, 223, 280, 328, 417, 462, 526, 487, 490, 431, 301, 185, 54]", - "total_badness": 7814.6531832 + "ne2d": 1194, + "ne3d": 5105, + "quality_histogram": "[0, 0, 20, 134, 116, 78, 117, 149, 152, 188, 285, 371, 498, 547, 578, 611, 503, 441, 254, 63]", + "total_badness": 9068.0076408 }, { "ne1d": 248, - "ne2d": 2214, - "ne3d": 15658, - "quality_histogram": "[0, 0, 0, 2, 2, 20, 40, 101, 153, 301, 415, 740, 1135, 1544, 1997, 2392, 2499, 2362, 1552, 403]", - "total_badness": 21309.771439 + "ne2d": 2324, + "ne3d": 16255, + "quality_histogram": "[0, 0, 0, 0, 0, 5, 24, 75, 128, 202, 346, 678, 1062, 1517, 2149, 2515, 2754, 2540, 1722, 538]", + "total_badness": 21663.043545 }, { "ne1d": 418, - "ne2d": 5826, - "ne3d": 100044, - "quality_histogram": "[0, 0, 0, 1, 3, 12, 22, 40, 112, 259, 681, 1477, 3255, 6325, 10800, 16144, 20094, 20986, 15199, 4634]", - "total_badness": 124683.88481 + "ne2d": 5966, + "ne3d": 100388, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 6, 24, 71, 195, 503, 1186, 2824, 5989, 10497, 16251, 20497, 21258, 16049, 5037]", + "total_badness": 124129.95267 } ], "ortho.geo": [ @@ -884,473 +884,473 @@ }, { "ne1d": 72, - "ne2d": 110, - "ne3d": 172, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 10, 15, 17, 30, 27, 25, 30, 7, 5]", - "total_badness": 232.48733688 + "ne2d": 116, + "ne3d": 180, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 14, 9, 27, 39, 31, 30, 17, 5]", + "total_badness": 233.34798934 } ], "part1.stl": [ { "ne1d": 170, - "ne2d": 452, - "ne3d": 1221, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 9, 15, 14, 42, 45, 91, 129, 124, 150, 175, 182, 137, 87, 19]", - "total_badness": 1752.7121974 + "ne2d": 454, + "ne3d": 1228, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 5, 20, 38, 51, 111, 128, 195, 211, 190, 152, 90, 31]", + "total_badness": 1672.6379358 }, { "ne1d": 112, - "ne2d": 210, - "ne3d": 331, - "quality_histogram": "[0, 0, 1, 0, 6, 6, 9, 13, 20, 24, 35, 36, 36, 42, 35, 26, 25, 9, 7, 1]", - "total_badness": 593.98191451 + "ne2d": 212, + "ne3d": 346, + "quality_histogram": "[0, 0, 0, 3, 8, 8, 8, 9, 19, 25, 40, 40, 35, 39, 38, 37, 17, 14, 5, 1]", + "total_badness": 629.86936176 }, { "ne1d": 134, - "ne2d": 286, - "ne3d": 519, - "quality_histogram": "[0, 0, 0, 0, 1, 3, 4, 5, 11, 9, 28, 39, 66, 73, 64, 71, 65, 46, 28, 6]", - "total_badness": 768.26259551 + "ne2d": 288, + "ne3d": 523, + "quality_histogram": "[0, 0, 0, 0, 0, 5, 5, 4, 14, 15, 32, 48, 68, 67, 66, 76, 44, 43, 29, 7]", + "total_badness": 790.86141744 }, { "ne1d": 194, - "ne2d": 592, - "ne3d": 1740, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 8, 29, 68, 110, 201, 256, 293, 262, 269, 195, 46]", - "total_badness": 2286.299101 + "ne2d": 594, + "ne3d": 1742, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 5, 9, 40, 88, 126, 192, 280, 281, 279, 241, 165, 34]", + "total_badness": 2325.4945287 }, { "ne1d": 266, "ne2d": 990, - "ne3d": 4048, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 7, 14, 39, 67, 175, 322, 533, 730, 789, 739, 499, 134]", - "total_badness": 5148.0493548 + "ne3d": 4103, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 13, 28, 69, 162, 317, 534, 761, 831, 732, 513, 140]", + "total_badness": 5196.8765579 }, { "ne1d": 674, "ne2d": 6870, - "ne3d": 84183, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 21, 60, 225, 579, 1748, 4156, 8065, 12832, 17827, 19301, 14804, 4562]", - "total_badness": 102573.89785 + "ne3d": 82768, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 14, 59, 188, 513, 1613, 4088, 7976, 12954, 17553, 18871, 14413, 4526]", + "total_badness": 100797.22838 } ], "period.geo": [ { "ne1d": 344, - "ne2d": 1084, - "ne3d": 3278, - "quality_histogram": "[0, 5, 14, 14, 23, 25, 47, 84, 110, 154, 256, 310, 348, 386, 396, 354, 307, 234, 155, 56]", - "total_badness": 5432.5002888 + "ne2d": 1130, + "ne3d": 3294, + "quality_histogram": "[0, 0, 0, 0, 0, 11, 22, 35, 81, 112, 210, 253, 402, 409, 494, 439, 371, 274, 135, 46]", + "total_badness": 4918.0434035 }, { "ne1d": 160, - "ne2d": 266, - "ne3d": 587, - "quality_histogram": "[0, 0, 1, 6, 17, 26, 27, 41, 51, 52, 39, 54, 43, 44, 41, 44, 24, 47, 20, 10]", - "total_badness": 1164.3298304 + "ne2d": 286, + "ne3d": 659, + "quality_histogram": "[0, 4, 8, 11, 15, 22, 23, 30, 40, 58, 66, 57, 66, 59, 57, 36, 43, 42, 16, 6]", + "total_badness": 1346.7559432 }, { "ne1d": 232, - "ne2d": 542, - "ne3d": 1307, - "quality_histogram": "[0, 0, 2, 8, 20, 50, 54, 71, 94, 89, 105, 157, 139, 116, 109, 84, 104, 51, 33, 21]", - "total_badness": 2452.0445067 + "ne2d": 590, + "ne3d": 1593, + "quality_histogram": "[0, 0, 21, 30, 45, 47, 61, 92, 104, 145, 141, 138, 146, 148, 134, 114, 107, 63, 46, 11]", + "total_badness": 3241.6735555 }, { "ne1d": 344, - "ne2d": 1084, - "ne3d": 3191, - "quality_histogram": "[0, 1, 5, 6, 22, 12, 27, 55, 85, 133, 225, 274, 317, 391, 403, 388, 344, 252, 180, 71]", - "total_badness": 4959.2612367 + "ne2d": 1130, + "ne3d": 3209, + "quality_histogram": "[0, 0, 0, 0, 0, 4, 19, 29, 56, 85, 162, 229, 352, 413, 479, 468, 390, 320, 156, 47]", + "total_badness": 4660.4012194 }, { "ne1d": 480, - "ne2d": 2170, - "ne3d": 11358, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 8, 32, 78, 156, 319, 661, 1069, 1444, 1903, 2141, 1909, 1239, 399]", - "total_badness": 14721.191349 + "ne2d": 2260, + "ne3d": 11824, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 15, 44, 152, 298, 546, 944, 1504, 2045, 2229, 2105, 1531, 408]", + "total_badness": 15109.078092 }, { "ne1d": 820, - "ne2d": 6080, - "ne3d": 67352, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 28, 98, 306, 824, 1965, 4113, 7215, 11082, 13763, 14092, 10512, 3350]", - "total_badness": 83350.921624 + "ne2d": 6218, + "ne3d": 68383, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 12, 37, 108, 252, 694, 1708, 3917, 7031, 11058, 14173, 14782, 11158, 3451]", + "total_badness": 84181.20294 } ], "plane.stl": [ { "ne1d": 890, - "ne2d": 2642, - "ne3d": 8595, - "quality_histogram": "[4, 13, 28, 37, 47, 45, 46, 76, 119, 205, 339, 501, 686, 989, 1187, 1277, 1290, 971, 584, 151]", - "total_badness": 12988.842256 + "ne2d": 2646, + "ne3d": 8528, + "quality_histogram": "[4, 14, 27, 37, 43, 46, 41, 91, 102, 180, 331, 464, 679, 978, 1233, 1340, 1240, 987, 555, 136]", + "total_badness": 12856.87891 }, { "ne1d": 572, - "ne2d": 1226, - "ne3d": 1904, - "quality_histogram": "[2, 15, 45, 48, 51, 64, 68, 85, 111, 137, 157, 178, 181, 193, 185, 151, 109, 79, 35, 10]", - "total_badness": 4266.5881394 + "ne2d": 1228, + "ne3d": 1901, + "quality_histogram": "[2, 18, 45, 48, 51, 66, 60, 92, 128, 133, 165, 191, 187, 197, 168, 128, 114, 65, 39, 4]", + "total_badness": 4320.0075948 }, { "ne1d": 724, - "ne2d": 1748, - "ne3d": 3263, - "quality_histogram": "[5, 21, 30, 43, 40, 47, 39, 66, 96, 148, 182, 302, 323, 393, 459, 390, 329, 197, 124, 29]", - "total_badness": 5975.2670543 + "ne2d": 1754, + "ne3d": 3285, + "quality_histogram": "[4, 20, 30, 41, 36, 43, 44, 68, 96, 154, 170, 280, 339, 436, 436, 406, 340, 206, 107, 29]", + "total_badness": 5959.5331564 }, { "ne1d": 956, - "ne2d": 2882, - "ne3d": 8446, - "quality_histogram": "[4, 12, 23, 50, 42, 48, 44, 59, 82, 157, 207, 360, 560, 882, 1225, 1335, 1352, 1160, 663, 181]", - "total_badness": 12444.826653 + "ne2d": 2886, + "ne3d": 8682, + "quality_histogram": "[3, 11, 23, 48, 51, 47, 53, 55, 92, 133, 207, 340, 555, 905, 1236, 1446, 1418, 1197, 665, 197]", + "total_badness": 12703.577343 }, { "ne1d": 1554, "ne2d": 6466, - "ne3d": 32031, - "quality_histogram": "[5, 6, 8, 8, 23, 53, 54, 80, 112, 196, 405, 711, 1412, 2584, 3934, 5449, 6160, 5835, 3889, 1107]", - "total_badness": 41668.344524 + "ne3d": 31866, + "quality_histogram": "[4, 7, 10, 5, 21, 54, 53, 79, 111, 204, 328, 684, 1327, 2460, 3983, 5375, 6122, 5827, 4106, 1106]", + "total_badness": 41304.661508 }, { "ne1d": 2992, "ne2d": 23396, - "ne3d": 278063, - "quality_histogram": "[5, 7, 10, 7, 10, 24, 35, 101, 221, 488, 1182, 2740, 6870, 15308, 29180, 44805, 57832, 60855, 44767, 13616]", - "total_badness": 343096.47286 + "ne3d": 276949, + "quality_histogram": "[5, 10, 11, 13, 8, 23, 34, 93, 171, 459, 1121, 2702, 6581, 15040, 28425, 44154, 58179, 60855, 45197, 13868]", + "total_badness": 341180.22628 } ], "revolution.geo": [ { "ne1d": 320, - "ne2d": 2954, - "ne3d": 8130, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 15, 66, 164, 321, 511, 753, 963, 1055, 1091, 997, 911, 712, 457, 112]", - "total_badness": 11989.408099 + "ne2d": 3080, + "ne3d": 8493, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 14, 37, 141, 292, 516, 761, 908, 1113, 1149, 1153, 1021, 809, 454, 124]", + "total_badness": 12348.498749 }, { "ne1d": 160, - "ne2d": 796, - "ne3d": 1285, - "quality_histogram": "[0, 2, 3, 11, 14, 24, 57, 98, 126, 126, 148, 122, 112, 120, 86, 87, 69, 48, 29, 3]", - "total_badness": 2509.4805977 + "ne2d": 822, + "ne3d": 1275, + "quality_histogram": "[0, 0, 0, 0, 1, 13, 46, 79, 104, 128, 151, 162, 143, 122, 97, 67, 79, 44, 33, 6]", + "total_badness": 2301.511908 }, { "ne1d": 240, - "ne2d": 1760, - "ne3d": 3853, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 15, 29, 96, 198, 280, 418, 475, 513, 491, 435, 388, 290, 178, 47]", - "total_badness": 5821.5572222 + "ne2d": 1814, + "ne3d": 4263, + "quality_histogram": "[0, 0, 0, 1, 24, 48, 98, 178, 257, 329, 374, 485, 464, 451, 424, 377, 341, 236, 134, 42]", + "total_badness": 7266.9014253 }, { "ne1d": 320, - "ne2d": 2954, - "ne3d": 7952, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 5, 37, 90, 213, 416, 639, 885, 1020, 1079, 1061, 987, 837, 540, 142]", - "total_badness": 11344.409226 + "ne2d": 3080, + "ne3d": 8289, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 6, 11, 68, 186, 384, 601, 825, 1052, 1157, 1179, 1159, 966, 521, 172]", + "total_badness": 11619.248926 }, { "ne1d": 480, - "ne2d": 6588, - "ne3d": 32800, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 36, 118, 313, 732, 1437, 2573, 4093, 5522, 6343, 6179, 4242, 1207]", - "total_badness": 41659.895413 + "ne2d": 6802, + "ne3d": 32879, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 12, 84, 271, 645, 1296, 2517, 4137, 5621, 6316, 6268, 4405, 1302]", + "total_badness": 41520.358013 }, { "ne1d": 800, - "ne2d": 17344, - "ne3d": 200087, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 11, 50, 218, 615, 1690, 4420, 10233, 19967, 31844, 41733, 45345, 33688, 10271]", - "total_badness": 244872.84796 + "ne2d": 17838, + "ne3d": 201709, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 11, 55, 165, 539, 1581, 4149, 10238, 19945, 31707, 42528, 45753, 34593, 10445]", + "total_badness": 246377.26479 } ], "screw.step": [ { "ne1d": 400, - "ne2d": 1472, - "ne3d": 2610, - "quality_histogram": "[0, 0, 1, 3, 8, 20, 35, 69, 118, 163, 209, 264, 308, 299, 293, 297, 230, 170, 98, 25]", - "total_badness": 4229.5875828 + "ne2d": 1426, + "ne3d": 2472, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 12, 81, 91, 181, 174, 234, 298, 277, 288, 283, 242, 190, 101, 19]", + "total_badness": 3876.6679484 }, { "ne1d": 530, - "ne2d": 2744, - "ne3d": 7955, - "quality_histogram": "[0, 0, 0, 1, 6, 15, 21, 60, 79, 138, 234, 346, 553, 787, 1044, 1230, 1339, 1153, 741, 208]", - "total_badness": 10866.407655 + "ne2d": 2672, + "ne3d": 7959, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 13, 27, 70, 146, 225, 454, 786, 1144, 1323, 1454, 1239, 822, 250]", + "total_badness": 10425.046404 }, { "ne1d": 668, - "ne2d": 4972, - "ne3d": 32058, - "quality_histogram": "[0, 0, 0, 1, 0, 3, 6, 23, 48, 90, 239, 476, 1018, 1874, 3372, 5249, 6538, 6742, 4891, 1488]", - "total_badness": 39939.885256 + "ne2d": 4982, + "ne3d": 31524, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 5, 18, 51, 119, 302, 759, 1716, 3303, 5151, 6604, 6989, 5042, 1462]", + "total_badness": 38816.567058 } ], "sculpture.geo": [ { "ne1d": 192, - "ne2d": 396, - "ne3d": 456, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 2, 10, 22, 37, 41, 52, 70, 77, 75, 41, 17, 9, 1]", - "total_badness": 693.76412329 + "ne2d": 412, + "ne3d": 474, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 1, 4, 16, 22, 41, 56, 66, 94, 93, 45, 22, 10, 2]", + "total_badness": 694.32501707 }, { "ne1d": 102, - "ne2d": 142, - "ne3d": 135, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 3, 10, 14, 14, 18, 29, 21, 18, 3]", - "total_badness": 176.12964862 + "ne2d": 144, + "ne3d": 138, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 11, 22, 22, 30, 28, 19, 1]", + "total_badness": 172.99655803 }, { "ne1d": 144, - "ne2d": 234, - "ne3d": 234, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 8, 12, 11, 19, 36, 50, 41, 30, 20, 2]", - "total_badness": 314.37494393 + "ne2d": 248, + "ne3d": 259, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 7, 14, 25, 29, 47, 50, 46, 25, 7]", + "total_badness": 337.75654539 }, { "ne1d": 192, - "ne2d": 396, - "ne3d": 456, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 2, 10, 22, 37, 41, 52, 70, 77, 75, 41, 17, 9, 1]", - "total_badness": 693.76413573 + "ne2d": 412, + "ne3d": 473, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 3, 16, 22, 41, 56, 67, 94, 93, 45, 22, 10, 2]", + "total_badness": 690.01007288 }, { "ne1d": 288, - "ne2d": 928, - "ne3d": 1247, - "quality_histogram": "[0, 0, 0, 0, 1, 2, 14, 34, 68, 68, 133, 144, 132, 125, 140, 135, 109, 67, 53, 22]", - "total_badness": 2003.8623066 + "ne2d": 962, + "ne3d": 1342, + "quality_histogram": "[0, 0, 0, 0, 1, 0, 8, 25, 55, 76, 126, 141, 130, 145, 122, 136, 146, 128, 84, 19]", + "total_badness": 2068.4211724 }, { "ne1d": 480, - "ne2d": 2310, - "ne3d": 6419, - "quality_histogram": "[0, 0, 0, 3, 6, 11, 18, 14, 20, 60, 89, 176, 293, 543, 879, 1085, 1182, 1071, 702, 267]", - "total_badness": 8393.0036926 + "ne2d": 2396, + "ne3d": 6759, + "quality_histogram": "[0, 0, 0, 0, 3, 7, 8, 20, 26, 48, 63, 134, 286, 497, 697, 1121, 1313, 1288, 944, 304]", + "total_badness": 8628.8134106 } ], "shaft.geo": [ { "ne1d": 708, - "ne2d": 1668, - "ne3d": 2420, - "quality_histogram": "[0, 0, 2, 0, 2, 5, 18, 35, 71, 156, 392, 338, 271, 271, 204, 255, 201, 106, 73, 20]", - "total_badness": 3933.8460804 + "ne2d": 1726, + "ne3d": 2758, + "quality_histogram": "[5, 19, 22, 27, 27, 37, 60, 74, 82, 160, 296, 372, 295, 251, 231, 278, 234, 181, 86, 21]", + "total_badness": 5318.0297732 }, { "ne1d": 410, - "ne2d": 580, - "ne3d": 841, - "quality_histogram": "[0, 0, 0, 0, 1, 3, 5, 14, 21, 34, 49, 54, 80, 99, 105, 104, 112, 100, 39, 21]", - "total_badness": 1241.4009871 + "ne2d": 604, + "ne3d": 951, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 6, 17, 32, 42, 65, 90, 111, 140, 137, 132, 103, 58, 17]", + "total_badness": 1354.4698007 }, { "ne1d": 510, - "ne2d": 968, - "ne3d": 1643, - "quality_histogram": "[0, 0, 4, 26, 41, 57, 73, 68, 102, 118, 144, 145, 167, 173, 158, 140, 125, 53, 36, 13]", - "total_badness": 3172.6008055 + "ne2d": 1012, + "ne3d": 2088, + "quality_histogram": "[20, 46, 76, 95, 111, 105, 97, 134, 91, 101, 96, 141, 150, 177, 193, 168, 177, 56, 41, 13]", + "total_badness": 6181.8600404 }, { "ne1d": 708, - "ne2d": 1668, - "ne3d": 2413, - "quality_histogram": "[0, 0, 0, 0, 0, 6, 12, 25, 57, 154, 394, 335, 291, 260, 206, 271, 199, 113, 72, 18]", - "total_badness": 3870.1528345 + "ne2d": 1726, + "ne3d": 2749, + "quality_histogram": "[0, 2, 15, 16, 32, 30, 44, 71, 72, 143, 302, 400, 289, 259, 236, 273, 259, 196, 88, 22]", + "total_badness": 4725.048506 }, { "ne1d": 1138, - "ne2d": 4046, - "ne3d": 10795, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 4, 17, 52, 135, 270, 441, 682, 1028, 1431, 1789, 1884, 1646, 1064, 351]", - "total_badness": 14312.868281 + "ne2d": 4220, + "ne3d": 11186, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 30, 80, 154, 350, 602, 945, 1409, 1830, 2160, 1870, 1352, 400]", + "total_badness": 14442.588212 }, { "ne1d": 1792, - "ne2d": 10340, - "ne3d": 61826, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 21, 94, 245, 701, 1655, 3629, 6683, 10068, 12847, 13004, 9674, 3201]", - "total_badness": 76334.81853 + "ne2d": 10588, + "ne3d": 63583, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 16, 57, 199, 505, 1317, 3246, 6239, 10147, 13375, 14218, 10750, 3513]", + "total_badness": 77700.722539 } ], "sphere.geo": [ { "ne1d": 0, - "ne2d": 104, - "ne3d": 104, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 25, 41, 7, 6, 8, 2, 6, 3, 3, 0, 0]", - "total_badness": 189.21001627 + "ne2d": 126, + "ne3d": 126, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 28, 46, 29, 15, 0, 2, 0, 0, 0, 0, 0]", + "total_badness": 237.49105852 }, { "ne1d": 0, - "ne2d": 50, - "ne3d": 50, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 4, 12, 14, 14, 3, 0]", - "total_badness": 61.628499364 + "ne2d": 56, + "ne3d": 56, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 14, 24, 11, 2, 0]", + "total_badness": 68.823759015 }, { "ne1d": 0, - "ne2d": 66, - "ne3d": 66, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 5, 12, 21, 5, 6, 7, 3, 0, 4]", - "total_badness": 96.358043846 + "ne2d": 80, + "ne3d": 80, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 12, 28, 24, 10, 4, 0, 0, 0]", + "total_badness": 114.85441614 }, { "ne1d": 0, - "ne2d": 104, - "ne3d": 104, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 25, 41, 7, 6, 8, 2, 6, 3, 3, 0, 0]", - "total_badness": 189.21001627 + "ne2d": 126, + "ne3d": 126, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 28, 46, 29, 15, 0, 2, 0, 0, 0, 0, 0]", + "total_badness": 237.49105852 }, { "ne1d": 0, - "ne2d": 254, - "ne3d": 350, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 8, 28, 47, 48, 43, 51, 47, 20, 20, 20, 10, 6]", - "total_badness": 555.65023551 + "ne2d": 258, + "ne3d": 365, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 8, 21, 36, 47, 55, 52, 32, 40, 28, 22, 15, 9]", + "total_badness": 557.72385462 }, { "ne1d": 0, - "ne2d": 656, - "ne3d": 2286, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 15, 37, 92, 152, 276, 397, 471, 429, 303, 111]", - "total_badness": 2868.3272967 + "ne2d": 660, + "ne3d": 2315, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 6, 30, 51, 141, 273, 396, 472, 471, 361, 111]", + "total_badness": 2861.2824595 } ], "sphereincube.geo": [ { "ne1d": 46, - "ne2d": 182, - "ne3d": 452, - "quality_histogram": "[0, 0, 11, 60, 38, 40, 63, 53, 49, 26, 30, 21, 11, 11, 14, 14, 5, 2, 4, 0]", - "total_badness": 1421.7705054 + "ne2d": 202, + "ne3d": 495, + "quality_histogram": "[0, 0, 7, 60, 37, 29, 46, 41, 57, 46, 44, 16, 23, 10, 15, 12, 12, 24, 11, 5]", + "total_badness": 1405.0779325 }, { "ne1d": 24, "ne2d": 60, - "ne3d": 167, - "quality_histogram": "[0, 0, 8, 15, 17, 13, 17, 7, 5, 4, 5, 6, 9, 7, 12, 11, 11, 9, 11, 0]", - "total_badness": 475.36379061 + "ne3d": 187, + "quality_histogram": "[0, 0, 4, 11, 14, 25, 27, 14, 4, 2, 2, 3, 7, 13, 19, 16, 11, 6, 6, 3]", + "total_badness": 493.44997215 }, { "ne1d": 30, - "ne2d": 98, - "ne3d": 271, - "quality_histogram": "[0, 2, 11, 18, 20, 32, 35, 31, 21, 28, 19, 13, 9, 10, 14, 2, 4, 1, 1, 0]", - "total_badness": 830.84203375 + "ne2d": 116, + "ne3d": 352, + "quality_histogram": "[0, 0, 7, 15, 30, 48, 31, 27, 35, 44, 27, 19, 22, 15, 9, 8, 6, 6, 3, 0]", + "total_badness": 970.12716912 }, { "ne1d": 46, - "ne2d": 182, - "ne3d": 453, - "quality_histogram": "[0, 0, 10, 45, 33, 33, 50, 45, 60, 34, 36, 36, 15, 15, 14, 15, 6, 2, 4, 0]", - "total_badness": 1318.0366276 + "ne2d": 202, + "ne3d": 501, + "quality_histogram": "[0, 0, 4, 44, 27, 20, 51, 40, 68, 51, 51, 21, 20, 17, 17, 16, 15, 23, 11, 5]", + "total_badness": 1303.491863 }, { "ne1d": 74, - "ne2d": 390, - "ne3d": 1611, - "quality_histogram": "[0, 0, 0, 0, 1, 8, 12, 13, 26, 44, 101, 132, 188, 206, 230, 237, 187, 121, 73, 32]", - "total_badness": 2385.1746327 + "ne2d": 416, + "ne3d": 1711, + "quality_histogram": "[0, 0, 0, 0, 2, 3, 7, 15, 23, 28, 56, 85, 135, 188, 256, 270, 252, 194, 131, 66]", + "total_badness": 2380.2313828 }, { "ne1d": 122, - "ne2d": 1042, - "ne3d": 13375, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 5, 25, 58, 132, 275, 532, 955, 1526, 2092, 2698, 2651, 1866, 556]", - "total_badness": 16888.449659 + "ne2d": 1080, + "ne3d": 13950, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 2, 8, 27, 100, 220, 499, 870, 1449, 2270, 2791, 2947, 2086, 679]", + "total_badness": 17374.576935 } ], "torus.geo": [ { "ne1d": 0, - "ne2d": 2508, - "ne3d": 5657, - "quality_histogram": "[0, 0, 0, 0, 2, 10, 32, 78, 156, 274, 498, 598, 770, 767, 731, 613, 526, 367, 172, 63]", - "total_badness": 8749.7305986 + "ne2d": 2534, + "ne3d": 5567, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 24, 44, 120, 251, 427, 577, 708, 736, 700, 671, 555, 393, 274, 86]", + "total_badness": 8384.3048813 }, { "ne1d": 0, - "ne2d": 660, - "ne3d": 2886, - "quality_histogram": "[117, 543, 423, 314, 289, 218, 194, 135, 146, 121, 112, 70, 62, 41, 40, 25, 12, 12, 11, 1]", - "total_badness": 19763.210938 + "ne2d": 692, + "ne3d": 3145, + "quality_histogram": "[195, 700, 454, 360, 340, 221, 170, 157, 140, 91, 96, 60, 44, 31, 33, 26, 12, 7, 6, 2]", + "total_badness": 25137.501541 }, { "ne1d": 0, - "ne2d": 1424, - "ne3d": 2673, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 6, 32, 92, 182, 315, 348, 414, 365, 343, 262, 166, 117, 28]", - "total_badness": 3963.6416021 + "ne2d": 1446, + "ne3d": 2727, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 5, 12, 62, 161, 219, 352, 418, 401, 380, 266, 239, 155, 55]", + "total_badness": 3909.4618458 }, { "ne1d": 0, - "ne2d": 2508, - "ne3d": 5476, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 9, 34, 74, 197, 375, 566, 685, 791, 755, 684, 546, 453, 238, 69]", - "total_badness": 8099.109234 + "ne2d": 2534, + "ne3d": 5419, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 19, 42, 209, 332, 508, 665, 720, 748, 656, 613, 495, 305, 103]", + "total_badness": 7868.8410035 }, { "ne1d": 0, - "ne2d": 5842, - "ne3d": 24278, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 6, 22, 74, 224, 573, 1134, 1971, 3110, 4129, 4763, 4456, 2976, 840]", - "total_badness": 30936.500907 + "ne2d": 5892, + "ne3d": 25297, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 6, 57, 140, 381, 917, 1672, 2967, 4341, 5051, 5114, 3588, 1059]", + "total_badness": 31635.159095 }, { "ne1d": 0, - "ne2d": 16146, - "ne3d": 174106, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 39, 156, 448, 1266, 3517, 8397, 16897, 27428, 36623, 40129, 29926, 9277]", - "total_badness": 212310.14221 + "ne2d": 16286, + "ne3d": 175540, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 23, 105, 378, 1086, 3067, 7730, 16270, 26910, 37673, 40911, 31553, 9832]", + "total_badness": 212959.87194 } ], "trafo.geo": [ { "ne1d": 690, - "ne2d": 1646, - "ne3d": 5126, - "quality_histogram": "[1, 4, 2, 3, 5, 29, 53, 90, 147, 211, 320, 377, 471, 594, 643, 655, 546, 442, 421, 112]", - "total_badness": 7799.7835055 + "ne2d": 1684, + "ne3d": 5207, + "quality_histogram": "[0, 1, 2, 0, 8, 23, 26, 43, 130, 209, 256, 376, 434, 574, 672, 714, 598, 554, 460, 127]", + "total_badness": 7609.297723 }, { "ne1d": 390, - "ne2d": 520, - "ne3d": 1346, - "quality_histogram": "[0, 0, 7, 14, 33, 25, 63, 120, 124, 153, 167, 155, 137, 114, 92, 67, 31, 21, 22, 1]", - "total_badness": 2774.32686 + "ne2d": 522, + "ne3d": 1348, + "quality_histogram": "[0, 2, 3, 17, 13, 39, 77, 130, 126, 139, 162, 128, 136, 115, 80, 88, 48, 32, 11, 2]", + "total_badness": 2770.7952646 }, { "ne1d": 512, - "ne2d": 860, - "ne3d": 2371, - "quality_histogram": "[0, 0, 1, 3, 11, 26, 63, 72, 159, 180, 212, 248, 278, 290, 285, 262, 140, 47, 57, 37]", - "total_badness": 4066.6122044 + "ne2d": 876, + "ne3d": 2390, + "quality_histogram": "[0, 0, 2, 1, 11, 17, 45, 82, 116, 145, 178, 211, 303, 386, 349, 231, 147, 96, 45, 25]", + "total_badness": 3971.1275129 }, { "ne1d": 690, - "ne2d": 1646, - "ne3d": 5032, - "quality_histogram": "[0, 0, 1, 1, 3, 24, 33, 83, 142, 202, 307, 347, 451, 584, 623, 688, 546, 455, 430, 112]", - "total_badness": 7479.98992 + "ne2d": 1684, + "ne3d": 5136, + "quality_histogram": "[0, 0, 0, 0, 3, 14, 20, 37, 122, 193, 254, 362, 416, 558, 664, 720, 625, 547, 463, 138]", + "total_badness": 7387.3184406 }, { "ne1d": 1050, - "ne2d": 3712, - "ne3d": 17405, - "quality_histogram": "[0, 0, 0, 0, 1, 0, 8, 32, 53, 107, 255, 624, 1664, 2121, 2356, 2568, 2554, 2462, 1933, 667]", - "total_badness": 23080.231635 + "ne2d": 3816, + "ne3d": 17915, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 26, 41, 68, 180, 504, 1428, 2170, 2266, 2730, 2780, 2666, 2365, 685]", + "total_badness": 23360.270089 }, { "ne1d": 1722, - "ne2d": 9850, - "ne3d": 83872, - "quality_histogram": "[0, 0, 0, 1, 3, 7, 107, 1446, 645, 540, 977, 1757, 3237, 6101, 9524, 13281, 15629, 15661, 11299, 3657]", - "total_badness": 109051.31473 + "ne2d": 10044, + "ne3d": 84569, + "quality_histogram": "[0, 0, 0, 0, 3, 8, 60, 1414, 732, 421, 765, 1392, 2637, 5659, 9077, 13242, 16177, 16531, 12448, 4003]", + "total_badness": 108711.84635 } ], "twobricks.geo": [ @@ -1384,17 +1384,17 @@ }, { "ne1d": 116, - "ne2d": 124, - "ne3d": 159, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 5, 14, 26, 22, 29, 20, 18, 9, 9, 5]", - "total_badness": 225.25116924 + "ne2d": 136, + "ne3d": 171, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 7, 10, 12, 40, 34, 23, 22, 13, 3]", + "total_badness": 228.1897295 }, { "ne1d": 186, - "ne2d": 308, - "ne3d": 526, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 12, 26, 59, 56, 79, 97, 76, 65, 43, 8]", - "total_badness": 709.96091399 + "ne2d": 346, + "ne3d": 594, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 22, 29, 70, 88, 100, 109, 115, 43, 14]", + "total_badness": 771.14009171 } ], "twocubes.geo": [ @@ -1428,61 +1428,61 @@ }, { "ne1d": 116, - "ne2d": 124, - "ne3d": 159, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 5, 14, 26, 22, 29, 20, 18, 9, 9, 5]", - "total_badness": 225.25116924 + "ne2d": 136, + "ne3d": 171, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 7, 10, 12, 40, 34, 23, 22, 13, 3]", + "total_badness": 228.1897295 }, { "ne1d": 186, - "ne2d": 308, - "ne3d": 526, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 12, 26, 59, 56, 79, 97, 76, 65, 43, 8]", - "total_badness": 709.96091399 + "ne2d": 346, + "ne3d": 594, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 22, 29, 70, 88, 100, 109, 115, 43, 14]", + "total_badness": 771.14009171 } ], "twocyl.geo": [ { "ne1d": 144, - "ne2d": 402, - "ne3d": 535, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 5, 11, 23, 31, 51, 49, 74, 70, 65, 60, 43, 39, 11, 2]", - "total_badness": 848.77250581 + "ne2d": 408, + "ne3d": 572, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 7, 7, 17, 34, 51, 57, 89, 111, 75, 73, 35, 12, 1]", + "total_badness": 851.35923972 }, { "ne1d": 68, "ne2d": 100, - "ne3d": 188, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 6, 14, 23, 27, 28, 25, 22, 28, 8, 0]", - "total_badness": 267.41201716 + "ne3d": 209, + "quality_histogram": "[0, 0, 0, 1, 3, 6, 11, 2, 8, 5, 15, 18, 12, 28, 28, 27, 24, 17, 3, 1]", + "total_badness": 357.15502356 }, { "ne1d": 102, - "ne2d": 234, - "ne3d": 540, - "quality_histogram": "[0, 14, 30, 32, 40, 40, 55, 59, 43, 38, 24, 29, 26, 16, 25, 15, 39, 4, 11, 0]", - "total_badness": 1706.6298917 + "ne2d": 236, + "ne3d": 551, + "quality_histogram": "[0, 29, 41, 30, 31, 36, 49, 40, 55, 27, 38, 32, 26, 26, 20, 13, 37, 16, 4, 1]", + "total_badness": 1900.92706 }, { "ne1d": 144, - "ne2d": 402, - "ne3d": 534, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 4, 10, 19, 26, 44, 53, 82, 67, 66, 64, 41, 40, 13, 3]", - "total_badness": 838.16101585 + "ne2d": 408, + "ne3d": 568, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 7, 16, 23, 51, 53, 95, 117, 69, 73, 43, 14, 4]", + "total_badness": 824.30043375 }, { "ne1d": 214, - "ne2d": 900, - "ne3d": 1820, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 15, 43, 103, 172, 235, 307, 303, 304, 187, 120, 28]", - "total_badness": 2474.9963091 + "ne2d": 910, + "ne3d": 1894, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 20, 72, 118, 190, 292, 365, 352, 262, 179, 40]", + "total_badness": 2477.4306124 }, { "ne1d": 350, - "ne2d": 2336, - "ne3d": 13150, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 10, 38, 121, 325, 712, 1379, 2153, 2848, 2841, 2058, 663]", - "total_badness": 16159.006532 + "ne2d": 2374, + "ne3d": 13452, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 25, 83, 244, 626, 1288, 2202, 2860, 3100, 2290, 728]", + "total_badness": 16367.358392 } ] } \ No newline at end of file From 865aca0ba0fce9f92f2832cfeb2dec71e6052f59 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Tue, 8 Oct 2019 13:46:27 +0200 Subject: [PATCH 033/120] Implement MeshOptimizeSTLSurface::ProjectPointGI --- libsrc/stlgeom/meshstlsurface.cpp | 19 ++++- libsrc/stlgeom/meshstlsurface.hpp | 2 + tests/pytest/results.json | 122 +++++++++++++++--------------- 3 files changed, 80 insertions(+), 63 deletions(-) diff --git a/libsrc/stlgeom/meshstlsurface.cpp b/libsrc/stlgeom/meshstlsurface.cpp index 333ed39d..4c50180b 100644 --- a/libsrc/stlgeom/meshstlsurface.cpp +++ b/libsrc/stlgeom/meshstlsurface.cpp @@ -1080,6 +1080,22 @@ void MeshOptimizeSTLSurface :: ProjectPoint (INDEX surfind, Point<3> & p) const // geometry.GetSurface(surfind)->Project (p); } +int MeshOptimizeSTLSurface :: ProjectPointGI (INDEX surfind, Point<3> & p, PointGeomInfo & gi) const +{ + int meshchart = geom.GetChartNr(gi.trignum); + const STLChart& chart = geom.GetChart(meshchart); + int trignum = chart.ProjectNormal(p); + if(trignum==0) + { + PrintMessage(7,"project failed"); + geom.SelectChartOfTriangle (gi.trignum); // needed because ProjectOnWholeSurface uses meshchartnv (the normal vector of selected chart) + trignum = geom.ProjectOnWholeSurface(p); + if(trignum==0) + PrintMessage(7, "project on whole surface failed"); + } + return trignum; +} + void MeshOptimizeSTLSurface :: ProjectPoint2 (INDEX surfind, INDEX surfind2, Point<3> & p) const { /* @@ -1101,8 +1117,7 @@ int MeshOptimizeSTLSurface :: CalcPointGeomInfo(PointGeomInfo& gi, const Point< void MeshOptimizeSTLSurface :: GetNormalVector(INDEX surfind, const Point<3> & p, PointGeomInfo & gi, Vec<3> & n) const { - geom.SelectChartOfTriangle (gi.trignum); - n = geom.GetChartNormalVector(); + n = geom.GetTriangle(gi.trignum).Normal(); } diff --git a/libsrc/stlgeom/meshstlsurface.hpp b/libsrc/stlgeom/meshstlsurface.hpp index 00cb1277..1f1ad27b 100644 --- a/libsrc/stlgeom/meshstlsurface.hpp +++ b/libsrc/stlgeom/meshstlsurface.hpp @@ -78,6 +78,8 @@ public: /// void ProjectPoint (INDEX surfind, Point<3> & p) const override; /// + int ProjectPointGI (INDEX surfind, Point<3> & p, PointGeomInfo & gi) const override; + /// void ProjectPoint2 (INDEX surfind, INDEX surfind2, Point<3> & p) const override; /// int CalcPointGeomInfo(PointGeomInfo& gi, const Point<3> & p3) const override; diff --git a/tests/pytest/results.json b/tests/pytest/results.json index 6334c27e..4a1bcf12 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -687,43 +687,43 @@ "ne1d": 456, "ne2d": 1230, "ne3d": 1990, - "quality_histogram": "[0, 0, 0, 0, 1, 2, 3, 9, 21, 47, 69, 116, 164, 237, 326, 280, 298, 225, 151, 41]", - "total_badness": 2772.6154636 + "quality_histogram": "[0, 0, 0, 0, 0, 2, 2, 13, 19, 39, 60, 137, 183, 248, 311, 282, 280, 231, 136, 47]", + "total_badness": 2776.6730441 }, { "ne1d": 298, - "ne2d": 608, - "ne3d": 770, - "quality_histogram": "[0, 0, 0, 1, 10, 9, 19, 15, 35, 46, 62, 87, 79, 89, 83, 87, 64, 45, 30, 9]", - "total_badness": 1284.6220542 + "ne2d": 610, + "ne3d": 793, + "quality_histogram": "[0, 0, 0, 3, 10, 12, 25, 19, 34, 52, 79, 76, 93, 95, 86, 82, 58, 40, 22, 7]", + "total_badness": 1364.5936087 }, { "ne1d": 370, - "ne2d": 854, - "ne3d": 1130, - "quality_histogram": "[0, 0, 0, 0, 2, 4, 17, 25, 26, 34, 64, 107, 137, 161, 156, 181, 93, 73, 42, 8]", - "total_badness": 1739.2621504 + "ne2d": 860, + "ne3d": 1148, + "quality_histogram": "[0, 0, 0, 0, 2, 4, 16, 24, 25, 32, 78, 104, 135, 154, 165, 176, 112, 66, 43, 12]", + "total_badness": 1761.668236 }, { "ne1d": 516, "ne2d": 1584, - "ne3d": 2549, - "quality_histogram": "[0, 0, 0, 0, 2, 1, 7, 19, 30, 53, 121, 174, 224, 296, 384, 362, 331, 304, 201, 40]", - "total_badness": 3600.6650263 + "ne3d": 2528, + "quality_histogram": "[0, 0, 0, 0, 2, 1, 9, 16, 23, 49, 125, 186, 212, 309, 339, 362, 346, 314, 191, 44]", + "total_badness": 3558.9972665 }, { "ne1d": 722, "ne2d": 2888, - "ne3d": 6818, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 12, 29, 67, 167, 379, 655, 877, 1099, 1146, 1177, 948, 258]", - "total_badness": 8742.2896959 + "ne3d": 6747, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 3, 15, 27, 51, 174, 373, 644, 867, 1088, 1146, 1180, 929, 247]", + "total_badness": 8655.9198144 }, { "ne1d": 1862, - "ne2d": 19516, - "ne3d": 135482, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 6, 30, 145, 444, 1158, 3034, 7025, 13447, 21335, 28448, 30344, 22953, 7112]", - "total_badness": 165806.81509 + "ne2d": 19514, + "ne3d": 137132, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 8, 37, 119, 375, 1131, 3044, 6883, 13679, 21959, 28650, 31016, 22896, 7333]", + "total_badness": 167715.38485 } ], "lshape3d.geo": [ @@ -894,44 +894,44 @@ { "ne1d": 170, "ne2d": 454, - "ne3d": 1228, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 5, 20, 38, 51, 111, 128, 195, 211, 190, 152, 90, 31]", - "total_badness": 1672.6379358 + "ne3d": 1231, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 4, 16, 11, 28, 52, 63, 111, 142, 191, 162, 178, 143, 94, 34]", + "total_badness": 1732.0556803 }, { "ne1d": 112, - "ne2d": 212, - "ne3d": 346, - "quality_histogram": "[0, 0, 0, 3, 8, 8, 8, 9, 19, 25, 40, 40, 35, 39, 38, 37, 17, 14, 5, 1]", - "total_badness": 629.86936176 + "ne2d": 214, + "ne3d": 345, + "quality_histogram": "[0, 0, 0, 1, 3, 8, 9, 11, 16, 24, 47, 47, 42, 33, 41, 22, 22, 12, 5, 2]", + "total_badness": 612.66129201 }, { "ne1d": 134, "ne2d": 288, - "ne3d": 523, - "quality_histogram": "[0, 0, 0, 0, 0, 5, 5, 4, 14, 15, 32, 48, 68, 67, 66, 76, 44, 43, 29, 7]", - "total_badness": 790.86141744 + "ne3d": 502, + "quality_histogram": "[0, 0, 0, 3, 0, 8, 3, 6, 12, 12, 31, 38, 65, 61, 63, 78, 51, 46, 18, 7]", + "total_badness": 773.39426016 }, { "ne1d": 194, - "ne2d": 594, + "ne2d": 596, "ne3d": 1742, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 5, 9, 40, 88, 126, 192, 280, 281, 279, 241, 165, 34]", - "total_badness": 2325.4945287 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 28, 73, 140, 199, 290, 262, 276, 254, 165, 37]", + "total_badness": 2317.9250987 }, { "ne1d": 266, "ne2d": 990, - "ne3d": 4103, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 13, 28, 69, 162, 317, 534, 761, 831, 732, 513, 140]", - "total_badness": 5196.8765579 + "ne3d": 4027, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 6, 26, 75, 146, 296, 557, 679, 794, 780, 509, 155]", + "total_badness": 5077.2355534 }, { "ne1d": 674, "ne2d": 6870, - "ne3d": 82768, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 14, 59, 188, 513, 1613, 4088, 7976, 12954, 17553, 18871, 14413, 4526]", - "total_badness": 100797.22838 + "ne3d": 81834, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 4, 21, 75, 257, 677, 1770, 4204, 8071, 12904, 17072, 18304, 14037, 4436]", + "total_badness": 100045.3114 } ], "period.geo": [ @@ -982,44 +982,44 @@ { "ne1d": 890, "ne2d": 2646, - "ne3d": 8528, - "quality_histogram": "[4, 14, 27, 37, 43, 46, 41, 91, 102, 180, 331, 464, 679, 978, 1233, 1340, 1240, 987, 555, 136]", - "total_badness": 12856.87891 + "ne3d": 8503, + "quality_histogram": "[4, 9, 28, 39, 37, 47, 43, 74, 102, 194, 278, 421, 644, 952, 1193, 1275, 1330, 1019, 645, 169]", + "total_badness": 12679.208033 }, { - "ne1d": 572, - "ne2d": 1228, - "ne3d": 1901, - "quality_histogram": "[2, 18, 45, 48, 51, 66, 60, 92, 128, 133, 165, 191, 187, 197, 168, 128, 114, 65, 39, 4]", - "total_badness": 4320.0075948 + "ne1d": 570, + "ne2d": 1220, + "ne3d": 1876, + "quality_histogram": "[4, 18, 43, 52, 44, 59, 75, 90, 120, 136, 177, 191, 179, 176, 167, 129, 108, 64, 28, 16]", + "total_badness": 4320.750155 }, { "ne1d": 724, - "ne2d": 1754, - "ne3d": 3285, - "quality_histogram": "[4, 20, 30, 41, 36, 43, 44, 68, 96, 154, 170, 280, 339, 436, 436, 406, 340, 206, 107, 29]", - "total_badness": 5959.5331564 + "ne2d": 1746, + "ne3d": 3289, + "quality_histogram": "[4, 21, 25, 37, 42, 45, 44, 74, 117, 151, 194, 292, 340, 395, 460, 353, 330, 228, 114, 23]", + "total_badness": 5983.1897176 }, { "ne1d": 956, - "ne2d": 2886, - "ne3d": 8682, - "quality_histogram": "[3, 11, 23, 48, 51, 47, 53, 55, 92, 133, 207, 340, 555, 905, 1236, 1446, 1418, 1197, 665, 197]", - "total_badness": 12703.577343 + "ne2d": 2882, + "ne3d": 8726, + "quality_histogram": "[3, 11, 23, 49, 48, 47, 50, 58, 94, 137, 181, 359, 611, 946, 1233, 1398, 1436, 1193, 656, 193]", + "total_badness": 12772.914527 }, { "ne1d": 1554, "ne2d": 6466, - "ne3d": 31866, - "quality_histogram": "[4, 7, 10, 5, 21, 54, 53, 79, 111, 204, 328, 684, 1327, 2460, 3983, 5375, 6122, 5827, 4106, 1106]", - "total_badness": 41304.661508 + "ne3d": 32040, + "quality_histogram": "[5, 6, 7, 7, 25, 52, 53, 68, 107, 199, 330, 692, 1305, 2499, 3880, 5430, 6303, 5976, 3971, 1125]", + "total_badness": 41506.110521 }, { "ne1d": 2992, "ne2d": 23396, - "ne3d": 276949, - "quality_histogram": "[5, 10, 11, 13, 8, 23, 34, 93, 171, 459, 1121, 2702, 6581, 15040, 28425, 44154, 58179, 60855, 45197, 13868]", - "total_badness": 341180.22628 + "ne3d": 276589, + "quality_histogram": "[5, 7, 11, 7, 11, 22, 33, 88, 192, 471, 1192, 2796, 6844, 15362, 28665, 44479, 57706, 60282, 44709, 13707]", + "total_badness": 341214.55024 } ], "revolution.geo": [ From ee7360ad1904afd014010636f40d3281ff047ea6 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Tue, 8 Oct 2019 15:48:08 +0200 Subject: [PATCH 034/120] disable check overlap for occ meshsurface --- libsrc/occ/occgenmesh.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libsrc/occ/occgenmesh.cpp b/libsrc/occ/occgenmesh.cpp index 6360f006..88384d6a 100644 --- a/libsrc/occ/occgenmesh.cpp +++ b/libsrc/occ/occgenmesh.cpp @@ -796,7 +796,6 @@ namespace netgen // Philippose - 15/01/2009 double maxh = geom.face_maxh[k-1]; //double maxh = mparam.maxh; - // mparam.checkoverlap = 0; // int noldpoints = mesh->GetNP(); int noldsurfel = mesh.GetNSE(); @@ -809,9 +808,13 @@ namespace netgen MESHING2_RESULT res; + // TODO: check overlap not correctly working here + MeshingParameters mparam_without_overlap = mparam; + mparam_without_overlap.checkoverlap = false; + try { static Timer t("GenerateMesh"); RegionTimer reg(t); - res = meshing.GenerateMesh (mesh, mparam, maxh, k); + res = meshing.GenerateMesh (mesh, mparam_without_overlap, maxh, k); } catch (SingularMatrixException) From 27bb2c8e0ebc19fa701b457f2d8b5d381f000b82 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Tue, 8 Oct 2019 16:46:16 +0200 Subject: [PATCH 035/120] unify surface optimization strategy --- libsrc/meshing/meshtype.hpp | 2 +- libsrc/meshing/python_mesh.hpp | 2 +- tests/pytest/results.json | 1350 ++++++++++++++++---------------- 3 files changed, 677 insertions(+), 677 deletions(-) diff --git a/libsrc/meshing/meshtype.hpp b/libsrc/meshing/meshtype.hpp index 66687a6d..f28a5cd1 100644 --- a/libsrc/meshing/meshtype.hpp +++ b/libsrc/meshing/meshtype.hpp @@ -1234,7 +1234,7 @@ namespace netgen // P .. plot, pause // c .. combine **/ - string optimize2d = "smsmsmSmSmSm"; + string optimize2d = "smcmSmcmSmcm"; /// number of 2d optimization steps int optsteps2d = 3; /// power of error (to approximate max err optimization) diff --git a/libsrc/meshing/python_mesh.hpp b/libsrc/meshing/python_mesh.hpp index d28c3211..96c930a5 100644 --- a/libsrc/meshing/python_mesh.hpp +++ b/libsrc/meshing/python_mesh.hpp @@ -66,7 +66,7 @@ optimize3d: str = "cmdmustm" optsteps3d: int = 3 Number of 3d optimization steps. -optimize2d: str = "smsmsmSmSmSm" +optimize2d: str = "smcmSmcmSmcm" 2d optimization strategy: s .. swap, opt 6 lines/node S .. swap, optimal elements diff --git a/tests/pytest/results.json b/tests/pytest/results.json index 6334c27e..30c3544e 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -3,9 +3,9 @@ { "ne1d": 74, "ne2d": 54, - "ne3d": 50, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 5, 8, 13, 3, 9, 5, 0, 1, 1]", - "total_badness": 74.774553826 + "ne3d": 49, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 6, 13, 2, 12, 4, 0, 1, 2]", + "total_badness": 71.991209508 }, { "ne1d": 59, @@ -24,155 +24,155 @@ { "ne1d": 74, "ne2d": 54, - "ne3d": 50, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 5, 8, 13, 3, 9, 5, 0, 1, 1]", - "total_badness": 74.77454941 + "ne3d": 49, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 6, 13, 2, 12, 4, 0, 1, 2]", + "total_badness": 71.991205092 }, { "ne1d": 118, - "ne2d": 140, - "ne3d": 165, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 5, 13, 13, 25, 31, 25, 20, 17, 12, 1]", - "total_badness": 228.72078637 + "ne2d": 128, + "ne3d": 146, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 5, 4, 11, 10, 20, 23, 30, 14, 6, 8, 10, 4]", + "total_badness": 218.29947525 }, { "ne1d": 181, - "ne2d": 323, - "ne3d": 507, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 9, 20, 35, 56, 56, 81, 90, 83, 59, 15]", - "total_badness": 661.00817809 + "ne2d": 293, + "ne3d": 453, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 9, 23, 32, 41, 67, 91, 85, 55, 37, 6]", + "total_badness": 605.80122988 } ], "boxcyl.geo": [ { "ne1d": 190, - "ne2d": 468, - "ne3d": 858, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 31, 91, 73, 79, 87, 106, 114, 102, 89, 66, 18]", - "total_badness": 1232.0426735 + "ne2d": 452, + "ne3d": 841, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 3, 23, 119, 77, 90, 116, 110, 79, 85, 77, 45, 13]", + "total_badness": 1250.1700248 }, { "ne1d": 94, "ne2d": 114, - "ne3d": 158, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 7, 10, 16, 5, 8, 15, 13, 17, 13, 9, 25, 7, 11]", - "total_badness": 247.68310336 + "ne3d": 156, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 6, 9, 10, 8, 12, 9, 13, 7, 20, 15, 15, 22, 5, 3]", + "total_badness": 257.95680767 }, { "ne1d": 136, - "ne2d": 222, - "ne3d": 384, - "quality_histogram": "[0, 0, 1, 0, 3, 3, 3, 6, 11, 17, 21, 28, 34, 44, 68, 64, 49, 19, 11, 2]", - "total_badness": 598.99833044 + "ne2d": 218, + "ne3d": 378, + "quality_histogram": "[0, 0, 0, 1, 1, 1, 1, 3, 14, 20, 20, 34, 45, 51, 41, 52, 56, 18, 19, 1]", + "total_badness": 576.7536717 }, { "ne1d": 190, - "ne2d": 468, - "ne3d": 850, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 29, 87, 73, 75, 86, 106, 97, 112, 87, 75, 21]", - "total_badness": 1214.229893 + "ne2d": 452, + "ne3d": 830, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 1, 21, 116, 81, 89, 105, 110, 79, 92, 75, 47, 11]", + "total_badness": 1226.878881 }, { "ne1d": 284, - "ne2d": 938, - "ne3d": 3761, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 20, 59, 118, 250, 456, 628, 751, 755, 564, 153]", - "total_badness": 4693.1208525 + "ne2d": 908, + "ne3d": 3647, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 13, 36, 80, 158, 279, 473, 606, 716, 669, 474, 138]", + "total_badness": 4634.0005088 }, { "ne1d": 456, - "ne2d": 2496, - "ne3d": 18969, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 5, 8, 15, 43, 130, 353, 876, 1713, 3018, 4122, 4317, 3271, 1098]", - "total_badness": 23072.833527 + "ne2d": 2444, + "ne3d": 18525, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 3, 25, 53, 178, 437, 946, 1780, 2925, 3860, 4149, 3103, 1063]", + "total_badness": 22663.686748 } ], "circle_on_cube.geo": [ { "ne1d": 94, - "ne2d": 174, - "ne3d": 646, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 10, 23, 48, 81, 117, 100, 123, 86, 43, 10]", - "total_badness": 859.43881883 + "ne2d": 154, + "ne3d": 604, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 14, 39, 50, 68, 83, 109, 102, 80, 45, 9]", + "total_badness": 815.17294986 }, { "ne1d": 40, "ne2d": 38, - "ne3d": 46, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 2, 4, 8, 8, 6, 7, 5, 1, 2, 1, 0, 0, 0, 0]", - "total_badness": 97.326231112 + "ne3d": 53, + "quality_histogram": "[0, 0, 0, 0, 1, 3, 1, 4, 6, 12, 4, 9, 2, 2, 4, 3, 0, 2, 0, 0]", + "total_badness": 109.70868385 }, { "ne1d": 62, - "ne2d": 94, - "ne3d": 182, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 14, 21, 35, 35, 33, 19, 9, 8, 0]", - "total_badness": 258.4064329 + "ne2d": 86, + "ne3d": 169, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 1, 7, 8, 18, 23, 25, 18, 25, 22, 14, 7, 0]", + "total_badness": 247.43773483 }, { "ne1d": 94, - "ne2d": 174, - "ne3d": 621, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 11, 45, 59, 93, 114, 121, 104, 53, 14]", - "total_badness": 804.68562065 + "ne2d": 154, + "ne3d": 592, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 12, 34, 35, 57, 92, 97, 118, 80, 45, 16]", + "total_badness": 787.43887104 }, { "ne1d": 138, - "ne2d": 382, - "ne3d": 2054, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 15, 57, 129, 210, 330, 426, 450, 321, 109]", - "total_badness": 2526.4427939 + "ne2d": 370, + "ne3d": 1924, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 12, 26, 68, 115, 226, 338, 390, 380, 293, 74]", + "total_badness": 2398.6322242 }, { "ne1d": 224, - "ne2d": 944, - "ne3d": 11988, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 17, 33, 82, 226, 556, 1140, 1929, 2512, 2801, 2061, 628]", - "total_badness": 14608.275962 + "ne2d": 906, + "ne3d": 11615, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 12, 31, 93, 235, 611, 1173, 1864, 2424, 2590, 1985, 592]", + "total_badness": 14210.918388 } ], "cone.geo": [ { "ne1d": 64, - "ne2d": 722, - "ne3d": 1231, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 8, 22, 29, 50, 88, 118, 123, 158, 175, 140, 137, 111, 52, 19]", - "total_badness": 1853.3096959 + "ne2d": 714, + "ne3d": 1198, + "quality_histogram": "[0, 0, 0, 0, 1, 4, 18, 24, 50, 78, 87, 135, 129, 149, 140, 140, 105, 89, 38, 11]", + "total_badness": 1899.21263 }, { "ne1d": 32, "ne2d": 220, - "ne3d": 753, - "quality_histogram": "[0, 1, 28, 40, 63, 54, 61, 53, 61, 59, 67, 47, 38, 52, 39, 23, 27, 21, 16, 3]", - "total_badness": 2038.817175 + "ne3d": 737, + "quality_histogram": "[0, 0, 16, 46, 43, 51, 72, 61, 53, 51, 52, 46, 68, 44, 31, 27, 41, 18, 13, 4]", + "total_badness": 1894.7838255 }, { "ne1d": 48, - "ne2d": 428, - "ne3d": 755, - "quality_histogram": "[1, 33, 42, 29, 32, 26, 29, 27, 64, 81, 73, 80, 67, 48, 55, 18, 23, 16, 11, 0]", - "total_badness": 2283.6586444 + "ne2d": 418, + "ne3d": 694, + "quality_histogram": "[0, 7, 25, 28, 25, 14, 32, 29, 62, 97, 65, 64, 56, 54, 45, 32, 32, 19, 5, 3]", + "total_badness": 1708.6126829 }, { "ne1d": 64, - "ne2d": 722, - "ne3d": 1208, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 15, 22, 47, 81, 110, 131, 144, 172, 150, 145, 112, 62, 14]", - "total_badness": 1783.4859474 + "ne2d": 714, + "ne3d": 1174, + "quality_histogram": "[0, 0, 0, 0, 1, 1, 13, 19, 46, 52, 80, 116, 129, 141, 160, 150, 120, 86, 45, 15]", + "total_badness": 1805.767771 }, { "ne1d": 96, - "ne2d": 1660, - "ne3d": 4423, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 35, 88, 158, 276, 400, 584, 726, 802, 735, 464, 150]", - "total_badness": 5769.9946848 + "ne2d": 1656, + "ne3d": 4332, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 0, 16, 44, 89, 184, 339, 462, 611, 739, 730, 584, 406, 126]", + "total_badness": 5771.741417 }, { "ne1d": 160, - "ne2d": 4748, - "ne3d": 27126, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 13, 31, 83, 303, 735, 1519, 2944, 4316, 5668, 5807, 4355, 1349]", - "total_badness": 33434.663911 + "ne2d": 4722, + "ne3d": 27116, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 16, 43, 146, 382, 845, 1736, 2853, 4482, 5619, 5559, 4124, 1308]", + "total_badness": 33667.780696 } ], "cube.geo": [ @@ -213,54 +213,54 @@ }, { "ne1d": 72, - "ne2d": 118, - "ne3d": 184, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 10, 7, 19, 18, 37, 33, 33, 14, 6]", - "total_badness": 241.24676972 + "ne2d": 110, + "ne3d": 174, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 6, 10, 18, 17, 22, 27, 30, 23, 12, 4]", + "total_badness": 238.68878057 } ], "cubeandring.geo": [ { "ne1d": 262, - "ne2d": 722, - "ne3d": 2188, - "quality_histogram": "[1, 9, 25, 36, 90, 100, 108, 114, 90, 73, 63, 100, 149, 190, 251, 264, 241, 168, 96, 20]", - "total_badness": 4412.1941358 + "ne2d": 682, + "ne3d": 2118, + "quality_histogram": "[1, 8, 18, 31, 57, 110, 98, 76, 102, 82, 96, 110, 169, 194, 245, 237, 206, 156, 99, 23]", + "total_badness": 4154.4021114 }, { "ne1d": 134, - "ne2d": 162, - "ne3d": 252, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 2, 1, 3, 8, 24, 28, 49, 38, 41, 29, 19, 7, 1]", - "total_badness": 365.81827351 + "ne2d": 156, + "ne3d": 263, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 2, 2, 16, 17, 40, 47, 38, 38, 27, 21, 8, 2]", + "total_badness": 384.77338498 }, { "ne1d": 190, - "ne2d": 298, - "ne3d": 613, - "quality_histogram": "[0, 0, 0, 0, 2, 0, 0, 4, 3, 17, 49, 47, 61, 93, 110, 82, 52, 60, 28, 5]", - "total_badness": 897.54658869 + "ne2d": 276, + "ne3d": 576, + "quality_histogram": "[0, 0, 0, 1, 1, 0, 2, 4, 7, 25, 52, 52, 74, 94, 92, 57, 60, 35, 17, 3]", + "total_badness": 877.04655513 }, { "ne1d": 262, - "ne2d": 722, - "ne3d": 2054, - "quality_histogram": "[0, 3, 12, 28, 61, 84, 109, 97, 80, 55, 48, 68, 112, 166, 245, 277, 249, 212, 116, 32]", - "total_badness": 3795.4750393 + "ne2d": 682, + "ne3d": 2014, + "quality_histogram": "[0, 0, 2, 21, 42, 92, 89, 58, 93, 59, 79, 94, 133, 179, 225, 269, 231, 218, 103, 27]", + "total_badness": 3541.9483795 }, { "ne1d": 378, - "ne2d": 1412, - "ne3d": 7752, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 1, 9, 13, 27, 56, 136, 281, 548, 921, 1256, 1534, 1557, 1091, 320]", - "total_badness": 9761.7065165 + "ne2d": 1314, + "ne3d": 7313, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 10, 20, 59, 105, 195, 346, 584, 898, 1274, 1343, 1375, 890, 211]", + "total_badness": 9422.7875587 }, { "ne1d": 624, - "ne2d": 3942, - "ne3d": 38282, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 10, 28, 117, 334, 795, 2026, 3889, 5942, 8057, 8537, 6447, 2097]", - "total_badness": 46825.777983 + "ne2d": 3792, + "ne3d": 37404, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 10, 16, 49, 139, 345, 895, 2097, 4029, 6066, 7901, 8036, 5989, 1830]", + "total_badness": 46060.601796 } ], "cubeandspheres.geo": [ @@ -268,360 +268,360 @@ "ne1d": 144, "ne2d": 148, "ne3d": 98, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 18, 19, 13, 20, 2, 9, 1, 0]", - "total_badness": 145.83375109 - }, - { - "ne1d": 144, - "ne2d": 150, - "ne3d": 100, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 7, 10, 16, 18, 15, 17, 6, 5, 4, 0]", - "total_badness": 146.646861 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 14, 14, 14, 18, 14, 6, 6, 0, 0]", + "total_badness": 149.18816997 }, { "ne1d": 144, "ne2d": 148, "ne3d": 98, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 6, 6, 19, 21, 12, 18, 5, 4, 4, 0]", - "total_badness": 145.14580662 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 11, 11, 17, 13, 16, 18, 3, 6, 0, 0]", + "total_badness": 148.56830588 }, { "ne1d": 144, "ne2d": 148, "ne3d": 98, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 18, 19, 13, 20, 2, 9, 1, 0]", - "total_badness": 145.83375109 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 8, 12, 14, 22, 10, 18, 4, 6, 0, 0]", + "total_badness": 148.71179128 + }, + { + "ne1d": 144, + "ne2d": 148, + "ne3d": 98, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 14, 14, 14, 18, 14, 6, 6, 0, 0]", + "total_badness": 149.18816997 }, { "ne1d": 264, - "ne2d": 386, - "ne3d": 365, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 6, 24, 31, 43, 39, 53, 35, 44, 51, 28, 9, 0]", - "total_badness": 553.03362076 + "ne2d": 352, + "ne3d": 323, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 17, 30, 42, 35, 42, 44, 22, 38, 30, 16, 5, 0]", + "total_badness": 519.87992051 }, { "ne1d": 428, - "ne2d": 930, - "ne3d": 1080, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 19, 59, 37, 100, 136, 100, 123, 162, 160, 66, 65, 28, 22]", - "total_badness": 1684.1500639 + "ne2d": 896, + "ne3d": 1041, + "quality_histogram": "[0, 0, 0, 0, 1, 0, 22, 65, 52, 55, 108, 133, 116, 87, 121, 117, 71, 50, 35, 8]", + "total_badness": 1741.9077189 } ], "cubemcyl.geo": [ { "ne1d": 142, - "ne2d": 2488, - "ne3d": 20940, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 22, 78, 213, 367, 738, 1237, 1875, 2588, 3120, 3314, 3117, 2521, 1385, 365]", - "total_badness": 29036.424267 + "ne2d": 2446, + "ne3d": 20325, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 20, 92, 231, 460, 766, 1183, 1905, 2410, 2914, 3288, 2936, 2375, 1346, 399]", + "total_badness": 28342.436807 }, { "ne1d": 64, - "ne2d": 642, - "ne3d": 3203, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 12, 17, 66, 128, 250, 364, 425, 515, 512, 463, 282, 137, 29]", - "total_badness": 4539.3174908 + "ne2d": 614, + "ne3d": 3139, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 17, 29, 33, 83, 171, 248, 355, 443, 490, 441, 384, 266, 139, 39]", + "total_badness": 4570.602164 }, { "ne1d": 102, - "ne2d": 1404, - "ne3d": 8421, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 7, 30, 87, 181, 362, 596, 792, 1120, 1271, 1262, 1165, 892, 516, 140]", - "total_badness": 11848.69595 + "ne2d": 1368, + "ne3d": 7908, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 9, 26, 74, 155, 343, 583, 878, 1123, 1166, 1167, 1068, 757, 405, 151]", + "total_badness": 11199.979147 }, { "ne1d": 142, - "ne2d": 2488, - "ne3d": 19608, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 6, 40, 75, 246, 608, 1243, 2030, 2896, 3459, 3612, 2986, 1887, 518]", - "total_badness": 25605.226153 + "ne2d": 2446, + "ne3d": 18974, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 8, 46, 130, 283, 637, 1146, 1993, 2808, 3265, 3451, 2949, 1780, 477]", + "total_badness": 24882.179707 }, { "ne1d": 210, - "ne2d": 5508, - "ne3d": 88843, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 23, 113, 364, 946, 2450, 5445, 10022, 14690, 18368, 18746, 13521, 4155]", - "total_badness": 109927.85826 + "ne2d": 5442, + "ne3d": 88762, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 8, 10, 46, 139, 446, 1122, 2673, 5668, 10362, 14952, 18108, 18162, 13099, 3966]", + "total_badness": 110409.45349 }, { "ne1d": 362, - "ne2d": 15120, - "ne3d": 521218, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 25, 119, 374, 1224, 3269, 9296, 24328, 50521, 82283, 109285, 119759, 91721, 29013]", - "total_badness": 633985.71695 + "ne2d": 14990, + "ne3d": 521283, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 31, 105, 442, 1248, 3487, 9538, 24363, 50655, 81983, 109930, 118710, 92196, 28593]", + "total_badness": 634417.38261 } ], "cubemsphere.geo": [ { "ne1d": 90, - "ne2d": 698, - "ne3d": 4877, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 6, 28, 55, 96, 194, 261, 445, 559, 740, 798, 698, 576, 333, 87]", - "total_badness": 6790.976699 + "ne2d": 634, + "ne3d": 4703, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 4, 26, 50, 102, 180, 271, 448, 602, 711, 733, 681, 539, 268, 87]", + "total_badness": 6582.1722514 }, { "ne1d": 44, - "ne2d": 280, - "ne3d": 783, - "quality_histogram": "[0, 0, 0, 0, 1, 2, 6, 19, 38, 61, 70, 94, 100, 91, 104, 76, 58, 38, 24, 1]", - "total_badness": 1271.4564508 + "ne2d": 220, + "ne3d": 592, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 11, 24, 38, 55, 74, 77, 81, 69, 58, 49, 30, 20, 3, 0]", + "total_badness": 1025.6506383 }, { "ne1d": 68, - "ne2d": 402, - "ne3d": 1571, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 12, 20, 68, 134, 170, 243, 246, 237, 214, 145, 59, 17]", - "total_badness": 2230.374452 + "ne2d": 376, + "ne3d": 1507, + "quality_histogram": "[0, 0, 0, 1, 0, 0, 1, 8, 27, 33, 82, 130, 185, 226, 255, 212, 182, 90, 63, 12]", + "total_badness": 2204.9089212 }, { "ne1d": 90, - "ne2d": 698, - "ne3d": 4583, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 9, 25, 77, 128, 251, 516, 657, 826, 857, 685, 432, 116]", - "total_badness": 5995.4068967 + "ne2d": 634, + "ne3d": 4404, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 9, 24, 77, 158, 268, 476, 650, 823, 776, 659, 379, 104]", + "total_badness": 5795.3747481 }, { "ne1d": 146, - "ne2d": 1490, - "ne3d": 17783, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 11, 31, 90, 203, 496, 1110, 1957, 3109, 3695, 3723, 2641, 714]", - "total_badness": 22085.583903 + "ne2d": 1378, + "ne3d": 17460, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 6, 39, 98, 248, 602, 1147, 1971, 2860, 3607, 3614, 2512, 754]", + "total_badness": 21776.503681 }, { "ne1d": 248, - "ne2d": 4356, - "ne3d": 113522, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 9, 35, 117, 341, 885, 2307, 5764, 11384, 18322, 23667, 25754, 19043, 5893]", - "total_badness": 138835.8933 + "ne2d": 4172, + "ne3d": 112451, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 12, 36, 142, 362, 921, 2362, 5754, 11538, 18135, 23443, 25137, 18809, 5798]", + "total_badness": 137714.88539 } ], "cylinder.geo": [ { "ne1d": 52, "ne2d": 288, - "ne3d": 413, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 10, 18, 31, 43, 56, 76, 61, 45, 47, 18, 5]", - "total_badness": 584.63640908 + "ne3d": 373, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 17, 48, 41, 57, 46, 46, 40, 40, 21, 10, 1]", + "total_badness": 570.55070099 }, { "ne1d": 24, "ne2d": 66, - "ne3d": 103, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 7, 15, 14, 21, 32, 10, 1]", - "total_badness": 127.27629078 + "ne3d": 113, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 5, 11, 14, 21, 20, 26, 5, 7]", + "total_badness": 144.11768709 }, { "ne1d": 36, "ne2d": 152, - "ne3d": 437, - "quality_histogram": "[0, 0, 14, 22, 37, 32, 30, 36, 31, 29, 34, 25, 27, 28, 22, 16, 33, 9, 9, 3]", - "total_badness": 1146.634165 + "ne3d": 350, + "quality_histogram": "[7, 11, 19, 25, 33, 33, 23, 20, 37, 19, 9, 14, 28, 12, 12, 4, 32, 4, 6, 2]", + "total_badness": 1478.5840853 }, { "ne1d": 52, "ne2d": 288, - "ne3d": 411, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 15, 29, 37, 61, 76, 59, 48, 52, 21, 3]", - "total_badness": 574.34537671 + "ne3d": 373, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 17, 48, 40, 56, 45, 48, 40, 40, 22, 10, 1]", + "total_badness": 570.48747936 }, { "ne1d": 76, "ne2d": 636, - "ne3d": 1155, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 10, 16, 50, 99, 120, 164, 206, 224, 139, 105, 18]", - "total_badness": 1536.3995031 + "ne3d": 1137, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 7, 27, 48, 71, 98, 132, 182, 156, 180, 136, 79, 19]", + "total_badness": 1578.5996937 }, { "ne1d": 124, - "ne2d": 1672, - "ne3d": 8102, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 13, 53, 167, 414, 787, 1233, 1788, 1856, 1334, 453]", - "total_badness": 9877.1010566 + "ne2d": 1666, + "ne3d": 8088, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 1, 8, 24, 76, 190, 400, 860, 1346, 1715, 1707, 1320, 440]", + "total_badness": 9920.5591087 } ], "cylsphere.geo": [ { "ne1d": 104, "ne2d": 496, - "ne3d": 711, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 10, 16, 35, 64, 89, 107, 102, 100, 57, 59, 50, 17, 2]", - "total_badness": 1105.7991926 + "ne3d": 769, + "quality_histogram": "[0, 0, 0, 0, 1, 1, 8, 10, 20, 31, 64, 104, 111, 105, 113, 63, 69, 47, 18, 4]", + "total_badness": 1205.3563502 }, { "ne1d": 48, - "ne2d": 140, - "ne3d": 225, - "quality_histogram": "[0, 0, 1, 13, 20, 34, 20, 21, 7, 6, 2, 8, 13, 18, 10, 23, 13, 7, 9, 0]", - "total_badness": 584.42426831 + "ne2d": 134, + "ne3d": 238, + "quality_histogram": "[0, 0, 0, 12, 19, 26, 14, 10, 19, 14, 10, 13, 23, 9, 9, 9, 16, 29, 6, 0]", + "total_badness": 566.26384849 }, { "ne1d": 72, - "ne2d": 324, - "ne3d": 665, - "quality_histogram": "[0, 1, 9, 14, 21, 37, 57, 76, 63, 57, 53, 60, 32, 54, 23, 35, 39, 16, 13, 5]", - "total_badness": 1528.6973752 + "ne2d": 320, + "ne3d": 543, + "quality_histogram": "[0, 0, 0, 1, 6, 18, 30, 55, 48, 44, 51, 46, 50, 26, 42, 37, 44, 17, 22, 6]", + "total_badness": 1046.4044454 }, { "ne1d": 104, "ne2d": 496, - "ne3d": 709, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 6, 15, 27, 62, 89, 110, 109, 90, 68, 66, 45, 15, 4]", - "total_badness": 1092.2233629 + "ne3d": 763, + "quality_histogram": "[0, 0, 0, 0, 1, 1, 6, 8, 15, 24, 53, 92, 109, 105, 114, 87, 71, 48, 28, 1]", + "total_badness": 1166.824818 }, { "ne1d": 152, "ne2d": 1084, - "ne3d": 2865, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 3, 28, 44, 88, 157, 276, 340, 471, 505, 493, 358, 99]", - "total_badness": 3710.287399 + "ne3d": 2754, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 18, 57, 104, 179, 269, 338, 409, 497, 462, 330, 86]", + "total_badness": 3593.8604452 }, { "ne1d": 248, - "ne2d": 2820, - "ne3d": 17765, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 15, 48, 129, 362, 859, 1699, 2843, 3786, 4041, 3023, 954]", - "total_badness": 21668.180843 + "ne2d": 2796, + "ne3d": 17632, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 14, 65, 169, 393, 961, 1708, 2855, 3774, 3844, 2922, 922]", + "total_badness": 21617.406219 } ], "ellipsoid.geo": [ { "ne1d": 0, - "ne2d": 704, - "ne3d": 1262, - "quality_histogram": "[0, 0, 0, 0, 1, 0, 8, 26, 39, 86, 118, 127, 178, 146, 148, 147, 107, 76, 43, 12]", - "total_badness": 1984.8094939 + "ne2d": 680, + "ne3d": 1253, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 11, 20, 53, 100, 111, 111, 155, 149, 154, 148, 135, 63, 34, 7]", + "total_badness": 1985.7030805 }, { "ne1d": 0, - "ne2d": 192, - "ne3d": 942, - "quality_histogram": "[22, 148, 137, 126, 91, 56, 81, 69, 47, 36, 29, 32, 23, 13, 12, 9, 5, 5, 1, 0]", - "total_badness": 5747.5204438 + "ne2d": 178, + "ne3d": 868, + "quality_histogram": "[4, 98, 135, 97, 109, 65, 50, 59, 43, 52, 38, 31, 31, 17, 17, 9, 6, 4, 3, 0]", + "total_badness": 4464.8470583 }, { "ne1d": 0, - "ne2d": 394, - "ne3d": 598, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 15, 17, 44, 69, 81, 100, 91, 53, 54, 39, 20, 9]", - "total_badness": 903.65236615 + "ne2d": 382, + "ne3d": 580, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 4, 14, 25, 55, 78, 93, 94, 67, 62, 37, 33, 12, 2]", + "total_badness": 904.85287903 }, { "ne1d": 0, - "ne2d": 704, - "ne3d": 1256, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 18, 35, 52, 103, 128, 169, 173, 155, 154, 121, 81, 49, 18]", - "total_badness": 1908.051206 + "ne2d": 680, + "ne3d": 1247, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 12, 46, 72, 103, 109, 149, 167, 171, 151, 126, 86, 36, 15]", + "total_badness": 1912.2663825 }, { "ne1d": 0, - "ne2d": 1618, - "ne3d": 5592, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 22, 74, 178, 307, 491, 711, 944, 1067, 921, 675, 199]", - "total_badness": 7199.7867843 + "ne2d": 1598, + "ne3d": 5187, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 12, 30, 120, 186, 330, 487, 671, 818, 900, 916, 552, 163]", + "total_badness": 6777.2750162 }, { "ne1d": 0, - "ne2d": 4236, - "ne3d": 41345, - "quality_histogram": "[0, 0, 0, 0, 3, 20, 108, 266, 403, 644, 1110, 1904, 2921, 4621, 6100, 6869, 6568, 5527, 3324, 957]", - "total_badness": 56476.648492 + "ne2d": 4194, + "ne3d": 37326, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 4, 4, 15, 38, 101, 309, 805, 1892, 3619, 5837, 7850, 8414, 6510, 1927]", + "total_badness": 45621.246486 } ], "ellipticcone.geo": [ { "ne1d": 174, - "ne2d": 1556, - "ne3d": 5213, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 7, 26, 47, 141, 216, 357, 555, 760, 902, 879, 712, 459, 151]", - "total_badness": 6957.997336 + "ne2d": 1514, + "ne3d": 5133, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 14, 23, 82, 130, 251, 424, 603, 797, 868, 844, 647, 341, 107]", + "total_badness": 6981.6197599 }, { "ne1d": 86, - "ne2d": 380, - "ne3d": 587, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 8, 8, 14, 33, 55, 67, 67, 76, 85, 69, 56, 32, 14]", - "total_badness": 853.7762584 + "ne2d": 368, + "ne3d": 589, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 14, 16, 25, 60, 55, 55, 68, 70, 73, 70, 48, 30, 5]", + "total_badness": 894.91658405 }, { "ne1d": 130, - "ne2d": 864, - "ne3d": 1780, - "quality_histogram": "[0, 0, 0, 1, 3, 4, 12, 22, 34, 43, 79, 96, 136, 191, 227, 251, 258, 253, 129, 41]", - "total_badness": 2537.0484182 + "ne2d": 834, + "ne3d": 1605, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 6, 24, 40, 69, 119, 192, 205, 235, 242, 200, 161, 86, 23]", + "total_badness": 2293.3504808 }, { "ne1d": 174, - "ne2d": 1556, - "ne3d": 4971, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 17, 53, 107, 248, 431, 665, 897, 978, 791, 593, 187]", - "total_badness": 6359.4493283 + "ne2d": 1514, + "ne3d": 4920, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 1, 24, 68, 142, 286, 532, 774, 876, 900, 747, 441, 128]", + "total_badness": 6425.5732257 }, { "ne1d": 258, - "ne2d": 3454, - "ne3d": 13441, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 8, 29, 62, 198, 341, 643, 1044, 1682, 2259, 2506, 2486, 1671, 511]", - "total_badness": 17201.441954 + "ne2d": 3350, + "ne3d": 13033, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 7, 35, 106, 181, 363, 681, 1120, 1738, 2146, 2478, 2187, 1501, 486]", + "total_badness": 16847.718951 }, { "ne1d": 432, - "ne2d": 9518, - "ne3d": 69596, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 40, 121, 306, 826, 1862, 3802, 7575, 11204, 14503, 14913, 11126, 3312]", - "total_badness": 85930.227173 + "ne2d": 9278, + "ne3d": 69660, + "quality_histogram": "[0, 0, 0, 0, 3, 5, 9, 30, 75, 155, 423, 954, 2071, 4217, 7619, 11353, 14206, 14652, 10674, 3214]", + "total_badness": 86601.731893 } ], "ellipticcyl.geo": [ { "ne1d": 156, - "ne2d": 994, - "ne3d": 2275, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 10, 26, 44, 84, 125, 208, 263, 341, 376, 326, 261, 175, 35]", - "total_badness": 3156.3970605 + "ne2d": 962, + "ne3d": 2143, + "quality_histogram": "[0, 0, 0, 0, 1, 3, 4, 22, 46, 68, 111, 155, 207, 300, 298, 285, 264, 221, 121, 37]", + "total_badness": 3112.7584751 }, { "ne1d": 76, - "ne2d": 238, + "ne2d": 234, "ne3d": 325, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 18, 28, 26, 37, 71, 54, 46, 27, 10, 2]", - "total_badness": 459.39040523 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 16, 23, 20, 48, 68, 50, 40, 32, 17, 5]", + "total_badness": 453.9976362 }, { "ne1d": 116, - "ne2d": 596, - "ne3d": 1114, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 10, 17, 41, 80, 144, 172, 205, 165, 155, 97, 25]", - "total_badness": 1483.3007518 + "ne2d": 588, + "ne3d": 1087, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 5, 12, 24, 58, 102, 152, 175, 168, 178, 116, 75, 20]", + "total_badness": 1485.3521875 }, { "ne1d": 156, - "ne2d": 994, - "ne3d": 2199, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 8, 35, 43, 95, 163, 238, 314, 377, 378, 307, 193, 45]", - "total_badness": 2944.2434449 + "ne2d": 962, + "ne3d": 2073, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 3, 12, 21, 57, 74, 130, 165, 270, 319, 299, 291, 238, 155, 36]", + "total_badness": 2905.3559173 }, { "ne1d": 232, - "ne2d": 2198, - "ne3d": 8225, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 5, 9, 46, 106, 269, 605, 988, 1459, 1629, 1655, 1138, 313]", - "total_badness": 10297.191925 + "ne2d": 2134, + "ne3d": 8123, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 14, 25, 66, 136, 318, 644, 1021, 1431, 1662, 1489, 1001, 314]", + "total_badness": 10284.60484 }, { "ne1d": 388, - "ne2d": 6124, - "ne3d": 55078, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 10, 28, 97, 356, 939, 2483, 5114, 8528, 11618, 12908, 9908, 3088]", - "total_badness": 66822.93034 + "ne2d": 5968, + "ne3d": 55441, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 6, 13, 49, 145, 382, 944, 2547, 5198, 8766, 11807, 12906, 9584, 3094]", + "total_badness": 67425.887286 } ], "fichera.geo": [ { "ne1d": 50, "ne2d": 38, - "ne3d": 40, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 4, 3, 5, 7, 8, 2, 1, 0, 2]", - "total_badness": 62.361996883 + "ne3d": 35, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 0, 14, 6, 4, 3, 0, 0, 0]", + "total_badness": 52.723984269 }, { "ne1d": 42, @@ -640,90 +640,90 @@ { "ne1d": 50, "ne2d": 38, - "ne3d": 40, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 4, 3, 5, 7, 8, 2, 1, 0, 2]", - "total_badness": 62.361996883 + "ne3d": 35, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 0, 14, 6, 4, 3, 0, 0, 0]", + "total_badness": 52.723984269 }, { "ne1d": 96, - "ne2d": 118, - "ne3d": 208, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 6, 10, 16, 24, 36, 33, 41, 30, 6]", - "total_badness": 266.1986561 + "ne2d": 106, + "ne3d": 179, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 10, 20, 26, 30, 24, 23, 20, 12, 6]", + "total_badness": 245.27475687 }, { "ne1d": 144, - "ne2d": 274, - "ne3d": 514, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 14, 32, 55, 87, 97, 91, 71, 52, 13]", - "total_badness": 666.67507269 + "ne2d": 254, + "ne3d": 517, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 5, 18, 36, 63, 77, 102, 79, 72, 50, 9]", + "total_badness": 684.87955167 } ], "frame.step": [ { "ne1d": 12694, - "ne2d": 40474, - "ne3d": 221182, - "quality_histogram": "[2, 7, 8, 9, 8, 45, 297, 719, 1786, 3439, 6255, 10896, 17573, 25401, 32432, 35856, 35294, 28822, 17734, 4599]", - "total_badness": 301822.09951 + "ne2d": 38314, + "ne3d": 212505, + "quality_histogram": "[8, 17, 39, 82, 157, 311, 699, 1584, 2930, 5028, 8196, 12501, 18612, 25602, 30126, 32912, 30427, 24165, 14877, 4232]", + "total_badness": 300743.24149 }, { "ne1d": 6026, - "ne2d": 11330, - "ne3d": 33930, - "quality_histogram": "[4, 44, 54, 95, 236, 493, 862, 1288, 1877, 2386, 2810, 3502, 3735, 3948, 3901, 3241, 2597, 1776, 871, 210]", - "total_badness": 59128.564033 + "ne2d": 10908, + "ne3d": 29168, + "quality_histogram": "[5, 17, 30, 54, 113, 234, 303, 636, 1004, 1450, 1997, 2754, 3211, 3473, 3849, 3740, 2873, 2006, 1087, 332]", + "total_badness": 46555.75668 }, { "ne1d": 9704, - "ne2d": 24358, - "ne3d": 85648, - "quality_histogram": "[2, 6, 5, 10, 5, 24, 87, 165, 425, 1072, 2383, 4552, 7532, 10936, 13505, 14259, 13226, 10274, 5670, 1510]", - "total_badness": 117436.51999 + "ne2d": 23136, + "ne3d": 81782, + "quality_histogram": "[5, 26, 39, 74, 110, 192, 375, 607, 1135, 2087, 3287, 5720, 8327, 11033, 11795, 12158, 10560, 8207, 4838, 1207]", + "total_badness": 118661.78058 } ], "hinge.stl": [ { "ne1d": 456, "ne2d": 1230, - "ne3d": 1990, - "quality_histogram": "[0, 0, 0, 0, 1, 2, 3, 9, 21, 47, 69, 116, 164, 237, 326, 280, 298, 225, 151, 41]", - "total_badness": 2772.6154636 + "ne3d": 1982, + "quality_histogram": "[0, 0, 0, 1, 2, 1, 4, 8, 22, 45, 68, 119, 169, 255, 300, 273, 286, 241, 147, 41]", + "total_badness": 2769.400459 }, { "ne1d": 298, - "ne2d": 608, - "ne3d": 770, - "quality_histogram": "[0, 0, 0, 1, 10, 9, 19, 15, 35, 46, 62, 87, 79, 89, 83, 87, 64, 45, 30, 9]", - "total_badness": 1284.6220542 + "ne2d": 614, + "ne3d": 778, + "quality_histogram": "[0, 0, 0, 0, 12, 11, 21, 18, 43, 53, 58, 71, 88, 85, 92, 93, 60, 44, 22, 7]", + "total_badness": 1321.0009733 }, { "ne1d": 370, - "ne2d": 854, - "ne3d": 1130, - "quality_histogram": "[0, 0, 0, 0, 2, 4, 17, 25, 26, 34, 64, 107, 137, 161, 156, 181, 93, 73, 42, 8]", - "total_badness": 1739.2621504 + "ne2d": 856, + "ne3d": 1137, + "quality_histogram": "[0, 0, 0, 0, 2, 7, 12, 20, 30, 43, 62, 114, 125, 155, 157, 182, 105, 64, 44, 15]", + "total_badness": 1746.193159 }, { "ne1d": 516, "ne2d": 1584, - "ne3d": 2549, - "quality_histogram": "[0, 0, 0, 0, 2, 1, 7, 19, 30, 53, 121, 174, 224, 296, 384, 362, 331, 304, 201, 40]", - "total_badness": 3600.6650263 + "ne3d": 2541, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 7, 7, 22, 58, 110, 180, 233, 292, 361, 381, 338, 309, 196, 47]", + "total_badness": 3554.0634047 }, { "ne1d": 722, "ne2d": 2888, - "ne3d": 6818, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 12, 29, 67, 167, 379, 655, 877, 1099, 1146, 1177, 948, 258]", - "total_badness": 8742.2896959 + "ne3d": 6849, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 2, 18, 24, 66, 167, 352, 617, 884, 1136, 1241, 1156, 907, 278]", + "total_badness": 8770.1231664 }, { "ne1d": 1862, "ne2d": 19516, - "ne3d": 135482, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 6, 30, 145, 444, 1158, 3034, 7025, 13447, 21335, 28448, 30344, 22953, 7112]", - "total_badness": 165806.81509 + "ne3d": 138101, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 7, 31, 129, 400, 1163, 2873, 7052, 13502, 21822, 29035, 31031, 23540, 7514]", + "total_badness": 168731.72877 } ], "lshape3d.geo": [ @@ -757,93 +757,93 @@ }, { "ne1d": 80, - "ne2d": 76, - "ne3d": 88, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 10, 9, 21, 23, 7, 6, 1, 4]", - "total_badness": 121.1271849 + "ne2d": 66, + "ne3d": 73, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 9, 9, 9, 17, 14, 2, 3, 6]", + "total_badness": 97.371969345 }, { "ne1d": 122, - "ne2d": 204, - "ne3d": 331, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 7, 21, 26, 41, 39, 61, 57, 46, 24, 7]", - "total_badness": 443.95235947 + "ne2d": 190, + "ne3d": 304, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 6, 8, 20, 38, 34, 59, 55, 27, 37, 9]", + "total_badness": 408.34610106 } ], "manyholes.geo": [ { "ne1d": 5886, - "ne2d": 48038, - "ne3d": 179405, - "quality_histogram": "[0, 0, 2, 1, 8, 27, 65, 207, 559, 1418, 3370, 7627, 12710, 20134, 27407, 30177, 29994, 24813, 16843, 4043]", - "total_badness": 238774.17579 + "ne2d": 46994, + "ne3d": 178258, + "quality_histogram": "[0, 0, 0, 0, 8, 50, 338, 268, 1001, 1782, 4230, 9114, 12778, 22138, 26582, 30068, 28574, 22323, 12911, 6093]", + "total_badness": 241077.60229 }, { "ne1d": 2746, - "ne2d": 13838, - "ne3d": 29184, - "quality_histogram": "[0, 0, 0, 1, 5, 26, 45, 181, 387, 817, 1524, 2280, 3331, 4394, 4120, 3700, 3202, 2567, 1880, 724]", - "total_badness": 42098.721268 + "ne2d": 13378, + "ne3d": 29015, + "quality_histogram": "[0, 0, 0, 0, 11, 36, 101, 261, 569, 928, 1565, 2421, 3036, 3930, 4729, 4059, 2750, 2077, 1180, 1362]", + "total_badness": 42502.70594 }, { "ne1d": 4106, - "ne2d": 27992, - "ne3d": 70789, - "quality_histogram": "[0, 0, 0, 2, 30, 78, 189, 443, 837, 1706, 2919, 4402, 7061, 9455, 10197, 10269, 9498, 7395, 4474, 1834]", - "total_badness": 100213.31676 + "ne2d": 27348, + "ne3d": 69176, + "quality_histogram": "[0, 0, 0, 3, 31, 109, 199, 524, 999, 1835, 3521, 5175, 7195, 10701, 9247, 9303, 8279, 6175, 3449, 2431]", + "total_badness": 99864.410415 } ], "manyholes2.geo": [ { "ne1d": 10202, - "ne2d": 55340, - "ne3d": 128088, - "quality_histogram": "[0, 0, 0, 0, 7, 30, 95, 288, 823, 2105, 4573, 7847, 11840, 18008, 18739, 18350, 16782, 14747, 10264, 3590]", - "total_badness": 176960.02706 + "ne2d": 53486, + "ne3d": 139190, + "quality_histogram": "[0, 1, 168, 441, 975, 1689, 2691, 3289, 4667, 5762, 8158, 11621, 13472, 16651, 21820, 18509, 12164, 7790, 3882, 5440]", + "total_badness": 223824.49195 } ], "matrix.geo": [ { "ne1d": 174, - "ne2d": 1194, - "ne3d": 5295, - "quality_histogram": "[0, 0, 32, 147, 135, 100, 130, 147, 177, 237, 361, 409, 554, 617, 583, 555, 457, 385, 212, 57]", - "total_badness": 9761.5954211 + "ne2d": 1084, + "ne3d": 4699, + "quality_histogram": "[0, 0, 13, 73, 49, 72, 104, 195, 232, 324, 348, 450, 518, 514, 513, 418, 364, 308, 157, 47]", + "total_badness": 8342.3218051 }, { "ne1d": 106, - "ne2d": 600, - "ne3d": 2001, - "quality_histogram": "[0, 3, 20, 65, 122, 160, 137, 169, 184, 189, 172, 190, 184, 137, 89, 53, 45, 54, 20, 8]", - "total_badness": 4865.5803344 + "ne2d": 566, + "ne3d": 1890, + "quality_histogram": "[0, 6, 46, 100, 165, 157, 187, 195, 175, 172, 157, 126, 113, 91, 67, 50, 34, 20, 19, 10]", + "total_badness": 5257.1128921 }, { "ne1d": 132, - "ne2d": 828, - "ne3d": 2783, - "quality_histogram": "[0, 0, 13, 51, 108, 146, 173, 161, 225, 265, 333, 287, 211, 205, 173, 161, 117, 93, 45, 16]", - "total_badness": 5980.1022567 + "ne2d": 760, + "ne3d": 2545, + "quality_histogram": "[0, 0, 12, 35, 55, 94, 105, 187, 268, 293, 293, 266, 233, 187, 152, 115, 121, 65, 49, 15]", + "total_badness": 5261.0373333 }, { "ne1d": 174, - "ne2d": 1194, - "ne3d": 5105, - "quality_histogram": "[0, 0, 20, 134, 116, 78, 117, 149, 152, 188, 285, 371, 498, 547, 578, 611, 503, 441, 254, 63]", - "total_badness": 9068.0076408 + "ne2d": 1084, + "ne3d": 4585, + "quality_histogram": "[0, 0, 11, 44, 38, 56, 90, 162, 223, 280, 328, 417, 462, 526, 487, 490, 431, 301, 185, 54]", + "total_badness": 7814.6531832 }, { "ne1d": 248, - "ne2d": 2324, - "ne3d": 16255, - "quality_histogram": "[0, 0, 0, 0, 0, 5, 24, 75, 128, 202, 346, 678, 1062, 1517, 2149, 2515, 2754, 2540, 1722, 538]", - "total_badness": 21663.043545 + "ne2d": 2214, + "ne3d": 15658, + "quality_histogram": "[0, 0, 0, 2, 2, 20, 40, 101, 153, 301, 415, 740, 1135, 1544, 1997, 2392, 2499, 2362, 1552, 403]", + "total_badness": 21309.771439 }, { "ne1d": 418, - "ne2d": 5966, - "ne3d": 100388, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 6, 24, 71, 195, 503, 1186, 2824, 5989, 10497, 16251, 20497, 21258, 16049, 5037]", - "total_badness": 124129.95267 + "ne2d": 5826, + "ne3d": 100044, + "quality_histogram": "[0, 0, 0, 1, 3, 12, 22, 40, 112, 259, 681, 1477, 3255, 6325, 10800, 16144, 20094, 20986, 15199, 4634]", + "total_badness": 124683.88481 } ], "ortho.geo": [ @@ -884,473 +884,473 @@ }, { "ne1d": 72, - "ne2d": 116, - "ne3d": 180, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 14, 9, 27, 39, 31, 30, 17, 5]", - "total_badness": 233.34798934 + "ne2d": 110, + "ne3d": 172, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 10, 15, 17, 30, 27, 25, 30, 7, 5]", + "total_badness": 232.48733688 } ], "part1.stl": [ { "ne1d": 170, - "ne2d": 454, - "ne3d": 1228, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 5, 20, 38, 51, 111, 128, 195, 211, 190, 152, 90, 31]", - "total_badness": 1672.6379358 + "ne2d": 452, + "ne3d": 1221, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 9, 15, 14, 42, 45, 91, 129, 124, 150, 175, 182, 137, 87, 19]", + "total_badness": 1752.7121974 }, { "ne1d": 112, - "ne2d": 212, - "ne3d": 346, - "quality_histogram": "[0, 0, 0, 3, 8, 8, 8, 9, 19, 25, 40, 40, 35, 39, 38, 37, 17, 14, 5, 1]", - "total_badness": 629.86936176 + "ne2d": 210, + "ne3d": 331, + "quality_histogram": "[0, 0, 1, 0, 6, 6, 9, 13, 20, 24, 35, 36, 36, 42, 35, 26, 25, 9, 7, 1]", + "total_badness": 593.98191451 }, { "ne1d": 134, - "ne2d": 288, - "ne3d": 523, - "quality_histogram": "[0, 0, 0, 0, 0, 5, 5, 4, 14, 15, 32, 48, 68, 67, 66, 76, 44, 43, 29, 7]", - "total_badness": 790.86141744 + "ne2d": 286, + "ne3d": 519, + "quality_histogram": "[0, 0, 0, 0, 1, 3, 4, 5, 11, 9, 28, 39, 66, 73, 64, 71, 65, 46, 28, 6]", + "total_badness": 768.26259551 }, { "ne1d": 194, - "ne2d": 594, - "ne3d": 1742, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 5, 9, 40, 88, 126, 192, 280, 281, 279, 241, 165, 34]", - "total_badness": 2325.4945287 + "ne2d": 592, + "ne3d": 1740, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 8, 29, 68, 110, 201, 256, 293, 262, 269, 195, 46]", + "total_badness": 2286.299101 }, { "ne1d": 266, "ne2d": 990, - "ne3d": 4103, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 13, 28, 69, 162, 317, 534, 761, 831, 732, 513, 140]", - "total_badness": 5196.8765579 + "ne3d": 4048, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 7, 14, 39, 67, 175, 322, 533, 730, 789, 739, 499, 134]", + "total_badness": 5148.0493548 }, { "ne1d": 674, "ne2d": 6870, - "ne3d": 82768, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 14, 59, 188, 513, 1613, 4088, 7976, 12954, 17553, 18871, 14413, 4526]", - "total_badness": 100797.22838 + "ne3d": 84183, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 21, 60, 225, 579, 1748, 4156, 8065, 12832, 17827, 19301, 14804, 4562]", + "total_badness": 102573.89785 } ], "period.geo": [ { "ne1d": 344, - "ne2d": 1130, - "ne3d": 3294, - "quality_histogram": "[0, 0, 0, 0, 0, 11, 22, 35, 81, 112, 210, 253, 402, 409, 494, 439, 371, 274, 135, 46]", - "total_badness": 4918.0434035 + "ne2d": 1084, + "ne3d": 3278, + "quality_histogram": "[0, 5, 14, 14, 23, 25, 47, 84, 110, 154, 256, 310, 348, 386, 396, 354, 307, 234, 155, 56]", + "total_badness": 5432.5002888 }, { "ne1d": 160, - "ne2d": 286, - "ne3d": 659, - "quality_histogram": "[0, 4, 8, 11, 15, 22, 23, 30, 40, 58, 66, 57, 66, 59, 57, 36, 43, 42, 16, 6]", - "total_badness": 1346.7559432 + "ne2d": 266, + "ne3d": 587, + "quality_histogram": "[0, 0, 1, 6, 17, 26, 27, 41, 51, 52, 39, 54, 43, 44, 41, 44, 24, 47, 20, 10]", + "total_badness": 1164.3298304 }, { "ne1d": 232, - "ne2d": 590, - "ne3d": 1593, - "quality_histogram": "[0, 0, 21, 30, 45, 47, 61, 92, 104, 145, 141, 138, 146, 148, 134, 114, 107, 63, 46, 11]", - "total_badness": 3241.6735555 + "ne2d": 542, + "ne3d": 1307, + "quality_histogram": "[0, 0, 2, 8, 20, 50, 54, 71, 94, 89, 105, 157, 139, 116, 109, 84, 104, 51, 33, 21]", + "total_badness": 2452.0445067 }, { "ne1d": 344, - "ne2d": 1130, - "ne3d": 3209, - "quality_histogram": "[0, 0, 0, 0, 0, 4, 19, 29, 56, 85, 162, 229, 352, 413, 479, 468, 390, 320, 156, 47]", - "total_badness": 4660.4012194 + "ne2d": 1084, + "ne3d": 3191, + "quality_histogram": "[0, 1, 5, 6, 22, 12, 27, 55, 85, 133, 225, 274, 317, 391, 403, 388, 344, 252, 180, 71]", + "total_badness": 4959.2612367 }, { "ne1d": 480, - "ne2d": 2260, - "ne3d": 11824, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 15, 44, 152, 298, 546, 944, 1504, 2045, 2229, 2105, 1531, 408]", - "total_badness": 15109.078092 + "ne2d": 2170, + "ne3d": 11358, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 8, 32, 78, 156, 319, 661, 1069, 1444, 1903, 2141, 1909, 1239, 399]", + "total_badness": 14721.191349 }, { "ne1d": 820, - "ne2d": 6218, - "ne3d": 68383, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 12, 37, 108, 252, 694, 1708, 3917, 7031, 11058, 14173, 14782, 11158, 3451]", - "total_badness": 84181.20294 + "ne2d": 6080, + "ne3d": 67352, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 28, 98, 306, 824, 1965, 4113, 7215, 11082, 13763, 14092, 10512, 3350]", + "total_badness": 83350.921624 } ], "plane.stl": [ { "ne1d": 890, - "ne2d": 2646, - "ne3d": 8528, - "quality_histogram": "[4, 14, 27, 37, 43, 46, 41, 91, 102, 180, 331, 464, 679, 978, 1233, 1340, 1240, 987, 555, 136]", - "total_badness": 12856.87891 + "ne2d": 2642, + "ne3d": 8595, + "quality_histogram": "[4, 13, 28, 37, 47, 45, 46, 76, 119, 205, 339, 501, 686, 989, 1187, 1277, 1290, 971, 584, 151]", + "total_badness": 12988.842256 }, { "ne1d": 572, - "ne2d": 1228, - "ne3d": 1901, - "quality_histogram": "[2, 18, 45, 48, 51, 66, 60, 92, 128, 133, 165, 191, 187, 197, 168, 128, 114, 65, 39, 4]", - "total_badness": 4320.0075948 + "ne2d": 1226, + "ne3d": 1904, + "quality_histogram": "[2, 15, 45, 48, 51, 64, 68, 85, 111, 137, 157, 178, 181, 193, 185, 151, 109, 79, 35, 10]", + "total_badness": 4266.5881394 }, { "ne1d": 724, - "ne2d": 1754, - "ne3d": 3285, - "quality_histogram": "[4, 20, 30, 41, 36, 43, 44, 68, 96, 154, 170, 280, 339, 436, 436, 406, 340, 206, 107, 29]", - "total_badness": 5959.5331564 + "ne2d": 1748, + "ne3d": 3263, + "quality_histogram": "[5, 21, 30, 43, 40, 47, 39, 66, 96, 148, 182, 302, 323, 393, 459, 390, 329, 197, 124, 29]", + "total_badness": 5975.2670543 }, { "ne1d": 956, - "ne2d": 2886, - "ne3d": 8682, - "quality_histogram": "[3, 11, 23, 48, 51, 47, 53, 55, 92, 133, 207, 340, 555, 905, 1236, 1446, 1418, 1197, 665, 197]", - "total_badness": 12703.577343 + "ne2d": 2882, + "ne3d": 8446, + "quality_histogram": "[4, 12, 23, 50, 42, 48, 44, 59, 82, 157, 207, 360, 560, 882, 1225, 1335, 1352, 1160, 663, 181]", + "total_badness": 12444.826653 }, { "ne1d": 1554, "ne2d": 6466, - "ne3d": 31866, - "quality_histogram": "[4, 7, 10, 5, 21, 54, 53, 79, 111, 204, 328, 684, 1327, 2460, 3983, 5375, 6122, 5827, 4106, 1106]", - "total_badness": 41304.661508 + "ne3d": 32031, + "quality_histogram": "[5, 6, 8, 8, 23, 53, 54, 80, 112, 196, 405, 711, 1412, 2584, 3934, 5449, 6160, 5835, 3889, 1107]", + "total_badness": 41668.344524 }, { "ne1d": 2992, "ne2d": 23396, - "ne3d": 276949, - "quality_histogram": "[5, 10, 11, 13, 8, 23, 34, 93, 171, 459, 1121, 2702, 6581, 15040, 28425, 44154, 58179, 60855, 45197, 13868]", - "total_badness": 341180.22628 + "ne3d": 278063, + "quality_histogram": "[5, 7, 10, 7, 10, 24, 35, 101, 221, 488, 1182, 2740, 6870, 15308, 29180, 44805, 57832, 60855, 44767, 13616]", + "total_badness": 343096.47286 } ], "revolution.geo": [ { "ne1d": 320, - "ne2d": 3080, - "ne3d": 8493, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 14, 37, 141, 292, 516, 761, 908, 1113, 1149, 1153, 1021, 809, 454, 124]", - "total_badness": 12348.498749 + "ne2d": 2954, + "ne3d": 8130, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 15, 66, 164, 321, 511, 753, 963, 1055, 1091, 997, 911, 712, 457, 112]", + "total_badness": 11989.408099 }, { "ne1d": 160, - "ne2d": 822, - "ne3d": 1275, - "quality_histogram": "[0, 0, 0, 0, 1, 13, 46, 79, 104, 128, 151, 162, 143, 122, 97, 67, 79, 44, 33, 6]", - "total_badness": 2301.511908 + "ne2d": 796, + "ne3d": 1285, + "quality_histogram": "[0, 2, 3, 11, 14, 24, 57, 98, 126, 126, 148, 122, 112, 120, 86, 87, 69, 48, 29, 3]", + "total_badness": 2509.4805977 }, { "ne1d": 240, - "ne2d": 1814, - "ne3d": 4263, - "quality_histogram": "[0, 0, 0, 1, 24, 48, 98, 178, 257, 329, 374, 485, 464, 451, 424, 377, 341, 236, 134, 42]", - "total_badness": 7266.9014253 + "ne2d": 1760, + "ne3d": 3853, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 15, 29, 96, 198, 280, 418, 475, 513, 491, 435, 388, 290, 178, 47]", + "total_badness": 5821.5572222 }, { "ne1d": 320, - "ne2d": 3080, - "ne3d": 8289, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 6, 11, 68, 186, 384, 601, 825, 1052, 1157, 1179, 1159, 966, 521, 172]", - "total_badness": 11619.248926 + "ne2d": 2954, + "ne3d": 7952, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 5, 37, 90, 213, 416, 639, 885, 1020, 1079, 1061, 987, 837, 540, 142]", + "total_badness": 11344.409226 }, { "ne1d": 480, - "ne2d": 6802, - "ne3d": 32879, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 12, 84, 271, 645, 1296, 2517, 4137, 5621, 6316, 6268, 4405, 1302]", - "total_badness": 41520.358013 + "ne2d": 6588, + "ne3d": 32800, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 36, 118, 313, 732, 1437, 2573, 4093, 5522, 6343, 6179, 4242, 1207]", + "total_badness": 41659.895413 }, { "ne1d": 800, - "ne2d": 17838, - "ne3d": 201709, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 11, 55, 165, 539, 1581, 4149, 10238, 19945, 31707, 42528, 45753, 34593, 10445]", - "total_badness": 246377.26479 + "ne2d": 17344, + "ne3d": 200087, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 11, 50, 218, 615, 1690, 4420, 10233, 19967, 31844, 41733, 45345, 33688, 10271]", + "total_badness": 244872.84796 } ], "screw.step": [ { "ne1d": 400, - "ne2d": 1426, - "ne3d": 2472, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 12, 81, 91, 181, 174, 234, 298, 277, 288, 283, 242, 190, 101, 19]", - "total_badness": 3876.6679484 + "ne2d": 1480, + "ne3d": 2653, + "quality_histogram": "[0, 0, 2, 0, 7, 16, 49, 76, 113, 180, 195, 247, 283, 319, 333, 301, 238, 173, 98, 23]", + "total_badness": 4292.3386321 }, { "ne1d": 530, - "ne2d": 2672, - "ne3d": 7959, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 13, 27, 70, 146, 225, 454, 786, 1144, 1323, 1454, 1239, 822, 250]", - "total_badness": 10425.046404 + "ne2d": 2746, + "ne3d": 7958, + "quality_histogram": "[0, 2, 3, 3, 10, 18, 32, 54, 96, 165, 275, 406, 652, 829, 1094, 1281, 1241, 972, 658, 167]", + "total_badness": 11151.647682 }, { "ne1d": 668, - "ne2d": 4982, - "ne3d": 31524, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 5, 18, 51, 119, 302, 759, 1716, 3303, 5151, 6604, 6989, 5042, 1462]", - "total_badness": 38816.567058 + "ne2d": 5056, + "ne3d": 31637, + "quality_histogram": "[0, 0, 0, 0, 3, 8, 7, 29, 45, 116, 211, 472, 962, 2036, 3514, 5090, 6534, 6520, 4661, 1429]", + "total_badness": 39550.048437 } ], "sculpture.geo": [ { "ne1d": 192, - "ne2d": 412, - "ne3d": 474, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 1, 4, 16, 22, 41, 56, 66, 94, 93, 45, 22, 10, 2]", - "total_badness": 694.32501707 + "ne2d": 396, + "ne3d": 456, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 2, 10, 22, 37, 41, 52, 70, 77, 75, 41, 17, 9, 1]", + "total_badness": 693.76412329 }, { "ne1d": 102, - "ne2d": 144, - "ne3d": 138, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 11, 22, 22, 30, 28, 19, 1]", - "total_badness": 172.99655803 + "ne2d": 142, + "ne3d": 135, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 3, 10, 14, 14, 18, 29, 21, 18, 3]", + "total_badness": 176.12964862 }, { "ne1d": 144, - "ne2d": 248, - "ne3d": 259, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 7, 14, 25, 29, 47, 50, 46, 25, 7]", - "total_badness": 337.75654539 + "ne2d": 234, + "ne3d": 234, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 8, 12, 11, 19, 36, 50, 41, 30, 20, 2]", + "total_badness": 314.37494393 }, { "ne1d": 192, - "ne2d": 412, - "ne3d": 473, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 3, 16, 22, 41, 56, 67, 94, 93, 45, 22, 10, 2]", - "total_badness": 690.01007288 + "ne2d": 396, + "ne3d": 456, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 2, 10, 22, 37, 41, 52, 70, 77, 75, 41, 17, 9, 1]", + "total_badness": 693.76413573 }, { "ne1d": 288, - "ne2d": 962, - "ne3d": 1342, - "quality_histogram": "[0, 0, 0, 0, 1, 0, 8, 25, 55, 76, 126, 141, 130, 145, 122, 136, 146, 128, 84, 19]", - "total_badness": 2068.4211724 + "ne2d": 928, + "ne3d": 1247, + "quality_histogram": "[0, 0, 0, 0, 1, 2, 14, 34, 68, 68, 133, 144, 132, 125, 140, 135, 109, 67, 53, 22]", + "total_badness": 2003.8623066 }, { "ne1d": 480, - "ne2d": 2396, - "ne3d": 6759, - "quality_histogram": "[0, 0, 0, 0, 3, 7, 8, 20, 26, 48, 63, 134, 286, 497, 697, 1121, 1313, 1288, 944, 304]", - "total_badness": 8628.8134106 + "ne2d": 2310, + "ne3d": 6419, + "quality_histogram": "[0, 0, 0, 3, 6, 11, 18, 14, 20, 60, 89, 176, 293, 543, 879, 1085, 1182, 1071, 702, 267]", + "total_badness": 8393.0036926 } ], "shaft.geo": [ { "ne1d": 708, - "ne2d": 1726, - "ne3d": 2758, - "quality_histogram": "[5, 19, 22, 27, 27, 37, 60, 74, 82, 160, 296, 372, 295, 251, 231, 278, 234, 181, 86, 21]", - "total_badness": 5318.0297732 + "ne2d": 1668, + "ne3d": 2420, + "quality_histogram": "[0, 0, 2, 0, 2, 5, 18, 35, 71, 156, 392, 338, 271, 271, 204, 255, 201, 106, 73, 20]", + "total_badness": 3933.8460804 }, { "ne1d": 410, - "ne2d": 604, - "ne3d": 951, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 6, 17, 32, 42, 65, 90, 111, 140, 137, 132, 103, 58, 17]", - "total_badness": 1354.4698007 + "ne2d": 580, + "ne3d": 841, + "quality_histogram": "[0, 0, 0, 0, 1, 3, 5, 14, 21, 34, 49, 54, 80, 99, 105, 104, 112, 100, 39, 21]", + "total_badness": 1241.4009871 }, { "ne1d": 510, - "ne2d": 1012, - "ne3d": 2088, - "quality_histogram": "[20, 46, 76, 95, 111, 105, 97, 134, 91, 101, 96, 141, 150, 177, 193, 168, 177, 56, 41, 13]", - "total_badness": 6181.8600404 + "ne2d": 968, + "ne3d": 1643, + "quality_histogram": "[0, 0, 4, 26, 41, 57, 73, 68, 102, 118, 144, 145, 167, 173, 158, 140, 125, 53, 36, 13]", + "total_badness": 3172.6008055 }, { "ne1d": 708, - "ne2d": 1726, - "ne3d": 2749, - "quality_histogram": "[0, 2, 15, 16, 32, 30, 44, 71, 72, 143, 302, 400, 289, 259, 236, 273, 259, 196, 88, 22]", - "total_badness": 4725.048506 + "ne2d": 1668, + "ne3d": 2413, + "quality_histogram": "[0, 0, 0, 0, 0, 6, 12, 25, 57, 154, 394, 335, 291, 260, 206, 271, 199, 113, 72, 18]", + "total_badness": 3870.1528345 }, { "ne1d": 1138, - "ne2d": 4220, - "ne3d": 11186, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 30, 80, 154, 350, 602, 945, 1409, 1830, 2160, 1870, 1352, 400]", - "total_badness": 14442.588212 + "ne2d": 4046, + "ne3d": 10795, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 4, 17, 52, 135, 270, 441, 682, 1028, 1431, 1789, 1884, 1646, 1064, 351]", + "total_badness": 14312.868281 }, { "ne1d": 1792, - "ne2d": 10588, - "ne3d": 63583, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 16, 57, 199, 505, 1317, 3246, 6239, 10147, 13375, 14218, 10750, 3513]", - "total_badness": 77700.722539 + "ne2d": 10340, + "ne3d": 61826, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 21, 94, 245, 701, 1655, 3629, 6683, 10068, 12847, 13004, 9674, 3201]", + "total_badness": 76334.81853 } ], "sphere.geo": [ { "ne1d": 0, - "ne2d": 126, - "ne3d": 126, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 28, 46, 29, 15, 0, 2, 0, 0, 0, 0, 0]", - "total_badness": 237.49105852 + "ne2d": 104, + "ne3d": 104, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 25, 41, 7, 6, 8, 2, 6, 3, 3, 0, 0]", + "total_badness": 189.21001627 }, { "ne1d": 0, - "ne2d": 56, - "ne3d": 56, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 14, 24, 11, 2, 0]", - "total_badness": 68.823759015 + "ne2d": 50, + "ne3d": 50, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 4, 12, 14, 14, 3, 0]", + "total_badness": 61.628499364 }, { "ne1d": 0, - "ne2d": 80, - "ne3d": 80, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 12, 28, 24, 10, 4, 0, 0, 0]", - "total_badness": 114.85441614 + "ne2d": 66, + "ne3d": 66, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 5, 12, 21, 5, 6, 7, 3, 0, 4]", + "total_badness": 96.358043846 }, { "ne1d": 0, - "ne2d": 126, - "ne3d": 126, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 28, 46, 29, 15, 0, 2, 0, 0, 0, 0, 0]", - "total_badness": 237.49105852 + "ne2d": 104, + "ne3d": 104, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 25, 41, 7, 6, 8, 2, 6, 3, 3, 0, 0]", + "total_badness": 189.21001627 }, { "ne1d": 0, - "ne2d": 258, - "ne3d": 365, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 8, 21, 36, 47, 55, 52, 32, 40, 28, 22, 15, 9]", - "total_badness": 557.72385462 + "ne2d": 254, + "ne3d": 350, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 8, 28, 47, 48, 43, 51, 47, 20, 20, 20, 10, 6]", + "total_badness": 555.65023551 }, { "ne1d": 0, - "ne2d": 660, - "ne3d": 2315, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 6, 30, 51, 141, 273, 396, 472, 471, 361, 111]", - "total_badness": 2861.2824595 + "ne2d": 656, + "ne3d": 2286, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 15, 37, 92, 152, 276, 397, 471, 429, 303, 111]", + "total_badness": 2868.3272967 } ], "sphereincube.geo": [ { "ne1d": 46, - "ne2d": 202, - "ne3d": 495, - "quality_histogram": "[0, 0, 7, 60, 37, 29, 46, 41, 57, 46, 44, 16, 23, 10, 15, 12, 12, 24, 11, 5]", - "total_badness": 1405.0779325 + "ne2d": 182, + "ne3d": 452, + "quality_histogram": "[0, 0, 11, 60, 38, 40, 63, 53, 49, 26, 30, 21, 11, 11, 14, 14, 5, 2, 4, 0]", + "total_badness": 1421.7705054 }, { "ne1d": 24, "ne2d": 60, - "ne3d": 187, - "quality_histogram": "[0, 0, 4, 11, 14, 25, 27, 14, 4, 2, 2, 3, 7, 13, 19, 16, 11, 6, 6, 3]", - "total_badness": 493.44997215 + "ne3d": 167, + "quality_histogram": "[0, 0, 8, 15, 17, 13, 17, 7, 5, 4, 5, 6, 9, 7, 12, 11, 11, 9, 11, 0]", + "total_badness": 475.36379061 }, { "ne1d": 30, - "ne2d": 116, - "ne3d": 352, - "quality_histogram": "[0, 0, 7, 15, 30, 48, 31, 27, 35, 44, 27, 19, 22, 15, 9, 8, 6, 6, 3, 0]", - "total_badness": 970.12716912 + "ne2d": 98, + "ne3d": 271, + "quality_histogram": "[0, 2, 11, 18, 20, 32, 35, 31, 21, 28, 19, 13, 9, 10, 14, 2, 4, 1, 1, 0]", + "total_badness": 830.84203375 }, { "ne1d": 46, - "ne2d": 202, - "ne3d": 501, - "quality_histogram": "[0, 0, 4, 44, 27, 20, 51, 40, 68, 51, 51, 21, 20, 17, 17, 16, 15, 23, 11, 5]", - "total_badness": 1303.491863 + "ne2d": 182, + "ne3d": 453, + "quality_histogram": "[0, 0, 10, 45, 33, 33, 50, 45, 60, 34, 36, 36, 15, 15, 14, 15, 6, 2, 4, 0]", + "total_badness": 1318.0366276 }, { "ne1d": 74, - "ne2d": 416, - "ne3d": 1711, - "quality_histogram": "[0, 0, 0, 0, 2, 3, 7, 15, 23, 28, 56, 85, 135, 188, 256, 270, 252, 194, 131, 66]", - "total_badness": 2380.2313828 + "ne2d": 390, + "ne3d": 1611, + "quality_histogram": "[0, 0, 0, 0, 1, 8, 12, 13, 26, 44, 101, 132, 188, 206, 230, 237, 187, 121, 73, 32]", + "total_badness": 2385.1746327 }, { "ne1d": 122, - "ne2d": 1080, - "ne3d": 13950, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 2, 8, 27, 100, 220, 499, 870, 1449, 2270, 2791, 2947, 2086, 679]", - "total_badness": 17374.576935 + "ne2d": 1042, + "ne3d": 13375, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 5, 25, 58, 132, 275, 532, 955, 1526, 2092, 2698, 2651, 1866, 556]", + "total_badness": 16888.449659 } ], "torus.geo": [ { "ne1d": 0, - "ne2d": 2534, - "ne3d": 5567, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 24, 44, 120, 251, 427, 577, 708, 736, 700, 671, 555, 393, 274, 86]", - "total_badness": 8384.3048813 + "ne2d": 2508, + "ne3d": 5657, + "quality_histogram": "[0, 0, 0, 0, 2, 10, 32, 78, 156, 274, 498, 598, 770, 767, 731, 613, 526, 367, 172, 63]", + "total_badness": 8749.7305986 }, { "ne1d": 0, - "ne2d": 692, - "ne3d": 3145, - "quality_histogram": "[195, 700, 454, 360, 340, 221, 170, 157, 140, 91, 96, 60, 44, 31, 33, 26, 12, 7, 6, 2]", - "total_badness": 25137.501541 + "ne2d": 660, + "ne3d": 2886, + "quality_histogram": "[117, 543, 423, 314, 289, 218, 194, 135, 146, 121, 112, 70, 62, 41, 40, 25, 12, 12, 11, 1]", + "total_badness": 19763.210938 }, { "ne1d": 0, - "ne2d": 1446, - "ne3d": 2727, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 5, 12, 62, 161, 219, 352, 418, 401, 380, 266, 239, 155, 55]", - "total_badness": 3909.4618458 + "ne2d": 1424, + "ne3d": 2673, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 6, 32, 92, 182, 315, 348, 414, 365, 343, 262, 166, 117, 28]", + "total_badness": 3963.6416021 }, { "ne1d": 0, - "ne2d": 2534, - "ne3d": 5419, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 19, 42, 209, 332, 508, 665, 720, 748, 656, 613, 495, 305, 103]", - "total_badness": 7868.8410035 + "ne2d": 2508, + "ne3d": 5476, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 9, 34, 74, 197, 375, 566, 685, 791, 755, 684, 546, 453, 238, 69]", + "total_badness": 8099.109234 }, { "ne1d": 0, - "ne2d": 5892, - "ne3d": 25297, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 6, 57, 140, 381, 917, 1672, 2967, 4341, 5051, 5114, 3588, 1059]", - "total_badness": 31635.159095 + "ne2d": 5842, + "ne3d": 24278, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 6, 22, 74, 224, 573, 1134, 1971, 3110, 4129, 4763, 4456, 2976, 840]", + "total_badness": 30936.500907 }, { "ne1d": 0, - "ne2d": 16286, - "ne3d": 175540, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 23, 105, 378, 1086, 3067, 7730, 16270, 26910, 37673, 40911, 31553, 9832]", - "total_badness": 212959.87194 + "ne2d": 16146, + "ne3d": 174106, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 39, 156, 448, 1266, 3517, 8397, 16897, 27428, 36623, 40129, 29926, 9277]", + "total_badness": 212310.14221 } ], "trafo.geo": [ { "ne1d": 690, - "ne2d": 1684, - "ne3d": 5207, - "quality_histogram": "[0, 1, 2, 0, 8, 23, 26, 43, 130, 209, 256, 376, 434, 574, 672, 714, 598, 554, 460, 127]", - "total_badness": 7609.297723 + "ne2d": 1646, + "ne3d": 5126, + "quality_histogram": "[1, 4, 2, 3, 5, 29, 53, 90, 147, 211, 320, 377, 471, 594, 643, 655, 546, 442, 421, 112]", + "total_badness": 7799.7835055 }, { "ne1d": 390, - "ne2d": 522, - "ne3d": 1348, - "quality_histogram": "[0, 2, 3, 17, 13, 39, 77, 130, 126, 139, 162, 128, 136, 115, 80, 88, 48, 32, 11, 2]", - "total_badness": 2770.7952646 + "ne2d": 520, + "ne3d": 1346, + "quality_histogram": "[0, 0, 7, 14, 33, 25, 63, 120, 124, 153, 167, 155, 137, 114, 92, 67, 31, 21, 22, 1]", + "total_badness": 2774.32686 }, { "ne1d": 512, - "ne2d": 876, - "ne3d": 2390, - "quality_histogram": "[0, 0, 2, 1, 11, 17, 45, 82, 116, 145, 178, 211, 303, 386, 349, 231, 147, 96, 45, 25]", - "total_badness": 3971.1275129 + "ne2d": 860, + "ne3d": 2371, + "quality_histogram": "[0, 0, 1, 3, 11, 26, 63, 72, 159, 180, 212, 248, 278, 290, 285, 262, 140, 47, 57, 37]", + "total_badness": 4066.6122044 }, { "ne1d": 690, - "ne2d": 1684, - "ne3d": 5136, - "quality_histogram": "[0, 0, 0, 0, 3, 14, 20, 37, 122, 193, 254, 362, 416, 558, 664, 720, 625, 547, 463, 138]", - "total_badness": 7387.3184406 + "ne2d": 1646, + "ne3d": 5032, + "quality_histogram": "[0, 0, 1, 1, 3, 24, 33, 83, 142, 202, 307, 347, 451, 584, 623, 688, 546, 455, 430, 112]", + "total_badness": 7479.98992 }, { "ne1d": 1050, - "ne2d": 3816, - "ne3d": 17915, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 26, 41, 68, 180, 504, 1428, 2170, 2266, 2730, 2780, 2666, 2365, 685]", - "total_badness": 23360.270089 + "ne2d": 3712, + "ne3d": 17405, + "quality_histogram": "[0, 0, 0, 0, 1, 0, 8, 32, 53, 107, 255, 624, 1664, 2121, 2356, 2568, 2554, 2462, 1933, 667]", + "total_badness": 23080.231635 }, { "ne1d": 1722, - "ne2d": 10044, - "ne3d": 84569, - "quality_histogram": "[0, 0, 0, 0, 3, 8, 60, 1414, 732, 421, 765, 1392, 2637, 5659, 9077, 13242, 16177, 16531, 12448, 4003]", - "total_badness": 108711.84635 + "ne2d": 9850, + "ne3d": 83872, + "quality_histogram": "[0, 0, 0, 1, 3, 7, 107, 1446, 645, 540, 977, 1757, 3237, 6101, 9524, 13281, 15629, 15661, 11299, 3657]", + "total_badness": 109051.31473 } ], "twobricks.geo": [ @@ -1384,17 +1384,17 @@ }, { "ne1d": 116, - "ne2d": 136, - "ne3d": 171, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 7, 10, 12, 40, 34, 23, 22, 13, 3]", - "total_badness": 228.1897295 + "ne2d": 124, + "ne3d": 159, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 5, 14, 26, 22, 29, 20, 18, 9, 9, 5]", + "total_badness": 225.25116924 }, { "ne1d": 186, - "ne2d": 346, - "ne3d": 594, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 22, 29, 70, 88, 100, 109, 115, 43, 14]", - "total_badness": 771.14009171 + "ne2d": 308, + "ne3d": 526, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 12, 26, 59, 56, 79, 97, 76, 65, 43, 8]", + "total_badness": 709.96091399 } ], "twocubes.geo": [ @@ -1428,61 +1428,61 @@ }, { "ne1d": 116, - "ne2d": 136, - "ne3d": 171, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 7, 10, 12, 40, 34, 23, 22, 13, 3]", - "total_badness": 228.1897295 + "ne2d": 124, + "ne3d": 159, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 5, 14, 26, 22, 29, 20, 18, 9, 9, 5]", + "total_badness": 225.25116924 }, { "ne1d": 186, - "ne2d": 346, - "ne3d": 594, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 22, 29, 70, 88, 100, 109, 115, 43, 14]", - "total_badness": 771.14009171 + "ne2d": 308, + "ne3d": 526, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 12, 26, 59, 56, 79, 97, 76, 65, 43, 8]", + "total_badness": 709.96091399 } ], "twocyl.geo": [ { "ne1d": 144, - "ne2d": 408, - "ne3d": 572, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 7, 7, 17, 34, 51, 57, 89, 111, 75, 73, 35, 12, 1]", - "total_badness": 851.35923972 + "ne2d": 402, + "ne3d": 535, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 5, 11, 23, 31, 51, 49, 74, 70, 65, 60, 43, 39, 11, 2]", + "total_badness": 848.77250581 }, { "ne1d": 68, "ne2d": 100, - "ne3d": 209, - "quality_histogram": "[0, 0, 0, 1, 3, 6, 11, 2, 8, 5, 15, 18, 12, 28, 28, 27, 24, 17, 3, 1]", - "total_badness": 357.15502356 + "ne3d": 188, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 6, 14, 23, 27, 28, 25, 22, 28, 8, 0]", + "total_badness": 267.41201716 }, { "ne1d": 102, - "ne2d": 236, - "ne3d": 551, - "quality_histogram": "[0, 29, 41, 30, 31, 36, 49, 40, 55, 27, 38, 32, 26, 26, 20, 13, 37, 16, 4, 1]", - "total_badness": 1900.92706 + "ne2d": 234, + "ne3d": 540, + "quality_histogram": "[0, 14, 30, 32, 40, 40, 55, 59, 43, 38, 24, 29, 26, 16, 25, 15, 39, 4, 11, 0]", + "total_badness": 1706.6298917 }, { "ne1d": 144, - "ne2d": 408, - "ne3d": 568, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 7, 16, 23, 51, 53, 95, 117, 69, 73, 43, 14, 4]", - "total_badness": 824.30043375 + "ne2d": 402, + "ne3d": 534, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 4, 10, 19, 26, 44, 53, 82, 67, 66, 64, 41, 40, 13, 3]", + "total_badness": 838.16101585 }, { "ne1d": 214, - "ne2d": 910, - "ne3d": 1894, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 20, 72, 118, 190, 292, 365, 352, 262, 179, 40]", - "total_badness": 2477.4306124 + "ne2d": 900, + "ne3d": 1820, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 15, 43, 103, 172, 235, 307, 303, 304, 187, 120, 28]", + "total_badness": 2474.9963091 }, { "ne1d": 350, - "ne2d": 2374, - "ne3d": 13452, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 25, 83, 244, 626, 1288, 2202, 2860, 3100, 2290, 728]", - "total_badness": 16367.358392 + "ne2d": 2336, + "ne3d": 13150, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 10, 38, 121, 325, 712, 1379, 2153, 2848, 2841, 2058, 663]", + "total_badness": 16159.006532 } ] } \ No newline at end of file From b3fb12e962740df1c663a392d34b0078e34d0195 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Tue, 8 Oct 2019 16:51:32 +0200 Subject: [PATCH 036/120] reduce message and log level in python --- libsrc/core/logging.cpp | 2 +- libsrc/meshing/msghandler.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/core/logging.cpp b/libsrc/core/logging.cpp index cedc99c4..b5056406 100644 --- a/libsrc/core/logging.cpp +++ b/libsrc/core/logging.cpp @@ -15,7 +15,7 @@ namespace ngcore { std::ostream* testout = new std::ostream(nullptr); // NOLINT - level::level_enum Logger::global_level; + level::level_enum Logger::global_level = level::warn; void Logger::log(level::level_enum level, std::string && s) { diff --git a/libsrc/meshing/msghandler.cpp b/libsrc/meshing/msghandler.cpp index 191384f5..d4da2c60 100644 --- a/libsrc/meshing/msghandler.cpp +++ b/libsrc/meshing/msghandler.cpp @@ -3,7 +3,7 @@ namespace netgen { -int printmessage_importance = 5; +int printmessage_importance = 3; int printwarnings = 1; int printerrors = 1; int printdots = 1; From 4d218fa042799cdcf4a330faf8991454c7025672 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Tue, 8 Oct 2019 17:03:49 +0200 Subject: [PATCH 037/120] Restructure MeshOptimize2d::EdgeSwapping() --- libsrc/meshing/improve2.cpp | 310 +++++++++++++++++------------------- libsrc/meshing/improve2.hpp | 16 ++ 2 files changed, 163 insertions(+), 163 deletions(-) diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index 07e32fef..4c6ec4a3 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -7,20 +7,6 @@ namespace netgen { - class Neighbour - { - int nr[3]; - int orient[3]; - - public: - Neighbour () { ; } - - void SetNr (int side, int anr) { nr[side] = anr; } - int GetNr (int side) { return nr[side]; } - - void SetOrientation (int side, int aorient) { orient[side] = aorient; } - int GetOrientation (int side) { return orient[side]; } - }; @@ -37,6 +23,152 @@ namespace netgen }; + bool MeshOptimize2d :: EdgeSwapping (Mesh & mesh, const int usemetric, + Array &neighbors, + Array &swapped, + const SurfaceElementIndex t1, const int o1, + const int surfnr, + const int t, + NgArray &pdef, + const bool check_only) + { + bool should; + bool do_swap = false; + + SurfaceElementIndex t2 = neighbors[t1].GetNr (o1); + int o2 = neighbors[t1].GetOrientation (o1); + + if (t2 == -1) return false; + if (swapped[t1] || swapped[t2]) return false; + + + PointIndex pi1 = mesh[t1].PNumMod(o1+1+1); + PointIndex pi2 = mesh[t1].PNumMod(o1+1+2); + PointIndex pi3 = mesh[t1].PNumMod(o1+1); + PointIndex pi4 = mesh[t2].PNumMod(o2+1); + + PointGeomInfo gi1 = mesh[t1].GeomInfoPiMod(o1+1+1); + PointGeomInfo gi2 = mesh[t1].GeomInfoPiMod(o1+1+2); + PointGeomInfo gi3 = mesh[t1].GeomInfoPiMod(o1+1); + PointGeomInfo gi4 = mesh[t2].GeomInfoPiMod(o2+1); + + bool allowswap = true; + + Vec<3> auxvec1 = mesh[pi3]-mesh[pi4]; + Vec<3> auxvec2 = mesh[pi1]-mesh[pi4]; + + allowswap = allowswap && fabs(1.-(auxvec1*auxvec2)/(auxvec1.Length()*auxvec2.Length())) > 1e-4; + + if(!allowswap) + return false; + + // normal of new + Vec<3> nv1 = Cross (auxvec1, auxvec2); + + auxvec1 = mesh.Point(pi4)-mesh.Point(pi3); + auxvec2 = mesh.Point(pi2)-mesh.Point(pi3); + allowswap = allowswap && fabs(1.-(auxvec1*auxvec2)/(auxvec1.Length()*auxvec2.Length())) > 1e-4; + + + if(!allowswap) + return false; + + Vec<3> nv2 = Cross (auxvec1, auxvec2); + + + // normals of original + Vec<3> nv3 = Cross (mesh[pi1]-mesh[pi4], mesh[pi2]-mesh[pi4]); + Vec<3> nv4 = Cross (mesh[pi2]-mesh[pi3], mesh[pi1]-mesh[pi3]); + + nv3 *= -1; + nv4 *= -1; + nv3.Normalize(); + nv4.Normalize(); + + nv1.Normalize(); + nv2.Normalize(); + + Vec<3> nvp3, nvp4; + GetNormalVector (surfnr, mesh.Point(pi3), gi3, nvp3); + + nvp3.Normalize(); + + GetNormalVector (surfnr, mesh.Point(pi4), gi4, nvp4); + + nvp4.Normalize(); + + + + double critval = cos (M_PI / 6); // 30 degree + allowswap = allowswap && + (nv1 * nvp3 > critval) && + (nv1 * nvp4 > critval) && + (nv2 * nvp3 > critval) && + (nv2 * nvp4 > critval) && + (nvp3 * nv3 > critval) && + (nvp4 * nv4 > critval); + + + double horder = Dist (mesh[pi1], mesh[pi2]); + + if ( // nv1 * nv2 >= 0 && + nv1.Length() > 1e-3 * horder * horder && + nv2.Length() > 1e-3 * horder * horder && + allowswap ) + { + if (!usemetric) + { + int e = pdef[pi1] + pdef[pi2] - pdef[pi3] - pdef[pi4]; + double d = + Dist2 (mesh[pi1], mesh[pi2]) - + Dist2 (mesh[pi3], mesh[pi4]); + + should = e >= t && (e > 2 || d > 0); + } + else + { + double loch = mesh.GetH(mesh[pi1]); + should = + CalcTriangleBadness (mesh[pi4], mesh[pi3], mesh[pi1], metricweight, loch) + + CalcTriangleBadness (mesh[pi3], mesh[pi4], mesh[pi2], metricweight, loch) < + CalcTriangleBadness (mesh[pi1], mesh[pi2], mesh[pi3], metricweight, loch) + + CalcTriangleBadness (mesh[pi2], mesh[pi1], mesh[pi4], metricweight, loch); + } + + if (allowswap) + { + Element2d sw1 (pi4, pi3, pi1); + Element2d sw2 (pi3, pi4, pi2); + + int legal1 = + mesh.LegalTrig (mesh[t1]) + + mesh.LegalTrig (mesh[t2]); + int legal2 = + mesh.LegalTrig (sw1) + mesh.LegalTrig (sw2); + + if (legal1 < legal2) should = true; + if (legal2 < legal1) should = false; + } + + do_swap = should; + if (should && !check_only) + { + // do swapping ! + + mesh[t1] = { { pi1, gi1 }, { pi4, gi4 }, { pi3, gi3 } }; + mesh[t2] = { { pi2, gi2 }, { pi3, gi3 }, { pi4, gi4 } }; + + pdef[pi1]--; + pdef[pi2]--; + pdef[pi3]++; + pdef[pi4]++; + + swapped[t1] = true; + swapped[t2] = true; + } + } + return do_swap; + } void MeshOptimize2d :: EdgeSwapping (Mesh & mesh, int usemetric) @@ -261,155 +393,7 @@ namespace netgen throw NgException ("Meshing stopped"); for (int o1 = 0; o1 < 3; o1++) - { - bool should; - - SurfaceElementIndex t2 = neighbors[t1].GetNr (o1); - int o2 = neighbors[t1].GetOrientation (o1); - - if (t2 == -1) continue; - if (swapped[t1] || swapped[t2]) continue; - - - PointIndex pi1 = mesh[t1].PNumMod(o1+1+1); - PointIndex pi2 = mesh[t1].PNumMod(o1+1+2); - PointIndex pi3 = mesh[t1].PNumMod(o1+1); - PointIndex pi4 = mesh[t2].PNumMod(o2+1); - - PointGeomInfo gi1 = mesh[t1].GeomInfoPiMod(o1+1+1); - PointGeomInfo gi2 = mesh[t1].GeomInfoPiMod(o1+1+2); - PointGeomInfo gi3 = mesh[t1].GeomInfoPiMod(o1+1); - PointGeomInfo gi4 = mesh[t2].GeomInfoPiMod(o2+1); - - bool allowswap = true; - - Vec<3> auxvec1 = mesh[pi3]-mesh[pi4]; - Vec<3> auxvec2 = mesh[pi1]-mesh[pi4]; - - allowswap = allowswap && fabs(1.-(auxvec1*auxvec2)/(auxvec1.Length()*auxvec2.Length())) > 1e-4; - - if(!allowswap) - continue; - - // normal of new - Vec<3> nv1 = Cross (auxvec1, auxvec2); - - auxvec1 = mesh.Point(pi4)-mesh.Point(pi3); - auxvec2 = mesh.Point(pi2)-mesh.Point(pi3); - allowswap = allowswap && fabs(1.-(auxvec1*auxvec2)/(auxvec1.Length()*auxvec2.Length())) > 1e-4; - - - if(!allowswap) - continue; - - Vec<3> nv2 = Cross (auxvec1, auxvec2); - - - // normals of original - Vec<3> nv3 = Cross (mesh[pi1]-mesh[pi4], mesh[pi2]-mesh[pi4]); - Vec<3> nv4 = Cross (mesh[pi2]-mesh[pi3], mesh[pi1]-mesh[pi3]); - - nv3 *= -1; - nv4 *= -1; - nv3.Normalize(); - nv4.Normalize(); - - nv1.Normalize(); - nv2.Normalize(); - - Vec<3> nvp3, nvp4; - GetNormalVector (surfnr, mesh.Point(pi3), gi3, nvp3); - - nvp3.Normalize(); - - GetNormalVector (surfnr, mesh.Point(pi4), gi4, nvp4); - - nvp4.Normalize(); - - - - double critval = cos (M_PI / 6); // 30 degree - allowswap = allowswap && - (nv1 * nvp3 > critval) && - (nv1 * nvp4 > critval) && - (nv2 * nvp3 > critval) && - (nv2 * nvp4 > critval) && - (nvp3 * nv3 > critval) && - (nvp4 * nv4 > critval); - - - double horder = Dist (mesh[pi1], mesh[pi2]); - - if ( // nv1 * nv2 >= 0 && - nv1.Length() > 1e-3 * horder * horder && - nv2.Length() > 1e-3 * horder * horder && - allowswap ) - { - if (!usemetric) - { - int e = pdef[pi1] + pdef[pi2] - pdef[pi3] - pdef[pi4]; - double d = - Dist2 (mesh[pi1], mesh[pi2]) - - Dist2 (mesh[pi3], mesh[pi4]); - - should = e >= t && (e > 2 || d > 0); - } - else - { - double loch = mesh.GetH(mesh[pi1]); - should = - CalcTriangleBadness (mesh[pi4], mesh[pi3], mesh[pi1], metricweight, loch) + - CalcTriangleBadness (mesh[pi3], mesh[pi4], mesh[pi2], metricweight, loch) < - CalcTriangleBadness (mesh[pi1], mesh[pi2], mesh[pi3], metricweight, loch) + - CalcTriangleBadness (mesh[pi2], mesh[pi1], mesh[pi4], metricweight, loch); - } - - if (allowswap) - { - Element2d sw1 (pi4, pi3, pi1); - Element2d sw2 (pi3, pi4, pi2); - - int legal1 = - mesh.LegalTrig (mesh[t1]) + - mesh.LegalTrig (mesh[t2]); - int legal2 = - mesh.LegalTrig (sw1) + mesh.LegalTrig (sw2); - - if (legal1 < legal2) should = true; - if (legal2 < legal1) should = false; - } - - if (should) - { - // do swapping ! - - done = true; - - /* - mesh[t1] = { pi1, pi4, pi3 }; - mesh[t2] = { pi2, pi3, pi4 }; - - mesh[t1].GeomInfoPi(1) = gi1; - mesh[t1].GeomInfoPi(2) = gi4; - mesh[t1].GeomInfoPi(3) = gi3; - - mesh[t2].GeomInfoPi(1) = gi2; - mesh[t2].GeomInfoPi(2) = gi3; - mesh[t2].GeomInfoPi(3) = gi4; - */ - mesh[t1] = { { pi1, gi1 }, { pi4, gi4 }, { pi3, gi3 } }; - mesh[t2] = { { pi2, gi2 }, { pi3, gi3 }, { pi4, gi4 } }; - - pdef[pi1]--; - pdef[pi2]--; - pdef[pi3]++; - pdef[pi4]++; - - swapped[t1] = true; - swapped[t2] = true; - } - } - } + done |= EdgeSwapping(mesh, usemetric, neighbors, swapped, t1, o1, surfnr, t, pdef, false); } t--; } diff --git a/libsrc/meshing/improve2.hpp b/libsrc/meshing/improve2.hpp index ec09b237..d84d2d01 100644 --- a/libsrc/meshing/improve2.hpp +++ b/libsrc/meshing/improve2.hpp @@ -2,6 +2,20 @@ #define FILE_IMPROVE2 +class Neighbour +{ + int nr[3]; + int orient[3]; + +public: + Neighbour () { ; } + + void SetNr (int side, int anr) { nr[side] = anr; } + int GetNr (int side) { return nr[side]; } + + void SetOrientation (int side, int aorient) { orient[side] = aorient; } + int GetOrientation (int side) { return orient[side]; } +}; /// class MeshOptimize2d @@ -22,6 +36,8 @@ public: void ProjectBoundaryPoints(NgArray & surfaceindex, const NgArray* > & from, NgArray* > & dest); + bool EdgeSwapping (Mesh & mesh, const int usemetric, Array &neighbors, Array &swapped, + const SurfaceElementIndex t1, const int edge, const int surfnr, const int t, NgArray &pdef, const bool check_only=false); void EdgeSwapping (Mesh & mesh, int usemetric); void CombineImprove (Mesh & mesh); void SplitImprove (Mesh & mesh); From f24a749fb2a01eacd1fa1ffed1eccc6cf29887dc Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Tue, 8 Oct 2019 17:29:38 +0200 Subject: [PATCH 038/120] Parallel MeshOptimize2d::EdgeSwapping() (individual faces) --- libsrc/meshing/improve2.cpp | 38 +- tests/pytest/results.json | 974 ++++++++++++++++++------------------ 2 files changed, 513 insertions(+), 499 deletions(-) diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index 4c6ec4a3..e0efde2a 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -375,26 +375,40 @@ namespace netgen + Array> improvement_candidates(3*seia.Size()); + atomic cnt(0); + int t = 4; bool done = false; while (!done && t >= 2) { - for (int i = 0; i < seia.Size(); i++) - { - SurfaceElementIndex t1 = seia[i]; + cnt = 0; + ParallelForRange( Range(seia), [&] (auto myrange) + { + for (auto i : myrange) + { + SurfaceElementIndex t1 = seia[i]; - if (mesh[t1].IsDeleted()) - continue; + if (mesh[t1].IsDeleted()) + continue; - if (mesh[t1].GetIndex() != faceindex) - continue; + if (mesh[t1].GetIndex() != faceindex) + continue; - if (multithread.terminate) - throw NgException ("Meshing stopped"); + if (multithread.terminate) + throw NgException ("Meshing stopped"); - for (int o1 = 0; o1 < 3; o1++) - done |= EdgeSwapping(mesh, usemetric, neighbors, swapped, t1, o1, surfnr, t, pdef, false); - } + for (int o1 = 0; o1 < 3; o1++) + if(EdgeSwapping(mesh, usemetric, neighbors, swapped, t1, o1, surfnr, t, pdef, true)) + improvement_candidates[cnt++]= std::make_pair(t1,o1); + } + }); + + auto elements_with_improvement = improvement_candidates.Range(cnt.load()); + QuickSort(elements_with_improvement); + + for (auto [t1,o1] : elements_with_improvement) + done |= EdgeSwapping(mesh, usemetric, neighbors, swapped, t1, o1, surfnr, t, pdef, false); t--; } diff --git a/tests/pytest/results.json b/tests/pytest/results.json index 4a1bcf12..79f56322 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -3,9 +3,9 @@ { "ne1d": 74, "ne2d": 54, - "ne3d": 50, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 5, 8, 13, 3, 9, 5, 0, 1, 1]", - "total_badness": 74.774553826 + "ne3d": 40, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 16, 1, 5, 2, 0, 0, 0]", + "total_badness": 61.085020201 }, { "ne1d": 59, @@ -24,32 +24,32 @@ { "ne1d": 74, "ne2d": 54, - "ne3d": 50, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 5, 8, 13, 3, 9, 5, 0, 1, 1]", - "total_badness": 74.77454941 + "ne3d": 40, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 16, 1, 5, 2, 0, 0, 0]", + "total_badness": 61.085020201 }, { "ne1d": 118, "ne2d": 140, "ne3d": 165, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 5, 13, 13, 25, 31, 25, 20, 17, 12, 1]", - "total_badness": 228.72078637 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 9, 13, 23, 20, 31, 24, 22, 14, 6, 1]", + "total_badness": 233.73391407 }, { "ne1d": 181, "ne2d": 323, - "ne3d": 507, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 9, 20, 35, 56, 56, 81, 90, 83, 59, 15]", - "total_badness": 661.00817809 + "ne3d": 513, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 15, 34, 56, 67, 96, 86, 86, 46, 18]", + "total_badness": 667.61850419 } ], "boxcyl.geo": [ { "ne1d": 190, "ne2d": 468, - "ne3d": 858, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 31, 91, 73, 79, 87, 106, 114, 102, 89, 66, 18]", - "total_badness": 1232.0426735 + "ne3d": 846, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 30, 91, 78, 91, 92, 93, 102, 104, 80, 59, 22]", + "total_badness": 1226.0578147 }, { "ne1d": 94, @@ -61,39 +61,39 @@ { "ne1d": 136, "ne2d": 222, - "ne3d": 384, - "quality_histogram": "[0, 0, 1, 0, 3, 3, 3, 6, 11, 17, 21, 28, 34, 44, 68, 64, 49, 19, 11, 2]", - "total_badness": 598.99833044 + "ne3d": 381, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 4, 3, 7, 15, 16, 27, 38, 51, 68, 67, 49, 17, 16, 1]", + "total_badness": 567.29889026 }, { "ne1d": 190, "ne2d": 468, - "ne3d": 850, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 29, 87, 73, 75, 86, 106, 97, 112, 87, 75, 21]", - "total_badness": 1214.229893 + "ne3d": 833, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 30, 87, 78, 78, 90, 88, 104, 103, 87, 64, 22]", + "total_badness": 1198.1799119 }, { "ne1d": 284, - "ne2d": 938, - "ne3d": 3761, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 20, 59, 118, 250, 456, 628, 751, 755, 564, 153]", - "total_badness": 4693.1208525 + "ne2d": 936, + "ne3d": 3833, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 17, 53, 160, 270, 442, 625, 795, 755, 544, 165]", + "total_badness": 4795.1972581 }, { "ne1d": 456, "ne2d": 2496, - "ne3d": 18969, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 5, 8, 15, 43, 130, 353, 876, 1713, 3018, 4122, 4317, 3271, 1098]", - "total_badness": 23072.833527 + "ne3d": 19027, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 6, 16, 41, 134, 386, 861, 1759, 3032, 4100, 4323, 3238, 1129]", + "total_badness": 23153.342852 } ], "circle_on_cube.geo": [ { "ne1d": 94, - "ne2d": 174, - "ne3d": 646, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 10, 23, 48, 81, 117, 100, 123, 86, 43, 10]", - "total_badness": 859.43881883 + "ne2d": 170, + "ne3d": 634, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 21, 37, 42, 77, 93, 99, 106, 106, 40, 9]", + "total_badness": 852.35637426 }, { "ne1d": 40, @@ -105,39 +105,39 @@ { "ne1d": 62, "ne2d": 94, - "ne3d": 182, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 14, 21, 35, 35, 33, 19, 9, 8, 0]", - "total_badness": 258.4064329 + "ne3d": 185, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 7, 12, 31, 26, 37, 27, 19, 14, 8, 0]", + "total_badness": 264.64378082 }, { "ne1d": 94, - "ne2d": 174, - "ne3d": 621, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 11, 45, 59, 93, 114, 121, 104, 53, 14]", - "total_badness": 804.68562065 + "ne2d": 170, + "ne3d": 609, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 9, 28, 31, 67, 80, 97, 121, 106, 53, 12]", + "total_badness": 797.71713532 }, { "ne1d": 138, "ne2d": 382, - "ne3d": 2054, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 15, 57, 129, 210, 330, 426, 450, 321, 109]", - "total_badness": 2526.4427939 + "ne3d": 2047, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 12, 24, 77, 153, 249, 384, 402, 417, 254, 72]", + "total_badness": 2570.7494356 }, { "ne1d": 224, - "ne2d": 944, - "ne3d": 11988, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 17, 33, 82, 226, 556, 1140, 1929, 2512, 2801, 2061, 628]", - "total_badness": 14608.275962 + "ne2d": 942, + "ne3d": 12152, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 15, 83, 237, 599, 1170, 1934, 2615, 2796, 2123, 572]", + "total_badness": 14806.696612 } ], "cone.geo": [ { "ne1d": 64, "ne2d": 722, - "ne3d": 1231, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 8, 22, 29, 50, 88, 118, 123, 158, 175, 140, 137, 111, 52, 19]", - "total_badness": 1853.3096959 + "ne3d": 1234, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 1, 15, 38, 55, 88, 123, 143, 139, 184, 147, 119, 105, 57, 17]", + "total_badness": 1861.257399 }, { "ne1d": 32, @@ -156,23 +156,23 @@ { "ne1d": 64, "ne2d": 722, - "ne3d": 1208, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 15, 22, 47, 81, 110, 131, 144, 172, 150, 145, 112, 62, 14]", - "total_badness": 1783.4859474 + "ne3d": 1211, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 8, 20, 59, 82, 118, 147, 128, 167, 157, 135, 108, 65, 15]", + "total_badness": 1789.8591485 }, { "ne1d": 96, "ne2d": 1660, - "ne3d": 4423, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 35, 88, 158, 276, 400, 584, 726, 802, 735, 464, 150]", - "total_badness": 5769.9946848 + "ne3d": 4464, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 11, 30, 74, 185, 273, 414, 599, 748, 785, 747, 434, 160]", + "total_badness": 5840.7208133 }, { "ne1d": 160, "ne2d": 4748, - "ne3d": 27126, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 13, 31, 83, 303, 735, 1519, 2944, 4316, 5668, 5807, 4355, 1349]", - "total_badness": 33434.663911 + "ne3d": 27166, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 14, 38, 87, 310, 736, 1515, 2971, 4344, 5642, 5811, 4361, 1333]", + "total_badness": 33504.993018 } ], "cube.geo": [ @@ -213,54 +213,54 @@ }, { "ne1d": 72, - "ne2d": 118, - "ne3d": 184, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 10, 7, 19, 18, 37, 33, 33, 14, 6]", - "total_badness": 241.24676972 + "ne2d": 116, + "ne3d": 167, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 2, 5, 5, 16, 8, 18, 30, 31, 29, 12, 6]", + "total_badness": 224.72495191 } ], "cubeandring.geo": [ { "ne1d": 262, - "ne2d": 722, - "ne3d": 2188, - "quality_histogram": "[1, 9, 25, 36, 90, 100, 108, 114, 90, 73, 63, 100, 149, 190, 251, 264, 241, 168, 96, 20]", - "total_badness": 4412.1941358 + "ne2d": 724, + "ne3d": 2220, + "quality_histogram": "[3, 13, 18, 47, 87, 95, 119, 121, 98, 68, 86, 122, 167, 187, 216, 243, 225, 169, 111, 25]", + "total_badness": 4594.1424775 }, { "ne1d": 134, "ne2d": 162, - "ne3d": 252, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 2, 1, 3, 8, 24, 28, 49, 38, 41, 29, 19, 7, 1]", - "total_badness": 365.81827351 + "ne3d": 247, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 0, 0, 4, 2, 11, 19, 35, 48, 38, 39, 24, 14, 9, 2]", + "total_badness": 361.08642754 }, { "ne1d": 190, - "ne2d": 298, - "ne3d": 613, - "quality_histogram": "[0, 0, 0, 0, 2, 0, 0, 4, 3, 17, 49, 47, 61, 93, 110, 82, 52, 60, 28, 5]", - "total_badness": 897.54658869 + "ne2d": 300, + "ne3d": 630, + "quality_histogram": "[0, 0, 0, 1, 2, 0, 0, 3, 10, 16, 51, 70, 62, 108, 101, 78, 62, 43, 19, 4]", + "total_badness": 945.8223883 }, { "ne1d": 262, - "ne2d": 722, - "ne3d": 2054, - "quality_histogram": "[0, 3, 12, 28, 61, 84, 109, 97, 80, 55, 48, 68, 112, 166, 245, 277, 249, 212, 116, 32]", - "total_badness": 3795.4750393 + "ne2d": 724, + "ne3d": 2075, + "quality_histogram": "[0, 3, 10, 24, 70, 91, 119, 86, 82, 50, 48, 83, 125, 169, 212, 265, 273, 210, 123, 32]", + "total_badness": 3839.258335 }, { "ne1d": 378, "ne2d": 1412, - "ne3d": 7752, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 1, 9, 13, 27, 56, 136, 281, 548, 921, 1256, 1534, 1557, 1091, 320]", - "total_badness": 9761.7065165 + "ne3d": 7646, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 9, 19, 60, 144, 300, 559, 885, 1284, 1510, 1488, 1055, 330]", + "total_badness": 9628.2237959 }, { "ne1d": 624, - "ne2d": 3942, - "ne3d": 38282, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 10, 28, 117, 334, 795, 2026, 3889, 5942, 8057, 8537, 6447, 2097]", - "total_badness": 46825.777983 + "ne2d": 3944, + "ne3d": 43287, + "quality_histogram": "[0, 0, 0, 0, 2, 40, 194, 422, 757, 1077, 1754, 2592, 3765, 4982, 5953, 6630, 6135, 5003, 3105, 876]", + "total_badness": 61333.463425 } ], "cubeandspheres.geo": [ @@ -268,131 +268,131 @@ "ne1d": 144, "ne2d": 148, "ne3d": 98, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 18, 19, 13, 20, 2, 9, 1, 0]", - "total_badness": 145.83375109 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 16, 18, 14, 20, 4, 8, 2, 0]", + "total_badness": 145.06570717 }, { "ne1d": 144, "ne2d": 150, "ne3d": 100, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 7, 10, 16, 18, 15, 17, 6, 5, 4, 0]", - "total_badness": 146.646861 + "total_badness": 146.6442139 }, { "ne1d": 144, "ne2d": 148, "ne3d": 98, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 6, 6, 19, 21, 12, 18, 5, 4, 4, 0]", - "total_badness": 145.14580662 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 6, 6, 17, 20, 14, 18, 5, 6, 3, 0]", + "total_badness": 144.34810104 }, { "ne1d": 144, "ne2d": 148, "ne3d": 98, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 18, 19, 13, 20, 2, 9, 1, 0]", - "total_badness": 145.83375109 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 16, 18, 14, 20, 4, 8, 2, 0]", + "total_badness": 145.06570717 }, { "ne1d": 264, - "ne2d": 386, - "ne3d": 365, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 6, 24, 31, 43, 39, 53, 35, 44, 51, 28, 9, 0]", - "total_badness": 553.03362076 + "ne2d": 388, + "ne3d": 366, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 4, 21, 28, 39, 47, 52, 37, 58, 40, 25, 10, 2]", + "total_badness": 550.46676248 }, { "ne1d": 428, - "ne2d": 930, - "ne3d": 1080, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 19, 59, 37, 100, 136, 100, 123, 162, 160, 66, 65, 28, 22]", - "total_badness": 1684.1500639 + "ne2d": 926, + "ne3d": 1075, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 24, 51, 37, 103, 144, 97, 121, 156, 155, 71, 61, 31, 22]", + "total_badness": 1676.2336937 } ], "cubemcyl.geo": [ { "ne1d": 142, - "ne2d": 2488, - "ne3d": 20940, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 22, 78, 213, 367, 738, 1237, 1875, 2588, 3120, 3314, 3117, 2521, 1385, 365]", - "total_badness": 29036.424267 + "ne2d": 2490, + "ne3d": 20799, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 28, 79, 219, 382, 656, 1158, 1775, 2464, 3005, 3406, 3192, 2557, 1522, 353]", + "total_badness": 28706.828456 }, { "ne1d": 64, "ne2d": 642, - "ne3d": 3203, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 12, 17, 66, 128, 250, 364, 425, 515, 512, 463, 282, 137, 29]", - "total_badness": 4539.3174908 + "ne3d": 3229, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 12, 32, 67, 160, 255, 358, 490, 500, 493, 420, 301, 113, 27]", + "total_badness": 4623.4755628 }, { "ne1d": 102, - "ne2d": 1404, - "ne3d": 8421, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 7, 30, 87, 181, 362, 596, 792, 1120, 1271, 1262, 1165, 892, 516, 140]", - "total_badness": 11848.69595 + "ne2d": 1402, + "ne3d": 8204, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 8, 22, 59, 164, 348, 591, 842, 1045, 1356, 1225, 1109, 817, 472, 145]", + "total_badness": 11539.42633 }, { "ne1d": 142, - "ne2d": 2488, - "ne3d": 19608, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 6, 40, 75, 246, 608, 1243, 2030, 2896, 3459, 3612, 2986, 1887, 518]", - "total_badness": 25605.226153 + "ne2d": 2490, + "ne3d": 19461, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 9, 29, 93, 229, 518, 1070, 1941, 2741, 3474, 3670, 3200, 1969, 518]", + "total_badness": 25234.660253 }, { "ne1d": 210, "ne2d": 5508, - "ne3d": 88843, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 23, 113, 364, 946, 2450, 5445, 10022, 14690, 18368, 18746, 13521, 4155]", - "total_badness": 109927.85826 + "ne3d": 88594, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 31, 113, 362, 1035, 2435, 5625, 9861, 14712, 18443, 18771, 13294, 3908]", + "total_badness": 109777.71823 }, { "ne1d": 362, - "ne2d": 15120, - "ne3d": 521218, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 25, 119, 374, 1224, 3269, 9296, 24328, 50521, 82283, 109285, 119759, 91721, 29013]", - "total_badness": 633985.71695 + "ne2d": 15116, + "ne3d": 520770, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 25, 134, 437, 1202, 3273, 9236, 24185, 50863, 82792, 109294, 119384, 91342, 28599]", + "total_badness": 633693.0884 } ], "cubemsphere.geo": [ { "ne1d": 90, - "ne2d": 698, - "ne3d": 4877, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 6, 28, 55, 96, 194, 261, 445, 559, 740, 798, 698, 576, 333, 87]", - "total_badness": 6790.976699 + "ne2d": 700, + "ne3d": 4935, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 12, 29, 67, 121, 206, 278, 432, 625, 745, 752, 705, 569, 317, 77]", + "total_badness": 6938.6199468 }, { "ne1d": 44, - "ne2d": 280, - "ne3d": 783, - "quality_histogram": "[0, 0, 0, 0, 1, 2, 6, 19, 38, 61, 70, 94, 100, 91, 104, 76, 58, 38, 24, 1]", - "total_badness": 1271.4564508 + "ne2d": 278, + "ne3d": 771, + "quality_histogram": "[0, 0, 0, 1, 2, 1, 8, 23, 33, 57, 75, 84, 89, 119, 95, 69, 50, 35, 24, 6]", + "total_badness": 1259.9745028 }, { "ne1d": 68, "ne2d": 402, - "ne3d": 1571, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 12, 20, 68, 134, 170, 243, 246, 237, 214, 145, 59, 17]", - "total_badness": 2230.374452 + "ne3d": 1556, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 6, 11, 21, 46, 111, 170, 223, 255, 263, 222, 133, 82, 13]", + "total_badness": 2179.1819908 }, { "ne1d": 90, - "ne2d": 698, - "ne3d": 4583, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 9, 25, 77, 128, 251, 516, 657, 826, 857, 685, 432, 116]", - "total_badness": 5995.4068967 + "ne2d": 700, + "ne3d": 4607, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 12, 47, 76, 137, 256, 520, 708, 812, 832, 677, 406, 120]", + "total_badness": 6067.5841219 }, { "ne1d": 146, - "ne2d": 1490, - "ne3d": 17783, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 11, 31, 90, 203, 496, 1110, 1957, 3109, 3695, 3723, 2641, 714]", - "total_badness": 22085.583903 + "ne2d": 1486, + "ne3d": 17868, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 13, 20, 79, 207, 494, 1105, 1981, 2974, 3738, 3793, 2707, 757]", + "total_badness": 22135.731945 }, { "ne1d": 248, - "ne2d": 4356, - "ne3d": 113522, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 9, 35, 117, 341, 885, 2307, 5764, 11384, 18322, 23667, 25754, 19043, 5893]", - "total_badness": 138835.8933 + "ne2d": 4358, + "ne3d": 113948, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 14, 42, 113, 326, 855, 2300, 5766, 11158, 18354, 23917, 25885, 19416, 5801]", + "total_badness": 139251.67592 } ], "cylinder.geo": [ @@ -471,148 +471,148 @@ { "ne1d": 152, "ne2d": 1084, - "ne3d": 2865, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 3, 28, 44, 88, 157, 276, 340, 471, 505, 493, 358, 99]", - "total_badness": 3710.287399 + "ne3d": 2848, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 5, 17, 49, 92, 153, 260, 359, 461, 527, 497, 339, 88]", + "total_badness": 3685.3796091 }, { "ne1d": 248, "ne2d": 2820, - "ne3d": 17765, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 15, 48, 129, 362, 859, 1699, 2843, 3786, 4041, 3023, 954]", - "total_badness": 21668.180843 + "ne3d": 17783, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 16, 43, 133, 373, 852, 1712, 2853, 3822, 4037, 2968, 969]", + "total_badness": 21702.916892 } ], "ellipsoid.geo": [ { "ne1d": 0, "ne2d": 704, - "ne3d": 1262, - "quality_histogram": "[0, 0, 0, 0, 1, 0, 8, 26, 39, 86, 118, 127, 178, 146, 148, 147, 107, 76, 43, 12]", - "total_badness": 1984.8094939 + "ne3d": 1278, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 5, 20, 57, 75, 122, 125, 161, 167, 137, 161, 107, 83, 45, 13]", + "total_badness": 1996.4481212 }, { "ne1d": 0, "ne2d": 192, - "ne3d": 942, - "quality_histogram": "[22, 148, 137, 126, 91, 56, 81, 69, 47, 36, 29, 32, 23, 13, 12, 9, 5, 5, 1, 0]", - "total_badness": 5747.5204438 + "ne3d": 899, + "quality_histogram": "[19, 132, 126, 95, 104, 78, 56, 48, 58, 43, 26, 22, 29, 20, 13, 8, 10, 9, 2, 1]", + "total_badness": 5295.2975939 }, { "ne1d": 0, "ne2d": 394, - "ne3d": 598, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 15, 17, 44, 69, 81, 100, 91, 53, 54, 39, 20, 9]", - "total_badness": 903.65236615 + "ne3d": 590, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 11, 24, 40, 74, 80, 100, 88, 58, 41, 40, 19, 11]", + "total_badness": 889.56775696 }, { "ne1d": 0, "ne2d": 704, - "ne3d": 1256, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 18, 35, 52, 103, 128, 169, 173, 155, 154, 121, 81, 49, 18]", - "total_badness": 1908.051206 + "ne3d": 1261, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 13, 44, 60, 101, 111, 156, 158, 153, 168, 123, 101, 55, 17]", + "total_badness": 1904.2716478 }, { "ne1d": 0, "ne2d": 1618, - "ne3d": 5592, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 22, 74, 178, 307, 491, 711, 944, 1067, 921, 675, 199]", - "total_badness": 7199.7867843 + "ne3d": 5680, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 0, 4, 29, 94, 160, 324, 548, 748, 969, 1061, 936, 638, 167]", + "total_badness": 7360.2666331 }, { "ne1d": 0, "ne2d": 4236, - "ne3d": 41345, - "quality_histogram": "[0, 0, 0, 0, 3, 20, 108, 266, 403, 644, 1110, 1904, 2921, 4621, 6100, 6869, 6568, 5527, 3324, 957]", - "total_badness": 56476.648492 + "ne3d": 37387, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 8, 18, 81, 226, 652, 1604, 3366, 5913, 7905, 8838, 6765, 2011]", + "total_badness": 45343.133766 } ], "ellipticcone.geo": [ { "ne1d": 174, "ne2d": 1556, - "ne3d": 5213, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 7, 26, 47, 141, 216, 357, 555, 760, 902, 879, 712, 459, 151]", - "total_badness": 6957.997336 + "ne3d": 5138, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 12, 22, 57, 112, 186, 396, 517, 723, 897, 960, 680, 434, 141]", + "total_badness": 6849.0044378 }, { "ne1d": 86, "ne2d": 380, - "ne3d": 587, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 8, 8, 14, 33, 55, 67, 67, 76, 85, 69, 56, 32, 14]", - "total_badness": 853.7762584 + "ne3d": 590, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 15, 15, 32, 45, 67, 79, 88, 83, 67, 48, 31, 14]", + "total_badness": 857.18307391 }, { "ne1d": 130, "ne2d": 864, - "ne3d": 1780, - "quality_histogram": "[0, 0, 0, 1, 3, 4, 12, 22, 34, 43, 79, 96, 136, 191, 227, 251, 258, 253, 129, 41]", - "total_badness": 2537.0484182 + "ne3d": 1713, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 8, 21, 30, 51, 83, 106, 145, 221, 218, 248, 246, 180, 122, 31]", + "total_badness": 2456.9795033 }, { "ne1d": 174, "ne2d": 1556, - "ne3d": 4971, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 17, 53, 107, 248, 431, 665, 897, 978, 791, 593, 187]", - "total_badness": 6359.4493283 + "ne3d": 4936, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 15, 52, 109, 256, 443, 654, 865, 1006, 810, 538, 184]", + "total_badness": 6327.3304435 }, { "ne1d": 258, - "ne2d": 3454, - "ne3d": 13441, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 8, 29, 62, 198, 341, 643, 1044, 1682, 2259, 2506, 2486, 1671, 511]", - "total_badness": 17201.441954 + "ne2d": 3460, + "ne3d": 13213, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 24, 96, 177, 365, 657, 1010, 1665, 2371, 2477, 2270, 1591, 505]", + "total_badness": 16972.974746 }, { "ne1d": 432, - "ne2d": 9518, - "ne3d": 69596, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 40, 121, 306, 826, 1862, 3802, 7575, 11204, 14503, 14913, 11126, 3312]", - "total_badness": 85930.227173 + "ne2d": 9520, + "ne3d": 70326, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 13, 40, 122, 338, 786, 1853, 4006, 7465, 11360, 14481, 15208, 11188, 3466]", + "total_badness": 86818.381106 } ], "ellipticcyl.geo": [ { "ne1d": 156, "ne2d": 994, - "ne3d": 2275, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 10, 26, 44, 84, 125, 208, 263, 341, 376, 326, 261, 175, 35]", - "total_badness": 3156.3970605 + "ne3d": 2287, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 9, 28, 50, 88, 151, 203, 262, 348, 377, 324, 245, 168, 32]", + "total_badness": 3194.7013193 }, { "ne1d": 76, "ne2d": 238, "ne3d": 325, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 18, 28, 26, 37, 71, 54, 46, 27, 10, 2]", - "total_badness": 459.39040523 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 18, 28, 26, 37, 71, 53, 46, 28, 10, 2]", + "total_badness": 459.38557223 }, { "ne1d": 116, "ne2d": 596, - "ne3d": 1114, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 10, 17, 41, 80, 144, 172, 205, 165, 155, 97, 25]", - "total_badness": 1483.3007518 + "ne3d": 1141, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 18, 32, 47, 73, 144, 189, 173, 199, 141, 102, 19]", + "total_badness": 1536.9702483 }, { "ne1d": 156, "ne2d": 994, - "ne3d": 2199, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 8, 35, 43, 95, 163, 238, 314, 377, 378, 307, 193, 45]", - "total_badness": 2944.2434449 + "ne3d": 2213, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 10, 31, 49, 117, 191, 232, 335, 376, 366, 281, 184, 38]", + "total_badness": 2990.869979 }, { "ne1d": 232, - "ne2d": 2198, - "ne3d": 8225, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 5, 9, 46, 106, 269, 605, 988, 1459, 1629, 1655, 1138, 313]", - "total_badness": 10297.191925 + "ne2d": 2200, + "ne3d": 8317, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 5, 11, 47, 106, 271, 598, 1029, 1448, 1700, 1606, 1173, 322]", + "total_badness": 10409.762502 }, { "ne1d": 388, - "ne2d": 6124, - "ne3d": 55078, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 10, 28, 97, 356, 939, 2483, 5114, 8528, 11618, 12908, 9908, 3088]", - "total_badness": 66822.93034 + "ne2d": 6118, + "ne3d": 55159, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 9, 34, 86, 288, 797, 2294, 4900, 8294, 11813, 13122, 10147, 3374]", + "total_badness": 66617.550244 } ], "fichera.geo": [ @@ -654,62 +654,62 @@ { "ne1d": 144, "ne2d": 274, - "ne3d": 514, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 14, 32, 55, 87, 97, 91, 71, 52, 13]", - "total_badness": 666.67507269 + "ne3d": 516, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 16, 31, 59, 88, 103, 78, 75, 49, 12]", + "total_badness": 672.7632765 } ], "frame.step": [ { "ne1d": 12694, - "ne2d": 40474, - "ne3d": 221182, - "quality_histogram": "[2, 7, 8, 9, 8, 45, 297, 719, 1786, 3439, 6255, 10896, 17573, 25401, 32432, 35856, 35294, 28822, 17734, 4599]", - "total_badness": 301822.09951 + "ne2d": 40376, + "ne3d": 221132, + "quality_histogram": "[3, 8, 4, 13, 7, 42, 248, 732, 1691, 3393, 6209, 10718, 17518, 25459, 32156, 35899, 35412, 28951, 18016, 4653]", + "total_badness": 301320.76786 }, { "ne1d": 6026, - "ne2d": 11330, - "ne3d": 33930, - "quality_histogram": "[4, 44, 54, 95, 236, 493, 862, 1288, 1877, 2386, 2810, 3502, 3735, 3948, 3901, 3241, 2597, 1776, 871, 210]", - "total_badness": 59128.564033 + "ne2d": 11296, + "ne3d": 30460, + "quality_histogram": "[4, 6, 6, 7, 21, 43, 92, 257, 679, 1046, 1696, 2567, 3361, 4142, 4605, 4273, 3551, 2428, 1345, 331]", + "total_badness": 45199.935474 }, { "ne1d": 9704, - "ne2d": 24358, - "ne3d": 85648, - "quality_histogram": "[2, 6, 5, 10, 5, 24, 87, 165, 425, 1072, 2383, 4552, 7532, 10936, 13505, 14259, 13226, 10274, 5670, 1510]", - "total_badness": 117436.51999 + "ne2d": 24292, + "ne3d": 85251, + "quality_histogram": "[1, 6, 5, 10, 11, 34, 74, 181, 467, 1085, 2453, 4566, 7709, 11061, 13565, 14164, 12961, 9900, 5659, 1339]", + "total_badness": 117271.18554 } ], "hinge.stl": [ { "ne1d": 456, "ne2d": 1230, - "ne3d": 1990, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 2, 13, 19, 39, 60, 137, 183, 248, 311, 282, 280, 231, 136, 47]", - "total_badness": 2776.6730441 + "ne3d": 2006, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 5, 9, 24, 42, 72, 137, 165, 225, 325, 287, 304, 216, 146, 47]", + "total_badness": 2804.4326922 }, { "ne1d": 298, - "ne2d": 610, - "ne3d": 793, - "quality_histogram": "[0, 0, 0, 3, 10, 12, 25, 19, 34, 52, 79, 76, 93, 95, 86, 82, 58, 40, 22, 7]", - "total_badness": 1364.5936087 + "ne2d": 612, + "ne3d": 800, + "quality_histogram": "[0, 0, 1, 5, 8, 14, 26, 21, 33, 47, 74, 78, 98, 89, 89, 80, 63, 44, 24, 6]", + "total_badness": 1384.3451953 }, { "ne1d": 370, "ne2d": 860, "ne3d": 1148, "quality_histogram": "[0, 0, 0, 0, 2, 4, 16, 24, 25, 32, 78, 104, 135, 154, 165, 176, 112, 66, 43, 12]", - "total_badness": 1761.668236 + "total_badness": 1761.6622395 }, { "ne1d": 516, "ne2d": 1584, "ne3d": 2528, - "quality_histogram": "[0, 0, 0, 0, 2, 1, 9, 16, 23, 49, 125, 186, 212, 309, 339, 362, 346, 314, 191, 44]", - "total_badness": 3558.9972665 + "quality_histogram": "[0, 0, 0, 0, 2, 1, 9, 16, 23, 49, 125, 185, 212, 311, 338, 362, 347, 313, 191, 44]", + "total_badness": 3559.0498754 }, { "ne1d": 722, @@ -720,10 +720,10 @@ }, { "ne1d": 1862, - "ne2d": 19514, - "ne3d": 137132, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 8, 37, 119, 375, 1131, 3044, 6883, 13679, 21959, 28650, 31016, 22896, 7333]", - "total_badness": 167715.38485 + "ne2d": 19516, + "ne3d": 137265, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 3, 5, 47, 136, 444, 1131, 2812, 6902, 13203, 22054, 29007, 30796, 23323, 7401]", + "total_badness": 167751.20764 } ], "lshape3d.geo": [ @@ -731,8 +731,8 @@ "ne1d": 44, "ne2d": 28, "ne3d": 18, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 12, 0, 3, 0, 0, 0, 0]", - "total_badness": 27.289065401 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 16, 0, 1, 0, 0, 0, 0]", + "total_badness": 27.266612058 }, { "ne1d": 36, @@ -752,98 +752,98 @@ "ne1d": 44, "ne2d": 28, "ne3d": 18, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 12, 0, 3, 0, 0, 0, 0]", - "total_badness": 27.289065401 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 16, 0, 1, 0, 0, 0, 0]", + "total_badness": 27.266612058 }, { "ne1d": 80, "ne2d": 76, "ne3d": 88, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 10, 9, 21, 23, 7, 6, 1, 4]", - "total_badness": 121.1271849 + "total_badness": 121.12718489 }, { "ne1d": 122, "ne2d": 204, - "ne3d": 331, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 7, 21, 26, 41, 39, 61, 57, 46, 24, 7]", - "total_badness": 443.95235947 + "ne3d": 326, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 11, 17, 43, 51, 53, 56, 50, 33, 6]", + "total_badness": 427.78776756 } ], "manyholes.geo": [ { "ne1d": 5886, - "ne2d": 48038, - "ne3d": 179405, - "quality_histogram": "[0, 0, 2, 1, 8, 27, 65, 207, 559, 1418, 3370, 7627, 12710, 20134, 27407, 30177, 29994, 24813, 16843, 4043]", - "total_badness": 238774.17579 + "ne2d": 48026, + "ne3d": 179303, + "quality_histogram": "[0, 0, 1, 4, 9, 24, 48, 165, 522, 1374, 3347, 7698, 12503, 20091, 27314, 30044, 29908, 25015, 17206, 4030]", + "total_badness": 238306.19112 }, { "ne1d": 2746, - "ne2d": 13838, - "ne3d": 29184, - "quality_histogram": "[0, 0, 0, 1, 5, 26, 45, 181, 387, 817, 1524, 2280, 3331, 4394, 4120, 3700, 3202, 2567, 1880, 724]", - "total_badness": 42098.721268 + "ne2d": 13834, + "ne3d": 29076, + "quality_histogram": "[0, 0, 0, 2, 13, 18, 50, 160, 398, 849, 1531, 2349, 3232, 4336, 4115, 3734, 3102, 2591, 1888, 708]", + "total_badness": 41978.532959 }, { "ne1d": 4106, - "ne2d": 27992, - "ne3d": 70789, - "quality_histogram": "[0, 0, 0, 2, 30, 78, 189, 443, 837, 1706, 2919, 4402, 7061, 9455, 10197, 10269, 9498, 7395, 4474, 1834]", - "total_badness": 100213.31676 + "ne2d": 27964, + "ne3d": 70880, + "quality_histogram": "[0, 0, 0, 3, 32, 74, 190, 412, 841, 1713, 2945, 4403, 7020, 9345, 10339, 10430, 9445, 7405, 4499, 1784]", + "total_badness": 100324.40391 } ], "manyholes2.geo": [ { "ne1d": 10202, - "ne2d": 55340, - "ne3d": 128088, - "quality_histogram": "[0, 0, 0, 0, 7, 30, 95, 288, 823, 2105, 4573, 7847, 11840, 18008, 18739, 18350, 16782, 14747, 10264, 3590]", - "total_badness": 176960.02706 + "ne2d": 55316, + "ne3d": 127893, + "quality_histogram": "[0, 0, 0, 1, 5, 36, 93, 304, 799, 2072, 4456, 7947, 11984, 17504, 18676, 18332, 17069, 14736, 10402, 3477]", + "total_badness": 176567.71812 } ], "matrix.geo": [ { "ne1d": 174, - "ne2d": 1194, - "ne3d": 5295, - "quality_histogram": "[0, 0, 32, 147, 135, 100, 130, 147, 177, 237, 361, 409, 554, 617, 583, 555, 457, 385, 212, 57]", - "total_badness": 9761.5954211 + "ne2d": 1196, + "ne3d": 5364, + "quality_histogram": "[0, 0, 38, 139, 142, 92, 140, 174, 157, 227, 340, 437, 522, 624, 575, 548, 536, 390, 222, 61]", + "total_badness": 9855.8573843 }, { "ne1d": 106, "ne2d": 600, - "ne3d": 2001, - "quality_histogram": "[0, 3, 20, 65, 122, 160, 137, 169, 184, 189, 172, 190, 184, 137, 89, 53, 45, 54, 20, 8]", - "total_badness": 4865.5803344 + "ne3d": 1993, + "quality_histogram": "[0, 3, 20, 76, 113, 151, 141, 159, 190, 172, 186, 171, 195, 136, 92, 65, 49, 47, 20, 7]", + "total_badness": 4853.2906164 }, { "ne1d": 132, "ne2d": 828, - "ne3d": 2783, - "quality_histogram": "[0, 0, 13, 51, 108, 146, 173, 161, 225, 265, 333, 287, 211, 205, 173, 161, 117, 93, 45, 16]", - "total_badness": 5980.1022567 + "ne3d": 2747, + "quality_histogram": "[0, 1, 16, 89, 90, 146, 158, 183, 205, 244, 313, 287, 231, 215, 178, 146, 89, 87, 52, 17]", + "total_badness": 6032.3841165 }, { "ne1d": 174, - "ne2d": 1194, - "ne3d": 5105, - "quality_histogram": "[0, 0, 20, 134, 116, 78, 117, 149, 152, 188, 285, 371, 498, 547, 578, 611, 503, 441, 254, 63]", - "total_badness": 9068.0076408 + "ne2d": 1196, + "ne3d": 5197, + "quality_histogram": "[0, 0, 25, 120, 129, 78, 122, 155, 136, 210, 281, 370, 474, 594, 563, 605, 538, 466, 258, 73]", + "total_badness": 9197.4127362 }, { "ne1d": 248, "ne2d": 2324, - "ne3d": 16255, - "quality_histogram": "[0, 0, 0, 0, 0, 5, 24, 75, 128, 202, 346, 678, 1062, 1517, 2149, 2515, 2754, 2540, 1722, 538]", - "total_badness": 21663.043545 + "ne3d": 16300, + "quality_histogram": "[0, 0, 0, 0, 0, 5, 23, 71, 137, 184, 373, 655, 1098, 1629, 2112, 2498, 2788, 2503, 1712, 512]", + "total_badness": 21759.792772 }, { "ne1d": 418, "ne2d": 5966, - "ne3d": 100388, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 6, 24, 71, 195, 503, 1186, 2824, 5989, 10497, 16251, 20497, 21258, 16049, 5037]", - "total_badness": 124129.95267 + "ne3d": 101129, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 6, 17, 67, 187, 481, 1246, 2896, 6099, 10667, 16234, 20660, 21479, 16058, 5030]", + "total_badness": 125108.89116 } ], "ortho.geo": [ @@ -884,10 +884,10 @@ }, { "ne1d": 72, - "ne2d": 116, - "ne3d": 180, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 14, 9, 27, 39, 31, 30, 17, 5]", - "total_badness": 233.34798934 + "ne2d": 114, + "ne3d": 177, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 7, 13, 27, 39, 31, 32, 13, 6]", + "total_badness": 228.88985644 } ], "part1.stl": [ @@ -900,10 +900,10 @@ }, { "ne1d": 112, - "ne2d": 214, - "ne3d": 345, - "quality_histogram": "[0, 0, 0, 1, 3, 8, 9, 11, 16, 24, 47, 47, 42, 33, 41, 22, 22, 12, 5, 2]", - "total_badness": 612.66129201 + "ne2d": 212, + "ne3d": 329, + "quality_histogram": "[0, 0, 1, 2, 6, 8, 7, 12, 15, 28, 32, 46, 35, 35, 33, 26, 24, 8, 8, 3]", + "total_badness": 600.29793129 }, { "ne1d": 134, @@ -915,178 +915,178 @@ { "ne1d": 194, "ne2d": 596, - "ne3d": 1742, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 13, 28, 73, 140, 199, 290, 262, 276, 254, 165, 37]", - "total_badness": 2317.9250987 + "ne3d": 1754, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 13, 28, 71, 147, 204, 282, 267, 286, 247, 166, 40]", + "total_badness": 2331.111722 }, { "ne1d": 266, "ne2d": 990, "ne3d": 4027, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 6, 26, 75, 146, 296, 557, 679, 794, 780, 509, 155]", - "total_badness": 5077.2355534 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 6, 26, 75, 146, 296, 557, 678, 795, 780, 509, 155]", + "total_badness": 5077.23567 }, { "ne1d": 674, "ne2d": 6870, - "ne3d": 81834, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 4, 21, 75, 257, 677, 1770, 4204, 8071, 12904, 17072, 18304, 14037, 4436]", - "total_badness": 100045.3114 + "ne3d": 81452, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 4, 25, 77, 250, 594, 1752, 4117, 8196, 12789, 16981, 18438, 13807, 4419]", + "total_badness": 99550.92563 } ], "period.geo": [ { "ne1d": 344, - "ne2d": 1130, - "ne3d": 3294, - "quality_histogram": "[0, 0, 0, 0, 0, 11, 22, 35, 81, 112, 210, 253, 402, 409, 494, 439, 371, 274, 135, 46]", - "total_badness": 4918.0434035 + "ne2d": 1128, + "ne3d": 3333, + "quality_histogram": "[0, 0, 0, 0, 1, 2, 23, 34, 77, 133, 193, 290, 368, 443, 452, 422, 391, 299, 160, 45]", + "total_badness": 4947.3560633 }, { "ne1d": 160, "ne2d": 286, - "ne3d": 659, - "quality_histogram": "[0, 4, 8, 11, 15, 22, 23, 30, 40, 58, 66, 57, 66, 59, 57, 36, 43, 42, 16, 6]", - "total_badness": 1346.7559432 + "ne3d": 668, + "quality_histogram": "[0, 2, 16, 21, 17, 19, 28, 37, 40, 57, 60, 60, 75, 44, 43, 45, 44, 43, 14, 3]", + "total_badness": 1452.2340762 }, { "ne1d": 232, - "ne2d": 590, - "ne3d": 1593, - "quality_histogram": "[0, 0, 21, 30, 45, 47, 61, 92, 104, 145, 141, 138, 146, 148, 134, 114, 107, 63, 46, 11]", - "total_badness": 3241.6735555 + "ne2d": 598, + "ne3d": 1548, + "quality_histogram": "[0, 17, 27, 27, 36, 51, 53, 75, 99, 120, 139, 129, 156, 145, 138, 103, 115, 66, 46, 6]", + "total_badness": 3338.4078035 }, { "ne1d": 344, - "ne2d": 1130, - "ne3d": 3209, - "quality_histogram": "[0, 0, 0, 0, 0, 4, 19, 29, 56, 85, 162, 229, 352, 413, 479, 468, 390, 320, 156, 47]", - "total_badness": 4660.4012194 + "ne2d": 1128, + "ne3d": 3278, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 19, 24, 49, 97, 171, 244, 348, 402, 467, 462, 419, 350, 182, 42]", + "total_badness": 4737.6478788 }, { "ne1d": 480, - "ne2d": 2260, - "ne3d": 11824, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 15, 44, 152, 298, 546, 944, 1504, 2045, 2229, 2105, 1531, 408]", - "total_badness": 15109.078092 + "ne2d": 2252, + "ne3d": 11707, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 19, 40, 147, 287, 574, 934, 1513, 1977, 2229, 2130, 1425, 428]", + "total_badness": 14969.835667 }, { "ne1d": 820, "ne2d": 6218, - "ne3d": 68383, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 12, 37, 108, 252, 694, 1708, 3917, 7031, 11058, 14173, 14782, 11158, 3451]", - "total_badness": 84181.20294 + "ne3d": 68314, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 7, 25, 88, 259, 691, 1670, 3656, 7155, 11221, 14072, 14790, 11219, 3459]", + "total_badness": 84011.916463 } ], "plane.stl": [ { "ne1d": 890, - "ne2d": 2646, - "ne3d": 8503, - "quality_histogram": "[4, 9, 28, 39, 37, 47, 43, 74, 102, 194, 278, 421, 644, 952, 1193, 1275, 1330, 1019, 645, 169]", - "total_badness": 12679.208033 + "ne2d": 2644, + "ne3d": 8437, + "quality_histogram": "[4, 11, 34, 34, 47, 50, 47, 73, 116, 174, 285, 458, 661, 938, 1281, 1251, 1245, 989, 581, 158]", + "total_badness": 12699.585283 }, { - "ne1d": 570, - "ne2d": 1220, - "ne3d": 1876, - "quality_histogram": "[4, 18, 43, 52, 44, 59, 75, 90, 120, 136, 177, 191, 179, 176, 167, 129, 108, 64, 28, 16]", - "total_badness": 4320.750155 + "ne1d": 572, + "ne2d": 1216, + "ne3d": 1895, + "quality_histogram": "[2, 19, 47, 57, 49, 63, 79, 93, 109, 155, 175, 199, 174, 176, 167, 136, 98, 57, 35, 5]", + "total_badness": 4388.7508089 }, { "ne1d": 724, - "ne2d": 1746, - "ne3d": 3289, - "quality_histogram": "[4, 21, 25, 37, 42, 45, 44, 74, 117, 151, 194, 292, 340, 395, 460, 353, 330, 228, 114, 23]", - "total_badness": 5983.1897176 + "ne2d": 1752, + "ne3d": 3251, + "quality_histogram": "[3, 18, 30, 51, 30, 49, 50, 70, 104, 143, 167, 291, 330, 404, 438, 402, 312, 195, 130, 34]", + "total_badness": 5918.1573233 }, { "ne1d": 956, - "ne2d": 2882, - "ne3d": 8726, - "quality_histogram": "[3, 11, 23, 49, 48, 47, 50, 58, 94, 137, 181, 359, 611, 946, 1233, 1398, 1436, 1193, 656, 193]", - "total_badness": 12772.914527 + "ne2d": 2886, + "ne3d": 8911, + "quality_histogram": "[3, 13, 24, 44, 52, 48, 50, 62, 86, 136, 201, 367, 548, 881, 1299, 1464, 1419, 1260, 761, 193]", + "total_badness": 12992.010429 }, { "ne1d": 1554, "ne2d": 6466, - "ne3d": 32040, - "quality_histogram": "[5, 6, 7, 7, 25, 52, 53, 68, 107, 199, 330, 692, 1305, 2499, 3880, 5430, 6303, 5976, 3971, 1125]", - "total_badness": 41506.110521 + "ne3d": 32098, + "quality_histogram": "[5, 6, 8, 6, 24, 52, 56, 72, 117, 168, 382, 731, 1379, 2486, 3961, 5463, 6259, 5888, 3926, 1109]", + "total_badness": 41680.677329 }, { "ne1d": 2992, - "ne2d": 23396, - "ne3d": 276589, - "quality_histogram": "[5, 7, 11, 7, 11, 22, 33, 88, 192, 471, 1192, 2796, 6844, 15362, 28665, 44479, 57706, 60282, 44709, 13707]", - "total_badness": 341214.55024 + "ne2d": 23400, + "ne3d": 315912, + "quality_histogram": "[9, 29, 30, 35, 91, 431, 1451, 3248, 5258, 8159, 12957, 19461, 28353, 38474, 46243, 48391, 44070, 33858, 19987, 5377]", + "total_badness": 451886.52052 } ], "revolution.geo": [ { "ne1d": 320, "ne2d": 3080, - "ne3d": 8493, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 14, 37, 141, 292, 516, 761, 908, 1113, 1149, 1153, 1021, 809, 454, 124]", - "total_badness": 12348.498749 + "ne3d": 8389, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 12, 49, 144, 303, 528, 693, 889, 1085, 1176, 1168, 962, 783, 479, 117]", + "total_badness": 12207.237452 }, { "ne1d": 160, - "ne2d": 822, - "ne3d": 1275, - "quality_histogram": "[0, 0, 0, 0, 1, 13, 46, 79, 104, 128, 151, 162, 143, 122, 97, 67, 79, 44, 33, 6]", - "total_badness": 2301.511908 + "ne2d": 820, + "ne3d": 1259, + "quality_histogram": "[0, 0, 0, 0, 3, 18, 57, 79, 96, 139, 150, 150, 140, 112, 90, 67, 72, 52, 27, 7]", + "total_badness": 2309.7736571 }, { "ne1d": 240, - "ne2d": 1814, - "ne3d": 4263, - "quality_histogram": "[0, 0, 0, 1, 24, 48, 98, 178, 257, 329, 374, 485, 464, 451, 424, 377, 341, 236, 134, 42]", - "total_badness": 7266.9014253 + "ne2d": 1816, + "ne3d": 3912, + "quality_histogram": "[0, 0, 0, 1, 5, 8, 26, 38, 114, 181, 332, 423, 495, 494, 492, 433, 381, 261, 179, 49]", + "total_badness": 6017.6961316 }, { "ne1d": 320, "ne2d": 3080, - "ne3d": 8289, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 6, 11, 68, 186, 384, 601, 825, 1052, 1157, 1179, 1159, 966, 521, 172]", - "total_badness": 11619.248926 + "ne3d": 8206, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 13, 75, 206, 400, 590, 774, 1006, 1185, 1210, 1118, 927, 556, 142]", + "total_badness": 11528.119325 }, { "ne1d": 480, - "ne2d": 6802, - "ne3d": 32879, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 12, 84, 271, 645, 1296, 2517, 4137, 5621, 6316, 6268, 4405, 1302]", - "total_badness": 41520.358013 + "ne2d": 6812, + "ne3d": 33032, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 15, 51, 244, 651, 1370, 2554, 4178, 5705, 6486, 6299, 4285, 1193]", + "total_badness": 41750.279607 }, { "ne1d": 800, - "ne2d": 17838, - "ne3d": 201709, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 11, 55, 165, 539, 1581, 4149, 10238, 19945, 31707, 42528, 45753, 34593, 10445]", - "total_badness": 246377.26479 + "ne2d": 17842, + "ne3d": 201922, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 13, 28, 162, 589, 1600, 4381, 10379, 20232, 32341, 42476, 45161, 34103, 10457]", + "total_badness": 246992.09017 } ], "screw.step": [ { "ne1d": 400, - "ne2d": 1426, - "ne3d": 2472, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 12, 81, 91, 181, 174, 234, 298, 277, 288, 283, 242, 190, 101, 19]", - "total_badness": 3876.6679484 + "ne2d": 1422, + "ne3d": 2422, + "quality_histogram": "[0, 0, 0, 0, 1, 0, 16, 95, 102, 173, 183, 248, 286, 295, 268, 252, 217, 167, 92, 27]", + "total_badness": 3858.3545304 }, { "ne1d": 530, - "ne2d": 2672, - "ne3d": 7959, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 13, 27, 70, 146, 225, 454, 786, 1144, 1323, 1454, 1239, 822, 250]", - "total_badness": 10425.046404 + "ne2d": 2688, + "ne3d": 7916, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 15, 31, 62, 150, 285, 487, 728, 1064, 1322, 1395, 1296, 847, 228]", + "total_badness": 10396.315052 }, { "ne1d": 668, - "ne2d": 4982, - "ne3d": 31524, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 5, 18, 51, 119, 302, 759, 1716, 3303, 5151, 6604, 6989, 5042, 1462]", - "total_badness": 38816.567058 + "ne2d": 4986, + "ne3d": 31777, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 4, 13, 47, 127, 321, 774, 1693, 3177, 5250, 6673, 7110, 5062, 1523]", + "total_badness": 39090.830215 } ], "sculpture.geo": [ @@ -1094,8 +1094,8 @@ "ne1d": 192, "ne2d": 412, "ne3d": 474, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 1, 4, 16, 22, 41, 56, 66, 94, 93, 45, 22, 10, 2]", - "total_badness": 694.32501707 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 2, 18, 18, 35, 60, 68, 91, 99, 43, 23, 10, 2]", + "total_badness": 692.74185155 }, { "ne1d": 102, @@ -1114,67 +1114,67 @@ { "ne1d": 192, "ne2d": 412, - "ne3d": 473, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 3, 16, 22, 41, 56, 67, 94, 93, 45, 22, 10, 2]", - "total_badness": 690.01007288 + "ne3d": 474, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 2, 19, 19, 35, 61, 69, 89, 99, 43, 23, 10, 2]", + "total_badness": 691.25814875 }, { "ne1d": 288, "ne2d": 962, - "ne3d": 1342, - "quality_histogram": "[0, 0, 0, 0, 1, 0, 8, 25, 55, 76, 126, 141, 130, 145, 122, 136, 146, 128, 84, 19]", - "total_badness": 2068.4211724 + "ne3d": 1325, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 6, 21, 58, 89, 111, 133, 132, 141, 122, 142, 143, 129, 78, 19]", + "total_badness": 2041.1919863 }, { "ne1d": 480, - "ne2d": 2396, - "ne3d": 6759, - "quality_histogram": "[0, 0, 0, 0, 3, 7, 8, 20, 26, 48, 63, 134, 286, 497, 697, 1121, 1313, 1288, 944, 304]", - "total_badness": 8628.8134106 + "ne2d": 2388, + "ne3d": 6681, + "quality_histogram": "[0, 0, 0, 0, 2, 4, 12, 6, 31, 34, 69, 140, 276, 472, 730, 1096, 1313, 1260, 928, 308]", + "total_badness": 8505.1301083 } ], "shaft.geo": [ { "ne1d": 708, - "ne2d": 1726, - "ne3d": 2758, - "quality_histogram": "[5, 19, 22, 27, 27, 37, 60, 74, 82, 160, 296, 372, 295, 251, 231, 278, 234, 181, 86, 21]", - "total_badness": 5318.0297732 + "ne2d": 1718, + "ne3d": 2723, + "quality_histogram": "[7, 17, 22, 29, 34, 36, 57, 78, 100, 148, 283, 376, 278, 247, 219, 285, 228, 172, 81, 26]", + "total_badness": 5343.3499358 }, { "ne1d": 410, "ne2d": 604, - "ne3d": 951, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 6, 17, 32, 42, 65, 90, 111, 140, 137, 132, 103, 58, 17]", - "total_badness": 1354.4698007 + "ne3d": 928, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 3, 5, 14, 38, 49, 69, 88, 133, 134, 124, 128, 75, 49, 16]", + "total_badness": 1353.3692968 }, { "ne1d": 510, - "ne2d": 1012, - "ne3d": 2088, - "quality_histogram": "[20, 46, 76, 95, 111, 105, 97, 134, 91, 101, 96, 141, 150, 177, 193, 168, 177, 56, 41, 13]", - "total_badness": 6181.8600404 + "ne2d": 1008, + "ne3d": 2093, + "quality_histogram": "[16, 63, 82, 96, 76, 99, 82, 124, 108, 111, 111, 143, 147, 174, 187, 181, 176, 66, 42, 9]", + "total_badness": 6035.6762331 }, { "ne1d": 708, - "ne2d": 1726, - "ne3d": 2749, - "quality_histogram": "[0, 2, 15, 16, 32, 30, 44, 71, 72, 143, 302, 400, 289, 259, 236, 273, 259, 196, 88, 22]", - "total_badness": 4725.048506 + "ne2d": 1718, + "ne3d": 2703, + "quality_histogram": "[0, 4, 9, 8, 26, 26, 65, 65, 82, 150, 268, 404, 295, 251, 234, 289, 229, 185, 85, 28]", + "total_badness": 4626.0082323 }, { "ne1d": 1138, - "ne2d": 4220, - "ne3d": 11186, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 30, 80, 154, 350, 602, 945, 1409, 1830, 2160, 1870, 1352, 400]", - "total_badness": 14442.588212 + "ne2d": 4218, + "ne3d": 11164, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 3, 29, 92, 190, 361, 576, 929, 1450, 1802, 2078, 1943, 1307, 401]", + "total_badness": 14449.209478 }, { "ne1d": 1792, "ne2d": 10588, - "ne3d": 63583, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 16, 57, 199, 505, 1317, 3246, 6239, 10147, 13375, 14218, 10750, 3513]", - "total_badness": 77700.722539 + "ne3d": 63419, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 4, 10, 67, 184, 593, 1440, 3345, 6289, 10045, 13306, 14094, 10552, 3488]", + "total_badness": 77657.59067 } ], "sphere.geo": [ @@ -1194,10 +1194,10 @@ }, { "ne1d": 0, - "ne2d": 80, - "ne3d": 80, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 12, 28, 24, 10, 4, 0, 0, 0]", - "total_badness": 114.85441614 + "ne2d": 72, + "ne3d": 72, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 14, 26, 23, 8, 0, 0, 0]", + "total_badness": 97.58858068 }, { "ne1d": 0, @@ -1252,105 +1252,105 @@ }, { "ne1d": 74, - "ne2d": 416, - "ne3d": 1711, - "quality_histogram": "[0, 0, 0, 0, 2, 3, 7, 15, 23, 28, 56, 85, 135, 188, 256, 270, 252, 194, 131, 66]", - "total_badness": 2380.2313828 + "ne2d": 418, + "ne3d": 1749, + "quality_histogram": "[0, 0, 0, 0, 0, 5, 4, 12, 26, 34, 61, 126, 161, 221, 244, 240, 263, 186, 131, 35]", + "total_badness": 2468.6863723 }, { "ne1d": 122, - "ne2d": 1080, - "ne3d": 13950, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 2, 8, 27, 100, 220, 499, 870, 1449, 2270, 2791, 2947, 2086, 679]", - "total_badness": 17374.576935 + "ne2d": 1082, + "ne3d": 14003, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 8, 29, 100, 200, 460, 911, 1478, 2207, 2867, 2900, 2169, 671]", + "total_badness": 17411.619104 } ], "torus.geo": [ { "ne1d": 0, "ne2d": 2534, - "ne3d": 5567, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 24, 44, 120, 251, 427, 577, 708, 736, 700, 671, 555, 393, 274, 86]", - "total_badness": 8384.3048813 + "ne3d": 5714, + "quality_histogram": "[0, 0, 0, 0, 0, 5, 20, 60, 155, 280, 408, 597, 707, 753, 762, 701, 541, 400, 246, 79]", + "total_badness": 8662.1200343 }, { "ne1d": 0, "ne2d": 692, - "ne3d": 3145, - "quality_histogram": "[195, 700, 454, 360, 340, 221, 170, 157, 140, 91, 96, 60, 44, 31, 33, 26, 12, 7, 6, 2]", - "total_badness": 25137.501541 + "ne3d": 3096, + "quality_histogram": "[174, 698, 478, 383, 321, 195, 183, 161, 107, 83, 75, 67, 49, 32, 28, 28, 18, 7, 7, 2]", + "total_badness": 24704.214641 }, { "ne1d": 0, "ne2d": 1446, - "ne3d": 2727, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 5, 12, 62, 161, 219, 352, 418, 401, 380, 266, 239, 155, 55]", - "total_badness": 3909.4618458 + "ne3d": 2722, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 18, 49, 142, 269, 320, 396, 414, 370, 294, 222, 160, 64]", + "total_badness": 3891.2372171 }, { "ne1d": 0, "ne2d": 2534, - "ne3d": 5419, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 19, 42, 209, 332, 508, 665, 720, 748, 656, 613, 495, 305, 103]", - "total_badness": 7868.8410035 + "ne3d": 5565, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 18, 68, 187, 321, 551, 613, 741, 847, 714, 597, 516, 298, 90]", + "total_badness": 8072.4927096 }, { "ne1d": 0, "ne2d": 5892, - "ne3d": 25297, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 6, 57, 140, 381, 917, 1672, 2967, 4341, 5051, 5114, 3588, 1059]", - "total_badness": 31635.159095 + "ne3d": 25273, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 8, 34, 127, 400, 875, 1667, 2853, 4059, 5213, 5256, 3667, 1113]", + "total_badness": 31491.532498 }, { "ne1d": 0, "ne2d": 16286, - "ne3d": 175540, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 23, 105, 378, 1086, 3067, 7730, 16270, 26910, 37673, 40911, 31553, 9832]", - "total_badness": 212959.87194 + "ne3d": 174919, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 30, 126, 410, 1095, 3093, 7938, 16499, 26903, 36715, 40658, 31546, 9902]", + "total_badness": 212371.24291 } ], "trafo.geo": [ { "ne1d": 690, - "ne2d": 1684, - "ne3d": 5207, - "quality_histogram": "[0, 1, 2, 0, 8, 23, 26, 43, 130, 209, 256, 376, 434, 574, 672, 714, 598, 554, 460, 127]", - "total_badness": 7609.297723 + "ne2d": 1682, + "ne3d": 5174, + "quality_histogram": "[3, 4, 2, 6, 7, 24, 43, 53, 118, 191, 297, 326, 455, 561, 646, 718, 596, 538, 447, 139]", + "total_badness": 7745.7698571 }, { "ne1d": 390, "ne2d": 522, "ne3d": 1348, - "quality_histogram": "[0, 2, 3, 17, 13, 39, 77, 130, 126, 139, 162, 128, 136, 115, 80, 88, 48, 32, 11, 2]", - "total_badness": 2770.7952646 + "quality_histogram": "[0, 0, 3, 17, 12, 37, 76, 125, 124, 143, 166, 124, 148, 108, 84, 89, 45, 35, 10, 2]", + "total_badness": 2736.3657445 }, { "ne1d": 512, - "ne2d": 876, - "ne3d": 2390, - "quality_histogram": "[0, 0, 2, 1, 11, 17, 45, 82, 116, 145, 178, 211, 303, 386, 349, 231, 147, 96, 45, 25]", - "total_badness": 3971.1275129 + "ne2d": 874, + "ne3d": 2401, + "quality_histogram": "[0, 0, 0, 1, 9, 23, 43, 69, 133, 144, 188, 205, 309, 385, 348, 236, 141, 92, 48, 27]", + "total_badness": 3976.5898975 }, { "ne1d": 690, - "ne2d": 1684, - "ne3d": 5136, - "quality_histogram": "[0, 0, 0, 0, 3, 14, 20, 37, 122, 193, 254, 362, 416, 558, 664, 720, 625, 547, 463, 138]", - "total_badness": 7387.3184406 + "ne2d": 1682, + "ne3d": 5101, + "quality_histogram": "[0, 0, 1, 0, 2, 13, 30, 36, 119, 183, 283, 338, 427, 561, 657, 697, 618, 543, 455, 138]", + "total_badness": 7362.8828691 }, { "ne1d": 1050, - "ne2d": 3816, - "ne3d": 17915, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 26, 41, 68, 180, 504, 1428, 2170, 2266, 2730, 2780, 2666, 2365, 685]", - "total_badness": 23360.270089 + "ne2d": 3810, + "ne3d": 17924, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 7, 24, 46, 81, 198, 556, 1378, 2215, 2473, 2727, 2672, 2656, 2255, 635]", + "total_badness": 23477.047631 }, { "ne1d": 1722, - "ne2d": 10044, - "ne3d": 84569, - "quality_histogram": "[0, 0, 0, 0, 3, 8, 60, 1414, 732, 421, 765, 1392, 2637, 5659, 9077, 13242, 16177, 16531, 12448, 4003]", - "total_badness": 108711.84635 + "ne2d": 10040, + "ne3d": 84573, + "quality_histogram": "[0, 0, 0, 0, 0, 5, 61, 1368, 731, 437, 763, 1424, 2694, 5632, 8974, 13002, 16406, 16573, 12468, 4035]", + "total_badness": 108616.3402 } ], "twobricks.geo": [ @@ -1384,17 +1384,17 @@ }, { "ne1d": 116, - "ne2d": 136, - "ne3d": 171, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 7, 10, 12, 40, 34, 23, 22, 13, 3]", - "total_badness": 228.1897295 + "ne2d": 134, + "ne3d": 177, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 12, 10, 18, 38, 22, 27, 22, 18, 7]", + "total_badness": 234.47334257 }, { "ne1d": 186, - "ne2d": 346, - "ne3d": 594, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 22, 29, 70, 88, 100, 109, 115, 43, 14]", - "total_badness": 771.14009171 + "ne2d": 342, + "ne3d": 608, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 11, 23, 29, 65, 89, 111, 104, 105, 65, 5]", + "total_badness": 792.94333095 } ], "twocubes.geo": [ @@ -1428,17 +1428,17 @@ }, { "ne1d": 116, - "ne2d": 136, - "ne3d": 171, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 7, 10, 12, 40, 34, 23, 22, 13, 3]", - "total_badness": 228.1897295 + "ne2d": 134, + "ne3d": 177, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 12, 10, 18, 38, 22, 27, 22, 18, 7]", + "total_badness": 234.47334257 }, { "ne1d": 186, - "ne2d": 346, - "ne3d": 594, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 22, 29, 70, 88, 100, 109, 115, 43, 14]", - "total_badness": 771.14009171 + "ne2d": 342, + "ne3d": 608, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 11, 23, 29, 65, 89, 111, 104, 105, 65, 5]", + "total_badness": 792.94333095 } ], "twocyl.geo": [ @@ -1458,10 +1458,10 @@ }, { "ne1d": 102, - "ne2d": 236, - "ne3d": 551, - "quality_histogram": "[0, 29, 41, 30, 31, 36, 49, 40, 55, 27, 38, 32, 26, 26, 20, 13, 37, 16, 4, 1]", - "total_badness": 1900.92706 + "ne2d": 238, + "ne3d": 558, + "quality_histogram": "[4, 34, 33, 32, 30, 37, 52, 45, 67, 43, 31, 27, 16, 19, 20, 17, 36, 12, 3, 0]", + "total_badness": 2092.5126876 }, { "ne1d": 144, @@ -1473,16 +1473,16 @@ { "ne1d": 214, "ne2d": 910, - "ne3d": 1894, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 20, 72, 118, 190, 292, 365, 352, 262, 179, 40]", - "total_badness": 2477.4306124 + "ne3d": 1914, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 28, 76, 128, 227, 305, 346, 351, 232, 167, 40]", + "total_badness": 2533.9115448 }, { "ne1d": 350, "ne2d": 2374, - "ne3d": 13452, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 25, 83, 244, 626, 1288, 2202, 2860, 3100, 2290, 728]", - "total_badness": 16367.358392 + "ne3d": 13491, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 7, 24, 85, 255, 615, 1330, 2192, 2925, 3114, 2247, 695]", + "total_badness": 16437.08459 } ] } \ No newline at end of file From 288bd2c3d89fb6bc5669704bbbf1e4475f9c6f56 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Tue, 8 Oct 2019 18:12:10 +0200 Subject: [PATCH 039/120] EdgeSwapping() - all faces at once --- libsrc/meshing/improve2.cpp | 74 +++++++++++++++------------------- libsrc/meshing/improve2.hpp | 2 +- libsrc/meshing/improve2gen.cpp | 1 + 3 files changed, 35 insertions(+), 42 deletions(-) diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index e0efde2a..799c33c5 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -27,7 +27,6 @@ namespace netgen Array &neighbors, Array &swapped, const SurfaceElementIndex t1, const int o1, - const int surfnr, const int t, NgArray &pdef, const bool check_only) @@ -41,6 +40,8 @@ namespace netgen if (t2 == -1) return false; if (swapped[t1] || swapped[t2]) return false; + const int faceindex = mesh[t1].GetIndex(); + const int surfnr = mesh.GetFaceDescriptor (faceindex).SurfNr(); PointIndex pi1 = mesh[t1].PNumMod(o1+1+1); PointIndex pi2 = mesh[t1].PNumMod(o1+1+2); @@ -174,51 +175,41 @@ namespace netgen void MeshOptimize2d :: EdgeSwapping (Mesh & mesh, int usemetric) { static Timer timer("EdgeSwapping (2D)"); RegionTimer reg(timer); - if (!faceindex) - { - if (usemetric) - PrintMessage (3, "Edgeswapping, metric"); - else - PrintMessage (3, "Edgeswapping, topological"); - - for (faceindex = 1; faceindex <= mesh.GetNFD(); faceindex++) - { - EdgeSwapping (mesh, usemetric); - - if (multithread.terminate) - throw NgException ("Meshing stopped"); - } - - faceindex = 0; - mesh.CalcSurfacesOfNode(); - return; - } - + if (usemetric) + PrintMessage (3, "Edgeswapping, metric"); + else + PrintMessage (3, "Edgeswapping, topological"); static int timerstart = NgProfiler::CreateTimer ("EdgeSwapping 2D start"); NgProfiler::StartTimer (timerstart); - Array seia; - mesh.GetSurfaceElementsOfFace (faceindex, seia); + bool mixed = false; + if(faceindex==0) + { + seia.SetSize(mesh.GetNSE()); + ParallelForRange( Range(seia), [&] (auto myrange) + { + for (auto i : myrange) + { + SurfaceElementIndex sei(i); + seia[i] = sei; + if (mesh[sei].GetNP() != 3) + mixed = true; + } + }); + } + else + { + mesh.GetSurfaceElementsOfFace (faceindex, seia); + for (SurfaceElementIndex sei : seia) + if (mesh[sei].GetNP() != 3) + mixed = true; + } - /* - for (int i = 0; i < seia.Size(); i++) - if (mesh[seia[i]].GetNP() != 3) - { - GenericImprove (mesh); - return; - } - */ - for (SurfaceElementIndex sei : seia) - if (mesh[sei].GetNP() != 3) - { - GenericImprove (mesh); - return; - } + if(mixed) + return GenericImprove(mesh); - int surfnr = mesh.GetFaceDescriptor (faceindex).SurfNr(); - Array neighbors(mesh.GetNSE()); INDEX_2_HASHTABLE other(2*seia.Size() + 2); @@ -399,7 +390,7 @@ namespace netgen throw NgException ("Meshing stopped"); for (int o1 = 0; o1 < 3; o1++) - if(EdgeSwapping(mesh, usemetric, neighbors, swapped, t1, o1, surfnr, t, pdef, true)) + if(EdgeSwapping(mesh, usemetric, neighbors, swapped, t1, o1, t, pdef, true)) improvement_candidates[cnt++]= std::make_pair(t1,o1); } }); @@ -408,11 +399,12 @@ namespace netgen QuickSort(elements_with_improvement); for (auto [t1,o1] : elements_with_improvement) - done |= EdgeSwapping(mesh, usemetric, neighbors, swapped, t1, o1, surfnr, t, pdef, false); + done |= EdgeSwapping(mesh, usemetric, neighbors, swapped, t1, o1, t, pdef, false); t--; } mesh.SetNextTimeStamp(); + mesh.CalcSurfacesOfNode(); } diff --git a/libsrc/meshing/improve2.hpp b/libsrc/meshing/improve2.hpp index d84d2d01..3d62ee45 100644 --- a/libsrc/meshing/improve2.hpp +++ b/libsrc/meshing/improve2.hpp @@ -37,7 +37,7 @@ public: const NgArray* > & from, NgArray* > & dest); bool EdgeSwapping (Mesh & mesh, const int usemetric, Array &neighbors, Array &swapped, - const SurfaceElementIndex t1, const int edge, const int surfnr, const int t, NgArray &pdef, const bool check_only=false); + const SurfaceElementIndex t1, const int edge, const int t, NgArray &pdef, const bool check_only=false); void EdgeSwapping (Mesh & mesh, int usemetric); void CombineImprove (Mesh & mesh); void SplitImprove (Mesh & mesh); diff --git a/libsrc/meshing/improve2gen.cpp b/libsrc/meshing/improve2gen.cpp index 07587ed9..326afbf2 100644 --- a/libsrc/meshing/improve2gen.cpp +++ b/libsrc/meshing/improve2gen.cpp @@ -21,6 +21,7 @@ namespace netgen void MeshOptimize2d :: GenericImprove (Mesh & mesh) { + static Timer timer("MeshOptimize2d::GenericImprove"); RegionTimer reg(timer); if (!faceindex) { if (writestatus) From a651a2d97e0fe9d5212d39cc3b13fb6f2d109bfd Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Tue, 8 Oct 2019 18:35:20 +0200 Subject: [PATCH 040/120] EdgeSwapping() - some cleanup and parallelization of table building --- libsrc/meshing/improve2.cpp | 148 +++++++++++++++++------------------- libsrc/meshing/improve2.hpp | 2 +- 2 files changed, 72 insertions(+), 78 deletions(-) diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index 799c33c5..af0a6edf 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -8,6 +8,7 @@ namespace netgen { + using ngcore::ParallelForRange; @@ -28,7 +29,7 @@ namespace netgen Array &swapped, const SurfaceElementIndex t1, const int o1, const int t, - NgArray &pdef, + Array &pdef, const bool check_only) { bool should; @@ -175,6 +176,7 @@ namespace netgen void MeshOptimize2d :: EdgeSwapping (Mesh & mesh, int usemetric) { static Timer timer("EdgeSwapping (2D)"); RegionTimer reg(timer); + static Timer timer_nb("EdgeSwapping-Find neighbors"); if (usemetric) PrintMessage (3, "Edgeswapping, metric"); else @@ -215,59 +217,68 @@ namespace netgen Array swapped(mesh.GetNSE()); - NgArray pdef(mesh.GetNP()); - NgArray pangle(mesh.GetNP()); + Array pdef(mesh.GetNP()); + Array pangle(mesh.GetNP()); - - // int e; - // double d; - // Vec3d nv1, nv2; - - // double loch(-1); static const double minangle[] = { 0, 1.481, 2.565, 3.627, 4.683, 5.736, 7, 9 }; - for (int i = 0; i < seia.Size(); i++) + if(faceindex == 0) { - const Element2d & sel = mesh[seia[i]]; - for (int j = 0; j < 3; j++) - pangle[sel[j]] = 0.0; + ParallelForRange( Range(pangle), [&] (auto myrange) + { + for (auto i : myrange) + pangle[i] = 0.0; + }); } - // pangle = 0; - - for (int i = 0; i < seia.Size(); i++) + else { - const Element2d & sel = mesh[seia[i]]; - for (int j = 0; j < 3; j++) - { - POINTTYPE typ = mesh[sel[j]].Type(); - if (typ == FIXEDPOINT || typ == EDGEPOINT) - { - pangle[sel[j]] += - Angle (mesh[sel[(j+1)%3]] - mesh[sel[j]], - mesh[sel[(j+2)%3]] - mesh[sel[j]]); - } - } + ParallelForRange( Range(seia), [&] (auto myrange) + { + for (auto i : myrange) + { + const Element2d & sel = mesh[seia[i]]; + for (int j = 0; j < 3; j++) + pangle[sel[j]] = 0.0; + } + }); } - // for (PointIndex pi = PointIndex::BASE; - // pi < mesh.GetNP()+PointIndex::BASE; pi++) - - // pdef = 0; - for (int i = 0; i < seia.Size(); i++) - { - const Element2d & sel = mesh[seia[i]]; - for (int j = 0; j < 3; j++) - { - PointIndex pi = sel[j]; - if (mesh[pi].Type() == INNERPOINT || mesh[pi].Type() == SURFACEPOINT) - pdef[pi] = -6; - else - for (int j = 0; j < 8; j++) - if (pangle[pi] >= minangle[j]) - pdef[pi] = -1-j; + ParallelForRange( Range(seia), [&] (auto myrange) + { + for (auto i : myrange) + { + const Element2d & sel = mesh[seia[i]]; + for (int j = 0; j < 3; j++) + { + POINTTYPE typ = mesh[sel[j]].Type(); + if (typ == FIXEDPOINT || typ == EDGEPOINT) + { + pangle[sel[j]] += + Angle (mesh[sel[(j+1)%3]] - mesh[sel[j]], + mesh[sel[(j+2)%3]] - mesh[sel[j]]); + } + } } - } + }); + + ParallelForRange( Range(seia), [&] (auto myrange) + { + for (auto i : myrange) + { + const Element2d & sel = mesh[seia[i]]; + for (int j = 0; j < 3; j++) + { + PointIndex pi = sel[j]; + if (mesh[pi].Type() == INNERPOINT || mesh[pi].Type() == SURFACEPOINT) + pdef[pi] = -6; + else + for (int j = 0; j < 8; j++) + if (pangle[pi] >= minangle[j]) + pdef[pi] = -1-j; + } + } + }); /* for (int i = 0; i < seia.Size(); i++) @@ -277,41 +288,23 @@ namespace netgen pdef[sel[j]]++; } */ - for (SurfaceElementIndex sei : seia) - for (PointIndex pi : mesh[sei].PNums<3>()) - pdef[pi]++; - - // for (int i = 0; i < seia.Size(); i++) - for (SurfaceElementIndex sei : seia) - for (int j = 0; j < 3; j++) + ParallelForRange( Range(seia), [&] (auto myrange) { - neighbors[sei].SetNr (j, -1); - neighbors[sei].SetOrientation (j, 0); - } - - /* - NgArray normals(mesh.GetNP()); - for (i = 1; i <= mesh.GetNSE(); i++) - { - Element2d & hel = mesh.SurfaceElement(i); - if (hel.GetIndex() == faceindex) - for (k = 1; k <= 3; k++) - { - int pi = hel.PNum(k); - SelectSurfaceOfPoint (mesh.Point(pi), hel.GeomInfoPi(k)); - int surfi = mesh.GetFaceDescriptor(faceindex).SurfNr(); - GetNormalVector (surfi, mesh.Point(pi), normals.Elem(pi)); - normals.Elem(pi) /= normals.Elem(pi).Length(); - } - } - */ - - /* - for (int i = 0; i < seia.Size(); i++) - { - const Element2d & sel = mesh[seia[i]]; - */ + for (auto i : myrange) + { + auto sei = seia[i]; + for (PointIndex pi : mesh[sei].template PNums<3>()) + AsAtomic(pdef[pi])++; + for (int j = 0; j < 3; j++) + { + neighbors[sei].SetNr (j, -1); + neighbors[sei].SetOrientation (j, 0); + } + } + }); + + timer_nb.Start(); for (SurfaceElementIndex sei : seia) { const Element2d & sel = mesh[sei]; @@ -358,6 +351,7 @@ namespace netgen } } } + timer_nb.Stop(); for (SurfaceElementIndex sei : seia) swapped[sei] = false; diff --git a/libsrc/meshing/improve2.hpp b/libsrc/meshing/improve2.hpp index 3d62ee45..03ff5559 100644 --- a/libsrc/meshing/improve2.hpp +++ b/libsrc/meshing/improve2.hpp @@ -37,7 +37,7 @@ public: const NgArray* > & from, NgArray* > & dest); bool EdgeSwapping (Mesh & mesh, const int usemetric, Array &neighbors, Array &swapped, - const SurfaceElementIndex t1, const int edge, const int t, NgArray &pdef, const bool check_only=false); + const SurfaceElementIndex t1, const int edge, const int t, Array &pdef, const bool check_only=false); void EdgeSwapping (Mesh & mesh, int usemetric); void CombineImprove (Mesh & mesh); void SplitImprove (Mesh & mesh); From 64a685c2eae47ffdd5eae56d7ac62fb5e59d1ee5 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Fri, 4 Oct 2019 17:07:10 +0200 Subject: [PATCH 041/120] CreateSurface2ElementTable for individual faces --- libsrc/meshing/meshclass.cpp | 39 +++++++++++++++++++++++++++--------- libsrc/meshing/meshclass.hpp | 2 +- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/libsrc/meshing/meshclass.cpp b/libsrc/meshing/meshclass.cpp index 25b60e88..e6067a5f 100644 --- a/libsrc/meshing/meshclass.cpp +++ b/libsrc/meshing/meshclass.cpp @@ -6205,22 +6205,41 @@ namespace netgen { for (PointIndex pi : myrange) QuickSort(elementsonnode[pi]); - }); + }, ngcore::TasksPerThread(4)); return move(elementsonnode); } - Table Mesh :: CreatePoint2SurfaceElementTable() const + Table Mesh :: CreatePoint2SurfaceElementTable( int faceindex ) const { + static Timer timer("Mesh::CreatePoint2SurfaceElementTable"); RegionTimer rt(timer); + TableCreator creator(GetNP()); - for ( ; !creator.Done(); creator++) - ngcore::ParallelForRange - (Range(surfelements), [&] (auto myrange) - { - for (SurfaceElementIndex ei : myrange) - for (PointIndex pi : (*this)[ei].PNums()) - creator.Add (pi, ei); - }); + + if(faceindex==0) + { + for ( ; !creator.Done(); creator++) + ngcore::ParallelForRange + (Range(surfelements), [&] (auto myrange) + { + for (SurfaceElementIndex ei : myrange) + for (PointIndex pi : (*this)[ei].PNums()) + creator.Add (pi, ei); + }, ngcore::TasksPerThread(4)); + } + else + { + Array face_els; + GetSurfaceElementsOfFace(faceindex, face_els); + for ( ; !creator.Done(); creator++) + ngcore::ParallelForRange + (Range(face_els), [&] (auto myrange) + { + for (auto i : myrange) + for (PointIndex pi : (*this)[face_els[i]].PNums()) + creator.Add (pi, face_els[i]); + }, ngcore::TasksPerThread(4)); + } auto elementsonnode = creator.MoveTable(); ngcore::ParallelForRange diff --git a/libsrc/meshing/meshclass.hpp b/libsrc/meshing/meshclass.hpp index 372430ee..6431afad 100644 --- a/libsrc/meshing/meshclass.hpp +++ b/libsrc/meshing/meshclass.hpp @@ -762,7 +762,7 @@ namespace netgen Table CreatePoint2ElementTable() const; - Table CreatePoint2SurfaceElementTable() const; + Table CreatePoint2SurfaceElementTable( int faceindex=0 ) const; DLL_HEADER bool PureTrigMesh (int faceindex = 0) const; DLL_HEADER bool PureTetMesh () const; From 18bdd9df93cc557f613ed4c2e2ca4a48dea0b263 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Tue, 8 Oct 2019 19:26:43 +0200 Subject: [PATCH 042/120] Build neighbors list in parallel Check in new results (part1.stl does not mesh with very_coarse anymore) --- libsrc/meshing/improve2.cpp | 97 +++++++------------ libsrc/stlgeom/meshstlsurface.cpp | 1 - tests/pytest/results.json | 153 ++++++++++++++---------------- tests/pytest/test_tutorials.py | 2 + 4 files changed, 111 insertions(+), 142 deletions(-) diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index af0a6edf..462fee8c 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -187,6 +187,7 @@ namespace netgen Array seia; bool mixed = false; + if(faceindex==0) { seia.SetSize(mesh.GetNSE()); @@ -213,8 +214,7 @@ namespace netgen return GenericImprove(mesh); Array neighbors(mesh.GetNSE()); - INDEX_2_HASHTABLE other(2*seia.Size() + 2); - + auto elements_on_node = mesh.CreatePoint2SurfaceElementTable(faceindex); Array swapped(mesh.GetNSE()); Array pdef(mesh.GetNP()); @@ -254,9 +254,9 @@ namespace netgen POINTTYPE typ = mesh[sel[j]].Type(); if (typ == FIXEDPOINT || typ == EDGEPOINT) { - pangle[sel[j]] += + AtomicAdd(pangle[sel[j]], Angle (mesh[sel[(j+1)%3]] - mesh[sel[j]], - mesh[sel[(j+2)%3]] - mesh[sel[j]]); + mesh[sel[(j+2)%3]] - mesh[sel[j]])); } } } @@ -280,14 +280,6 @@ namespace netgen } }); - /* - for (int i = 0; i < seia.Size(); i++) - { - const Element2d & sel = mesh[seia[i]]; - for (int j = 0; j < 3; j++) - pdef[sel[j]]++; - } - */ ParallelForRange( Range(seia), [&] (auto myrange) { for (auto i : myrange) @@ -300,58 +292,41 @@ namespace netgen neighbors[sei].SetNr (j, -1); neighbors[sei].SetOrientation (j, 0); } + + const auto sel = mesh[sei]; + for (int j = 0; j < 3; j++) + { + PointIndex pi1 = sel.PNumMod(j+2); + PointIndex pi2 = sel.PNumMod(j+3); + + for (auto sei_other : elements_on_node[pi1]) + { + if(sei_other==sei) continue; + const auto & other = mesh[sei_other]; + int pi1_other = -1; + int pi2_other = -1; + bool common_edge = false; + for (int k = 0; k < 3; k++) + { + if(other[k] == pi1) + pi1_other = k; + if(other[k] == pi2) + { + pi2_other = k; + common_edge = true; + } + } + + if(common_edge) + { + neighbors[sei].SetNr (j, sei_other); + neighbors[sei].SetOrientation (j, 3-pi1_other-pi2_other); + } + } + } } }); - - timer_nb.Start(); - for (SurfaceElementIndex sei : seia) - { - const Element2d & sel = mesh[sei]; - - for (int j = 0; j < 3; j++) - { - PointIndex pi1 = sel.PNumMod(j+2); - PointIndex pi2 = sel.PNumMod(j+3); - - // double loch = mesh.GetH(mesh[pi1]); - - // INDEX_2 edge(pi1, pi2); - // edge.Sort(); - - if (mesh.IsSegment (pi1, pi2)) - continue; - - /* - if (segments.Used (edge)) - continue; - */ - INDEX_2 ii2 (pi1, pi2); - if (other.Used (ii2)) - { - // INDEX_2 i2s(ii2); - // i2s.Sort(); - - /* - int i2 = other.Get(ii2).tnr; - int j2 = other.Get(ii2).sidenr; - */ - auto othertrig = other.Get(ii2); - SurfaceElementIndex i2 = othertrig.tnr; - int j2 = othertrig.sidenr; - - neighbors[sei].SetNr (j, i2); - neighbors[sei].SetOrientation (j, j2); - neighbors[i2].SetNr (j2, sei); - neighbors[i2].SetOrientation (j2, j); - } - else - { - other.Set (INDEX_2 (pi2, pi1), trionedge (sei, j)); - } - } - } - timer_nb.Stop(); for (SurfaceElementIndex sei : seia) swapped[sei] = false; diff --git a/libsrc/stlgeom/meshstlsurface.cpp b/libsrc/stlgeom/meshstlsurface.cpp index 4c50180b..6333ea26 100644 --- a/libsrc/stlgeom/meshstlsurface.cpp +++ b/libsrc/stlgeom/meshstlsurface.cpp @@ -306,7 +306,6 @@ int STLSurfaceMeshing (STLGeometry & geom, class Mesh & mesh, const MeshingParam mesh.CalcSurfacesOfNode(); optmesh.EdgeSwapping (mesh, 0); - mesh.CalcSurfacesOfNode(); optmesh.ImproveMesh (mesh, mparam); } diff --git a/tests/pytest/results.json b/tests/pytest/results.json index 79f56322..3ff60ef1 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -685,45 +685,45 @@ "hinge.stl": [ { "ne1d": 456, - "ne2d": 1230, - "ne3d": 2006, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 5, 9, 24, 42, 72, 137, 165, 225, 325, 287, 304, 216, 146, 47]", - "total_badness": 2804.4326922 + "ne2d": 1214, + "ne3d": 2019, + "quality_histogram": "[0, 0, 0, 0, 1, 1, 7, 10, 25, 53, 64, 135, 179, 260, 313, 277, 264, 228, 159, 43]", + "total_badness": 2840.0751587 }, { "ne1d": 298, - "ne2d": 612, - "ne3d": 800, - "quality_histogram": "[0, 0, 1, 5, 8, 14, 26, 21, 33, 47, 74, 78, 98, 89, 89, 80, 63, 44, 24, 6]", - "total_badness": 1384.3451953 + "ne2d": 594, + "ne3d": 803, + "quality_histogram": "[0, 0, 3, 10, 11, 10, 24, 29, 44, 52, 53, 101, 86, 104, 78, 76, 66, 29, 22, 5]", + "total_badness": 1443.356934 }, { "ne1d": 370, - "ne2d": 860, - "ne3d": 1148, - "quality_histogram": "[0, 0, 0, 0, 2, 4, 16, 24, 25, 32, 78, 104, 135, 154, 165, 176, 112, 66, 43, 12]", - "total_badness": 1761.6622395 + "ne2d": 842, + "ne3d": 1114, + "quality_histogram": "[0, 0, 0, 0, 0, 9, 18, 23, 29, 45, 67, 110, 146, 130, 166, 151, 102, 53, 52, 13]", + "total_badness": 1737.5505204 }, { "ne1d": 516, - "ne2d": 1584, - "ne3d": 2528, - "quality_histogram": "[0, 0, 0, 0, 2, 1, 9, 16, 23, 49, 125, 185, 212, 311, 338, 362, 347, 313, 191, 44]", - "total_badness": 3559.0498754 + "ne2d": 1566, + "ne3d": 2515, + "quality_histogram": "[0, 0, 0, 0, 1, 1, 2, 16, 33, 61, 109, 161, 234, 325, 376, 358, 314, 287, 192, 45]", + "total_badness": 3545.6814623 }, { "ne1d": 722, - "ne2d": 2888, - "ne3d": 6747, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 3, 15, 27, 51, 174, 373, 644, 867, 1088, 1146, 1180, 929, 247]", - "total_badness": 8655.9198144 + "ne2d": 2870, + "ne3d": 6691, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 4, 17, 35, 66, 156, 354, 634, 871, 1042, 1219, 1171, 879, 240]", + "total_badness": 8595.0420119 }, { "ne1d": 1862, - "ne2d": 19516, - "ne3d": 137265, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 3, 5, 47, 136, 444, 1131, 2812, 6902, 13203, 22054, 29007, 30796, 23323, 7401]", - "total_badness": 167751.20764 + "ne2d": 19490, + "ne3d": 137799, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 44, 149, 433, 1143, 3044, 7194, 13730, 22017, 28888, 30587, 23088, 7477]", + "total_badness": 168663.12974 } ], "lshape3d.geo": [ @@ -893,45 +893,38 @@ "part1.stl": [ { "ne1d": 170, - "ne2d": 454, - "ne3d": 1231, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 4, 16, 11, 28, 52, 63, 111, 142, 191, 162, 178, 143, 94, 34]", - "total_badness": 1732.0556803 - }, - { - "ne1d": 112, - "ne2d": 212, - "ne3d": 329, - "quality_histogram": "[0, 0, 1, 2, 6, 8, 7, 12, 15, 28, 32, 46, 35, 35, 33, 26, 24, 8, 8, 3]", - "total_badness": 600.29793129 + "ne2d": 436, + "ne3d": 1229, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 3, 19, 29, 55, 87, 110, 138, 175, 205, 157, 142, 78, 29]", + "total_badness": 1729.0401722 }, { "ne1d": 134, - "ne2d": 288, - "ne3d": 502, - "quality_histogram": "[0, 0, 0, 3, 0, 8, 3, 6, 12, 12, 31, 38, 65, 61, 63, 78, 51, 46, 18, 7]", - "total_badness": 773.39426016 + "ne2d": 278, + "ne3d": 495, + "quality_histogram": "[0, 0, 0, 1, 2, 1, 3, 5, 14, 29, 31, 32, 59, 65, 55, 70, 58, 44, 23, 3]", + "total_badness": 754.26258256 }, { "ne1d": 194, - "ne2d": 596, - "ne3d": 1754, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 13, 28, 71, 147, 204, 282, 267, 286, 247, 166, 40]", - "total_badness": 2331.111722 + "ne2d": 588, + "ne3d": 1673, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 9, 19, 53, 115, 189, 242, 295, 314, 237, 151, 44]", + "total_badness": 2197.2722054 }, { "ne1d": 266, - "ne2d": 990, - "ne3d": 4027, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 6, 26, 75, 146, 296, 557, 678, 795, 780, 509, 155]", - "total_badness": 5077.23567 + "ne2d": 986, + "ne3d": 4070, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 0, 1, 11, 26, 61, 171, 329, 503, 679, 791, 819, 526, 151]", + "total_badness": 5135.4720603 }, { "ne1d": 674, - "ne2d": 6870, - "ne3d": 81452, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 4, 25, 77, 250, 594, 1752, 4117, 8196, 12789, 16981, 18438, 13807, 4419]", - "total_badness": 99550.92563 + "ne2d": 6854, + "ne3d": 83365, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 7, 13, 62, 230, 706, 1754, 4117, 8217, 13027, 17521, 18882, 14312, 4515]", + "total_badness": 101790.83606 } ], "period.geo": [ @@ -981,45 +974,45 @@ "plane.stl": [ { "ne1d": 890, - "ne2d": 2644, - "ne3d": 8437, - "quality_histogram": "[4, 11, 34, 34, 47, 50, 47, 73, 116, 174, 285, 458, 661, 938, 1281, 1251, 1245, 989, 581, 158]", - "total_badness": 12699.585283 + "ne2d": 2594, + "ne3d": 8251, + "quality_histogram": "[4, 12, 36, 32, 44, 50, 57, 71, 152, 239, 330, 506, 691, 890, 1189, 1240, 1122, 915, 537, 134]", + "total_badness": 12713.488612 }, { - "ne1d": 572, - "ne2d": 1216, - "ne3d": 1895, - "quality_histogram": "[2, 19, 47, 57, 49, 63, 79, 93, 109, 155, 175, 199, 174, 176, 167, 136, 98, 57, 35, 5]", - "total_badness": 4388.7508089 + "ne1d": 570, + "ne2d": 1162, + "ne3d": 1656, + "quality_histogram": "[6, 27, 35, 54, 64, 75, 98, 116, 138, 141, 155, 129, 151, 124, 127, 78, 75, 33, 26, 4]", + "total_badness": 4280.7158528 }, { "ne1d": 724, - "ne2d": 1752, - "ne3d": 3251, - "quality_histogram": "[3, 18, 30, 51, 30, 49, 50, 70, 104, 143, 167, 291, 330, 404, 438, 402, 312, 195, 130, 34]", - "total_badness": 5918.1573233 + "ne2d": 1706, + "ne3d": 3203, + "quality_histogram": "[6, 13, 36, 37, 49, 52, 75, 69, 129, 151, 215, 276, 365, 365, 390, 373, 301, 185, 94, 22]", + "total_badness": 6020.5769171 }, { "ne1d": 956, - "ne2d": 2886, - "ne3d": 8911, - "quality_histogram": "[3, 13, 24, 44, 52, 48, 50, 62, 86, 136, 201, 367, 548, 881, 1299, 1464, 1419, 1260, 761, 193]", - "total_badness": 12992.010429 + "ne2d": 2816, + "ne3d": 8620, + "quality_histogram": "[3, 12, 31, 46, 42, 59, 51, 64, 79, 151, 222, 364, 608, 987, 1214, 1341, 1385, 1113, 673, 175]", + "total_badness": 12750.84491 }, { "ne1d": 1554, - "ne2d": 6466, - "ne3d": 32098, - "quality_histogram": "[5, 6, 8, 6, 24, 52, 56, 72, 117, 168, 382, 731, 1379, 2486, 3961, 5463, 6259, 5888, 3926, 1109]", - "total_badness": 41680.677329 + "ne2d": 6388, + "ne3d": 31408, + "quality_histogram": "[4, 7, 11, 6, 23, 53, 61, 72, 104, 183, 368, 718, 1410, 2572, 3955, 5242, 6125, 5690, 3772, 1032]", + "total_badness": 40921.343431 }, { "ne1d": 2992, - "ne2d": 23400, - "ne3d": 315912, - "quality_histogram": "[9, 29, 30, 35, 91, 431, 1451, 3248, 5258, 8159, 12957, 19461, 28353, 38474, 46243, 48391, 44070, 33858, 19987, 5377]", - "total_badness": 451886.52052 + "ne2d": 23312, + "ne3d": 279657, + "quality_histogram": "[4, 11, 13, 15, 12, 35, 54, 98, 217, 519, 1182, 2752, 6855, 15439, 29353, 45547, 58301, 60932, 44659, 13659]", + "total_badness": 345287.15441 } ], "revolution.geo": [ @@ -1076,10 +1069,10 @@ }, { "ne1d": 530, - "ne2d": 2688, - "ne3d": 7916, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 15, 31, 62, 150, 285, 487, 728, 1064, 1322, 1395, 1296, 847, 228]", - "total_badness": 10396.315052 + "ne2d": 2690, + "ne3d": 7903, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 12, 30, 98, 166, 287, 493, 782, 1078, 1284, 1426, 1211, 797, 235]", + "total_badness": 10438.866877 }, { "ne1d": 668, diff --git a/tests/pytest/test_tutorials.py b/tests/pytest/test_tutorials.py index bb3be546..a0ba44a5 100644 --- a/tests/pytest/test_tutorials.py +++ b/tests/pytest/test_tutorials.py @@ -58,6 +58,8 @@ def getMeshingparameters(filename): return standard[:3] # this gets too big for finer meshsizes if filename == "screw.step": return standard[3:] # coarser meshes don't work here + if filename == "part1.stl": + return standard[0:1] + standard[2:] # very coarse does not work return standard _geofiles = [f for f in getFiles(".geo")] + [f for f in getFiles(".stl")] From fe78d9d7b48b4eee4c725716930fbec04a391b65 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Tue, 8 Oct 2019 20:39:29 +0200 Subject: [PATCH 043/120] Use AsAtomic from ngcore --- libsrc/general/parthreads.hpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/libsrc/general/parthreads.hpp b/libsrc/general/parthreads.hpp index 05521df1..2e242484 100644 --- a/libsrc/general/parthreads.hpp +++ b/libsrc/general/parthreads.hpp @@ -96,12 +96,6 @@ void ParallelFor( int first, int next, const TFunc & f ) - template - inline atomic & AsAtomic (T & d) - { - return reinterpret_cast&> (d); - } - typedef void (*TaskManager)(std::function); typedef void (*Tracer)(string, bool); // false .. start, true .. stop From 95df0ea73e083857d6bbec4df043e03d7034a05e Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Wed, 9 Oct 2019 09:29:53 +0200 Subject: [PATCH 044/120] Explicit capture in lambda (due to MSVC compile problems) --- libsrc/meshing/improve2.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index 462fee8c..82215d2d 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -280,7 +280,7 @@ namespace netgen } }); - ParallelForRange( Range(seia), [&] (auto myrange) + ParallelForRange( Range(seia), [&pdef, &neighbors, &mesh, &seia, &elements_on_node] (auto myrange) { for (auto i : myrange) { From 6e5d806d921449bf94c92e0d9bf9e8eb05fc9fb0 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Wed, 9 Oct 2019 09:57:37 +0200 Subject: [PATCH 045/120] Use ParallelFor instead of ParallelForRange better readability and no performance difference (if using NETGEN_LAMBDA_INLINE) --- libsrc/meshing/improve2.cpp | 176 ++++++++++++++++-------------------- 1 file changed, 76 insertions(+), 100 deletions(-) diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index 82215d2d..7146476b 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -7,11 +7,6 @@ namespace netgen { - - using ngcore::ParallelForRange; - - - class trionedge { public: @@ -191,15 +186,12 @@ namespace netgen if(faceindex==0) { seia.SetSize(mesh.GetNSE()); - ParallelForRange( Range(seia), [&] (auto myrange) + ParallelFor( Range(seia), [&] (auto i) NETGEN_LAMBDA_INLINE { - for (auto i : myrange) - { - SurfaceElementIndex sei(i); - seia[i] = sei; - if (mesh[sei].GetNP() != 3) - mixed = true; - } + SurfaceElementIndex sei(i); + seia[i] = sei; + if (mesh[sei].GetNP() != 3) + mixed = true; }); } else @@ -225,103 +217,90 @@ namespace netgen if(faceindex == 0) { - ParallelForRange( Range(pangle), [&] (auto myrange) + ParallelFor( Range(pangle), [&] (auto i) NETGEN_LAMBDA_INLINE { - for (auto i : myrange) - pangle[i] = 0.0; + pangle[i] = 0.0; }); } else { - ParallelForRange( Range(seia), [&] (auto myrange) + ParallelFor( Range(seia), [&] (auto i) NETGEN_LAMBDA_INLINE { - for (auto i : myrange) - { - const Element2d & sel = mesh[seia[i]]; - for (int j = 0; j < 3; j++) - pangle[sel[j]] = 0.0; - } + const Element2d & sel = mesh[seia[i]]; + for (int j = 0; j < 3; j++) + pangle[sel[j]] = 0.0; }); } - ParallelForRange( Range(seia), [&] (auto myrange) + ParallelFor( Range(seia), [&] (auto i) NETGEN_LAMBDA_INLINE { - for (auto i : myrange) + const Element2d & sel = mesh[seia[i]]; + for (int j = 0; j < 3; j++) { - const Element2d & sel = mesh[seia[i]]; - for (int j = 0; j < 3; j++) + POINTTYPE typ = mesh[sel[j]].Type(); + if (typ == FIXEDPOINT || typ == EDGEPOINT) { - POINTTYPE typ = mesh[sel[j]].Type(); - if (typ == FIXEDPOINT || typ == EDGEPOINT) - { - AtomicAdd(pangle[sel[j]], - Angle (mesh[sel[(j+1)%3]] - mesh[sel[j]], - mesh[sel[(j+2)%3]] - mesh[sel[j]])); - } - } - } - }); - - ParallelForRange( Range(seia), [&] (auto myrange) - { - for (auto i : myrange) - { - const Element2d & sel = mesh[seia[i]]; - for (int j = 0; j < 3; j++) - { - PointIndex pi = sel[j]; - if (mesh[pi].Type() == INNERPOINT || mesh[pi].Type() == SURFACEPOINT) - pdef[pi] = -6; - else - for (int j = 0; j < 8; j++) - if (pangle[pi] >= minangle[j]) - pdef[pi] = -1-j; + AtomicAdd(pangle[sel[j]], + Angle (mesh[sel[(j+1)%3]] - mesh[sel[j]], + mesh[sel[(j+2)%3]] - mesh[sel[j]])); } } }); - ParallelForRange( Range(seia), [&pdef, &neighbors, &mesh, &seia, &elements_on_node] (auto myrange) + ParallelFor( Range(seia), [&] (auto i) NETGEN_LAMBDA_INLINE { - for (auto i : myrange) + const Element2d & sel = mesh[seia[i]]; + for (int j = 0; j < 3; j++) { - auto sei = seia[i]; - for (PointIndex pi : mesh[sei].template PNums<3>()) - AsAtomic(pdef[pi])++; - for (int j = 0; j < 3; j++) - { - neighbors[sei].SetNr (j, -1); - neighbors[sei].SetOrientation (j, 0); - } + PointIndex pi = sel[j]; + if (mesh[pi].Type() == INNERPOINT || mesh[pi].Type() == SURFACEPOINT) + pdef[pi] = -6; + else + for (int j = 0; j < 8; j++) + if (pangle[pi] >= minangle[j]) + pdef[pi] = -1-j; + } + }); - const auto sel = mesh[sei]; - for (int j = 0; j < 3; j++) - { - PointIndex pi1 = sel.PNumMod(j+2); - PointIndex pi2 = sel.PNumMod(j+3); + ParallelFor( Range(seia), [&pdef, &neighbors, &mesh, &seia, &elements_on_node] (auto i) NETGEN_LAMBDA_INLINE + { + auto sei = seia[i]; + for (PointIndex pi : mesh[sei].template PNums<3>()) + AsAtomic(pdef[pi])++; + for (int j = 0; j < 3; j++) + { + neighbors[sei].SetNr (j, -1); + neighbors[sei].SetOrientation (j, 0); + } - for (auto sei_other : elements_on_node[pi1]) + const auto sel = mesh[sei]; + for (int j = 0; j < 3; j++) + { + PointIndex pi1 = sel.PNumMod(j+2); + PointIndex pi2 = sel.PNumMod(j+3); + + for (auto sei_other : elements_on_node[pi1]) + { + if(sei_other==sei) continue; + const auto & other = mesh[sei_other]; + int pi1_other = -1; + int pi2_other = -1; + bool common_edge = false; + for (int k = 0; k < 3; k++) { - if(sei_other==sei) continue; - const auto & other = mesh[sei_other]; - int pi1_other = -1; - int pi2_other = -1; - bool common_edge = false; - for (int k = 0; k < 3; k++) + if(other[k] == pi1) + pi1_other = k; + if(other[k] == pi2) { - if(other[k] == pi1) - pi1_other = k; - if(other[k] == pi2) - { - pi2_other = k; - common_edge = true; - } + pi2_other = k; + common_edge = true; } + } - if(common_edge) - { - neighbors[sei].SetNr (j, sei_other); - neighbors[sei].SetOrientation (j, 3-pi1_other-pi2_other); - } + if(common_edge) + { + neighbors[sei].SetNr (j, sei_other); + neighbors[sei].SetOrientation (j, 3-pi1_other-pi2_other); } } } @@ -343,25 +322,22 @@ namespace netgen while (!done && t >= 2) { cnt = 0; - ParallelForRange( Range(seia), [&] (auto myrange) + ParallelFor( Range(seia), [&] (auto i) NETGEN_LAMBDA_INLINE { - for (auto i : myrange) - { - SurfaceElementIndex t1 = seia[i]; + SurfaceElementIndex t1 = seia[i]; - if (mesh[t1].IsDeleted()) - continue; + if (mesh[t1].IsDeleted()) + return; - if (mesh[t1].GetIndex() != faceindex) - continue; + if (mesh[t1].GetIndex() != faceindex) + return; - if (multithread.terminate) - throw NgException ("Meshing stopped"); + if (multithread.terminate) + throw NgException ("Meshing stopped"); - for (int o1 = 0; o1 < 3; o1++) - if(EdgeSwapping(mesh, usemetric, neighbors, swapped, t1, o1, t, pdef, true)) - improvement_candidates[cnt++]= std::make_pair(t1,o1); - } + for (int o1 = 0; o1 < 3; o1++) + if(EdgeSwapping(mesh, usemetric, neighbors, swapped, t1, o1, t, pdef, true)) + improvement_candidates[cnt++]= std::make_pair(t1,o1); }); auto elements_with_improvement = improvement_candidates.Range(cnt.load()); From e6953dc4cba447bdee7bdc6decefd987f604578c Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Wed, 9 Oct 2019 10:32:41 +0200 Subject: [PATCH 046/120] Remove unnecessary call to mesh.CalcSurfacesOfNode() --- libsrc/meshing/improve2.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index 7146476b..71f652a9 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -349,7 +349,6 @@ namespace netgen } mesh.SetNextTimeStamp(); - mesh.CalcSurfacesOfNode(); } From ca25d6838bfd249854737f7891a06fa5a3f81134 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joachim=20Sch=C3=B6berl?= Date: Thu, 10 Oct 2019 07:38:00 +0200 Subject: [PATCH 047/120] use NextUV --- libsrc/occ/occmeshsurf.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libsrc/occ/occmeshsurf.cpp b/libsrc/occ/occmeshsurf.cpp index a2693700..ed6daab9 100644 --- a/libsrc/occ/occmeshsurf.cpp +++ b/libsrc/occ/occmeshsurf.cpp @@ -371,6 +371,7 @@ namespace netgen void OCCSurface :: Project (Point<3> & ap, PointGeomInfo & gi) { static Timer t("OccSurface::Project"); RegionTimer reg(t); + static Timer t2("OccSurface::Project actural"); // try Newton's method ... @@ -475,7 +476,10 @@ namespace netgen Handle( ShapeAnalysis_Surface ) su = new ShapeAnalysis_Surface( occface ); auto toltool = BRep_Tool::Tolerance( topods_face ); - gp_Pnt2d suval = su->ValueOfUV ( pnt, toltool); + // gp_Pnt2d suval = su->ValueOfUV ( pnt, toltool); + t2.Start(); + gp_Pnt2d suval = su->NextValueOfUV (gp_Pnt2d(u,v), pnt, toltool); + t2.Stop(); suval.Coord( u, v); pnt = occface->Value( u, v ); From b65d63cf117950b408f67bd73f885b763694dd2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joachim=20Sch=C3=B6berl?= Date: Thu, 10 Oct 2019 07:38:10 +0200 Subject: [PATCH 048/120] static array --- libsrc/visualization/vsmesh.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libsrc/visualization/vsmesh.cpp b/libsrc/visualization/vsmesh.cpp index 2e0ff9a7..d7b1059b 100644 --- a/libsrc/visualization/vsmesh.cpp +++ b/libsrc/visualization/vsmesh.cpp @@ -1029,8 +1029,11 @@ namespace netgen else glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, matcol); + static Point<3> xa[129]; + static Vec<3> na[129]; - + + for (int hi = 0; hi < seia.Size(); hi++) { SurfaceElementIndex sei = seia[hi]; @@ -1058,8 +1061,6 @@ namespace netgen if (curv.IsHighOrder()) // && curv.IsSurfaceElementCurved(sei)) { if (hoplotn > 128) hoplotn = 128; - Point<3> xa[129]; - Vec<3> na[129]; for (int i = 0; i < hoplotn; i++) { From 9f0edf17413d7f954d16288db4de15da2dfc1e59 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Fri, 4 Oct 2019 17:05:40 +0200 Subject: [PATCH 049/120] Use new timers --- libsrc/core/taskmanager.hpp | 2 ++ libsrc/meshing/improve2.cpp | 22 +++++++++++----------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/libsrc/core/taskmanager.hpp b/libsrc/core/taskmanager.hpp index e5a7313b..6710ee11 100644 --- a/libsrc/core/taskmanager.hpp +++ b/libsrc/core/taskmanager.hpp @@ -15,6 +15,7 @@ #include "array.hpp" #include "paje_trace.hpp" +#include "profiler.hpp" namespace ngcore { @@ -1059,6 +1060,7 @@ public: template int ComputeColoring( FlatArray colors, size_t ndofs, Tmask const & getDofs) { + static Timer timer("ComputeColoring - "+Demangle(typeid(Tmask).name())); RegionTimer rt(timer); static_assert(sizeof(unsigned int)==4, "Adapt type of mask array"); auto n = colors.Size(); diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index 71f652a9..759fc09a 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -177,8 +177,8 @@ namespace netgen else PrintMessage (3, "Edgeswapping, topological"); - static int timerstart = NgProfiler::CreateTimer ("EdgeSwapping 2D start"); - NgProfiler::StartTimer (timerstart); + static Timer timerstart("EdgeSwapping 2D start"); + timerstart.Start(); Array seia; bool mixed = false; @@ -310,7 +310,7 @@ namespace netgen for (SurfaceElementIndex sei : seia) swapped[sei] = false; - NgProfiler::StopTimer (timerstart); + timerstart.Stop(); @@ -377,15 +377,15 @@ namespace netgen } - static int timer = NgProfiler::CreateTimer ("Combineimprove 2D"); - NgProfiler::RegionTimer reg (timer); + static Timer timer ("Combineimprove 2D"); + RegionTimer reg (timer); - static int timerstart = NgProfiler::CreateTimer ("Combineimprove 2D start"); - NgProfiler::StartTimer (timerstart); + static Timer timerstart ("Combineimprove 2D start"); + timerstart.Start(); - static int timerstart1 = NgProfiler::CreateTimer ("Combineimprove 2D start1"); - NgProfiler::StartTimer (timerstart1); + static Timer timerstart1 ("Combineimprove 2D start1"); + timerstart1.Start(); Array seia; @@ -416,7 +416,7 @@ namespace netgen Array fixed(np); fixed = false; - NgProfiler::StopTimer (timerstart1); + timerstart1.Stop(); /* for (SegmentIndex si = 0; si < mesh.GetNSeg(); si++) @@ -468,7 +468,7 @@ namespace netgen } } - NgProfiler::StopTimer (timerstart); + timerstart.Stop(); for (int i = 0; i < seia.Size(); i++) { From 268f2466f0933d5afd723d922dd28a088402cc9a Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Fri, 4 Oct 2019 17:16:04 +0200 Subject: [PATCH 050/120] Parallel 2d MeshImprove --- libsrc/meshing/smoothing2.cpp | 329 +++++----- tests/pytest/results.json | 1118 ++++++++++++++++----------------- 2 files changed, 706 insertions(+), 741 deletions(-) diff --git a/libsrc/meshing/smoothing2.cpp b/libsrc/meshing/smoothing2.cpp index f28cf10c..2aa1308c 100644 --- a/libsrc/meshing/smoothing2.cpp +++ b/libsrc/meshing/smoothing2.cpp @@ -709,119 +709,95 @@ namespace netgen void MeshOptimize2d :: ImproveMesh (Mesh & mesh, const MeshingParameters & mp) { - if (!faceindex) - { - PrintMessage (3, "Smoothing"); + static Timer timer("MeshSmoothing 2D"); RegionTimer reg (timer); - for (faceindex = 1; faceindex <= mesh.GetNFD(); faceindex++) - { - ImproveMesh (mesh, mp); - if (multithread.terminate) - throw NgException ("Meshing stopped"); - } - faceindex = 0; - return; - } - - static Timer timer("MeshSmoothing 2D"); - // static int timer1 = NgProfiler::CreateTimer ("MeshSmoothing 2D start"); - // static int timer2 = NgProfiler::CreateTimer ("MeshSmoothing 2D - BFGS"); - - RegionTimer reg (timer); - // NgProfiler::StartTimer (timer1); + PrintMessage (3, "Smoothing"); CheckMeshApproximation (mesh); - Opti2dLocalData ld; - - - Array seia; - mesh.GetSurfaceElementsOfFace (faceindex, seia); - bool mixed = 0; - for (auto sei : seia) - if (mesh[sei].GetNP() != 3) - { - mixed = true; - break; - } - - Vector x(2); - + int ncolors; + Array colors; + bool mixed = false; + auto elementsonpoint = mesh.CreatePoint2SurfaceElementTable( faceindex ); NgArray savepoints(mesh.GetNP()); - ld.uselocalh = mp.uselocalh; + Table color_table; + if(faceindex) + { + Array seia; + mesh.GetSurfaceElementsOfFace (faceindex, seia); + for (auto sei : seia) + if (mesh[sei].GetNP() != 3) + { + mixed = true; + break; + } - NgArray compress(mesh.GetNP()); - NgArray icompress; - for (int i = 0; i < seia.Size(); i++) - { - const Element2d & el = mesh[seia[i]]; - for (int j = 0; j < el.GetNP(); j++) - compress[el[j]] = -1; - } - for (int i = 0; i < seia.Size(); i++) - { - const Element2d & el = mesh[seia[i]]; - for (int j = 0; j < el.GetNP(); j++) - if (compress[el[j]] == -1) - { - compress[el[j]] = icompress.Size(); - icompress.Append(el[j]); - } - } - NgArray cnta(icompress.Size()); - cnta = 0; - for (int i = 0; i < seia.Size(); i++) - { - const Element2d & el = mesh[seia[i]]; - for (int j = 0; j < el.GetNP(); j++) - cnta[compress[el[j]]]++; - } - TABLE elementsonpoint(cnta); - for (int i = 0; i < seia.Size(); i++) - { - const Element2d & el = mesh[seia[i]]; - for (int j = 0; j < el.GetNP(); j++) - elementsonpoint.Add (compress[el[j]], seia[i]); - } + Array compress(mesh.GetNP()); + NgArray icompress; + for (int i = 0; i < seia.Size(); i++) + { + const Element2d & el = mesh[seia[i]]; + for (int j = 0; j < el.GetNP(); j++) + compress[el[j]] = -1; + } + for (int i = 0; i < seia.Size(); i++) + { + const Element2d & el = mesh[seia[i]]; + for (int j = 0; j < el.GetNP(); j++) + if (compress[el[j]] == -1) + { + compress[el[j]] = icompress.Size(); + icompress.Append(el[j]); + } + } + const auto & getDofs = [&] (int i) + { + return elementsonpoint[icompress[i]]; + }; + + colors.SetSize(icompress.Size()); + + ncolors = ngcore::ComputeColoring( colors, mesh.GetNSE(), getDofs ); + + TableCreator creator(ncolors); + for ( ; !creator.Done(); creator++) + ParallelForRange( Range(colors), [&](auto myrange) + { + for(auto i : myrange) + creator.Add(colors[i], icompress[i]); + }); + + color_table = creator.MoveTable(); + } + else + { + for (auto & se : mesh.SurfaceElements()) + if (se.GetNP() != 3) + { + mixed = true; + break; + } + const auto & getDofs = [&] (int i) + { + return elementsonpoint[i+PointIndex::BASE]; + }; + + colors.SetSize(mesh.GetNP()); + ncolors = ngcore::ComputeColoring( colors, mesh.GetNSE(), getDofs ); + + TableCreator creator(ncolors); + for ( ; !creator.Done(); creator++) + ParallelForRange( Range(colors), [&](auto myrange) + { + for(auto i : myrange) + creator.Add(colors[i], PointIndex(i+PointIndex::BASE)); + }); + + color_table = creator.MoveTable(); + } - /* - NgArray nelementsonpoint(mesh.GetNP()); - nelementsonpoint = 0; - for (int i = 0; i < seia.Size(); i++) - { - const Element2d & el = mesh[seia[i]]; - for (int j = 0; j < el.GetNP(); j++) - nelementsonpoint[el[j]]++; - } - - TABLE elementsonpoint(nelementsonpoint); - - for (int i = 0; i < seia.Size(); i++) - { - const Element2d & el = mesh[seia[i]]; - for (int j = 0; j < el.GetNP(); j++) - elementsonpoint.Add (el[j], seia[i]); - } - */ - - - - ld.loch = mp.maxh; - ld.locmetricweight = metricweight; - ld.meshthis = this; - - - - Opti2SurfaceMinFunction surfminf(mesh, ld); - Opti2EdgeMinFunction edgeminf(mesh, ld); - Opti2SurfaceMinFunctionJacobian surfminfj(mesh, ld); - - OptiParameters par; - par.maxit_linsearch = 8; - par.maxit_bfgs = 5; - /* int i, j, k; Vector xedge(1); @@ -891,27 +867,6 @@ namespace netgen */ - bool printeddot = 0; - char plotchar = '.'; - int modplot = 1; - if (mesh.GetNP() > 1000) - { - plotchar = '+'; - modplot = 100; - } - if (mesh.GetNP() > 10000) - { - plotchar = 'o'; - modplot = 1000; - } - if (mesh.GetNP() > 100000) - { - plotchar = 'O'; - modplot = 10000; - } - int cnt = 0; - - // NgProfiler::StopTimer (timer1); /* @@ -921,28 +876,39 @@ namespace netgen static Timer tloop("MeshSmooting 2D - loop"); tloop.Start(); - for (int hi = 0; hi < icompress.Size(); hi++) - { - PointIndex pi = icompress[hi]; + for (auto icolor : Range(color_table)) + { + if (multithread.terminate) + break; + ParallelForRange( Range(color_table[icolor].Size()), [&](auto myrange) + { + Opti2dLocalData ld; + ld.uselocalh = mp.uselocalh; + ld.loch = mp.maxh; + ld.locmetricweight = metricweight; + ld.meshthis = this; + + Opti2SurfaceMinFunction surfminf(mesh, ld); + Opti2SurfaceMinFunctionJacobian surfminfj(mesh, ld); + + MinFunction & minfunc = mixed ? static_cast(surfminfj) : surfminf; + + OptiParameters par; + par.maxit_linsearch = 8; + par.maxit_bfgs = 5; + for (auto i : myrange) + { + PointIndex pi = color_table[icolor][i]; if (mesh[pi].Type() == SURFACEPOINT) { if (multithread.terminate) - throw NgException ("Meshing stopped"); + return; - cnt++; - if (cnt % modplot == 0 && writestatus) - { - printeddot = 1; - PrintDot (plotchar); - } - - // if (elementsonpoint[pi].Size() == 0) continue; - if (elementsonpoint[hi].Size() == 0) continue; + if (elementsonpoint[pi].Size() == 0) continue; ld.sp1 = mesh[pi]; - // Element2d & hel = mesh[elementsonpoint[pi][0]]; - Element2d & hel = mesh[elementsonpoint[hi][0]]; + Element2d & hel = mesh[elementsonpoint[pi][0]]; int hpi = 0; for (int j = 1; j <= hel.GetNP(); j++) @@ -960,9 +926,9 @@ namespace netgen ld.loc_pnts2.SetSize (0); ld.loc_pnts3.SetSize (0); - for (int j = 0; j < elementsonpoint[hi].Size(); j++) + for (int j = 0; j < elementsonpoint[pi].Size(); j++) { - SurfaceElementIndex sei = elementsonpoint[hi][j]; + SurfaceElementIndex sei = elementsonpoint[pi][j]; const Element2d & bel = mesh[sei]; ld.surfi = mesh.GetFaceDescriptor(bel.GetIndex()).SurfNr(); @@ -989,38 +955,35 @@ namespace netgen ld.t1 = ld.normal.GetNormal (); ld.t2 = Cross (ld.normal, ld.t1); - // save points, and project to tangential plane - for (int j = 0; j < ld.locelements.Size(); j++) - { - const Element2d & el = mesh[ld.locelements[j]]; - for (int k = 0; k < el.GetNP(); k++) - savepoints[el[k]] = mesh[el[k]]; - } + if(mixed) + { + // save points, and project to tangential plane (only for optimization with Opti2SurfaceMinFunctionJacobian in mixed element meshes) + for (int j = 0; j < ld.locelements.Size(); j++) + { + const Element2d & el = mesh[ld.locelements[j]]; + for (int k = 0; k < el.GetNP(); k++) + savepoints[el[k]] = mesh[el[k]]; + } - for (int j = 0; j < ld.locelements.Size(); j++) - { - const Element2d & el = mesh[ld.locelements[j]]; - for (int k = 0; k < el.GetNP(); k++) - { - PointIndex hhpi = el[k]; - double lam = ld.normal * (mesh[hhpi] - ld.sp1); - mesh[hhpi] -= lam * ld.normal; - } - } + for (int j = 0; j < ld.locelements.Size(); j++) + { + const Element2d & el = mesh[ld.locelements[j]]; + for (int k = 0; k < el.GetNP(); k++) + { + PointIndex hhpi = el[k]; + double lam = ld.normal * (mesh[hhpi] - ld.sp1); + mesh[hhpi] -= lam * ld.normal; + } + } + } + Vector x(2); x = 0; par.typx = 0.3*ld.lochs[0]; // NgProfiler::StartTimer (timer2); - if (mixed) - { - BFGS (x, surfminfj, par, 1e-6); - } - else - { - BFGS (x, surfminf, par, 1e-6); - } + BFGS (x, minfunc, par, 1e-6); // NgProfiler::StopTimer (timer2); @@ -1029,16 +992,19 @@ namespace netgen double fact = 1; int moveisok = 0; - // restore other points - for (int j = 0; j < ld.locelements.Size(); j++) - { - const Element2d & el = mesh[ld.locelements[j]]; - for (int k = 0; k < el.GetNP(); k++) - { - PointIndex hhpi = el[k]; - if (hhpi != pi) mesh[hhpi] = savepoints[hhpi]; - } - } + if(mixed) + { + // restore other points + for (int j = 0; j < ld.locelements.Size(); j++) + { + const Element2d & el = mesh[ld.locelements[j]]; + for (int k = 0; k < el.GetNP(); k++) + { + PointIndex hhpi = el[k]; + if (hhpi != pi) mesh[hhpi] = savepoints[hhpi]; + } + } + } //optimizer loop (if whole distance is not possible, move only a bit!!!!) @@ -1077,13 +1043,12 @@ namespace netgen } } - } - } + } + } + }, mixed ? 1 : ngcore::TasksPerThread(4)); // mixed element smoothing not parallel yet + } tloop.Stop(); - if (printeddot) - PrintDot ('\n'); - CheckMeshApproximation (mesh); mesh.SetNextTimeStamp(); } diff --git a/tests/pytest/results.json b/tests/pytest/results.json index 3ff60ef1..840d9c09 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -5,7 +5,7 @@ "ne2d": 54, "ne3d": 40, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 16, 1, 5, 2, 0, 0, 0]", - "total_badness": 61.085020201 + "total_badness": 61.085020204 }, { "ne1d": 59, @@ -26,21 +26,21 @@ "ne2d": 54, "ne3d": 40, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 16, 1, 5, 2, 0, 0, 0]", - "total_badness": 61.085020201 + "total_badness": 61.085020204 }, { "ne1d": 118, "ne2d": 140, "ne3d": 165, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 9, 13, 23, 20, 31, 24, 22, 14, 6, 1]", - "total_badness": 233.73391407 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 9, 13, 23, 20, 31, 25, 21, 14, 6, 1]", + "total_badness": 233.73328932 }, { "ne1d": 181, "ne2d": 323, - "ne3d": 513, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 15, 34, 56, 67, 96, 86, 86, 46, 18]", - "total_badness": 667.61850419 + "ne3d": 506, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 13, 38, 53, 70, 87, 82, 85, 53, 16]", + "total_badness": 658.05677789 } ], "boxcyl.geo": [ @@ -48,131 +48,131 @@ "ne1d": 190, "ne2d": 468, "ne3d": 846, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 30, 91, 78, 91, 92, 93, 102, 104, 80, 59, 22]", - "total_badness": 1226.0578147 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 31, 93, 78, 103, 80, 92, 103, 102, 84, 56, 21]", + "total_badness": 1229.0231928 }, { "ne1d": 94, "ne2d": 114, "ne3d": 158, "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 7, 10, 16, 5, 8, 15, 13, 17, 13, 9, 25, 7, 11]", - "total_badness": 247.68310336 + "total_badness": 247.68310347 }, { "ne1d": 136, "ne2d": 222, - "ne3d": 381, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 4, 3, 7, 15, 16, 27, 38, 51, 68, 67, 49, 17, 16, 1]", - "total_badness": 567.29889026 + "ne3d": 386, + "quality_histogram": "[0, 0, 0, 1, 2, 3, 2, 7, 8, 15, 16, 36, 36, 59, 53, 55, 58, 19, 15, 1]", + "total_badness": 590.51625062 }, { "ne1d": 190, "ne2d": 468, "ne3d": 833, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 30, 87, 78, 78, 90, 88, 104, 103, 87, 64, 22]", - "total_badness": 1198.1799119 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 32, 89, 78, 83, 86, 83, 106, 103, 89, 62, 21]", + "total_badness": 1200.9010008 }, { "ne1d": 284, - "ne2d": 936, - "ne3d": 3833, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 17, 53, 160, 270, 442, 625, 795, 755, 544, 165]", - "total_badness": 4795.1972581 + "ne2d": 938, + "ne3d": 3742, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 25, 55, 131, 247, 484, 640, 754, 710, 529, 161]", + "total_badness": 4685.7832014 }, { "ne1d": 456, "ne2d": 2496, - "ne3d": 19027, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 6, 16, 41, 134, 386, 861, 1759, 3032, 4100, 4323, 3238, 1129]", - "total_badness": 23153.342852 + "ne3d": 18676, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 14, 43, 121, 339, 829, 1665, 2855, 4035, 4403, 3226, 1144]", + "total_badness": 22663.154052 } ], "circle_on_cube.geo": [ { "ne1d": 94, - "ne2d": 170, - "ne3d": 634, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 21, 37, 42, 77, 93, 99, 106, 106, 40, 9]", - "total_badness": 852.35637426 + "ne2d": 172, + "ne3d": 611, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 5, 8, 15, 20, 67, 69, 87, 106, 85, 91, 47, 7]", + "total_badness": 833.76226351 }, { "ne1d": 40, "ne2d": 38, "ne3d": 46, "quality_histogram": "[0, 0, 0, 0, 0, 2, 2, 4, 8, 8, 6, 7, 5, 1, 2, 1, 0, 0, 0, 0]", - "total_badness": 97.326231112 + "total_badness": 97.323158335 }, { "ne1d": 62, "ne2d": 94, "ne3d": 185, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 7, 12, 31, 26, 37, 27, 19, 14, 8, 0]", - "total_badness": 264.64378082 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 7, 12, 31, 26, 37, 27, 19, 13, 9, 0]", + "total_badness": 264.61885227 }, { "ne1d": 94, - "ne2d": 170, - "ne3d": 609, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 9, 28, 31, 67, 80, 97, 121, 106, 53, 12]", - "total_badness": 797.71713532 + "ne2d": 172, + "ne3d": 594, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 9, 23, 46, 62, 85, 95, 102, 110, 47, 11]", + "total_badness": 781.40870801 }, { "ne1d": 138, - "ne2d": 382, - "ne3d": 2047, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 12, 24, 77, 153, 249, 384, 402, 417, 254, 72]", - "total_badness": 2570.7494356 + "ne2d": 384, + "ne3d": 2055, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 13, 28, 89, 146, 234, 357, 406, 415, 285, 75]", + "total_badness": 2580.6652097 }, { "ne1d": 224, "ne2d": 942, - "ne3d": 12152, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 15, 83, 237, 599, 1170, 1934, 2615, 2796, 2123, 572]", - "total_badness": 14806.696612 + "ne3d": 12027, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 15, 81, 205, 552, 1148, 1969, 2490, 2768, 2175, 617]", + "total_badness": 14618.673513 } ], "cone.geo": [ { "ne1d": 64, "ne2d": 722, - "ne3d": 1234, - "quality_histogram": "[0, 0, 0, 0, 0, 3, 1, 15, 38, 55, 88, 123, 143, 139, 184, 147, 119, 105, 57, 17]", - "total_badness": 1861.257399 + "ne3d": 1263, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 4, 14, 48, 62, 95, 129, 141, 162, 163, 145, 107, 112, 61, 17]", + "total_badness": 1927.4650748 }, { "ne1d": 32, "ne2d": 220, - "ne3d": 753, - "quality_histogram": "[0, 1, 28, 40, 63, 54, 61, 53, 61, 59, 67, 47, 38, 52, 39, 23, 27, 21, 16, 3]", - "total_badness": 2038.817175 + "ne3d": 700, + "quality_histogram": "[0, 0, 13, 49, 51, 51, 51, 46, 63, 42, 38, 49, 53, 50, 42, 33, 27, 21, 18, 3]", + "total_badness": 1807.5903418 }, { "ne1d": 48, "ne2d": 428, - "ne3d": 755, - "quality_histogram": "[1, 33, 42, 29, 32, 26, 29, 27, 64, 81, 73, 80, 67, 48, 55, 18, 23, 16, 11, 0]", - "total_badness": 2283.6586444 + "ne3d": 930, + "quality_histogram": "[6, 33, 75, 70, 53, 52, 44, 63, 73, 77, 65, 88, 62, 37, 46, 30, 20, 21, 15, 0]", + "total_badness": 3263.5820874 }, { "ne1d": 64, "ne2d": 722, - "ne3d": 1211, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 8, 20, 59, 82, 118, 147, 128, 167, 157, 135, 108, 65, 15]", - "total_badness": 1789.8591485 + "ne3d": 1244, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 10, 25, 61, 77, 117, 140, 158, 172, 138, 144, 118, 66, 15]", + "total_badness": 1843.7405821 }, { "ne1d": 96, "ne2d": 1660, - "ne3d": 4464, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 11, 30, 74, 185, 273, 414, 599, 748, 785, 747, 434, 160]", - "total_badness": 5840.7208133 + "ne3d": 4395, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 14, 39, 86, 147, 270, 427, 584, 724, 725, 723, 492, 162]", + "total_badness": 5745.9242938 }, { "ne1d": 160, "ne2d": 4748, - "ne3d": 27166, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 14, 38, 87, 310, 736, 1515, 2971, 4344, 5642, 5811, 4361, 1333]", - "total_badness": 33504.993018 + "ne3d": 27365, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 8, 35, 121, 352, 715, 1535, 2882, 4456, 5703, 5878, 4303, 1377]", + "total_badness": 33766.111622 } ], "cube.geo": [ @@ -215,52 +215,52 @@ "ne1d": 72, "ne2d": 116, "ne3d": 167, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 2, 5, 5, 16, 8, 18, 30, 31, 29, 12, 6]", - "total_badness": 224.72495191 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 2, 5, 5, 16, 8, 18, 30, 31, 29, 11, 7]", + "total_badness": 224.7322738 } ], "cubeandring.geo": [ { "ne1d": 262, - "ne2d": 724, - "ne3d": 2220, - "quality_histogram": "[3, 13, 18, 47, 87, 95, 119, 121, 98, 68, 86, 122, 167, 187, 216, 243, 225, 169, 111, 25]", - "total_badness": 4594.1424775 + "ne2d": 726, + "ne3d": 2225, + "quality_histogram": "[0, 10, 19, 36, 98, 105, 126, 110, 98, 59, 71, 87, 153, 186, 272, 275, 223, 160, 109, 28]", + "total_badness": 4466.5881396 }, { "ne1d": 134, - "ne2d": 162, - "ne3d": 247, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 0, 0, 4, 2, 11, 19, 35, 48, 38, 39, 24, 14, 9, 2]", - "total_badness": 361.08642754 + "ne2d": 164, + "ne3d": 250, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 4, 4, 6, 13, 24, 28, 43, 40, 34, 25, 19, 7, 2]", + "total_badness": 372.39445714 }, { "ne1d": 190, "ne2d": 300, - "ne3d": 630, - "quality_histogram": "[0, 0, 0, 1, 2, 0, 0, 3, 10, 16, 51, 70, 62, 108, 101, 78, 62, 43, 19, 4]", - "total_badness": 945.8223883 + "ne3d": 646, + "quality_histogram": "[0, 0, 0, 1, 2, 0, 0, 2, 10, 27, 58, 69, 66, 107, 87, 91, 60, 44, 20, 2]", + "total_badness": 978.54289744 }, { "ne1d": 262, - "ne2d": 724, - "ne3d": 2075, - "quality_histogram": "[0, 3, 10, 24, 70, 91, 119, 86, 82, 50, 48, 83, 125, 169, 212, 265, 273, 210, 123, 32]", - "total_badness": 3839.258335 + "ne2d": 726, + "ne3d": 2087, + "quality_histogram": "[0, 2, 12, 18, 54, 90, 113, 95, 88, 55, 41, 59, 111, 196, 254, 299, 260, 193, 114, 33]", + "total_badness": 3774.9667473 }, { "ne1d": 378, - "ne2d": 1412, - "ne3d": 7646, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 9, 19, 60, 144, 300, 559, 885, 1284, 1510, 1488, 1055, 330]", - "total_badness": 9628.2237959 + "ne2d": 1410, + "ne3d": 7638, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 41, 105, 277, 549, 947, 1322, 1539, 1544, 998, 307]", + "total_badness": 9567.7509778 }, { "ne1d": 624, "ne2d": 3944, - "ne3d": 43287, - "quality_histogram": "[0, 0, 0, 0, 2, 40, 194, 422, 757, 1077, 1754, 2592, 3765, 4982, 5953, 6630, 6135, 5003, 3105, 876]", - "total_badness": 61333.463425 + "ne3d": 38297, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 18, 41, 131, 332, 847, 2080, 3865, 5988, 7892, 8533, 6475, 2093]", + "total_badness": 46909.566762 } ], "cubeandspheres.geo": [ @@ -269,174 +269,174 @@ "ne2d": 148, "ne3d": 98, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 16, 18, 14, 20, 4, 8, 2, 0]", - "total_badness": 145.06570717 + "total_badness": 145.06570733 }, { "ne1d": 144, "ne2d": 150, "ne3d": 100, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 7, 10, 16, 18, 15, 17, 6, 5, 4, 0]", - "total_badness": 146.6442139 + "total_badness": 146.64421411 }, { "ne1d": 144, "ne2d": 148, "ne3d": 98, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 6, 6, 17, 20, 14, 18, 5, 6, 3, 0]", - "total_badness": 144.34810104 + "total_badness": 144.34810179 }, { "ne1d": 144, "ne2d": 148, "ne3d": 98, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 16, 18, 14, 20, 4, 8, 2, 0]", - "total_badness": 145.06570717 + "total_badness": 145.06570733 }, { "ne1d": 264, "ne2d": 388, "ne3d": 366, "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 4, 21, 28, 39, 47, 52, 37, 58, 40, 25, 10, 2]", - "total_badness": 550.46676248 + "total_badness": 550.50109911 }, { "ne1d": 428, "ne2d": 926, "ne3d": 1075, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 24, 51, 37, 103, 144, 97, 121, 156, 155, 71, 61, 31, 22]", - "total_badness": 1676.2336937 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 24, 51, 36, 104, 145, 96, 119, 157, 156, 70, 62, 31, 22]", + "total_badness": 1676.1706223 } ], "cubemcyl.geo": [ { "ne1d": 142, - "ne2d": 2490, - "ne3d": 20799, - "quality_histogram": "[0, 0, 0, 0, 0, 3, 28, 79, 219, 382, 656, 1158, 1775, 2464, 3005, 3406, 3192, 2557, 1522, 353]", - "total_badness": 28706.828456 + "ne2d": 2488, + "ne3d": 20762, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 29, 90, 197, 401, 710, 1179, 1822, 2485, 3183, 3202, 3161, 2520, 1421, 360]", + "total_badness": 28767.588956 }, { "ne1d": 64, - "ne2d": 642, - "ne3d": 3229, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 12, 32, 67, 160, 255, 358, 490, 500, 493, 420, 301, 113, 27]", - "total_badness": 4623.4755628 + "ne2d": 644, + "ne3d": 3315, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 7, 15, 36, 73, 135, 230, 355, 463, 549, 546, 429, 268, 165, 41]", + "total_badness": 4730.5709115 }, { "ne1d": 102, - "ne2d": 1402, - "ne3d": 8204, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 8, 22, 59, 164, 348, 591, 842, 1045, 1356, 1225, 1109, 817, 472, 145]", - "total_badness": 11539.42633 + "ne2d": 1400, + "ne3d": 8334, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 6, 22, 85, 144, 337, 565, 905, 1167, 1322, 1295, 1095, 769, 485, 134]", + "total_badness": 11752.339923 }, { "ne1d": 142, - "ne2d": 2490, - "ne3d": 19461, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 9, 29, 93, 229, 518, 1070, 1941, 2741, 3474, 3670, 3200, 1969, 518]", - "total_badness": 25234.660253 + "ne2d": 2488, + "ne3d": 19379, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 6, 32, 92, 230, 494, 1181, 1947, 2801, 3461, 3525, 3130, 1945, 535]", + "total_badness": 25177.816848 }, { "ne1d": 210, - "ne2d": 5508, - "ne3d": 88594, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 31, 113, 362, 1035, 2435, 5625, 9861, 14712, 18443, 18771, 13294, 3908]", - "total_badness": 109777.71823 + "ne2d": 5506, + "ne3d": 88647, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 27, 112, 355, 1028, 2468, 5697, 9855, 14883, 18353, 18556, 13360, 3952]", + "total_badness": 109878.73629 }, { "ne1d": 362, - "ne2d": 15116, - "ne3d": 520770, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 25, 134, 437, 1202, 3273, 9236, 24185, 50863, 82792, 109294, 119384, 91342, 28599]", - "total_badness": 633693.0884 + "ne2d": 15120, + "ne3d": 524047, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 31, 117, 380, 1130, 3298, 9108, 23604, 49533, 81227, 111104, 122316, 92954, 29239]", + "total_badness": 636472.03769 } ], "cubemsphere.geo": [ { "ne1d": 90, - "ne2d": 700, - "ne3d": 4935, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 12, 29, 67, 121, 206, 278, 432, 625, 745, 752, 705, 569, 317, 77]", - "total_badness": 6938.6199468 + "ne2d": 698, + "ne3d": 4934, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 11, 37, 72, 119, 189, 298, 467, 659, 707, 703, 683, 557, 330, 100]", + "total_badness": 6958.9504342 }, { "ne1d": 44, - "ne2d": 278, - "ne3d": 771, - "quality_histogram": "[0, 0, 0, 1, 2, 1, 8, 23, 33, 57, 75, 84, 89, 119, 95, 69, 50, 35, 24, 6]", - "total_badness": 1259.9745028 + "ne2d": 272, + "ne3d": 745, + "quality_histogram": "[0, 0, 0, 0, 1, 4, 5, 17, 29, 49, 77, 86, 100, 93, 92, 70, 54, 42, 21, 5]", + "total_badness": 1204.1731602 }, { "ne1d": 68, - "ne2d": 402, - "ne3d": 1556, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 6, 11, 21, 46, 111, 170, 223, 255, 263, 222, 133, 82, 13]", - "total_badness": 2179.1819908 + "ne2d": 398, + "ne3d": 1558, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 13, 20, 51, 111, 165, 255, 254, 221, 231, 150, 64, 20]", + "total_badness": 2188.2669021 }, { "ne1d": 90, - "ne2d": 700, - "ne3d": 4607, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 12, 47, 76, 137, 256, 520, 708, 812, 832, 677, 406, 120]", - "total_badness": 6067.5841219 + "ne2d": 698, + "ne3d": 4640, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 8, 38, 72, 173, 303, 491, 698, 805, 844, 667, 412, 128]", + "total_badness": 6111.5995998 }, { "ne1d": 146, - "ne2d": 1486, - "ne3d": 17868, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 13, 20, 79, 207, 494, 1105, 1981, 2974, 3738, 3793, 2707, 757]", - "total_badness": 22135.731945 + "ne2d": 1492, + "ne3d": 17798, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 9, 24, 86, 209, 525, 1104, 1919, 2993, 3722, 3811, 2645, 749]", + "total_badness": 22077.875433 }, { "ne1d": 248, - "ne2d": 4358, - "ne3d": 113948, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 14, 42, 113, 326, 855, 2300, 5766, 11158, 18354, 23917, 25885, 19416, 5801]", - "total_badness": 139251.67592 + "ne2d": 4354, + "ne3d": 112882, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 10, 27, 96, 290, 762, 2154, 5475, 10965, 17752, 23939, 26158, 19408, 5845]", + "total_badness": 137612.85905 } ], "cylinder.geo": [ { "ne1d": 52, "ne2d": 288, - "ne3d": 413, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 10, 18, 31, 43, 56, 76, 61, 45, 47, 18, 5]", - "total_badness": 584.63640908 + "ne3d": 410, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 2, 8, 14, 31, 47, 57, 67, 64, 53, 44, 13, 9]", + "total_badness": 577.74781759 }, { "ne1d": 24, "ne2d": 66, - "ne3d": 103, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 7, 15, 14, 21, 32, 10, 1]", - "total_badness": 127.27629078 + "ne3d": 124, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 9, 12, 16, 23, 39, 12, 5]", + "total_badness": 153.9684245 }, { "ne1d": 36, "ne2d": 152, - "ne3d": 437, - "quality_histogram": "[0, 0, 14, 22, 37, 32, 30, 36, 31, 29, 34, 25, 27, 28, 22, 16, 33, 9, 9, 3]", - "total_badness": 1146.634165 + "ne3d": 376, + "quality_histogram": "[0, 0, 0, 8, 18, 19, 17, 43, 35, 17, 29, 16, 18, 42, 20, 21, 38, 16, 12, 7]", + "total_badness": 793.09247202 }, { "ne1d": 52, "ne2d": 288, - "ne3d": 411, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 15, 29, 37, 61, 76, 59, 48, 52, 21, 3]", - "total_badness": 574.34537671 + "ne3d": 404, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 2, 4, 15, 25, 38, 68, 66, 55, 55, 52, 15, 8]", + "total_badness": 562.71987918 }, { "ne1d": 76, "ne2d": 636, - "ne3d": 1155, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 10, 16, 50, 99, 120, 164, 206, 224, 139, 105, 18]", - "total_badness": 1536.3995031 + "ne3d": 1146, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 12, 34, 57, 101, 121, 179, 190, 199, 137, 96, 17]", + "total_badness": 1547.7672308 }, { "ne1d": 124, "ne2d": 1672, - "ne3d": 8102, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 13, 53, 167, 414, 787, 1233, 1788, 1856, 1334, 453]", - "total_badness": 9877.1010566 + "ne3d": 8039, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 16, 52, 160, 405, 772, 1246, 1710, 1808, 1421, 444]", + "total_badness": 9788.5339464 } ], "cylsphere.geo": [ @@ -444,175 +444,175 @@ "ne1d": 104, "ne2d": 496, "ne3d": 711, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 10, 16, 35, 64, 89, 107, 102, 100, 57, 59, 50, 17, 2]", - "total_badness": 1105.7991926 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 9, 15, 36, 63, 90, 107, 103, 99, 56, 60, 50, 17, 2]", + "total_badness": 1105.8880942 }, { "ne1d": 48, - "ne2d": 140, + "ne2d": 136, "ne3d": 225, - "quality_histogram": "[0, 0, 1, 13, 20, 34, 20, 21, 7, 6, 2, 8, 13, 18, 10, 23, 13, 7, 9, 0]", - "total_badness": 584.42426831 + "quality_histogram": "[0, 0, 0, 6, 16, 26, 21, 19, 17, 7, 1, 10, 6, 10, 21, 27, 23, 8, 5, 2]", + "total_badness": 525.88368721 }, { "ne1d": 72, - "ne2d": 324, - "ne3d": 665, - "quality_histogram": "[0, 1, 9, 14, 21, 37, 57, 76, 63, 57, 53, 60, 32, 54, 23, 35, 39, 16, 13, 5]", - "total_badness": 1528.6973752 + "ne2d": 320, + "ne3d": 629, + "quality_histogram": "[0, 0, 13, 7, 17, 28, 39, 55, 44, 70, 41, 52, 60, 54, 36, 31, 48, 20, 7, 7]", + "total_badness": 1373.2243293 }, { "ne1d": 104, "ne2d": 496, "ne3d": 709, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 6, 15, 27, 62, 89, 110, 109, 90, 68, 66, 45, 15, 4]", - "total_badness": 1092.2233629 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 5, 15, 29, 63, 86, 110, 109, 89, 69, 66, 45, 15, 4]", + "total_badness": 1092.3394563 }, { "ne1d": 152, "ne2d": 1084, - "ne3d": 2848, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 5, 17, 49, 92, 153, 260, 359, 461, 527, 497, 339, 88]", - "total_badness": 3685.3796091 + "ne3d": 2798, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 5, 19, 44, 91, 162, 267, 345, 422, 507, 505, 322, 108]", + "total_badness": 3620.8176099 }, { "ne1d": 248, "ne2d": 2820, - "ne3d": 17783, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 16, 43, 133, 373, 852, 1712, 2853, 3822, 4037, 2968, 969]", - "total_badness": 21702.916892 + "ne3d": 17745, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 20, 57, 142, 331, 880, 1771, 2788, 3668, 3998, 3037, 1049]", + "total_badness": 21647.214644 } ], "ellipsoid.geo": [ { "ne1d": 0, "ne2d": 704, - "ne3d": 1278, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 5, 20, 57, 75, 122, 125, 161, 167, 137, 161, 107, 83, 45, 13]", - "total_badness": 1996.4481212 + "ne3d": 1297, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 7, 14, 42, 76, 119, 157, 154, 160, 158, 142, 111, 89, 54, 14]", + "total_badness": 2009.8527353 }, { "ne1d": 0, "ne2d": 192, - "ne3d": 899, - "quality_histogram": "[19, 132, 126, 95, 104, 78, 56, 48, 58, 43, 26, 22, 29, 20, 13, 8, 10, 9, 2, 1]", - "total_badness": 5295.2975939 + "ne3d": 915, + "quality_histogram": "[24, 146, 135, 112, 105, 65, 62, 41, 46, 43, 32, 26, 19, 24, 15, 10, 6, 1, 3, 0]", + "total_badness": 5760.7267346 }, { "ne1d": 0, "ne2d": 394, - "ne3d": 590, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 11, 24, 40, 74, 80, 100, 88, 58, 41, 40, 19, 11]", - "total_badness": 889.56775696 + "ne3d": 592, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 5, 9, 21, 38, 80, 86, 90, 99, 53, 48, 29, 22, 12]", + "total_badness": 893.18441542 }, { "ne1d": 0, "ne2d": 704, - "ne3d": 1261, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 13, 44, 60, 101, 111, 156, 158, 153, 168, 123, 101, 55, 17]", - "total_badness": 1904.2716478 + "ne3d": 1282, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 10, 33, 59, 108, 136, 158, 156, 163, 153, 115, 97, 69, 23]", + "total_badness": 1929.3894181 }, { "ne1d": 0, "ne2d": 1618, - "ne3d": 5680, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 0, 4, 29, 94, 160, 324, 548, 748, 969, 1061, 936, 638, 167]", - "total_badness": 7360.2666331 + "ne3d": 5569, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 23, 73, 130, 303, 511, 700, 922, 1025, 989, 693, 195]", + "total_badness": 7142.2540344 }, { "ne1d": 0, "ne2d": 4236, "ne3d": 37387, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 8, 18, 81, 226, 652, 1604, 3366, 5913, 7905, 8838, 6765, 2011]", - "total_badness": 45343.133766 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 17, 75, 239, 644, 1587, 3545, 5826, 7874, 8638, 6846, 2092]", + "total_badness": 45341.992565 } ], "ellipticcone.geo": [ { "ne1d": 174, - "ne2d": 1556, - "ne3d": 5138, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 12, 22, 57, 112, 186, 396, 517, 723, 897, 960, 680, 434, 141]", - "total_badness": 6849.0044378 + "ne2d": 1554, + "ne3d": 5154, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 13, 29, 51, 122, 215, 389, 552, 753, 867, 887, 708, 434, 131]", + "total_badness": 6912.1657887 }, { "ne1d": 86, "ne2d": 380, - "ne3d": 590, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 15, 15, 32, 45, 67, 79, 88, 83, 67, 48, 31, 14]", - "total_badness": 857.18307391 + "ne3d": 585, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 5, 13, 17, 32, 57, 64, 73, 84, 89, 68, 47, 22, 12]", + "total_badness": 860.61770269 }, { "ne1d": 130, "ne2d": 864, - "ne3d": 1713, - "quality_histogram": "[0, 0, 0, 0, 0, 3, 8, 21, 30, 51, 83, 106, 145, 221, 218, 248, 246, 180, 122, 31]", - "total_badness": 2456.9795033 + "ne3d": 1734, + "quality_histogram": "[0, 0, 0, 0, 0, 7, 9, 28, 37, 57, 85, 135, 132, 216, 225, 256, 238, 177, 100, 32]", + "total_badness": 2535.8367438 }, { "ne1d": 174, - "ne2d": 1556, - "ne3d": 4936, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 15, 52, 109, 256, 443, 654, 865, 1006, 810, 538, 184]", - "total_badness": 6327.3304435 + "ne2d": 1554, + "ne3d": 4935, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 7, 18, 52, 127, 277, 397, 675, 900, 963, 833, 511, 175]", + "total_badness": 6345.7383858 }, { "ne1d": 258, - "ne2d": 3460, - "ne3d": 13213, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 24, 96, 177, 365, 657, 1010, 1665, 2371, 2477, 2270, 1591, 505]", - "total_badness": 16972.974746 + "ne2d": 3462, + "ne3d": 13486, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 10, 31, 108, 209, 375, 670, 1146, 1676, 2318, 2432, 2372, 1636, 502]", + "total_badness": 17385.364148 }, { "ne1d": 432, - "ne2d": 9520, - "ne3d": 70326, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 13, 40, 122, 338, 786, 1853, 4006, 7465, 11360, 14481, 15208, 11188, 3466]", - "total_badness": 86818.381106 + "ne2d": 9534, + "ne3d": 70093, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 9, 41, 126, 322, 870, 1902, 4034, 7717, 11685, 14333, 14864, 10903, 3285]", + "total_badness": 86746.571015 } ], "ellipticcyl.geo": [ { "ne1d": 156, - "ne2d": 994, - "ne3d": 2287, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 9, 28, 50, 88, 151, 203, 262, 348, 377, 324, 245, 168, 32]", - "total_badness": 3194.7013193 + "ne2d": 996, + "ne3d": 2293, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 12, 16, 55, 86, 118, 233, 260, 367, 368, 354, 242, 149, 32]", + "total_badness": 3192.9620295 }, { "ne1d": 76, "ne2d": 238, "ne3d": 325, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 18, 28, 26, 37, 71, 53, 46, 28, 10, 2]", - "total_badness": 459.38557223 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 18, 28, 26, 38, 68, 55, 45, 28, 11, 2]", + "total_badness": 459.61476239 }, { "ne1d": 116, "ne2d": 596, - "ne3d": 1141, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 18, 32, 47, 73, 144, 189, 173, 199, 141, 102, 19]", - "total_badness": 1536.9702483 + "ne3d": 1129, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 2, 10, 28, 38, 75, 130, 159, 208, 199, 162, 100, 17]", + "total_badness": 1500.1384781 }, { "ne1d": 156, - "ne2d": 994, - "ne3d": 2213, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 10, 31, 49, 117, 191, 232, 335, 376, 366, 281, 184, 38]", - "total_badness": 2990.869979 + "ne2d": 996, + "ne3d": 2218, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 5, 38, 50, 93, 181, 255, 331, 354, 386, 285, 196, 42]", + "total_badness": 2980.3373467 }, { "ne1d": 232, - "ne2d": 2200, - "ne3d": 8317, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 5, 11, 47, 106, 271, 598, 1029, 1448, 1700, 1606, 1173, 322]", - "total_badness": 10409.762502 + "ne2d": 2206, + "ne3d": 8329, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 8, 38, 120, 269, 606, 986, 1422, 1778, 1636, 1142, 319]", + "total_badness": 10417.08851 }, { "ne1d": 388, - "ne2d": 6118, - "ne3d": 55159, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 9, 34, 86, 288, 797, 2294, 4900, 8294, 11813, 13122, 10147, 3374]", - "total_badness": 66617.550244 + "ne2d": 6128, + "ne3d": 54910, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 13, 28, 124, 330, 933, 2421, 5072, 8328, 11652, 13004, 9765, 3238]", + "total_badness": 66567.884044 } ], "fichera.geo": [ @@ -621,7 +621,7 @@ "ne2d": 38, "ne3d": 40, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 4, 3, 5, 7, 8, 2, 1, 0, 2]", - "total_badness": 62.361996883 + "total_badness": 62.361996939 }, { "ne1d": 42, @@ -642,88 +642,88 @@ "ne2d": 38, "ne3d": 40, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 4, 3, 5, 7, 8, 2, 1, 0, 2]", - "total_badness": 62.361996883 + "total_badness": 62.361996939 }, { "ne1d": 96, "ne2d": 118, "ne3d": 208, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 6, 10, 16, 24, 36, 33, 41, 30, 6]", - "total_badness": 266.1986561 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 6, 10, 16, 23, 37, 29, 47, 28, 6]", + "total_badness": 266.18044371 }, { "ne1d": 144, "ne2d": 274, - "ne3d": 516, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 16, 31, 59, 88, 103, 78, 75, 49, 12]", - "total_badness": 672.7632765 + "ne3d": 510, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 8, 16, 34, 67, 79, 99, 78, 66, 48, 12]", + "total_badness": 673.19970182 } ], "frame.step": [ { "ne1d": 12694, - "ne2d": 40376, - "ne3d": 221132, - "quality_histogram": "[3, 8, 4, 13, 7, 42, 248, 732, 1691, 3393, 6209, 10718, 17518, 25459, 32156, 35899, 35412, 28951, 18016, 4653]", - "total_badness": 301320.76786 + "ne2d": 40418, + "ne3d": 221338, + "quality_histogram": "[3, 8, 6, 9, 9, 49, 278, 724, 1782, 3522, 6397, 10742, 17468, 25554, 32460, 35629, 35018, 28948, 18116, 4616]", + "total_badness": 302031.17747 }, { "ne1d": 6026, - "ne2d": 11296, - "ne3d": 30460, - "quality_histogram": "[4, 6, 6, 7, 21, 43, 92, 257, 679, 1046, 1696, 2567, 3361, 4142, 4605, 4273, 3551, 2428, 1345, 331]", - "total_badness": 45199.935474 + "ne2d": 11302, + "ne3d": 30643, + "quality_histogram": "[4, 5, 3, 11, 21, 51, 105, 281, 690, 1063, 1703, 2717, 3365, 4271, 4573, 4231, 3360, 2466, 1371, 352]", + "total_badness": 45609.34772 }, { "ne1d": 9704, - "ne2d": 24292, - "ne3d": 85251, - "quality_histogram": "[1, 6, 5, 10, 11, 34, 74, 181, 467, 1085, 2453, 4566, 7709, 11061, 13565, 14164, 12961, 9900, 5659, 1339]", - "total_badness": 117271.18554 + "ne2d": 24306, + "ne3d": 85235, + "quality_histogram": "[3, 3, 7, 8, 7, 30, 77, 145, 446, 1107, 2404, 4694, 7830, 10947, 13348, 14070, 12971, 10099, 5613, 1426]", + "total_badness": 117163.65166 } ], "hinge.stl": [ { "ne1d": 456, "ne2d": 1214, - "ne3d": 2019, - "quality_histogram": "[0, 0, 0, 0, 1, 1, 7, 10, 25, 53, 64, 135, 179, 260, 313, 277, 264, 228, 159, 43]", - "total_badness": 2840.0751587 + "ne3d": 2022, + "quality_histogram": "[0, 0, 0, 0, 1, 5, 9, 12, 26, 49, 65, 132, 182, 254, 300, 282, 275, 231, 156, 43]", + "total_badness": 2854.7168701 }, { "ne1d": 298, - "ne2d": 594, - "ne3d": 803, - "quality_histogram": "[0, 0, 3, 10, 11, 10, 24, 29, 44, 52, 53, 101, 86, 104, 78, 76, 66, 29, 22, 5]", - "total_badness": 1443.356934 + "ne2d": 596, + "ne3d": 772, + "quality_histogram": "[0, 0, 1, 10, 8, 6, 20, 17, 36, 50, 54, 105, 90, 108, 78, 77, 50, 38, 22, 2]", + "total_badness": 1342.107284 }, { "ne1d": 370, - "ne2d": 842, - "ne3d": 1114, - "quality_histogram": "[0, 0, 0, 0, 0, 9, 18, 23, 29, 45, 67, 110, 146, 130, 166, 151, 102, 53, 52, 13]", - "total_badness": 1737.5505204 + "ne2d": 844, + "ne3d": 1118, + "quality_histogram": "[0, 0, 0, 0, 0, 10, 16, 22, 30, 44, 66, 106, 150, 128, 177, 157, 95, 56, 51, 10]", + "total_badness": 1741.03544 }, { "ne1d": 516, "ne2d": 1566, - "ne3d": 2515, - "quality_histogram": "[0, 0, 0, 0, 1, 1, 2, 16, 33, 61, 109, 161, 234, 325, 376, 358, 314, 287, 192, 45]", - "total_badness": 3545.6814623 + "ne3d": 2527, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 3, 16, 24, 60, 103, 147, 246, 311, 364, 374, 321, 318, 190, 48]", + "total_badness": 3538.9062774 }, { "ne1d": 722, "ne2d": 2870, - "ne3d": 6691, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 4, 17, 35, 66, 156, 354, 634, 871, 1042, 1219, 1171, 879, 240]", - "total_badness": 8595.0420119 + "ne3d": 6642, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 3, 19, 29, 82, 162, 367, 691, 888, 1056, 1147, 1124, 840, 232]", + "total_badness": 8573.8370647 }, { "ne1d": 1862, - "ne2d": 19490, - "ne3d": 137799, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 44, 149, 433, 1143, 3044, 7194, 13730, 22017, 28888, 30587, 23088, 7477]", - "total_badness": 168663.12974 + "ne2d": 19488, + "ne3d": 137072, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 1, 26, 122, 396, 1121, 2973, 7117, 13598, 21861, 28813, 30393, 23234, 7416]", + "total_badness": 167613.01917 } ], "lshape3d.geo": [ @@ -760,90 +760,90 @@ "ne2d": 76, "ne3d": 88, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 10, 9, 21, 23, 7, 6, 1, 4]", - "total_badness": 121.12718489 + "total_badness": 121.1271847 }, { "ne1d": 122, "ne2d": 204, "ne3d": 326, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 11, 17, 43, 51, 53, 56, 50, 33, 6]", - "total_badness": 427.78776756 + "total_badness": 427.73359314 } ], "manyholes.geo": [ { "ne1d": 5886, - "ne2d": 48026, - "ne3d": 179303, - "quality_histogram": "[0, 0, 1, 4, 9, 24, 48, 165, 522, 1374, 3347, 7698, 12503, 20091, 27314, 30044, 29908, 25015, 17206, 4030]", - "total_badness": 238306.19112 + "ne2d": 48036, + "ne3d": 179484, + "quality_histogram": "[0, 0, 0, 1, 6, 26, 49, 181, 507, 1429, 3406, 7751, 12589, 20420, 27392, 30012, 29988, 24886, 16884, 3957]", + "total_badness": 238828.86994 }, { "ne1d": 2746, "ne2d": 13834, - "ne3d": 29076, - "quality_histogram": "[0, 0, 0, 2, 13, 18, 50, 160, 398, 849, 1531, 2349, 3232, 4336, 4115, 3734, 3102, 2591, 1888, 708]", - "total_badness": 41978.532959 + "ne3d": 29329, + "quality_histogram": "[0, 0, 0, 0, 14, 21, 41, 146, 393, 827, 1501, 2289, 3318, 4412, 4217, 3705, 3185, 2627, 1888, 745]", + "total_badness": 42243.35733 }, { "ne1d": 4106, - "ne2d": 27964, - "ne3d": 70880, - "quality_histogram": "[0, 0, 0, 3, 32, 74, 190, 412, 841, 1713, 2945, 4403, 7020, 9345, 10339, 10430, 9445, 7405, 4499, 1784]", - "total_badness": 100324.40391 + "ne2d": 27932, + "ne3d": 70698, + "quality_histogram": "[0, 0, 0, 1, 26, 69, 183, 393, 852, 1684, 2955, 4447, 7082, 9552, 10277, 10366, 9322, 7190, 4617, 1682]", + "total_badness": 100123.46548 } ], "manyholes2.geo": [ { "ne1d": 10202, - "ne2d": 55316, - "ne3d": 127893, - "quality_histogram": "[0, 0, 0, 1, 5, 36, 93, 304, 799, 2072, 4456, 7947, 11984, 17504, 18676, 18332, 17069, 14736, 10402, 3477]", - "total_badness": 176567.71812 + "ne2d": 55308, + "ne3d": 127648, + "quality_histogram": "[0, 0, 0, 0, 6, 34, 104, 281, 811, 2064, 4591, 7937, 11909, 17760, 18525, 18083, 16916, 14536, 10497, 3594]", + "total_badness": 176351.56445 } ], "matrix.geo": [ { "ne1d": 174, - "ne2d": 1196, - "ne3d": 5364, - "quality_histogram": "[0, 0, 38, 139, 142, 92, 140, 174, 157, 227, 340, 437, 522, 624, 575, 548, 536, 390, 222, 61]", - "total_badness": 9855.8573843 + "ne2d": 1198, + "ne3d": 5261, + "quality_histogram": "[0, 0, 43, 122, 130, 86, 136, 184, 149, 241, 322, 397, 535, 609, 604, 571, 460, 398, 221, 53]", + "total_badness": 9604.8609332 }, { "ne1d": 106, "ne2d": 600, - "ne3d": 1993, - "quality_histogram": "[0, 3, 20, 76, 113, 151, 141, 159, 190, 172, 186, 171, 195, 136, 92, 65, 49, 47, 20, 7]", - "total_badness": 4853.2906164 + "ne3d": 1968, + "quality_histogram": "[0, 5, 28, 76, 118, 178, 153, 174, 160, 166, 194, 193, 159, 120, 80, 52, 39, 39, 25, 9]", + "total_badness": 4972.5229136 }, { "ne1d": 132, "ne2d": 828, - "ne3d": 2747, - "quality_histogram": "[0, 1, 16, 89, 90, 146, 158, 183, 205, 244, 313, 287, 231, 215, 178, 146, 89, 87, 52, 17]", - "total_badness": 6032.3841165 + "ne3d": 2719, + "quality_histogram": "[0, 0, 10, 46, 80, 124, 136, 129, 211, 269, 319, 290, 267, 230, 195, 148, 117, 83, 49, 16]", + "total_badness": 5612.3348522 }, { "ne1d": 174, - "ne2d": 1196, - "ne3d": 5197, - "quality_histogram": "[0, 0, 25, 120, 129, 78, 122, 155, 136, 210, 281, 370, 474, 594, 563, 605, 538, 466, 258, 73]", - "total_badness": 9197.4127362 + "ne2d": 1198, + "ne3d": 5159, + "quality_histogram": "[0, 0, 28, 111, 114, 67, 108, 152, 144, 215, 289, 348, 498, 587, 574, 620, 517, 450, 264, 73]", + "total_badness": 9030.3079258 }, { "ne1d": 248, "ne2d": 2324, - "ne3d": 16300, - "quality_histogram": "[0, 0, 0, 0, 0, 5, 23, 71, 137, 184, 373, 655, 1098, 1629, 2112, 2498, 2788, 2503, 1712, 512]", - "total_badness": 21759.792772 + "ne3d": 16341, + "quality_histogram": "[0, 0, 0, 0, 0, 7, 23, 64, 122, 219, 336, 666, 982, 1584, 2204, 2586, 2786, 2581, 1637, 544]", + "total_badness": 21749.164857 }, { "ne1d": 418, - "ne2d": 5966, - "ne3d": 101129, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 6, 17, 67, 187, 481, 1246, 2896, 6099, 10667, 16234, 20660, 21479, 16058, 5030]", - "total_badness": 125108.89116 + "ne2d": 5968, + "ne3d": 100573, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 18, 78, 192, 438, 1216, 2786, 6112, 10628, 15970, 20785, 21682, 15766, 4896]", + "total_badness": 124376.56219 } ], "ortho.geo": [ @@ -884,290 +884,290 @@ }, { "ne1d": 72, - "ne2d": 114, - "ne3d": 177, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 7, 13, 27, 39, 31, 32, 13, 6]", - "total_badness": 228.88985644 + "ne2d": 116, + "ne3d": 180, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 11, 12, 24, 35, 36, 29, 16, 9]", + "total_badness": 231.52239849 } ], "part1.stl": [ { "ne1d": 170, - "ne2d": 436, - "ne3d": 1229, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 3, 19, 29, 55, 87, 110, 138, 175, 205, 157, 142, 78, 29]", - "total_badness": 1729.0401722 + "ne2d": 434, + "ne3d": 1224, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 6, 12, 36, 57, 70, 113, 150, 189, 175, 158, 135, 94, 27]", + "total_badness": 1720.8230602 }, { "ne1d": 134, - "ne2d": 278, - "ne3d": 495, - "quality_histogram": "[0, 0, 0, 1, 2, 1, 3, 5, 14, 29, 31, 32, 59, 65, 55, 70, 58, 44, 23, 3]", - "total_badness": 754.26258256 + "ne2d": 276, + "ne3d": 504, + "quality_histogram": "[0, 0, 0, 1, 4, 0, 7, 6, 20, 26, 31, 44, 59, 68, 74, 61, 43, 39, 18, 3]", + "total_badness": 791.5174304 }, { "ne1d": 194, - "ne2d": 588, - "ne3d": 1673, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 9, 19, 53, 115, 189, 242, 295, 314, 237, 151, 44]", - "total_badness": 2197.2722054 + "ne2d": 590, + "ne3d": 1688, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 2, 4, 15, 35, 70, 127, 179, 237, 295, 293, 240, 156, 34]", + "total_badness": 2247.145727 }, { "ne1d": 266, "ne2d": 986, - "ne3d": 4070, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 0, 1, 11, 26, 61, 171, 329, 503, 679, 791, 819, 526, 151]", - "total_badness": 5135.4720603 + "ne3d": 4152, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 3, 8, 35, 64, 166, 338, 594, 745, 788, 798, 460, 151]", + "total_badness": 5270.5642613 }, { "ne1d": 674, "ne2d": 6854, - "ne3d": 83365, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 7, 13, 62, 230, 706, 1754, 4117, 8217, 13027, 17521, 18882, 14312, 4515]", - "total_badness": 101790.83606 + "ne3d": 82708, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 28, 74, 229, 687, 1629, 4225, 8150, 12870, 17332, 18973, 14189, 4318]", + "total_badness": 101005.97859 } ], "period.geo": [ { "ne1d": 344, - "ne2d": 1128, - "ne3d": 3333, - "quality_histogram": "[0, 0, 0, 0, 1, 2, 23, 34, 77, 133, 193, 290, 368, 443, 452, 422, 391, 299, 160, 45]", - "total_badness": 4947.3560633 + "ne2d": 1134, + "ne3d": 3267, + "quality_histogram": "[0, 0, 0, 0, 0, 5, 19, 28, 65, 121, 198, 292, 368, 446, 463, 423, 367, 278, 161, 33]", + "total_badness": 4843.6173488 }, { "ne1d": 160, "ne2d": 286, - "ne3d": 668, - "quality_histogram": "[0, 2, 16, 21, 17, 19, 28, 37, 40, 57, 60, 60, 75, 44, 43, 45, 44, 43, 14, 3]", - "total_badness": 1452.2340762 + "ne3d": 680, + "quality_histogram": "[0, 0, 7, 11, 17, 20, 26, 41, 48, 64, 63, 61, 71, 48, 51, 50, 39, 41, 18, 4]", + "total_badness": 1363.8803171 }, { "ne1d": 232, - "ne2d": 598, - "ne3d": 1548, - "quality_histogram": "[0, 17, 27, 27, 36, 51, 53, 75, 99, 120, 139, 129, 156, 145, 138, 103, 115, 66, 46, 6]", - "total_badness": 3338.4078035 + "ne2d": 600, + "ne3d": 1620, + "quality_histogram": "[0, 20, 26, 46, 42, 60, 70, 81, 105, 126, 134, 136, 139, 134, 144, 123, 111, 72, 43, 8]", + "total_badness": 3623.0833569 }, { "ne1d": 344, - "ne2d": 1128, - "ne3d": 3278, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 19, 24, 49, 97, 171, 244, 348, 402, 467, 462, 419, 350, 182, 42]", - "total_badness": 4737.6478788 + "ne2d": 1134, + "ne3d": 3217, + "quality_histogram": "[0, 0, 0, 0, 0, 4, 19, 22, 57, 93, 174, 264, 337, 423, 484, 443, 399, 282, 178, 38]", + "total_badness": 4690.0482354 }, { "ne1d": 480, - "ne2d": 2252, - "ne3d": 11707, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 19, 40, 147, 287, 574, 934, 1513, 1977, 2229, 2130, 1425, 428]", - "total_badness": 14969.835667 + "ne2d": 2256, + "ne3d": 11676, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 6, 24, 53, 120, 289, 525, 957, 1453, 1943, 2287, 2081, 1526, 409]", + "total_badness": 14907.26587 }, { "ne1d": 820, - "ne2d": 6218, - "ne3d": 68314, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 7, 25, 88, 259, 691, 1670, 3656, 7155, 11221, 14072, 14790, 11219, 3459]", - "total_badness": 84011.916463 + "ne2d": 6222, + "ne3d": 67973, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 3, 15, 85, 268, 617, 1614, 3718, 7158, 11216, 14102, 14686, 10957, 3532]", + "total_badness": 83568.07739 } ], "plane.stl": [ { "ne1d": 890, - "ne2d": 2594, - "ne3d": 8251, - "quality_histogram": "[4, 12, 36, 32, 44, 50, 57, 71, 152, 239, 330, 506, 691, 890, 1189, 1240, 1122, 915, 537, 134]", - "total_badness": 12713.488612 + "ne2d": 2600, + "ne3d": 8161, + "quality_histogram": "[5, 12, 33, 28, 52, 46, 32, 56, 128, 206, 309, 453, 685, 923, 1193, 1252, 1147, 929, 538, 134]", + "total_badness": 12460.391484 }, { - "ne1d": 570, - "ne2d": 1162, - "ne3d": 1656, - "quality_histogram": "[6, 27, 35, 54, 64, 75, 98, 116, 138, 141, 155, 129, 151, 124, 127, 78, 75, 33, 26, 4]", - "total_badness": 4280.7158528 + "ne1d": 572, + "ne2d": 1152, + "ne3d": 1651, + "quality_histogram": "[4, 28, 36, 49, 61, 74, 97, 126, 147, 171, 148, 134, 113, 127, 124, 77, 71, 31, 25, 8]", + "total_badness": 4245.4288615 }, { "ne1d": 724, - "ne2d": 1706, - "ne3d": 3203, - "quality_histogram": "[6, 13, 36, 37, 49, 52, 75, 69, 129, 151, 215, 276, 365, 365, 390, 373, 301, 185, 94, 22]", - "total_badness": 6020.5769171 + "ne2d": 1692, + "ne3d": 3214, + "quality_histogram": "[5, 17, 33, 37, 43, 43, 52, 72, 118, 157, 197, 295, 340, 423, 382, 381, 287, 205, 104, 23]", + "total_badness": 5942.4739465 }, { "ne1d": 956, - "ne2d": 2816, - "ne3d": 8620, - "quality_histogram": "[3, 12, 31, 46, 42, 59, 51, 64, 79, 151, 222, 364, 608, 987, 1214, 1341, 1385, 1113, 673, 175]", - "total_badness": 12750.84491 + "ne2d": 2810, + "ne3d": 8675, + "quality_histogram": "[3, 12, 28, 50, 46, 52, 62, 61, 80, 138, 227, 401, 598, 907, 1121, 1410, 1387, 1197, 705, 190]", + "total_badness": 12797.407898 }, { "ne1d": 1554, - "ne2d": 6388, - "ne3d": 31408, - "quality_histogram": "[4, 7, 11, 6, 23, 53, 61, 72, 104, 183, 368, 718, 1410, 2572, 3955, 5242, 6125, 5690, 3772, 1032]", - "total_badness": 40921.343431 + "ne2d": 6382, + "ne3d": 31570, + "quality_histogram": "[4, 7, 11, 7, 21, 52, 57, 70, 111, 204, 355, 730, 1411, 2560, 3940, 5357, 6035, 5675, 3874, 1089]", + "total_badness": 41102.73883 }, { "ne1d": 2992, - "ne2d": 23312, - "ne3d": 279657, - "quality_histogram": "[4, 11, 13, 15, 12, 35, 54, 98, 217, 519, 1182, 2752, 6855, 15439, 29353, 45547, 58301, 60932, 44659, 13659]", - "total_badness": 345287.15441 + "ne2d": 23314, + "ne3d": 280243, + "quality_histogram": "[5, 10, 11, 13, 7, 26, 32, 92, 238, 487, 1175, 2837, 6695, 15338, 29029, 45204, 58707, 61066, 45296, 13975]", + "total_badness": 345632.07897 } ], "revolution.geo": [ { "ne1d": 320, - "ne2d": 3080, - "ne3d": 8389, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 12, 49, 144, 303, 528, 693, 889, 1085, 1176, 1168, 962, 783, 479, 117]", - "total_badness": 12207.237452 + "ne2d": 3096, + "ne3d": 8458, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 7, 38, 154, 314, 541, 711, 982, 1073, 1192, 1158, 976, 740, 452, 120]", + "total_badness": 12348.89105 }, { "ne1d": 160, - "ne2d": 820, - "ne3d": 1259, - "quality_histogram": "[0, 0, 0, 0, 3, 18, 57, 79, 96, 139, 150, 150, 140, 112, 90, 67, 72, 52, 27, 7]", - "total_badness": 2309.7736571 + "ne2d": 818, + "ne3d": 1293, + "quality_histogram": "[0, 0, 0, 0, 1, 9, 45, 85, 91, 122, 139, 162, 156, 139, 91, 88, 65, 60, 30, 10]", + "total_badness": 2298.7537248 }, { "ne1d": 240, "ne2d": 1816, - "ne3d": 3912, - "quality_histogram": "[0, 0, 0, 1, 5, 8, 26, 38, 114, 181, 332, 423, 495, 494, 492, 433, 381, 261, 179, 49]", - "total_badness": 6017.6961316 + "ne3d": 4027, + "quality_histogram": "[0, 0, 1, 7, 19, 34, 47, 57, 122, 235, 374, 450, 506, 500, 463, 421, 355, 235, 153, 48]", + "total_badness": 6472.3221213 }, { "ne1d": 320, - "ne2d": 3080, - "ne3d": 8206, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 13, 75, 206, 400, 590, 774, 1006, 1185, 1210, 1118, 927, 556, 142]", - "total_badness": 11528.119325 + "ne2d": 3096, + "ne3d": 8275, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 13, 65, 208, 418, 619, 849, 1019, 1178, 1230, 1116, 884, 514, 160]", + "total_badness": 11661.155742 }, { "ne1d": 480, - "ne2d": 6812, - "ne3d": 33032, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 15, 51, 244, 651, 1370, 2554, 4178, 5705, 6486, 6299, 4285, 1193]", - "total_badness": 41750.279607 + "ne2d": 6844, + "ne3d": 32967, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 16, 75, 291, 699, 1397, 2614, 4171, 5653, 6522, 6079, 4257, 1190]", + "total_badness": 41783.076303 }, { "ne1d": 800, - "ne2d": 17842, - "ne3d": 201922, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 13, 28, 162, 589, 1600, 4381, 10379, 20232, 32341, 42476, 45161, 34103, 10457]", - "total_badness": 246992.09017 + "ne2d": 17866, + "ne3d": 202729, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 6, 42, 144, 537, 1505, 4365, 10380, 20189, 31903, 42471, 45652, 34935, 10600]", + "total_badness": 247665.22181 } ], "screw.step": [ { "ne1d": 400, - "ne2d": 1422, - "ne3d": 2422, - "quality_histogram": "[0, 0, 0, 0, 1, 0, 16, 95, 102, 173, 183, 248, 286, 295, 268, 252, 217, 167, 92, 27]", - "total_badness": 3858.3545304 + "ne2d": 1436, + "ne3d": 2459, + "quality_histogram": "[0, 0, 0, 0, 1, 0, 16, 80, 88, 171, 190, 245, 276, 299, 270, 272, 223, 184, 110, 34]", + "total_badness": 3860.2528363 }, { "ne1d": 530, - "ne2d": 2690, - "ne3d": 7903, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 12, 30, 98, 166, 287, 493, 782, 1078, 1284, 1426, 1211, 797, 235]", - "total_badness": 10438.866877 + "ne2d": 2684, + "ne3d": 7927, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 15, 40, 82, 149, 285, 474, 733, 1104, 1268, 1359, 1321, 849, 245]", + "total_badness": 10424.316767 }, { "ne1d": 668, - "ne2d": 4986, - "ne3d": 31777, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 4, 13, 47, 127, 321, 774, 1693, 3177, 5250, 6673, 7110, 5062, 1523]", - "total_badness": 39090.830215 + "ne2d": 4998, + "ne3d": 31493, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 9, 17, 53, 123, 356, 776, 1790, 3291, 5171, 6636, 6761, 4947, 1560]", + "total_badness": 38849.392612 } ], "sculpture.geo": [ { "ne1d": 192, - "ne2d": 412, - "ne3d": 474, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 2, 18, 18, 35, 60, 68, 91, 99, 43, 23, 10, 2]", - "total_badness": 692.74185155 + "ne2d": 414, + "ne3d": 475, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 5, 17, 18, 32, 62, 64, 97, 98, 41, 25, 11, 2]", + "total_badness": 692.44104062 }, { "ne1d": 102, - "ne2d": 144, - "ne3d": 138, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 11, 22, 22, 30, 28, 19, 1]", - "total_badness": 172.99655803 + "ne2d": 146, + "ne3d": 141, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 5, 11, 19, 19, 36, 29, 17, 2]", + "total_badness": 178.07603683 }, { "ne1d": 144, - "ne2d": 248, - "ne3d": 259, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 7, 14, 25, 29, 47, 50, 46, 25, 7]", - "total_badness": 337.75654539 + "ne2d": 250, + "ne3d": 263, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 6, 7, 14, 24, 29, 53, 46, 49, 24, 7]", + "total_badness": 343.8094424 }, { "ne1d": 192, - "ne2d": 412, - "ne3d": 474, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 2, 19, 19, 35, 61, 69, 89, 99, 43, 23, 10, 2]", - "total_badness": 691.25814875 + "ne2d": 414, + "ne3d": 475, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 5, 17, 18, 32, 62, 64, 97, 98, 41, 25, 11, 2]", + "total_badness": 692.44104062 }, { "ne1d": 288, "ne2d": 962, - "ne3d": 1325, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 6, 21, 58, 89, 111, 133, 132, 141, 122, 142, 143, 129, 78, 19]", - "total_badness": 2041.1919863 + "ne3d": 1319, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 6, 23, 53, 86, 121, 144, 127, 143, 121, 140, 143, 115, 80, 15]", + "total_badness": 2042.804049 }, { "ne1d": 480, - "ne2d": 2388, - "ne3d": 6681, - "quality_histogram": "[0, 0, 0, 0, 2, 4, 12, 6, 31, 34, 69, 140, 276, 472, 730, 1096, 1313, 1260, 928, 308]", - "total_badness": 8505.1301083 + "ne2d": 2394, + "ne3d": 6754, + "quality_histogram": "[0, 0, 0, 0, 1, 4, 4, 16, 23, 39, 70, 125, 267, 519, 758, 1077, 1327, 1284, 933, 307]", + "total_badness": 8589.1254463 } ], "shaft.geo": [ { "ne1d": 708, - "ne2d": 1718, - "ne3d": 2723, - "quality_histogram": "[7, 17, 22, 29, 34, 36, 57, 78, 100, 148, 283, 376, 278, 247, 219, 285, 228, 172, 81, 26]", - "total_badness": 5343.3499358 + "ne2d": 1720, + "ne3d": 2738, + "quality_histogram": "[3, 14, 13, 29, 26, 44, 45, 69, 82, 138, 255, 367, 305, 293, 241, 276, 235, 194, 90, 19]", + "total_badness": 5045.4631109 }, { "ne1d": 410, - "ne2d": 604, - "ne3d": 928, - "quality_histogram": "[0, 0, 0, 0, 0, 3, 3, 5, 14, 38, 49, 69, 88, 133, 134, 124, 128, 75, 49, 16]", - "total_badness": 1353.3692968 + "ne2d": 606, + "ne3d": 944, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 4, 6, 18, 27, 44, 62, 84, 115, 151, 141, 153, 90, 35, 13]", + "total_badness": 1357.9934384 }, { "ne1d": 510, "ne2d": 1008, - "ne3d": 2093, - "quality_histogram": "[16, 63, 82, 96, 76, 99, 82, 124, 108, 111, 111, 143, 147, 174, 187, 181, 176, 66, 42, 9]", - "total_badness": 6035.6762331 + "ne3d": 2053, + "quality_histogram": "[1, 64, 78, 75, 79, 85, 82, 111, 114, 105, 117, 139, 132, 178, 203, 198, 171, 74, 37, 10]", + "total_badness": 5482.2474163 }, { "ne1d": 708, - "ne2d": 1718, - "ne3d": 2703, - "quality_histogram": "[0, 4, 9, 8, 26, 26, 65, 65, 82, 150, 268, 404, 295, 251, 234, 289, 229, 185, 85, 28]", - "total_badness": 4626.0082323 + "ne2d": 1720, + "ne3d": 2701, + "quality_histogram": "[0, 1, 3, 8, 12, 26, 32, 40, 73, 134, 268, 412, 312, 274, 252, 278, 239, 208, 100, 29]", + "total_badness": 4395.5679484 }, { "ne1d": 1138, - "ne2d": 4218, - "ne3d": 11164, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 3, 29, 92, 190, 361, 576, 929, 1450, 1802, 2078, 1943, 1307, 401]", - "total_badness": 14449.209478 + "ne2d": 4220, + "ne3d": 11242, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 1, 27, 78, 178, 382, 607, 934, 1459, 1772, 2147, 1927, 1325, 403]", + "total_badness": 14539.392197 }, { "ne1d": 1792, - "ne2d": 10588, - "ne3d": 63419, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 4, 10, 67, 184, 593, 1440, 3345, 6289, 10045, 13306, 14094, 10552, 3488]", - "total_badness": 77657.59067 + "ne2d": 10596, + "ne3d": 63463, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 6, 67, 178, 504, 1410, 3360, 6267, 9934, 13406, 14152, 10706, 3472]", + "total_badness": 77607.549516 } ], "sphere.geo": [ @@ -1175,175 +1175,175 @@ "ne1d": 0, "ne2d": 126, "ne3d": 126, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 28, 46, 29, 15, 0, 2, 0, 0, 0, 0, 0]", - "total_badness": 237.49105852 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 25, 47, 33, 12, 1, 2, 0, 0, 0, 0, 0]", + "total_badness": 237.42979301 }, { "ne1d": 0, "ne2d": 56, "ne3d": 56, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 14, 24, 11, 2, 0]", - "total_badness": 68.823759015 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 18, 19, 15, 0, 0]", + "total_badness": 68.826138928 }, { "ne1d": 0, "ne2d": 72, "ne3d": 72, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 14, 26, 23, 8, 0, 0, 0]", - "total_badness": 97.58858068 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 16, 23, 25, 7, 0, 0, 0]", + "total_badness": 97.673542971 }, { "ne1d": 0, "ne2d": 126, "ne3d": 126, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 28, 46, 29, 15, 0, 2, 0, 0, 0, 0, 0]", - "total_badness": 237.49105852 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 25, 47, 33, 12, 1, 2, 0, 0, 0, 0, 0]", + "total_badness": 237.42979301 }, { "ne1d": 0, "ne2d": 258, - "ne3d": 365, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 8, 21, 36, 47, 55, 52, 32, 40, 28, 22, 15, 9]", - "total_badness": 557.72385462 + "ne3d": 366, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 6, 22, 32, 55, 47, 62, 28, 39, 31, 22, 15, 6]", + "total_badness": 562.00749621 }, { "ne1d": 0, "ne2d": 660, - "ne3d": 2315, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 6, 30, 51, 141, 273, 396, 472, 471, 361, 111]", - "total_badness": 2861.2824595 + "ne3d": 2329, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 10, 28, 76, 158, 282, 415, 502, 433, 327, 91]", + "total_badness": 2913.3426209 } ], "sphereincube.geo": [ { "ne1d": 46, "ne2d": 202, - "ne3d": 495, - "quality_histogram": "[0, 0, 7, 60, 37, 29, 46, 41, 57, 46, 44, 16, 23, 10, 15, 12, 12, 24, 11, 5]", - "total_badness": 1405.0779325 + "ne3d": 490, + "quality_histogram": "[0, 0, 8, 59, 42, 29, 53, 45, 55, 46, 33, 14, 16, 11, 15, 12, 12, 24, 11, 5]", + "total_badness": 1429.7083119 }, { "ne1d": 24, "ne2d": 60, - "ne3d": 187, - "quality_histogram": "[0, 0, 4, 11, 14, 25, 27, 14, 4, 2, 2, 3, 7, 13, 19, 16, 11, 6, 6, 3]", - "total_badness": 493.44997215 + "ne3d": 166, + "quality_histogram": "[0, 0, 5, 12, 14, 15, 31, 10, 2, 1, 3, 2, 7, 9, 13, 13, 14, 10, 4, 1]", + "total_badness": 454.92797775 }, { "ne1d": 30, "ne2d": 116, - "ne3d": 352, - "quality_histogram": "[0, 0, 7, 15, 30, 48, 31, 27, 35, 44, 27, 19, 22, 15, 9, 8, 6, 6, 3, 0]", - "total_badness": 970.12716912 + "ne3d": 332, + "quality_histogram": "[0, 0, 8, 23, 39, 39, 31, 25, 34, 30, 21, 22, 24, 8, 9, 8, 4, 4, 3, 0]", + "total_badness": 970.62581762 }, { "ne1d": 46, "ne2d": 202, - "ne3d": 501, - "quality_histogram": "[0, 0, 4, 44, 27, 20, 51, 40, 68, 51, 51, 21, 20, 17, 17, 16, 15, 23, 11, 5]", - "total_badness": 1303.491863 + "ne3d": 498, + "quality_histogram": "[0, 0, 8, 41, 27, 29, 50, 44, 55, 58, 44, 25, 20, 15, 14, 15, 13, 24, 11, 5]", + "total_badness": 1326.92489 }, { "ne1d": 74, "ne2d": 418, - "ne3d": 1749, - "quality_histogram": "[0, 0, 0, 0, 0, 5, 4, 12, 26, 34, 61, 126, 161, 221, 244, 240, 263, 186, 131, 35]", - "total_badness": 2468.6863723 + "ne3d": 1788, + "quality_histogram": "[0, 0, 0, 0, 0, 6, 6, 21, 28, 38, 73, 98, 167, 212, 252, 272, 258, 202, 111, 44]", + "total_badness": 2540.5253991 }, { "ne1d": 122, "ne2d": 1082, - "ne3d": 14003, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 8, 29, 100, 200, 460, 911, 1478, 2207, 2867, 2900, 2169, 671]", - "total_badness": 17411.619104 + "ne3d": 14039, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 5, 31, 105, 218, 465, 893, 1497, 2202, 2857, 2912, 2179, 674]", + "total_badness": 17464.78638 } ], "torus.geo": [ { "ne1d": 0, "ne2d": 2534, - "ne3d": 5714, - "quality_histogram": "[0, 0, 0, 0, 0, 5, 20, 60, 155, 280, 408, 597, 707, 753, 762, 701, 541, 400, 246, 79]", - "total_badness": 8662.1200343 + "ne3d": 5745, + "quality_histogram": "[0, 0, 0, 0, 0, 4, 19, 59, 148, 286, 440, 581, 679, 796, 742, 668, 583, 418, 238, 84]", + "total_badness": 8709.4458795 }, { "ne1d": 0, "ne2d": 692, - "ne3d": 3096, - "quality_histogram": "[174, 698, 478, 383, 321, 195, 183, 161, 107, 83, 75, 67, 49, 32, 28, 28, 18, 7, 7, 2]", - "total_badness": 24704.214641 + "ne3d": 3181, + "quality_histogram": "[166, 714, 477, 367, 312, 232, 199, 167, 108, 100, 92, 66, 48, 39, 30, 27, 18, 13, 6, 0]", + "total_badness": 24641.250872 }, { "ne1d": 0, "ne2d": 1446, - "ne3d": 2722, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 18, 49, 142, 269, 320, 396, 414, 370, 294, 222, 160, 64]", - "total_badness": 3891.2372171 + "ne3d": 2743, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 14, 62, 135, 247, 356, 403, 430, 384, 298, 200, 152, 59]", + "total_badness": 3928.1549928 }, { "ne1d": 0, "ne2d": 2534, - "ne3d": 5565, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 18, 68, 187, 321, 551, 613, 741, 847, 714, 597, 516, 298, 90]", - "total_badness": 8072.4927096 + "ne3d": 5584, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 27, 78, 171, 346, 509, 649, 760, 771, 771, 646, 472, 283, 100]", + "total_badness": 8111.5941443 }, { "ne1d": 0, - "ne2d": 5892, - "ne3d": 25273, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 8, 34, 127, 400, 875, 1667, 2853, 4059, 5213, 5256, 3667, 1113]", - "total_badness": 31491.532498 + "ne2d": 5894, + "ne3d": 25294, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 9, 32, 149, 417, 947, 1723, 2990, 4145, 5146, 5002, 3604, 1129]", + "total_badness": 31642.969488 }, { "ne1d": 0, - "ne2d": 16286, - "ne3d": 174919, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 30, 126, 410, 1095, 3093, 7938, 16499, 26903, 36715, 40658, 31546, 9902]", - "total_badness": 212371.24291 + "ne2d": 16296, + "ne3d": 175351, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 7, 36, 115, 401, 1106, 3230, 8059, 16480, 27460, 37219, 40628, 30958, 9652]", + "total_badness": 213157.95506 } ], "trafo.geo": [ { "ne1d": 690, - "ne2d": 1682, - "ne3d": 5174, - "quality_histogram": "[3, 4, 2, 6, 7, 24, 43, 53, 118, 191, 297, 326, 455, 561, 646, 718, 596, 538, 447, 139]", - "total_badness": 7745.7698571 + "ne2d": 1684, + "ne3d": 5231, + "quality_histogram": "[0, 2, 2, 2, 8, 24, 37, 50, 114, 203, 267, 363, 472, 583, 649, 706, 623, 527, 462, 137]", + "total_badness": 7683.599832 }, { "ne1d": 390, "ne2d": 522, - "ne3d": 1348, - "quality_histogram": "[0, 0, 3, 17, 12, 37, 76, 125, 124, 143, 166, 124, 148, 108, 84, 89, 45, 35, 10, 2]", - "total_badness": 2736.3657445 + "ne3d": 1353, + "quality_histogram": "[0, 0, 3, 17, 15, 42, 75, 123, 130, 146, 161, 124, 147, 105, 84, 88, 47, 33, 11, 2]", + "total_badness": 2768.022266 }, { "ne1d": 512, "ne2d": 874, - "ne3d": 2401, - "quality_histogram": "[0, 0, 0, 1, 9, 23, 43, 69, 133, 144, 188, 205, 309, 385, 348, 236, 141, 92, 48, 27]", - "total_badness": 3976.5898975 + "ne3d": 2397, + "quality_histogram": "[0, 0, 1, 3, 9, 23, 41, 72, 132, 142, 188, 204, 304, 389, 343, 237, 138, 97, 48, 26]", + "total_badness": 3983.5699098 }, { "ne1d": 690, - "ne2d": 1682, - "ne3d": 5101, - "quality_histogram": "[0, 0, 1, 0, 2, 13, 30, 36, 119, 183, 283, 338, 427, 561, 657, 697, 618, 543, 455, 138]", - "total_badness": 7362.8828691 + "ne2d": 1684, + "ne3d": 5147, + "quality_histogram": "[0, 0, 0, 1, 3, 12, 26, 40, 106, 188, 272, 357, 422, 561, 671, 714, 608, 558, 474, 134]", + "total_badness": 7408.6135626 }, { "ne1d": 1050, - "ne2d": 3810, - "ne3d": 17924, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 7, 24, 46, 81, 198, 556, 1378, 2215, 2473, 2727, 2672, 2656, 2255, 635]", - "total_badness": 23477.047631 + "ne2d": 3808, + "ne3d": 17970, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 5, 31, 38, 74, 194, 563, 1401, 2185, 2352, 2728, 2717, 2634, 2364, 684]", + "total_badness": 23485.93298 }, { "ne1d": 1722, - "ne2d": 10040, - "ne3d": 84573, - "quality_histogram": "[0, 0, 0, 0, 0, 5, 61, 1368, 731, 437, 763, 1424, 2694, 5632, 8974, 13002, 16406, 16573, 12468, 4035]", - "total_badness": 108616.3402 + "ne2d": 10042, + "ne3d": 84747, + "quality_histogram": "[0, 0, 0, 0, 2, 3, 55, 1427, 755, 410, 785, 1297, 2669, 5782, 9188, 13403, 16283, 16509, 12254, 3925]", + "total_badness": 109011.46057 } ], "twobricks.geo": [ @@ -1380,14 +1380,14 @@ "ne2d": 134, "ne3d": 177, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 12, 10, 18, 38, 22, 27, 22, 18, 7]", - "total_badness": 234.47334257 + "total_badness": 234.47359 }, { "ne1d": 186, "ne2d": 342, - "ne3d": 608, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 11, 23, 29, 65, 89, 111, 104, 105, 65, 5]", - "total_badness": 792.94333095 + "ne3d": 601, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 13, 19, 31, 73, 92, 103, 107, 100, 61, 1]", + "total_badness": 787.76550767 } ], "twocubes.geo": [ @@ -1424,58 +1424,58 @@ "ne2d": 134, "ne3d": 177, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 12, 10, 18, 38, 22, 27, 22, 18, 7]", - "total_badness": 234.47334257 + "total_badness": 234.47359 }, { "ne1d": 186, "ne2d": 342, - "ne3d": 608, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 11, 23, 29, 65, 89, 111, 104, 105, 65, 5]", - "total_badness": 792.94333095 + "ne3d": 601, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 13, 19, 31, 73, 92, 103, 107, 100, 61, 1]", + "total_badness": 787.76550767 } ], "twocyl.geo": [ { "ne1d": 144, "ne2d": 408, - "ne3d": 572, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 7, 7, 17, 34, 51, 57, 89, 111, 75, 73, 35, 12, 1]", - "total_badness": 851.35923972 + "ne3d": 576, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 12, 19, 19, 17, 36, 50, 59, 82, 90, 73, 69, 34, 13, 1]", + "total_badness": 901.75131743 }, { "ne1d": 68, "ne2d": 100, "ne3d": 209, "quality_histogram": "[0, 0, 0, 1, 3, 6, 11, 2, 8, 5, 15, 18, 12, 28, 28, 27, 24, 17, 3, 1]", - "total_badness": 357.15502356 + "total_badness": 357.15447323 }, { "ne1d": 102, "ne2d": 238, - "ne3d": 558, - "quality_histogram": "[4, 34, 33, 32, 30, 37, 52, 45, 67, 43, 31, 27, 16, 19, 20, 17, 36, 12, 3, 0]", - "total_badness": 2092.5126876 + "ne3d": 548, + "quality_histogram": "[5, 24, 23, 35, 33, 46, 49, 52, 63, 39, 19, 20, 19, 22, 19, 24, 40, 14, 2, 0]", + "total_badness": 1932.6124156 }, { "ne1d": 144, "ne2d": 408, - "ne3d": 568, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 7, 16, 23, 51, 53, 95, 117, 69, 73, 43, 14, 4]", - "total_badness": 824.30043375 + "ne3d": 576, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 12, 10, 12, 24, 41, 69, 88, 108, 88, 65, 40, 13, 2]", + "total_badness": 853.37034747 }, { "ne1d": 214, "ne2d": 910, - "ne3d": 1914, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 28, 76, 128, 227, 305, 346, 351, 232, 167, 40]", - "total_badness": 2533.9115448 + "ne3d": 1921, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 33, 75, 117, 230, 320, 358, 348, 243, 159, 28]", + "total_badness": 2544.8927759 }, { "ne1d": 350, "ne2d": 2374, - "ne3d": 13491, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 7, 24, 85, 255, 615, 1330, 2192, 2925, 3114, 2247, 695]", - "total_badness": 16437.08459 + "ne3d": 13509, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 11, 29, 98, 286, 655, 1353, 2161, 2913, 3068, 2220, 713]", + "total_badness": 16499.785789 } ] } \ No newline at end of file From 77d91d144bff2bcd350c3a09c3a111a7cab96755 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Fri, 11 Oct 2019 13:07:17 +0200 Subject: [PATCH 051/120] Special search tree for Delaunay (commented out) - float instead of double - Array for leaves instead of HashTable (the values of the tree are contiguous integer numbers) --- libsrc/meshing/delaunay.cpp | 288 +++++++++++++++++++++++++++++++++++- 1 file changed, 284 insertions(+), 4 deletions(-) diff --git a/libsrc/meshing/delaunay.cpp b/libsrc/meshing/delaunay.cpp index 67c455d2..ad8fe9ef 100644 --- a/libsrc/meshing/delaunay.cpp +++ b/libsrc/meshing/delaunay.cpp @@ -1,9 +1,289 @@ #include #include "meshing.hpp" - namespace netgen { + template + class DelaunayTree + { + public: + // Number of entries per leaf + static constexpr int N = 100; + + struct Node; + + struct Leaf + { + Point<2*dim, float> p[N]; + T index[N]; + int n_elements; + int nr; + + Leaf() : n_elements(0) + { } + + + void Add( Array &leaves, Array &leaf_index, const Point<2*dim> &ap, T aindex ) + { + p[n_elements] = ap; + index[n_elements] = aindex; + n_elements++; + if(leaf_index.Size() leaves; + Array leaf_index; + + Point global_min, global_max; + double tol; + size_t n_leaves; + size_t n_nodes; + BlockAllocator ball_nodes; + BlockAllocator ball_leaves; + + public: + + DelaunayTree (const Point & pmin, const Point & pmax) + : global_min(pmin), global_max(pmax), n_leaves(1), n_nodes(1), ball_nodes(sizeof(Node)), ball_leaves(sizeof(Leaf)) + { + root.leaf = (Leaf*) ball_leaves.Alloc(); new (root.leaf) Leaf(); + root.leaf->nr = 0; + leaves.Append(root.leaf); + root.level = 0; + tol = 1e-7 * Dist(pmax, pmin); + } + + DelaunayTree (const Box & box) + : DelaunayTree(box.PMin(), box.PMax()) + { } + + size_t GetNLeaves() + { + return n_leaves; + } + + size_t GetNNodes() + { + return n_nodes; + } + + template + void GetFirstIntersecting (const Point & pmin, const Point & pmax, + TFunc func=[](auto pi){return false;}) const + { + // static Timer timer("DelaunayTree::GetIntersecting"); RegionTimer rt(timer); + // static Timer timer1("DelaunayTree::GetIntersecting-LinearSearch"); + ArrayMem stack; + ArrayMem dir_stack; + + + Point<2*dim> tpmin, tpmax; + + for (size_t i : IntRange(dim)) + { + tpmin(i) = global_min(i); + tpmax(i) = pmax(i)+tol; + + tpmin(i+dim) = pmin(i)-tol; + tpmax(i+dim) = global_max(i); + } + + stack.SetSize(0); + stack.Append(&root); + dir_stack.SetSize(0); + dir_stack.Append(0); + + while(stack.Size()) + { + const Node *node = stack.Last(); + stack.DeleteLast(); + + int dir = dir_stack.Last(); + dir_stack.DeleteLast(); + + if(Leaf *leaf = node->GetLeaf()) + { + // RegionTimer rt1(timer1); + for (auto i : IntRange(leaf->n_elements)) + { + bool intersect = true; + const auto p = leaf->p[i]; + + for (int d = 0; d < dim; d++) + if (p[d] > tpmax[d]) + intersect = false; + for (int d = dim; d < 2*dim; d++) + if (p[d] < tpmin[d]) + intersect = false; + if(intersect) + if(func(leaf->index[i])) return; + } + } + else + { + int newdir = dir+1; + if(newdir==2*dim) newdir = 0; + if (tpmin[dir] <= node->sep) + { + stack.Append(node->children[0]); + dir_stack.Append(newdir); + } + if (tpmax[dir] >= node->sep) + { + stack.Append(node->children[1]); + dir_stack.Append(newdir); + } + } + } + } + + void GetIntersecting (const Point & pmin, const Point & pmax, + NgArray & pis) const + { + pis.SetSize(0); + GetFirstIntersecting(pmin, pmax, [&pis](auto pi) { pis.Append(pi); return false;}); + } + + void Insert (const Box & box, T pi) + { + Insert (box.PMin(), box.PMax(), pi); + } + + void Insert (const Point & pmin, const Point & pmax, T pi) + { + // static Timer timer("DelaunayTree::Insert"); RegionTimer rt(timer); + int dir = 0; + Point<2*dim> p; + for (auto i : IntRange(dim)) + { + p(i) = pmin[i]; + p(i+dim) = pmax[i]; + } + + Node * node = &root; + Leaf * leaf = node->GetLeaf(); + + // search correct leaf to add point + while(!leaf) + { + node = p[dir] < node->sep ? node->children[0] : node->children[1]; + dir++; + if(dir==2*dim) dir = 0; + leaf = node->GetLeaf(); + } + + // add point to leaf + if(leaf->n_elements < N) + leaf->Add(leaves, leaf_index, p,pi); + else // assume leaf->n_elements == N + { + // add two new nodes and one new leaf + int n_elements = leaf->n_elements; + ArrayMem coords(n_elements); + ArrayMem order(n_elements); + + // separate points in two halves, first sort all coordinates in direction dir + for (auto i : IntRange(n_elements)) + { + order[i] = i; + coords[i] = leaf->p[i][dir]; + } + + QuickSortI(coords, order); + int isplit = N/2; + Leaf *leaf1 = (Leaf*) ball_leaves.Alloc(); new (leaf1) Leaf(); + Leaf *leaf2 = (Leaf*) ball_leaves.Alloc(); new (leaf2) Leaf(); + + leaf1->nr = leaf->nr; + leaf2->nr = leaves.Size(); + leaves.Append(leaf2); + leaves[leaf1->nr] = leaf1; + + for (auto i : order.Range(isplit)) + leaf1->Add(leaves, leaf_index, leaf->p[i], leaf->index[i] ); + for (auto i : order.Range(isplit, N)) + leaf2->Add(leaves, leaf_index, leaf->p[i], leaf->index[i] ); + + Node *node1 = (Node*) ball_nodes.Alloc(); new (node1) Node(); + node1->leaf = leaf1; + node1->level = node->level+1; + + Node *node2 = (Node*) ball_nodes.Alloc(); new (node2) Node(); + node2->leaf = leaf2; + node2->level = node->level+1; + + node->children[0] = node1; + node->children[1] = node2; + node->sep = 0.5 * (leaf->p[order[isplit-1]][dir] + leaf->p[order[isplit]][dir]); + + // add new point to one of the new leaves + if (p[dir] < node->sep) + leaf1->Add( leaves, leaf_index, p, pi ); + else + leaf2->Add( leaves, leaf_index, p, pi ); + + ball_leaves.Free(leaf); + n_leaves++; + n_nodes+=2; + } + } + + void DeleteElement (T pi) + { + // static Timer timer("DelaunayTree::DeleteElement"); RegionTimer rt(timer); + Leaf *leaf = leaves[leaf_index[pi]]; + leaf_index[pi] = -1; + auto & n_elements = leaf->n_elements; + auto & index = leaf->index; + auto & p = leaf->p; + + for (auto i : IntRange(n_elements)) + { + if(index[i] == pi) + { + n_elements--; + if(i!=n_elements) + { + index[i] = index[n_elements]; + p[i] = p[n_elements]; + } + return; + } + } + } + }; + + // typedef BoxTree<3> DTREE; + typedef DelaunayTree<3> DTREE; static const int deltetfaces[][3] = { { 1, 2, 3 }, @@ -227,14 +507,14 @@ namespace netgen void AddDelaunayPoint (PointIndex newpi, const Point3d & newp, NgArray & tempels, Mesh & mesh, - BoxTree<3> & tettree, + DTREE & tettree, MeshNB & meshnb, NgArray > & centers, NgArray & radi2, NgArray & connected, NgArray & treesearch, NgArray & freelist, SphereList & list, IndexSet & insphere, IndexSet & closesphere) { - static Timer t("Meshing3::AddDelaunayPoint"); RegionTimer reg(t); + static Timer t("Meshing3::AddDelaunayPoint");// RegionTimer reg(t); // static Timer tsearch("addpoint, search"); // static Timer tinsert("addpoint, insert"); @@ -635,7 +915,7 @@ namespace netgen pmin2 = pmin2 + 0.1 * (pmin2 - pmax2); pmax2 = pmax2 + 0.1 * (pmax2 - pmin2); - BoxTree<3> tettree(pmin2, pmax2); + DTREE tettree(pmin2, pmax2); tempels.Append (startel); From 77e536746e5627e68e96c03eb403ea9dfc059faf Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Fri, 11 Oct 2019 13:47:39 +0200 Subject: [PATCH 052/120] Comment out DelaunayTree --- libsrc/meshing/delaunay.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/meshing/delaunay.cpp b/libsrc/meshing/delaunay.cpp index ad8fe9ef..cc850219 100644 --- a/libsrc/meshing/delaunay.cpp +++ b/libsrc/meshing/delaunay.cpp @@ -282,8 +282,8 @@ namespace netgen } }; - // typedef BoxTree<3> DTREE; - typedef DelaunayTree<3> DTREE; + typedef BoxTree<3> DTREE; + // typedef DelaunayTree<3> DTREE; static const int deltetfaces[][3] = { { 1, 2, 3 }, From 5fffc28de9375265794f359944dfe68697486843 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Fri, 11 Oct 2019 15:35:55 +0200 Subject: [PATCH 053/120] Delete tempels Array during SwapImprove (saves memory) --- libsrc/meshing/delaunay.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libsrc/meshing/delaunay.cpp b/libsrc/meshing/delaunay.cpp index cc850219..2bf1f674 100644 --- a/libsrc/meshing/delaunay.cpp +++ b/libsrc/meshing/delaunay.cpp @@ -1078,6 +1078,7 @@ namespace netgen tempmesh.AddVolumeElement (el); } + tempels.DeleteAll(); MeshQuality3d (tempmesh); @@ -1132,6 +1133,7 @@ namespace netgen MeshQuality3d (tempmesh); + tempels.SetSize(tempmesh.GetNE()); tempels.SetSize(0); for (auto & el : tempmesh.VolumeElements()) tempels.Append (el); From 2bd9acdd9ece0404470f40d0135e7812412edc5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joachim=20Sch=C3=B6berl?= Date: Fri, 11 Oct 2019 22:23:14 +0200 Subject: [PATCH 054/120] delete user-vis --- libsrc/visualization/vssolution.cpp | 5 +++++ libsrc/visualization/vssolution.hpp | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/libsrc/visualization/vssolution.cpp b/libsrc/visualization/vssolution.cpp index eb0bb8a1..2a61662b 100644 --- a/libsrc/visualization/vssolution.cpp +++ b/libsrc/visualization/vssolution.cpp @@ -29,6 +29,11 @@ namespace netgen // vssolution.AddUserVisualizationObject (vis); GetVSSolution().AddUserVisualizationObject (vis); } + void DeleteUserVisualizationObject (UserVisualizationObject * vis) + { + // vssolution.AddUserVisualizationObject (vis); + GetVSSolution().DeleteUserVisualizationObject (vis); + } VisualSceneSolution :: SolData :: SolData () diff --git a/libsrc/visualization/vssolution.hpp b/libsrc/visualization/vssolution.hpp index 1fa815f8..e10c8762 100644 --- a/libsrc/visualization/vssolution.hpp +++ b/libsrc/visualization/vssolution.hpp @@ -233,7 +233,12 @@ public: { user_vis.Append (vis); } - + void DeleteUserVisualizationObject (UserVisualizationObject * vis) + { + int pos = user_vis.Pos(vis); + if (pos >= 0) + user_vis.Delete(pos); + } private: void GetClippingPlaneTrigs (NgArray & trigs, NgArray & pts); From c9e764a32fc37136d5928ae35808623211478e23 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 14 Oct 2019 10:56:27 +0200 Subject: [PATCH 055/120] Catch exceptions in Demangle() --- libsrc/core/utils.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/libsrc/core/utils.cpp b/libsrc/core/utils.cpp index 4033a6eb..bf355bc1 100644 --- a/libsrc/core/utils.cpp +++ b/libsrc/core/utils.cpp @@ -15,10 +15,22 @@ namespace ngcore // windows does demangling in typeid(T).name() NGCORE_API std::string Demangle(const char* typeinfo) { return typeinfo; } #else - NGCORE_API std::string Demangle(const char* typeinfo) { int status; return abi::__cxa_demangle(typeinfo, - nullptr, - nullptr, - &status); } + NGCORE_API std::string Demangle(const char* typeinfo) + { + int status=0; + try + { + char *s = abi::__cxa_demangle(typeinfo, nullptr, nullptr, &status); + std::string result{s}; + free(s); + return result; + } + catch( const std::exception & e ) + { + GetLogger("utils")->warn("{}:{} cannot demangle {}, status: {}, error:{}", __FILE__, __LINE__, typeinfo, status, e.what()); + } + return typeinfo; + } #endif double seconds_per_tick = [] () noexcept From c1d42ff1e67a6f43f547e775b29cc4dcc913a6f0 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Sun, 13 Oct 2019 12:27:29 +0200 Subject: [PATCH 056/120] Small cleanup --- libsrc/meshing/improve2.cpp | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index 759fc09a..1efeb26e 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -597,17 +597,14 @@ namespace netgen } bad1 /= (hasonepi.Size()+hasbothpi.Size()); - MeshPoint p1 = mesh[pi1]; - MeshPoint p2 = mesh[pi2]; - - MeshPoint pnew = p1; - mesh[pi1] = pnew; - mesh[pi2] = pnew; - double bad2 = 0; for (int k = 0; k < hasonepi.Size(); k++) { - Element2d & el = mesh[hasonepi[k]]; + Element2d el = mesh[hasonepi[k]]; + for (auto i : Range(3)) + if(el[i]==pi2) + el[i] = pi1; + double err = CalcTriangleBadness (mesh[el[0]], mesh[el[1]], mesh[el[2]], nv, -1, loch); @@ -624,17 +621,10 @@ namespace netgen if ( (normals[el[l]] * nv) < 0.5) bad2 += 1e10; - Element2d el1 = el; - for (auto i : Range(3)) - if(el1[i]==pi2) - el1[i] = pi1; - illegal2 += 1-mesh.LegalTrig(el1); + illegal2 += 1-mesh.LegalTrig(el); } bad2 /= hasonepi.Size(); - mesh[pi1] = p1; - mesh[pi2] = p2; - if (debugflag) { (*testout) << "bad1 = " << bad1 << ", bad2 = " << bad2 << endl; @@ -657,7 +647,6 @@ namespace netgen (*testout) << "loch = " << loch << endl; */ - mesh[pi1] = pnew; PointGeomInfo gi; // bool gi_set(false); From 59c355dbedfbc20666426ccccccb8ed7dd250475 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 14 Oct 2019 11:28:29 +0200 Subject: [PATCH 057/120] New Table for elementsonnode --- libsrc/meshing/improve2.cpp | 11 ++--- tests/pytest/results.json | 90 ++++++++++++++++++------------------- 2 files changed, 48 insertions(+), 53 deletions(-) diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index 1efeb26e..4168eced 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -406,15 +406,12 @@ namespace netgen int np = mesh.GetNP(); - TABLE elementsonnode(np); + auto elementsonnode = mesh.CreatePoint2SurfaceElementTable(faceindex); Array hasonepi, hasbothpi; - for (SurfaceElementIndex sei : seia) - for (PointIndex pi : mesh[sei].PNums<3>()) - elementsonnode.Add (pi, sei); - Array fixed(np); - fixed = false; + ParallelFor( fixed.Range(), [&fixed] (auto i) NETGEN_LAMBDA_INLINE + { fixed[i] = false; }); timerstart1.Stop(); @@ -688,8 +685,6 @@ namespace netgen if (el.IsDeleted()) continue; if (el.PNums().Contains(pi1)) continue; - elementsonnode.Add (pi1, sei2); - for (auto l : Range(el.GetNP())) { if (el[l] == pi2) diff --git a/tests/pytest/results.json b/tests/pytest/results.json index 840d9c09..8ea14c99 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -609,10 +609,10 @@ }, { "ne1d": 388, - "ne2d": 6128, - "ne3d": 54910, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 13, 28, 124, 330, 933, 2421, 5072, 8328, 11652, 13004, 9765, 3238]", - "total_badness": 66567.884044 + "ne2d": 6122, + "ne3d": 55722, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 6, 38, 128, 339, 950, 2397, 5110, 8516, 11890, 13275, 9802, 3270]", + "total_badness": 67535.530354 } ], "fichera.geo": [ @@ -662,17 +662,17 @@ "frame.step": [ { "ne1d": 12694, - "ne2d": 40418, - "ne3d": 221338, - "quality_histogram": "[3, 8, 6, 9, 9, 49, 278, 724, 1782, 3522, 6397, 10742, 17468, 25554, 32460, 35629, 35018, 28948, 18116, 4616]", - "total_badness": 302031.17747 + "ne2d": 40416, + "ne3d": 221405, + "quality_histogram": "[3, 8, 6, 9, 7, 44, 262, 749, 1716, 3507, 6238, 10976, 17443, 25686, 32253, 35719, 35307, 29272, 17591, 4609]", + "total_badness": 302085.09767 }, { "ne1d": 6026, "ne2d": 11302, - "ne3d": 30643, - "quality_histogram": "[4, 5, 3, 11, 21, 51, 105, 281, 690, 1063, 1703, 2717, 3365, 4271, 4573, 4231, 3360, 2466, 1371, 352]", - "total_badness": 45609.34772 + "ne3d": 30676, + "quality_histogram": "[4, 5, 3, 10, 20, 48, 102, 279, 686, 1070, 1686, 2721, 3426, 4284, 4537, 4238, 3396, 2444, 1366, 351]", + "total_badness": 45646.217472 }, { "ne1d": 9704, @@ -812,10 +812,10 @@ }, { "ne1d": 106, - "ne2d": 600, - "ne3d": 1968, - "quality_histogram": "[0, 5, 28, 76, 118, 178, 153, 174, 160, 166, 194, 193, 159, 120, 80, 52, 39, 39, 25, 9]", - "total_badness": 4972.5229136 + "ne2d": 604, + "ne3d": 1987, + "quality_histogram": "[0, 1, 28, 89, 120, 160, 190, 186, 176, 194, 157, 174, 155, 100, 78, 66, 35, 42, 28, 8]", + "total_badness": 5044.7201931 }, { "ne1d": 132, @@ -930,10 +930,10 @@ "period.geo": [ { "ne1d": 344, - "ne2d": 1134, - "ne3d": 3267, - "quality_histogram": "[0, 0, 0, 0, 0, 5, 19, 28, 65, 121, 198, 292, 368, 446, 463, 423, 367, 278, 161, 33]", - "total_badness": 4843.6173488 + "ne2d": 1132, + "ne3d": 3242, + "quality_histogram": "[0, 0, 0, 0, 0, 4, 20, 25, 63, 123, 211, 275, 361, 416, 443, 425, 380, 293, 164, 39]", + "total_badness": 4791.9180684 }, { "ne1d": 160, @@ -951,10 +951,10 @@ }, { "ne1d": 344, - "ne2d": 1134, - "ne3d": 3217, - "quality_histogram": "[0, 0, 0, 0, 0, 4, 19, 22, 57, 93, 174, 264, 337, 423, 484, 443, 399, 282, 178, 38]", - "total_badness": 4690.0482354 + "ne2d": 1132, + "ne3d": 3191, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 18, 25, 55, 91, 178, 254, 353, 408, 438, 427, 424, 302, 170, 45]", + "total_badness": 4645.0669687 }, { "ne1d": 480, @@ -981,10 +981,10 @@ }, { "ne1d": 572, - "ne2d": 1152, - "ne3d": 1651, - "quality_histogram": "[4, 28, 36, 49, 61, 74, 97, 126, 147, 171, 148, 134, 113, 127, 124, 77, 71, 31, 25, 8]", - "total_badness": 4245.4288615 + "ne2d": 1146, + "ne3d": 1642, + "quality_histogram": "[4, 26, 39, 50, 60, 78, 99, 124, 148, 159, 146, 135, 122, 121, 117, 79, 69, 36, 24, 6]", + "total_badness": 4241.9527878 }, { "ne1d": 724, @@ -1032,10 +1032,10 @@ }, { "ne1d": 240, - "ne2d": 1816, - "ne3d": 4027, - "quality_histogram": "[0, 0, 1, 7, 19, 34, 47, 57, 122, 235, 374, 450, 506, 500, 463, 421, 355, 235, 153, 48]", - "total_badness": 6472.3221213 + "ne2d": 1812, + "ne3d": 3906, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 12, 24, 94, 183, 308, 456, 547, 508, 494, 444, 355, 272, 158, 49]", + "total_badness": 5935.9395673 }, { "ne1d": 320, @@ -1046,26 +1046,26 @@ }, { "ne1d": 480, - "ne2d": 6844, - "ne3d": 32967, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 16, 75, 291, 699, 1397, 2614, 4171, 5653, 6522, 6079, 4257, 1190]", - "total_badness": 41783.076303 + "ne2d": 6848, + "ne3d": 32874, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 14, 61, 265, 670, 1455, 2541, 4214, 5494, 6532, 5977, 4399, 1249]", + "total_badness": 41605.598389 }, { "ne1d": 800, "ne2d": 17866, "ne3d": 202729, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 6, 42, 144, 537, 1505, 4365, 10380, 20189, 31903, 42471, 45652, 34935, 10600]", - "total_badness": 247665.22181 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 5, 40, 144, 535, 1500, 4356, 10392, 20188, 31941, 42409, 45674, 34933, 10612]", + "total_badness": 247652.11378 } ], "screw.step": [ { "ne1d": 400, - "ne2d": 1436, - "ne3d": 2459, - "quality_histogram": "[0, 0, 0, 0, 1, 0, 16, 80, 88, 171, 190, 245, 276, 299, 270, 272, 223, 184, 110, 34]", - "total_badness": 3860.2528363 + "ne2d": 1432, + "ne3d": 2448, + "quality_histogram": "[0, 0, 0, 0, 1, 1, 14, 85, 91, 169, 198, 250, 259, 289, 265, 245, 227, 224, 102, 28]", + "total_badness": 3851.1301093 }, { "ne1d": 530, @@ -1076,10 +1076,10 @@ }, { "ne1d": 668, - "ne2d": 4998, - "ne3d": 31493, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 9, 17, 53, 123, 356, 776, 1790, 3291, 5171, 6636, 6761, 4947, 1560]", - "total_badness": 38849.392612 + "ne2d": 5002, + "ne3d": 31622, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 6, 13, 43, 96, 269, 788, 1790, 3249, 5163, 6715, 6912, 5008, 1567]", + "total_badness": 38905.366168 } ], "sculpture.geo": [ From 19c86a9f3d0ba962c4b61ef25fa6b195c5e430c8 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 14 Oct 2019 13:50:56 +0200 Subject: [PATCH 058/120] Move BuildEdgeList to improve2.hpp --- libsrc/meshing/improve2.hpp | 55 +++++++++++++++++++++++++++++++++++++ libsrc/meshing/improve3.cpp | 54 ------------------------------------ libsrc/meshing/improve3.hpp | 2 -- 3 files changed, 55 insertions(+), 56 deletions(-) diff --git a/libsrc/meshing/improve2.hpp b/libsrc/meshing/improve2.hpp index 03ff5559..bc4ad00d 100644 --- a/libsrc/meshing/improve2.hpp +++ b/libsrc/meshing/improve2.hpp @@ -1,6 +1,61 @@ #ifndef FILE_IMPROVE2 #define FILE_IMPROVE2 +template +void BuildEdgeList( const Mesh & mesh, const Table & elementsonnode, Array> & edges ) +{ + static Timer tbuild_edges("Build edges"); RegionTimer reg(tbuild_edges); + + static constexpr int tetedges[6][2] = + { { 0, 1 }, { 0, 2 }, { 0, 3 }, + { 1, 2 }, { 1, 3 }, { 2, 3 } }; + + int ntasks = 2*ngcore::TaskManager::GetMaxThreads(); + Array>> task_edges(ntasks); + + ParallelFor(IntRange(ntasks), [&] (int ti) + { + auto myrange = mesh.Points().Range().Split(ti, ntasks); + ArrayMem, 100> local_edges; + for (auto pi : myrange) + { + local_edges.SetSize(0); + + for(auto ei : elementsonnode[pi]) + { + const auto & elem = mesh[ei]; + if (elem.IsDeleted()) continue; + + for (int j = 0; j < 6; j++) + { + PointIndex pi0 = elem[tetedges[j][0]]; + PointIndex pi1 = elem[tetedges[j][1]]; + if (pi1 < pi0) Swap(pi0, pi1); + if(pi0==pi) + local_edges.Append(std::make_tuple(pi0, pi1)); + } + } + QuickSort(local_edges); + + auto edge_prev = std::make_tuple(-1,-1); + + for(auto edge : local_edges) + if(edge != edge_prev) + { + task_edges[ti].Append(edge); + edge_prev = edge; + } + } + }, ntasks); + + int num_edges = 0; + for (auto & edg : task_edges) + num_edges += edg.Size(); + edges.SetAllocSize(num_edges); + for (auto & edg : task_edges) + edges.Append(edg); +} + class Neighbour { diff --git a/libsrc/meshing/improve3.cpp b/libsrc/meshing/improve3.cpp index e5ee4e03..8400e541 100644 --- a/libsrc/meshing/improve3.cpp +++ b/libsrc/meshing/improve3.cpp @@ -409,60 +409,6 @@ void MeshOptimize3d :: CombineImproveSequential (Mesh & mesh, multithread.task = savetask; } -void MeshOptimize3d :: BuildEdgeList( const Mesh & mesh, const Table & elementsonnode, Array> & edges ) -{ - static Timer tbuild_edges("Build edges"); RegionTimer reg(tbuild_edges); - - static constexpr int tetedges[6][2] = - { { 0, 1 }, { 0, 2 }, { 0, 3 }, - { 1, 2 }, { 1, 3 }, { 2, 3 } }; - - int ntasks = 2*ngcore::TaskManager::GetMaxThreads(); - Array>> task_edges(ntasks); - - ParallelFor(IntRange(ntasks), [&] (int ti) - { - auto myrange = mesh.Points().Range().Split(ti, ntasks); - ArrayMem, 100> local_edges; - for (auto pi : myrange) - { - local_edges.SetSize(0); - - for(auto ei : elementsonnode[pi]) - { - const Element & elem = mesh[ei]; - if (elem.IsDeleted()) continue; - - for (int j = 0; j < 6; j++) - { - PointIndex pi0 = elem[tetedges[j][0]]; - PointIndex pi1 = elem[tetedges[j][1]]; - if (pi1 < pi0) Swap(pi0, pi1); - if(pi0==pi) - local_edges.Append(std::make_tuple(pi0, pi1)); - } - } - QuickSort(local_edges); - - auto edge_prev = std::make_tuple(-1,-1); - - for(auto edge : local_edges) - if(edge != edge_prev) - { - task_edges[ti].Append(edge); - edge_prev = edge; - } - } - }, ntasks); - - int num_edges = 0; - for (auto & edg : task_edges) - num_edges += edg.Size(); - edges.SetAllocSize(num_edges); - for (auto & edg : task_edges) - edges.Append(edg); -} - void MeshOptimize3d :: CombineImprove (Mesh & mesh, OPTIMIZEGOAL goal) { diff --git a/libsrc/meshing/improve3.hpp b/libsrc/meshing/improve3.hpp index 7507b64a..21fdcce6 100644 --- a/libsrc/meshing/improve3.hpp +++ b/libsrc/meshing/improve3.hpp @@ -12,8 +12,6 @@ class MeshOptimize3d { const MeshingParameters & mp; - void BuildEdgeList( const Mesh & mesh, const Table & elementsonnode, Array> & edges ); - public: MeshOptimize3d (const MeshingParameters & amp) : mp(amp) { ; } From 9fd4970614de3a4febb08e32a22ece20da924210 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 14 Oct 2019 13:51:25 +0200 Subject: [PATCH 059/120] ParallelFor loops in setup of CombineImprove() --- libsrc/meshing/improve2.cpp | 77 +++++++++++++++---------------------- 1 file changed, 32 insertions(+), 45 deletions(-) diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index 4168eced..16c80f67 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -409,61 +409,48 @@ namespace netgen auto elementsonnode = mesh.CreatePoint2SurfaceElementTable(faceindex); Array hasonepi, hasbothpi; + int ntasks = ngcore::TaskManager::GetMaxThreads(); + Array> edges; + + BuildEdgeList( mesh, elementsonnode, edges ); + Array fixed(np); ParallelFor( fixed.Range(), [&fixed] (auto i) NETGEN_LAMBDA_INLINE { fixed[i] = false; }); + ParallelFor( edges.Range(), [&] (auto i) NETGEN_LAMBDA_INLINE + { + auto [pi0, pi1] = edges[i]; + if (mesh.IsSegment (pi0, pi1)) + { + fixed[pi0] = true; + fixed[pi1] = true; + } + }); + timerstart1.Stop(); - /* - for (SegmentIndex si = 0; si < mesh.GetNSeg(); si++) - { - INDEX_2 i2(mesh[si][0], mesh[si][1]); - fixed[i2.I1()] = true; - fixed[i2.I2()] = true; - } - */ - - for (SurfaceElementIndex sei : seia) - { - Element2d & sel = mesh[sei]; - for (int j = 0; j < sel.GetNP(); j++) - { - PointIndex pi1 = sel.PNumMod(j+2); - PointIndex pi2 = sel.PNumMod(j+3); - if (mesh.IsSegment (pi1, pi2)) - { - fixed[pi1] = true; - fixed[pi2] = true; - } - } - } - - - /* - for(int i = 0; i < mesh.LockedPoints().Size(); i++) - fixed[mesh.LockedPoints()[i]] = true; - */ - for (PointIndex pi : mesh.LockedPoints()) - fixed[pi] = true; + ParallelFor( mesh.LockedPoints().Range(), [&] (auto i) NETGEN_LAMBDA_INLINE + { + fixed[mesh.LockedPoints()[i]] = true; + }); Array,PointIndex> normals(np); - // for (PointIndex pi = mesh.Points().Begin(); pi < mesh.Points().End(); pi++) - for (PointIndex pi : mesh.Points().Range()) - { - if (elementsonnode[pi].Size()) - { - Element2d & hel = mesh[elementsonnode[pi][0]]; - for (int k = 0; k < 3; k++) - if (hel[k] == pi) - { - GetNormalVector (surfnr, mesh[pi], hel.GeomInfoPi(k+1), normals[pi]); - break; - } - } - } + ParallelFor( mesh.Points().Range(), [&] (auto pi) NETGEN_LAMBDA_INLINE + { + if (elementsonnode[pi].Size()) + { + Element2d & hel = mesh[elementsonnode[pi][0]]; + for (int k = 0; k < 3; k++) + if (hel[k] == pi) + { + GetNormalVector (surfnr, mesh[pi], hel.GeomInfoPi(k+1), normals[pi]); + break; + } + } + }); timerstart.Stop(); From 294fbb0e6f4a8686aae70bfd647e5f8309c1f95c Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 14 Oct 2019 14:04:10 +0200 Subject: [PATCH 060/120] Loop over edges in CombineImprove() --- libsrc/meshing/improve2.cpp | 12 +- tests/pytest/results.json | 672 ++++++++++++++++++------------------ 2 files changed, 341 insertions(+), 343 deletions(-) diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index 16c80f67..91e72a25 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -454,16 +454,11 @@ namespace netgen timerstart.Stop(); - for (int i = 0; i < seia.Size(); i++) + for (auto e : edges) { - SurfaceElementIndex sei = seia[i]; - Element2d & elem = mesh[sei]; + auto [pi1, pi2] = e; - for (int j = 0; j < 3; j++) { - if (elem.IsDeleted()) continue; - PointIndex pi1 = elem[j]; - PointIndex pi2 = elem[(j+1) % 3]; /* if (pi1 < PointIndex::BASE || @@ -534,6 +529,9 @@ namespace netgen } } + if(hasbothpi.Size()==0) + continue; + Element2d & hel = mesh[hasbothpi[0]]; for (int k = 0; k < 3; k++) diff --git a/tests/pytest/results.json b/tests/pytest/results.json index 8ea14c99..b8c82e94 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -37,10 +37,10 @@ }, { "ne1d": 181, - "ne2d": 323, - "ne3d": 506, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 13, 38, 53, 70, 87, 82, 85, 53, 16]", - "total_badness": 658.05677789 + "ne2d": 325, + "ne3d": 528, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 19, 38, 53, 74, 80, 99, 85, 63, 9]", + "total_badness": 687.31675405 } ], "boxcyl.geo": [ @@ -82,18 +82,18 @@ { "ne1d": 456, "ne2d": 2496, - "ne3d": 18676, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 14, 43, 121, 339, 829, 1665, 2855, 4035, 4403, 3226, 1144]", - "total_badness": 22663.154052 + "ne3d": 18713, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 10, 39, 127, 338, 795, 1684, 2888, 4053, 4409, 3223, 1146]", + "total_badness": 22695.778021 } ], "circle_on_cube.geo": [ { "ne1d": 94, - "ne2d": 172, - "ne3d": 611, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 5, 8, 15, 20, 67, 69, 87, 106, 85, 91, 47, 7]", - "total_badness": 833.76226351 + "ne2d": 170, + "ne3d": 637, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 4, 5, 18, 38, 54, 74, 84, 109, 110, 73, 55, 12]", + "total_badness": 863.74076861 }, { "ne1d": 40, @@ -104,31 +104,31 @@ }, { "ne1d": 62, - "ne2d": 94, - "ne3d": 185, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 7, 12, 31, 26, 37, 27, 19, 13, 9, 0]", - "total_badness": 264.61885227 + "ne2d": 96, + "ne3d": 196, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 8, 8, 27, 34, 42, 33, 20, 9, 6, 1]", + "total_badness": 282.75693303 }, { "ne1d": 94, - "ne2d": 172, - "ne3d": 594, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 9, 23, 46, 62, 85, 95, 102, 110, 47, 11]", - "total_badness": 781.40870801 + "ne2d": 170, + "ne3d": 622, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 12, 26, 39, 80, 70, 113, 112, 93, 62, 10]", + "total_badness": 821.68699443 }, { "ne1d": 138, "ne2d": 384, - "ne3d": 2055, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 13, 28, 89, 146, 234, 357, 406, 415, 285, 75]", - "total_badness": 2580.6652097 + "ne3d": 2028, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 9, 28, 67, 157, 250, 347, 419, 398, 261, 88]", + "total_badness": 2540.7133216 }, { "ne1d": 224, - "ne2d": 942, - "ne3d": 12027, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 15, 81, 205, 552, 1148, 1969, 2490, 2768, 2175, 617]", - "total_badness": 14618.673513 + "ne2d": 944, + "ne3d": 11860, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 29, 85, 211, 518, 1135, 1851, 2527, 2686, 2118, 688]", + "total_badness": 14411.259826 } ], "cone.geo": [ @@ -250,17 +250,17 @@ }, { "ne1d": 378, - "ne2d": 1410, - "ne3d": 7638, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 41, 105, 277, 549, 947, 1322, 1539, 1544, 998, 307]", - "total_badness": 9567.7509778 + "ne2d": 1412, + "ne3d": 7741, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 11, 17, 64, 139, 294, 516, 862, 1328, 1545, 1486, 1147, 331]", + "total_badness": 9711.521562 }, { "ne1d": 624, "ne2d": 3944, - "ne3d": 38297, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 18, 41, 131, 332, 847, 2080, 3865, 5988, 7892, 8533, 6475, 2093]", - "total_badness": 46909.566762 + "ne3d": 38347, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 18, 40, 131, 351, 853, 2070, 3906, 6037, 7925, 8484, 6438, 2092]", + "total_badness": 47000.212862 } ], "cubeandspheres.geo": [ @@ -276,7 +276,7 @@ "ne2d": 150, "ne3d": 100, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 7, 10, 16, 18, 15, 17, 6, 5, 4, 0]", - "total_badness": 146.64421411 + "total_badness": 146.6468601 }, { "ne1d": 144, @@ -294,105 +294,105 @@ }, { "ne1d": 264, - "ne2d": 388, - "ne3d": 366, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 4, 21, 28, 39, 47, 52, 37, 58, 40, 25, 10, 2]", - "total_badness": 550.50109911 + "ne2d": 390, + "ne3d": 369, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 5, 19, 26, 42, 46, 49, 41, 53, 45, 27, 10, 2]", + "total_badness": 554.2808696 }, { "ne1d": 428, "ne2d": 926, - "ne3d": 1075, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 24, 51, 36, 104, 145, 96, 119, 157, 156, 70, 62, 31, 22]", - "total_badness": 1676.1706223 + "ne3d": 1074, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 23, 52, 36, 108, 136, 97, 114, 160, 162, 66, 63, 32, 22]", + "total_badness": 1676.2593956 } ], "cubemcyl.geo": [ { "ne1d": 142, "ne2d": 2488, - "ne3d": 20762, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 29, 90, 197, 401, 710, 1179, 1822, 2485, 3183, 3202, 3161, 2520, 1421, 360]", - "total_badness": 28767.588956 + "ne3d": 20835, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 28, 93, 206, 422, 722, 1146, 1822, 2545, 3153, 3286, 3135, 2461, 1439, 375]", + "total_badness": 28896.677361 }, { "ne1d": 64, "ne2d": 644, - "ne3d": 3315, - "quality_histogram": "[0, 0, 0, 0, 0, 3, 7, 15, 36, 73, 135, 230, 355, 463, 549, 546, 429, 268, 165, 41]", - "total_badness": 4730.5709115 + "ne3d": 3351, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 9, 9, 32, 59, 131, 238, 363, 472, 548, 547, 437, 297, 173, 34]", + "total_badness": 4754.2892871 }, { "ne1d": 102, - "ne2d": 1400, - "ne3d": 8334, - "quality_histogram": "[0, 0, 0, 0, 0, 3, 6, 22, 85, 144, 337, 565, 905, 1167, 1322, 1295, 1095, 769, 485, 134]", - "total_badness": 11752.339923 + "ne2d": 1402, + "ne3d": 8234, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 12, 30, 67, 143, 309, 586, 856, 1050, 1271, 1291, 1179, 825, 462, 151]", + "total_badness": 11552.618825 }, { "ne1d": 142, "ne2d": 2488, - "ne3d": 19379, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 6, 32, 92, 230, 494, 1181, 1947, 2801, 3461, 3525, 3130, 1945, 535]", - "total_badness": 25177.816848 + "ne3d": 19480, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 7, 31, 97, 233, 526, 1186, 1978, 2941, 3443, 3496, 3088, 1914, 539]", + "total_badness": 25362.425666 }, { "ne1d": 210, - "ne2d": 5506, - "ne3d": 88647, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 27, 112, 355, 1028, 2468, 5697, 9855, 14883, 18353, 18556, 13360, 3952]", - "total_badness": 109878.73629 + "ne2d": 5508, + "ne3d": 88767, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 26, 120, 352, 982, 2386, 5436, 9851, 14528, 18286, 19003, 13703, 4092]", + "total_badness": 109764.47526 }, { "ne1d": 362, - "ne2d": 15120, - "ne3d": 524047, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 31, 117, 380, 1130, 3298, 9108, 23604, 49533, 81227, 111104, 122316, 92954, 29239]", - "total_badness": 636472.03769 + "ne2d": 15122, + "ne3d": 524413, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 23, 86, 347, 1131, 3167, 9094, 23844, 49271, 81498, 111440, 122044, 93488, 28977]", + "total_badness": 636787.56071 } ], "cubemsphere.geo": [ { "ne1d": 90, - "ne2d": 698, - "ne3d": 4934, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 11, 37, 72, 119, 189, 298, 467, 659, 707, 703, 683, 557, 330, 100]", - "total_badness": 6958.9504342 + "ne2d": 702, + "ne3d": 4867, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 5, 17, 43, 80, 172, 274, 422, 600, 765, 725, 748, 588, 317, 111]", + "total_badness": 6717.4363413 }, { "ne1d": 44, - "ne2d": 272, - "ne3d": 745, - "quality_histogram": "[0, 0, 0, 0, 1, 4, 5, 17, 29, 49, 77, 86, 100, 93, 92, 70, 54, 42, 21, 5]", - "total_badness": 1204.1731602 + "ne2d": 278, + "ne3d": 784, + "quality_histogram": "[0, 0, 0, 0, 1, 4, 8, 22, 44, 59, 70, 79, 102, 109, 97, 65, 50, 42, 24, 8]", + "total_badness": 1282.4153699 }, { "ne1d": 68, - "ne2d": 398, - "ne3d": 1558, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 13, 20, 51, 111, 165, 255, 254, 221, 231, 150, 64, 20]", - "total_badness": 2188.2669021 + "ne2d": 402, + "ne3d": 1584, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 9, 25, 62, 126, 170, 221, 284, 265, 214, 129, 61, 16]", + "total_badness": 2237.5355054 }, { "ne1d": 90, - "ne2d": 698, - "ne3d": 4640, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 8, 38, 72, 173, 303, 491, 698, 805, 844, 667, 412, 128]", - "total_badness": 6111.5995998 + "ne2d": 702, + "ne3d": 4618, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 4, 24, 53, 140, 293, 465, 706, 805, 841, 747, 418, 120]", + "total_badness": 6022.3952178 }, { "ne1d": 146, - "ne2d": 1492, - "ne3d": 17798, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 9, 24, 86, 209, 525, 1104, 1919, 2993, 3722, 3811, 2645, 749]", - "total_badness": 22077.875433 + "ne2d": 1490, + "ne3d": 17756, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 8, 28, 65, 211, 496, 1039, 1934, 3005, 3638, 3787, 2764, 781]", + "total_badness": 21965.581134 }, { "ne1d": 248, "ne2d": 4354, - "ne3d": 112882, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 10, 27, 96, 290, 762, 2154, 5475, 10965, 17752, 23939, 26158, 19408, 5845]", - "total_badness": 137612.85905 + "ne3d": 113687, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 14, 37, 138, 359, 904, 2353, 5729, 11225, 18258, 23885, 25920, 19046, 5816]", + "total_badness": 139052.64247 } ], "cylinder.geo": [ @@ -449,17 +449,17 @@ }, { "ne1d": 48, - "ne2d": 136, - "ne3d": 225, - "quality_histogram": "[0, 0, 0, 6, 16, 26, 21, 19, 17, 7, 1, 10, 6, 10, 21, 27, 23, 8, 5, 2]", - "total_badness": 525.88368721 + "ne2d": 142, + "ne3d": 242, + "quality_histogram": "[0, 0, 0, 16, 20, 29, 22, 22, 6, 8, 6, 14, 5, 13, 14, 25, 18, 13, 11, 0]", + "total_badness": 604.89450225 }, { "ne1d": 72, - "ne2d": 320, - "ne3d": 629, - "quality_histogram": "[0, 0, 13, 7, 17, 28, 39, 55, 44, 70, 41, 52, 60, 54, 36, 31, 48, 20, 7, 7]", - "total_badness": 1373.2243293 + "ne2d": 324, + "ne3d": 643, + "quality_histogram": "[0, 0, 4, 8, 20, 32, 45, 67, 71, 66, 52, 48, 47, 47, 28, 28, 43, 21, 11, 5]", + "total_badness": 1398.9137975 }, { "ne1d": 104, @@ -530,10 +530,10 @@ "ellipticcone.geo": [ { "ne1d": 174, - "ne2d": 1554, - "ne3d": 5154, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 13, 29, 51, 122, 215, 389, 552, 753, 867, 887, 708, 434, 131]", - "total_badness": 6912.1657887 + "ne2d": 1558, + "ne3d": 5148, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 13, 32, 59, 117, 206, 341, 616, 725, 911, 895, 680, 405, 145]", + "total_badness": 6904.0840287 }, { "ne1d": 86, @@ -551,33 +551,33 @@ }, { "ne1d": 174, - "ne2d": 1554, - "ne3d": 4935, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 7, 18, 52, 127, 277, 397, 675, 900, 963, 833, 511, 175]", - "total_badness": 6345.7383858 + "ne2d": 1558, + "ne3d": 4919, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 4, 21, 50, 124, 251, 452, 657, 897, 985, 787, 505, 184]", + "total_badness": 6326.974644 }, { "ne1d": 258, - "ne2d": 3462, - "ne3d": 13486, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 10, 31, 108, 209, 375, 670, 1146, 1676, 2318, 2432, 2372, 1636, 502]", - "total_badness": 17385.364148 + "ne2d": 3468, + "ne3d": 13311, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 34, 98, 172, 364, 632, 1073, 1669, 2270, 2500, 2349, 1609, 535]", + "total_badness": 17095.282764 }, { "ne1d": 432, - "ne2d": 9534, - "ne3d": 70093, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 9, 41, 126, 322, 870, 1902, 4034, 7717, 11685, 14333, 14864, 10903, 3285]", - "total_badness": 86746.571015 + "ne2d": 9538, + "ne3d": 69769, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 14, 43, 119, 293, 743, 1835, 3902, 7404, 11284, 14551, 15051, 11055, 3473]", + "total_badness": 86055.714906 } ], "ellipticcyl.geo": [ { "ne1d": 156, "ne2d": 996, - "ne3d": 2293, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 12, 16, 55, 86, 118, 233, 260, 367, 368, 354, 242, 149, 32]", - "total_badness": 3192.9620295 + "ne3d": 2299, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 12, 15, 55, 86, 117, 235, 272, 372, 360, 358, 240, 144, 33]", + "total_badness": 3202.1380209 }, { "ne1d": 76, @@ -596,23 +596,23 @@ { "ne1d": 156, "ne2d": 996, - "ne3d": 2218, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 5, 38, 50, 93, 181, 255, 331, 354, 386, 285, 196, 42]", - "total_badness": 2980.3373467 + "ne3d": 2214, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 4, 40, 47, 89, 182, 262, 324, 362, 381, 279, 196, 46]", + "total_badness": 2974.3073079 }, { "ne1d": 232, - "ne2d": 2206, - "ne3d": 8329, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 8, 38, 120, 269, 606, 986, 1422, 1778, 1636, 1142, 319]", - "total_badness": 10417.08851 + "ne2d": 2210, + "ne3d": 8345, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 9, 43, 109, 293, 640, 956, 1382, 1736, 1662, 1176, 334]", + "total_badness": 10435.490494 }, { "ne1d": 388, - "ne2d": 6122, - "ne3d": 55722, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 6, 38, 128, 339, 950, 2397, 5110, 8516, 11890, 13275, 9802, 3270]", - "total_badness": 67535.530354 + "ne2d": 6138, + "ne3d": 54637, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 5, 32, 119, 325, 910, 2429, 5008, 8209, 11690, 12637, 9994, 3276]", + "total_badness": 66190.217682 } ], "fichera.geo": [ @@ -646,10 +646,10 @@ }, { "ne1d": 96, - "ne2d": 118, - "ne3d": 208, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 6, 10, 16, 23, 37, 29, 47, 28, 6]", - "total_badness": 266.18044371 + "ne2d": 120, + "ne3d": 211, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 6, 14, 22, 26, 38, 37, 41, 14, 9]", + "total_badness": 273.06134659 }, { "ne1d": 144, @@ -662,33 +662,33 @@ "frame.step": [ { "ne1d": 12694, - "ne2d": 40416, - "ne3d": 221405, - "quality_histogram": "[3, 8, 6, 9, 7, 44, 262, 749, 1716, 3507, 6238, 10976, 17443, 25686, 32253, 35719, 35307, 29272, 17591, 4609]", - "total_badness": 302085.09767 + "ne2d": 40520, + "ne3d": 221762, + "quality_histogram": "[3, 5, 5, 12, 7, 59, 290, 817, 1933, 3640, 6299, 10873, 17623, 25259, 32707, 35796, 34974, 29136, 17768, 4556]", + "total_badness": 303041.23654 }, { "ne1d": 6026, - "ne2d": 11302, - "ne3d": 30676, - "quality_histogram": "[4, 5, 3, 10, 20, 48, 102, 279, 686, 1070, 1686, 2721, 3426, 4284, 4537, 4238, 3396, 2444, 1366, 351]", - "total_badness": 45646.217472 + "ne2d": 11324, + "ne3d": 30653, + "quality_histogram": "[4, 9, 9, 12, 25, 46, 102, 282, 695, 1064, 1661, 2565, 3358, 4222, 4521, 4302, 3494, 2597, 1360, 325]", + "total_badness": 45607.765932 }, { "ne1d": 9704, - "ne2d": 24306, - "ne3d": 85235, - "quality_histogram": "[3, 3, 7, 8, 7, 30, 77, 145, 446, 1107, 2404, 4694, 7830, 10947, 13348, 14070, 12971, 10099, 5613, 1426]", - "total_badness": 117163.65166 + "ne2d": 24430, + "ne3d": 85325, + "quality_histogram": "[1, 6, 6, 9, 6, 33, 65, 165, 475, 1033, 2434, 4626, 7791, 10930, 13358, 14135, 12954, 10041, 5806, 1451]", + "total_badness": 117194.17951 } ], "hinge.stl": [ { "ne1d": 456, - "ne2d": 1214, - "ne3d": 2022, - "quality_histogram": "[0, 0, 0, 0, 1, 5, 9, 12, 26, 49, 65, 132, 182, 254, 300, 282, 275, 231, 156, 43]", - "total_badness": 2854.7168701 + "ne2d": 1224, + "ne3d": 2021, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 3, 13, 27, 39, 83, 131, 173, 250, 319, 287, 271, 226, 153, 44]", + "total_badness": 2837.3834708 }, { "ne1d": 298, @@ -699,31 +699,31 @@ }, { "ne1d": 370, - "ne2d": 844, - "ne3d": 1118, - "quality_histogram": "[0, 0, 0, 0, 0, 10, 16, 22, 30, 44, 66, 106, 150, 128, 177, 157, 95, 56, 51, 10]", - "total_badness": 1741.03544 + "ne2d": 846, + "ne3d": 1140, + "quality_histogram": "[0, 0, 0, 1, 2, 9, 15, 17, 27, 44, 69, 118, 143, 133, 176, 168, 96, 61, 51, 10]", + "total_badness": 1773.0754642 }, { "ne1d": 516, "ne2d": 1566, - "ne3d": 2527, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 3, 16, 24, 60, 103, 147, 246, 311, 364, 374, 321, 318, 190, 48]", - "total_badness": 3538.9062774 + "ne3d": 2512, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 12, 28, 58, 95, 151, 238, 317, 366, 359, 319, 325, 199, 42]", + "total_badness": 3506.416591 }, { "ne1d": 722, - "ne2d": 2870, - "ne3d": 6642, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 3, 19, 29, 82, 162, 367, 691, 888, 1056, 1147, 1124, 840, 232]", - "total_badness": 8573.8370647 + "ne2d": 2866, + "ne3d": 6694, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 3, 20, 29, 62, 163, 362, 669, 870, 1081, 1156, 1126, 894, 257]", + "total_badness": 8602.7943331 }, { "ne1d": 1862, - "ne2d": 19488, - "ne3d": 137072, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 1, 26, 122, 396, 1121, 2973, 7117, 13598, 21861, 28813, 30393, 23234, 7416]", - "total_badness": 167613.01917 + "ne2d": 19490, + "ne3d": 137687, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 7, 27, 123, 417, 1112, 2874, 6999, 13738, 21956, 28788, 30887, 23306, 7452]", + "total_badness": 168309.64037 } ], "lshape3d.geo": [ @@ -766,70 +766,70 @@ "ne1d": 122, "ne2d": 204, "ne3d": 326, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 11, 17, 43, 51, 53, 56, 50, 33, 6]", - "total_badness": 427.73359314 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 11, 17, 43, 51, 53, 55, 51, 33, 6]", + "total_badness": 427.73309234 } ], "manyholes.geo": [ { "ne1d": 5886, - "ne2d": 48036, - "ne3d": 179484, - "quality_histogram": "[0, 0, 0, 1, 6, 26, 49, 181, 507, 1429, 3406, 7751, 12589, 20420, 27392, 30012, 29988, 24886, 16884, 3957]", - "total_badness": 238828.86994 + "ne2d": 48052, + "ne3d": 179545, + "quality_histogram": "[0, 0, 0, 0, 5, 29, 71, 190, 576, 1440, 3405, 7596, 12496, 20298, 27806, 29839, 29882, 24882, 17039, 3991]", + "total_badness": 238919.11552 }, { "ne1d": 2746, - "ne2d": 13834, - "ne3d": 29329, - "quality_histogram": "[0, 0, 0, 0, 14, 21, 41, 146, 393, 827, 1501, 2289, 3318, 4412, 4217, 3705, 3185, 2627, 1888, 745]", - "total_badness": 42243.35733 + "ne2d": 13854, + "ne3d": 29281, + "quality_histogram": "[0, 0, 0, 0, 13, 18, 39, 151, 352, 858, 1553, 2317, 3286, 4410, 4149, 3714, 3207, 2591, 1903, 720]", + "total_badness": 42193.71037 }, { "ne1d": 4106, - "ne2d": 27932, - "ne3d": 70698, - "quality_histogram": "[0, 0, 0, 1, 26, 69, 183, 393, 852, 1684, 2955, 4447, 7082, 9552, 10277, 10366, 9322, 7190, 4617, 1682]", - "total_badness": 100123.46548 + "ne2d": 27992, + "ne3d": 70855, + "quality_histogram": "[0, 0, 0, 2, 32, 78, 216, 416, 816, 1670, 2904, 4412, 7023, 9393, 10226, 10366, 9509, 7379, 4635, 1778]", + "total_badness": 100246.61498 } ], "manyholes2.geo": [ { "ne1d": 10202, - "ne2d": 55308, - "ne3d": 127648, - "quality_histogram": "[0, 0, 0, 0, 6, 34, 104, 281, 811, 2064, 4591, 7937, 11909, 17760, 18525, 18083, 16916, 14536, 10497, 3594]", - "total_badness": 176351.56445 + "ne2d": 55372, + "ne3d": 127827, + "quality_histogram": "[0, 0, 0, 0, 5, 32, 110, 296, 815, 2079, 4599, 7839, 11878, 17623, 18568, 18410, 17079, 14485, 10463, 3546]", + "total_badness": 176563.67789 } ], "matrix.geo": [ { "ne1d": 174, "ne2d": 1198, - "ne3d": 5261, - "quality_histogram": "[0, 0, 43, 122, 130, 86, 136, 184, 149, 241, 322, 397, 535, 609, 604, 571, 460, 398, 221, 53]", - "total_badness": 9604.8609332 + "ne3d": 5230, + "quality_histogram": "[0, 0, 39, 135, 124, 88, 128, 171, 147, 232, 362, 408, 517, 611, 596, 522, 470, 391, 228, 61]", + "total_badness": 9566.0829115 }, { "ne1d": 106, - "ne2d": 604, - "ne3d": 1987, - "quality_histogram": "[0, 1, 28, 89, 120, 160, 190, 186, 176, 194, 157, 174, 155, 100, 78, 66, 35, 42, 28, 8]", - "total_badness": 5044.7201931 + "ne2d": 612, + "ne3d": 1934, + "quality_histogram": "[0, 3, 20, 92, 116, 153, 159, 169, 221, 167, 180, 178, 141, 110, 64, 56, 36, 38, 27, 4]", + "total_badness": 4909.4781297 }, { "ne1d": 132, - "ne2d": 828, - "ne3d": 2719, - "quality_histogram": "[0, 0, 10, 46, 80, 124, 136, 129, 211, 269, 319, 290, 267, 230, 195, 148, 117, 83, 49, 16]", - "total_badness": 5612.3348522 + "ne2d": 830, + "ne3d": 2751, + "quality_histogram": "[0, 0, 4, 57, 63, 116, 124, 163, 226, 230, 333, 307, 270, 240, 206, 164, 105, 82, 43, 18]", + "total_badness": 5616.8677502 }, { "ne1d": 174, "ne2d": 1198, - "ne3d": 5159, - "quality_histogram": "[0, 0, 28, 111, 114, 67, 108, 152, 144, 215, 289, 348, 498, 587, 574, 620, 517, 450, 264, 73]", - "total_badness": 9030.3079258 + "ne3d": 5125, + "quality_histogram": "[0, 0, 34, 121, 107, 67, 129, 138, 126, 191, 298, 378, 483, 572, 632, 582, 502, 440, 242, 83]", + "total_badness": 9045.5508083 }, { "ne1d": 248, @@ -893,17 +893,17 @@ "part1.stl": [ { "ne1d": 170, - "ne2d": 434, - "ne3d": 1224, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 6, 12, 36, 57, 70, 113, 150, 189, 175, 158, 135, 94, 27]", - "total_badness": 1720.8230602 + "ne2d": 436, + "ne3d": 1270, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 3, 10, 15, 39, 63, 110, 115, 152, 180, 191, 155, 127, 91, 18]", + "total_badness": 1821.2768739 }, { "ne1d": 134, "ne2d": 276, "ne3d": 504, - "quality_histogram": "[0, 0, 0, 1, 4, 0, 7, 6, 20, 26, 31, 44, 59, 68, 74, 61, 43, 39, 18, 3]", - "total_badness": 791.5174304 + "quality_histogram": "[0, 0, 0, 1, 4, 0, 7, 6, 20, 26, 32, 43, 59, 68, 74, 61, 43, 39, 18, 3]", + "total_badness": 791.50892935 }, { "ne1d": 194, @@ -915,171 +915,171 @@ { "ne1d": 266, "ne2d": 986, - "ne3d": 4152, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 3, 8, 35, 64, 166, 338, 594, 745, 788, 798, 460, 151]", - "total_badness": 5270.5642613 + "ne3d": 4115, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 2, 13, 35, 69, 153, 349, 587, 725, 753, 807, 482, 139]", + "total_badness": 5225.4949656 }, { "ne1d": 674, "ne2d": 6854, - "ne3d": 82708, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 28, 74, 229, 687, 1629, 4225, 8150, 12870, 17332, 18973, 14189, 4318]", - "total_badness": 101005.97859 + "ne3d": 82733, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 8, 25, 91, 233, 657, 1793, 4084, 8021, 12983, 17298, 18878, 14198, 4463]", + "total_badness": 101049.26725 } ], "period.geo": [ { "ne1d": 344, - "ne2d": 1132, - "ne3d": 3242, - "quality_histogram": "[0, 0, 0, 0, 0, 4, 20, 25, 63, 123, 211, 275, 361, 416, 443, 425, 380, 293, 164, 39]", - "total_badness": 4791.9180684 + "ne2d": 1136, + "ne3d": 3291, + "quality_histogram": "[0, 0, 0, 0, 1, 6, 24, 38, 73, 142, 237, 280, 363, 430, 473, 394, 337, 293, 163, 37]", + "total_badness": 4941.6426523 }, { "ne1d": 160, - "ne2d": 286, - "ne3d": 680, - "quality_histogram": "[0, 0, 7, 11, 17, 20, 26, 41, 48, 64, 63, 61, 71, 48, 51, 50, 39, 41, 18, 4]", - "total_badness": 1363.8803171 + "ne2d": 288, + "ne3d": 660, + "quality_histogram": "[0, 0, 0, 0, 4, 15, 18, 27, 46, 63, 64, 69, 69, 61, 55, 62, 52, 35, 14, 6]", + "total_badness": 1159.9625164 }, { "ne1d": 232, - "ne2d": 600, - "ne3d": 1620, - "quality_histogram": "[0, 20, 26, 46, 42, 60, 70, 81, 105, 126, 134, 136, 139, 134, 144, 123, 111, 72, 43, 8]", - "total_badness": 3623.0833569 + "ne2d": 598, + "ne3d": 1630, + "quality_histogram": "[0, 10, 22, 41, 40, 50, 62, 102, 107, 117, 123, 146, 150, 157, 143, 118, 109, 76, 50, 7]", + "total_badness": 3464.4094355 }, { "ne1d": 344, - "ne2d": 1132, - "ne3d": 3191, - "quality_histogram": "[0, 0, 0, 0, 0, 3, 18, 25, 55, 91, 178, 254, 353, 408, 438, 427, 424, 302, 170, 45]", - "total_badness": 4645.0669687 + "ne2d": 1136, + "ne3d": 3221, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 20, 24, 54, 111, 178, 268, 317, 453, 436, 450, 365, 311, 187, 44]", + "total_badness": 4704.9518805 }, { "ne1d": 480, "ne2d": 2256, - "ne3d": 11676, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 6, 24, 53, 120, 289, 525, 957, 1453, 1943, 2287, 2081, 1526, 409]", - "total_badness": 14907.26587 + "ne3d": 11694, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 10, 18, 52, 120, 262, 551, 975, 1482, 2010, 2258, 2052, 1485, 417]", + "total_badness": 14947.136242 }, { "ne1d": 820, - "ne2d": 6222, - "ne3d": 67973, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 3, 15, 85, 268, 617, 1614, 3718, 7158, 11216, 14102, 14686, 10957, 3532]", - "total_badness": 83568.07739 + "ne2d": 6226, + "ne3d": 68532, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 18, 76, 261, 684, 1675, 3888, 7222, 11072, 14234, 14852, 11076, 3469]", + "total_badness": 84325.408672 } ], "plane.stl": [ { "ne1d": 890, - "ne2d": 2600, - "ne3d": 8161, - "quality_histogram": "[5, 12, 33, 28, 52, 46, 32, 56, 128, 206, 309, 453, 685, 923, 1193, 1252, 1147, 929, 538, 134]", - "total_badness": 12460.391484 + "ne2d": 2602, + "ne3d": 8196, + "quality_histogram": "[4, 14, 33, 28, 57, 45, 41, 60, 132, 229, 346, 495, 686, 967, 1178, 1220, 1147, 862, 516, 136]", + "total_badness": 12564.547698 }, { "ne1d": 572, - "ne2d": 1146, - "ne3d": 1642, - "quality_histogram": "[4, 26, 39, 50, 60, 78, 99, 124, 148, 159, 146, 135, 122, 121, 117, 79, 69, 36, 24, 6]", - "total_badness": 4241.9527878 + "ne2d": 1174, + "ne3d": 1694, + "quality_histogram": "[4, 23, 46, 46, 75, 74, 108, 138, 137, 144, 161, 142, 133, 122, 123, 82, 76, 40, 16, 4]", + "total_badness": 4372.11206 }, { "ne1d": 724, - "ne2d": 1692, - "ne3d": 3214, - "quality_histogram": "[5, 17, 33, 37, 43, 43, 52, 72, 118, 157, 197, 295, 340, 423, 382, 381, 287, 205, 104, 23]", - "total_badness": 5942.4739465 + "ne2d": 1714, + "ne3d": 3224, + "quality_histogram": "[5, 18, 33, 40, 56, 43, 77, 73, 134, 152, 208, 268, 361, 393, 403, 364, 270, 202, 98, 26]", + "total_badness": 6080.3507333 }, { "ne1d": 956, - "ne2d": 2810, - "ne3d": 8675, - "quality_histogram": "[3, 12, 28, 50, 46, 52, 62, 61, 80, 138, 227, 401, 598, 907, 1121, 1410, 1387, 1197, 705, 190]", - "total_badness": 12797.407898 + "ne2d": 2822, + "ne3d": 8566, + "quality_histogram": "[3, 13, 29, 46, 47, 55, 59, 62, 82, 146, 206, 403, 597, 917, 1190, 1339, 1412, 1134, 653, 173]", + "total_badness": 12683.902882 }, { "ne1d": 1554, - "ne2d": 6382, - "ne3d": 31570, - "quality_histogram": "[4, 7, 11, 7, 21, 52, 57, 70, 111, 204, 355, 730, 1411, 2560, 3940, 5357, 6035, 5675, 3874, 1089]", - "total_badness": 41102.73883 + "ne2d": 6386, + "ne3d": 31762, + "quality_histogram": "[4, 7, 9, 5, 23, 52, 59, 71, 104, 225, 359, 757, 1413, 2496, 4045, 5423, 5957, 5777, 3931, 1045]", + "total_badness": 41359.256776 }, { "ne1d": 2992, - "ne2d": 23314, - "ne3d": 280243, - "quality_histogram": "[5, 10, 11, 13, 7, 26, 32, 92, 238, 487, 1175, 2837, 6695, 15338, 29029, 45204, 58707, 61066, 45296, 13975]", - "total_badness": 345632.07897 + "ne2d": 23320, + "ne3d": 280073, + "quality_histogram": "[5, 11, 12, 11, 6, 26, 37, 77, 204, 513, 1236, 2811, 6880, 15472, 29023, 45343, 58607, 60675, 45323, 13801]", + "total_badness": 345610.85278 } ], "revolution.geo": [ { "ne1d": 320, - "ne2d": 3096, - "ne3d": 8458, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 7, 38, 154, 314, 541, 711, 982, 1073, 1192, 1158, 976, 740, 452, 120]", - "total_badness": 12348.89105 + "ne2d": 3108, + "ne3d": 8430, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 17, 70, 149, 296, 547, 773, 995, 1092, 1140, 1100, 981, 723, 439, 108]", + "total_badness": 12383.964938 }, { "ne1d": 160, - "ne2d": 818, - "ne3d": 1293, - "quality_histogram": "[0, 0, 0, 0, 1, 9, 45, 85, 91, 122, 139, 162, 156, 139, 91, 88, 65, 60, 30, 10]", - "total_badness": 2298.7537248 + "ne2d": 822, + "ne3d": 1279, + "quality_histogram": "[0, 0, 0, 0, 2, 14, 52, 81, 100, 116, 148, 146, 167, 114, 92, 74, 92, 44, 25, 12]", + "total_badness": 2305.3064983 }, { "ne1d": 240, - "ne2d": 1812, - "ne3d": 3906, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 12, 24, 94, 183, 308, 456, 547, 508, 494, 444, 355, 272, 158, 49]", - "total_badness": 5935.9395673 + "ne2d": 1830, + "ne3d": 3853, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 26, 104, 193, 325, 413, 511, 521, 464, 404, 361, 294, 180, 51]", + "total_badness": 5840.4488172 }, { "ne1d": 320, - "ne2d": 3096, - "ne3d": 8275, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 13, 65, 208, 418, 619, 849, 1019, 1178, 1230, 1116, 884, 514, 160]", - "total_badness": 11661.155742 + "ne2d": 3108, + "ne3d": 8209, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 29, 78, 193, 438, 633, 872, 1006, 1175, 1170, 1064, 870, 542, 133]", + "total_badness": 11635.076736 }, { "ne1d": 480, - "ne2d": 6848, - "ne3d": 32874, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 14, 61, 265, 670, 1455, 2541, 4214, 5494, 6532, 5977, 4399, 1249]", - "total_badness": 41605.598389 + "ne2d": 6842, + "ne3d": 32953, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 14, 75, 263, 655, 1352, 2599, 4181, 5729, 6408, 6084, 4357, 1234]", + "total_badness": 41689.744856 }, { "ne1d": 800, - "ne2d": 17866, - "ne3d": 202729, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 5, 40, 144, 535, 1500, 4356, 10392, 20188, 31941, 42409, 45674, 34933, 10612]", - "total_badness": 247652.11378 + "ne2d": 17922, + "ne3d": 203414, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 10, 47, 152, 582, 1679, 4413, 10542, 20265, 31871, 42901, 45622, 34581, 10749]", + "total_badness": 248722.35265 } ], "screw.step": [ { "ne1d": 400, - "ne2d": 1432, - "ne3d": 2448, - "quality_histogram": "[0, 0, 0, 0, 1, 1, 14, 85, 91, 169, 198, 250, 259, 289, 265, 245, 227, 224, 102, 28]", - "total_badness": 3851.1301093 + "ne2d": 1438, + "ne3d": 2474, + "quality_histogram": "[0, 0, 0, 0, 1, 0, 12, 83, 92, 159, 198, 257, 262, 314, 289, 253, 227, 182, 117, 28]", + "total_badness": 3881.0304023 }, { "ne1d": 530, - "ne2d": 2684, - "ne3d": 7927, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 15, 40, 82, 149, 285, 474, 733, 1104, 1268, 1359, 1321, 849, 245]", - "total_badness": 10424.316767 + "ne2d": 2696, + "ne3d": 7980, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 9, 30, 78, 160, 263, 421, 685, 1103, 1288, 1442, 1377, 868, 253]", + "total_badness": 10417.869333 }, { "ne1d": 668, "ne2d": 5002, - "ne3d": 31622, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 6, 13, 43, 96, 269, 788, 1790, 3249, 5163, 6715, 6912, 5008, 1567]", - "total_badness": 38905.366168 + "ne3d": 31490, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 4, 19, 52, 128, 304, 753, 1737, 3178, 5049, 6602, 6978, 5109, 1574]", + "total_badness": 38732.690385 } ], "sculpture.geo": [ @@ -1114,46 +1114,46 @@ { "ne1d": 288, "ne2d": 962, - "ne3d": 1319, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 6, 23, 53, 86, 121, 144, 127, 143, 121, 140, 143, 115, 80, 15]", - "total_badness": 2042.804049 + "ne3d": 1326, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 6, 24, 53, 87, 122, 149, 125, 142, 117, 141, 144, 119, 80, 15]", + "total_badness": 2054.7475159 }, { "ne1d": 480, "ne2d": 2394, - "ne3d": 6754, - "quality_histogram": "[0, 0, 0, 0, 1, 4, 4, 16, 23, 39, 70, 125, 267, 519, 758, 1077, 1327, 1284, 933, 307]", - "total_badness": 8589.1254463 + "ne3d": 6748, + "quality_histogram": "[0, 0, 0, 0, 1, 4, 5, 15, 24, 39, 66, 124, 269, 503, 757, 1064, 1337, 1301, 926, 313]", + "total_badness": 8573.2040767 } ], "shaft.geo": [ { "ne1d": 708, - "ne2d": 1720, - "ne3d": 2738, - "quality_histogram": "[3, 14, 13, 29, 26, 44, 45, 69, 82, 138, 255, 367, 305, 293, 241, 276, 235, 194, 90, 19]", - "total_badness": 5045.4631109 + "ne2d": 1722, + "ne3d": 2757, + "quality_histogram": "[22, 11, 27, 30, 41, 40, 46, 62, 79, 140, 264, 373, 303, 274, 231, 291, 233, 179, 86, 25]", + "total_badness": 6328.6329226 }, { "ne1d": 410, "ne2d": 606, - "ne3d": 944, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 4, 6, 18, 27, 44, 62, 84, 115, 151, 141, 153, 90, 35, 13]", - "total_badness": 1357.9934384 + "ne3d": 970, + "quality_histogram": "[0, 0, 0, 0, 1, 2, 1, 5, 20, 24, 50, 60, 97, 114, 166, 163, 130, 89, 30, 18]", + "total_badness": 1397.8970919 }, { "ne1d": 510, - "ne2d": 1008, - "ne3d": 2053, - "quality_histogram": "[1, 64, 78, 75, 79, 85, 82, 111, 114, 105, 117, 139, 132, 178, 203, 198, 171, 74, 37, 10]", - "total_badness": 5482.2474163 + "ne2d": 1004, + "ne3d": 2028, + "quality_histogram": "[12, 66, 88, 83, 91, 102, 83, 114, 82, 91, 110, 133, 141, 170, 191, 196, 164, 63, 39, 9]", + "total_badness": 5876.1112217 }, { "ne1d": 708, - "ne2d": 1720, - "ne3d": 2701, - "quality_histogram": "[0, 1, 3, 8, 12, 26, 32, 40, 73, 134, 268, 412, 312, 274, 252, 278, 239, 208, 100, 29]", - "total_badness": 4395.5679484 + "ne2d": 1722, + "ne3d": 2733, + "quality_histogram": "[6, 8, 10, 17, 29, 39, 34, 40, 80, 132, 254, 397, 302, 295, 238, 297, 250, 192, 88, 25]", + "total_badness": 4814.5951096 }, { "ne1d": 1138, @@ -1164,10 +1164,10 @@ }, { "ne1d": 1792, - "ne2d": 10596, - "ne3d": 63463, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 6, 67, 178, 504, 1410, 3360, 6267, 9934, 13406, 14152, 10706, 3472]", - "total_badness": 77607.549516 + "ne2d": 10600, + "ne3d": 63895, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 18, 53, 198, 529, 1486, 3387, 6482, 10124, 13426, 13922, 10754, 3514]", + "total_badness": 78232.724768 } ], "sphere.geo": [ @@ -1189,8 +1189,8 @@ "ne1d": 0, "ne2d": 72, "ne3d": 72, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 16, 23, 25, 7, 0, 0, 0]", - "total_badness": 97.673542971 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 14, 27, 22, 7, 0, 0, 0]", + "total_badness": 97.572347502 }, { "ne1d": 0, @@ -1226,15 +1226,15 @@ "ne1d": 24, "ne2d": 60, "ne3d": 166, - "quality_histogram": "[0, 0, 5, 12, 14, 15, 31, 10, 2, 1, 3, 2, 7, 9, 13, 13, 14, 10, 4, 1]", - "total_badness": 454.92797775 + "quality_histogram": "[0, 0, 5, 12, 14, 15, 31, 10, 2, 1, 3, 2, 7, 9, 13, 13, 15, 9, 4, 1]", + "total_badness": 454.94795255 }, { "ne1d": 30, "ne2d": 116, - "ne3d": 332, - "quality_histogram": "[0, 0, 8, 23, 39, 39, 31, 25, 34, 30, 21, 22, 24, 8, 9, 8, 4, 4, 3, 0]", - "total_badness": 970.62581762 + "ne3d": 339, + "quality_histogram": "[0, 0, 5, 25, 35, 46, 27, 29, 44, 20, 29, 20, 17, 12, 7, 10, 6, 4, 2, 1]", + "total_badness": 988.71756633 }, { "ne1d": 46, @@ -1247,8 +1247,8 @@ "ne1d": 74, "ne2d": 418, "ne3d": 1788, - "quality_histogram": "[0, 0, 0, 0, 0, 6, 6, 21, 28, 38, 73, 98, 167, 212, 252, 272, 258, 202, 111, 44]", - "total_badness": 2540.5253991 + "quality_histogram": "[0, 0, 0, 0, 0, 6, 6, 21, 28, 38, 73, 98, 167, 213, 251, 273, 258, 200, 112, 44]", + "total_badness": 2540.547751 }, { "ne1d": 122, @@ -1314,15 +1314,15 @@ "ne1d": 390, "ne2d": 522, "ne3d": 1353, - "quality_histogram": "[0, 0, 3, 17, 15, 42, 75, 123, 130, 146, 161, 124, 147, 105, 84, 88, 47, 33, 11, 2]", - "total_badness": 2768.022266 + "quality_histogram": "[0, 0, 4, 14, 16, 44, 75, 122, 130, 145, 161, 125, 147, 105, 84, 88, 47, 33, 11, 2]", + "total_badness": 2765.5786315 }, { "ne1d": 512, "ne2d": 874, "ne3d": 2397, "quality_histogram": "[0, 0, 1, 3, 9, 23, 41, 72, 132, 142, 188, 204, 304, 389, 343, 237, 138, 97, 48, 26]", - "total_badness": 3983.5699098 + "total_badness": 3983.5618538 }, { "ne1d": 690, @@ -1333,17 +1333,17 @@ }, { "ne1d": 1050, - "ne2d": 3808, - "ne3d": 17970, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 5, 31, 38, 74, 194, 563, 1401, 2185, 2352, 2728, 2717, 2634, 2364, 684]", - "total_badness": 23485.93298 + "ne2d": 3810, + "ne3d": 17908, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 4, 28, 39, 62, 196, 545, 1378, 2252, 2434, 2681, 2721, 2643, 2269, 655]", + "total_badness": 23429.874099 }, { "ne1d": 1722, "ne2d": 10042, - "ne3d": 84747, - "quality_histogram": "[0, 0, 0, 0, 2, 3, 55, 1427, 755, 410, 785, 1297, 2669, 5782, 9188, 13403, 16283, 16509, 12254, 3925]", - "total_badness": 109011.46057 + "ne3d": 84876, + "quality_histogram": "[0, 0, 0, 0, 3, 4, 55, 1429, 759, 414, 790, 1332, 2665, 5819, 9227, 13451, 16247, 16582, 12204, 3895]", + "total_badness": 109229.6135 } ], "twobricks.geo": [ @@ -1384,10 +1384,10 @@ }, { "ne1d": 186, - "ne2d": 342, - "ne3d": 601, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 13, 19, 31, 73, 92, 103, 107, 100, 61, 1]", - "total_badness": 787.76550767 + "ne2d": 346, + "ne3d": 603, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 10, 25, 42, 66, 89, 101, 110, 93, 56, 10]", + "total_badness": 792.88605666 } ], "twocubes.geo": [ @@ -1428,10 +1428,10 @@ }, { "ne1d": 186, - "ne2d": 342, - "ne3d": 601, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 13, 19, 31, 73, 92, 103, 107, 100, 61, 1]", - "total_badness": 787.76550767 + "ne2d": 346, + "ne3d": 603, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 10, 25, 42, 66, 89, 101, 110, 93, 56, 10]", + "total_badness": 792.88605666 } ], "twocyl.geo": [ From 5eba73f7267431da7c27832f8742a2bd380eaefd Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 14 Oct 2019 15:30:00 +0200 Subject: [PATCH 061/120] Separate function CombineImproveEdge() --- libsrc/meshing/improve2.cpp | 460 +++++++++++++++++------------------- 1 file changed, 218 insertions(+), 242 deletions(-) diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index 91e72a25..bd4dfe6d 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -354,26 +354,233 @@ namespace netgen + bool CombineImproveEdge( Mesh & mesh, + const Table & elementsonnode, + Array, PointIndex> & normals, + Array & fixed, + PointIndex pi1, PointIndex pi2, + bool check_only = true) + { + Vec<3> nv; + ArrayMem hasonepi, hasbothpi; + + if (!pi1.IsValid() || !pi2.IsValid()) + return false; + + bool debugflag = 0; + + if (debugflag) + { + (*testout) << "Combineimprove " + << "pi1 = " << pi1 << " pi2 = " << pi2 << endl; + } + + /* + // save version: + if (fixed.Get(pi1) || fixed.Get(pi2)) + return false; + if (pi2 < pi1) swap (pi1, pi2); + */ + + // more general + if (fixed[pi2]) + Swap (pi1, pi2); + + if (fixed[pi2]) + return false; + + double loch = mesh.GetH (mesh[pi1]); + + for (SurfaceElementIndex sei2 : elementsonnode[pi1]) + { + const Element2d & el2 = mesh[sei2]; + + if (el2.IsDeleted()) continue; + + if (el2[0] == pi2 || el2[1] == pi2 || el2[2] == pi2) + { + hasbothpi.Append (sei2); + nv = Cross (Vec3d (mesh[el2[0]], mesh[el2[1]]), + Vec3d (mesh[el2[0]], mesh[el2[2]])); + } + else + { + hasonepi.Append (sei2); + } + } + + if(hasbothpi.Size()==0) + return false; + nv = normals[pi1]; + + + for (SurfaceElementIndex sei2 : elementsonnode[pi2]) + { + const Element2d & el2 = mesh[sei2]; + if (el2.IsDeleted()) continue; + if (!el2.PNums<3>().Contains (pi1)) + hasonepi.Append (sei2); + } + + double bad1 = 0; + int illegal1 = 0, illegal2 = 0; + /* + for (SurfaceElementIndex sei : hasonepi) + { + const Element2d & el = mesh[sei]; + bad1 += CalcTriangleBadness (mesh[el[0]], mesh[el[1]], mesh[el[2]], + nv, -1, loch); + illegal1 += 1-mesh.LegalTrig(el); + } + */ + for (const Element2d & el : mesh.SurfaceElements()[hasonepi]) + { + bad1 += CalcTriangleBadness (mesh[el[0]], mesh[el[1]], mesh[el[2]], + nv, -1, loch); + illegal1 += 1-mesh.LegalTrig(el); + } + + for (int k = 0; k < hasbothpi.Size(); k++) + { + const Element2d & el = mesh[hasbothpi[k]]; + bad1 += CalcTriangleBadness (mesh[el[0]], mesh[el[1]], mesh[el[2]], + nv, -1, loch); + illegal1 += 1-mesh.LegalTrig(el); + } + bad1 /= (hasonepi.Size()+hasbothpi.Size()); + + double bad2 = 0; + for (int k = 0; k < hasonepi.Size(); k++) + { + Element2d el = mesh[hasonepi[k]]; + for (auto i : Range(3)) + if(el[i]==pi2) + el[i] = pi1; + + double err = + CalcTriangleBadness (mesh[el[0]], mesh[el[1]], mesh[el[2]], + nv, -1, loch); + bad2 += err; + + Vec<3> hnv = Cross (Vec3d (mesh[el[0]], + mesh[el[1]]), + Vec3d (mesh[el[0]], + mesh[el[2]])); + if (hnv * nv < 0) + bad2 += 1e10; + + for (int l = 0; l < 3; l++) + { + if ( (normals[el[l]] * nv) < 0.5) + bad2 += 1e10; + } + + illegal2 += 1-mesh.LegalTrig(el); + } + bad2 /= hasonepi.Size(); + + if (debugflag) + { + (*testout) << "bad1 = " << bad1 << ", bad2 = " << bad2 << endl; + } + + bool should = (bad2 < bad1 && bad2 < 1e4); + if (bad2 < 1e4) + { + if (illegal1 > illegal2) should = true; + if (illegal2 > illegal1) should = false; + } + + + if(check_only) + return should; + + if (should) + { + /* + (*testout) << "combine !" << endl; + (*testout) << "bad1 = " << bad1 << ", bad2 = " << bad2 << endl; + (*testout) << "illegal1 = " << illegal1 << ", illegal2 = " << illegal2 << endl; + (*testout) << "loch = " << loch << endl; + */ + + PointGeomInfo gi; + // bool gi_set(false); + + /* + Element2d *el1p(NULL); + int l = 0; + while(mesh[elementsonnode[pi1][l]].IsDeleted() && lGetNP(); l++) + if ((*el1p)[l] == pi1) + { + gi = el1p->GeomInfoPi (l+1); + // gi_set = true; + } + */ + for (SurfaceElementIndex sei : elementsonnode[pi1]) + { + const Element2d & el1p = mesh[sei]; + if (el1p.IsDeleted()) continue; + + for (int l = 0; l < el1p.GetNP(); l++) + if (el1p[l] == pi1) + // gi = el1p.GeomInfoPi (l+1); + gi = el1p.GeomInfo()[l]; + break; + } + + + // (*testout) << "Connect point " << pi2 << " to " << pi1 << "\n"; + // for (int k = 0; k < elementsonnode[pi2].Size(); k++) + for (SurfaceElementIndex sei2 : elementsonnode[pi2]) + { + Element2d & el = mesh[sei2]; + if (el.IsDeleted()) continue; + if (el.PNums().Contains(pi1)) continue; + + for (auto l : Range(el.GetNP())) + { + if (el[l] == pi2) + { + el[l] = pi1; + el.GeomInfo()[l] = gi; + } + + fixed[el[l]] = true; + } + } + + for (auto sei : hasbothpi) + mesh[sei].Delete(); + + } + return should; + } - void MeshOptimize2d :: CombineImprove (Mesh & mesh) { if (!faceindex) { SplitImprove(mesh); - PrintMessage (3, "Combine improve"); + PrintMessage (3, "Combine improve"); - for (faceindex = 1; faceindex <= mesh.GetNFD(); faceindex++) - { - CombineImprove (mesh); + for (faceindex = 1; faceindex <= mesh.GetNFD(); faceindex++) + { + CombineImprove (mesh); - if (multithread.terminate) - throw NgException ("Meshing stopped"); - } - faceindex = 0; - return; + if (multithread.terminate) + throw NgException ("Meshing stopped"); + } + faceindex = 0; + return; } @@ -402,12 +609,9 @@ namespace netgen surfnr = mesh.GetFaceDescriptor (faceindex).SurfNr(); - Vec<3> nv; - int np = mesh.GetNP(); auto elementsonnode = mesh.CreatePoint2SurfaceElementTable(faceindex); - Array hasonepi, hasbothpi; int ntasks = ngcore::TaskManager::GetMaxThreads(); Array> edges; @@ -457,235 +661,7 @@ namespace netgen for (auto e : edges) { auto [pi1, pi2] = e; - - { - - /* - if (pi1 < PointIndex::BASE || - pi2 < PointIndex::BASE) - continue; - */ - if (!pi1.IsValid() || !pi2.IsValid()) - continue; - /* - INDEX_2 i2(pi1, pi2); - i2.Sort(); - if (segmentht.Used(i2)) - continue; - */ - - bool debugflag = 0; - - if (debugflag) - { - (*testout) << "Combineimprove, face = " << faceindex - << "pi1 = " << pi1 << " pi2 = " << pi2 << endl; - } - - /* - // save version: - if (fixed.Get(pi1) || fixed.Get(pi2)) - continue; - if (pi2 < pi1) swap (pi1, pi2); - */ - - // more general - if (fixed[pi2]) - Swap (pi1, pi2); - - if (fixed[pi2]) - continue; - - double loch = mesh.GetH (mesh[pi1]); - - // INDEX_2 si2 (pi1, pi2); - // si2.Sort(); - - /* - if (edgetested.Used (si2)) - continue; - edgetested.Set (si2, 1); - */ - - hasonepi.SetSize(0); - hasbothpi.SetSize(0); - - // for (int k = 0; k < elementsonnode[pi1].Size(); k++) - for (SurfaceElementIndex sei2 : elementsonnode[pi1]) - { - const Element2d & el2 = mesh[sei2]; - - if (el2.IsDeleted()) continue; - - if (el2[0] == pi2 || el2[1] == pi2 || el2[2] == pi2) - { - hasbothpi.Append (sei2); - nv = Cross (Vec3d (mesh[el2[0]], mesh[el2[1]]), - Vec3d (mesh[el2[0]], mesh[el2[2]])); - } - else - { - hasonepi.Append (sei2); - } - } - - if(hasbothpi.Size()==0) - continue; - - - Element2d & hel = mesh[hasbothpi[0]]; - for (int k = 0; k < 3; k++) - if (hel[k] == pi1) - { - GetNormalVector (surfnr, mesh[pi1], hel.GeomInfoPi(k+1), nv); - break; - } - - // nv = normals.Get(pi1); - - - for (SurfaceElementIndex sei2 : elementsonnode[pi2]) - { - const Element2d & el2 = mesh[sei2]; - if (el2.IsDeleted()) continue; - if (!el2.PNums<3>().Contains (pi1)) - hasonepi.Append (sei2); - } - - double bad1 = 0; - int illegal1 = 0, illegal2 = 0; - /* - for (SurfaceElementIndex sei : hasonepi) - { - const Element2d & el = mesh[sei]; - bad1 += CalcTriangleBadness (mesh[el[0]], mesh[el[1]], mesh[el[2]], - nv, -1, loch); - illegal1 += 1-mesh.LegalTrig(el); - } - */ - for (const Element2d & el : mesh.SurfaceElements()[hasonepi]) - { - bad1 += CalcTriangleBadness (mesh[el[0]], mesh[el[1]], mesh[el[2]], - nv, -1, loch); - illegal1 += 1-mesh.LegalTrig(el); - } - - for (int k = 0; k < hasbothpi.Size(); k++) - { - const Element2d & el = mesh[hasbothpi[k]]; - bad1 += CalcTriangleBadness (mesh[el[0]], mesh[el[1]], mesh[el[2]], - nv, -1, loch); - illegal1 += 1-mesh.LegalTrig(el); - } - bad1 /= (hasonepi.Size()+hasbothpi.Size()); - - double bad2 = 0; - for (int k = 0; k < hasonepi.Size(); k++) - { - Element2d el = mesh[hasonepi[k]]; - for (auto i : Range(3)) - if(el[i]==pi2) - el[i] = pi1; - - double err = - CalcTriangleBadness (mesh[el[0]], mesh[el[1]], mesh[el[2]], - nv, -1, loch); - bad2 += err; - - Vec<3> hnv = Cross (Vec3d (mesh[el[0]], - mesh[el[1]]), - Vec3d (mesh[el[0]], - mesh[el[2]])); - if (hnv * nv < 0) - bad2 += 1e10; - - for (int l = 0; l < 3; l++) - if ( (normals[el[l]] * nv) < 0.5) - bad2 += 1e10; - - illegal2 += 1-mesh.LegalTrig(el); - } - bad2 /= hasonepi.Size(); - - if (debugflag) - { - (*testout) << "bad1 = " << bad1 << ", bad2 = " << bad2 << endl; - } - - bool should = (bad2 < bad1 && bad2 < 1e4); - if (bad2 < 1e4) - { - if (illegal1 > illegal2) should = true; - if (illegal2 > illegal1) should = false; - } - - - if (should) - { - /* - (*testout) << "combine !" << endl; - (*testout) << "bad1 = " << bad1 << ", bad2 = " << bad2 << endl; - (*testout) << "illegal1 = " << illegal1 << ", illegal2 = " << illegal2 << endl; - (*testout) << "loch = " << loch << endl; - */ - - PointGeomInfo gi; - // bool gi_set(false); - - /* - Element2d *el1p(NULL); - int l = 0; - while(mesh[elementsonnode[pi1][l]].IsDeleted() && lGetNP(); l++) - if ((*el1p)[l] == pi1) - { - gi = el1p->GeomInfoPi (l+1); - // gi_set = true; - } - */ - for (SurfaceElementIndex sei : elementsonnode[pi1]) - { - const Element2d & el1p = mesh[sei]; - if (el1p.IsDeleted()) continue; - - for (int l = 0; l < el1p.GetNP(); l++) - if (el1p[l] == pi1) - // gi = el1p.GeomInfoPi (l+1); - gi = el1p.GeomInfo()[l]; - break; - } - - - - // (*testout) << "Connect point " << pi2 << " to " << pi1 << "\n"; - // for (int k = 0; k < elementsonnode[pi2].Size(); k++) - for (SurfaceElementIndex sei2 : elementsonnode[pi2]) - { - Element2d & el = mesh[sei2]; - if (el.IsDeleted()) continue; - if (el.PNums().Contains(pi1)) continue; - - for (auto l : Range(el.GetNP())) - { - if (el[l] == pi2) - { - el[l] = pi1; - el.GeomInfo()[l] = gi; - } - - fixed[el[l]] = true; - } - } - - for (auto sei : hasbothpi) - mesh[sei].Delete(); - } - } + CombineImproveEdge(mesh, elementsonnode, normals, fixed, pi1, pi2, false); } // mesh.Compress(); From 0f095281d9ad3e8ae7c9364bec84309e7609689e Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 14 Oct 2019 16:02:11 +0200 Subject: [PATCH 062/120] Parallel 2d CombineImprove() (also sort by improvement) --- libsrc/meshing/improve2.cpp | 42 ++-- tests/pytest/results.json | 418 ++++++++++++++++++------------------ 2 files changed, 238 insertions(+), 222 deletions(-) diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index bd4dfe6d..90f984cd 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -354,7 +354,7 @@ namespace netgen - bool CombineImproveEdge( Mesh & mesh, + double CombineImproveEdge( Mesh & mesh, const Table & elementsonnode, Array, PointIndex> & normals, Array & fixed, @@ -365,7 +365,7 @@ namespace netgen ArrayMem hasonepi, hasbothpi; if (!pi1.IsValid() || !pi2.IsValid()) - return false; + return 0.0; bool debugflag = 0; @@ -378,7 +378,7 @@ namespace netgen /* // save version: if (fixed.Get(pi1) || fixed.Get(pi2)) - return false; + return 0.0; if (pi2 < pi1) swap (pi1, pi2); */ @@ -387,7 +387,7 @@ namespace netgen Swap (pi1, pi2); if (fixed[pi2]) - return false; + return 0.0; double loch = mesh.GetH (mesh[pi1]); @@ -410,7 +410,7 @@ namespace netgen } if(hasbothpi.Size()==0) - return false; + return 0.0; nv = normals[pi1]; @@ -486,16 +486,17 @@ namespace netgen (*testout) << "bad1 = " << bad1 << ", bad2 = " << bad2 << endl; } - bool should = (bad2 < bad1 && bad2 < 1e4); - if (bad2 < 1e4) + bool should = (illegal2<=illegal1 && bad2 < bad1 && bad2 < 1e4); + if(illegal2 < illegal1) { - if (illegal1 > illegal2) should = true; - if (illegal2 > illegal1) should = false; + should = true; + bad1 += 1e4; } + double d_badness = should * (bad2-bad1); if(check_only) - return should; + return d_badness; if (should) { @@ -562,7 +563,7 @@ namespace netgen mesh[sei].Delete(); } - return should; + return d_badness; } void MeshOptimize2d :: CombineImprove (Mesh & mesh) @@ -658,9 +659,24 @@ namespace netgen timerstart.Stop(); - for (auto e : edges) + // Find edges with improvement + Array> candidate_edges(edges.Size()); + std::atomic improvement_counter(0); + + ParallelFor( Range(edges), [&] (auto i) NETGEN_LAMBDA_INLINE { - auto [pi1, pi2] = e; + auto [pi1, pi2] = edges[i]; + double d_badness = CombineImproveEdge(mesh, elementsonnode, normals, fixed, pi1, pi2, true); + if(d_badness < 0.0) + candidate_edges[improvement_counter++] = make_tuple(d_badness, i); + }); + + auto edges_with_improvement = candidate_edges.Part(0, improvement_counter.load()); + QuickSort(edges_with_improvement); + + for(auto [d_badness, ei] : edges_with_improvement) + { + auto [pi1, pi2] = edges[ei]; CombineImproveEdge(mesh, elementsonnode, normals, fixed, pi1, pi2, false); } diff --git a/tests/pytest/results.json b/tests/pytest/results.json index b8c82e94..208703f2 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -54,9 +54,9 @@ { "ne1d": 94, "ne2d": 114, - "ne3d": 158, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 7, 10, 16, 5, 8, 15, 13, 17, 13, 9, 25, 7, 11]", - "total_badness": 247.68310347 + "ne3d": 157, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 3, 8, 13, 13, 15, 7, 12, 11, 19, 14, 12, 21, 5, 3]", + "total_badness": 260.17372209 }, { "ne1d": 136, @@ -268,8 +268,8 @@ "ne1d": 144, "ne2d": 148, "ne3d": 98, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 16, 18, 14, 20, 4, 8, 2, 0]", - "total_badness": 145.06570733 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 18, 19, 13, 20, 2, 9, 1, 0]", + "total_badness": 145.83375079 }, { "ne1d": 144, @@ -282,45 +282,45 @@ "ne1d": 144, "ne2d": 148, "ne3d": 98, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 6, 6, 17, 20, 14, 18, 5, 6, 3, 0]", - "total_badness": 144.34810179 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 6, 6, 19, 21, 12, 18, 5, 4, 4, 0]", + "total_badness": 145.14580879 }, { "ne1d": 144, "ne2d": 148, "ne3d": 98, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 16, 18, 14, 20, 4, 8, 2, 0]", - "total_badness": 145.06570733 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 18, 19, 13, 20, 2, 9, 1, 0]", + "total_badness": 145.83375079 }, { "ne1d": 264, "ne2d": 390, "ne3d": 369, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 5, 19, 26, 42, 46, 49, 41, 53, 45, 27, 10, 2]", - "total_badness": 554.2808696 + "total_badness": 554.2809713 }, { "ne1d": 428, "ne2d": 926, "ne3d": 1074, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 23, 52, 36, 108, 136, 97, 114, 160, 162, 66, 63, 32, 22]", - "total_badness": 1676.2593956 + "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 23, 50, 36, 109, 137, 96, 117, 160, 162, 67, 60, 32, 22]", + "total_badness": 1675.8711911 } ], "cubemcyl.geo": [ { "ne1d": 142, "ne2d": 2488, - "ne3d": 20835, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 28, 93, 206, 422, 722, 1146, 1822, 2545, 3153, 3286, 3135, 2461, 1439, 375]", - "total_badness": 28896.677361 + "ne3d": 20783, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 26, 94, 208, 408, 708, 1158, 1848, 2485, 3200, 3251, 3127, 2474, 1418, 376]", + "total_badness": 28813.276387 }, { "ne1d": 64, - "ne2d": 644, - "ne3d": 3351, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 9, 9, 32, 59, 131, 238, 363, 472, 548, 547, 437, 297, 173, 34]", - "total_badness": 4754.2892871 + "ne2d": 642, + "ne3d": 3214, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 7, 13, 34, 74, 140, 230, 351, 455, 533, 531, 378, 284, 151, 31]", + "total_badness": 4592.7629352 }, { "ne1d": 102, @@ -332,9 +332,9 @@ { "ne1d": 142, "ne2d": 2488, - "ne3d": 19480, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 7, 31, 97, 233, 526, 1186, 1978, 2941, 3443, 3496, 3088, 1914, 539]", - "total_badness": 25362.425666 + "ne3d": 19499, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 5, 27, 106, 226, 529, 1209, 2008, 2862, 3440, 3576, 3083, 1921, 507]", + "total_badness": 25390.546576 }, { "ne1d": 210, @@ -361,17 +361,17 @@ }, { "ne1d": 44, - "ne2d": 278, - "ne3d": 784, - "quality_histogram": "[0, 0, 0, 0, 1, 4, 8, 22, 44, 59, 70, 79, 102, 109, 97, 65, 50, 42, 24, 8]", - "total_badness": 1282.4153699 + "ne2d": 274, + "ne3d": 768, + "quality_histogram": "[0, 0, 0, 0, 1, 5, 9, 11, 26, 62, 72, 78, 114, 95, 91, 78, 74, 24, 22, 6]", + "total_badness": 1237.8358347 }, { "ne1d": 68, "ne2d": 402, - "ne3d": 1584, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 9, 25, 62, 126, 170, 221, 284, 265, 214, 129, 61, 16]", - "total_badness": 2237.5355054 + "ne3d": 1600, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 4, 26, 61, 119, 170, 232, 277, 269, 214, 148, 71, 7]", + "total_badness": 2248.6479915 }, { "ne1d": 90, @@ -382,17 +382,17 @@ }, { "ne1d": 146, - "ne2d": 1490, - "ne3d": 17756, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 8, 28, 65, 211, 496, 1039, 1934, 3005, 3638, 3787, 2764, 781]", - "total_badness": 21965.581134 + "ne2d": 1492, + "ne3d": 17800, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 7, 23, 89, 208, 524, 1085, 1942, 2969, 3729, 3811, 2675, 736]", + "total_badness": 22074.204803 }, { "ne1d": 248, "ne2d": 4354, - "ne3d": 113687, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 14, 37, 138, 359, 904, 2353, 5729, 11225, 18258, 23885, 25920, 19046, 5816]", - "total_badness": 139052.64247 + "ne3d": 113716, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 5, 12, 43, 136, 381, 909, 2353, 5720, 11280, 18112, 23886, 25957, 19090, 5832]", + "total_badness": 139103.15382 } ], "cylinder.geo": [ @@ -530,10 +530,10 @@ "ellipticcone.geo": [ { "ne1d": 174, - "ne2d": 1558, - "ne3d": 5148, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 13, 32, 59, 117, 206, 341, 616, 725, 911, 895, 680, 405, 145]", - "total_badness": 6904.0840287 + "ne2d": 1562, + "ne3d": 5180, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 18, 65, 115, 211, 361, 589, 766, 881, 904, 732, 405, 130]", + "total_badness": 6920.4601657 }, { "ne1d": 86, @@ -551,24 +551,24 @@ }, { "ne1d": 174, - "ne2d": 1558, - "ne3d": 4919, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 4, 21, 50, 124, 251, 452, 657, 897, 985, 787, 505, 184]", - "total_badness": 6326.974644 + "ne2d": 1562, + "ne3d": 4943, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 15, 49, 116, 255, 456, 635, 917, 1005, 806, 517, 167]", + "total_badness": 6347.4280983 }, { "ne1d": 258, "ne2d": 3468, - "ne3d": 13311, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 34, 98, 172, 364, 632, 1073, 1669, 2270, 2500, 2349, 1609, 535]", - "total_badness": 17095.282764 + "ne3d": 13314, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 33, 103, 197, 351, 652, 1077, 1619, 2280, 2518, 2361, 1583, 535]", + "total_badness": 17113.967555 }, { "ne1d": 432, - "ne2d": 9538, - "ne3d": 69769, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 14, 43, 119, 293, 743, 1835, 3902, 7404, 11284, 14551, 15051, 11055, 3473]", - "total_badness": 86055.714906 + "ne2d": 9544, + "ne3d": 69891, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 9, 37, 119, 313, 839, 1927, 4086, 7715, 11454, 14338, 14977, 10816, 3260]", + "total_badness": 86472.194086 } ], "ellipticcyl.geo": [ @@ -602,17 +602,17 @@ }, { "ne1d": 232, - "ne2d": 2210, - "ne3d": 8345, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 9, 43, 109, 293, 640, 956, 1382, 1736, 1662, 1176, 334]", - "total_badness": 10435.490494 + "ne2d": 2212, + "ne3d": 8313, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 15, 37, 113, 263, 626, 1005, 1387, 1743, 1660, 1133, 327]", + "total_badness": 10392.004794 }, { "ne1d": 388, - "ne2d": 6138, - "ne3d": 54637, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 5, 32, 119, 325, 910, 2429, 5008, 8209, 11690, 12637, 9994, 3276]", - "total_badness": 66190.217682 + "ne2d": 6142, + "ne3d": 54975, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 12, 45, 127, 329, 844, 2554, 5100, 8469, 11479, 12855, 9876, 3283]", + "total_badness": 66669.096677 } ], "fichera.geo": [ @@ -662,40 +662,40 @@ "frame.step": [ { "ne1d": 12694, - "ne2d": 40520, - "ne3d": 221762, - "quality_histogram": "[3, 5, 5, 12, 7, 59, 290, 817, 1933, 3640, 6299, 10873, 17623, 25259, 32707, 35796, 34974, 29136, 17768, 4556]", - "total_badness": 303041.23654 + "ne2d": 40530, + "ne3d": 221097, + "quality_histogram": "[3, 7, 7, 7, 8, 40, 245, 708, 1672, 3552, 6310, 10581, 17667, 25348, 32001, 36224, 35008, 29057, 18076, 4576]", + "total_badness": 301373.46714 }, { "ne1d": 6026, - "ne2d": 11324, - "ne3d": 30653, - "quality_histogram": "[4, 9, 9, 12, 25, 46, 102, 282, 695, 1064, 1661, 2565, 3358, 4222, 4521, 4302, 3494, 2597, 1360, 325]", - "total_badness": 45607.765932 + "ne2d": 11334, + "ne3d": 30593, + "quality_histogram": "[4, 5, 3, 10, 18, 39, 99, 258, 685, 1029, 1688, 2632, 3417, 4292, 4551, 4273, 3404, 2499, 1366, 321]", + "total_badness": 45414.634083 }, { "ne1d": 9704, - "ne2d": 24430, - "ne3d": 85325, - "quality_histogram": "[1, 6, 6, 9, 6, 33, 65, 165, 475, 1033, 2434, 4626, 7791, 10930, 13358, 14135, 12954, 10041, 5806, 1451]", - "total_badness": 117194.17951 + "ne2d": 24442, + "ne3d": 85741, + "quality_histogram": "[1, 6, 6, 9, 8, 30, 83, 164, 483, 1017, 2377, 4530, 7838, 10925, 13440, 14326, 13095, 10227, 5737, 1439]", + "total_badness": 117664.34461 } ], "hinge.stl": [ { "ne1d": 456, "ne2d": 1224, - "ne3d": 2021, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 3, 13, 27, 39, 83, 131, 173, 250, 319, 287, 271, 226, 153, 44]", - "total_badness": 2837.3834708 + "ne3d": 2038, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 6, 19, 29, 40, 76, 138, 161, 261, 320, 286, 277, 232, 148, 42]", + "total_badness": 2873.2214111 }, { "ne1d": 298, "ne2d": 596, - "ne3d": 772, - "quality_histogram": "[0, 0, 1, 10, 8, 6, 20, 17, 36, 50, 54, 105, 90, 108, 78, 77, 50, 38, 22, 2]", - "total_badness": 1342.107284 + "ne3d": 767, + "quality_histogram": "[0, 0, 1, 10, 8, 6, 20, 17, 35, 48, 56, 101, 95, 108, 73, 77, 49, 40, 21, 2]", + "total_badness": 1334.5519444 }, { "ne1d": 370, @@ -707,23 +707,23 @@ { "ne1d": 516, "ne2d": 1566, - "ne3d": 2512, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 12, 28, 58, 95, 151, 238, 317, 366, 359, 319, 325, 199, 42]", - "total_badness": 3506.416591 + "ne3d": 2529, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 4, 12, 27, 53, 110, 151, 242, 298, 395, 355, 324, 296, 203, 57]", + "total_badness": 3539.0006937 }, { "ne1d": 722, "ne2d": 2866, - "ne3d": 6694, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 3, 20, 29, 62, 163, 362, 669, 870, 1081, 1156, 1126, 894, 257]", - "total_badness": 8602.7943331 + "ne3d": 6641, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 4, 22, 39, 63, 158, 347, 598, 883, 1056, 1125, 1156, 945, 243]", + "total_badness": 8521.5496278 }, { "ne1d": 1862, "ne2d": 19490, - "ne3d": 137687, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 7, 27, 123, 417, 1112, 2874, 6999, 13738, 21956, 28788, 30887, 23306, 7452]", - "total_badness": 168309.64037 + "ne3d": 138145, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 12, 42, 164, 454, 1165, 3079, 7378, 13727, 21879, 28700, 30921, 23185, 7439]", + "total_badness": 169166.81415 } ], "lshape3d.geo": [ @@ -774,48 +774,48 @@ { "ne1d": 5886, "ne2d": 48052, - "ne3d": 179545, - "quality_histogram": "[0, 0, 0, 0, 5, 29, 71, 190, 576, 1440, 3405, 7596, 12496, 20298, 27806, 29839, 29882, 24882, 17039, 3991]", - "total_badness": 238919.11552 + "ne3d": 179262, + "quality_histogram": "[0, 0, 0, 0, 7, 34, 52, 190, 559, 1394, 3332, 7622, 12534, 20021, 27619, 30066, 29961, 25045, 16810, 4016]", + "total_badness": 238415.32571 }, { "ne1d": 2746, - "ne2d": 13854, - "ne3d": 29281, - "quality_histogram": "[0, 0, 0, 0, 13, 18, 39, 151, 352, 858, 1553, 2317, 3286, 4410, 4149, 3714, 3207, 2591, 1903, 720]", - "total_badness": 42193.71037 + "ne2d": 13866, + "ne3d": 29255, + "quality_histogram": "[0, 0, 0, 0, 12, 22, 36, 163, 382, 903, 1510, 2377, 3268, 4375, 4191, 3761, 3120, 2567, 1846, 722]", + "total_badness": 42256.964101 }, { "ne1d": 4106, - "ne2d": 27992, - "ne3d": 70855, - "quality_histogram": "[0, 0, 0, 2, 32, 78, 216, 416, 816, 1670, 2904, 4412, 7023, 9393, 10226, 10366, 9509, 7379, 4635, 1778]", - "total_badness": 100246.61498 + "ne2d": 27994, + "ne3d": 70558, + "quality_histogram": "[0, 0, 0, 2, 32, 84, 194, 406, 841, 1669, 2783, 4416, 6997, 9372, 10151, 10346, 9564, 7474, 4487, 1740]", + "total_badness": 99764.452235 } ], "manyholes2.geo": [ { "ne1d": 10202, - "ne2d": 55372, - "ne3d": 127827, - "quality_histogram": "[0, 0, 0, 0, 5, 32, 110, 296, 815, 2079, 4599, 7839, 11878, 17623, 18568, 18410, 17079, 14485, 10463, 3546]", - "total_badness": 176563.67789 + "ne2d": 55380, + "ne3d": 127866, + "quality_histogram": "[0, 0, 0, 0, 5, 32, 101, 306, 842, 2081, 4519, 7983, 11838, 17786, 18634, 18254, 16922, 14537, 10444, 3582]", + "total_badness": 176665.61274 } ], "matrix.geo": [ { "ne1d": 174, "ne2d": 1198, - "ne3d": 5230, - "quality_histogram": "[0, 0, 39, 135, 124, 88, 128, 171, 147, 232, 362, 408, 517, 611, 596, 522, 470, 391, 228, 61]", - "total_badness": 9566.0829115 + "ne3d": 5246, + "quality_histogram": "[0, 0, 39, 136, 119, 93, 134, 174, 148, 224, 329, 399, 532, 581, 603, 563, 474, 398, 241, 59]", + "total_badness": 9567.4544817 }, { "ne1d": 106, - "ne2d": 612, - "ne3d": 1934, - "quality_histogram": "[0, 3, 20, 92, 116, 153, 159, 169, 221, 167, 180, 178, 141, 110, 64, 56, 36, 38, 27, 4]", - "total_badness": 4909.4781297 + "ne2d": 610, + "ne3d": 1936, + "quality_histogram": "[0, 1, 11, 66, 104, 143, 140, 142, 192, 179, 201, 199, 161, 135, 74, 57, 51, 46, 29, 5]", + "total_badness": 4606.0709672 }, { "ne1d": 132, @@ -827,9 +827,9 @@ { "ne1d": 174, "ne2d": 1198, - "ne3d": 5125, - "quality_histogram": "[0, 0, 34, 121, 107, 67, 129, 138, 126, 191, 298, 378, 483, 572, 632, 582, 502, 440, 242, 83]", - "total_badness": 9045.5508083 + "ne3d": 5176, + "quality_histogram": "[0, 0, 31, 113, 115, 69, 111, 172, 123, 209, 285, 339, 485, 597, 595, 628, 503, 468, 254, 79]", + "total_badness": 9086.4626755 }, { "ne1d": 248, @@ -894,16 +894,16 @@ { "ne1d": 170, "ne2d": 436, - "ne3d": 1270, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 3, 10, 15, 39, 63, 110, 115, 152, 180, 191, 155, 127, 91, 18]", - "total_badness": 1821.2768739 + "ne3d": 1274, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 10, 12, 31, 68, 104, 114, 149, 189, 199, 148, 132, 98, 17]", + "total_badness": 1812.8134062 }, { "ne1d": 134, "ne2d": 276, "ne3d": 504, "quality_histogram": "[0, 0, 0, 1, 4, 0, 7, 6, 20, 26, 32, 43, 59, 68, 74, 61, 43, 39, 18, 3]", - "total_badness": 791.50892935 + "total_badness": 791.50880644 }, { "ne1d": 194, @@ -915,16 +915,16 @@ { "ne1d": 266, "ne2d": 986, - "ne3d": 4115, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 2, 13, 35, 69, 153, 349, 587, 725, 753, 807, 482, 139]", - "total_badness": 5225.4949656 + "ne3d": 4120, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 3, 9, 30, 60, 164, 343, 555, 738, 768, 818, 486, 145]", + "total_badness": 5216.1612676 }, { "ne1d": 674, - "ne2d": 6854, - "ne3d": 82733, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 8, 25, 91, 233, 657, 1793, 4084, 8021, 12983, 17298, 18878, 14198, 4463]", - "total_badness": 101049.26725 + "ne2d": 6856, + "ne3d": 82761, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 10, 84, 220, 616, 1785, 4044, 8183, 13189, 17574, 18506, 14181, 4365]", + "total_badness": 101090.57562 } ], "period.geo": [ @@ -937,17 +937,17 @@ }, { "ne1d": 160, - "ne2d": 288, - "ne3d": 660, - "quality_histogram": "[0, 0, 0, 0, 4, 15, 18, 27, 46, 63, 64, 69, 69, 61, 55, 62, 52, 35, 14, 6]", - "total_badness": 1159.9625164 + "ne2d": 286, + "ne3d": 642, + "quality_histogram": "[0, 0, 4, 7, 11, 22, 28, 28, 40, 61, 66, 58, 59, 55, 53, 53, 40, 36, 16, 5]", + "total_badness": 1235.2259283 }, { "ne1d": 232, "ne2d": 598, - "ne3d": 1630, - "quality_histogram": "[0, 10, 22, 41, 40, 50, 62, 102, 107, 117, 123, 146, 150, 157, 143, 118, 109, 76, 50, 7]", - "total_badness": 3464.4094355 + "ne3d": 1654, + "quality_histogram": "[5, 18, 43, 57, 47, 59, 62, 79, 117, 120, 126, 148, 134, 159, 134, 113, 117, 66, 39, 11]", + "total_badness": 3928.2006441 }, { "ne1d": 344, @@ -959,9 +959,9 @@ { "ne1d": 480, "ne2d": 2256, - "ne3d": 11694, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 10, 18, 52, 120, 262, 551, 975, 1482, 2010, 2258, 2052, 1485, 417]", - "total_badness": 14947.136242 + "ne3d": 11709, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 9, 15, 51, 115, 243, 547, 966, 1489, 2032, 2273, 2081, 1459, 426]", + "total_badness": 14941.96653 }, { "ne1d": 820, @@ -974,54 +974,54 @@ "plane.stl": [ { "ne1d": 890, - "ne2d": 2602, - "ne3d": 8196, - "quality_histogram": "[4, 14, 33, 28, 57, 45, 41, 60, 132, 229, 346, 495, 686, 967, 1178, 1220, 1147, 862, 516, 136]", - "total_badness": 12564.547698 + "ne2d": 2600, + "ne3d": 8187, + "quality_histogram": "[4, 14, 31, 31, 52, 43, 39, 66, 137, 205, 329, 452, 712, 916, 1161, 1269, 1162, 923, 510, 131]", + "total_badness": 12484.653426 }, { "ne1d": 572, - "ne2d": 1174, - "ne3d": 1694, - "quality_histogram": "[4, 23, 46, 46, 75, 74, 108, 138, 137, 144, 161, 142, 133, 122, 123, 82, 76, 40, 16, 4]", - "total_badness": 4372.11206 + "ne2d": 1180, + "ne3d": 1679, + "quality_histogram": "[3, 23, 38, 46, 50, 78, 94, 132, 138, 164, 167, 143, 142, 134, 114, 83, 64, 39, 20, 7]", + "total_badness": 4208.4459264 }, { "ne1d": 724, - "ne2d": 1714, - "ne3d": 3224, - "quality_histogram": "[5, 18, 33, 40, 56, 43, 77, 73, 134, 152, 208, 268, 361, 393, 403, 364, 270, 202, 98, 26]", - "total_badness": 6080.3507333 + "ne2d": 1718, + "ne3d": 3253, + "quality_histogram": "[4, 18, 38, 40, 50, 32, 60, 65, 115, 141, 204, 272, 353, 384, 426, 392, 308, 197, 125, 29]", + "total_badness": 6003.270597 }, { "ne1d": 956, - "ne2d": 2822, - "ne3d": 8566, - "quality_histogram": "[3, 13, 29, 46, 47, 55, 59, 62, 82, 146, 206, 403, 597, 917, 1190, 1339, 1412, 1134, 653, 173]", - "total_badness": 12683.902882 + "ne2d": 2812, + "ne3d": 8628, + "quality_histogram": "[3, 11, 28, 48, 49, 52, 57, 65, 85, 151, 228, 381, 614, 897, 1208, 1356, 1426, 1137, 649, 183]", + "total_badness": 12760.118913 }, { "ne1d": 1554, - "ne2d": 6386, - "ne3d": 31762, - "quality_histogram": "[4, 7, 9, 5, 23, 52, 59, 71, 104, 225, 359, 757, 1413, 2496, 4045, 5423, 5957, 5777, 3931, 1045]", - "total_badness": 41359.256776 + "ne2d": 6384, + "ne3d": 31436, + "quality_histogram": "[3, 7, 13, 5, 28, 50, 58, 74, 110, 186, 361, 708, 1401, 2494, 3893, 5404, 6143, 5665, 3793, 1040]", + "total_badness": 40918.999105 }, { "ne1d": 2992, - "ne2d": 23320, - "ne3d": 280073, - "quality_histogram": "[5, 11, 12, 11, 6, 26, 37, 77, 204, 513, 1236, 2811, 6880, 15472, 29023, 45343, 58607, 60675, 45323, 13801]", - "total_badness": 345610.85278 + "ne2d": 23312, + "ne3d": 279091, + "quality_histogram": "[4, 10, 11, 11, 5, 29, 38, 96, 197, 478, 1129, 2682, 6574, 15333, 28982, 45307, 58111, 60865, 45633, 13596]", + "total_badness": 344025.56886 } ], "revolution.geo": [ { "ne1d": 320, - "ne2d": 3108, - "ne3d": 8430, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 17, 70, 149, 296, 547, 773, 995, 1092, 1140, 1100, 981, 723, 439, 108]", - "total_badness": 12383.964938 + "ne2d": 3110, + "ne3d": 8443, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 12, 45, 144, 318, 519, 804, 967, 1078, 1145, 1112, 987, 738, 454, 119]", + "total_badness": 12356.528396 }, { "ne1d": 160, @@ -1033,53 +1033,53 @@ { "ne1d": 240, "ne2d": 1830, - "ne3d": 3853, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 26, 104, 193, 325, 413, 511, 521, 464, 404, 361, 294, 180, 51]", - "total_badness": 5840.4488172 + "ne3d": 3870, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 5, 29, 108, 195, 310, 445, 521, 478, 473, 425, 351, 292, 195, 41]", + "total_badness": 5884.7598106 }, { "ne1d": 320, - "ne2d": 3108, - "ne3d": 8209, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 29, 78, 193, 438, 633, 872, 1006, 1175, 1170, 1064, 870, 542, 133]", - "total_badness": 11635.076736 + "ne2d": 3110, + "ne3d": 8269, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 24, 69, 199, 438, 654, 876, 1057, 1127, 1199, 1061, 888, 548, 128]", + "total_badness": 11704.49421 }, { "ne1d": 480, - "ne2d": 6842, - "ne3d": 32953, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 14, 75, 263, 655, 1352, 2599, 4181, 5729, 6408, 6084, 4357, 1234]", - "total_badness": 41689.744856 + "ne2d": 6864, + "ne3d": 33003, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 5, 20, 80, 243, 674, 1446, 2651, 4133, 5647, 6385, 6118, 4423, 1178]", + "total_badness": 41802.827145 }, { "ne1d": 800, - "ne2d": 17922, - "ne3d": 203414, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 10, 47, 152, 582, 1679, 4413, 10542, 20265, 31871, 42901, 45622, 34581, 10749]", - "total_badness": 248722.35265 + "ne2d": 17934, + "ne3d": 201498, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 44, 148, 603, 1656, 4364, 10078, 19992, 31915, 42284, 45543, 34094, 10774]", + "total_badness": 246262.93603 } ], "screw.step": [ { "ne1d": 400, - "ne2d": 1438, - "ne3d": 2474, - "quality_histogram": "[0, 0, 0, 0, 1, 0, 12, 83, 92, 159, 198, 257, 262, 314, 289, 253, 227, 182, 117, 28]", - "total_badness": 3881.0304023 + "ne2d": 1434, + "ne3d": 2427, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 14, 92, 79, 162, 203, 243, 285, 278, 277, 276, 216, 178, 97, 26]", + "total_badness": 3828.4168327 }, { "ne1d": 530, - "ne2d": 2696, - "ne3d": 7980, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 9, 30, 78, 160, 263, 421, 685, 1103, 1288, 1442, 1377, 868, 253]", - "total_badness": 10417.869333 + "ne2d": 2702, + "ne3d": 7966, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 8, 30, 75, 152, 297, 462, 754, 1064, 1384, 1434, 1253, 807, 242]", + "total_badness": 10467.778337 }, { "ne1d": 668, - "ne2d": 5002, - "ne3d": 31490, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 4, 19, 52, 128, 304, 753, 1737, 3178, 5049, 6602, 6978, 5109, 1574]", - "total_badness": 38732.690385 + "ne2d": 5008, + "ne3d": 31630, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 5, 20, 43, 129, 317, 796, 1773, 3387, 5061, 6627, 6931, 5011, 1528]", + "total_badness": 38978.120895 } ], "sculpture.geo": [ @@ -1121,9 +1121,9 @@ { "ne1d": 480, "ne2d": 2394, - "ne3d": 6748, - "quality_histogram": "[0, 0, 0, 0, 1, 4, 5, 15, 24, 39, 66, 124, 269, 503, 757, 1064, 1337, 1301, 926, 313]", - "total_badness": 8573.2040767 + "ne3d": 6791, + "quality_histogram": "[0, 0, 0, 0, 2, 3, 12, 10, 30, 33, 80, 135, 286, 503, 747, 1080, 1312, 1266, 984, 308]", + "total_badness": 8649.5978251 } ], "shaft.geo": [ @@ -1137,16 +1137,16 @@ { "ne1d": 410, "ne2d": 606, - "ne3d": 970, - "quality_histogram": "[0, 0, 0, 0, 1, 2, 1, 5, 20, 24, 50, 60, 97, 114, 166, 163, 130, 89, 30, 18]", - "total_badness": 1397.8970919 + "ne3d": 933, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 4, 1, 17, 25, 47, 58, 90, 116, 155, 146, 124, 96, 36, 17]", + "total_badness": 1336.5110795 }, { "ne1d": 510, "ne2d": 1004, - "ne3d": 2028, - "quality_histogram": "[12, 66, 88, 83, 91, 102, 83, 114, 82, 91, 110, 133, 141, 170, 191, 196, 164, 63, 39, 9]", - "total_badness": 5876.1112217 + "ne3d": 2048, + "quality_histogram": "[11, 74, 88, 69, 81, 94, 99, 125, 99, 122, 96, 133, 133, 165, 190, 186, 163, 67, 45, 8]", + "total_badness": 5937.4200337 }, { "ne1d": 708, @@ -1232,9 +1232,9 @@ { "ne1d": 30, "ne2d": 116, - "ne3d": 339, - "quality_histogram": "[0, 0, 5, 25, 35, 46, 27, 29, 44, 20, 29, 20, 17, 12, 7, 10, 6, 4, 2, 1]", - "total_badness": 988.71756633 + "ne3d": 345, + "quality_histogram": "[0, 0, 5, 24, 43, 41, 26, 26, 38, 32, 20, 18, 24, 14, 8, 9, 5, 7, 4, 1]", + "total_badness": 988.81847916 }, { "ne1d": 46, @@ -1314,15 +1314,15 @@ "ne1d": 390, "ne2d": 522, "ne3d": 1353, - "quality_histogram": "[0, 0, 4, 14, 16, 44, 75, 122, 130, 145, 161, 125, 147, 105, 84, 88, 47, 33, 11, 2]", - "total_badness": 2765.5786315 + "quality_histogram": "[0, 0, 3, 17, 15, 42, 75, 123, 130, 146, 161, 124, 147, 105, 84, 88, 47, 33, 11, 2]", + "total_badness": 2768.022266 }, { "ne1d": 512, "ne2d": 874, "ne3d": 2397, "quality_histogram": "[0, 0, 1, 3, 9, 23, 41, 72, 132, 142, 188, 204, 304, 389, 343, 237, 138, 97, 48, 26]", - "total_badness": 3983.5618538 + "total_badness": 3983.5650135 }, { "ne1d": 690, @@ -1333,17 +1333,17 @@ }, { "ne1d": 1050, - "ne2d": 3810, - "ne3d": 17908, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 4, 28, 39, 62, 196, 545, 1378, 2252, 2434, 2681, 2721, 2643, 2269, 655]", - "total_badness": 23429.874099 + "ne2d": 3812, + "ne3d": 18010, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 29, 42, 57, 198, 540, 1405, 2251, 2392, 2790, 2784, 2612, 2242, 664]", + "total_badness": 23560.24016 }, { "ne1d": 1722, "ne2d": 10042, - "ne3d": 84876, - "quality_histogram": "[0, 0, 0, 0, 3, 4, 55, 1429, 759, 414, 790, 1332, 2665, 5819, 9227, 13451, 16247, 16582, 12204, 3895]", - "total_badness": 109229.6135 + "ne3d": 84690, + "quality_histogram": "[0, 0, 0, 0, 2, 3, 54, 1424, 754, 408, 795, 1316, 2637, 5766, 9155, 13453, 16224, 16583, 12169, 3947]", + "total_badness": 108937.41902 } ], "twobricks.geo": [ From 6ca6a5e7911da954f08c19e22971c7d1bb7453bf Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 14 Oct 2019 16:19:52 +0200 Subject: [PATCH 063/120] CombineImprove() 2D: optimize all faces at once --- libsrc/meshing/improve2.cpp | 46 +++++++------ tests/pytest/results.json | 126 ++++++++++++++++++------------------ 2 files changed, 85 insertions(+), 87 deletions(-) diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index 90f984cd..d431d338 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -568,22 +568,11 @@ namespace netgen void MeshOptimize2d :: CombineImprove (Mesh & mesh) { - if (!faceindex) - { - SplitImprove(mesh); - PrintMessage (3, "Combine improve"); - - for (faceindex = 1; faceindex <= mesh.GetNFD(); faceindex++) - { - CombineImprove (mesh); - - if (multithread.terminate) - throw NgException ("Meshing stopped"); - } - faceindex = 0; - return; - } + SplitImprove(mesh); + PrintMessage (3, "Combine improve"); + if (multithread.terminate) + throw NgException ("Meshing stopped"); static Timer timer ("Combineimprove 2D"); RegionTimer reg (timer); @@ -597,18 +586,25 @@ namespace netgen Array seia; - mesh.GetSurfaceElementsOfFace (faceindex, seia); + if(faceindex) + mesh.GetSurfaceElementsOfFace (faceindex, seia); + else + { + seia.SetSize(mesh.GetNSE()); + ParallelFor( IntRange(mesh.GetNSE()), [&seia] (auto i) NETGEN_LAMBDA_INLINE + { seia[i] = i; }); + } - for (SurfaceElementIndex sei : seia) - if (mesh[sei].GetNP() != 3) - return; - - - int surfnr = 0; - if (faceindex) - surfnr = mesh.GetFaceDescriptor (faceindex).SurfNr(); + bool mixed = false; + ParallelFor( Range(seia), [&] (auto i) NETGEN_LAMBDA_INLINE + { + if (mesh[seia[i]].GetNP() != 3) + mixed = true; + }); + if(mixed) + return; int np = mesh.GetNP(); @@ -651,6 +647,8 @@ namespace netgen for (int k = 0; k < 3; k++) if (hel[k] == pi) { + const int faceindex = hel.GetIndex(); + const int surfnr = mesh.GetFaceDescriptor (faceindex).SurfNr(); GetNormalVector (surfnr, mesh[pi], hel.GeomInfoPi(k+1), normals[pi]); break; } diff --git a/tests/pytest/results.json b/tests/pytest/results.json index 208703f2..8a28b004 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -685,45 +685,45 @@ "hinge.stl": [ { "ne1d": 456, - "ne2d": 1224, - "ne3d": 2038, - "quality_histogram": "[0, 0, 0, 0, 0, 3, 6, 19, 29, 40, 76, 138, 161, 261, 320, 286, 277, 232, 148, 42]", - "total_badness": 2873.2214111 + "ne2d": 1218, + "ne3d": 2007, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 7, 22, 35, 43, 69, 124, 175, 266, 301, 273, 272, 226, 144, 48]", + "total_badness": 2839.693559 }, { "ne1d": 298, - "ne2d": 596, - "ne3d": 767, - "quality_histogram": "[0, 0, 1, 10, 8, 6, 20, 17, 35, 48, 56, 101, 95, 108, 73, 77, 49, 40, 21, 2]", - "total_badness": 1334.5519444 + "ne2d": 606, + "ne3d": 782, + "quality_histogram": "[0, 0, 1, 9, 6, 5, 18, 17, 33, 53, 60, 95, 99, 112, 83, 73, 47, 49, 20, 2]", + "total_badness": 1342.4305041 }, { "ne1d": 370, - "ne2d": 846, - "ne3d": 1140, - "quality_histogram": "[0, 0, 0, 1, 2, 9, 15, 17, 27, 44, 69, 118, 143, 133, 176, 168, 96, 61, 51, 10]", - "total_badness": 1773.0754642 + "ne2d": 854, + "ne3d": 1136, + "quality_histogram": "[0, 0, 0, 1, 3, 9, 21, 24, 34, 44, 70, 113, 151, 137, 158, 154, 97, 68, 43, 9]", + "total_badness": 1798.68351 }, { "ne1d": 516, - "ne2d": 1566, - "ne3d": 2529, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 4, 12, 27, 53, 110, 151, 242, 298, 395, 355, 324, 296, 203, 57]", - "total_badness": 3539.0006937 + "ne2d": 1574, + "ne3d": 2551, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 4, 9, 22, 56, 91, 150, 262, 288, 378, 368, 350, 304, 214, 53]", + "total_badness": 3546.3587224 }, { "ne1d": 722, - "ne2d": 2866, - "ne3d": 6641, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 4, 22, 39, 63, 158, 347, 598, 883, 1056, 1125, 1156, 945, 243]", - "total_badness": 8521.5496278 + "ne2d": 2872, + "ne3d": 6679, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 22, 38, 58, 158, 368, 659, 826, 1064, 1147, 1157, 900, 277]", + "total_badness": 8576.0981512 }, { "ne1d": 1862, - "ne2d": 19490, - "ne3d": 138145, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 12, 42, 164, 454, 1165, 3079, 7378, 13727, 21879, 28700, 30921, 23185, 7439]", - "total_badness": 169166.81415 + "ne2d": 19494, + "ne3d": 137231, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 7, 48, 161, 424, 1135, 2966, 6918, 13385, 21373, 28847, 31139, 23298, 7529]", + "total_badness": 167698.91174 } ], "lshape3d.geo": [ @@ -893,31 +893,31 @@ "part1.stl": [ { "ne1d": 170, - "ne2d": 436, - "ne3d": 1274, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 10, 12, 31, 68, 104, 114, 149, 189, 199, 148, 132, 98, 17]", - "total_badness": 1812.8134062 + "ne2d": 448, + "ne3d": 1242, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 3, 9, 14, 27, 62, 80, 118, 165, 171, 191, 160, 126, 91, 23]", + "total_badness": 1762.3248217 }, { "ne1d": 134, - "ne2d": 276, - "ne3d": 504, - "quality_histogram": "[0, 0, 0, 1, 4, 0, 7, 6, 20, 26, 32, 43, 59, 68, 74, 61, 43, 39, 18, 3]", - "total_badness": 791.50880644 + "ne2d": 288, + "ne3d": 521, + "quality_histogram": "[0, 0, 1, 2, 5, 7, 6, 10, 18, 23, 40, 41, 47, 59, 72, 76, 56, 37, 18, 3]", + "total_badness": 839.17126404 }, { "ne1d": 194, - "ne2d": 590, - "ne3d": 1688, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 2, 4, 15, 35, 70, 127, 179, 237, 295, 293, 240, 156, 34]", - "total_badness": 2247.145727 + "ne2d": 594, + "ne3d": 1666, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 5, 16, 23, 59, 118, 160, 264, 288, 282, 255, 167, 27]", + "total_badness": 2197.5763632 }, { "ne1d": 266, "ne2d": 986, - "ne3d": 4120, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 3, 9, 30, 60, 164, 343, 555, 738, 768, 818, 486, 145]", - "total_badness": 5216.1612676 + "ne3d": 4090, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 2, 11, 35, 59, 152, 324, 579, 738, 770, 768, 506, 145]", + "total_badness": 5178.06234 }, { "ne1d": 674, @@ -974,45 +974,45 @@ "plane.stl": [ { "ne1d": 890, - "ne2d": 2600, - "ne3d": 8187, - "quality_histogram": "[4, 14, 31, 31, 52, 43, 39, 66, 137, 205, 329, 452, 712, 916, 1161, 1269, 1162, 923, 510, 131]", - "total_badness": 12484.653426 + "ne2d": 2620, + "ne3d": 8323, + "quality_histogram": "[5, 21, 28, 32, 53, 48, 47, 80, 151, 239, 321, 490, 681, 901, 1189, 1198, 1208, 892, 597, 142]", + "total_badness": 12887.967725 }, { "ne1d": 572, - "ne2d": 1180, - "ne3d": 1679, - "quality_histogram": "[3, 23, 38, 46, 50, 78, 94, 132, 138, 164, 167, 143, 142, 134, 114, 83, 64, 39, 20, 7]", - "total_badness": 4208.4459264 + "ne2d": 1196, + "ne3d": 1793, + "quality_histogram": "[11, 31, 38, 55, 69, 104, 109, 132, 143, 150, 154, 158, 135, 136, 121, 82, 79, 51, 30, 5]", + "total_badness": 4800.1708991 }, { "ne1d": 724, - "ne2d": 1718, - "ne3d": 3253, - "quality_histogram": "[4, 18, 38, 40, 50, 32, 60, 65, 115, 141, 204, 272, 353, 384, 426, 392, 308, 197, 125, 29]", - "total_badness": 6003.270597 + "ne2d": 1726, + "ne3d": 3259, + "quality_histogram": "[5, 19, 38, 39, 48, 38, 53, 68, 126, 153, 210, 276, 357, 394, 388, 356, 323, 218, 123, 27]", + "total_badness": 6069.660571 }, { "ne1d": 956, - "ne2d": 2812, - "ne3d": 8628, - "quality_histogram": "[3, 11, 28, 48, 49, 52, 57, 65, 85, 151, 228, 381, 614, 897, 1208, 1356, 1426, 1137, 649, 183]", - "total_badness": 12760.118913 + "ne2d": 2820, + "ne3d": 8391, + "quality_histogram": "[3, 12, 32, 49, 46, 54, 59, 63, 86, 144, 250, 389, 575, 816, 1238, 1375, 1331, 1047, 665, 157]", + "total_badness": 12510.073302 }, { "ne1d": 1554, - "ne2d": 6384, - "ne3d": 31436, - "quality_histogram": "[3, 7, 13, 5, 28, 50, 58, 74, 110, 186, 361, 708, 1401, 2494, 3893, 5404, 6143, 5665, 3793, 1040]", - "total_badness": 40918.999105 + "ne2d": 6388, + "ne3d": 31455, + "quality_histogram": "[3, 7, 11, 8, 27, 51, 59, 79, 108, 196, 350, 697, 1388, 2535, 4050, 5292, 6175, 5518, 3822, 1079]", + "total_badness": 40980.318629 }, { "ne1d": 2992, - "ne2d": 23312, - "ne3d": 279091, - "quality_histogram": "[4, 10, 11, 11, 5, 29, 38, 96, 197, 478, 1129, 2682, 6574, 15333, 28982, 45307, 58111, 60865, 45633, 13596]", - "total_badness": 344025.56886 + "ne2d": 23328, + "ne3d": 276363, + "quality_histogram": "[4, 10, 12, 10, 7, 20, 37, 80, 203, 470, 1122, 2731, 6675, 14971, 28708, 44685, 57676, 60478, 45018, 13446]", + "total_badness": 340678.17837 } ], "revolution.geo": [ From 0f26e41f4d3bcb4bd0635c132d333bd41b6ee2a5 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 14 Oct 2019 16:33:16 +0200 Subject: [PATCH 064/120] 4 Tasks per thread (better load balancing) --- libsrc/meshing/improve2.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index d431d338..8e1c9576 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -653,7 +653,7 @@ namespace netgen break; } } - }); + }, TasksPerThread(4)); timerstart.Stop(); @@ -667,7 +667,7 @@ namespace netgen double d_badness = CombineImproveEdge(mesh, elementsonnode, normals, fixed, pi1, pi2, true); if(d_badness < 0.0) candidate_edges[improvement_counter++] = make_tuple(d_badness, i); - }); + }, TasksPerThread(4)); auto edges_with_improvement = candidate_edges.Part(0, improvement_counter.load()); QuickSort(edges_with_improvement); From 7c96e22a60b2b3e36a24db30ea3e08597121cf0f Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 14 Oct 2019 17:59:45 +0200 Subject: [PATCH 065/120] Remove one test case with inconsistent results --- tests/pytest/results.json | 7 ------- tests/pytest/test_tutorials.py | 2 ++ 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/tests/pytest/results.json b/tests/pytest/results.json index 8a28b004..da57b936 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -454,13 +454,6 @@ "quality_histogram": "[0, 0, 0, 16, 20, 29, 22, 22, 6, 8, 6, 14, 5, 13, 14, 25, 18, 13, 11, 0]", "total_badness": 604.89450225 }, - { - "ne1d": 72, - "ne2d": 324, - "ne3d": 643, - "quality_histogram": "[0, 0, 4, 8, 20, 32, 45, 67, 71, 66, 52, 48, 47, 47, 28, 28, 43, 21, 11, 5]", - "total_badness": 1398.9137975 - }, { "ne1d": 104, "ne2d": 496, diff --git a/tests/pytest/test_tutorials.py b/tests/pytest/test_tutorials.py index a0ba44a5..32d53d50 100644 --- a/tests/pytest/test_tutorials.py +++ b/tests/pytest/test_tutorials.py @@ -58,6 +58,8 @@ def getMeshingparameters(filename): return standard[:3] # this gets too big for finer meshsizes if filename == "screw.step": return standard[3:] # coarser meshes don't work here + if filename == "cylsphere.geo": + return standard[0:2] + standard[3:] # coarse gives inconsistent reults (other mesh on MacOS) if filename == "part1.stl": return standard[0:1] + standard[2:] # very coarse does not work return standard From c2e658274a6d4d9535c69133f46856a392b9d1d1 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 14 Oct 2019 18:01:11 +0200 Subject: [PATCH 066/120] Avoid recursive call of signal handler --- libsrc/core/exception.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libsrc/core/exception.cpp b/libsrc/core/exception.cpp index 3727412a..93e0e7e9 100644 --- a/libsrc/core/exception.cpp +++ b/libsrc/core/exception.cpp @@ -167,6 +167,11 @@ namespace ngcore static void ngcore_signal_handler(int sig) { + static bool first_call = true; + if(!first_call) + exit(1); // avoid endless recursions if signals are caused by this handler + first_call = false; + switch(sig) { case SIGABRT: From d4d57040f674d19fc1a55025af85571ff0b1e388 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 14 Oct 2019 18:26:08 +0200 Subject: [PATCH 067/120] Use new delaunay tree with double --- libsrc/meshing/delaunay.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libsrc/meshing/delaunay.cpp b/libsrc/meshing/delaunay.cpp index 2bf1f674..a152b762 100644 --- a/libsrc/meshing/delaunay.cpp +++ b/libsrc/meshing/delaunay.cpp @@ -3,7 +3,7 @@ namespace netgen { - template + template class DelaunayTree { public: @@ -14,7 +14,7 @@ namespace netgen struct Leaf { - Point<2*dim, float> p[N]; + Point<2*dim, TSCAL> p[N]; T index[N]; int n_elements; int nr; @@ -208,7 +208,7 @@ namespace netgen { // add two new nodes and one new leaf int n_elements = leaf->n_elements; - ArrayMem coords(n_elements); + ArrayMem coords(n_elements); ArrayMem order(n_elements); // separate points in two halves, first sort all coordinates in direction dir @@ -282,8 +282,8 @@ namespace netgen } }; - typedef BoxTree<3> DTREE; - // typedef DelaunayTree<3> DTREE; + // typedef BoxTree<3> DTREE; + typedef DelaunayTree<3> DTREE; static const int deltetfaces[][3] = { { 1, 2, 3 }, From 8659e5a3ee5c3beec7dadb9dcaed05b39ffdbd24 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Fri, 18 Oct 2019 13:40:51 +0200 Subject: [PATCH 068/120] some thread-safe STLGeometry projection functions --- libsrc/stlgeom/stlgeom.cpp | 40 ++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/libsrc/stlgeom/stlgeom.cpp b/libsrc/stlgeom/stlgeom.cpp index 0036bbb8..7d254162 100644 --- a/libsrc/stlgeom/stlgeom.cpp +++ b/libsrc/stlgeom/stlgeom.cpp @@ -124,33 +124,29 @@ bool STLGeometry :: CalcPointGeomInfo(int /*surfind*/, PointGeomInfo& gi, const bool STLGeometry :: ProjectPointGI (int surfind, Point<3> & p, PointGeomInfo & gi) const { - SelectChartOfTriangle(gi.trignum); - gi.trignum = Project (p); - if (!gi.trignum) + static std::mutex mutex_project_whole_surface; + int meshchart = GetChartNr(gi.trignum); + const STLChart& chart = GetChart(meshchart); + int trignum = chart.ProjectNormal(p); + if(trignum==0) { + // non-thread-safe implementation + std::lock_guard guard(mutex_project_whole_surface); PrintMessage(7,"project failed"); - - gi.trignum = ProjectOnWholeSurface(p); - if (!gi.trignum) - { + SelectChartOfTriangle (gi.trignum); // needed because ProjectOnWholeSurface uses meshchartnv (the normal vector of selected chart) + trignum = ProjectOnWholeSurface(p); + if(trignum==0) + { PrintMessage(7, "project on whole surface failed"); return false; - } + } } return true; } void STLGeometry :: ProjectPoint (INDEX surfind, Point<3> & p) const { - if (!Project (p)) - { - PrintMessage(7,"project failed"); - - if (!ProjectOnWholeSurface(p)) - { - PrintMessage(7, "project on whole surface failed"); - } - } + throw Exception("ProjectPoint without PointGeomInfo not implemented"); } void STLGeometry :: @@ -173,11 +169,13 @@ PointBetween (const Point<3> & p1, const Point<3> & p2, double secpoint, Point<3> np1 = newp; Point<3> np2 = newp; - SelectChartOfTriangle (gi1.trignum); - int tn1 = Project (np1); + auto ngi1 = gi1; + auto ngi2 = gi2; + // SelectChartOfTriangle (gi1.trignum); + int tn1 = ProjectPointGI (surfi, np1, ngi1); - SelectChartOfTriangle (gi2.trignum); - int tn2 = Project (np2); + // SelectChartOfTriangle (gi2.trignum); + int tn2 = ProjectPointGI (surfi, np2, ngi2); newgi.trignum = tn1; //urspruengliche version newp = np1; //urspruengliche version From c98ecafa2f0e76b6f85a3db7f52eff4a5713de9c Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Fri, 18 Oct 2019 14:09:32 +0200 Subject: [PATCH 069/120] Update results --- tests/pytest/results.json | 1340 ++++++++++++++++++------------------- 1 file changed, 670 insertions(+), 670 deletions(-) diff --git a/tests/pytest/results.json b/tests/pytest/results.json index da57b936..10f15113 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -3,9 +3,9 @@ { "ne1d": 74, "ne2d": 54, - "ne3d": 40, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 16, 1, 5, 2, 0, 0, 0]", - "total_badness": 61.085020204 + "ne3d": 39, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 6, 14, 0, 8, 1, 0, 0, 1]", + "total_badness": 58.504327315 }, { "ne1d": 59, @@ -24,155 +24,155 @@ { "ne1d": 74, "ne2d": 54, - "ne3d": 40, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 16, 1, 5, 2, 0, 0, 0]", - "total_badness": 61.085020204 + "ne3d": 39, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 6, 14, 0, 8, 1, 0, 0, 1]", + "total_badness": 58.504327315 }, { "ne1d": 118, - "ne2d": 140, - "ne3d": 165, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 9, 13, 23, 20, 31, 25, 21, 14, 6, 1]", - "total_badness": 233.73328932 + "ne2d": 128, + "ne3d": 146, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 6, 11, 15, 19, 23, 29, 14, 9, 3, 10, 2]", + "total_badness": 221.53127331 }, { "ne1d": 181, - "ne2d": 325, - "ne3d": 528, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 19, 38, 53, 74, 80, 99, 85, 63, 9]", - "total_badness": 687.31675405 + "ne2d": 295, + "ne3d": 478, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 6, 20, 38, 41, 79, 96, 81, 59, 46, 7]", + "total_badness": 634.07879728 } ], "boxcyl.geo": [ { "ne1d": 190, - "ne2d": 468, - "ne3d": 846, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 31, 93, 78, 103, 80, 92, 103, 102, 84, 56, 21]", - "total_badness": 1229.0231928 + "ne2d": 452, + "ne3d": 838, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 4, 24, 113, 90, 93, 118, 93, 82, 89, 68, 47, 13]", + "total_badness": 1250.6676912 }, { "ne1d": 94, "ne2d": 114, - "ne3d": 157, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 3, 8, 13, 13, 15, 7, 12, 11, 19, 14, 12, 21, 5, 3]", - "total_badness": 260.17372209 + "ne3d": 156, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 6, 9, 10, 8, 12, 9, 13, 7, 20, 15, 15, 22, 5, 3]", + "total_badness": 257.95680767 }, { "ne1d": 136, - "ne2d": 222, - "ne3d": 386, - "quality_histogram": "[0, 0, 0, 1, 2, 3, 2, 7, 8, 15, 16, 36, 36, 59, 53, 55, 58, 19, 15, 1]", - "total_badness": 590.51625062 + "ne2d": 218, + "ne3d": 378, + "quality_histogram": "[0, 0, 0, 1, 1, 1, 1, 3, 14, 20, 20, 34, 45, 51, 41, 52, 56, 18, 19, 1]", + "total_badness": 576.7536717 }, { "ne1d": 190, - "ne2d": 468, - "ne3d": 833, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 32, 89, 78, 83, 86, 83, 106, 103, 89, 62, 21]", - "total_badness": 1200.9010008 + "ne2d": 452, + "ne3d": 826, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 1, 21, 112, 89, 94, 110, 88, 87, 79, 79, 50, 13]", + "total_badness": 1223.565534 }, { "ne1d": 284, - "ne2d": 938, - "ne3d": 3742, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 25, 55, 131, 247, 484, 640, 754, 710, 529, 161]", - "total_badness": 4685.7832014 + "ne2d": 912, + "ne3d": 3696, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 10, 20, 64, 152, 268, 438, 622, 744, 728, 497, 147]", + "total_badness": 4653.1667633 }, { "ne1d": 456, - "ne2d": 2496, - "ne3d": 18713, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 10, 39, 127, 338, 795, 1684, 2888, 4053, 4409, 3223, 1146]", - "total_badness": 22695.778021 + "ne2d": 2450, + "ne3d": 18381, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 6, 19, 64, 164, 415, 920, 1808, 2907, 3777, 4130, 3152, 1018]", + "total_badness": 22479.104821 } ], "circle_on_cube.geo": [ { "ne1d": 94, - "ne2d": 170, - "ne3d": 637, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 4, 5, 18, 38, 54, 74, 84, 109, 110, 73, 55, 12]", - "total_badness": 863.74076861 + "ne2d": 152, + "ne3d": 608, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 8, 27, 31, 47, 60, 88, 114, 93, 70, 55, 11]", + "total_badness": 828.41267216 }, { "ne1d": 40, "ne2d": 38, - "ne3d": 46, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 2, 4, 8, 8, 6, 7, 5, 1, 2, 1, 0, 0, 0, 0]", - "total_badness": 97.323158335 + "ne3d": 53, + "quality_histogram": "[0, 0, 0, 0, 1, 3, 1, 4, 6, 12, 4, 9, 2, 2, 4, 3, 0, 2, 0, 0]", + "total_badness": 109.70868385 }, { "ne1d": 62, - "ne2d": 96, - "ne3d": 196, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 8, 8, 27, 34, 42, 33, 20, 9, 6, 1]", - "total_badness": 282.75693303 + "ne2d": 86, + "ne3d": 182, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 8, 9, 17, 19, 28, 35, 22, 22, 11, 5, 3]", + "total_badness": 266.64934593 }, { "ne1d": 94, - "ne2d": 170, - "ne3d": 622, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 12, 26, 39, 80, 70, 113, 112, 93, 62, 10]", - "total_badness": 821.68699443 + "ne2d": 152, + "ne3d": 593, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 15, 27, 33, 50, 84, 110, 102, 84, 64, 14]", + "total_badness": 786.32868296 }, { "ne1d": 138, - "ne2d": 384, - "ne3d": 2028, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 9, 28, 67, 157, 250, 347, 419, 398, 261, 88]", - "total_badness": 2540.7133216 + "ne2d": 370, + "ne3d": 1891, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 9, 27, 75, 163, 236, 317, 385, 323, 276, 78]", + "total_badness": 2378.4348462 }, { "ne1d": 224, - "ne2d": 944, - "ne3d": 11860, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 29, 85, 211, 518, 1135, 1851, 2527, 2686, 2118, 688]", - "total_badness": 14411.259826 + "ne2d": 900, + "ne3d": 11870, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 7, 17, 44, 128, 272, 627, 1206, 1832, 2541, 2570, 2011, 615]", + "total_badness": 14569.250591 } ], "cone.geo": [ { "ne1d": 64, - "ne2d": 722, - "ne3d": 1263, - "quality_histogram": "[0, 0, 0, 0, 0, 3, 4, 14, 48, 62, 95, 129, 141, 162, 163, 145, 107, 112, 61, 17]", - "total_badness": 1927.4650748 + "ne2d": 716, + "ne3d": 1192, + "quality_histogram": "[0, 0, 0, 0, 1, 2, 13, 27, 54, 76, 88, 145, 123, 139, 140, 131, 123, 80, 40, 10]", + "total_badness": 1887.2343616 }, { "ne1d": 32, "ne2d": 220, - "ne3d": 700, - "quality_histogram": "[0, 0, 13, 49, 51, 51, 51, 46, 63, 42, 38, 49, 53, 50, 42, 33, 27, 21, 18, 3]", - "total_badness": 1807.5903418 + "ne3d": 737, + "quality_histogram": "[0, 0, 16, 46, 43, 51, 72, 61, 53, 51, 52, 46, 68, 44, 31, 27, 41, 18, 13, 4]", + "total_badness": 1894.7838255 }, { "ne1d": 48, - "ne2d": 428, - "ne3d": 930, - "quality_histogram": "[6, 33, 75, 70, 53, 52, 44, 63, 73, 77, 65, 88, 62, 37, 46, 30, 20, 21, 15, 0]", - "total_badness": 3263.5820874 + "ne2d": 418, + "ne3d": 673, + "quality_histogram": "[0, 3, 23, 17, 19, 16, 38, 41, 64, 86, 77, 66, 50, 49, 40, 29, 23, 25, 6, 1]", + "total_badness": 1591.8445773 }, { "ne1d": 64, - "ne2d": 722, - "ne3d": 1244, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 10, 25, 61, 77, 117, 140, 158, 172, 138, 144, 118, 66, 15]", - "total_badness": 1843.7405821 + "ne2d": 716, + "ne3d": 1169, + "quality_histogram": "[0, 0, 0, 0, 1, 0, 10, 22, 34, 57, 80, 108, 139, 147, 154, 144, 115, 88, 57, 13]", + "total_badness": 1787.8610181 }, { "ne1d": 96, - "ne2d": 1660, - "ne3d": 4395, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 14, 39, 86, 147, 270, 427, 584, 724, 725, 723, 492, 162]", - "total_badness": 5745.9242938 + "ne2d": 1654, + "ne3d": 4374, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 9, 44, 77, 192, 302, 495, 598, 729, 718, 662, 425, 121]", + "total_badness": 5789.8784966 }, { "ne1d": 160, - "ne2d": 4748, - "ne3d": 27365, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 8, 35, 121, 352, 715, 1535, 2882, 4456, 5703, 5878, 4303, 1377]", - "total_badness": 33766.111622 + "ne2d": 4722, + "ne3d": 27153, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 10, 50, 134, 382, 841, 1698, 2942, 4533, 5543, 5629, 4130, 1260]", + "total_badness": 33712.712047 } ], "cube.geo": [ @@ -213,54 +213,54 @@ }, { "ne1d": 72, - "ne2d": 116, - "ne3d": 167, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 2, 5, 5, 16, 8, 18, 30, 31, 29, 11, 7]", - "total_badness": 224.7322738 + "ne2d": 108, + "ne3d": 171, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 6, 11, 14, 16, 27, 28, 27, 24, 11, 3]", + "total_badness": 233.61347097 } ], "cubeandring.geo": [ { "ne1d": 262, - "ne2d": 726, - "ne3d": 2225, - "quality_histogram": "[0, 10, 19, 36, 98, 105, 126, 110, 98, 59, 71, 87, 153, 186, 272, 275, 223, 160, 109, 28]", - "total_badness": 4466.5881396 + "ne2d": 690, + "ne3d": 2140, + "quality_histogram": "[3, 12, 19, 38, 56, 105, 96, 77, 120, 76, 100, 117, 154, 202, 231, 248, 218, 143, 97, 28]", + "total_badness": 4299.394376 }, { "ne1d": 134, - "ne2d": 164, - "ne3d": 250, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 4, 4, 6, 13, 24, 28, 43, 40, 34, 25, 19, 7, 2]", - "total_badness": 372.39445714 + "ne2d": 156, + "ne3d": 249, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 4, 5, 14, 24, 38, 39, 36, 35, 25, 19, 6, 1]", + "total_badness": 369.67745906 }, { "ne1d": 190, - "ne2d": 300, - "ne3d": 646, - "quality_histogram": "[0, 0, 0, 1, 2, 0, 0, 2, 10, 27, 58, 69, 66, 107, 87, 91, 60, 44, 20, 2]", - "total_badness": 978.54289744 + "ne2d": 278, + "ne3d": 574, + "quality_histogram": "[0, 0, 0, 1, 1, 0, 0, 6, 6, 32, 46, 56, 64, 94, 90, 65, 56, 34, 20, 3]", + "total_badness": 874.96542794 }, { "ne1d": 262, - "ne2d": 726, - "ne3d": 2087, - "quality_histogram": "[0, 2, 12, 18, 54, 90, 113, 95, 88, 55, 41, 59, 111, 196, 254, 299, 260, 193, 114, 33]", - "total_badness": 3774.9667473 + "ne2d": 690, + "ne3d": 1978, + "quality_histogram": "[0, 0, 8, 21, 34, 88, 102, 58, 96, 50, 73, 83, 123, 183, 205, 261, 260, 178, 122, 33]", + "total_badness": 3497.4685292 }, { "ne1d": 378, - "ne2d": 1412, - "ne3d": 7741, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 11, 17, 64, 139, 294, 516, 862, 1328, 1545, 1486, 1147, 331]", - "total_badness": 9711.521562 + "ne2d": 1346, + "ne3d": 7382, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 9, 22, 42, 97, 190, 367, 566, 900, 1275, 1377, 1321, 979, 237]", + "total_badness": 9468.2810231 }, { "ne1d": 624, - "ne2d": 3944, - "ne3d": 38347, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 18, 40, 131, 351, 853, 2070, 3906, 6037, 7925, 8484, 6438, 2092]", - "total_badness": 47000.212862 + "ne2d": 3810, + "ne3d": 37770, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 6, 20, 70, 145, 415, 941, 1986, 3872, 6127, 7881, 8209, 6217, 1880]", + "total_badness": 46477.07805 } ], "cubeandspheres.geo": [ @@ -268,353 +268,353 @@ "ne1d": 144, "ne2d": 148, "ne3d": 98, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 18, 19, 13, 20, 2, 9, 1, 0]", - "total_badness": 145.83375079 - }, - { - "ne1d": 144, - "ne2d": 150, - "ne3d": 100, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 7, 10, 16, 18, 15, 17, 6, 5, 4, 0]", - "total_badness": 146.6468601 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 14, 14, 14, 18, 14, 6, 6, 0, 0]", + "total_badness": 149.18816997 }, { "ne1d": 144, "ne2d": 148, "ne3d": 98, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 6, 6, 19, 21, 12, 18, 5, 4, 4, 0]", - "total_badness": 145.14580879 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 11, 11, 17, 13, 16, 18, 3, 6, 0, 0]", + "total_badness": 148.56830588 }, { "ne1d": 144, "ne2d": 148, "ne3d": 98, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 18, 19, 13, 20, 2, 9, 1, 0]", - "total_badness": 145.83375079 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 8, 12, 14, 22, 10, 18, 4, 6, 0, 0]", + "total_badness": 148.71179128 + }, + { + "ne1d": 144, + "ne2d": 148, + "ne3d": 98, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 14, 14, 14, 18, 14, 6, 6, 0, 0]", + "total_badness": 149.18816997 }, { "ne1d": 264, - "ne2d": 390, - "ne3d": 369, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 5, 19, 26, 42, 46, 49, 41, 53, 45, 27, 10, 2]", - "total_badness": 554.2809713 + "ne2d": 352, + "ne3d": 322, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 15, 33, 40, 34, 47, 42, 23, 32, 29, 18, 5, 1]", + "total_badness": 519.67445044 }, { "ne1d": 428, - "ne2d": 926, - "ne3d": 1074, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 23, 50, 36, 109, 137, 96, 117, 160, 162, 67, 60, 32, 22]", - "total_badness": 1675.8711911 + "ne2d": 902, + "ne3d": 1050, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 21, 55, 53, 60, 106, 140, 125, 89, 115, 114, 79, 49, 37, 7]", + "total_badness": 1742.9580036 } ], "cubemcyl.geo": [ { "ne1d": 142, - "ne2d": 2488, - "ne3d": 20783, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 26, 94, 208, 408, 708, 1158, 1848, 2485, 3200, 3251, 3127, 2474, 1418, 376]", - "total_badness": 28813.276387 + "ne2d": 2446, + "ne3d": 20376, + "quality_histogram": "[0, 0, 0, 0, 0, 4, 30, 124, 254, 467, 838, 1358, 1902, 2621, 2988, 3092, 2912, 2176, 1289, 321]", + "total_badness": 28732.001319 }, { "ne1d": 64, - "ne2d": 642, - "ne3d": 3214, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 7, 13, 34, 74, 140, 230, 351, 455, 533, 531, 378, 284, 151, 31]", - "total_badness": 4592.7629352 + "ne2d": 610, + "ne3d": 3095, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 9, 21, 39, 75, 144, 238, 340, 436, 489, 491, 378, 261, 140, 34]", + "total_badness": 4458.1067866 }, { "ne1d": 102, - "ne2d": 1402, - "ne3d": 8234, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 12, 30, 67, 143, 309, 586, 856, 1050, 1271, 1291, 1179, 825, 462, 151]", - "total_badness": 11552.618825 + "ne2d": 1370, + "ne3d": 7955, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 11, 63, 157, 297, 497, 895, 1095, 1296, 1215, 1069, 758, 452, 148]", + "total_badness": 11150.474701 }, { "ne1d": 142, - "ne2d": 2488, - "ne3d": 19499, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 5, 27, 106, 226, 529, 1209, 2008, 2862, 3440, 3576, 3083, 1921, 507]", - "total_badness": 25390.546576 + "ne2d": 2446, + "ne3d": 18903, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 9, 52, 134, 343, 650, 1168, 2032, 2738, 3338, 3304, 2846, 1788, 501]", + "total_badness": 24879.568157 }, { "ne1d": 210, - "ne2d": 5508, - "ne3d": 88767, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 26, 120, 352, 982, 2386, 5436, 9851, 14528, 18286, 19003, 13703, 4092]", - "total_badness": 109764.47526 + "ne2d": 5438, + "ne3d": 88766, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 6, 29, 124, 395, 1107, 2534, 5743, 9904, 14438, 18388, 18815, 13214, 4069]", + "total_badness": 110093.18284 }, { "ne1d": 362, - "ne2d": 15122, - "ne3d": 524413, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 23, 86, 347, 1131, 3167, 9094, 23844, 49271, 81498, 111440, 122044, 93488, 28977]", - "total_badness": 636787.56071 + "ne2d": 14996, + "ne3d": 526308, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 18, 83, 344, 1098, 3118, 9070, 23211, 48496, 81254, 110846, 122403, 95673, 30692]", + "total_badness": 638104.66873 } ], "cubemsphere.geo": [ { "ne1d": 90, - "ne2d": 702, - "ne3d": 4867, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 5, 17, 43, 80, 172, 274, 422, 600, 765, 725, 748, 588, 317, 111]", - "total_badness": 6717.4363413 + "ne2d": 658, + "ne3d": 4711, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 10, 27, 50, 94, 180, 303, 459, 591, 709, 689, 658, 536, 328, 77]", + "total_badness": 6607.5525427 }, { "ne1d": 44, - "ne2d": 274, - "ne3d": 768, - "quality_histogram": "[0, 0, 0, 0, 1, 5, 9, 11, 26, 62, 72, 78, 114, 95, 91, 78, 74, 24, 22, 6]", - "total_badness": 1237.8358347 + "ne2d": 230, + "ne3d": 615, + "quality_histogram": "[0, 0, 0, 0, 2, 3, 14, 27, 47, 71, 83, 96, 66, 62, 49, 38, 29, 11, 14, 3]", + "total_badness": 1101.3768112 }, { "ne1d": 68, - "ne2d": 402, - "ne3d": 1600, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 4, 26, 61, 119, 170, 232, 277, 269, 214, 148, 71, 7]", - "total_badness": 2248.6479915 + "ne2d": 382, + "ne3d": 1582, + "quality_histogram": "[0, 0, 0, 1, 0, 0, 1, 8, 21, 35, 80, 112, 189, 245, 243, 240, 193, 125, 74, 15]", + "total_badness": 2282.2332329 }, { "ne1d": 90, - "ne2d": 702, - "ne3d": 4618, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 4, 24, 53, 140, 293, 465, 706, 805, 841, 747, 418, 120]", - "total_badness": 6022.3952178 + "ne2d": 658, + "ne3d": 4427, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 3, 12, 34, 88, 172, 319, 479, 662, 739, 759, 614, 420, 124]", + "total_badness": 5868.6109754 }, { "ne1d": 146, - "ne2d": 1492, - "ne3d": 17800, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 7, 23, 89, 208, 524, 1085, 1942, 2969, 3729, 3811, 2675, 736]", - "total_badness": 22074.204803 + "ne2d": 1400, + "ne3d": 17593, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 11, 29, 113, 227, 554, 1165, 1970, 2907, 3573, 3694, 2609, 740]", + "total_badness": 21904.812218 }, { "ne1d": 248, - "ne2d": 4354, - "ne3d": 113716, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 5, 12, 43, 136, 381, 909, 2353, 5720, 11280, 18112, 23886, 25957, 19090, 5832]", - "total_badness": 139103.15382 + "ne2d": 4228, + "ne3d": 113220, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 13, 44, 146, 376, 952, 2444, 5872, 11431, 17868, 23828, 25460, 19207, 5578]", + "total_badness": 138667.4834 } ], "cylinder.geo": [ { "ne1d": 52, "ne2d": 288, - "ne3d": 410, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 2, 8, 14, 31, 47, 57, 67, 64, 53, 44, 13, 9]", - "total_badness": 577.74781759 + "ne3d": 373, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 17, 48, 41, 57, 46, 46, 40, 40, 21, 10, 1]", + "total_badness": 570.55070099 }, { "ne1d": 24, "ne2d": 66, - "ne3d": 124, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 9, 12, 16, 23, 39, 12, 5]", - "total_badness": 153.9684245 + "ne3d": 113, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 5, 11, 14, 21, 20, 26, 5, 7]", + "total_badness": 144.11768709 }, { "ne1d": 36, "ne2d": 152, - "ne3d": 376, - "quality_histogram": "[0, 0, 0, 8, 18, 19, 17, 43, 35, 17, 29, 16, 18, 42, 20, 21, 38, 16, 12, 7]", - "total_badness": 793.09247202 + "ne3d": 350, + "quality_histogram": "[7, 11, 19, 25, 33, 33, 23, 20, 37, 19, 9, 14, 28, 12, 12, 4, 32, 4, 6, 2]", + "total_badness": 1478.5840853 }, { "ne1d": 52, "ne2d": 288, - "ne3d": 404, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 2, 4, 15, 25, 38, 68, 66, 55, 55, 52, 15, 8]", - "total_badness": 562.71987918 + "ne3d": 373, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 17, 48, 40, 56, 45, 48, 40, 40, 22, 10, 1]", + "total_badness": 570.48747936 }, { "ne1d": 76, "ne2d": 636, - "ne3d": 1146, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 12, 34, 57, 101, 121, 179, 190, 199, 137, 96, 17]", - "total_badness": 1547.7672308 + "ne3d": 1137, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 7, 27, 48, 71, 98, 132, 182, 156, 180, 136, 79, 19]", + "total_badness": 1578.5996937 }, { "ne1d": 124, - "ne2d": 1672, - "ne3d": 8039, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 16, 52, 160, 405, 772, 1246, 1710, 1808, 1421, 444]", - "total_badness": 9788.5339464 + "ne2d": 1668, + "ne3d": 8144, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 1, 6, 20, 64, 189, 420, 858, 1386, 1685, 1693, 1360, 461]", + "total_badness": 9978.9003582 } ], "cylsphere.geo": [ { "ne1d": 104, "ne2d": 496, - "ne3d": 711, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 9, 15, 36, 63, 90, 107, 103, 99, 56, 60, 50, 17, 2]", - "total_badness": 1105.8880942 + "ne3d": 769, + "quality_histogram": "[0, 0, 0, 0, 1, 1, 8, 10, 20, 31, 64, 104, 111, 105, 113, 63, 69, 47, 18, 4]", + "total_badness": 1205.3563502 }, { "ne1d": 48, - "ne2d": 142, - "ne3d": 242, - "quality_histogram": "[0, 0, 0, 16, 20, 29, 22, 22, 6, 8, 6, 14, 5, 13, 14, 25, 18, 13, 11, 0]", - "total_badness": 604.89450225 + "ne2d": 136, + "ne3d": 211, + "quality_histogram": "[0, 0, 1, 11, 19, 15, 23, 13, 14, 8, 12, 6, 9, 17, 11, 8, 12, 26, 6, 0]", + "total_badness": 508.6341945 }, { "ne1d": 104, "ne2d": 496, - "ne3d": 709, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 5, 15, 29, 63, 86, 110, 109, 89, 69, 66, 45, 15, 4]", - "total_badness": 1092.3394563 + "ne3d": 763, + "quality_histogram": "[0, 0, 0, 0, 1, 1, 6, 8, 15, 24, 53, 92, 109, 105, 114, 87, 71, 48, 28, 1]", + "total_badness": 1166.824818 }, { "ne1d": 152, - "ne2d": 1084, - "ne3d": 2798, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 5, 19, 44, 91, 162, 267, 345, 422, 507, 505, 322, 108]", - "total_badness": 3620.8176099 + "ne2d": 1082, + "ne3d": 2764, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 6, 17, 47, 113, 184, 268, 318, 434, 511, 462, 305, 96]", + "total_badness": 3608.4305823 }, { "ne1d": 248, - "ne2d": 2820, - "ne3d": 17745, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 20, 57, 142, 331, 880, 1771, 2788, 3668, 3998, 3037, 1049]", - "total_badness": 21647.214644 + "ne2d": 2798, + "ne3d": 17399, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 24, 51, 181, 398, 941, 1798, 2813, 3642, 3802, 2815, 930]", + "total_badness": 21362.004145 } ], "ellipsoid.geo": [ { "ne1d": 0, - "ne2d": 704, - "ne3d": 1297, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 7, 14, 42, 76, 119, 157, 154, 160, 158, 142, 111, 89, 54, 14]", - "total_badness": 2009.8527353 + "ne2d": 686, + "ne3d": 1267, + "quality_histogram": "[0, 0, 0, 0, 1, 3, 9, 22, 59, 98, 116, 117, 161, 168, 150, 127, 117, 65, 41, 13]", + "total_badness": 2020.1005544 }, { "ne1d": 0, - "ne2d": 192, - "ne3d": 915, - "quality_histogram": "[24, 146, 135, 112, 105, 65, 62, 41, 46, 43, 32, 26, 19, 24, 15, 10, 6, 1, 3, 0]", - "total_badness": 5760.7267346 + "ne2d": 182, + "ne3d": 847, + "quality_histogram": "[16, 151, 142, 110, 54, 76, 47, 43, 37, 39, 25, 31, 26, 15, 11, 10, 4, 6, 1, 3]", + "total_badness": 5395.4074386 }, { "ne1d": 0, - "ne2d": 394, - "ne3d": 592, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 5, 9, 21, 38, 80, 86, 90, 99, 53, 48, 29, 22, 12]", - "total_badness": 893.18441542 + "ne2d": 384, + "ne3d": 581, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 8, 17, 29, 58, 73, 91, 80, 78, 65, 33, 27, 19, 2]", + "total_badness": 912.08491356 }, { "ne1d": 0, - "ne2d": 704, - "ne3d": 1282, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 10, 33, 59, 108, 136, 158, 156, 163, 153, 115, 97, 69, 23]", - "total_badness": 1929.3894181 + "ne2d": 686, + "ne3d": 1249, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 7, 14, 45, 79, 96, 114, 162, 158, 141, 155, 123, 88, 52, 14]", + "total_badness": 1922.5886374 }, { "ne1d": 0, - "ne2d": 1618, - "ne3d": 5569, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 23, 73, 130, 303, 511, 700, 922, 1025, 989, 693, 195]", - "total_badness": 7142.2540344 + "ne2d": 1598, + "ne3d": 5214, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 16, 32, 97, 186, 312, 520, 658, 859, 914, 857, 604, 157]", + "total_badness": 6803.6112693 }, { "ne1d": 0, - "ne2d": 4236, - "ne3d": 37387, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 17, 75, 239, 644, 1587, 3545, 5826, 7874, 8638, 6846, 2092]", - "total_badness": 45341.992565 + "ne2d": 4194, + "ne3d": 37370, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 8, 19, 44, 111, 311, 846, 1867, 3637, 5870, 7895, 8585, 6262, 1912]", + "total_badness": 45726.525344 } ], "ellipticcone.geo": [ { "ne1d": 174, - "ne2d": 1562, - "ne3d": 5180, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 18, 65, 115, 211, 361, 589, 766, 881, 904, 732, 405, 130]", - "total_badness": 6920.4601657 + "ne2d": 1528, + "ne3d": 5118, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 16, 33, 75, 139, 240, 434, 619, 759, 884, 814, 643, 366, 93]", + "total_badness": 6977.8809322 }, { "ne1d": 86, - "ne2d": 380, + "ne2d": 374, "ne3d": 585, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 5, 13, 17, 32, 57, 64, 73, 84, 89, 68, 47, 22, 12]", - "total_badness": 860.61770269 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 9, 13, 24, 46, 63, 60, 85, 82, 78, 61, 38, 19, 5]", + "total_badness": 887.43996754 }, { "ne1d": 130, - "ne2d": 864, - "ne3d": 1734, - "quality_histogram": "[0, 0, 0, 0, 0, 7, 9, 28, 37, 57, 85, 135, 132, 216, 225, 256, 238, 177, 100, 32]", - "total_badness": 2535.8367438 + "ne2d": 846, + "ne3d": 1680, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 18, 28, 47, 86, 139, 185, 232, 222, 255, 201, 164, 77, 23]", + "total_badness": 2436.7946247 }, { "ne1d": 174, - "ne2d": 1562, - "ne3d": 4943, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 15, 49, 116, 255, 456, 635, 917, 1005, 806, 517, 167]", - "total_badness": 6347.4280983 + "ne2d": 1528, + "ne3d": 4853, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 9, 32, 61, 129, 296, 505, 739, 906, 892, 704, 453, 126]", + "total_badness": 6344.0542598 }, { "ne1d": 258, - "ne2d": 3468, - "ne3d": 13314, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 33, 103, 197, 351, 652, 1077, 1619, 2280, 2518, 2361, 1583, 535]", - "total_badness": 17113.967555 + "ne2d": 3378, + "ne3d": 13096, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 12, 37, 100, 226, 405, 741, 1138, 1694, 2154, 2382, 2242, 1503, 461]", + "total_badness": 16999.928783 }, { "ne1d": 432, - "ne2d": 9544, - "ne3d": 69891, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 9, 37, 119, 313, 839, 1927, 4086, 7715, 11454, 14338, 14977, 10816, 3260]", - "total_badness": 86472.194086 + "ne2d": 9384, + "ne3d": 69399, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 10, 40, 159, 347, 879, 2068, 4096, 7587, 11297, 14016, 14721, 10764, 3413]", + "total_badness": 86005.445455 } ], "ellipticcyl.geo": [ { "ne1d": 156, - "ne2d": 996, - "ne3d": 2299, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 12, 15, 55, 86, 117, 235, 272, 372, 360, 358, 240, 144, 33]", - "total_badness": 3202.1380209 + "ne2d": 978, + "ne3d": 2173, + "quality_histogram": "[0, 0, 0, 0, 1, 2, 6, 21, 39, 80, 120, 163, 228, 297, 314, 272, 277, 200, 116, 37]", + "total_badness": 3176.0734083 }, { "ne1d": 76, - "ne2d": 238, - "ne3d": 325, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 18, 28, 26, 38, 68, 55, 45, 28, 11, 2]", - "total_badness": 459.61476239 + "ne2d": 234, + "ne3d": 318, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 16, 23, 26, 47, 60, 57, 36, 31, 15, 2]", + "total_badness": 445.78992995 }, { "ne1d": 116, - "ne2d": 596, - "ne3d": 1129, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 2, 10, 28, 38, 75, 130, 159, 208, 199, 162, 100, 17]", - "total_badness": 1500.1384781 + "ne2d": 590, + "ne3d": 1110, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 9, 20, 40, 76, 108, 163, 174, 169, 154, 96, 82, 17]", + "total_badness": 1550.1402117 }, { "ne1d": 156, - "ne2d": 996, - "ne3d": 2214, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 4, 40, 47, 89, 182, 262, 324, 362, 381, 279, 196, 46]", - "total_badness": 2974.3073079 + "ne2d": 978, + "ne3d": 2116, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 2, 12, 24, 53, 88, 148, 204, 264, 307, 311, 310, 212, 134, 45]", + "total_badness": 2990.2292327 }, { "ne1d": 232, - "ne2d": 2212, - "ne3d": 8313, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 15, 37, 113, 263, 626, 1005, 1387, 1743, 1660, 1133, 327]", - "total_badness": 10392.004794 + "ne2d": 2152, + "ne3d": 8180, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 4, 13, 75, 162, 340, 621, 998, 1438, 1633, 1538, 1036, 320]", + "total_badness": 10345.93668 }, { "ne1d": 388, - "ne2d": 6142, - "ne3d": 54975, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 12, 45, 127, 329, 844, 2554, 5100, 8469, 11479, 12855, 9876, 3283]", - "total_badness": 66669.096677 + "ne2d": 6032, + "ne3d": 55282, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 17, 55, 134, 358, 1019, 2431, 5189, 8900, 11545, 12575, 9809, 3249]", + "total_badness": 67200.497687 } ], "fichera.geo": [ { "ne1d": 50, "ne2d": 38, - "ne3d": 40, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 4, 3, 5, 7, 8, 2, 1, 0, 2]", - "total_badness": 62.361996939 + "ne3d": 35, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 0, 14, 6, 4, 3, 0, 0, 0]", + "total_badness": 52.723984269 }, { "ne1d": 42, @@ -633,90 +633,90 @@ { "ne1d": 50, "ne2d": 38, - "ne3d": 40, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 4, 3, 5, 7, 8, 2, 1, 0, 2]", - "total_badness": 62.361996939 + "ne3d": 35, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 0, 14, 6, 4, 3, 0, 0, 0]", + "total_badness": 52.723984269 }, { "ne1d": 96, - "ne2d": 120, - "ne3d": 211, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 6, 14, 22, 26, 38, 37, 41, 14, 9]", - "total_badness": 273.06134659 + "ne2d": 106, + "ne3d": 179, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 10, 22, 29, 29, 24, 32, 16, 10, 4]", + "total_badness": 244.43517202 }, { "ne1d": 144, - "ne2d": 274, - "ne3d": 510, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 8, 16, 34, 67, 79, 99, 78, 66, 48, 12]", - "total_badness": 673.19970182 + "ne2d": 256, + "ne3d": 488, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 6, 16, 33, 67, 69, 87, 83, 64, 51, 8]", + "total_badness": 644.18548378 } ], "frame.step": [ { "ne1d": 12694, - "ne2d": 40530, - "ne3d": 221097, - "quality_histogram": "[3, 7, 7, 7, 8, 40, 245, 708, 1672, 3552, 6310, 10581, 17667, 25348, 32001, 36224, 35008, 29057, 18076, 4576]", - "total_badness": 301373.46714 + "ne2d": 40032, + "ne3d": 217255, + "quality_histogram": "[5, 13, 31, 61, 130, 279, 648, 1439, 2748, 4927, 8104, 12603, 18825, 26189, 30309, 33468, 31719, 25459, 15756, 4542]", + "total_badness": 305515.07817 }, { "ne1d": 6026, - "ne2d": 11334, - "ne3d": 30593, - "quality_histogram": "[4, 5, 3, 10, 18, 39, 99, 258, 685, 1029, 1688, 2632, 3417, 4292, 4551, 4273, 3404, 2499, 1366, 321]", - "total_badness": 45414.634083 + "ne2d": 11524, + "ne3d": 30642, + "quality_histogram": "[5, 17, 33, 55, 112, 215, 294, 601, 966, 1480, 2132, 3064, 3480, 3813, 3959, 3899, 2963, 2077, 1083, 394]", + "total_badness": 48718.851933 }, { "ne1d": 9704, - "ne2d": 24442, - "ne3d": 85741, - "quality_histogram": "[1, 6, 6, 9, 8, 30, 83, 164, 483, 1017, 2377, 4530, 7838, 10925, 13440, 14326, 13095, 10227, 5737, 1439]", - "total_badness": 117664.34461 + "ne2d": 24306, + "ne3d": 84372, + "quality_histogram": "[5, 24, 44, 72, 114, 182, 376, 582, 1183, 2141, 3538, 5817, 8397, 11162, 12283, 12562, 11075, 8571, 4984, 1260]", + "total_badness": 122228.21207 } ], "hinge.stl": [ { "ne1d": 456, - "ne2d": 1218, - "ne3d": 2007, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 7, 22, 35, 43, 69, 124, 175, 266, 301, 273, 272, 226, 144, 48]", - "total_badness": 2839.693559 + "ne2d": 1220, + "ne3d": 1980, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 11, 19, 47, 65, 135, 159, 254, 309, 289, 269, 237, 142, 44]", + "total_badness": 2756.1867742 }, { "ne1d": 298, - "ne2d": 606, - "ne3d": 782, - "quality_histogram": "[0, 0, 1, 9, 6, 5, 18, 17, 33, 53, 60, 95, 99, 112, 83, 73, 47, 49, 20, 2]", - "total_badness": 1342.4305041 + "ne2d": 610, + "ne3d": 798, + "quality_histogram": "[0, 0, 1, 9, 10, 6, 28, 14, 41, 51, 72, 81, 97, 98, 79, 82, 52, 48, 25, 4]", + "total_badness": 1395.9318106 }, { "ne1d": 370, - "ne2d": 854, - "ne3d": 1136, - "quality_histogram": "[0, 0, 0, 1, 3, 9, 21, 24, 34, 44, 70, 113, 151, 137, 158, 154, 97, 68, 43, 9]", - "total_badness": 1798.68351 + "ne2d": 856, + "ne3d": 1144, + "quality_histogram": "[0, 0, 0, 1, 4, 6, 18, 28, 41, 51, 76, 117, 140, 147, 147, 148, 99, 70, 43, 8]", + "total_badness": 1817.5662995 }, { "ne1d": 516, "ne2d": 1574, - "ne3d": 2551, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 4, 9, 22, 56, 91, 150, 262, 288, 378, 368, 350, 304, 214, 53]", - "total_badness": 3546.3587224 + "ne3d": 2625, + "quality_histogram": "[0, 0, 0, 0, 1, 2, 4, 10, 41, 66, 110, 179, 253, 312, 372, 380, 333, 296, 218, 48]", + "total_badness": 3701.4387818 }, { "ne1d": 722, - "ne2d": 2872, - "ne3d": 6679, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 22, 38, 58, 158, 368, 659, 826, 1064, 1147, 1157, 900, 277]", - "total_badness": 8576.0981512 + "ne2d": 2866, + "ne3d": 6605, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 1, 25, 48, 59, 177, 334, 665, 897, 1055, 1130, 1130, 838, 242]", + "total_badness": 8524.0032138 }, { "ne1d": 1862, - "ne2d": 19494, - "ne3d": 137231, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 7, 48, 161, 424, 1135, 2966, 6918, 13385, 21373, 28847, 31139, 23298, 7529]", - "total_badness": 167698.91174 + "ne2d": 19474, + "ne3d": 136180, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 7, 31, 132, 391, 1019, 2826, 6825, 13187, 21357, 28846, 30587, 23490, 7479]", + "total_badness": 166221.42387 } ], "lshape3d.geo": [ @@ -750,93 +750,93 @@ }, { "ne1d": 80, - "ne2d": 76, - "ne3d": 88, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 10, 9, 21, 23, 7, 6, 1, 4]", - "total_badness": 121.1271847 + "ne2d": 68, + "ne3d": 76, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 10, 5, 11, 21, 12, 4, 3, 6]", + "total_badness": 100.74904328 }, { "ne1d": 122, - "ne2d": 204, - "ne3d": 326, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 11, 17, 43, 51, 53, 55, 51, 33, 6]", - "total_badness": 427.73309234 + "ne2d": 194, + "ne3d": 314, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 5, 16, 30, 35, 37, 52, 48, 43, 28, 11]", + "total_badness": 424.01540745 } ], "manyholes.geo": [ { "ne1d": 5886, - "ne2d": 48052, - "ne3d": 179262, - "quality_histogram": "[0, 0, 0, 0, 7, 34, 52, 190, 559, 1394, 3332, 7622, 12534, 20021, 27619, 30066, 29961, 25045, 16810, 4016]", - "total_badness": 238415.32571 + "ne2d": 47108, + "ne3d": 178892, + "quality_histogram": "[0, 0, 0, 0, 9, 49, 344, 271, 1077, 1746, 4315, 9252, 12828, 22104, 26682, 30142, 28475, 22329, 13211, 6058]", + "total_badness": 242036.00946 }, { "ne1d": 2746, - "ne2d": 13866, - "ne3d": 29255, - "quality_histogram": "[0, 0, 0, 0, 12, 22, 36, 163, 382, 903, 1510, 2377, 3268, 4375, 4191, 3761, 3120, 2567, 1846, 722]", - "total_badness": 42256.964101 + "ne2d": 13444, + "ne3d": 29535, + "quality_histogram": "[0, 0, 0, 0, 17, 37, 130, 275, 644, 995, 1649, 2438, 3005, 3915, 4857, 4110, 2759, 2067, 1198, 1439]", + "total_badness": 43431.404115 }, { "ne1d": 4106, - "ne2d": 27994, - "ne3d": 70558, - "quality_histogram": "[0, 0, 0, 2, 32, 84, 194, 406, 841, 1669, 2783, 4416, 6997, 9372, 10151, 10346, 9564, 7474, 4487, 1740]", - "total_badness": 99764.452235 + "ne2d": 27422, + "ne3d": 69306, + "quality_histogram": "[0, 0, 0, 6, 39, 119, 211, 574, 1050, 1823, 3574, 5064, 7229, 10576, 9132, 9351, 8299, 6328, 3426, 2505]", + "total_badness": 100153.49841 } ], "manyholes2.geo": [ { "ne1d": 10202, - "ne2d": 55380, - "ne3d": 127866, - "quality_histogram": "[0, 0, 0, 0, 5, 32, 101, 306, 842, 2081, 4519, 7983, 11838, 17786, 18634, 18254, 16922, 14537, 10444, 3582]", - "total_badness": 176665.61274 + "ne2d": 53806, + "ne3d": 128979, + "quality_histogram": "[0, 0, 1, 15, 52, 115, 343, 600, 1518, 2768, 4832, 8179, 11632, 16124, 22272, 20407, 15327, 11446, 6833, 6515]", + "total_badness": 181571.22116 } ], "matrix.geo": [ { "ne1d": 174, - "ne2d": 1198, - "ne3d": 5246, - "quality_histogram": "[0, 0, 39, 136, 119, 93, 134, 174, 148, 224, 329, 399, 532, 581, 603, 563, 474, 398, 241, 59]", - "total_badness": 9567.4544817 + "ne2d": 1112, + "ne3d": 4664, + "quality_histogram": "[0, 0, 20, 71, 60, 66, 112, 199, 239, 366, 369, 455, 446, 506, 495, 423, 362, 273, 145, 57]", + "total_badness": 8426.3306839 }, { "ne1d": 106, - "ne2d": 610, - "ne3d": 1936, - "quality_histogram": "[0, 1, 11, 66, 104, 143, 140, 142, 192, 179, 201, 199, 161, 135, 74, 57, 51, 46, 29, 5]", - "total_badness": 4606.0709672 + "ne2d": 586, + "ne3d": 1974, + "quality_histogram": "[0, 13, 51, 99, 155, 168, 180, 193, 176, 168, 201, 132, 122, 102, 68, 51, 25, 29, 29, 12]", + "total_badness": 5471.3255025 }, { "ne1d": 132, - "ne2d": 830, - "ne3d": 2751, - "quality_histogram": "[0, 0, 4, 57, 63, 116, 124, 163, 226, 230, 333, 307, 270, 240, 206, 164, 105, 82, 43, 18]", - "total_badness": 5616.8677502 + "ne2d": 778, + "ne3d": 2548, + "quality_histogram": "[0, 0, 12, 54, 87, 126, 142, 175, 269, 295, 255, 257, 215, 201, 152, 122, 80, 54, 38, 14]", + "total_badness": 5547.4387913 }, { "ne1d": 174, - "ne2d": 1198, - "ne3d": 5176, - "quality_histogram": "[0, 0, 31, 113, 115, 69, 111, 172, 123, 209, 285, 339, 485, 597, 595, 628, 503, 468, 254, 79]", - "total_badness": 9086.4626755 + "ne2d": 1112, + "ne3d": 4528, + "quality_histogram": "[0, 0, 15, 52, 50, 61, 91, 184, 216, 326, 320, 439, 425, 505, 497, 419, 412, 289, 168, 59]", + "total_badness": 7915.0764915 }, { "ne1d": 248, - "ne2d": 2324, - "ne3d": 16341, - "quality_histogram": "[0, 0, 0, 0, 0, 7, 23, 64, 122, 219, 336, 666, 982, 1584, 2204, 2586, 2786, 2581, 1637, 544]", - "total_badness": 21749.164857 + "ne2d": 2234, + "ne3d": 15738, + "quality_histogram": "[0, 0, 0, 1, 4, 9, 49, 111, 189, 286, 466, 759, 1180, 1558, 2068, 2417, 2414, 2223, 1548, 456]", + "total_badness": 21524.074952 }, { "ne1d": 418, - "ne2d": 5968, - "ne3d": 100573, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 18, 78, 192, 438, 1216, 2786, 6112, 10628, 15970, 20785, 21682, 15766, 4896]", - "total_badness": 124376.56219 + "ne2d": 5836, + "ne3d": 99039, + "quality_histogram": "[0, 0, 0, 1, 1, 3, 15, 45, 125, 259, 646, 1399, 3028, 6125, 10634, 15783, 20056, 20888, 15273, 4758]", + "total_badness": 123167.25076 } ], "ortho.geo": [ @@ -877,466 +877,466 @@ }, { "ne1d": 72, - "ne2d": 116, - "ne3d": 180, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 11, 12, 24, 35, 36, 29, 16, 9]", - "total_badness": 231.52239849 + "ne2d": 108, + "ne3d": 169, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 10, 12, 23, 26, 26, 30, 23, 10, 4]", + "total_badness": 227.08316059 } ], "part1.stl": [ { "ne1d": 170, "ne2d": 448, - "ne3d": 1242, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 3, 9, 14, 27, 62, 80, 118, 165, 171, 191, 160, 126, 91, 23]", - "total_badness": 1762.3248217 + "ne3d": 1260, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 6, 18, 26, 49, 88, 123, 148, 183, 193, 167, 145, 87, 23]", + "total_badness": 1772.4232339 }, { "ne1d": 134, "ne2d": 288, - "ne3d": 521, - "quality_histogram": "[0, 0, 1, 2, 5, 7, 6, 10, 18, 23, 40, 41, 47, 59, 72, 76, 56, 37, 18, 3]", - "total_badness": 839.17126404 + "ne3d": 528, + "quality_histogram": "[0, 0, 0, 1, 3, 3, 5, 6, 14, 33, 36, 50, 63, 70, 69, 69, 55, 27, 20, 4]", + "total_badness": 830.65240856 }, { "ne1d": 194, "ne2d": 594, - "ne3d": 1666, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 5, 16, 23, 59, 118, 160, 264, 288, 282, 255, 167, 27]", - "total_badness": 2197.5763632 + "ne3d": 1710, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 10, 15, 40, 73, 127, 207, 260, 276, 284, 223, 153, 40]", + "total_badness": 2293.663372 }, { "ne1d": 266, "ne2d": 986, - "ne3d": 4090, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 2, 11, 35, 59, 152, 324, 579, 738, 770, 768, 506, 145]", - "total_badness": 5178.06234 + "ne3d": 4084, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 3, 7, 32, 69, 144, 306, 518, 709, 824, 785, 548, 138]", + "total_badness": 5147.3961968 }, { "ne1d": 674, - "ne2d": 6856, - "ne3d": 82761, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 10, 84, 220, 616, 1785, 4044, 8183, 13189, 17574, 18506, 14181, 4365]", - "total_badness": 101090.57562 + "ne2d": 6854, + "ne3d": 82879, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 24, 61, 236, 636, 1697, 4041, 8182, 13143, 17498, 18865, 14126, 4366]", + "total_badness": 101181.66513 } ], "period.geo": [ { "ne1d": 344, - "ne2d": 1136, - "ne3d": 3291, - "quality_histogram": "[0, 0, 0, 0, 1, 6, 24, 38, 73, 142, 237, 280, 363, 430, 473, 394, 337, 293, 163, 37]", - "total_badness": 4941.6426523 + "ne2d": 1092, + "ne3d": 3101, + "quality_histogram": "[0, 0, 0, 0, 4, 13, 23, 64, 104, 148, 235, 320, 331, 363, 393, 363, 304, 218, 161, 57]", + "total_badness": 4789.6346919 }, { "ne1d": 160, - "ne2d": 286, - "ne3d": 642, - "quality_histogram": "[0, 0, 4, 7, 11, 22, 28, 28, 40, 61, 66, 58, 59, 55, 53, 53, 40, 36, 16, 5]", - "total_badness": 1235.2259283 + "ne2d": 272, + "ne3d": 588, + "quality_histogram": "[0, 0, 1, 7, 13, 20, 23, 41, 47, 50, 42, 56, 45, 47, 50, 51, 22, 47, 15, 11]", + "total_badness": 1132.5775066 }, { "ne1d": 232, - "ne2d": 598, - "ne3d": 1654, - "quality_histogram": "[5, 18, 43, 57, 47, 59, 62, 79, 117, 120, 126, 148, 134, 159, 134, 113, 117, 66, 39, 11]", - "total_badness": 3928.2006441 + "ne2d": 552, + "ne3d": 1329, + "quality_histogram": "[0, 0, 4, 13, 23, 41, 64, 69, 81, 107, 118, 125, 143, 114, 102, 95, 117, 58, 32, 23]", + "total_badness": 2516.6683318 }, { "ne1d": 344, - "ne2d": 1136, - "ne3d": 3221, - "quality_histogram": "[0, 0, 0, 0, 0, 3, 20, 24, 54, 111, 178, 268, 317, 453, 436, 450, 365, 311, 187, 44]", - "total_badness": 4704.9518805 + "ne2d": 1092, + "ne3d": 3060, + "quality_histogram": "[0, 0, 0, 0, 4, 9, 20, 47, 94, 129, 219, 274, 328, 371, 378, 370, 334, 265, 162, 56]", + "total_badness": 4632.1450094 }, { "ne1d": 480, - "ne2d": 2256, - "ne3d": 11709, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 9, 15, 51, 115, 243, 547, 966, 1489, 2032, 2273, 2081, 1459, 426]", - "total_badness": 14941.96653 + "ne2d": 2172, + "ne3d": 11163, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 5, 40, 73, 170, 308, 663, 985, 1444, 1852, 2071, 1910, 1223, 416]", + "total_badness": 14472.357604 }, { "ne1d": 820, - "ne2d": 6226, - "ne3d": 68532, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 18, 76, 261, 684, 1675, 3888, 7222, 11072, 14234, 14852, 11076, 3469]", - "total_badness": 84325.408672 + "ne2d": 6098, + "ne3d": 67286, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 7, 26, 114, 290, 816, 1898, 4057, 7076, 10984, 13871, 14152, 10618, 3377]", + "total_badness": 83173.133848 } ], "plane.stl": [ { "ne1d": 890, - "ne2d": 2620, - "ne3d": 8323, - "quality_histogram": "[5, 21, 28, 32, 53, 48, 47, 80, 151, 239, 321, 490, 681, 901, 1189, 1198, 1208, 892, 597, 142]", - "total_badness": 12887.967725 + "ne2d": 2626, + "ne3d": 8421, + "quality_histogram": "[6, 18, 26, 29, 58, 43, 65, 85, 138, 214, 343, 464, 720, 908, 1097, 1315, 1209, 968, 575, 140]", + "total_badness": 12967.318277 }, { - "ne1d": 572, - "ne2d": 1196, - "ne3d": 1793, - "quality_histogram": "[11, 31, 38, 55, 69, 104, 109, 132, 143, 150, 154, 158, 135, 136, 121, 82, 79, 51, 30, 5]", - "total_badness": 4800.1708991 + "ne1d": 570, + "ne2d": 1202, + "ne3d": 1774, + "quality_histogram": "[8, 27, 47, 59, 51, 69, 95, 141, 155, 166, 171, 148, 140, 137, 118, 85, 69, 60, 22, 6]", + "total_badness": 4640.8658317 }, { "ne1d": 724, - "ne2d": 1726, - "ne3d": 3259, - "quality_histogram": "[5, 19, 38, 39, 48, 38, 53, 68, 126, 153, 210, 276, 357, 394, 388, 356, 323, 218, 123, 27]", - "total_badness": 6069.660571 + "ne2d": 1730, + "ne3d": 3248, + "quality_histogram": "[6, 18, 34, 44, 44, 41, 60, 72, 119, 162, 214, 264, 370, 387, 415, 400, 299, 174, 99, 26]", + "total_badness": 6101.8771518 }, { "ne1d": 956, - "ne2d": 2820, - "ne3d": 8391, - "quality_histogram": "[3, 12, 32, 49, 46, 54, 59, 63, 86, 144, 250, 389, 575, 816, 1238, 1375, 1331, 1047, 665, 157]", - "total_badness": 12510.073302 + "ne2d": 2828, + "ne3d": 8439, + "quality_histogram": "[3, 11, 37, 49, 40, 52, 58, 66, 92, 139, 212, 389, 524, 821, 1168, 1367, 1403, 1167, 678, 163]", + "total_badness": 12501.380591 }, { "ne1d": 1554, - "ne2d": 6388, - "ne3d": 31455, - "quality_histogram": "[3, 7, 11, 8, 27, 51, 59, 79, 108, 196, 350, 697, 1388, 2535, 4050, 5292, 6175, 5518, 3822, 1079]", - "total_badness": 40980.318629 + "ne2d": 6372, + "ne3d": 31592, + "quality_histogram": "[4, 7, 14, 6, 20, 51, 59, 69, 107, 192, 374, 768, 1364, 2471, 3945, 5450, 6033, 5767, 3797, 1094]", + "total_badness": 41134.059548 }, { "ne1d": 2992, - "ne2d": 23328, - "ne3d": 276363, - "quality_histogram": "[4, 10, 12, 10, 7, 20, 37, 80, 203, 470, 1122, 2731, 6675, 14971, 28708, 44685, 57676, 60478, 45018, 13446]", - "total_badness": 340678.17837 + "ne2d": 23322, + "ne3d": 281009, + "quality_histogram": "[4, 10, 12, 10, 7, 26, 35, 86, 167, 454, 1176, 2879, 6743, 15159, 28763, 45456, 58769, 61389, 45901, 13963]", + "total_badness": 346296.38075 } ], "revolution.geo": [ { "ne1d": 320, - "ne2d": 3110, - "ne3d": 8443, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 12, 45, 144, 318, 519, 804, 967, 1078, 1145, 1112, 987, 738, 454, 119]", - "total_badness": 12356.528396 + "ne2d": 2976, + "ne3d": 8188, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 16, 79, 152, 311, 565, 736, 920, 1083, 1080, 1027, 960, 678, 480, 99]", + "total_badness": 12075.726682 }, { "ne1d": 160, - "ne2d": 822, - "ne3d": 1279, - "quality_histogram": "[0, 0, 0, 0, 2, 14, 52, 81, 100, 116, 148, 146, 167, 114, 92, 74, 92, 44, 25, 12]", - "total_badness": 2305.3064983 + "ne2d": 800, + "ne3d": 1311, + "quality_histogram": "[0, 0, 1, 2, 6, 25, 68, 91, 144, 135, 132, 130, 126, 109, 101, 88, 79, 40, 31, 3]", + "total_badness": 2483.2141758 }, { "ne1d": 240, - "ne2d": 1830, - "ne3d": 3870, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 5, 29, 108, 195, 310, 445, 521, 478, 473, 425, 351, 292, 195, 41]", - "total_badness": 5884.7598106 + "ne2d": 1768, + "ne3d": 3842, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 8, 29, 95, 175, 307, 416, 446, 505, 495, 424, 392, 324, 178, 48]", + "total_badness": 5778.3652899 }, { "ne1d": 320, - "ne2d": 3110, - "ne3d": 8269, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 24, 69, 199, 438, 654, 876, 1057, 1127, 1199, 1061, 888, 548, 128]", - "total_badness": 11704.49421 + "ne2d": 2976, + "ne3d": 8011, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 5, 23, 86, 233, 422, 652, 798, 1026, 1099, 1107, 1023, 849, 566, 122]", + "total_badness": 11388.557884 }, { "ne1d": 480, - "ne2d": 6864, - "ne3d": 33003, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 5, 20, 80, 243, 674, 1446, 2651, 4133, 5647, 6385, 6118, 4423, 1178]", - "total_badness": 41802.827145 + "ne2d": 6626, + "ne3d": 32594, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 18, 105, 295, 716, 1448, 2646, 4240, 5435, 6192, 6037, 4244, 1212]", + "total_badness": 41402.678067 }, { "ne1d": 800, - "ne2d": 17934, - "ne3d": 201498, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 44, 148, 603, 1656, 4364, 10078, 19992, 31915, 42284, 45543, 34094, 10774]", - "total_badness": 246262.93603 + "ne2d": 17454, + "ne3d": 200716, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 14, 52, 179, 608, 1704, 4559, 10434, 19984, 31785, 41963, 45605, 33701, 10126]", + "total_badness": 245716.04369 } ], "screw.step": [ { "ne1d": 400, - "ne2d": 1434, - "ne3d": 2427, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 14, 92, 79, 162, 203, 243, 285, 278, 277, 276, 216, 178, 97, 26]", - "total_badness": 3828.4168327 + "ne2d": 1480, + "ne3d": 2651, + "quality_histogram": "[0, 0, 2, 0, 7, 15, 48, 74, 114, 189, 194, 241, 282, 297, 335, 308, 242, 172, 102, 29]", + "total_badness": 4282.6220755 }, { "ne1d": 530, - "ne2d": 2702, - "ne3d": 7966, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 8, 30, 75, 152, 297, 462, 754, 1064, 1384, 1434, 1253, 807, 242]", - "total_badness": 10467.778337 + "ne2d": 2746, + "ne3d": 7967, + "quality_histogram": "[0, 2, 3, 1, 10, 18, 34, 59, 110, 180, 278, 411, 575, 811, 1049, 1251, 1297, 972, 713, 193]", + "total_badness": 11136.799459 }, { "ne1d": 668, - "ne2d": 5008, - "ne3d": 31630, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 5, 20, 43, 129, 317, 796, 1773, 3387, 5061, 6627, 6931, 5011, 1528]", - "total_badness": 38978.120895 + "ne2d": 5066, + "ne3d": 31896, + "quality_histogram": "[0, 0, 0, 0, 2, 7, 10, 24, 43, 106, 221, 502, 969, 2036, 3531, 5162, 6478, 6558, 4810, 1437]", + "total_badness": 39857.410858 } ], "sculpture.geo": [ { "ne1d": 192, - "ne2d": 414, - "ne3d": 475, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 5, 17, 18, 32, 62, 64, 97, 98, 41, 25, 11, 2]", - "total_badness": 692.44104062 + "ne2d": 398, + "ne3d": 456, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 2, 2, 11, 20, 37, 45, 57, 71, 77, 71, 38, 14, 9, 0]", + "total_badness": 702.3804118 }, { "ne1d": 102, - "ne2d": 146, - "ne3d": 141, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 5, 11, 19, 19, 36, 29, 17, 2]", - "total_badness": 178.07603683 + "ne2d": 144, + "ne3d": 137, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 10, 16, 17, 22, 29, 18, 18, 2]", + "total_badness": 178.33154961 }, { "ne1d": 144, - "ne2d": 250, - "ne3d": 263, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 6, 7, 14, 24, 29, 53, 46, 49, 24, 7]", - "total_badness": 343.8094424 + "ne2d": 234, + "ne3d": 235, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 7, 11, 11, 25, 36, 49, 37, 32, 18, 2]", + "total_badness": 319.02266286 }, { "ne1d": 192, - "ne2d": 414, - "ne3d": 475, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 5, 17, 18, 32, 62, 64, 97, 98, 41, 25, 11, 2]", - "total_badness": 692.44104062 + "ne2d": 398, + "ne3d": 456, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 1, 2, 11, 21, 39, 46, 57, 70, 77, 70, 37, 14, 9, 0]", + "total_badness": 702.94908258 }, { "ne1d": 288, - "ne2d": 962, - "ne3d": 1326, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 6, 24, 53, 87, 122, 149, 125, 142, 117, 141, 144, 119, 80, 15]", - "total_badness": 2054.7475159 + "ne2d": 938, + "ne3d": 1253, + "quality_histogram": "[0, 0, 1, 0, 2, 6, 15, 34, 68, 89, 152, 139, 125, 125, 138, 126, 99, 59, 53, 22]", + "total_badness": 2054.7201979 }, { "ne1d": 480, - "ne2d": 2394, - "ne3d": 6791, - "quality_histogram": "[0, 0, 0, 0, 2, 3, 12, 10, 30, 33, 80, 135, 286, 503, 747, 1080, 1312, 1266, 984, 308]", - "total_badness": 8649.5978251 + "ne2d": 2324, + "ne3d": 6464, + "quality_histogram": "[0, 0, 0, 3, 7, 8, 17, 14, 20, 52, 96, 165, 302, 547, 852, 1076, 1204, 1135, 726, 240]", + "total_badness": 8431.4328551 } ], "shaft.geo": [ { "ne1d": 708, - "ne2d": 1722, - "ne3d": 2757, - "quality_histogram": "[22, 11, 27, 30, 41, 40, 46, 62, 79, 140, 264, 373, 303, 274, 231, 291, 233, 179, 86, 25]", - "total_badness": 6328.6329226 + "ne2d": 1674, + "ne3d": 2489, + "quality_histogram": "[0, 0, 0, 2, 3, 14, 17, 34, 79, 156, 378, 332, 260, 273, 229, 266, 219, 132, 70, 25]", + "total_badness": 4028.4511449 }, { "ne1d": 410, - "ne2d": 606, - "ne3d": 933, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 4, 1, 17, 25, 47, 58, 90, 116, 155, 146, 124, 96, 36, 17]", - "total_badness": 1336.5110795 + "ne2d": 586, + "ne3d": 869, + "quality_histogram": "[0, 0, 0, 0, 1, 2, 4, 17, 30, 46, 53, 64, 85, 80, 90, 104, 108, 115, 46, 24]", + "total_badness": 1295.3186437 }, { "ne1d": 510, - "ne2d": 1004, - "ne3d": 2048, - "quality_histogram": "[11, 74, 88, 69, 81, 94, 99, 125, 99, 122, 96, 133, 133, 165, 190, 186, 163, 67, 45, 8]", - "total_badness": 5937.4200337 + "ne2d": 970, + "ne3d": 1686, + "quality_histogram": "[0, 0, 12, 26, 56, 51, 61, 87, 109, 113, 134, 139, 159, 175, 176, 150, 125, 58, 39, 16]", + "total_badness": 3309.2557071 }, { "ne1d": 708, - "ne2d": 1722, - "ne3d": 2733, - "quality_histogram": "[6, 8, 10, 17, 29, 39, 34, 40, 80, 132, 254, 397, 302, 295, 238, 297, 250, 192, 88, 25]", - "total_badness": 4814.5951096 + "ne2d": 1674, + "ne3d": 2477, + "quality_histogram": "[0, 0, 0, 2, 1, 9, 15, 36, 69, 148, 389, 328, 265, 262, 218, 288, 215, 130, 77, 25]", + "total_badness": 3983.0754336 }, { "ne1d": 1138, - "ne2d": 4220, - "ne3d": 11242, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 1, 27, 78, 178, 382, 607, 934, 1459, 1772, 2147, 1927, 1325, 403]", - "total_badness": 14539.392197 + "ne2d": 4078, + "ne3d": 10809, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 7, 19, 55, 142, 282, 437, 680, 1039, 1406, 1781, 1874, 1704, 1061, 321]", + "total_badness": 14354.482904 }, { "ne1d": 1792, - "ne2d": 10600, - "ne3d": 63895, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 18, 53, 198, 529, 1486, 3387, 6482, 10124, 13426, 13922, 10754, 3514]", - "total_badness": 78232.724768 + "ne2d": 10390, + "ne3d": 61428, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 7, 36, 113, 262, 726, 1670, 3519, 6476, 9764, 12505, 13045, 10002, 3302]", + "total_badness": 75768.180822 } ], "sphere.geo": [ { "ne1d": 0, - "ne2d": 126, - "ne3d": 126, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 25, 47, 33, 12, 1, 2, 0, 0, 0, 0, 0]", - "total_badness": 237.42979301 + "ne2d": 110, + "ne3d": 110, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 29, 47, 6, 7, 6, 2, 4, 0, 1, 3, 0]", + "total_badness": 205.55211745 }, { "ne1d": 0, - "ne2d": 56, - "ne3d": 56, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 18, 19, 15, 0, 0]", - "total_badness": 68.826138928 + "ne2d": 52, + "ne3d": 52, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 4, 13, 14, 13, 3, 0]", + "total_badness": 65.101112061 }, { "ne1d": 0, - "ne2d": 72, - "ne3d": 72, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 14, 27, 22, 7, 0, 0, 0]", - "total_badness": 97.572347502 + "ne2d": 68, + "ne3d": 68, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 14, 24, 8, 7, 5, 4, 1, 2]", + "total_badness": 96.707948617 }, { "ne1d": 0, - "ne2d": 126, - "ne3d": 126, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 25, 47, 33, 12, 1, 2, 0, 0, 0, 0, 0]", - "total_badness": 237.42979301 + "ne2d": 110, + "ne3d": 110, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 29, 47, 6, 7, 6, 2, 4, 0, 1, 3, 0]", + "total_badness": 205.55211745 }, { "ne1d": 0, - "ne2d": 258, - "ne3d": 366, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 6, 22, 32, 55, 47, 62, 28, 39, 31, 22, 15, 6]", - "total_badness": 562.00749621 + "ne2d": 254, + "ne3d": 350, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 8, 28, 47, 48, 43, 51, 47, 20, 20, 20, 10, 6]", + "total_badness": 555.65023551 }, { "ne1d": 0, - "ne2d": 660, - "ne3d": 2329, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 10, 28, 76, 158, 282, 415, 502, 433, 327, 91]", - "total_badness": 2913.3426209 + "ne2d": 656, + "ne3d": 2286, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 15, 37, 92, 152, 276, 397, 471, 429, 303, 111]", + "total_badness": 2868.3272967 } ], "sphereincube.geo": [ { "ne1d": 46, - "ne2d": 202, - "ne3d": 490, - "quality_histogram": "[0, 0, 8, 59, 42, 29, 53, 45, 55, 46, 33, 14, 16, 11, 15, 12, 12, 24, 11, 5]", - "total_badness": 1429.7083119 + "ne2d": 182, + "ne3d": 445, + "quality_histogram": "[0, 0, 7, 60, 44, 43, 53, 44, 55, 33, 27, 23, 10, 12, 11, 12, 5, 2, 4, 0]", + "total_badness": 1401.4502735 }, { "ne1d": 24, "ne2d": 60, "ne3d": 166, - "quality_histogram": "[0, 0, 5, 12, 14, 15, 31, 10, 2, 1, 3, 2, 7, 9, 13, 13, 15, 9, 4, 1]", - "total_badness": 454.94795255 + "quality_histogram": "[0, 0, 8, 15, 17, 13, 17, 7, 5, 4, 3, 4, 14, 4, 10, 15, 9, 15, 5, 1]", + "total_badness": 472.78592323 }, { "ne1d": 30, - "ne2d": 116, - "ne3d": 345, - "quality_histogram": "[0, 0, 5, 24, 43, 41, 26, 26, 38, 32, 20, 18, 24, 14, 8, 9, 5, 7, 4, 1]", - "total_badness": 988.81847916 + "ne2d": 104, + "ne3d": 294, + "quality_histogram": "[0, 0, 6, 19, 18, 35, 35, 32, 30, 29, 22, 15, 12, 6, 16, 5, 7, 4, 3, 0]", + "total_badness": 831.78873831 }, { "ne1d": 46, - "ne2d": 202, - "ne3d": 498, - "quality_histogram": "[0, 0, 8, 41, 27, 29, 50, 44, 55, 58, 44, 25, 20, 15, 14, 15, 13, 24, 11, 5]", - "total_badness": 1326.92489 + "ne2d": 182, + "ne3d": 443, + "quality_histogram": "[0, 0, 6, 47, 35, 45, 57, 44, 50, 34, 25, 31, 13, 15, 15, 13, 6, 3, 4, 0]", + "total_badness": 1315.3011324 }, { "ne1d": 74, - "ne2d": 418, - "ne3d": 1788, - "quality_histogram": "[0, 0, 0, 0, 0, 6, 6, 21, 28, 38, 73, 98, 167, 213, 251, 273, 258, 200, 112, 44]", - "total_badness": 2540.547751 + "ne2d": 384, + "ne3d": 1597, + "quality_histogram": "[0, 0, 0, 0, 2, 7, 12, 21, 27, 49, 80, 121, 170, 205, 219, 215, 191, 158, 92, 28]", + "total_badness": 2350.3326171 }, { "ne1d": 122, - "ne2d": 1082, - "ne3d": 14039, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 5, 31, 105, 218, 465, 893, 1497, 2202, 2857, 2912, 2179, 674]", - "total_badness": 17464.78638 + "ne2d": 1048, + "ne3d": 13579, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 8, 17, 66, 160, 274, 542, 950, 1530, 2203, 2751, 2677, 1867, 534]", + "total_badness": 17161.325004 } ], "torus.geo": [ { "ne1d": 0, - "ne2d": 2534, - "ne3d": 5745, - "quality_histogram": "[0, 0, 0, 0, 0, 4, 19, 59, 148, 286, 440, 581, 679, 796, 742, 668, 583, 418, 238, 84]", - "total_badness": 8709.4458795 + "ne2d": 2514, + "ne3d": 5726, + "quality_histogram": "[0, 0, 0, 0, 0, 22, 36, 90, 173, 330, 475, 680, 762, 771, 679, 619, 489, 354, 187, 59]", + "total_badness": 8967.2870294 }, { "ne1d": 0, - "ne2d": 692, - "ne3d": 3181, - "quality_histogram": "[166, 714, 477, 367, 312, 232, 199, 167, 108, 100, 92, 66, 48, 39, 30, 27, 18, 13, 6, 0]", - "total_badness": 24641.250872 + "ne2d": 670, + "ne3d": 2988, + "quality_histogram": "[127, 598, 433, 338, 287, 207, 194, 144, 150, 118, 102, 79, 66, 48, 36, 23, 15, 15, 6, 2]", + "total_badness": 21069.350308 }, { "ne1d": 0, - "ne2d": 1446, - "ne3d": 2743, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 14, 62, 135, 247, 356, 403, 430, 384, 298, 200, 152, 59]", - "total_badness": 3928.1549928 + "ne2d": 1426, + "ne3d": 2701, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 7, 25, 75, 171, 327, 369, 435, 378, 339, 263, 179, 101, 31]", + "total_badness": 3988.6535111 }, { "ne1d": 0, - "ne2d": 2534, - "ne3d": 5584, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 27, 78, 171, 346, 509, 649, 760, 771, 771, 646, 472, 283, 100]", - "total_badness": 8111.5941443 + "ne2d": 2514, + "ne3d": 5554, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 9, 46, 105, 218, 384, 584, 704, 751, 700, 704, 577, 454, 249, 67]", + "total_badness": 8273.8939465 }, { "ne1d": 0, - "ne2d": 5894, - "ne3d": 25294, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 9, 32, 149, 417, 947, 1723, 2990, 4145, 5146, 5002, 3604, 1129]", - "total_badness": 31642.969488 + "ne2d": 5842, + "ne3d": 24282, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 19, 81, 228, 548, 1135, 1947, 3128, 4133, 4719, 4422, 3081, 838]", + "total_badness": 30913.936434 }, { "ne1d": 0, - "ne2d": 16296, - "ne3d": 175351, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 7, 36, 115, 401, 1106, 3230, 8059, 16480, 27460, 37219, 40628, 30958, 9652]", - "total_badness": 213157.95506 + "ne2d": 16170, + "ne3d": 174079, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 6, 34, 138, 426, 1276, 3495, 8503, 16924, 27371, 37192, 39797, 29753, 9164]", + "total_badness": 212322.15571 } ], "trafo.geo": [ { "ne1d": 690, - "ne2d": 1684, - "ne3d": 5231, - "quality_histogram": "[0, 2, 2, 2, 8, 24, 37, 50, 114, 203, 267, 363, 472, 583, 649, 706, 623, 527, 462, 137]", - "total_badness": 7683.599832 + "ne2d": 1650, + "ne3d": 5153, + "quality_histogram": "[1, 4, 0, 2, 6, 22, 48, 90, 149, 211, 324, 377, 461, 583, 666, 681, 571, 443, 413, 101]", + "total_badness": 7797.9450152 }, { "ne1d": 390, - "ne2d": 522, + "ne2d": 518, "ne3d": 1353, - "quality_histogram": "[0, 0, 3, 17, 15, 42, 75, 123, 130, 146, 161, 124, 147, 105, 84, 88, 47, 33, 11, 2]", - "total_badness": 2768.022266 + "quality_histogram": "[0, 0, 4, 13, 32, 32, 71, 125, 125, 144, 170, 148, 134, 115, 95, 68, 33, 21, 22, 1]", + "total_badness": 2785.2527917 }, { "ne1d": 512, - "ne2d": 874, - "ne3d": 2397, - "quality_histogram": "[0, 0, 1, 3, 9, 23, 41, 72, 132, 142, 188, 204, 304, 389, 343, 237, 138, 97, 48, 26]", - "total_badness": 3983.5650135 + "ne2d": 858, + "ne3d": 2354, + "quality_histogram": "[0, 0, 1, 2, 11, 27, 57, 67, 161, 182, 217, 250, 264, 284, 290, 258, 140, 47, 59, 37]", + "total_badness": 4028.6466008 }, { "ne1d": 690, - "ne2d": 1684, - "ne3d": 5147, - "quality_histogram": "[0, 0, 0, 1, 3, 12, 26, 40, 106, 188, 272, 357, 422, 561, 671, 714, 608, 558, 474, 134]", - "total_badness": 7408.6135626 + "ne2d": 1650, + "ne3d": 5071, + "quality_histogram": "[0, 0, 0, 1, 3, 16, 36, 81, 130, 210, 298, 368, 444, 592, 658, 654, 583, 456, 437, 104]", + "total_badness": 7501.8324545 }, { "ne1d": 1050, - "ne2d": 3812, - "ne3d": 18010, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 29, 42, 57, 198, 540, 1405, 2251, 2392, 2790, 2784, 2612, 2242, 664]", - "total_badness": 23560.24016 + "ne2d": 3712, + "ne3d": 17430, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 7, 31, 58, 112, 236, 621, 1624, 2131, 2389, 2547, 2560, 2483, 2004, 627]", + "total_badness": 23088.888517 }, { "ne1d": 1722, - "ne2d": 10042, - "ne3d": 84690, - "quality_histogram": "[0, 0, 0, 0, 2, 3, 54, 1424, 754, 408, 795, 1316, 2637, 5766, 9155, 13453, 16224, 16583, 12169, 3947]", - "total_badness": 108937.41902 + "ne2d": 9888, + "ne3d": 83916, + "quality_histogram": "[0, 0, 0, 2, 3, 9, 103, 1417, 624, 529, 1028, 1656, 3206, 6128, 9176, 13176, 15913, 15495, 11729, 3722]", + "total_badness": 108897.74798 } ], "twobricks.geo": [ @@ -1370,17 +1370,17 @@ }, { "ne1d": 116, - "ne2d": 134, - "ne3d": 177, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 12, 10, 18, 38, 22, 27, 22, 18, 7]", - "total_badness": 234.47359 + "ne2d": 122, + "ne3d": 149, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 10, 25, 25, 30, 19, 17, 7, 7, 4]", + "total_badness": 210.92258874 }, { "ne1d": 186, - "ne2d": 346, - "ne3d": 603, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 10, 25, 42, 66, 89, 101, 110, 93, 56, 10]", - "total_badness": 792.88605666 + "ne2d": 308, + "ne3d": 535, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 9, 18, 51, 66, 92, 87, 77, 61, 61, 10]", + "total_badness": 711.81286081 } ], "twocubes.geo": [ @@ -1414,61 +1414,61 @@ }, { "ne1d": 116, - "ne2d": 134, - "ne3d": 177, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 12, 10, 18, 38, 22, 27, 22, 18, 7]", - "total_badness": 234.47359 + "ne2d": 122, + "ne3d": 149, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 10, 25, 25, 30, 19, 17, 7, 7, 4]", + "total_badness": 210.92258874 }, { "ne1d": 186, - "ne2d": 346, - "ne3d": 603, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 10, 25, 42, 66, 89, 101, 110, 93, 56, 10]", - "total_badness": 792.88605666 + "ne2d": 308, + "ne3d": 535, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 9, 18, 51, 66, 92, 87, 77, 61, 61, 10]", + "total_badness": 711.81286081 } ], "twocyl.geo": [ { "ne1d": 144, - "ne2d": 408, - "ne3d": 576, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 12, 19, 19, 17, 36, 50, 59, 82, 90, 73, 69, 34, 13, 1]", - "total_badness": 901.75131743 + "ne2d": 406, + "ne3d": 539, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 5, 12, 24, 30, 56, 49, 74, 67, 67, 60, 43, 38, 12, 1]", + "total_badness": 858.68248624 }, { "ne1d": 68, "ne2d": 100, - "ne3d": 209, - "quality_histogram": "[0, 0, 0, 1, 3, 6, 11, 2, 8, 5, 15, 18, 12, 28, 28, 27, 24, 17, 3, 1]", - "total_badness": 357.15447323 + "ne3d": 188, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 6, 14, 23, 27, 28, 25, 22, 28, 8, 0]", + "total_badness": 267.41201716 }, { "ne1d": 102, - "ne2d": 238, - "ne3d": 548, - "quality_histogram": "[5, 24, 23, 35, 33, 46, 49, 52, 63, 39, 19, 20, 19, 22, 19, 24, 40, 14, 2, 0]", - "total_badness": 1932.6124156 + "ne2d": 236, + "ne3d": 561, + "quality_histogram": "[1, 8, 41, 60, 42, 46, 41, 50, 53, 36, 27, 27, 22, 15, 18, 17, 38, 5, 11, 3]", + "total_badness": 1876.9984411 }, { "ne1d": 144, - "ne2d": 408, - "ne3d": 576, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 12, 10, 12, 24, 41, 69, 88, 108, 88, 65, 40, 13, 2]", - "total_badness": 853.37034747 + "ne2d": 406, + "ne3d": 538, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 3, 12, 20, 25, 50, 52, 82, 65, 67, 64, 41, 39, 14, 2]", + "total_badness": 848.06909289 }, { "ne1d": 214, - "ne2d": 910, - "ne3d": 1921, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 33, 75, 117, 230, 320, 358, 348, 243, 159, 28]", - "total_badness": 2544.8927759 + "ne2d": 900, + "ne3d": 1820, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 15, 43, 103, 172, 235, 307, 303, 304, 187, 120, 28]", + "total_badness": 2474.9963091 }, { "ne1d": 350, - "ne2d": 2374, - "ne3d": 13509, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 11, 29, 98, 286, 655, 1353, 2161, 2913, 3068, 2220, 713]", - "total_badness": 16499.785789 + "ne2d": 2350, + "ne3d": 13336, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 12, 34, 122, 330, 749, 1426, 2105, 2852, 2877, 2178, 649]", + "total_badness": 16385.529152 } ] } \ No newline at end of file From 8118190af4a1c828690b9af624c245d350cf6f43 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Fri, 18 Oct 2019 15:26:48 +0200 Subject: [PATCH 070/120] allow small deviations in quality class --- tests/pytest/test_tutorials.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/pytest/test_tutorials.py b/tests/pytest/test_tutorials.py index 32d53d50..169a8856 100644 --- a/tests/pytest/test_tutorials.py +++ b/tests/pytest/test_tutorials.py @@ -28,7 +28,7 @@ def checkData(mesh, mp, ref): assert ref['ne1d'] == data['ne1d'] assert ref['ne2d'] == data['ne2d'] assert ref['ne3d'] == data['ne3d'] - assert ref['quality_histogram'] == data['quality_histogram'] + assert json.loads(ref['quality_histogram']) == pytest.approx(json.loads(data['quality_histogram']), abs=1, rel=0.4) assert ref['total_badness'] == pytest.approx(data['total_badness'], rel=1e-5) # get tutorials From 495a6eddf7b80bc2405fe60e4a9185723006dbe2 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Fri, 18 Oct 2019 16:38:50 +0200 Subject: [PATCH 071/120] [cmake] Link AppKit to avoid undefined references if OCC is statically linked on MacOS --- libsrc/occ/CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libsrc/occ/CMakeLists.txt b/libsrc/occ/CMakeLists.txt index e4589b1b..68d26218 100644 --- a/libsrc/occ/CMakeLists.txt +++ b/libsrc/occ/CMakeLists.txt @@ -12,6 +12,11 @@ target_link_libraries(occ PUBLIC ngcore) if(NOT WIN32) target_link_libraries( occ PRIVATE ${OCC_LIBRARIES} ${PYTHON_LIBRARIES}) + if(USE_OCC AND APPLE) + # Link AppKit in case OCE was built as static libraries + find_library(AppKit AppKit) + target_link_libraries( occ PRIVATE ${AppKit} ) + endif(USE_OCC AND APPLE) install( TARGETS occ ${NG_INSTALL_DIR}) if (USE_GUI) target_link_libraries( occvis PUBLIC occ ) From 6d34f01d95c570ee940dd61703ae2f5cb53006eb Mon Sep 17 00:00:00 2001 From: Bernd Schwarzenbacher Date: Mon, 21 Oct 2019 00:12:29 +0200 Subject: [PATCH 072/120] Add a HashValue> for ParallelHashTable --- libsrc/core/hashtable.hpp | 8 +++++++- libsrc/general/hashtabl.hpp | 1 - 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/libsrc/core/hashtable.hpp b/libsrc/core/hashtable.hpp index 6e768915..36fb9f77 100644 --- a/libsrc/core/hashtable.hpp +++ b/libsrc/core/hashtable.hpp @@ -827,7 +827,13 @@ namespace ngcore return ost; } - + template + NETGEN_INLINE size_t HashValue (const INT<3,TI> ind) + { + INT<3,size_t> lind = ind; + return 113*lind[0]+59*lind[1]+lind[2]; + } + template NETGEN_INLINE size_t HashValue (const INT<2,TI> ind) { diff --git a/libsrc/general/hashtabl.hpp b/libsrc/general/hashtabl.hpp index a08466db..5c5fe4f8 100644 --- a/libsrc/general/hashtabl.hpp +++ b/libsrc/general/hashtabl.hpp @@ -1390,7 +1390,6 @@ inline size_t HashValue (INDEX_2 i2, size_t size) { return (113*size_t(i2[0])+si ClosedHashTable (ClosedHashTable && ht2) = default; - // who needs that ? ClosedHashTable (NgFlatArray _hash, NgFlatArray _cont) : size(_hash.Size()), used(0), hash(_hash.Size(), _hash.Addr(0)), cont(_cont.Size(), _cont.Addr(0)) { From 586f8120ea0605b206231220f94f1eb64b0adffa Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 21 Oct 2019 13:34:29 +0200 Subject: [PATCH 073/120] some Timers in LoadOCC, don't read edge names --- libsrc/occ/occgeom.cpp | 22 ++++++++++++++++------ libsrc/occ/occgeom.hpp | 2 +- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/libsrc/occ/occgeom.cpp b/libsrc/occ/occgeom.cpp index fb8006f6..bb95ee88 100644 --- a/libsrc/occ/occgeom.cpp +++ b/libsrc/occ/occgeom.cpp @@ -1310,6 +1310,10 @@ void STEP_GetEntityName(const TopoDS_Shape & theShape, STEPCAFControl_Reader * a void LoadOCCInto(OCCGeometry* occgeo, const char* filename) { + static Timer timer_all("LoadOCC"); RegionTimer rtall(timer_all); + static Timer timer_readfile("LoadOCC-ReadFile"); + static Timer timer_transfer("LoadOCC-Transfer"); + static Timer timer_getnames("LoadOCC-get names"); // Initiate a dummy XCAF Application to handle the STEP XCAF Document static Handle_XCAFApp_Application dummy_app = XCAFApp_Application::GetApplication(); @@ -1326,19 +1330,23 @@ void STEP_GetEntityName(const TopoDS_Shape & theShape, STEPCAFControl_Reader * a } dummy_app->NewDocument ("STEP-XCAF",step_doc); + timer_readfile.Start(); STEPCAFControl_Reader reader; // Enable transfer of colours reader.SetColorMode(Standard_True); reader.SetNameMode(Standard_True); Standard_Integer stat = reader.ReadFile((char*)filename); + timer_readfile.Stop(); + timer_transfer.Start(); if(stat != IFSelect_RetDone) { throw NgException("Couldn't load OCC geometry"); } reader.Transfer(step_doc); + timer_transfer.Stop(); // Read in the shape(s) and the colours present in the STEP File Handle_XCAFDoc_ShapeTool step_shape_contents = XCAFDoc_DocumentTool::ShapeTool(step_doc->Main()); @@ -1376,6 +1384,7 @@ void STEP_GetEntityName(const TopoDS_Shape & theShape, STEPCAFControl_Reader * a occgeo->snames.Append(name); TopExp_Explorer exp0,exp1; + timer_getnames.Start(); for (exp0.Init(occgeo->shape, TopAbs_FACE); exp0.More(); exp0.Next()) { TopoDS_Face face = TopoDS::Face(exp0.Current()); @@ -1383,13 +1392,14 @@ void STEP_GetEntityName(const TopoDS_Shape & theShape, STEPCAFControl_Reader * a if (name == string("")) snprintf(name, 50, "bc_%zu", occgeo->fnames.Size()); occgeo->fnames.Append(name); - for (exp1.Init(face, TopAbs_EDGE); exp1.More(); exp1.Next()) - { - TopoDS_Edge edge = TopoDS::Edge(exp1.Current()); - STEP_GetEntityName(edge,&reader,name); - occgeo->enames.Append(name); - } +// for (exp1.Init(face, TopAbs_EDGE); exp1.More(); exp1.Next()) +// { +// TopoDS_Edge edge = TopoDS::Edge(exp1.Current()); +// STEP_GetEntityName(edge,&reader,name); +// occgeo->enames.Append(name); +// } } + timer_getnames.Stop(); // Gerhard BEGIN // cout << "Solid Names: "<snames.Size();i++) diff --git a/libsrc/occ/occgeom.hpp b/libsrc/occ/occgeom.hpp index 45f06026..25369ac7 100644 --- a/libsrc/occ/occgeom.hpp +++ b/libsrc/occ/occgeom.hpp @@ -216,7 +216,7 @@ namespace netgen TopTools_IndexedMapOfShape fmap, emap, vmap, somap, shmap, wmap; NgArray fsingular, esingular, vsingular; Box<3> boundingbox; - NgArray fnames, enames, snames; + NgArray fnames, /*enames,*/ snames; // Philippose - 29/01/2009 // OpenCascade XDE Support // XCAF Handle to make the face colours available to the rest of From ac5f901cef1bee1fc72c1934f9ad73aedc5904b9 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Mon, 21 Oct 2019 17:03:01 +0200 Subject: [PATCH 074/120] do not get intersecting points, they are added from intersecting lines anyway --- libsrc/meshing/adfront2.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libsrc/meshing/adfront2.cpp b/libsrc/meshing/adfront2.cpp index 3295f706..61df5125 100644 --- a/libsrc/meshing/adfront2.cpp +++ b/libsrc/meshing/adfront2.cpp @@ -300,9 +300,9 @@ namespace netgen p0 + Vec3d(xh, xh, xh), nearlines); - pointsearchtree.GetIntersecting (p0 - Vec3d(xh, xh, xh), - p0 + Vec3d(xh, xh, xh), - nearpoints); + // pointsearchtree.GetIntersecting (p0 - Vec3d(xh, xh, xh), + // p0 + Vec3d(xh, xh, xh), + // nearpoints); for (int ii = 0; ii < nearlines.Size(); ii++) { From 2fd255baa75b1d8aaa3317dcd75cdb5fbc4a8cb3 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Mon, 21 Oct 2019 17:20:48 +0200 Subject: [PATCH 075/120] only use cone (or userdefined points) --- libsrc/meshing/adfront2.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/libsrc/meshing/adfront2.cpp b/libsrc/meshing/adfront2.cpp index 61df5125..62cd1580 100644 --- a/libsrc/meshing/adfront2.cpp +++ b/libsrc/meshing/adfront2.cpp @@ -281,7 +281,7 @@ namespace netgen NgArray & lindex, double xh) { - // static Timer timer("adfront2::GetLocals"); RegionTimer reg (timer); + static Timer timer("adfront2::GetLocals"); RegionTimer reg (timer); int pstind; Point<3> midp, p0; @@ -300,10 +300,11 @@ namespace netgen p0 + Vec3d(xh, xh, xh), nearlines); - // pointsearchtree.GetIntersecting (p0 - Vec3d(xh, xh, xh), - // p0 + Vec3d(xh, xh, xh), - // nearpoints); - + // only cone points, other points are from linesearchtree + cpointsearchtree.GetIntersecting (p0 - Vec3d(xh, xh, xh), + p0 + Vec3d(xh, xh, xh), + nearpoints); + for (int ii = 0; ii < nearlines.Size(); ii++) { int i = nearlines[ii]; From e400c10f073a87ffca44b50a47570152d6a9083e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joachim=20Sch=C3=B6berl?= Date: Tue, 22 Oct 2019 22:54:27 +0200 Subject: [PATCH 076/120] set tcl-variables only if values are changed --- ng/ngpkg.cpp | 78 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 66 insertions(+), 12 deletions(-) diff --git a/ng/ngpkg.cpp b/ng/ngpkg.cpp index 85052353..931da7a7 100644 --- a/ng/ngpkg.cpp +++ b/ng/ngpkg.cpp @@ -680,15 +680,33 @@ namespace netgen int argc, tcl_const char *argv[]) { char buf[20], lstring[200]; + static int prev_np = -1; + static int prev_ne = -1; + static int prev_nse = -1; + if (mesh) { - sprintf (buf, "%u", unsigned(mesh->GetNP())); - Tcl_SetVar (interp, "::status_np", buf, 0); - sprintf (buf, "%u", unsigned(mesh->GetNE())); - Tcl_SetVar (interp, "::status_ne", buf, 0); - sprintf (buf, "%u", unsigned(mesh->GetNSE())); - Tcl_SetVar (interp, "::status_nse", buf, 0); + if (prev_np != mesh->GetNP()) + { + sprintf (buf, "%u", unsigned(mesh->GetNP())); + Tcl_SetVar (interp, "::status_np", buf, 0); + prev_np = mesh->GetNP(); + } + if (prev_ne != mesh->GetNE()) + { + sprintf (buf, "%u", unsigned(mesh->GetNE())); + Tcl_SetVar (interp, "::status_ne", buf, 0); + prev_ne = mesh->GetNE(); + } + + if (prev_nse != mesh->GetNSE()) + { + sprintf (buf, "%u", unsigned(mesh->GetNSE())); + Tcl_SetVar (interp, "::status_nse", buf, 0); + prev_nse = mesh->GetNSE(); + } + auto tets_in_qualclass = mesh->GetQualityHistogram(); lstring[0] = 0; for (int i = 0; i < tets_in_qualclass.Size(); i++) @@ -702,20 +720,56 @@ namespace netgen } else { - Tcl_SetVar (interp, "::status_np", "0", 0); - Tcl_SetVar (interp, "::status_ne", "0", 0); - Tcl_SetVar (interp, "::status_nse", "0", 0); + if (prev_np != 0) + { + Tcl_SetVar (interp, "::status_np", "0", 0); + prev_np = 0; + } + + if (prev_ne != 0) + { + Tcl_SetVar (interp, "::status_ne", "0", 0); + prev_ne = 0; + } + + if (prev_nse != 0) + { + Tcl_SetVar (interp, "::status_nse", "0", 0); + prev_nse = 0; + } Tcl_SetVar (interp, "::status_tetqualclasses", "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0", 0); } + static string prev_working; + string working = multithread.running ? "working" : " "; + if (working != prev_working) + { + Tcl_SetVar (interp, "::status_working", working.c_str(), 0); + prev_working = working; + } + + /* if (multithread.running) Tcl_SetVar (interp, "::status_working", "working", 0); else Tcl_SetVar (interp, "::status_working", " ", 0); + */ + + static string prev_task; + if (prev_task != string(multithread.task)) + { + prev_task = multithread.task; + Tcl_SetVar (interp, "::status_task", prev_task.c_str(), 0); + } - Tcl_SetVar (interp, "::status_task", const_cast(multithread.task), 0); - sprintf (buf, "%lf", multithread.percent); - Tcl_SetVar (interp, "::status_percent", buf, 0); + static double prev_percent = -1; + if (prev_percent != multithread.percent) + { + prev_percent = multithread.percent; + sprintf (buf, "%lf", prev_percent); + Tcl_SetVar (interp, "::status_percent", buf, 0); + } + { lock_guard guard(tcl_todo_mutex); From 082908a5ecb248d391998f789c1aba65f9cc48f4 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Wed, 23 Oct 2019 11:08:11 +0200 Subject: [PATCH 077/120] ProjectPointGI for CSG and 2D geometries --- libsrc/csg/csgeom.cpp | 6 ++++++ libsrc/csg/csgeom.hpp | 1 + libsrc/geom2d/geometry2d.hpp | 6 ++++++ 3 files changed, 13 insertions(+) diff --git a/libsrc/csg/csgeom.cpp b/libsrc/csg/csgeom.cpp index 9a12443e..f8145009 100644 --- a/libsrc/csg/csgeom.cpp +++ b/libsrc/csg/csgeom.cpp @@ -79,6 +79,12 @@ namespace netgen p = hp; } + bool CSGeometry :: ProjectPointGI(int surfind, Point<3> & p, PointGeomInfo & gi) const + { + GetSurface(surfind)->Project (p); + return true; + } + void CSGeometry :: ProjectPointEdge(int surfind, INDEX surfind2, Point<3> & p) const { diff --git a/libsrc/csg/csgeom.hpp b/libsrc/csg/csgeom.hpp index 398c21bc..07844c91 100644 --- a/libsrc/csg/csgeom.hpp +++ b/libsrc/csg/csgeom.hpp @@ -189,6 +189,7 @@ namespace netgen virtual void SaveToMeshFile (ostream & ost) const override; void ProjectPoint(INDEX surfind, Point<3> & p) const override; + bool ProjectPointGI (int surfind, Point<3> & p, PointGeomInfo & gi) const override; void ProjectPointEdge(INDEX surfind, INDEX surfind2, Point<3> & p) const override; Vec<3> GetNormal(int surfind, const Point<3> & p) const override; void PointBetween(const Point<3> & p1, const Point<3> & p2, diff --git a/libsrc/geom2d/geometry2d.hpp b/libsrc/geom2d/geometry2d.hpp index 13c1887b..7dfcbe9f 100644 --- a/libsrc/geom2d/geometry2d.hpp +++ b/libsrc/geom2d/geometry2d.hpp @@ -156,6 +156,12 @@ namespace netgen ar & materials & maxh & quadmeshing & tensormeshing & layer & bcnames & elto0; } + bool ProjectPointGI (int surfind, Point<3> & p, PointGeomInfo & gi) const override + { + p(2) = 0.0; + return true; + } + void PointBetween(const Point<3> & p1, const Point<3> & p2, double secpoint, int surfi, const PointGeomInfo & gi1, From 37198d0ceec79f152ca644ac716797ca29c4eaed Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Wed, 23 Oct 2019 11:08:30 +0200 Subject: [PATCH 078/120] Recover correct point type in smoothing2d --- libsrc/meshing/smoothing2.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/meshing/smoothing2.cpp b/libsrc/meshing/smoothing2.cpp index a3ebd88c..b4d5ab9a 100644 --- a/libsrc/meshing/smoothing2.cpp +++ b/libsrc/meshing/smoothing2.cpp @@ -969,7 +969,7 @@ namespace netgen // NgProfiler::StopTimer (timer2); - Point3d origp = mesh[pi]; + auto origp = mesh[pi]; int loci = 1; double fact = 1; int moveisok = 0; @@ -1021,7 +1021,7 @@ namespace netgen } else { - mesh[pi] = Point<3> (origp); + mesh[pi] = origp; } } From 22a894b8cf7b6afc5dfeeb19ebdb25783d262a25 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Wed, 23 Oct 2019 11:26:23 +0200 Subject: [PATCH 079/120] Set OCC geometry in GenerateMesh() --- libsrc/occ/python_occ.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/occ/python_occ.cpp b/libsrc/occ/python_occ.cpp index d3a38c15..e5f458cb 100644 --- a/libsrc/occ/python_occ.cpp +++ b/libsrc/occ/python_occ.cpp @@ -185,8 +185,8 @@ DLL_HEADER void ExportNgOCC(py::module &m) } geo->SetOCCParameters(occparam); auto mesh = make_shared(); - geo->GenerateMesh(mesh, mp); mesh->SetGeometry(geo); + geo->GenerateMesh(mesh, mp); SetGlobalMesh(mesh); ng_geometry = geo; return mesh; From eaf2bee9e65b4aff60c2dd664f07e6dfcd7eed32 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Wed, 23 Oct 2019 11:26:45 +0200 Subject: [PATCH 080/120] Throw Exception if ProjectPointGI is not implemented --- libsrc/meshing/basegeom.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/meshing/basegeom.hpp b/libsrc/meshing/basegeom.hpp index 221e875b..f001f9fa 100644 --- a/libsrc/meshing/basegeom.hpp +++ b/libsrc/meshing/basegeom.hpp @@ -51,9 +51,9 @@ namespace netgen virtual bool CalcPointGeomInfo(int surfind, PointGeomInfo& gi, const Point<3> & p3) const {return false;} virtual bool ProjectPointGI (int surfind, Point<3> & p, PointGeomInfo & gi) const { - ProjectPoint(surfind, p); - return CalcPointGeomInfo(surfind, gi, p); + throw Exception("ProjectPointGI not overloaded in class" + Demangle(typeid(*this).name())); } + virtual Vec<3> GetNormal(int surfind, const Point<3> & p) const { return {0.,0.,1.}; } virtual Vec<3> GetNormal(int surfind, const Point<3> & p, const PointGeomInfo & gi) const From 91815955f55742329cc95af20db5657ff4ac9fb3 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Wed, 23 Oct 2019 11:27:05 +0200 Subject: [PATCH 081/120] Test in2d files, update results --- tests/pytest/results.json | 1388 ++++++++++++++++++-------------- tests/pytest/test_tutorials.py | 15 +- 2 files changed, 791 insertions(+), 612 deletions(-) diff --git a/tests/pytest/results.json b/tests/pytest/results.json index 10f15113..4e8fb437 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -3,9 +3,9 @@ { "ne1d": 74, "ne2d": 54, - "ne3d": 39, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 6, 14, 0, 8, 1, 0, 0, 1]", - "total_badness": 58.504327315 + "ne3d": 40, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 16, 1, 5, 2, 0, 0, 0]", + "total_badness": 61.085020204 }, { "ne1d": 59, @@ -24,155 +24,155 @@ { "ne1d": 74, "ne2d": 54, - "ne3d": 39, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 6, 14, 0, 8, 1, 0, 0, 1]", - "total_badness": 58.504327315 + "ne3d": 40, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 16, 1, 5, 2, 0, 0, 0]", + "total_badness": 61.085020204 }, { "ne1d": 118, - "ne2d": 128, - "ne3d": 146, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 6, 11, 15, 19, 23, 29, 14, 9, 3, 10, 2]", - "total_badness": 221.53127331 + "ne2d": 140, + "ne3d": 165, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 9, 13, 23, 20, 31, 25, 21, 14, 6, 1]", + "total_badness": 233.73328932 }, { "ne1d": 181, - "ne2d": 295, - "ne3d": 478, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 6, 20, 38, 41, 79, 96, 81, 59, 46, 7]", - "total_badness": 634.07879728 + "ne2d": 325, + "ne3d": 528, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 19, 38, 53, 74, 80, 99, 85, 63, 9]", + "total_badness": 687.31675405 } ], "boxcyl.geo": [ { "ne1d": 190, - "ne2d": 452, - "ne3d": 838, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 4, 24, 113, 90, 93, 118, 93, 82, 89, 68, 47, 13]", - "total_badness": 1250.6676912 + "ne2d": 468, + "ne3d": 846, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 31, 93, 78, 103, 80, 92, 103, 102, 84, 56, 21]", + "total_badness": 1229.0231928 }, { "ne1d": 94, "ne2d": 114, - "ne3d": 156, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 6, 9, 10, 8, 12, 9, 13, 7, 20, 15, 15, 22, 5, 3]", - "total_badness": 257.95680767 + "ne3d": 157, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 3, 8, 13, 13, 15, 7, 12, 11, 19, 14, 12, 21, 5, 3]", + "total_badness": 260.17372209 }, { "ne1d": 136, - "ne2d": 218, - "ne3d": 378, - "quality_histogram": "[0, 0, 0, 1, 1, 1, 1, 3, 14, 20, 20, 34, 45, 51, 41, 52, 56, 18, 19, 1]", - "total_badness": 576.7536717 + "ne2d": 222, + "ne3d": 386, + "quality_histogram": "[0, 0, 0, 1, 2, 3, 2, 7, 8, 15, 16, 36, 36, 59, 53, 55, 58, 19, 15, 1]", + "total_badness": 590.51625062 }, { "ne1d": 190, - "ne2d": 452, - "ne3d": 826, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 1, 21, 112, 89, 94, 110, 88, 87, 79, 79, 50, 13]", - "total_badness": 1223.565534 + "ne2d": 468, + "ne3d": 833, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 32, 89, 78, 83, 86, 83, 106, 103, 89, 62, 21]", + "total_badness": 1200.9010008 }, { "ne1d": 284, - "ne2d": 912, - "ne3d": 3696, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 10, 20, 64, 152, 268, 438, 622, 744, 728, 497, 147]", - "total_badness": 4653.1667633 + "ne2d": 938, + "ne3d": 3742, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 25, 55, 131, 247, 484, 640, 754, 710, 529, 161]", + "total_badness": 4685.7832014 }, { "ne1d": 456, - "ne2d": 2450, - "ne3d": 18381, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 6, 19, 64, 164, 415, 920, 1808, 2907, 3777, 4130, 3152, 1018]", - "total_badness": 22479.104821 + "ne2d": 2496, + "ne3d": 18713, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 10, 39, 127, 338, 795, 1684, 2888, 4053, 4409, 3223, 1146]", + "total_badness": 22695.778021 } ], "circle_on_cube.geo": [ { "ne1d": 94, - "ne2d": 152, - "ne3d": 608, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 8, 27, 31, 47, 60, 88, 114, 93, 70, 55, 11]", - "total_badness": 828.41267216 + "ne2d": 170, + "ne3d": 637, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 4, 5, 18, 38, 54, 74, 84, 109, 110, 73, 55, 12]", + "total_badness": 863.74076861 }, { "ne1d": 40, "ne2d": 38, - "ne3d": 53, - "quality_histogram": "[0, 0, 0, 0, 1, 3, 1, 4, 6, 12, 4, 9, 2, 2, 4, 3, 0, 2, 0, 0]", - "total_badness": 109.70868385 + "ne3d": 46, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 2, 4, 8, 8, 6, 7, 5, 1, 2, 1, 0, 0, 0, 0]", + "total_badness": 97.323158335 }, { "ne1d": 62, - "ne2d": 86, - "ne3d": 182, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 8, 9, 17, 19, 28, 35, 22, 22, 11, 5, 3]", - "total_badness": 266.64934593 + "ne2d": 96, + "ne3d": 196, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 8, 8, 27, 34, 42, 33, 20, 9, 6, 1]", + "total_badness": 282.75693303 }, { "ne1d": 94, - "ne2d": 152, - "ne3d": 593, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 15, 27, 33, 50, 84, 110, 102, 84, 64, 14]", - "total_badness": 786.32868296 + "ne2d": 170, + "ne3d": 622, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 12, 26, 39, 80, 70, 113, 112, 93, 62, 10]", + "total_badness": 821.68699443 }, { "ne1d": 138, - "ne2d": 370, - "ne3d": 1891, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 9, 27, 75, 163, 236, 317, 385, 323, 276, 78]", - "total_badness": 2378.4348462 + "ne2d": 384, + "ne3d": 2028, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 9, 28, 67, 157, 250, 347, 419, 398, 261, 88]", + "total_badness": 2540.7133216 }, { "ne1d": 224, - "ne2d": 900, - "ne3d": 11870, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 7, 17, 44, 128, 272, 627, 1206, 1832, 2541, 2570, 2011, 615]", - "total_badness": 14569.250591 + "ne2d": 944, + "ne3d": 11860, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 29, 85, 211, 518, 1135, 1851, 2527, 2686, 2118, 688]", + "total_badness": 14411.259826 } ], "cone.geo": [ { "ne1d": 64, - "ne2d": 716, - "ne3d": 1192, - "quality_histogram": "[0, 0, 0, 0, 1, 2, 13, 27, 54, 76, 88, 145, 123, 139, 140, 131, 123, 80, 40, 10]", - "total_badness": 1887.2343616 + "ne2d": 722, + "ne3d": 1263, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 4, 14, 48, 62, 95, 129, 141, 162, 163, 145, 107, 112, 61, 17]", + "total_badness": 1927.4650748 }, { "ne1d": 32, "ne2d": 220, - "ne3d": 737, - "quality_histogram": "[0, 0, 16, 46, 43, 51, 72, 61, 53, 51, 52, 46, 68, 44, 31, 27, 41, 18, 13, 4]", - "total_badness": 1894.7838255 + "ne3d": 700, + "quality_histogram": "[0, 0, 13, 49, 51, 51, 51, 46, 63, 42, 38, 49, 53, 50, 42, 33, 27, 21, 18, 3]", + "total_badness": 1807.5903418 }, { "ne1d": 48, - "ne2d": 418, - "ne3d": 673, - "quality_histogram": "[0, 3, 23, 17, 19, 16, 38, 41, 64, 86, 77, 66, 50, 49, 40, 29, 23, 25, 6, 1]", - "total_badness": 1591.8445773 + "ne2d": 428, + "ne3d": 930, + "quality_histogram": "[6, 33, 75, 70, 53, 52, 44, 63, 73, 77, 65, 88, 62, 37, 46, 30, 20, 21, 15, 0]", + "total_badness": 3263.5820874 }, { "ne1d": 64, - "ne2d": 716, - "ne3d": 1169, - "quality_histogram": "[0, 0, 0, 0, 1, 0, 10, 22, 34, 57, 80, 108, 139, 147, 154, 144, 115, 88, 57, 13]", - "total_badness": 1787.8610181 + "ne2d": 722, + "ne3d": 1244, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 10, 25, 61, 77, 117, 140, 158, 172, 138, 144, 118, 66, 15]", + "total_badness": 1843.7405821 }, { "ne1d": 96, - "ne2d": 1654, - "ne3d": 4374, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 9, 44, 77, 192, 302, 495, 598, 729, 718, 662, 425, 121]", - "total_badness": 5789.8784966 + "ne2d": 1660, + "ne3d": 4395, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 14, 39, 86, 147, 270, 427, 584, 724, 725, 723, 492, 162]", + "total_badness": 5745.9242938 }, { "ne1d": 160, - "ne2d": 4722, - "ne3d": 27153, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 10, 50, 134, 382, 841, 1698, 2942, 4533, 5543, 5629, 4130, 1260]", - "total_badness": 33712.712047 + "ne2d": 4748, + "ne3d": 27365, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 8, 35, 121, 352, 715, 1535, 2882, 4456, 5703, 5878, 4303, 1377]", + "total_badness": 33766.111622 } ], "cube.geo": [ @@ -213,54 +213,54 @@ }, { "ne1d": 72, - "ne2d": 108, - "ne3d": 171, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 6, 11, 14, 16, 27, 28, 27, 24, 11, 3]", - "total_badness": 233.61347097 + "ne2d": 116, + "ne3d": 167, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 2, 5, 5, 16, 8, 18, 30, 31, 29, 11, 7]", + "total_badness": 224.7322738 } ], "cubeandring.geo": [ { "ne1d": 262, - "ne2d": 690, - "ne3d": 2140, - "quality_histogram": "[3, 12, 19, 38, 56, 105, 96, 77, 120, 76, 100, 117, 154, 202, 231, 248, 218, 143, 97, 28]", - "total_badness": 4299.394376 + "ne2d": 726, + "ne3d": 2225, + "quality_histogram": "[0, 10, 19, 36, 98, 105, 126, 110, 98, 59, 71, 87, 153, 186, 272, 275, 223, 160, 109, 28]", + "total_badness": 4466.5881396 }, { "ne1d": 134, - "ne2d": 156, - "ne3d": 249, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 4, 5, 14, 24, 38, 39, 36, 35, 25, 19, 6, 1]", - "total_badness": 369.67745906 + "ne2d": 164, + "ne3d": 250, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 4, 4, 6, 13, 24, 28, 43, 40, 34, 25, 19, 7, 2]", + "total_badness": 372.39445714 }, { "ne1d": 190, - "ne2d": 278, - "ne3d": 574, - "quality_histogram": "[0, 0, 0, 1, 1, 0, 0, 6, 6, 32, 46, 56, 64, 94, 90, 65, 56, 34, 20, 3]", - "total_badness": 874.96542794 + "ne2d": 300, + "ne3d": 646, + "quality_histogram": "[0, 0, 0, 1, 2, 0, 0, 2, 10, 27, 58, 69, 66, 107, 87, 91, 60, 44, 20, 2]", + "total_badness": 978.54289744 }, { "ne1d": 262, - "ne2d": 690, - "ne3d": 1978, - "quality_histogram": "[0, 0, 8, 21, 34, 88, 102, 58, 96, 50, 73, 83, 123, 183, 205, 261, 260, 178, 122, 33]", - "total_badness": 3497.4685292 + "ne2d": 726, + "ne3d": 2087, + "quality_histogram": "[0, 2, 12, 18, 54, 90, 113, 95, 88, 55, 41, 59, 111, 196, 254, 299, 260, 193, 114, 33]", + "total_badness": 3774.9667473 }, { "ne1d": 378, - "ne2d": 1346, - "ne3d": 7382, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 9, 22, 42, 97, 190, 367, 566, 900, 1275, 1377, 1321, 979, 237]", - "total_badness": 9468.2810231 + "ne2d": 1412, + "ne3d": 7741, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 11, 17, 64, 139, 294, 516, 862, 1328, 1545, 1486, 1147, 331]", + "total_badness": 9711.521562 }, { "ne1d": 624, - "ne2d": 3810, - "ne3d": 37770, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 6, 20, 70, 145, 415, 941, 1986, 3872, 6127, 7881, 8209, 6217, 1880]", - "total_badness": 46477.07805 + "ne2d": 3944, + "ne3d": 38347, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 18, 40, 131, 351, 853, 2070, 3906, 6037, 7925, 8484, 6438, 2092]", + "total_badness": 47000.212862 } ], "cubeandspheres.geo": [ @@ -268,353 +268,353 @@ "ne1d": 144, "ne2d": 148, "ne3d": 98, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 14, 14, 14, 18, 14, 6, 6, 0, 0]", - "total_badness": 149.18816997 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 18, 19, 13, 20, 2, 9, 1, 0]", + "total_badness": 145.83375079 + }, + { + "ne1d": 144, + "ne2d": 150, + "ne3d": 100, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 7, 10, 16, 18, 15, 17, 6, 5, 4, 0]", + "total_badness": 146.6468601 }, { "ne1d": 144, "ne2d": 148, "ne3d": 98, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 11, 11, 17, 13, 16, 18, 3, 6, 0, 0]", - "total_badness": 148.56830588 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 6, 6, 19, 21, 12, 18, 5, 4, 4, 0]", + "total_badness": 145.14580879 }, { "ne1d": 144, "ne2d": 148, "ne3d": 98, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 8, 12, 14, 22, 10, 18, 4, 6, 0, 0]", - "total_badness": 148.71179128 - }, - { - "ne1d": 144, - "ne2d": 148, - "ne3d": 98, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 14, 14, 14, 18, 14, 6, 6, 0, 0]", - "total_badness": 149.18816997 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 3, 4, 18, 19, 13, 20, 2, 9, 1, 0]", + "total_badness": 145.83375079 }, { "ne1d": 264, - "ne2d": 352, - "ne3d": 322, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 15, 33, 40, 34, 47, 42, 23, 32, 29, 18, 5, 1]", - "total_badness": 519.67445044 + "ne2d": 390, + "ne3d": 369, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 5, 19, 26, 42, 46, 49, 41, 53, 45, 27, 10, 2]", + "total_badness": 554.2809713 }, { "ne1d": 428, - "ne2d": 902, - "ne3d": 1050, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 21, 55, 53, 60, 106, 140, 125, 89, 115, 114, 79, 49, 37, 7]", - "total_badness": 1742.9580036 + "ne2d": 926, + "ne3d": 1074, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 23, 50, 36, 109, 137, 96, 117, 160, 162, 67, 60, 32, 22]", + "total_badness": 1675.8711911 } ], "cubemcyl.geo": [ { "ne1d": 142, - "ne2d": 2446, - "ne3d": 20376, - "quality_histogram": "[0, 0, 0, 0, 0, 4, 30, 124, 254, 467, 838, 1358, 1902, 2621, 2988, 3092, 2912, 2176, 1289, 321]", - "total_badness": 28732.001319 + "ne2d": 2488, + "ne3d": 20783, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 26, 94, 208, 408, 708, 1158, 1848, 2485, 3200, 3251, 3127, 2474, 1418, 376]", + "total_badness": 28813.276387 }, { "ne1d": 64, - "ne2d": 610, - "ne3d": 3095, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 9, 21, 39, 75, 144, 238, 340, 436, 489, 491, 378, 261, 140, 34]", - "total_badness": 4458.1067866 + "ne2d": 642, + "ne3d": 3214, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 7, 13, 34, 74, 140, 230, 351, 455, 533, 531, 378, 284, 151, 31]", + "total_badness": 4592.7629352 }, { "ne1d": 102, - "ne2d": 1370, - "ne3d": 7955, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 11, 63, 157, 297, 497, 895, 1095, 1296, 1215, 1069, 758, 452, 148]", - "total_badness": 11150.474701 + "ne2d": 1402, + "ne3d": 8234, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 12, 30, 67, 143, 309, 586, 856, 1050, 1271, 1291, 1179, 825, 462, 151]", + "total_badness": 11552.618825 }, { "ne1d": 142, - "ne2d": 2446, - "ne3d": 18903, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 9, 52, 134, 343, 650, 1168, 2032, 2738, 3338, 3304, 2846, 1788, 501]", - "total_badness": 24879.568157 + "ne2d": 2488, + "ne3d": 19499, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 5, 27, 106, 226, 529, 1209, 2008, 2862, 3440, 3576, 3083, 1921, 507]", + "total_badness": 25390.546576 }, { "ne1d": 210, - "ne2d": 5438, - "ne3d": 88766, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 6, 29, 124, 395, 1107, 2534, 5743, 9904, 14438, 18388, 18815, 13214, 4069]", - "total_badness": 110093.18284 + "ne2d": 5508, + "ne3d": 88767, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 26, 120, 352, 982, 2386, 5436, 9851, 14528, 18286, 19003, 13703, 4092]", + "total_badness": 109764.47526 }, { "ne1d": 362, - "ne2d": 14996, - "ne3d": 526308, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 18, 83, 344, 1098, 3118, 9070, 23211, 48496, 81254, 110846, 122403, 95673, 30692]", - "total_badness": 638104.66873 + "ne2d": 15122, + "ne3d": 524413, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 23, 86, 347, 1131, 3167, 9094, 23844, 49271, 81498, 111440, 122044, 93488, 28977]", + "total_badness": 636787.56071 } ], "cubemsphere.geo": [ { "ne1d": 90, - "ne2d": 658, - "ne3d": 4711, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 10, 27, 50, 94, 180, 303, 459, 591, 709, 689, 658, 536, 328, 77]", - "total_badness": 6607.5525427 + "ne2d": 702, + "ne3d": 4867, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 5, 17, 43, 80, 172, 274, 422, 600, 765, 725, 748, 588, 317, 111]", + "total_badness": 6717.4363413 }, { "ne1d": 44, - "ne2d": 230, - "ne3d": 615, - "quality_histogram": "[0, 0, 0, 0, 2, 3, 14, 27, 47, 71, 83, 96, 66, 62, 49, 38, 29, 11, 14, 3]", - "total_badness": 1101.3768112 + "ne2d": 274, + "ne3d": 768, + "quality_histogram": "[0, 0, 0, 0, 1, 5, 9, 11, 26, 62, 72, 78, 114, 95, 91, 78, 74, 24, 22, 6]", + "total_badness": 1237.8358347 }, { "ne1d": 68, - "ne2d": 382, - "ne3d": 1582, - "quality_histogram": "[0, 0, 0, 1, 0, 0, 1, 8, 21, 35, 80, 112, 189, 245, 243, 240, 193, 125, 74, 15]", - "total_badness": 2282.2332329 + "ne2d": 402, + "ne3d": 1600, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 4, 26, 61, 119, 170, 232, 277, 269, 214, 148, 71, 7]", + "total_badness": 2248.6479915 }, { "ne1d": 90, - "ne2d": 658, - "ne3d": 4427, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 3, 12, 34, 88, 172, 319, 479, 662, 739, 759, 614, 420, 124]", - "total_badness": 5868.6109754 + "ne2d": 702, + "ne3d": 4618, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 4, 24, 53, 140, 293, 465, 706, 805, 841, 747, 418, 120]", + "total_badness": 6022.3952178 }, { "ne1d": 146, - "ne2d": 1400, - "ne3d": 17593, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 11, 29, 113, 227, 554, 1165, 1970, 2907, 3573, 3694, 2609, 740]", - "total_badness": 21904.812218 + "ne2d": 1492, + "ne3d": 17800, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 7, 23, 89, 208, 524, 1085, 1942, 2969, 3729, 3811, 2675, 736]", + "total_badness": 22074.204803 }, { "ne1d": 248, - "ne2d": 4228, - "ne3d": 113220, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 13, 44, 146, 376, 952, 2444, 5872, 11431, 17868, 23828, 25460, 19207, 5578]", - "total_badness": 138667.4834 + "ne2d": 4354, + "ne3d": 113716, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 5, 12, 43, 136, 381, 909, 2353, 5720, 11280, 18112, 23886, 25957, 19090, 5832]", + "total_badness": 139103.15382 } ], "cylinder.geo": [ { "ne1d": 52, "ne2d": 288, - "ne3d": 373, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 17, 48, 41, 57, 46, 46, 40, 40, 21, 10, 1]", - "total_badness": 570.55070099 + "ne3d": 410, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 2, 8, 14, 31, 47, 57, 67, 64, 53, 44, 13, 9]", + "total_badness": 577.74781759 }, { "ne1d": 24, "ne2d": 66, - "ne3d": 113, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 5, 11, 14, 21, 20, 26, 5, 7]", - "total_badness": 144.11768709 + "ne3d": 124, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 9, 12, 16, 23, 39, 12, 5]", + "total_badness": 153.9684245 }, { "ne1d": 36, "ne2d": 152, - "ne3d": 350, - "quality_histogram": "[7, 11, 19, 25, 33, 33, 23, 20, 37, 19, 9, 14, 28, 12, 12, 4, 32, 4, 6, 2]", - "total_badness": 1478.5840853 + "ne3d": 376, + "quality_histogram": "[0, 0, 0, 8, 18, 19, 17, 43, 35, 17, 29, 16, 18, 42, 20, 21, 38, 16, 12, 7]", + "total_badness": 793.09247202 }, { "ne1d": 52, "ne2d": 288, - "ne3d": 373, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 17, 48, 40, 56, 45, 48, 40, 40, 22, 10, 1]", - "total_badness": 570.48747936 + "ne3d": 404, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 2, 4, 15, 25, 38, 68, 66, 55, 55, 52, 15, 8]", + "total_badness": 562.71987918 }, { "ne1d": 76, "ne2d": 636, - "ne3d": 1137, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 7, 27, 48, 71, 98, 132, 182, 156, 180, 136, 79, 19]", - "total_badness": 1578.5996937 + "ne3d": 1146, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 12, 34, 57, 101, 121, 179, 190, 199, 137, 96, 17]", + "total_badness": 1547.7672308 }, { "ne1d": 124, - "ne2d": 1668, - "ne3d": 8144, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 1, 6, 20, 64, 189, 420, 858, 1386, 1685, 1693, 1360, 461]", - "total_badness": 9978.9003582 + "ne2d": 1672, + "ne3d": 8039, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 16, 52, 160, 405, 772, 1246, 1710, 1808, 1421, 444]", + "total_badness": 9788.5339464 } ], "cylsphere.geo": [ { "ne1d": 104, "ne2d": 496, - "ne3d": 769, - "quality_histogram": "[0, 0, 0, 0, 1, 1, 8, 10, 20, 31, 64, 104, 111, 105, 113, 63, 69, 47, 18, 4]", - "total_badness": 1205.3563502 + "ne3d": 711, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 9, 15, 36, 63, 90, 107, 103, 99, 56, 60, 50, 17, 2]", + "total_badness": 1105.8880942 }, { "ne1d": 48, - "ne2d": 136, - "ne3d": 211, - "quality_histogram": "[0, 0, 1, 11, 19, 15, 23, 13, 14, 8, 12, 6, 9, 17, 11, 8, 12, 26, 6, 0]", - "total_badness": 508.6341945 + "ne2d": 142, + "ne3d": 242, + "quality_histogram": "[0, 0, 0, 16, 20, 29, 22, 22, 6, 8, 6, 14, 5, 13, 14, 25, 18, 13, 11, 0]", + "total_badness": 604.89450225 }, { "ne1d": 104, "ne2d": 496, - "ne3d": 763, - "quality_histogram": "[0, 0, 0, 0, 1, 1, 6, 8, 15, 24, 53, 92, 109, 105, 114, 87, 71, 48, 28, 1]", - "total_badness": 1166.824818 + "ne3d": 709, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 5, 15, 29, 63, 86, 110, 109, 89, 69, 66, 45, 15, 4]", + "total_badness": 1092.3394563 }, { "ne1d": 152, - "ne2d": 1082, - "ne3d": 2764, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 6, 17, 47, 113, 184, 268, 318, 434, 511, 462, 305, 96]", - "total_badness": 3608.4305823 + "ne2d": 1084, + "ne3d": 2798, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 5, 19, 44, 91, 162, 267, 345, 422, 507, 505, 322, 108]", + "total_badness": 3620.8176099 }, { "ne1d": 248, - "ne2d": 2798, - "ne3d": 17399, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 24, 51, 181, 398, 941, 1798, 2813, 3642, 3802, 2815, 930]", - "total_badness": 21362.004145 + "ne2d": 2820, + "ne3d": 17745, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 20, 57, 142, 331, 880, 1771, 2788, 3668, 3998, 3037, 1049]", + "total_badness": 21647.214644 } ], "ellipsoid.geo": [ { "ne1d": 0, - "ne2d": 686, - "ne3d": 1267, - "quality_histogram": "[0, 0, 0, 0, 1, 3, 9, 22, 59, 98, 116, 117, 161, 168, 150, 127, 117, 65, 41, 13]", - "total_badness": 2020.1005544 + "ne2d": 704, + "ne3d": 1297, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 7, 14, 42, 76, 119, 157, 154, 160, 158, 142, 111, 89, 54, 14]", + "total_badness": 2009.8527353 }, { "ne1d": 0, - "ne2d": 182, - "ne3d": 847, - "quality_histogram": "[16, 151, 142, 110, 54, 76, 47, 43, 37, 39, 25, 31, 26, 15, 11, 10, 4, 6, 1, 3]", - "total_badness": 5395.4074386 + "ne2d": 192, + "ne3d": 915, + "quality_histogram": "[24, 146, 135, 112, 105, 65, 62, 41, 46, 43, 32, 26, 19, 24, 15, 10, 6, 1, 3, 0]", + "total_badness": 5760.7267346 }, { "ne1d": 0, - "ne2d": 384, - "ne3d": 581, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 8, 17, 29, 58, 73, 91, 80, 78, 65, 33, 27, 19, 2]", - "total_badness": 912.08491356 + "ne2d": 394, + "ne3d": 592, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 5, 9, 21, 38, 80, 86, 90, 99, 53, 48, 29, 22, 12]", + "total_badness": 893.18441542 }, { "ne1d": 0, - "ne2d": 686, - "ne3d": 1249, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 7, 14, 45, 79, 96, 114, 162, 158, 141, 155, 123, 88, 52, 14]", - "total_badness": 1922.5886374 + "ne2d": 704, + "ne3d": 1282, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 10, 33, 59, 108, 136, 158, 156, 163, 153, 115, 97, 69, 23]", + "total_badness": 1929.3894181 }, { "ne1d": 0, - "ne2d": 1598, - "ne3d": 5214, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 16, 32, 97, 186, 312, 520, 658, 859, 914, 857, 604, 157]", - "total_badness": 6803.6112693 + "ne2d": 1618, + "ne3d": 5569, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 23, 73, 130, 303, 511, 700, 922, 1025, 989, 693, 195]", + "total_badness": 7142.2540344 }, { "ne1d": 0, - "ne2d": 4194, - "ne3d": 37370, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 8, 19, 44, 111, 311, 846, 1867, 3637, 5870, 7895, 8585, 6262, 1912]", - "total_badness": 45726.525344 + "ne2d": 4236, + "ne3d": 37387, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 17, 75, 239, 644, 1587, 3545, 5826, 7874, 8638, 6846, 2092]", + "total_badness": 45341.992565 } ], "ellipticcone.geo": [ { "ne1d": 174, - "ne2d": 1528, - "ne3d": 5118, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 16, 33, 75, 139, 240, 434, 619, 759, 884, 814, 643, 366, 93]", - "total_badness": 6977.8809322 + "ne2d": 1562, + "ne3d": 5180, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 18, 65, 115, 211, 361, 589, 766, 881, 904, 732, 405, 130]", + "total_badness": 6920.4601657 }, { "ne1d": 86, - "ne2d": 374, + "ne2d": 380, "ne3d": 585, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 9, 13, 24, 46, 63, 60, 85, 82, 78, 61, 38, 19, 5]", - "total_badness": 887.43996754 + "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 5, 13, 17, 32, 57, 64, 73, 84, 89, 68, 47, 22, 12]", + "total_badness": 860.61770269 }, { "ne1d": 130, - "ne2d": 846, - "ne3d": 1680, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 18, 28, 47, 86, 139, 185, 232, 222, 255, 201, 164, 77, 23]", - "total_badness": 2436.7946247 + "ne2d": 864, + "ne3d": 1734, + "quality_histogram": "[0, 0, 0, 0, 0, 7, 9, 28, 37, 57, 85, 135, 132, 216, 225, 256, 238, 177, 100, 32]", + "total_badness": 2535.8367438 }, { "ne1d": 174, - "ne2d": 1528, - "ne3d": 4853, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 9, 32, 61, 129, 296, 505, 739, 906, 892, 704, 453, 126]", - "total_badness": 6344.0542598 + "ne2d": 1562, + "ne3d": 4943, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 15, 49, 116, 255, 456, 635, 917, 1005, 806, 517, 167]", + "total_badness": 6347.4280983 }, { "ne1d": 258, - "ne2d": 3378, - "ne3d": 13096, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 12, 37, 100, 226, 405, 741, 1138, 1694, 2154, 2382, 2242, 1503, 461]", - "total_badness": 16999.928783 + "ne2d": 3468, + "ne3d": 13314, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 33, 103, 197, 351, 652, 1077, 1619, 2280, 2518, 2361, 1583, 535]", + "total_badness": 17113.967555 }, { "ne1d": 432, - "ne2d": 9384, - "ne3d": 69399, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 10, 40, 159, 347, 879, 2068, 4096, 7587, 11297, 14016, 14721, 10764, 3413]", - "total_badness": 86005.445455 + "ne2d": 9544, + "ne3d": 69891, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 9, 37, 119, 313, 839, 1927, 4086, 7715, 11454, 14338, 14977, 10816, 3260]", + "total_badness": 86472.194086 } ], "ellipticcyl.geo": [ { "ne1d": 156, - "ne2d": 978, - "ne3d": 2173, - "quality_histogram": "[0, 0, 0, 0, 1, 2, 6, 21, 39, 80, 120, 163, 228, 297, 314, 272, 277, 200, 116, 37]", - "total_badness": 3176.0734083 + "ne2d": 996, + "ne3d": 2299, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 12, 15, 55, 86, 117, 235, 272, 372, 360, 358, 240, 144, 33]", + "total_badness": 3202.1380209 }, { "ne1d": 76, - "ne2d": 234, - "ne3d": 318, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 16, 23, 26, 47, 60, 57, 36, 31, 15, 2]", - "total_badness": 445.78992995 + "ne2d": 238, + "ne3d": 325, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 18, 28, 26, 38, 68, 55, 45, 28, 11, 2]", + "total_badness": 459.61476239 }, { "ne1d": 116, - "ne2d": 590, - "ne3d": 1110, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 9, 20, 40, 76, 108, 163, 174, 169, 154, 96, 82, 17]", - "total_badness": 1550.1402117 + "ne2d": 596, + "ne3d": 1129, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 2, 10, 28, 38, 75, 130, 159, 208, 199, 162, 100, 17]", + "total_badness": 1500.1384781 }, { "ne1d": 156, - "ne2d": 978, - "ne3d": 2116, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 2, 12, 24, 53, 88, 148, 204, 264, 307, 311, 310, 212, 134, 45]", - "total_badness": 2990.2292327 + "ne2d": 996, + "ne3d": 2214, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 4, 40, 47, 89, 182, 262, 324, 362, 381, 279, 196, 46]", + "total_badness": 2974.3073079 }, { "ne1d": 232, - "ne2d": 2152, - "ne3d": 8180, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 4, 13, 75, 162, 340, 621, 998, 1438, 1633, 1538, 1036, 320]", - "total_badness": 10345.93668 + "ne2d": 2212, + "ne3d": 8313, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 15, 37, 113, 263, 626, 1005, 1387, 1743, 1660, 1133, 327]", + "total_badness": 10392.004794 }, { "ne1d": 388, - "ne2d": 6032, - "ne3d": 55282, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 17, 55, 134, 358, 1019, 2431, 5189, 8900, 11545, 12575, 9809, 3249]", - "total_badness": 67200.497687 + "ne2d": 6142, + "ne3d": 54975, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 12, 45, 127, 329, 844, 2554, 5100, 8469, 11479, 12855, 9876, 3283]", + "total_badness": 66669.096677 } ], "fichera.geo": [ { "ne1d": 50, "ne2d": 38, - "ne3d": 35, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 0, 14, 6, 4, 3, 0, 0, 0]", - "total_badness": 52.723984269 + "ne3d": 40, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 4, 3, 5, 7, 8, 2, 1, 0, 2]", + "total_badness": 62.361996939 }, { "ne1d": 42, @@ -633,46 +633,46 @@ { "ne1d": 50, "ne2d": 38, - "ne3d": 35, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 0, 14, 6, 4, 3, 0, 0, 0]", - "total_badness": 52.723984269 + "ne3d": 40, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 4, 3, 5, 7, 8, 2, 1, 0, 2]", + "total_badness": 62.361996939 }, { "ne1d": 96, - "ne2d": 106, - "ne3d": 179, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 10, 22, 29, 29, 24, 32, 16, 10, 4]", - "total_badness": 244.43517202 + "ne2d": 120, + "ne3d": 211, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 6, 14, 22, 26, 38, 37, 41, 14, 9]", + "total_badness": 273.06134659 }, { "ne1d": 144, - "ne2d": 256, - "ne3d": 488, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 6, 16, 33, 67, 69, 87, 83, 64, 51, 8]", - "total_badness": 644.18548378 + "ne2d": 274, + "ne3d": 510, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 8, 16, 34, 67, 79, 99, 78, 66, 48, 12]", + "total_badness": 673.19970182 } ], "frame.step": [ { "ne1d": 12694, - "ne2d": 40032, - "ne3d": 217255, - "quality_histogram": "[5, 13, 31, 61, 130, 279, 648, 1439, 2748, 4927, 8104, 12603, 18825, 26189, 30309, 33468, 31719, 25459, 15756, 4542]", - "total_badness": 305515.07817 + "ne2d": 40504, + "ne3d": 218733, + "quality_histogram": "[4, 7, 19, 26, 34, 80, 334, 892, 2071, 3877, 6685, 11284, 17985, 25708, 31526, 35128, 33835, 27776, 17087, 4375]", + "total_badness": 300987.32592 }, { "ne1d": 6026, - "ne2d": 11524, - "ne3d": 30642, - "quality_histogram": "[5, 17, 33, 55, 112, 215, 294, 601, 966, 1480, 2132, 3064, 3480, 3813, 3959, 3899, 2963, 2077, 1083, 394]", - "total_badness": 48718.851933 + "ne2d": 11450, + "ne3d": 30266, + "quality_histogram": "[3, 4, 4, 15, 27, 52, 144, 325, 794, 1146, 1804, 2656, 3402, 4054, 4470, 4132, 3244, 2343, 1324, 323]", + "total_badness": 45523.987082 }, { "ne1d": 9704, - "ne2d": 24306, - "ne3d": 84372, - "quality_histogram": "[5, 24, 44, 72, 114, 182, 376, 582, 1183, 2141, 3538, 5817, 8397, 11162, 12283, 12562, 11075, 8571, 4984, 1260]", - "total_badness": 122228.21207 + "ne2d": 24550, + "ne3d": 95261, + "quality_histogram": "[7, 41, 55, 151, 370, 1084, 2131, 3122, 4208, 5545, 7047, 8851, 10433, 11502, 11477, 10373, 8376, 6104, 3497, 887]", + "total_badness": 157567.1736 } ], "hinge.stl": [ @@ -719,6 +719,50 @@ "total_badness": 166221.42387 } ], + "lense.in2d": [ + { + "ne1d": 84, + "ne2d": 436, + "ne3d": 0, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]", + "total_badness": 0.0 + }, + { + "ne1d": 86, + "ne2d": 476, + "ne3d": 0, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]", + "total_badness": 0.0 + }, + { + "ne1d": 86, + "ne2d": 490, + "ne3d": 0, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]", + "total_badness": 0.0 + }, + { + "ne1d": 84, + "ne2d": 436, + "ne3d": 0, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]", + "total_badness": 0.0 + }, + { + "ne1d": 84, + "ne2d": 460, + "ne3d": 0, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]", + "total_badness": 0.0 + }, + { + "ne1d": 88, + "ne2d": 496, + "ne3d": 0, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]", + "total_badness": 0.0 + } + ], "lshape3d.geo": [ { "ne1d": 44, @@ -750,93 +794,93 @@ }, { "ne1d": 80, - "ne2d": 68, - "ne3d": 76, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 10, 5, 11, 21, 12, 4, 3, 6]", - "total_badness": 100.74904328 + "ne2d": 76, + "ne3d": 88, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 10, 9, 21, 23, 7, 6, 1, 4]", + "total_badness": 121.1271847 }, { "ne1d": 122, - "ne2d": 194, - "ne3d": 314, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 5, 16, 30, 35, 37, 52, 48, 43, 28, 11]", - "total_badness": 424.01540745 + "ne2d": 204, + "ne3d": 326, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 11, 17, 43, 51, 53, 55, 51, 33, 6]", + "total_badness": 427.73309234 } ], "manyholes.geo": [ { "ne1d": 5886, - "ne2d": 47108, - "ne3d": 178892, - "quality_histogram": "[0, 0, 0, 0, 9, 49, 344, 271, 1077, 1746, 4315, 9252, 12828, 22104, 26682, 30142, 28475, 22329, 13211, 6058]", - "total_badness": 242036.00946 + "ne2d": 48052, + "ne3d": 179262, + "quality_histogram": "[0, 0, 0, 0, 7, 34, 52, 190, 559, 1394, 3332, 7622, 12534, 20021, 27619, 30066, 29961, 25045, 16810, 4016]", + "total_badness": 238415.32571 }, { "ne1d": 2746, - "ne2d": 13444, - "ne3d": 29535, - "quality_histogram": "[0, 0, 0, 0, 17, 37, 130, 275, 644, 995, 1649, 2438, 3005, 3915, 4857, 4110, 2759, 2067, 1198, 1439]", - "total_badness": 43431.404115 + "ne2d": 13866, + "ne3d": 29255, + "quality_histogram": "[0, 0, 0, 0, 12, 22, 36, 163, 382, 903, 1510, 2377, 3268, 4375, 4191, 3761, 3120, 2567, 1846, 722]", + "total_badness": 42256.964101 }, { "ne1d": 4106, - "ne2d": 27422, - "ne3d": 69306, - "quality_histogram": "[0, 0, 0, 6, 39, 119, 211, 574, 1050, 1823, 3574, 5064, 7229, 10576, 9132, 9351, 8299, 6328, 3426, 2505]", - "total_badness": 100153.49841 + "ne2d": 27994, + "ne3d": 70558, + "quality_histogram": "[0, 0, 0, 2, 32, 84, 194, 406, 841, 1669, 2783, 4416, 6997, 9372, 10151, 10346, 9564, 7474, 4487, 1740]", + "total_badness": 99764.452235 } ], "manyholes2.geo": [ { "ne1d": 10202, - "ne2d": 53806, - "ne3d": 128979, - "quality_histogram": "[0, 0, 1, 15, 52, 115, 343, 600, 1518, 2768, 4832, 8179, 11632, 16124, 22272, 20407, 15327, 11446, 6833, 6515]", - "total_badness": 181571.22116 + "ne2d": 55380, + "ne3d": 127866, + "quality_histogram": "[0, 0, 0, 0, 5, 32, 101, 306, 842, 2081, 4519, 7983, 11838, 17786, 18634, 18254, 16922, 14537, 10444, 3582]", + "total_badness": 176665.61274 } ], "matrix.geo": [ { "ne1d": 174, - "ne2d": 1112, - "ne3d": 4664, - "quality_histogram": "[0, 0, 20, 71, 60, 66, 112, 199, 239, 366, 369, 455, 446, 506, 495, 423, 362, 273, 145, 57]", - "total_badness": 8426.3306839 + "ne2d": 1198, + "ne3d": 5246, + "quality_histogram": "[0, 0, 39, 136, 119, 93, 134, 174, 148, 224, 329, 399, 532, 581, 603, 563, 474, 398, 241, 59]", + "total_badness": 9567.4544817 }, { "ne1d": 106, - "ne2d": 586, - "ne3d": 1974, - "quality_histogram": "[0, 13, 51, 99, 155, 168, 180, 193, 176, 168, 201, 132, 122, 102, 68, 51, 25, 29, 29, 12]", - "total_badness": 5471.3255025 + "ne2d": 610, + "ne3d": 1936, + "quality_histogram": "[0, 1, 11, 66, 104, 143, 140, 142, 192, 179, 201, 199, 161, 135, 74, 57, 51, 46, 29, 5]", + "total_badness": 4606.0709672 }, { "ne1d": 132, - "ne2d": 778, - "ne3d": 2548, - "quality_histogram": "[0, 0, 12, 54, 87, 126, 142, 175, 269, 295, 255, 257, 215, 201, 152, 122, 80, 54, 38, 14]", - "total_badness": 5547.4387913 + "ne2d": 830, + "ne3d": 2751, + "quality_histogram": "[0, 0, 4, 57, 63, 116, 124, 163, 226, 230, 333, 307, 270, 240, 206, 164, 105, 82, 43, 18]", + "total_badness": 5616.8677502 }, { "ne1d": 174, - "ne2d": 1112, - "ne3d": 4528, - "quality_histogram": "[0, 0, 15, 52, 50, 61, 91, 184, 216, 326, 320, 439, 425, 505, 497, 419, 412, 289, 168, 59]", - "total_badness": 7915.0764915 + "ne2d": 1198, + "ne3d": 5176, + "quality_histogram": "[0, 0, 31, 113, 115, 69, 111, 172, 123, 209, 285, 339, 485, 597, 595, 628, 503, 468, 254, 79]", + "total_badness": 9086.4626755 }, { "ne1d": 248, - "ne2d": 2234, - "ne3d": 15738, - "quality_histogram": "[0, 0, 0, 1, 4, 9, 49, 111, 189, 286, 466, 759, 1180, 1558, 2068, 2417, 2414, 2223, 1548, 456]", - "total_badness": 21524.074952 + "ne2d": 2324, + "ne3d": 16341, + "quality_histogram": "[0, 0, 0, 0, 0, 7, 23, 64, 122, 219, 336, 666, 982, 1584, 2204, 2586, 2786, 2581, 1637, 544]", + "total_badness": 21749.164857 }, { "ne1d": 418, - "ne2d": 5836, - "ne3d": 99039, - "quality_histogram": "[0, 0, 0, 1, 1, 3, 15, 45, 125, 259, 646, 1399, 3028, 6125, 10634, 15783, 20056, 20888, 15273, 4758]", - "total_badness": 123167.25076 + "ne2d": 5968, + "ne3d": 100573, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 18, 78, 192, 438, 1216, 2786, 6112, 10628, 15970, 20785, 21682, 15766, 4896]", + "total_badness": 124376.56219 } ], "ortho.geo": [ @@ -877,10 +921,10 @@ }, { "ne1d": 72, - "ne2d": 108, - "ne3d": 169, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 10, 12, 23, 26, 26, 30, 23, 10, 4]", - "total_badness": 227.08316059 + "ne2d": 116, + "ne3d": 180, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 11, 12, 24, 35, 36, 29, 16, 9]", + "total_badness": 231.52239849 } ], "part1.stl": [ @@ -923,45 +967,45 @@ "period.geo": [ { "ne1d": 344, - "ne2d": 1092, - "ne3d": 3101, - "quality_histogram": "[0, 0, 0, 0, 4, 13, 23, 64, 104, 148, 235, 320, 331, 363, 393, 363, 304, 218, 161, 57]", - "total_badness": 4789.6346919 + "ne2d": 1136, + "ne3d": 3291, + "quality_histogram": "[0, 0, 0, 0, 1, 6, 24, 38, 73, 142, 237, 280, 363, 430, 473, 394, 337, 293, 163, 37]", + "total_badness": 4941.6426523 }, { "ne1d": 160, - "ne2d": 272, - "ne3d": 588, - "quality_histogram": "[0, 0, 1, 7, 13, 20, 23, 41, 47, 50, 42, 56, 45, 47, 50, 51, 22, 47, 15, 11]", - "total_badness": 1132.5775066 + "ne2d": 286, + "ne3d": 642, + "quality_histogram": "[0, 0, 4, 7, 11, 22, 28, 28, 40, 61, 66, 58, 59, 55, 53, 53, 40, 36, 16, 5]", + "total_badness": 1235.2259283 }, { "ne1d": 232, - "ne2d": 552, - "ne3d": 1329, - "quality_histogram": "[0, 0, 4, 13, 23, 41, 64, 69, 81, 107, 118, 125, 143, 114, 102, 95, 117, 58, 32, 23]", - "total_badness": 2516.6683318 + "ne2d": 598, + "ne3d": 1654, + "quality_histogram": "[5, 18, 43, 57, 47, 59, 62, 79, 117, 120, 126, 148, 134, 159, 134, 113, 117, 66, 39, 11]", + "total_badness": 3928.2006441 }, { "ne1d": 344, - "ne2d": 1092, - "ne3d": 3060, - "quality_histogram": "[0, 0, 0, 0, 4, 9, 20, 47, 94, 129, 219, 274, 328, 371, 378, 370, 334, 265, 162, 56]", - "total_badness": 4632.1450094 + "ne2d": 1136, + "ne3d": 3221, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 20, 24, 54, 111, 178, 268, 317, 453, 436, 450, 365, 311, 187, 44]", + "total_badness": 4704.9518805 }, { "ne1d": 480, - "ne2d": 2172, - "ne3d": 11163, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 5, 40, 73, 170, 308, 663, 985, 1444, 1852, 2071, 1910, 1223, 416]", - "total_badness": 14472.357604 + "ne2d": 2256, + "ne3d": 11709, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 9, 15, 51, 115, 243, 547, 966, 1489, 2032, 2273, 2081, 1459, 426]", + "total_badness": 14941.96653 }, { "ne1d": 820, - "ne2d": 6098, - "ne3d": 67286, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 7, 26, 114, 290, 816, 1898, 4057, 7076, 10984, 13871, 14152, 10618, 3377]", - "total_badness": 83173.133848 + "ne2d": 6226, + "ne3d": 68532, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 18, 76, 261, 684, 1675, 3888, 7222, 11072, 14234, 14852, 11076, 3469]", + "total_badness": 84325.408672 } ], "plane.stl": [ @@ -1011,332 +1055,464 @@ "revolution.geo": [ { "ne1d": 320, - "ne2d": 2976, - "ne3d": 8188, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 16, 79, 152, 311, 565, 736, 920, 1083, 1080, 1027, 960, 678, 480, 99]", - "total_badness": 12075.726682 + "ne2d": 3110, + "ne3d": 8443, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 12, 45, 144, 318, 519, 804, 967, 1078, 1145, 1112, 987, 738, 454, 119]", + "total_badness": 12356.528396 }, { "ne1d": 160, - "ne2d": 800, - "ne3d": 1311, - "quality_histogram": "[0, 0, 1, 2, 6, 25, 68, 91, 144, 135, 132, 130, 126, 109, 101, 88, 79, 40, 31, 3]", - "total_badness": 2483.2141758 + "ne2d": 822, + "ne3d": 1279, + "quality_histogram": "[0, 0, 0, 0, 2, 14, 52, 81, 100, 116, 148, 146, 167, 114, 92, 74, 92, 44, 25, 12]", + "total_badness": 2305.3064983 }, { "ne1d": 240, - "ne2d": 1768, - "ne3d": 3842, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 8, 29, 95, 175, 307, 416, 446, 505, 495, 424, 392, 324, 178, 48]", - "total_badness": 5778.3652899 + "ne2d": 1830, + "ne3d": 3870, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 5, 29, 108, 195, 310, 445, 521, 478, 473, 425, 351, 292, 195, 41]", + "total_badness": 5884.7598106 }, { "ne1d": 320, - "ne2d": 2976, - "ne3d": 8011, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 5, 23, 86, 233, 422, 652, 798, 1026, 1099, 1107, 1023, 849, 566, 122]", - "total_badness": 11388.557884 + "ne2d": 3110, + "ne3d": 8269, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 24, 69, 199, 438, 654, 876, 1057, 1127, 1199, 1061, 888, 548, 128]", + "total_badness": 11704.49421 }, { "ne1d": 480, - "ne2d": 6626, - "ne3d": 32594, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 5, 18, 105, 295, 716, 1448, 2646, 4240, 5435, 6192, 6037, 4244, 1212]", - "total_badness": 41402.678067 + "ne2d": 6864, + "ne3d": 33003, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 5, 20, 80, 243, 674, 1446, 2651, 4133, 5647, 6385, 6118, 4423, 1178]", + "total_badness": 41802.827145 }, { "ne1d": 800, - "ne2d": 17454, - "ne3d": 200716, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 14, 52, 179, 608, 1704, 4559, 10434, 19984, 31785, 41963, 45605, 33701, 10126]", - "total_badness": 245716.04369 + "ne2d": 17934, + "ne3d": 201498, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 44, 148, 603, 1656, 4364, 10078, 19992, 31915, 42284, 45543, 34094, 10774]", + "total_badness": 246262.93603 } ], "screw.step": [ { "ne1d": 400, - "ne2d": 1480, - "ne3d": 2651, - "quality_histogram": "[0, 0, 2, 0, 7, 15, 48, 74, 114, 189, 194, 241, 282, 297, 335, 308, 242, 172, 102, 29]", - "total_badness": 4282.6220755 + "ne2d": 1432, + "ne3d": 2402, + "quality_histogram": "[0, 0, 0, 0, 0, 4, 21, 78, 107, 181, 201, 246, 254, 284, 278, 249, 221, 161, 101, 16]", + "total_badness": 3838.1456915 }, { "ne1d": 530, - "ne2d": 2746, - "ne3d": 7967, - "quality_histogram": "[0, 2, 3, 1, 10, 18, 34, 59, 110, 180, 278, 411, 575, 811, 1049, 1251, 1297, 972, 713, 193]", - "total_badness": 11136.799459 + "ne2d": 2718, + "ne3d": 8015, + "quality_histogram": "[0, 0, 0, 0, 1, 2, 5, 17, 43, 88, 192, 275, 495, 749, 1086, 1287, 1380, 1267, 866, 262]", + "total_badness": 10583.964534 }, { "ne1d": 668, - "ne2d": 5066, - "ne3d": 31896, - "quality_histogram": "[0, 0, 0, 0, 2, 7, 10, 24, 43, 106, 221, 502, 969, 2036, 3531, 5162, 6478, 6558, 4810, 1437]", - "total_badness": 39857.410858 + "ne2d": 5002, + "ne3d": 31735, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 1, 5, 28, 45, 134, 357, 793, 1795, 3287, 5145, 6774, 6789, 4992, 1588]", + "total_badness": 39141.53875 } ], "sculpture.geo": [ { "ne1d": 192, - "ne2d": 398, - "ne3d": 456, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 2, 2, 11, 20, 37, 45, 57, 71, 77, 71, 38, 14, 9, 0]", - "total_badness": 702.3804118 + "ne2d": 414, + "ne3d": 475, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 5, 17, 18, 32, 62, 64, 97, 98, 41, 25, 11, 2]", + "total_badness": 692.44104062 }, { "ne1d": 102, - "ne2d": 144, - "ne3d": 137, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 10, 16, 17, 22, 29, 18, 18, 2]", - "total_badness": 178.33154961 + "ne2d": 146, + "ne3d": 141, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 5, 11, 19, 19, 36, 29, 17, 2]", + "total_badness": 178.07603683 }, { "ne1d": 144, - "ne2d": 234, - "ne3d": 235, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 7, 11, 11, 25, 36, 49, 37, 32, 18, 2]", - "total_badness": 319.02266286 + "ne2d": 250, + "ne3d": 263, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 6, 7, 14, 24, 29, 53, 46, 49, 24, 7]", + "total_badness": 343.8094424 }, { "ne1d": 192, - "ne2d": 398, - "ne3d": 456, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 1, 2, 11, 21, 39, 46, 57, 70, 77, 70, 37, 14, 9, 0]", - "total_badness": 702.94908258 + "ne2d": 414, + "ne3d": 475, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 5, 17, 18, 32, 62, 64, 97, 98, 41, 25, 11, 2]", + "total_badness": 692.44104062 }, { "ne1d": 288, - "ne2d": 938, - "ne3d": 1253, - "quality_histogram": "[0, 0, 1, 0, 2, 6, 15, 34, 68, 89, 152, 139, 125, 125, 138, 126, 99, 59, 53, 22]", - "total_badness": 2054.7201979 + "ne2d": 962, + "ne3d": 1326, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 6, 24, 53, 87, 122, 149, 125, 142, 117, 141, 144, 119, 80, 15]", + "total_badness": 2054.7475159 }, { "ne1d": 480, - "ne2d": 2324, - "ne3d": 6464, - "quality_histogram": "[0, 0, 0, 3, 7, 8, 17, 14, 20, 52, 96, 165, 302, 547, 852, 1076, 1204, 1135, 726, 240]", - "total_badness": 8431.4328551 + "ne2d": 2394, + "ne3d": 6791, + "quality_histogram": "[0, 0, 0, 0, 2, 3, 12, 10, 30, 33, 80, 135, 286, 503, 747, 1080, 1312, 1266, 984, 308]", + "total_badness": 8649.5978251 } ], "shaft.geo": [ { "ne1d": 708, - "ne2d": 1674, - "ne3d": 2489, - "quality_histogram": "[0, 0, 0, 2, 3, 14, 17, 34, 79, 156, 378, 332, 260, 273, 229, 266, 219, 132, 70, 25]", - "total_badness": 4028.4511449 + "ne2d": 1722, + "ne3d": 2757, + "quality_histogram": "[22, 11, 27, 30, 41, 40, 46, 62, 79, 140, 264, 373, 303, 274, 231, 291, 233, 179, 86, 25]", + "total_badness": 6328.6329226 }, { "ne1d": 410, - "ne2d": 586, - "ne3d": 869, - "quality_histogram": "[0, 0, 0, 0, 1, 2, 4, 17, 30, 46, 53, 64, 85, 80, 90, 104, 108, 115, 46, 24]", - "total_badness": 1295.3186437 + "ne2d": 606, + "ne3d": 933, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 4, 1, 17, 25, 47, 58, 90, 116, 155, 146, 124, 96, 36, 17]", + "total_badness": 1336.5110795 }, { "ne1d": 510, - "ne2d": 970, - "ne3d": 1686, - "quality_histogram": "[0, 0, 12, 26, 56, 51, 61, 87, 109, 113, 134, 139, 159, 175, 176, 150, 125, 58, 39, 16]", - "total_badness": 3309.2557071 + "ne2d": 1004, + "ne3d": 2048, + "quality_histogram": "[11, 74, 88, 69, 81, 94, 99, 125, 99, 122, 96, 133, 133, 165, 190, 186, 163, 67, 45, 8]", + "total_badness": 5937.4200337 }, { "ne1d": 708, - "ne2d": 1674, - "ne3d": 2477, - "quality_histogram": "[0, 0, 0, 2, 1, 9, 15, 36, 69, 148, 389, 328, 265, 262, 218, 288, 215, 130, 77, 25]", - "total_badness": 3983.0754336 + "ne2d": 1722, + "ne3d": 2733, + "quality_histogram": "[6, 8, 10, 17, 29, 39, 34, 40, 80, 132, 254, 397, 302, 295, 238, 297, 250, 192, 88, 25]", + "total_badness": 4814.5951096 }, { "ne1d": 1138, - "ne2d": 4078, - "ne3d": 10809, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 7, 19, 55, 142, 282, 437, 680, 1039, 1406, 1781, 1874, 1704, 1061, 321]", - "total_badness": 14354.482904 + "ne2d": 4220, + "ne3d": 11242, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 1, 27, 78, 178, 382, 607, 934, 1459, 1772, 2147, 1927, 1325, 403]", + "total_badness": 14539.392197 }, { "ne1d": 1792, - "ne2d": 10390, - "ne3d": 61428, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 7, 36, 113, 262, 726, 1670, 3519, 6476, 9764, 12505, 13045, 10002, 3302]", - "total_badness": 75768.180822 + "ne2d": 10600, + "ne3d": 63895, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 18, 53, 198, 529, 1486, 3387, 6482, 10124, 13426, 13922, 10754, 3514]", + "total_badness": 78232.724768 } ], "sphere.geo": [ { "ne1d": 0, - "ne2d": 110, - "ne3d": 110, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 29, 47, 6, 7, 6, 2, 4, 0, 1, 3, 0]", - "total_badness": 205.55211745 + "ne2d": 126, + "ne3d": 126, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 25, 47, 33, 12, 1, 2, 0, 0, 0, 0, 0]", + "total_badness": 237.42979301 }, { "ne1d": 0, - "ne2d": 52, - "ne3d": 52, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 4, 13, 14, 13, 3, 0]", - "total_badness": 65.101112061 + "ne2d": 56, + "ne3d": 56, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 18, 19, 15, 0, 0]", + "total_badness": 68.826138928 }, { "ne1d": 0, - "ne2d": 68, - "ne3d": 68, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 14, 24, 8, 7, 5, 4, 1, 2]", - "total_badness": 96.707948617 + "ne2d": 72, + "ne3d": 72, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 14, 27, 22, 7, 0, 0, 0]", + "total_badness": 97.572347502 }, { "ne1d": 0, - "ne2d": 110, - "ne3d": 110, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 29, 47, 6, 7, 6, 2, 4, 0, 1, 3, 0]", - "total_badness": 205.55211745 + "ne2d": 126, + "ne3d": 126, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 25, 47, 33, 12, 1, 2, 0, 0, 0, 0, 0]", + "total_badness": 237.42979301 }, { "ne1d": 0, - "ne2d": 254, - "ne3d": 350, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 8, 28, 47, 48, 43, 51, 47, 20, 20, 20, 10, 6]", - "total_badness": 555.65023551 + "ne2d": 258, + "ne3d": 366, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 6, 22, 32, 55, 47, 62, 28, 39, 31, 22, 15, 6]", + "total_badness": 562.00749621 }, { "ne1d": 0, - "ne2d": 656, - "ne3d": 2286, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 15, 37, 92, 152, 276, 397, 471, 429, 303, 111]", - "total_badness": 2868.3272967 + "ne2d": 660, + "ne3d": 2329, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 10, 28, 76, 158, 282, 415, 502, 433, 327, 91]", + "total_badness": 2913.3426209 } ], "sphereincube.geo": [ { "ne1d": 46, - "ne2d": 182, - "ne3d": 445, - "quality_histogram": "[0, 0, 7, 60, 44, 43, 53, 44, 55, 33, 27, 23, 10, 12, 11, 12, 5, 2, 4, 0]", - "total_badness": 1401.4502735 + "ne2d": 202, + "ne3d": 490, + "quality_histogram": "[0, 0, 8, 59, 42, 29, 53, 45, 55, 46, 33, 14, 16, 11, 15, 12, 12, 24, 11, 5]", + "total_badness": 1429.7083119 }, { "ne1d": 24, "ne2d": 60, "ne3d": 166, - "quality_histogram": "[0, 0, 8, 15, 17, 13, 17, 7, 5, 4, 3, 4, 14, 4, 10, 15, 9, 15, 5, 1]", - "total_badness": 472.78592323 + "quality_histogram": "[0, 0, 5, 12, 14, 15, 31, 10, 2, 1, 3, 2, 7, 9, 13, 13, 15, 9, 4, 1]", + "total_badness": 454.94795255 }, { "ne1d": 30, - "ne2d": 104, - "ne3d": 294, - "quality_histogram": "[0, 0, 6, 19, 18, 35, 35, 32, 30, 29, 22, 15, 12, 6, 16, 5, 7, 4, 3, 0]", - "total_badness": 831.78873831 + "ne2d": 116, + "ne3d": 345, + "quality_histogram": "[0, 0, 5, 24, 43, 41, 26, 26, 38, 32, 20, 18, 24, 14, 8, 9, 5, 7, 4, 1]", + "total_badness": 988.81847916 }, { "ne1d": 46, - "ne2d": 182, - "ne3d": 443, - "quality_histogram": "[0, 0, 6, 47, 35, 45, 57, 44, 50, 34, 25, 31, 13, 15, 15, 13, 6, 3, 4, 0]", - "total_badness": 1315.3011324 + "ne2d": 202, + "ne3d": 498, + "quality_histogram": "[0, 0, 8, 41, 27, 29, 50, 44, 55, 58, 44, 25, 20, 15, 14, 15, 13, 24, 11, 5]", + "total_badness": 1326.92489 }, { "ne1d": 74, - "ne2d": 384, - "ne3d": 1597, - "quality_histogram": "[0, 0, 0, 0, 2, 7, 12, 21, 27, 49, 80, 121, 170, 205, 219, 215, 191, 158, 92, 28]", - "total_badness": 2350.3326171 + "ne2d": 418, + "ne3d": 1788, + "quality_histogram": "[0, 0, 0, 0, 0, 6, 6, 21, 28, 38, 73, 98, 167, 213, 251, 273, 258, 200, 112, 44]", + "total_badness": 2540.547751 }, { "ne1d": 122, - "ne2d": 1048, - "ne3d": 13579, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 8, 17, 66, 160, 274, 542, 950, 1530, 2203, 2751, 2677, 1867, 534]", - "total_badness": 17161.325004 + "ne2d": 1082, + "ne3d": 14039, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 5, 31, 105, 218, 465, 893, 1497, 2202, 2857, 2912, 2179, 674]", + "total_badness": 17464.78638 + } + ], + "square.in2d": [ + { + "ne1d": 35, + "ne2d": 121, + "ne3d": 0, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]", + "total_badness": 0.0 + }, + { + "ne1d": 30, + "ne2d": 98, + "ne3d": 0, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]", + "total_badness": 0.0 + }, + { + "ne1d": 30, + "ne2d": 96, + "ne3d": 0, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]", + "total_badness": 0.0 + }, + { + "ne1d": 35, + "ne2d": 121, + "ne3d": 0, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]", + "total_badness": 0.0 + }, + { + "ne1d": 44, + "ne2d": 190, + "ne3d": 0, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]", + "total_badness": 0.0 + }, + { + "ne1d": 58, + "ne2d": 396, + "ne3d": 0, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]", + "total_badness": 0.0 + } + ], + "squarecircle.in2d": [ + { + "ne1d": 32, + "ne2d": 158, + "ne3d": 0, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]", + "total_badness": 0.0 + }, + { + "ne1d": 32, + "ne2d": 130, + "ne3d": 0, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]", + "total_badness": 0.0 + }, + { + "ne1d": 32, + "ne2d": 140, + "ne3d": 0, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]", + "total_badness": 0.0 + }, + { + "ne1d": 32, + "ne2d": 158, + "ne3d": 0, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]", + "total_badness": 0.0 + }, + { + "ne1d": 45, + "ne2d": 313, + "ne3d": 0, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]", + "total_badness": 0.0 + }, + { + "ne1d": 81, + "ne2d": 843, + "ne3d": 0, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]", + "total_badness": 0.0 + } + ], + "squarehole.in2d": [ + { + "ne1d": 32, + "ne2d": 134, + "ne3d": 0, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]", + "total_badness": 0.0 + }, + { + "ne1d": 32, + "ne2d": 108, + "ne3d": 0, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]", + "total_badness": 0.0 + }, + { + "ne1d": 32, + "ne2d": 118, + "ne3d": 0, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]", + "total_badness": 0.0 + }, + { + "ne1d": 32, + "ne2d": 134, + "ne3d": 0, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]", + "total_badness": 0.0 + }, + { + "ne1d": 45, + "ne2d": 253, + "ne3d": 0, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]", + "total_badness": 0.0 + }, + { + "ne1d": 81, + "ne2d": 709, + "ne3d": 0, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]", + "total_badness": 0.0 } ], "torus.geo": [ { "ne1d": 0, - "ne2d": 2514, - "ne3d": 5726, - "quality_histogram": "[0, 0, 0, 0, 0, 22, 36, 90, 173, 330, 475, 680, 762, 771, 679, 619, 489, 354, 187, 59]", - "total_badness": 8967.2870294 + "ne2d": 2534, + "ne3d": 5745, + "quality_histogram": "[0, 0, 0, 0, 0, 4, 19, 59, 148, 286, 440, 581, 679, 796, 742, 668, 583, 418, 238, 84]", + "total_badness": 8709.4458795 }, { "ne1d": 0, - "ne2d": 670, - "ne3d": 2988, - "quality_histogram": "[127, 598, 433, 338, 287, 207, 194, 144, 150, 118, 102, 79, 66, 48, 36, 23, 15, 15, 6, 2]", - "total_badness": 21069.350308 + "ne2d": 692, + "ne3d": 3181, + "quality_histogram": "[166, 714, 477, 367, 312, 232, 199, 167, 108, 100, 92, 66, 48, 39, 30, 27, 18, 13, 6, 0]", + "total_badness": 24641.250872 }, { "ne1d": 0, - "ne2d": 1426, - "ne3d": 2701, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 7, 25, 75, 171, 327, 369, 435, 378, 339, 263, 179, 101, 31]", - "total_badness": 3988.6535111 + "ne2d": 1446, + "ne3d": 2743, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 14, 62, 135, 247, 356, 403, 430, 384, 298, 200, 152, 59]", + "total_badness": 3928.1549928 }, { "ne1d": 0, - "ne2d": 2514, - "ne3d": 5554, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 9, 46, 105, 218, 384, 584, 704, 751, 700, 704, 577, 454, 249, 67]", - "total_badness": 8273.8939465 + "ne2d": 2534, + "ne3d": 5584, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 27, 78, 171, 346, 509, 649, 760, 771, 771, 646, 472, 283, 100]", + "total_badness": 8111.5941443 }, { "ne1d": 0, - "ne2d": 5842, - "ne3d": 24282, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 19, 81, 228, 548, 1135, 1947, 3128, 4133, 4719, 4422, 3081, 838]", - "total_badness": 30913.936434 + "ne2d": 5894, + "ne3d": 25294, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 9, 32, 149, 417, 947, 1723, 2990, 4145, 5146, 5002, 3604, 1129]", + "total_badness": 31642.969488 }, { "ne1d": 0, - "ne2d": 16170, - "ne3d": 174079, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 6, 34, 138, 426, 1276, 3495, 8503, 16924, 27371, 37192, 39797, 29753, 9164]", - "total_badness": 212322.15571 + "ne2d": 16296, + "ne3d": 175351, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 7, 36, 115, 401, 1106, 3230, 8059, 16480, 27460, 37219, 40628, 30958, 9652]", + "total_badness": 213157.95506 } ], "trafo.geo": [ { "ne1d": 690, - "ne2d": 1650, - "ne3d": 5153, - "quality_histogram": "[1, 4, 0, 2, 6, 22, 48, 90, 149, 211, 324, 377, 461, 583, 666, 681, 571, 443, 413, 101]", - "total_badness": 7797.9450152 + "ne2d": 1684, + "ne3d": 5231, + "quality_histogram": "[0, 2, 2, 2, 8, 24, 37, 50, 114, 203, 267, 363, 472, 583, 649, 706, 623, 527, 462, 137]", + "total_badness": 7683.599832 }, { "ne1d": 390, - "ne2d": 518, + "ne2d": 522, "ne3d": 1353, - "quality_histogram": "[0, 0, 4, 13, 32, 32, 71, 125, 125, 144, 170, 148, 134, 115, 95, 68, 33, 21, 22, 1]", - "total_badness": 2785.2527917 + "quality_histogram": "[0, 0, 3, 17, 15, 42, 75, 123, 130, 146, 161, 124, 147, 105, 84, 88, 47, 33, 11, 2]", + "total_badness": 2768.022266 }, { "ne1d": 512, - "ne2d": 858, - "ne3d": 2354, - "quality_histogram": "[0, 0, 1, 2, 11, 27, 57, 67, 161, 182, 217, 250, 264, 284, 290, 258, 140, 47, 59, 37]", - "total_badness": 4028.6466008 + "ne2d": 874, + "ne3d": 2397, + "quality_histogram": "[0, 0, 1, 3, 9, 23, 41, 72, 132, 142, 188, 204, 304, 389, 343, 237, 138, 97, 48, 26]", + "total_badness": 3983.5650135 }, { "ne1d": 690, - "ne2d": 1650, - "ne3d": 5071, - "quality_histogram": "[0, 0, 0, 1, 3, 16, 36, 81, 130, 210, 298, 368, 444, 592, 658, 654, 583, 456, 437, 104]", - "total_badness": 7501.8324545 + "ne2d": 1684, + "ne3d": 5147, + "quality_histogram": "[0, 0, 0, 1, 3, 12, 26, 40, 106, 188, 272, 357, 422, 561, 671, 714, 608, 558, 474, 134]", + "total_badness": 7408.6135626 }, { "ne1d": 1050, - "ne2d": 3712, - "ne3d": 17430, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 7, 31, 58, 112, 236, 621, 1624, 2131, 2389, 2547, 2560, 2483, 2004, 627]", - "total_badness": 23088.888517 + "ne2d": 3812, + "ne3d": 18010, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 29, 42, 57, 198, 540, 1405, 2251, 2392, 2790, 2784, 2612, 2242, 664]", + "total_badness": 23560.24016 }, { "ne1d": 1722, - "ne2d": 9888, - "ne3d": 83916, - "quality_histogram": "[0, 0, 0, 2, 3, 9, 103, 1417, 624, 529, 1028, 1656, 3206, 6128, 9176, 13176, 15913, 15495, 11729, 3722]", - "total_badness": 108897.74798 + "ne2d": 10042, + "ne3d": 84690, + "quality_histogram": "[0, 0, 0, 0, 2, 3, 54, 1424, 754, 408, 795, 1316, 2637, 5766, 9155, 13453, 16224, 16583, 12169, 3947]", + "total_badness": 108937.41902 } ], "twobricks.geo": [ @@ -1370,17 +1546,17 @@ }, { "ne1d": 116, - "ne2d": 122, - "ne3d": 149, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 10, 25, 25, 30, 19, 17, 7, 7, 4]", - "total_badness": 210.92258874 + "ne2d": 134, + "ne3d": 177, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 12, 10, 18, 38, 22, 27, 22, 18, 7]", + "total_badness": 234.47359 }, { "ne1d": 186, - "ne2d": 308, - "ne3d": 535, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 9, 18, 51, 66, 92, 87, 77, 61, 61, 10]", - "total_badness": 711.81286081 + "ne2d": 346, + "ne3d": 603, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 10, 25, 42, 66, 89, 101, 110, 93, 56, 10]", + "total_badness": 792.88605666 } ], "twocubes.geo": [ @@ -1414,61 +1590,61 @@ }, { "ne1d": 116, - "ne2d": 122, - "ne3d": 149, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 10, 25, 25, 30, 19, 17, 7, 7, 4]", - "total_badness": 210.92258874 + "ne2d": 134, + "ne3d": 177, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 12, 10, 18, 38, 22, 27, 22, 18, 7]", + "total_badness": 234.47359 }, { "ne1d": 186, - "ne2d": 308, - "ne3d": 535, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 9, 18, 51, 66, 92, 87, 77, 61, 61, 10]", - "total_badness": 711.81286081 + "ne2d": 346, + "ne3d": 603, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 10, 25, 42, 66, 89, 101, 110, 93, 56, 10]", + "total_badness": 792.88605666 } ], "twocyl.geo": [ { "ne1d": 144, - "ne2d": 406, - "ne3d": 539, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 5, 12, 24, 30, 56, 49, 74, 67, 67, 60, 43, 38, 12, 1]", - "total_badness": 858.68248624 + "ne2d": 408, + "ne3d": 576, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 12, 19, 19, 17, 36, 50, 59, 82, 90, 73, 69, 34, 13, 1]", + "total_badness": 901.75131743 }, { "ne1d": 68, "ne2d": 100, - "ne3d": 188, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 6, 14, 23, 27, 28, 25, 22, 28, 8, 0]", - "total_badness": 267.41201716 + "ne3d": 209, + "quality_histogram": "[0, 0, 0, 1, 3, 6, 11, 2, 8, 5, 15, 18, 12, 28, 28, 27, 24, 17, 3, 1]", + "total_badness": 357.15447323 }, { "ne1d": 102, - "ne2d": 236, - "ne3d": 561, - "quality_histogram": "[1, 8, 41, 60, 42, 46, 41, 50, 53, 36, 27, 27, 22, 15, 18, 17, 38, 5, 11, 3]", - "total_badness": 1876.9984411 + "ne2d": 238, + "ne3d": 548, + "quality_histogram": "[5, 24, 23, 35, 33, 46, 49, 52, 63, 39, 19, 20, 19, 22, 19, 24, 40, 14, 2, 0]", + "total_badness": 1932.6124156 }, { "ne1d": 144, - "ne2d": 406, - "ne3d": 538, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 3, 12, 20, 25, 50, 52, 82, 65, 67, 64, 41, 39, 14, 2]", - "total_badness": 848.06909289 + "ne2d": 408, + "ne3d": 576, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 12, 10, 12, 24, 41, 69, 88, 108, 88, 65, 40, 13, 2]", + "total_badness": 853.37034747 }, { "ne1d": 214, - "ne2d": 900, - "ne3d": 1820, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 15, 43, 103, 172, 235, 307, 303, 304, 187, 120, 28]", - "total_badness": 2474.9963091 + "ne2d": 910, + "ne3d": 1921, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 33, 75, 117, 230, 320, 358, 348, 243, 159, 28]", + "total_badness": 2544.8927759 }, { "ne1d": 350, - "ne2d": 2350, - "ne3d": 13336, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 12, 34, 122, 330, 749, 1426, 2105, 2852, 2877, 2178, 649]", - "total_badness": 16385.529152 + "ne2d": 2374, + "ne3d": 13509, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 11, 29, 98, 286, 655, 1353, 2161, 2913, 3068, 2220, 713]", + "total_badness": 16499.785789 } ] } \ No newline at end of file diff --git a/tests/pytest/test_tutorials.py b/tests/pytest/test_tutorials.py index 169a8856..1dca6cd0 100644 --- a/tests/pytest/test_tutorials.py +++ b/tests/pytest/test_tutorials.py @@ -3,6 +3,7 @@ import os, pytest from netgen.meshing import meshsize, MeshingParameters, SetMessageImportance import netgen.csg as csg import netgen.stl as stl +import netgen.geom2d as geom2d from pyngcore import TaskManager import json try: @@ -34,12 +35,12 @@ def checkData(mesh, mp, ref): # get tutorials def getFiles(fileEnding): r, d, files = next(os.walk(os.path.join("..","..","tutorials"))) - return (f for f in files if f.endswith(fileEnding)) + return [f for f in files if f.endswith(fileEnding)] # get additional tests def getAdditionalFiles(fileEnding): r, d, files = next(os.walk("geofiles")) - return (f for f in files if f.endswith(fileEnding)) + return [f for f in files if f.endswith(fileEnding)] @pytest.fixture def refdata(): @@ -64,13 +65,13 @@ def getMeshingparameters(filename): return standard[0:1] + standard[2:] # very coarse does not work return standard -_geofiles = [f for f in getFiles(".geo")] + [f for f in getFiles(".stl")] +_geofiles = getFiles(".in2d") + getFiles(".geo") + getFiles(".stl") if has_occ: - _geofiles += [f for f in getFiles(".step")] + _geofiles += getFiles(".step") _geofiles.sort() -_additional_testfiles = [f for f in getAdditionalFiles(".stl")] +_additional_testfiles = getAdditionalFiles(".stl") if has_occ: - _additional_testfiles += [f for f in getAdditionalFiles(".step")] + _additional_testfiles += getAdditionalFiles(".step") _additional_testfiles.sort() def generateMesh(filename, mp): @@ -81,6 +82,8 @@ def generateMesh(filename, mp): geo = stl.STLGeometry(os.path.join(folder, filename)) elif filename.endswith(".step"): geo = occ.OCCGeometry(os.path.join(folder, filename)) + elif filename.endswith(".in2d"): + geo = geom2d.SplineGeometry(os.path.join(folder, filename)) return geo.GenerateMesh(mp) def isSlowTest(filename): From c361d1712d954d751da63f44c4f1e27c77f8430a Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Wed, 23 Oct 2019 14:44:07 +0200 Subject: [PATCH 082/120] little cleanup in adfront2 --- libsrc/gprim/adtree.hpp | 8 ++++++++ libsrc/meshing/adfront2.cpp | 39 ++++++++++++++++++------------------- libsrc/meshing/meshing2.cpp | 8 ++++++++ 3 files changed, 35 insertions(+), 20 deletions(-) diff --git a/libsrc/gprim/adtree.hpp b/libsrc/gprim/adtree.hpp index 11db1d78..bff29157 100644 --- a/libsrc/gprim/adtree.hpp +++ b/libsrc/gprim/adtree.hpp @@ -904,6 +904,14 @@ public: GetFirstIntersecting(pmin, pmax, [&pis](auto pi) { pis.Append(pi); return false;}); } + void GetIntersecting(const Point & pmin, + const Point & pmax, + Array & pis) const + { + pis.SetSize0(); + GetFirstIntersecting(pmin, pmax, [&pis](auto pi) { pis.Append(pi); return false;}); + } + void Insert (const Box & box, T pi) { Insert (box.PMin(), box.PMax(), pi); diff --git a/libsrc/meshing/adfront2.cpp b/libsrc/meshing/adfront2.cpp index 62cd1580..fc858ca4 100644 --- a/libsrc/meshing/adfront2.cpp +++ b/libsrc/meshing/adfront2.cpp @@ -292,7 +292,7 @@ namespace netgen loclines.Append(lines[baselineindex].L()); lindex.Append(baselineindex); - NgArrayMem nearlines(0); + ArrayMem nearlines(0); NgArrayMem nearpoints(0); // dominating costs !! @@ -300,14 +300,14 @@ namespace netgen p0 + Vec3d(xh, xh, xh), nearlines); - // only cone points, other points are from linesearchtree - cpointsearchtree.GetIntersecting (p0 - Vec3d(xh, xh, xh), - p0 + Vec3d(xh, xh, xh), - nearpoints); + // only special points that are not in adfront, + // other points are from linesearchtree + cpointsearchtree.GetIntersecting(p0 - Vec3d(xh, xh, xh), + p0 + Vec3d(xh, xh, xh), + nearpoints); - for (int ii = 0; ii < nearlines.Size(); ii++) + for(auto i : nearlines) { - int i = nearlines[ii]; if (lines[i].Valid() && i != baselineindex) { loclines.Append(lines[i].L()); @@ -318,38 +318,37 @@ namespace netgen // static NgArray invpindex; invpindex.SetSize (points.Size()); // invpindex = -1; - for (int i = 0; i < nearpoints.Size(); i++) - invpindex[nearpoints[i]] = -1; + for(auto pi : nearpoints) + invpindex[pi] = -1; - for (int i = 0; i < loclines.Size(); i++) + for(const auto& li : loclines) { - invpindex[loclines[i].I1()] = 0; - invpindex[loclines[i].I2()] = 0; + invpindex[li.I1()] = 0; + invpindex[li.I2()] = 0; } - for (int i = 0; i < loclines.Size(); i++) + for(auto& line : loclines) { - for (int j = 0; j < 2; j++) - { - int pi = loclines[i][j]; + for(auto i : Range(2)) + { + auto& pi = line[i]; if (invpindex[pi] == 0) { pindex.Append (pi); invpindex[pi] = pindex.Size(); locpoints.Append (points[pi].P()); - loclines[i][j] = locpoints.Size(); + pi = locpoints.Size(); } else - loclines[i][j] = invpindex[pi]; + pi = invpindex[pi]; } } // double xh2 = xh*xh; - for (int ii = 0; ii < nearpoints.Size(); ii++) + for(auto i : nearpoints) { - int i = nearpoints[ii]; if (points[i].Valid() && points[i].OnSurface() && // Dist2 (points.Get(i).P(), p0) <= xh2 && diff --git a/libsrc/meshing/meshing2.cpp b/libsrc/meshing/meshing2.cpp index f407e995..e4cabded 100644 --- a/libsrc/meshing/meshing2.cpp +++ b/libsrc/meshing/meshing2.cpp @@ -6,6 +6,14 @@ namespace netgen { + ostream& operator << (ostream& ost, const MultiPointGeomInfo& mpgi) + { + for(auto i : Range(mpgi.GetNPGI())) + { + ost << "gi[" << i << "] = " << mpgi.GetPGI(i+1) << endl; + } + return ost; + } static void glrender (int wait); #ifdef OPENGL extern DLL_HEADER void Render(bool blocking = false); From c127711d4de382025df66aafffff82d2618b8b6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joachim=20Sch=C3=B6berl?= Date: Wed, 23 Oct 2019 18:47:31 +0200 Subject: [PATCH 083/120] reduce refresh rate to 25 times persecond --- ng/menustat.tcl | 2 +- ng/onetcl.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ng/menustat.tcl b/ng/menustat.tcl index 48ce38e5..6f870a81 100644 --- a/ng/menustat.tcl +++ b/ng/menustat.tcl @@ -1131,7 +1131,7 @@ proc timer2 { } { } } - after 10 { timer2 } + after 40 { timer2 } } # after 1000 { timer2 } timer2 diff --git a/ng/onetcl.cpp b/ng/onetcl.cpp index a2cfe027..8e3513c5 100644 --- a/ng/onetcl.cpp +++ b/ng/onetcl.cpp @@ -73,8 +73,6 @@ const char * ngscript[] = {"" ,"set options.inverttets 0\n" ,"set options.inverttrigs 0\n" ,"set options.autozrefine 0\n" -,"set options.parallel_meshing 1\n" -,"set options.nthreads 4\n" ,"set options.meshsize 1000\n" ,"set options.minmeshsize 0\n" ,"set options.curvaturesafety 2\n" @@ -86,6 +84,8 @@ const char * ngscript[] = {"" ,"set options.opterrpow 2\n" ,"set options.grading 0.5\n" ,"set options.printmsg 2\n" +,"set options.parallel_meshing 1\n" +,"set options.nthreads 4\n" ,"set debug.slowchecks 0\n" ,"set debug.debugoutput 0\n" ,"set debug.haltexistingline 0\n" @@ -1423,7 +1423,7 @@ const char * ngscript[] = {"" ,"}\n" ,"}\n" ,"}\n" -,"after 10 { timer2 }\n" +,"after 40 { timer2 }\n" ,"}\n" ,"timer2\n" ,"proc bgerror { error } {\n" From ffcf2c7373db2a6ff05fcd0b8e6b0eaf68df61a9 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Wed, 23 Oct 2019 19:05:51 +0200 Subject: [PATCH 084/120] [testing] Check for min/max trig/tet angles --- tests/pytest/results.json | 1792 ++++++++++++++++++++++++++++++++ tests/pytest/test_tutorials.py | 14 +- 2 files changed, 1805 insertions(+), 1 deletion(-) diff --git a/tests/pytest/results.json b/tests/pytest/results.json index 4e8fb437..7699ce00 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -1,6 +1,14 @@ { "boundarycondition.geo": [ { + "angles_tet": [ + 30.666, + 127.89 + ], + "angles_trig": [ + 26.565, + 91.094 + ], "ne1d": 74, "ne2d": 54, "ne3d": 40, @@ -8,6 +16,14 @@ "total_badness": 61.085020204 }, { + "angles_tet": [ + 31.383, + 127.91 + ], + "angles_trig": [ + 28.041, + 119.87 + ], "ne1d": 59, "ne2d": 37, "ne3d": 22, @@ -15,6 +31,14 @@ "total_badness": 35.161528768 }, { + "angles_tet": [ + 32.461, + 127.16 + ], + "angles_trig": [ + 28.547, + 120.05 + ], "ne1d": 59, "ne2d": 37, "ne3d": 22, @@ -22,6 +46,14 @@ "total_badness": 35.098288788 }, { + "angles_tet": [ + 30.666, + 127.89 + ], + "angles_trig": [ + 26.565, + 91.094 + ], "ne1d": 74, "ne2d": 54, "ne3d": 40, @@ -29,6 +61,14 @@ "total_badness": 61.085020204 }, { + "angles_tet": [ + 22.611, + 132.85 + ], + "angles_trig": [ + 23.939, + 104.77 + ], "ne1d": 118, "ne2d": 140, "ne3d": 165, @@ -36,6 +76,14 @@ "total_badness": 233.73328932 }, { + "angles_tet": [ + 24.774, + 131.74 + ], + "angles_trig": [ + 24.858, + 107.08 + ], "ne1d": 181, "ne2d": 325, "ne3d": 528, @@ -45,6 +93,14 @@ ], "boxcyl.geo": [ { + "angles_tet": [ + 22.371, + 139.91 + ], + "angles_trig": [ + 22.551, + 121.98 + ], "ne1d": 190, "ne2d": 468, "ne3d": 846, @@ -52,6 +108,14 @@ "total_badness": 1229.0231928 }, { + "angles_tet": [ + 19.341, + 141.96 + ], + "angles_trig": [ + 16.491, + 127.01 + ], "ne1d": 94, "ne2d": 114, "ne3d": 157, @@ -59,6 +123,14 @@ "total_badness": 260.17372209 }, { + "angles_tet": [ + 15.799, + 159.93 + ], + "angles_trig": [ + 16.585, + 144.56 + ], "ne1d": 136, "ne2d": 222, "ne3d": 386, @@ -66,6 +138,14 @@ "total_badness": 590.51625062 }, { + "angles_tet": [ + 22.38, + 139.62 + ], + "angles_trig": [ + 22.552, + 121.98 + ], "ne1d": 190, "ne2d": 468, "ne3d": 833, @@ -73,6 +153,14 @@ "total_badness": 1200.9010008 }, { + "angles_tet": [ + 25.378, + 140.35 + ], + "angles_trig": [ + 26.299, + 121.05 + ], "ne1d": 284, "ne2d": 938, "ne3d": 3742, @@ -80,6 +168,14 @@ "total_badness": 4685.7832014 }, { + "angles_tet": [ + 25.096, + 141.93 + ], + "angles_trig": [ + 27.282, + 118.08 + ], "ne1d": 456, "ne2d": 2496, "ne3d": 18713, @@ -89,6 +185,14 @@ ], "circle_on_cube.geo": [ { + "angles_tet": [ + 19.311, + 150.68 + ], + "angles_trig": [ + 23.838, + 115.5 + ], "ne1d": 94, "ne2d": 170, "ne3d": 637, @@ -96,6 +200,14 @@ "total_badness": 863.74076861 }, { + "angles_tet": [ + 17.203, + 146.18 + ], + "angles_trig": [ + 16.937, + 127.21 + ], "ne1d": 40, "ne2d": 38, "ne3d": 46, @@ -103,6 +215,14 @@ "total_badness": 97.323158335 }, { + "angles_tet": [ + 24.281, + 134.61 + ], + "angles_trig": [ + 23.344, + 115.83 + ], "ne1d": 62, "ne2d": 96, "ne3d": 196, @@ -110,6 +230,14 @@ "total_badness": 282.75693303 }, { + "angles_tet": [ + 25.358, + 135.05 + ], + "angles_trig": [ + 23.767, + 114.14 + ], "ne1d": 94, "ne2d": 170, "ne3d": 622, @@ -117,6 +245,14 @@ "total_badness": 821.68699443 }, { + "angles_tet": [ + 24.582, + 136.66 + ], + "angles_trig": [ + 27.209, + 113.64 + ], "ne1d": 138, "ne2d": 384, "ne3d": 2028, @@ -124,6 +260,14 @@ "total_badness": 2540.7133216 }, { + "angles_tet": [ + 22.092, + 143.64 + ], + "angles_trig": [ + 24.9, + 120.59 + ], "ne1d": 224, "ne2d": 944, "ne3d": 11860, @@ -133,6 +277,14 @@ ], "cone.geo": [ { + "angles_tet": [ + 13.924, + 150.81 + ], + "angles_trig": [ + 15.502, + 125.18 + ], "ne1d": 64, "ne2d": 722, "ne3d": 1263, @@ -140,6 +292,14 @@ "total_badness": 1927.4650748 }, { + "angles_tet": [ + 7.1839, + 166.08 + ], + "angles_trig": [ + 7.6255, + 154.84 + ], "ne1d": 32, "ne2d": 220, "ne3d": 700, @@ -147,6 +307,14 @@ "total_badness": 1807.5903418 }, { + "angles_tet": [ + 1.7643, + 174.36 + ], + "angles_trig": [ + 6.9619, + 160.4 + ], "ne1d": 48, "ne2d": 428, "ne3d": 930, @@ -154,6 +322,14 @@ "total_badness": 3263.5820874 }, { + "angles_tet": [ + 14.168, + 149.33 + ], + "angles_trig": [ + 18.275, + 123.81 + ], "ne1d": 64, "ne2d": 722, "ne3d": 1244, @@ -161,6 +337,14 @@ "total_badness": 1843.7405821 }, { + "angles_tet": [ + 19.863, + 144.26 + ], + "angles_trig": [ + 22.797, + 126.63 + ], "ne1d": 96, "ne2d": 1660, "ne3d": 4395, @@ -168,6 +352,14 @@ "total_badness": 5745.9242938 }, { + "angles_tet": [ + 23.928, + 143.79 + ], + "angles_trig": [ + 23.981, + 123.07 + ], "ne1d": 160, "ne2d": 4748, "ne3d": 27365, @@ -177,6 +369,14 @@ ], "cube.geo": [ { + "angles_tet": [ + 35.264, + 125.26 + ], + "angles_trig": [ + 35.264, + 90.0 + ], "ne1d": 24, "ne2d": 12, "ne3d": 6, @@ -184,6 +384,14 @@ "total_badness": 9.1401272869 }, { + "angles_tet": [ + 35.264, + 125.26 + ], + "angles_trig": [ + 35.264, + 90.0 + ], "ne1d": 24, "ne2d": 12, "ne3d": 6, @@ -191,6 +399,14 @@ "total_badness": 9.1401272869 }, { + "angles_tet": [ + 35.264, + 125.26 + ], + "angles_trig": [ + 35.264, + 90.0 + ], "ne1d": 24, "ne2d": 12, "ne3d": 6, @@ -198,6 +414,14 @@ "total_badness": 9.1401272869 }, { + "angles_tet": [ + 35.264, + 125.26 + ], + "angles_trig": [ + 35.264, + 90.0 + ], "ne1d": 24, "ne2d": 12, "ne3d": 6, @@ -205,6 +429,14 @@ "total_badness": 9.1401272869 }, { + "angles_tet": [ + 28.058, + 136.51 + ], + "angles_trig": [ + 23.62, + 124.99 + ], "ne1d": 48, "ne2d": 36, "ne3d": 57, @@ -212,6 +444,14 @@ "total_badness": 84.416883473 }, { + "angles_tet": [ + 21.865, + 138.69 + ], + "angles_trig": [ + 22.37, + 121.17 + ], "ne1d": 72, "ne2d": 116, "ne3d": 167, @@ -221,6 +461,14 @@ ], "cubeandring.geo": [ { + "angles_tet": [ + 2.8878, + 174.5 + ], + "angles_trig": [ + 10.113, + 150.46 + ], "ne1d": 262, "ne2d": 726, "ne3d": 2225, @@ -228,6 +476,14 @@ "total_badness": 4466.5881396 }, { + "angles_tet": [ + 15.685, + 157.54 + ], + "angles_trig": [ + 19.264, + 124.57 + ], "ne1d": 134, "ne2d": 164, "ne3d": 250, @@ -235,6 +491,14 @@ "total_badness": 372.39445714 }, { + "angles_tet": [ + 11.693, + 163.42 + ], + "angles_trig": [ + 21.077, + 131.52 + ], "ne1d": 190, "ne2d": 300, "ne3d": 646, @@ -242,6 +506,14 @@ "total_badness": 978.54289744 }, { + "angles_tet": [ + 5.4096, + 166.24 + ], + "angles_trig": [ + 10.783, + 156.33 + ], "ne1d": 262, "ne2d": 726, "ne3d": 2087, @@ -249,6 +521,14 @@ "total_badness": 3774.9667473 }, { + "angles_tet": [ + 18.754, + 147.58 + ], + "angles_trig": [ + 17.855, + 114.9 + ], "ne1d": 378, "ne2d": 1412, "ne3d": 7741, @@ -256,6 +536,14 @@ "total_badness": 9711.521562 }, { + "angles_tet": [ + 21.111, + 146.93 + ], + "angles_trig": [ + 22.35, + 120.66 + ], "ne1d": 624, "ne2d": 3944, "ne3d": 38347, @@ -265,6 +553,14 @@ ], "cubeandspheres.geo": [ { + "angles_tet": [ + 23.615, + 137.71 + ], + "angles_trig": [ + 28.816, + 110.5 + ], "ne1d": 144, "ne2d": 148, "ne3d": 98, @@ -272,6 +568,14 @@ "total_badness": 145.83375079 }, { + "angles_tet": [ + 24.423, + 137.5 + ], + "angles_trig": [ + 28.935, + 109.27 + ], "ne1d": 144, "ne2d": 150, "ne3d": 100, @@ -279,6 +583,14 @@ "total_badness": 146.6468601 }, { + "angles_tet": [ + 23.888, + 137.32 + ], + "angles_trig": [ + 29.702, + 106.44 + ], "ne1d": 144, "ne2d": 148, "ne3d": 98, @@ -286,6 +598,14 @@ "total_badness": 145.14580879 }, { + "angles_tet": [ + 23.615, + 137.71 + ], + "angles_trig": [ + 28.816, + 110.5 + ], "ne1d": 144, "ne2d": 148, "ne3d": 98, @@ -293,6 +613,14 @@ "total_badness": 145.83375079 }, { + "angles_tet": [ + 17.481, + 142.47 + ], + "angles_trig": [ + 23.755, + 116.95 + ], "ne1d": 264, "ne2d": 390, "ne3d": 369, @@ -300,6 +628,14 @@ "total_badness": 554.2809713 }, { + "angles_tet": [ + 13.221, + 154.37 + ], + "angles_trig": [ + 18.947, + 128.1 + ], "ne1d": 428, "ne2d": 926, "ne3d": 1074, @@ -309,6 +645,14 @@ ], "cubemcyl.geo": [ { + "angles_tet": [ + 15.965, + 154.0 + ], + "angles_trig": [ + 19.053, + 133.76 + ], "ne1d": 142, "ne2d": 2488, "ne3d": 20783, @@ -316,6 +660,14 @@ "total_badness": 28813.276387 }, { + "angles_tet": [ + 20.47, + 145.86 + ], + "angles_trig": [ + 19.065, + 136.17 + ], "ne1d": 64, "ne2d": 642, "ne3d": 3214, @@ -323,6 +675,14 @@ "total_badness": 4592.7629352 }, { + "angles_tet": [ + 18.957, + 152.21 + ], + "angles_trig": [ + 15.347, + 130.4 + ], "ne1d": 102, "ne2d": 1402, "ne3d": 8234, @@ -330,6 +690,14 @@ "total_badness": 11552.618825 }, { + "angles_tet": [ + 19.96, + 148.01 + ], + "angles_trig": [ + 21.126, + 127.16 + ], "ne1d": 142, "ne2d": 2488, "ne3d": 19499, @@ -337,6 +705,14 @@ "total_badness": 25390.546576 }, { + "angles_tet": [ + 20.31, + 146.81 + ], + "angles_trig": [ + 22.349, + 123.87 + ], "ne1d": 210, "ne2d": 5508, "ne3d": 88767, @@ -344,6 +720,14 @@ "total_badness": 109764.47526 }, { + "angles_tet": [ + 19.195, + 152.34 + ], + "angles_trig": [ + 23.93, + 127.18 + ], "ne1d": 362, "ne2d": 15122, "ne3d": 524413, @@ -353,6 +737,14 @@ ], "cubemsphere.geo": [ { + "angles_tet": [ + 16.908, + 150.99 + ], + "angles_trig": [ + 19.951, + 128.55 + ], "ne1d": 90, "ne2d": 702, "ne3d": 4867, @@ -360,6 +752,14 @@ "total_badness": 6717.4363413 }, { + "angles_tet": [ + 15.907, + 149.0 + ], + "angles_trig": [ + 12.785, + 137.16 + ], "ne1d": 44, "ne2d": 274, "ne3d": 768, @@ -367,6 +767,14 @@ "total_badness": 1237.8358347 }, { + "angles_tet": [ + 20.765, + 150.5 + ], + "angles_trig": [ + 22.025, + 122.56 + ], "ne1d": 68, "ne2d": 402, "ne3d": 1600, @@ -374,6 +782,14 @@ "total_badness": 2248.6479915 }, { + "angles_tet": [ + 20.874, + 146.16 + ], + "angles_trig": [ + 20.643, + 124.01 + ], "ne1d": 90, "ne2d": 702, "ne3d": 4618, @@ -381,6 +797,14 @@ "total_badness": 6022.3952178 }, { + "angles_tet": [ + 20.202, + 147.7 + ], + "angles_trig": [ + 23.911, + 127.56 + ], "ne1d": 146, "ne2d": 1492, "ne3d": 17800, @@ -388,6 +812,14 @@ "total_badness": 22074.204803 }, { + "angles_tet": [ + 16.707, + 151.25 + ], + "angles_trig": [ + 22.482, + 126.62 + ], "ne1d": 248, "ne2d": 4354, "ne3d": 113716, @@ -397,6 +829,14 @@ ], "cylinder.geo": [ { + "angles_tet": [ + 20.283, + 142.15 + ], + "angles_trig": [ + 22.846, + 116.55 + ], "ne1d": 52, "ne2d": 288, "ne3d": 410, @@ -404,6 +844,14 @@ "total_badness": 577.74781759 }, { + "angles_tet": [ + 32.792, + 125.93 + ], + "angles_trig": [ + 30.35, + 116.69 + ], "ne1d": 24, "ne2d": 66, "ne3d": 124, @@ -411,6 +859,14 @@ "total_badness": 153.9684245 }, { + "angles_tet": [ + 9.0715, + 166.36 + ], + "angles_trig": [ + 12.882, + 145.84 + ], "ne1d": 36, "ne2d": 152, "ne3d": 376, @@ -418,6 +874,14 @@ "total_badness": 793.09247202 }, { + "angles_tet": [ + 20.083, + 141.64 + ], + "angles_trig": [ + 22.107, + 118.69 + ], "ne1d": 52, "ne2d": 288, "ne3d": 404, @@ -425,6 +889,14 @@ "total_badness": 562.71987918 }, { + "angles_tet": [ + 21.957, + 139.74 + ], + "angles_trig": [ + 25.008, + 119.81 + ], "ne1d": 76, "ne2d": 636, "ne3d": 1146, @@ -432,6 +904,14 @@ "total_badness": 1547.7672308 }, { + "angles_tet": [ + 26.272, + 139.98 + ], + "angles_trig": [ + 27.921, + 120.23 + ], "ne1d": 124, "ne2d": 1672, "ne3d": 8039, @@ -441,6 +921,14 @@ ], "cylsphere.geo": [ { + "angles_tet": [ + 17.345, + 141.22 + ], + "angles_trig": [ + 17.322, + 121.83 + ], "ne1d": 104, "ne2d": 496, "ne3d": 711, @@ -448,6 +936,14 @@ "total_badness": 1105.8880942 }, { + "angles_tet": [ + 11.989, + 163.66 + ], + "angles_trig": [ + 12.383, + 154.84 + ], "ne1d": 48, "ne2d": 142, "ne3d": 242, @@ -455,6 +951,14 @@ "total_badness": 604.89450225 }, { + "angles_tet": [ + 17.13, + 139.15 + ], + "angles_trig": [ + 17.276, + 122.05 + ], "ne1d": 104, "ne2d": 496, "ne3d": 709, @@ -462,6 +966,14 @@ "total_badness": 1092.3394563 }, { + "angles_tet": [ + 23.36, + 138.86 + ], + "angles_trig": [ + 20.916, + 121.19 + ], "ne1d": 152, "ne2d": 1084, "ne3d": 2798, @@ -469,6 +981,14 @@ "total_badness": 3620.8176099 }, { + "angles_tet": [ + 18.426, + 141.96 + ], + "angles_trig": [ + 25.597, + 124.07 + ], "ne1d": 248, "ne2d": 2820, "ne3d": 17745, @@ -478,6 +998,14 @@ ], "ellipsoid.geo": [ { + "angles_tet": [ + 15.608, + 152.11 + ], + "angles_trig": [ + 18.3, + 125.11 + ], "ne1d": 0, "ne2d": 704, "ne3d": 1297, @@ -485,6 +1013,14 @@ "total_badness": 2009.8527353 }, { + "angles_tet": [ + 1.9897, + 175.64 + ], + "angles_trig": [ + 4.4046, + 166.23 + ], "ne1d": 0, "ne2d": 192, "ne3d": 915, @@ -492,6 +1028,14 @@ "total_badness": 5760.7267346 }, { + "angles_tet": [ + 18.187, + 147.6 + ], + "angles_trig": [ + 19.806, + 116.38 + ], "ne1d": 0, "ne2d": 394, "ne3d": 592, @@ -499,6 +1043,14 @@ "total_badness": 893.18441542 }, { + "angles_tet": [ + 18.725, + 144.28 + ], + "angles_trig": [ + 18.226, + 122.74 + ], "ne1d": 0, "ne2d": 704, "ne3d": 1282, @@ -506,6 +1058,14 @@ "total_badness": 1929.3894181 }, { + "angles_tet": [ + 20.843, + 143.48 + ], + "angles_trig": [ + 23.059, + 122.67 + ], "ne1d": 0, "ne2d": 1618, "ne3d": 5569, @@ -513,6 +1073,14 @@ "total_badness": 7142.2540344 }, { + "angles_tet": [ + 23.185, + 142.25 + ], + "angles_trig": [ + 26.409, + 123.29 + ], "ne1d": 0, "ne2d": 4236, "ne3d": 37387, @@ -522,6 +1090,14 @@ ], "ellipticcone.geo": [ { + "angles_tet": [ + 18.933, + 144.15 + ], + "angles_trig": [ + 20.648, + 123.53 + ], "ne1d": 174, "ne2d": 1562, "ne3d": 5180, @@ -529,6 +1105,14 @@ "total_badness": 6920.4601657 }, { + "angles_tet": [ + 16.487, + 156.55 + ], + "angles_trig": [ + 20.632, + 127.9 + ], "ne1d": 86, "ne2d": 380, "ne3d": 585, @@ -536,6 +1120,14 @@ "total_badness": 860.61770269 }, { + "angles_tet": [ + 16.099, + 152.06 + ], + "angles_trig": [ + 17.036, + 136.53 + ], "ne1d": 130, "ne2d": 864, "ne3d": 1734, @@ -543,6 +1135,14 @@ "total_badness": 2535.8367438 }, { + "angles_tet": [ + 19.919, + 143.23 + ], + "angles_trig": [ + 19.838, + 122.76 + ], "ne1d": 174, "ne2d": 1562, "ne3d": 4943, @@ -550,6 +1150,14 @@ "total_badness": 6347.4280983 }, { + "angles_tet": [ + 21.992, + 147.97 + ], + "angles_trig": [ + 20.703, + 123.53 + ], "ne1d": 258, "ne2d": 3468, "ne3d": 13314, @@ -557,6 +1165,14 @@ "total_badness": 17113.967555 }, { + "angles_tet": [ + 18.422, + 146.5 + ], + "angles_trig": [ + 21.186, + 126.64 + ], "ne1d": 432, "ne2d": 9544, "ne3d": 69891, @@ -566,6 +1182,14 @@ ], "ellipticcyl.geo": [ { + "angles_tet": [ + 19.118, + 146.33 + ], + "angles_trig": [ + 22.174, + 124.24 + ], "ne1d": 156, "ne2d": 996, "ne3d": 2299, @@ -573,6 +1197,14 @@ "total_badness": 3202.1380209 }, { + "angles_tet": [ + 22.599, + 136.88 + ], + "angles_trig": [ + 23.125, + 107.81 + ], "ne1d": 76, "ne2d": 238, "ne3d": 325, @@ -580,6 +1212,14 @@ "total_badness": 459.61476239 }, { + "angles_tet": [ + 19.987, + 148.46 + ], + "angles_trig": [ + 22.258, + 115.22 + ], "ne1d": 116, "ne2d": 596, "ne3d": 1129, @@ -587,6 +1227,14 @@ "total_badness": 1500.1384781 }, { + "angles_tet": [ + 17.153, + 144.96 + ], + "angles_trig": [ + 22.173, + 123.09 + ], "ne1d": 156, "ne2d": 996, "ne3d": 2214, @@ -594,6 +1242,14 @@ "total_badness": 2974.3073079 }, { + "angles_tet": [ + 20.357, + 141.36 + ], + "angles_trig": [ + 23.621, + 122.53 + ], "ne1d": 232, "ne2d": 2212, "ne3d": 8313, @@ -601,6 +1257,14 @@ "total_badness": 10392.004794 }, { + "angles_tet": [ + 21.254, + 146.12 + ], + "angles_trig": [ + 22.961, + 120.91 + ], "ne1d": 388, "ne2d": 6142, "ne3d": 54975, @@ -610,6 +1274,14 @@ ], "fichera.geo": [ { + "angles_tet": [ + 24.34, + 140.85 + ], + "angles_trig": [ + 35.264, + 96.517 + ], "ne1d": 50, "ne2d": 38, "ne3d": 40, @@ -617,6 +1289,14 @@ "total_badness": 62.361996939 }, { + "angles_tet": [ + 35.264, + 125.26 + ], + "angles_trig": [ + 35.264, + 109.47 + ], "ne1d": 42, "ne2d": 24, "ne3d": 18, @@ -624,6 +1304,14 @@ "total_badness": 26.546480075 }, { + "angles_tet": [ + 35.264, + 125.26 + ], + "angles_trig": [ + 35.264, + 109.47 + ], "ne1d": 42, "ne2d": 24, "ne3d": 18, @@ -631,6 +1319,14 @@ "total_badness": 26.546480075 }, { + "angles_tet": [ + 24.34, + 140.85 + ], + "angles_trig": [ + 35.264, + 96.517 + ], "ne1d": 50, "ne2d": 38, "ne3d": 40, @@ -638,6 +1334,14 @@ "total_badness": 62.361996939 }, { + "angles_tet": [ + 25.229, + 133.14 + ], + "angles_trig": [ + 29.251, + 111.18 + ], "ne1d": 96, "ne2d": 120, "ne3d": 211, @@ -645,6 +1349,14 @@ "total_badness": 273.06134659 }, { + "angles_tet": [ + 26.198, + 137.42 + ], + "angles_trig": [ + 22.737, + 128.54 + ], "ne1d": 144, "ne2d": 274, "ne3d": 510, @@ -654,6 +1366,14 @@ ], "frame.step": [ { + "angles_tet": [ + 2.1167, + 169.42 + ], + "angles_trig": [ + 1.7007, + 160.42 + ], "ne1d": 12694, "ne2d": 40504, "ne3d": 218733, @@ -661,6 +1381,14 @@ "total_badness": 300987.32592 }, { + "angles_tet": [ + 2.296, + 175.7 + ], + "angles_trig": [ + 2.16, + 146.31 + ], "ne1d": 6026, "ne2d": 11450, "ne3d": 30266, @@ -668,6 +1396,14 @@ "total_badness": 45523.987082 }, { + "angles_tet": [ + 1.8818, + 175.73 + ], + "angles_trig": [ + 1.6035, + 166.47 + ], "ne1d": 9704, "ne2d": 24550, "ne3d": 95261, @@ -677,6 +1413,14 @@ ], "hinge.stl": [ { + "angles_tet": [ + 21.226, + 147.39 + ], + "angles_trig": [ + 18.101, + 139.79 + ], "ne1d": 456, "ne2d": 1220, "ne3d": 1980, @@ -684,6 +1428,14 @@ "total_badness": 2756.1867742 }, { + "angles_tet": [ + 7.7862, + 161.84 + ], + "angles_trig": [ + 7.0669, + 143.28 + ], "ne1d": 298, "ne2d": 610, "ne3d": 798, @@ -691,6 +1443,14 @@ "total_badness": 1395.9318106 }, { + "angles_tet": [ + 10.751, + 157.43 + ], + "angles_trig": [ + 15.428, + 134.88 + ], "ne1d": 370, "ne2d": 856, "ne3d": 1144, @@ -698,6 +1458,14 @@ "total_badness": 1817.5662995 }, { + "angles_tet": [ + 11.964, + 156.88 + ], + "angles_trig": [ + 19.521, + 130.96 + ], "ne1d": 516, "ne2d": 1574, "ne3d": 2625, @@ -705,6 +1473,14 @@ "total_badness": 3701.4387818 }, { + "angles_tet": [ + 19.877, + 146.81 + ], + "angles_trig": [ + 21.493, + 131.22 + ], "ne1d": 722, "ne2d": 2866, "ne3d": 6605, @@ -712,6 +1488,14 @@ "total_badness": 8524.0032138 }, { + "angles_tet": [ + 20.094, + 148.92 + ], + "angles_trig": [ + 20.856, + 124.08 + ], "ne1d": 1862, "ne2d": 19474, "ne3d": 136180, @@ -721,6 +1505,14 @@ ], "lense.in2d": [ { + "angles_tet": [ + 0.0, + 0.0 + ], + "angles_trig": [ + 0.0, + 0.0 + ], "ne1d": 84, "ne2d": 436, "ne3d": 0, @@ -728,6 +1520,14 @@ "total_badness": 0.0 }, { + "angles_tet": [ + 0.0, + 0.0 + ], + "angles_trig": [ + 0.0, + 0.0 + ], "ne1d": 86, "ne2d": 476, "ne3d": 0, @@ -735,6 +1535,14 @@ "total_badness": 0.0 }, { + "angles_tet": [ + 0.0, + 0.0 + ], + "angles_trig": [ + 0.0, + 0.0 + ], "ne1d": 86, "ne2d": 490, "ne3d": 0, @@ -742,6 +1550,14 @@ "total_badness": 0.0 }, { + "angles_tet": [ + 0.0, + 0.0 + ], + "angles_trig": [ + 0.0, + 0.0 + ], "ne1d": 84, "ne2d": 436, "ne3d": 0, @@ -749,6 +1565,14 @@ "total_badness": 0.0 }, { + "angles_tet": [ + 0.0, + 0.0 + ], + "angles_trig": [ + 0.0, + 0.0 + ], "ne1d": 84, "ne2d": 460, "ne3d": 0, @@ -756,6 +1580,14 @@ "total_badness": 0.0 }, { + "angles_tet": [ + 0.0, + 0.0 + ], + "angles_trig": [ + 0.0, + 0.0 + ], "ne1d": 88, "ne2d": 496, "ne3d": 0, @@ -765,6 +1597,14 @@ ], "lshape3d.geo": [ { + "angles_tet": [ + 35.388, + 125.2 + ], + "angles_trig": [ + 35.264, + 90.0 + ], "ne1d": 44, "ne2d": 28, "ne3d": 18, @@ -772,6 +1612,14 @@ "total_badness": 27.266612058 }, { + "angles_tet": [ + 30.0, + 120.0 + ], + "angles_trig": [ + 26.565, + 90.0 + ], "ne1d": 36, "ne2d": 20, "ne3d": 12, @@ -779,6 +1627,14 @@ "total_badness": 18.961481515 }, { + "angles_tet": [ + 30.0, + 120.0 + ], + "angles_trig": [ + 26.565, + 90.0 + ], "ne1d": 36, "ne2d": 20, "ne3d": 12, @@ -786,6 +1642,14 @@ "total_badness": 18.961481515 }, { + "angles_tet": [ + 35.388, + 125.2 + ], + "angles_trig": [ + 35.264, + 90.0 + ], "ne1d": 44, "ne2d": 28, "ne3d": 18, @@ -793,6 +1657,14 @@ "total_badness": 27.266612058 }, { + "angles_tet": [ + 31.337, + 128.87 + ], + "angles_trig": [ + 32.108, + 97.641 + ], "ne1d": 80, "ne2d": 76, "ne3d": 88, @@ -800,6 +1672,14 @@ "total_badness": 121.1271847 }, { + "angles_tet": [ + 25.368, + 136.06 + ], + "angles_trig": [ + 26.255, + 113.74 + ], "ne1d": 122, "ne2d": 204, "ne3d": 326, @@ -809,6 +1689,14 @@ ], "manyholes.geo": [ { + "angles_tet": [ + 11.024, + 157.73 + ], + "angles_trig": [ + 13.429, + 138.83 + ], "ne1d": 5886, "ne2d": 48052, "ne3d": 179262, @@ -816,6 +1704,14 @@ "total_badness": 238415.32571 }, { + "angles_tet": [ + 12.767, + 155.51 + ], + "angles_trig": [ + 14.03, + 137.87 + ], "ne1d": 2746, "ne2d": 13866, "ne3d": 29255, @@ -823,6 +1719,14 @@ "total_badness": 42256.964101 }, { + "angles_tet": [ + 11.183, + 158.0 + ], + "angles_trig": [ + 14.404, + 138.76 + ], "ne1d": 4106, "ne2d": 27994, "ne3d": 70558, @@ -832,6 +1736,14 @@ ], "manyholes2.geo": [ { + "angles_tet": [ + 12.524, + 156.94 + ], + "angles_trig": [ + 14.039, + 144.68 + ], "ne1d": 10202, "ne2d": 55380, "ne3d": 127866, @@ -841,6 +1753,14 @@ ], "matrix.geo": [ { + "angles_tet": [ + 8.7425, + 169.61 + ], + "angles_trig": [ + 9.4044, + 158.86 + ], "ne1d": 174, "ne2d": 1198, "ne3d": 5246, @@ -848,6 +1768,14 @@ "total_badness": 9567.4544817 }, { + "angles_tet": [ + 9.3893, + 167.55 + ], + "angles_trig": [ + 7.9174, + 156.64 + ], "ne1d": 106, "ne2d": 610, "ne3d": 1936, @@ -855,6 +1783,14 @@ "total_badness": 4606.0709672 }, { + "angles_tet": [ + 6.3111, + 167.44 + ], + "angles_trig": [ + 8.5226, + 161.64 + ], "ne1d": 132, "ne2d": 830, "ne3d": 2751, @@ -862,6 +1798,14 @@ "total_badness": 5616.8677502 }, { + "angles_tet": [ + 8.3643, + 169.46 + ], + "angles_trig": [ + 9.2702, + 159.43 + ], "ne1d": 174, "ne2d": 1198, "ne3d": 5176, @@ -869,6 +1813,14 @@ "total_badness": 9086.4626755 }, { + "angles_tet": [ + 12.515, + 149.31 + ], + "angles_trig": [ + 15.659, + 143.02 + ], "ne1d": 248, "ne2d": 2324, "ne3d": 16341, @@ -876,6 +1828,14 @@ "total_badness": 21749.164857 }, { + "angles_tet": [ + 18.203, + 148.52 + ], + "angles_trig": [ + 17.821, + 133.29 + ], "ne1d": 418, "ne2d": 5968, "ne3d": 100573, @@ -885,6 +1845,14 @@ ], "ortho.geo": [ { + "angles_tet": [ + 35.264, + 125.26 + ], + "angles_trig": [ + 35.264, + 90.0 + ], "ne1d": 24, "ne2d": 12, "ne3d": 6, @@ -892,6 +1860,14 @@ "total_badness": 9.1401272869 }, { + "angles_tet": [ + 35.264, + 125.26 + ], + "angles_trig": [ + 35.264, + 90.0 + ], "ne1d": 24, "ne2d": 12, "ne3d": 6, @@ -899,6 +1875,14 @@ "total_badness": 9.1401272869 }, { + "angles_tet": [ + 35.264, + 125.26 + ], + "angles_trig": [ + 35.264, + 90.0 + ], "ne1d": 24, "ne2d": 12, "ne3d": 6, @@ -906,6 +1890,14 @@ "total_badness": 9.1401272869 }, { + "angles_tet": [ + 35.264, + 125.26 + ], + "angles_trig": [ + 35.264, + 90.0 + ], "ne1d": 24, "ne2d": 12, "ne3d": 6, @@ -913,6 +1905,14 @@ "total_badness": 9.1401272869 }, { + "angles_tet": [ + 30.374, + 135.21 + ], + "angles_trig": [ + 31.206, + 114.73 + ], "ne1d": 48, "ne2d": 36, "ne3d": 57, @@ -920,6 +1920,14 @@ "total_badness": 83.060809673 }, { + "angles_tet": [ + 27.475, + 132.1 + ], + "angles_trig": [ + 26.945, + 100.32 + ], "ne1d": 72, "ne2d": 116, "ne3d": 180, @@ -929,6 +1937,14 @@ ], "part1.stl": [ { + "angles_tet": [ + 19.762, + 149.4 + ], + "angles_trig": [ + 20.599, + 125.75 + ], "ne1d": 170, "ne2d": 448, "ne3d": 1260, @@ -936,6 +1952,14 @@ "total_badness": 1772.4232339 }, { + "angles_tet": [ + 12.231, + 157.41 + ], + "angles_trig": [ + 12.077, + 146.08 + ], "ne1d": 134, "ne2d": 288, "ne3d": 528, @@ -943,6 +1967,14 @@ "total_badness": 830.65240856 }, { + "angles_tet": [ + 21.121, + 145.72 + ], + "angles_trig": [ + 19.421, + 131.84 + ], "ne1d": 194, "ne2d": 594, "ne3d": 1710, @@ -950,6 +1982,14 @@ "total_badness": 2293.663372 }, { + "angles_tet": [ + 20.561, + 150.37 + ], + "angles_trig": [ + 21.304, + 119.75 + ], "ne1d": 266, "ne2d": 986, "ne3d": 4084, @@ -957,6 +1997,14 @@ "total_badness": 5147.3961968 }, { + "angles_tet": [ + 21.607, + 147.03 + ], + "angles_trig": [ + 24.642, + 123.29 + ], "ne1d": 674, "ne2d": 6854, "ne3d": 82879, @@ -966,6 +2014,14 @@ ], "period.geo": [ { + "angles_tet": [ + 13.762, + 154.57 + ], + "angles_trig": [ + 18.268, + 134.54 + ], "ne1d": 344, "ne2d": 1136, "ne3d": 3291, @@ -973,6 +2029,14 @@ "total_badness": 4941.6426523 }, { + "angles_tet": [ + 9.8394, + 168.45 + ], + "angles_trig": [ + 12.775, + 141.37 + ], "ne1d": 160, "ne2d": 286, "ne3d": 642, @@ -980,6 +2044,14 @@ "total_badness": 1235.2259283 }, { + "angles_tet": [ + 1.9156, + 176.45 + ], + "angles_trig": [ + 2.8402, + 170.87 + ], "ne1d": 232, "ne2d": 598, "ne3d": 1654, @@ -987,6 +2059,14 @@ "total_badness": 3928.2006441 }, { + "angles_tet": [ + 15.25, + 146.58 + ], + "angles_trig": [ + 18.527, + 134.98 + ], "ne1d": 344, "ne2d": 1136, "ne3d": 3221, @@ -994,6 +2074,14 @@ "total_badness": 4704.9518805 }, { + "angles_tet": [ + 14.338, + 151.8 + ], + "angles_trig": [ + 22.31, + 123.65 + ], "ne1d": 480, "ne2d": 2256, "ne3d": 11709, @@ -1001,6 +2089,14 @@ "total_badness": 14941.96653 }, { + "angles_tet": [ + 19.395, + 150.05 + ], + "angles_trig": [ + 22.722, + 125.06 + ], "ne1d": 820, "ne2d": 6226, "ne3d": 68532, @@ -1010,6 +2106,14 @@ ], "plane.stl": [ { + "angles_tet": [ + 0.81532, + 175.91 + ], + "angles_trig": [ + 1.1286, + 172.51 + ], "ne1d": 890, "ne2d": 2626, "ne3d": 8421, @@ -1017,6 +2121,14 @@ "total_badness": 12967.318277 }, { + "angles_tet": [ + 1.0663, + 174.05 + ], + "angles_trig": [ + 0.77944, + 170.54 + ], "ne1d": 570, "ne2d": 1202, "ne3d": 1774, @@ -1024,6 +2136,14 @@ "total_badness": 4640.8658317 }, { + "angles_tet": [ + 1.1034, + 172.01 + ], + "angles_trig": [ + 2.4229, + 163.66 + ], "ne1d": 724, "ne2d": 1730, "ne3d": 3248, @@ -1031,6 +2151,14 @@ "total_badness": 6101.8771518 }, { + "angles_tet": [ + 1.2088, + 169.94 + ], + "angles_trig": [ + 1.8573, + 161.93 + ], "ne1d": 956, "ne2d": 2828, "ne3d": 8439, @@ -1038,6 +2166,14 @@ "total_badness": 12501.380591 }, { + "angles_tet": [ + 1.1658, + 169.3 + ], + "angles_trig": [ + 3.4032, + 150.86 + ], "ne1d": 1554, "ne2d": 6372, "ne3d": 31592, @@ -1045,6 +2181,14 @@ "total_badness": 41134.059548 }, { + "angles_tet": [ + 1.2237, + 165.99 + ], + "angles_trig": [ + 1.2553, + 156.34 + ], "ne1d": 2992, "ne2d": 23322, "ne3d": 281009, @@ -1054,6 +2198,14 @@ ], "revolution.geo": [ { + "angles_tet": [ + 15.022, + 153.82 + ], + "angles_trig": [ + 17.273, + 129.26 + ], "ne1d": 320, "ne2d": 3110, "ne3d": 8443, @@ -1061,6 +2213,14 @@ "total_badness": 12356.528396 }, { + "angles_tet": [ + 12.083, + 148.78 + ], + "angles_trig": [ + 14.181, + 133.81 + ], "ne1d": 160, "ne2d": 822, "ne3d": 1279, @@ -1068,6 +2228,14 @@ "total_badness": 2305.3064983 }, { + "angles_tet": [ + 18.299, + 154.43 + ], + "angles_trig": [ + 16.545, + 129.72 + ], "ne1d": 240, "ne2d": 1830, "ne3d": 3870, @@ -1075,6 +2243,14 @@ "total_badness": 5884.7598106 }, { + "angles_tet": [ + 16.32, + 151.1 + ], + "angles_trig": [ + 17.431, + 126.62 + ], "ne1d": 320, "ne2d": 3110, "ne3d": 8269, @@ -1082,6 +2258,14 @@ "total_badness": 11704.49421 }, { + "angles_tet": [ + 18.421, + 147.2 + ], + "angles_trig": [ + 22.303, + 130.37 + ], "ne1d": 480, "ne2d": 6864, "ne3d": 33003, @@ -1089,6 +2273,14 @@ "total_badness": 41802.827145 }, { + "angles_tet": [ + 20.787, + 147.12 + ], + "angles_trig": [ + 20.393, + 129.3 + ], "ne1d": 800, "ne2d": 17934, "ne3d": 201498, @@ -1098,6 +2290,14 @@ ], "screw.step": [ { + "angles_tet": [ + 17.384, + 150.49 + ], + "angles_trig": [ + 16.746, + 140.59 + ], "ne1d": 400, "ne2d": 1432, "ne3d": 2402, @@ -1105,6 +2305,14 @@ "total_badness": 3838.1456915 }, { + "angles_tet": [ + 16.908, + 146.51 + ], + "angles_trig": [ + 18.34, + 135.63 + ], "ne1d": 530, "ne2d": 2718, "ne3d": 8015, @@ -1112,6 +2320,14 @@ "total_badness": 10583.964534 }, { + "angles_tet": [ + 17.763, + 150.24 + ], + "angles_trig": [ + 14.994, + 127.34 + ], "ne1d": 668, "ne2d": 5002, "ne3d": 31735, @@ -1121,6 +2337,14 @@ ], "sculpture.geo": [ { + "angles_tet": [ + 18.392, + 146.41 + ], + "angles_trig": [ + 23.82, + 115.78 + ], "ne1d": 192, "ne2d": 414, "ne3d": 475, @@ -1128,6 +2352,14 @@ "total_badness": 692.44104062 }, { + "angles_tet": [ + 28.072, + 135.55 + ], + "angles_trig": [ + 27.015, + 109.61 + ], "ne1d": 102, "ne2d": 146, "ne3d": 141, @@ -1135,6 +2367,14 @@ "total_badness": 178.07603683 }, { + "angles_tet": [ + 23.253, + 139.76 + ], + "angles_trig": [ + 28.201, + 103.35 + ], "ne1d": 144, "ne2d": 250, "ne3d": 263, @@ -1142,6 +2382,14 @@ "total_badness": 343.8094424 }, { + "angles_tet": [ + 18.392, + 146.41 + ], + "angles_trig": [ + 23.82, + 115.78 + ], "ne1d": 192, "ne2d": 414, "ne3d": 475, @@ -1149,6 +2397,14 @@ "total_badness": 692.44104062 }, { + "angles_tet": [ + 16.551, + 147.09 + ], + "angles_trig": [ + 21.309, + 121.8 + ], "ne1d": 288, "ne2d": 962, "ne3d": 1326, @@ -1156,6 +2412,14 @@ "total_badness": 2054.7475159 }, { + "angles_tet": [ + 15.141, + 145.11 + ], + "angles_trig": [ + 16.998, + 119.06 + ], "ne1d": 480, "ne2d": 2394, "ne3d": 6791, @@ -1165,6 +2429,14 @@ ], "shaft.geo": [ { + "angles_tet": [ + 0.64499, + 179.05 + ], + "angles_trig": [ + 1.2376, + 176.83 + ], "ne1d": 708, "ne2d": 1722, "ne3d": 2757, @@ -1172,6 +2444,14 @@ "total_badness": 6328.6329226 }, { + "angles_tet": [ + 16.307, + 153.33 + ], + "angles_trig": [ + 17.101, + 133.86 + ], "ne1d": 410, "ne2d": 606, "ne3d": 933, @@ -1179,6 +2459,14 @@ "total_badness": 1336.5110795 }, { + "angles_tet": [ + 1.7384, + 176.57 + ], + "angles_trig": [ + 3.6075, + 170.33 + ], "ne1d": 510, "ne2d": 1004, "ne3d": 2048, @@ -1186,6 +2474,14 @@ "total_badness": 5937.4200337 }, { + "angles_tet": [ + 2.1118, + 175.72 + ], + "angles_trig": [ + 5.1266, + 159.21 + ], "ne1d": 708, "ne2d": 1722, "ne3d": 2733, @@ -1193,6 +2489,14 @@ "total_badness": 4814.5951096 }, { + "angles_tet": [ + 14.953, + 144.12 + ], + "angles_trig": [ + 18.358, + 121.22 + ], "ne1d": 1138, "ne2d": 4220, "ne3d": 11242, @@ -1200,6 +2504,14 @@ "total_badness": 14539.392197 }, { + "angles_tet": [ + 22.34, + 145.52 + ], + "angles_trig": [ + 24.681, + 125.49 + ], "ne1d": 1792, "ne2d": 10600, "ne3d": 63895, @@ -1209,6 +2521,14 @@ ], "sphere.geo": [ { + "angles_tet": [ + 42.957, + 93.227 + ], + "angles_trig": [ + 20.575, + 79.713 + ], "ne1d": 0, "ne2d": 126, "ne3d": 126, @@ -1216,6 +2536,14 @@ "total_badness": 237.42979301 }, { + "angles_tet": [ + 46.583, + 91.583 + ], + "angles_trig": [ + 31.308, + 74.346 + ], "ne1d": 0, "ne2d": 56, "ne3d": 56, @@ -1223,6 +2551,14 @@ "total_badness": 68.826138928 }, { + "angles_tet": [ + 51.677, + 84.991 + ], + "angles_trig": [ + 28.501, + 75.749 + ], "ne1d": 0, "ne2d": 72, "ne3d": 72, @@ -1230,6 +2566,14 @@ "total_badness": 97.572347502 }, { + "angles_tet": [ + 42.957, + 93.227 + ], + "angles_trig": [ + 20.575, + 79.713 + ], "ne1d": 0, "ne2d": 126, "ne3d": 126, @@ -1237,6 +2581,14 @@ "total_badness": 237.42979301 }, { + "angles_tet": [ + 18.133, + 134.25 + ], + "angles_trig": [ + 19.678, + 114.4 + ], "ne1d": 0, "ne2d": 258, "ne3d": 366, @@ -1244,6 +2596,14 @@ "total_badness": 562.00749621 }, { + "angles_tet": [ + 25.418, + 140.3 + ], + "angles_trig": [ + 25.287, + 120.11 + ], "ne1d": 0, "ne2d": 660, "ne3d": 2329, @@ -1253,6 +2613,14 @@ ], "sphereincube.geo": [ { + "angles_tet": [ + 10.32, + 167.37 + ], + "angles_trig": [ + 11.28, + 155.31 + ], "ne1d": 46, "ne2d": 202, "ne3d": 490, @@ -1260,6 +2628,14 @@ "total_badness": 1429.7083119 }, { + "angles_tet": [ + 8.6025, + 156.39 + ], + "angles_trig": [ + 10.358, + 143.19 + ], "ne1d": 24, "ne2d": 60, "ne3d": 166, @@ -1267,6 +2643,14 @@ "total_badness": 454.94795255 }, { + "angles_tet": [ + 9.197, + 165.59 + ], + "angles_trig": [ + 9.1515, + 158.73 + ], "ne1d": 30, "ne2d": 116, "ne3d": 345, @@ -1274,6 +2658,14 @@ "total_badness": 988.81847916 }, { + "angles_tet": [ + 11.378, + 167.92 + ], + "angles_trig": [ + 10.021, + 159.12 + ], "ne1d": 46, "ne2d": 202, "ne3d": 498, @@ -1281,6 +2673,14 @@ "total_badness": 1326.92489 }, { + "angles_tet": [ + 14.196, + 144.16 + ], + "angles_trig": [ + 15.219, + 126.51 + ], "ne1d": 74, "ne2d": 418, "ne3d": 1788, @@ -1288,6 +2688,14 @@ "total_badness": 2540.547751 }, { + "angles_tet": [ + 23.561, + 147.15 + ], + "angles_trig": [ + 23.846, + 130.05 + ], "ne1d": 122, "ne2d": 1082, "ne3d": 14039, @@ -1297,6 +2705,14 @@ ], "square.in2d": [ { + "angles_tet": [ + 0.0, + 0.0 + ], + "angles_trig": [ + 0.0, + 0.0 + ], "ne1d": 35, "ne2d": 121, "ne3d": 0, @@ -1304,6 +2720,14 @@ "total_badness": 0.0 }, { + "angles_tet": [ + 0.0, + 0.0 + ], + "angles_trig": [ + 0.0, + 0.0 + ], "ne1d": 30, "ne2d": 98, "ne3d": 0, @@ -1311,6 +2735,14 @@ "total_badness": 0.0 }, { + "angles_tet": [ + 0.0, + 0.0 + ], + "angles_trig": [ + 0.0, + 0.0 + ], "ne1d": 30, "ne2d": 96, "ne3d": 0, @@ -1318,6 +2750,14 @@ "total_badness": 0.0 }, { + "angles_tet": [ + 0.0, + 0.0 + ], + "angles_trig": [ + 0.0, + 0.0 + ], "ne1d": 35, "ne2d": 121, "ne3d": 0, @@ -1325,6 +2765,14 @@ "total_badness": 0.0 }, { + "angles_tet": [ + 0.0, + 0.0 + ], + "angles_trig": [ + 0.0, + 0.0 + ], "ne1d": 44, "ne2d": 190, "ne3d": 0, @@ -1332,6 +2780,14 @@ "total_badness": 0.0 }, { + "angles_tet": [ + 0.0, + 0.0 + ], + "angles_trig": [ + 0.0, + 0.0 + ], "ne1d": 58, "ne2d": 396, "ne3d": 0, @@ -1341,6 +2797,14 @@ ], "squarecircle.in2d": [ { + "angles_tet": [ + 0.0, + 0.0 + ], + "angles_trig": [ + 0.0, + 0.0 + ], "ne1d": 32, "ne2d": 158, "ne3d": 0, @@ -1348,6 +2812,14 @@ "total_badness": 0.0 }, { + "angles_tet": [ + 0.0, + 0.0 + ], + "angles_trig": [ + 0.0, + 0.0 + ], "ne1d": 32, "ne2d": 130, "ne3d": 0, @@ -1355,6 +2827,14 @@ "total_badness": 0.0 }, { + "angles_tet": [ + 0.0, + 0.0 + ], + "angles_trig": [ + 0.0, + 0.0 + ], "ne1d": 32, "ne2d": 140, "ne3d": 0, @@ -1362,6 +2842,14 @@ "total_badness": 0.0 }, { + "angles_tet": [ + 0.0, + 0.0 + ], + "angles_trig": [ + 0.0, + 0.0 + ], "ne1d": 32, "ne2d": 158, "ne3d": 0, @@ -1369,6 +2857,14 @@ "total_badness": 0.0 }, { + "angles_tet": [ + 0.0, + 0.0 + ], + "angles_trig": [ + 0.0, + 0.0 + ], "ne1d": 45, "ne2d": 313, "ne3d": 0, @@ -1376,6 +2872,14 @@ "total_badness": 0.0 }, { + "angles_tet": [ + 0.0, + 0.0 + ], + "angles_trig": [ + 0.0, + 0.0 + ], "ne1d": 81, "ne2d": 843, "ne3d": 0, @@ -1385,6 +2889,14 @@ ], "squarehole.in2d": [ { + "angles_tet": [ + 0.0, + 0.0 + ], + "angles_trig": [ + 0.0, + 0.0 + ], "ne1d": 32, "ne2d": 134, "ne3d": 0, @@ -1392,6 +2904,14 @@ "total_badness": 0.0 }, { + "angles_tet": [ + 0.0, + 0.0 + ], + "angles_trig": [ + 0.0, + 0.0 + ], "ne1d": 32, "ne2d": 108, "ne3d": 0, @@ -1399,6 +2919,14 @@ "total_badness": 0.0 }, { + "angles_tet": [ + 0.0, + 0.0 + ], + "angles_trig": [ + 0.0, + 0.0 + ], "ne1d": 32, "ne2d": 118, "ne3d": 0, @@ -1406,6 +2934,14 @@ "total_badness": 0.0 }, { + "angles_tet": [ + 0.0, + 0.0 + ], + "angles_trig": [ + 0.0, + 0.0 + ], "ne1d": 32, "ne2d": 134, "ne3d": 0, @@ -1413,6 +2949,14 @@ "total_badness": 0.0 }, { + "angles_tet": [ + 0.0, + 0.0 + ], + "angles_trig": [ + 0.0, + 0.0 + ], "ne1d": 45, "ne2d": 253, "ne3d": 0, @@ -1420,6 +2964,14 @@ "total_badness": 0.0 }, { + "angles_tet": [ + 0.0, + 0.0 + ], + "angles_trig": [ + 0.0, + 0.0 + ], "ne1d": 81, "ne2d": 709, "ne3d": 0, @@ -1429,6 +2981,14 @@ ], "torus.geo": [ { + "angles_tet": [ + 13.144, + 152.82 + ], + "angles_trig": [ + 19.303, + 132.35 + ], "ne1d": 0, "ne2d": 2534, "ne3d": 5745, @@ -1436,6 +2996,14 @@ "total_badness": 8709.4458795 }, { + "angles_tet": [ + 1.2238, + 177.38 + ], + "angles_trig": [ + 2.9769, + 171.94 + ], "ne1d": 0, "ne2d": 692, "ne3d": 3181, @@ -1443,6 +3011,14 @@ "total_badness": 24641.250872 }, { + "angles_tet": [ + 19.725, + 139.57 + ], + "angles_trig": [ + 20.487, + 120.36 + ], "ne1d": 0, "ne2d": 1446, "ne3d": 2743, @@ -1450,6 +3026,14 @@ "total_badness": 3928.1549928 }, { + "angles_tet": [ + 19.089, + 150.14 + ], + "angles_trig": [ + 19.879, + 128.33 + ], "ne1d": 0, "ne2d": 2534, "ne3d": 5584, @@ -1457,6 +3041,14 @@ "total_badness": 8111.5941443 }, { + "angles_tet": [ + 20.531, + 143.08 + ], + "angles_trig": [ + 22.447, + 120.05 + ], "ne1d": 0, "ne2d": 5894, "ne3d": 25294, @@ -1464,6 +3056,14 @@ "total_badness": 31642.969488 }, { + "angles_tet": [ + 20.696, + 148.87 + ], + "angles_trig": [ + 22.772, + 123.66 + ], "ne1d": 0, "ne2d": 16296, "ne3d": 175351, @@ -1473,6 +3073,14 @@ ], "trafo.geo": [ { + "angles_tet": [ + 3.9276, + 174.44 + ], + "angles_trig": [ + 13.504, + 145.01 + ], "ne1d": 690, "ne2d": 1684, "ne3d": 5231, @@ -1480,6 +3088,14 @@ "total_badness": 7683.599832 }, { + "angles_tet": [ + 8.1301, + 164.94 + ], + "angles_trig": [ + 6.1428, + 158.67 + ], "ne1d": 390, "ne2d": 522, "ne3d": 1353, @@ -1487,6 +3103,14 @@ "total_badness": 2768.022266 }, { + "angles_tet": [ + 6.2287, + 170.99 + ], + "angles_trig": [ + 14.15, + 144.73 + ], "ne1d": 512, "ne2d": 874, "ne3d": 2397, @@ -1494,6 +3118,14 @@ "total_badness": 3983.5650135 }, { + "angles_tet": [ + 10.03, + 156.47 + ], + "angles_trig": [ + 14.916, + 132.87 + ], "ne1d": 690, "ne2d": 1684, "ne3d": 5147, @@ -1501,6 +3133,14 @@ "total_badness": 7408.6135626 }, { + "angles_tet": [ + 16.895, + 145.94 + ], + "angles_trig": [ + 17.568, + 126.69 + ], "ne1d": 1050, "ne2d": 3812, "ne3d": 18010, @@ -1508,6 +3148,14 @@ "total_badness": 23560.24016 }, { + "angles_tet": [ + 11.084, + 149.86 + ], + "angles_trig": [ + 19.234, + 130.9 + ], "ne1d": 1722, "ne2d": 10042, "ne3d": 84690, @@ -1517,6 +3165,14 @@ ], "twobricks.geo": [ { + "angles_tet": [ + 22.934, + 142.89 + ], + "angles_trig": [ + 18.806, + 142.29 + ], "ne1d": 72, "ne2d": 50, "ne3d": 41, @@ -1524,6 +3180,14 @@ "total_badness": 68.929979132 }, { + "angles_tet": [ + 34.114, + 126.16 + ], + "angles_trig": [ + 29.435, + 120.21 + ], "ne1d": 56, "ne2d": 34, "ne3d": 22, @@ -1531,6 +3195,14 @@ "total_badness": 35.050418036 }, { + "angles_tet": [ + 34.449, + 125.92 + ], + "angles_trig": [ + 29.606, + 120.18 + ], "ne1d": 56, "ne2d": 34, "ne3d": 22, @@ -1538,6 +3210,14 @@ "total_badness": 35.041320265 }, { + "angles_tet": [ + 22.934, + 142.89 + ], + "angles_trig": [ + 18.806, + 142.29 + ], "ne1d": 72, "ne2d": 50, "ne3d": 41, @@ -1545,6 +3225,14 @@ "total_badness": 68.929979132 }, { + "angles_tet": [ + 27.283, + 131.06 + ], + "angles_trig": [ + 26.534, + 105.99 + ], "ne1d": 116, "ne2d": 134, "ne3d": 177, @@ -1552,6 +3240,14 @@ "total_badness": 234.47359 }, { + "angles_tet": [ + 26.468, + 133.47 + ], + "angles_trig": [ + 27.418, + 110.78 + ], "ne1d": 186, "ne2d": 346, "ne3d": 603, @@ -1561,6 +3257,14 @@ ], "twocubes.geo": [ { + "angles_tet": [ + 22.934, + 142.89 + ], + "angles_trig": [ + 18.806, + 142.29 + ], "ne1d": 72, "ne2d": 50, "ne3d": 41, @@ -1568,6 +3272,14 @@ "total_badness": 68.929979132 }, { + "angles_tet": [ + 34.114, + 126.16 + ], + "angles_trig": [ + 29.435, + 120.21 + ], "ne1d": 56, "ne2d": 34, "ne3d": 22, @@ -1575,6 +3287,14 @@ "total_badness": 35.050418036 }, { + "angles_tet": [ + 34.449, + 125.92 + ], + "angles_trig": [ + 29.606, + 120.18 + ], "ne1d": 56, "ne2d": 34, "ne3d": 22, @@ -1582,6 +3302,14 @@ "total_badness": 35.041320265 }, { + "angles_tet": [ + 22.934, + 142.89 + ], + "angles_trig": [ + 18.806, + 142.29 + ], "ne1d": 72, "ne2d": 50, "ne3d": 41, @@ -1589,6 +3317,14 @@ "total_badness": 68.929979132 }, { + "angles_tet": [ + 27.283, + 131.06 + ], + "angles_trig": [ + 26.534, + 105.99 + ], "ne1d": 116, "ne2d": 134, "ne3d": 177, @@ -1596,6 +3332,14 @@ "total_badness": 234.47359 }, { + "angles_tet": [ + 26.468, + 133.47 + ], + "angles_trig": [ + 27.418, + 110.78 + ], "ne1d": 186, "ne2d": 346, "ne3d": 603, @@ -1605,6 +3349,14 @@ ], "twocyl.geo": [ { + "angles_tet": [ + 19.44, + 148.64 + ], + "angles_trig": [ + 14.153, + 127.96 + ], "ne1d": 144, "ne2d": 408, "ne3d": 576, @@ -1612,6 +3364,14 @@ "total_badness": 901.75131743 }, { + "angles_tet": [ + 11.835, + 157.69 + ], + "angles_trig": [ + 12.796, + 135.11 + ], "ne1d": 68, "ne2d": 100, "ne3d": 209, @@ -1619,6 +3379,14 @@ "total_badness": 357.15447323 }, { + "angles_tet": [ + 2.5289, + 174.75 + ], + "angles_trig": [ + 7.8638, + 160.72 + ], "ne1d": 102, "ne2d": 238, "ne3d": 548, @@ -1626,6 +3394,14 @@ "total_badness": 1932.6124156 }, { + "angles_tet": [ + 19.577, + 146.75 + ], + "angles_trig": [ + 19.468, + 127.96 + ], "ne1d": 144, "ne2d": 408, "ne3d": 576, @@ -1633,6 +3409,14 @@ "total_badness": 853.37034747 }, { + "angles_tet": [ + 23.256, + 137.47 + ], + "angles_trig": [ + 23.036, + 119.69 + ], "ne1d": 214, "ne2d": 910, "ne3d": 1921, @@ -1640,6 +3424,14 @@ "total_badness": 2544.8927759 }, { + "angles_tet": [ + 24.255, + 141.91 + ], + "angles_trig": [ + 24.573, + 121.54 + ], "ne1d": 350, "ne2d": 2374, "ne3d": 13509, diff --git a/tests/pytest/test_tutorials.py b/tests/pytest/test_tutorials.py index 1dca6cd0..8f653cce 100644 --- a/tests/pytest/test_tutorials.py +++ b/tests/pytest/test_tutorials.py @@ -14,13 +14,23 @@ except ImportError: SetMessageImportance(0) +def round(x, digits=11): + try: + return float(("{:."+str(digits)+"g}").format(x)) + except: #list + return [float(("{:."+str(digits)+"g}").format(y)) for y in x] + + def getData(mesh, mp): out = {} out['ne1d'] = len(mesh.Elements1D()) out['ne2d'] = len(mesh.Elements2D()) out['ne3d'] = len(mesh.Elements3D()) # round badness to avoid fluctuations in last digits - out["total_badness"] = float("{:.11g}".format(mesh.CalcTotalBadness(mp))) + out["total_badness"] = round(mesh.CalcTotalBadness(mp)) + angles = mesh.CalcMinMaxAngle() + out["angles_trig"] = round(angles["trig"], 5) + out["angles_tet"] = round(angles["tet"], 5) out["quality_histogram"] = str(list(mesh.GetQualityHistogram())) return out @@ -31,6 +41,8 @@ def checkData(mesh, mp, ref): assert ref['ne3d'] == data['ne3d'] assert json.loads(ref['quality_histogram']) == pytest.approx(json.loads(data['quality_histogram']), abs=1, rel=0.4) assert ref['total_badness'] == pytest.approx(data['total_badness'], rel=1e-5) + assert ref['angles_trig'] == pytest.approx(data['angles_trig'], rel=1e-5) + assert ref['angles_tet'] == pytest.approx(data['angles_tet'], rel=1e-5) # get tutorials def getFiles(fileEnding): From 36e56e5d6c952164da0b7f345862425552dfc285 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Thu, 24 Oct 2019 13:17:00 +0200 Subject: [PATCH 085/120] move some stuff to base geometry --- libsrc/meshing/CMakeLists.txt | 1 + libsrc/meshing/basegeom.cpp | 17 +++++++++++++++++ libsrc/meshing/basegeom.hpp | 4 +++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/libsrc/meshing/CMakeLists.txt b/libsrc/meshing/CMakeLists.txt index 94268db0..e3b5c562 100644 --- a/libsrc/meshing/CMakeLists.txt +++ b/libsrc/meshing/CMakeLists.txt @@ -37,5 +37,6 @@ install(FILES localh.hpp meshclass.hpp meshfunc.hpp meshing2.hpp meshing3.hpp meshing.hpp meshtool.hpp meshtype.hpp msghandler.hpp paralleltop.hpp ruler2.hpp ruler3.hpp specials.hpp topology.hpp validate.hpp + python_mesh.hpp DESTINATION ${NG_INSTALL_DIR_INCLUDE}/meshing COMPONENT netgen_devel ) diff --git a/libsrc/meshing/basegeom.cpp b/libsrc/meshing/basegeom.cpp index 4868b5a0..93a7c6ca 100644 --- a/libsrc/meshing/basegeom.cpp +++ b/libsrc/meshing/basegeom.cpp @@ -10,6 +10,23 @@ namespace netgen GeometryRegister :: ~GeometryRegister() { ; } + void NetgenGeometry :: Analyse(Mesh& mesh, + const MeshingParameters& mparam) + { + static Timer t1("SetLocalMeshsize"); RegionTimer regt(t1); + mesh.SetGlobalH(mparam.maxh); + mesh.SetMinimalH(mparam.minh); + + mesh.SetLocalH(bounding_box.PMin(), bounding_box.PMax(), + mparam.grading); + + if(mparam.uselocalh) + { + // TODO set local h + } + mesh.LoadLocalMeshSize(mparam.meshsizefilename); + } + void NetgenGeometry :: OptimizeSurface(Mesh& mesh, const MeshingParameters& mparam) { const auto savetask = multithread.task; diff --git a/libsrc/meshing/basegeom.hpp b/libsrc/meshing/basegeom.hpp index f001f9fa..a1c9ef28 100644 --- a/libsrc/meshing/basegeom.hpp +++ b/libsrc/meshing/basegeom.hpp @@ -16,6 +16,8 @@ namespace netgen class DLL_HEADER NetgenGeometry { unique_ptr ref; + protected: + Box<3> bounding_box; public: NetgenGeometry() { @@ -35,7 +37,7 @@ namespace netgen virtual Mesh::GEOM_TYPE GetGeomType() const { return Mesh::NO_GEOM; } virtual void Analyse(Mesh& mesh, - const MeshingParameters& mparam) {} + const MeshingParameters& mparam); virtual void FindEdges(Mesh& mesh, const MeshingParameters& mparam) {} virtual void MeshSurface(Mesh& mesh, const MeshingParameters& mparam) {} virtual void OptimizeSurface(Mesh& mesh, const MeshingParameters& mparam); From 54b36c6a4030c5adaa798d7ad7837b3c29866dc1 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Thu, 24 Oct 2019 17:34:53 +0200 Subject: [PATCH 086/120] add virtual method to restrict localh to geometry --- libsrc/meshing/basegeom.cpp | 4 +--- libsrc/meshing/basegeom.hpp | 2 ++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libsrc/meshing/basegeom.cpp b/libsrc/meshing/basegeom.cpp index 93a7c6ca..429a5d58 100644 --- a/libsrc/meshing/basegeom.cpp +++ b/libsrc/meshing/basegeom.cpp @@ -21,9 +21,7 @@ namespace netgen mparam.grading); if(mparam.uselocalh) - { - // TODO set local h - } + RestrictLocalMeshsize(mesh, mparam); mesh.LoadLocalMeshSize(mparam.meshsizefilename); } diff --git a/libsrc/meshing/basegeom.hpp b/libsrc/meshing/basegeom.hpp index a1c9ef28..86d19546 100644 --- a/libsrc/meshing/basegeom.hpp +++ b/libsrc/meshing/basegeom.hpp @@ -38,6 +38,8 @@ namespace netgen virtual Mesh::GEOM_TYPE GetGeomType() const { return Mesh::NO_GEOM; } virtual void Analyse(Mesh& mesh, const MeshingParameters& mparam); + virtual void RestrictLocalMeshsize(Mesh& mesh, + const MeshingParameters& mparam) const {} virtual void FindEdges(Mesh& mesh, const MeshingParameters& mparam) {} virtual void MeshSurface(Mesh& mesh, const MeshingParameters& mparam) {} virtual void OptimizeSurface(Mesh& mesh, const MeshingParameters& mparam); From 6fb8f90a73949bd1d2e4a71aba234dc29ac1c6c0 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Thu, 24 Oct 2019 14:09:37 +0200 Subject: [PATCH 087/120] Sort edges by improvement in SwapImprove --- libsrc/meshing/improve3.cpp | 55 +- libsrc/meshing/improve3.hpp | 2 +- tests/pytest/results.json | 2114 +++++++++++++++++------------------ 3 files changed, 1087 insertions(+), 1084 deletions(-) diff --git a/libsrc/meshing/improve3.cpp b/libsrc/meshing/improve3.cpp index 8400e541..83a8be25 100644 --- a/libsrc/meshing/improve3.cpp +++ b/libsrc/meshing/improve3.cpp @@ -1698,7 +1698,7 @@ void MeshOptimize3d :: SwapImproveSequential (Mesh & mesh, OPTIMIZEGOAL goal, } -bool MeshOptimize3d :: SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, +double MeshOptimize3d :: SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, const NgBitArray * working_elements, Table & elementsonnode, INDEX_3_HASHTABLE & faces, @@ -1714,10 +1714,10 @@ bool MeshOptimize3d :: SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, Element el1b(TET), el2b(TET), el3b(TET), el4b(TET); ArrayMem hasbothpoints; - bool do_swap = false; + double d_badness = 0.0; if (pi2 < pi1) Swap (pi1, pi2); - if (mesh.BoundaryEdge (pi1, pi2)) return false; + if (mesh.BoundaryEdge (pi1, pi2)) return 0.0; hasbothpoints.SetSize (0); @@ -1726,7 +1726,7 @@ bool MeshOptimize3d :: SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, bool has1 = 0, has2 = 0; const Element & elem = mesh[elnr]; - if (elem.IsDeleted()) return false; + if (elem.IsDeleted()) return 0.0; for (int l = 0; l < elem.GetNP(); l++) { @@ -1749,27 +1749,27 @@ bool MeshOptimize3d :: SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, for (ElementIndex ei : hasbothpoints) { if (mesh[ei].GetType () != TET) - return false; + return 0.0; if (mp.only3D_domain_nr && mp.only3D_domain_nr != mesh.VolumeElement(ei).GetIndex()) - return false; + return 0.0; if ((mesh.ElementType(ei)) == FIXEDELEMENT) - return false; + return 0.0; if(working_elements && ei < working_elements->Size() && !working_elements->Test(ei)) - return false; + return 0.0; if (mesh[ei].IsDeleted()) - return false; + return 0.0; if ((goal == OPT_LEGAL) && mesh.LegalTet (mesh[ei]) && CalcBad (mesh.Points(), mesh[ei], 0) < 1e3) - return false; + return 0.0; } int nsuround = hasbothpoints.Size(); @@ -1883,8 +1883,9 @@ bool MeshOptimize3d :: SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, { // (*mycout) << "3->2 " << flush; // (*testout) << "3->2 conversion" << endl; - do_swap = true; - if(check_only) return do_swap; + d_badness = bad2-bad1; + if(check_only) + return d_badness; /* @@ -2079,12 +2080,9 @@ bool MeshOptimize3d :: SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, swap3 = !swap2 && (bad3 < bad1); } - - if (swap2 || swap3) - { - do_swap = true; - if(check_only) return do_swap; - } + d_badness = swap2 ? bad2-bad1 : bad3-bad1; + if(check_only) + return d_badness; if (swap2) { @@ -2279,8 +2277,9 @@ bool MeshOptimize3d :: SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, if (bestl != -1) { // (*mycout) << nsuround << "->" << 2 * (nsuround-2) << " " << flush; - do_swap = true; - if(check_only) return do_swap; + d_badness = badopt-bad1; + if(check_only) + return d_badness; for (int k = bestl+1; k <= nsuround + bestl - 2; k++) { @@ -2323,7 +2322,7 @@ bool MeshOptimize3d :: SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, } } } - return do_swap; + return d_badness; } void MeshOptimize3d :: SwapImprove (Mesh & mesh, OPTIMIZEGOAL goal, @@ -2373,7 +2372,7 @@ void MeshOptimize3d :: SwapImprove (Mesh & mesh, OPTIMIZEGOAL goal, Array> edges; BuildEdgeList(mesh, elementsonnode, edges); - Array candidate_edges(edges.Size()); + Array> candidate_edges(edges.Size()); std::atomic improvement_counter(0); tloop.Start(); @@ -2386,18 +2385,22 @@ void MeshOptimize3d :: SwapImprove (Mesh & mesh, OPTIMIZEGOAL goal, break; auto [pi0, pi1] = edges[i]; - if(SwapImproveEdge (mesh, goal, working_elements, elementsonnode, faces, pi0, pi1, true)) - candidate_edges[improvement_counter++] = i; + double d_badness = SwapImproveEdge (mesh, goal, working_elements, elementsonnode, faces, pi0, pi1, true); + if(d_badness<0.0) + { + int index = improvement_counter++; + candidate_edges[index] = make_tuple(d_badness, i); + } } }); auto edges_with_improvement = candidate_edges.Part(0, improvement_counter.load()); QuickSort(edges_with_improvement); - for(auto ei : edges_with_improvement) + for(auto [d_badness, ei] : edges_with_improvement) { auto [pi0,pi1] = edges[ei]; - if(SwapImproveEdge (mesh, goal, working_elements, elementsonnode, faces, pi0, pi1, false)) + if(SwapImproveEdge (mesh, goal, working_elements, elementsonnode, faces, pi0, pi1, false) < 0.0) cnt++; } diff --git a/libsrc/meshing/improve3.hpp b/libsrc/meshing/improve3.hpp index 21fdcce6..0ddcc484 100644 --- a/libsrc/meshing/improve3.hpp +++ b/libsrc/meshing/improve3.hpp @@ -25,7 +25,7 @@ public: void SplitImprove (Mesh & mesh, OPTIMIZEGOAL goal = OPT_QUALITY); - bool SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, const NgBitArray * working_elements, Table & elementsonnode, INDEX_3_HASHTABLE & faces, PointIndex pi1, PointIndex pi2, bool check_only=false); + double SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, const NgBitArray * working_elements, Table & elementsonnode, INDEX_3_HASHTABLE & faces, PointIndex pi1, PointIndex pi2, bool check_only=false); void SwapImprove (Mesh & mesh, OPTIMIZEGOAL goal = OPT_QUALITY, const NgBitArray * working_elements = NULL); void SwapImproveSequential (Mesh & mesh, OPTIMIZEGOAL goal = OPT_QUALITY, diff --git a/tests/pytest/results.json b/tests/pytest/results.json index 7699ce00..e8d57ab9 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -73,39 +73,39 @@ "ne2d": 140, "ne3d": 165, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 9, 13, 23, 20, 31, 25, 21, 14, 6, 1]", - "total_badness": 233.73328932 + "total_badness": 233.73328914 }, { "angles_tet": [ - 24.774, - 131.74 + 25.801, + 134.97 ], "angles_trig": [ 24.858, - 107.08 + 111.88 ], "ne1d": 181, "ne2d": 325, - "ne3d": 528, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 19, 38, 53, 74, 80, 99, 85, 63, 9]", - "total_badness": 687.31675405 + "ne3d": 520, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 17, 38, 51, 64, 81, 91, 93, 61, 15]", + "total_badness": 673.69458466 } ], "boxcyl.geo": [ { "angles_tet": [ - 22.371, - 139.91 + 22.391, + 135.51 ], "angles_trig": [ - 22.551, + 22.547, 121.98 ], "ne1d": 190, "ne2d": 468, - "ne3d": 846, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 31, 93, 78, 103, 80, 92, 103, 102, 84, 56, 21]", - "total_badness": 1229.0231928 + "ne3d": 845, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 29, 90, 89, 74, 95, 96, 93, 98, 99, 60, 21]", + "total_badness": 1218.9142866 }, { "angles_tet": [ @@ -118,86 +118,86 @@ ], "ne1d": 94, "ne2d": 114, - "ne3d": 157, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 3, 8, 13, 13, 15, 7, 12, 11, 19, 14, 12, 21, 5, 3]", - "total_badness": 260.17372209 + "ne3d": 151, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 6, 12, 13, 7, 5, 10, 6, 18, 23, 15, 23, 9, 2]", + "total_badness": 235.71475569 }, { "angles_tet": [ - 15.799, - 159.93 + 16.335, + 150.13 ], "angles_trig": [ - 16.585, - 144.56 + 22.011, + 118.9 ], "ne1d": 136, "ne2d": 222, - "ne3d": 386, - "quality_histogram": "[0, 0, 0, 1, 2, 3, 2, 7, 8, 15, 16, 36, 36, 59, 53, 55, 58, 19, 15, 1]", - "total_badness": 590.51625062 + "ne3d": 376, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 2, 2, 6, 20, 29, 32, 62, 63, 67, 49, 24, 17, 2]", + "total_badness": 538.32692177 }, { "angles_tet": [ - 22.38, - 139.62 + 22.392, + 135.93 ], "angles_trig": [ - 22.552, + 22.547, 121.98 ], "ne1d": 190, "ne2d": 468, - "ne3d": 833, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 32, 89, 78, 83, 86, 83, 106, 103, 89, 62, 21]", - "total_badness": 1200.9010008 + "ne3d": 838, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 30, 88, 87, 63, 105, 87, 95, 98, 101, 59, 24]", + "total_badness": 1206.145501 }, { "angles_tet": [ - 25.378, - 140.35 + 26.449, + 140.15 ], "angles_trig": [ - 26.299, - 121.05 + 24.477, + 114.57 ], "ne1d": 284, "ne2d": 938, - "ne3d": 3742, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 25, 55, 131, 247, 484, 640, 754, 710, 529, 161]", - "total_badness": 4685.7832014 + "ne3d": 3808, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 12, 47, 117, 277, 497, 641, 782, 746, 506, 177]", + "total_badness": 4753.2608817 }, { "angles_tet": [ - 25.096, - 141.93 + 28.77, + 136.82 ], "angles_trig": [ - 27.282, - 118.08 + 24.852, + 123.15 ], "ne1d": 456, "ne2d": 2496, - "ne3d": 18713, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 10, 39, 127, 338, 795, 1684, 2888, 4053, 4409, 3223, 1146]", - "total_badness": 22695.778021 + "ne3d": 18753, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 32, 96, 275, 747, 1627, 2885, 4041, 4511, 3355, 1181]", + "total_badness": 22636.690026 } ], "circle_on_cube.geo": [ { "angles_tet": [ - 19.311, - 150.68 + 21.273, + 137.67 ], "angles_trig": [ - 23.838, - 115.5 + 24.517, + 113.53 ], "ne1d": 94, "ne2d": 170, - "ne3d": 637, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 4, 5, 18, 38, 54, 74, 84, 109, 110, 73, 55, 12]", - "total_badness": 863.74076861 + "ne3d": 631, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 12, 30, 55, 76, 104, 120, 97, 70, 49, 10]", + "total_badness": 851.6214528 }, { "angles_tet": [ @@ -212,159 +212,159 @@ "ne2d": 38, "ne3d": 46, "quality_histogram": "[0, 0, 0, 0, 0, 2, 2, 4, 8, 8, 6, 7, 5, 1, 2, 1, 0, 0, 0, 0]", - "total_badness": 97.323158335 + "total_badness": 97.323158326 }, { "angles_tet": [ - 24.281, - 134.61 + 26.568, + 131.32 ], "angles_trig": [ - 23.344, - 115.83 + 23.604, + 115.75 ], "ne1d": 62, "ne2d": 96, "ne3d": 196, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 8, 8, 27, 34, 42, 33, 20, 9, 6, 1]", - "total_badness": 282.75693303 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 8, 13, 31, 32, 43, 33, 18, 6, 9, 0]", + "total_badness": 281.47956507 }, { "angles_tet": [ - 25.358, - 135.05 + 27.256, + 136.88 ], "angles_trig": [ - 23.767, - 114.14 + 25.056, + 112.86 ], "ne1d": 94, "ne2d": 170, - "ne3d": 622, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 12, 26, 39, 80, 70, 113, 112, 93, 62, 10]", - "total_badness": 821.68699443 + "ne3d": 617, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 8, 24, 45, 83, 93, 110, 109, 75, 54, 12]", + "total_badness": 818.76482812 }, { "angles_tet": [ - 24.582, - 136.66 + 28.642, + 131.64 ], "angles_trig": [ - 27.209, - 113.64 + 27.582, + 112.81 ], "ne1d": 138, "ne2d": 384, - "ne3d": 2028, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 9, 28, 67, 157, 250, 347, 419, 398, 261, 88]", - "total_badness": 2540.7133216 + "ne3d": 1988, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 11, 49, 142, 225, 336, 439, 417, 280, 85]", + "total_badness": 2458.7297408 }, { "angles_tet": [ - 22.092, - 143.64 + 26.261, + 136.67 ], "angles_trig": [ - 24.9, - 120.59 + 24.333, + 115.58 ], "ne1d": 224, "ne2d": 944, - "ne3d": 11860, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 29, 85, 211, 518, 1135, 1851, 2527, 2686, 2118, 688]", - "total_badness": 14411.259826 + "ne3d": 11879, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 15, 66, 190, 486, 1113, 1774, 2543, 2771, 2231, 685]", + "total_badness": 14361.247834 } ], "cone.geo": [ { "angles_tet": [ - 13.924, - 150.81 + 13.001, + 151.67 ], "angles_trig": [ - 15.502, - 125.18 + 18.841, + 121.55 ], "ne1d": 64, "ne2d": 722, - "ne3d": 1263, - "quality_histogram": "[0, 0, 0, 0, 0, 3, 4, 14, 48, 62, 95, 129, 141, 162, 163, 145, 107, 112, 61, 17]", - "total_badness": 1927.4650748 + "ne3d": 1273, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 6, 15, 38, 56, 96, 131, 135, 153, 162, 152, 136, 115, 62, 14]", + "total_badness": 1925.8714141 }, { "angles_tet": [ - 7.1839, - 166.08 + 9.8354, + 165.47 ], "angles_trig": [ - 7.6255, - 154.84 + 11.866, + 146.87 ], "ne1d": 32, "ne2d": 220, - "ne3d": 700, - "quality_histogram": "[0, 0, 13, 49, 51, 51, 51, 46, 63, 42, 38, 49, 53, 50, 42, 33, 27, 21, 18, 3]", - "total_badness": 1807.5903418 + "ne3d": 682, + "quality_histogram": "[0, 0, 3, 6, 27, 29, 43, 59, 57, 69, 78, 72, 47, 60, 28, 31, 30, 24, 12, 7]", + "total_badness": 1446.4542095 }, { "angles_tet": [ - 1.7643, - 174.36 + 2.1733, + 172.69 ], "angles_trig": [ - 6.9619, - 160.4 + 6.6643, + 162.43 ], "ne1d": 48, "ne2d": 428, - "ne3d": 930, - "quality_histogram": "[6, 33, 75, 70, 53, 52, 44, 63, 73, 77, 65, 88, 62, 37, 46, 30, 20, 21, 15, 0]", - "total_badness": 3263.5820874 + "ne3d": 923, + "quality_histogram": "[6, 19, 49, 47, 58, 49, 52, 62, 83, 82, 70, 88, 52, 49, 61, 32, 23, 28, 11, 2]", + "total_badness": 2830.4770758 }, { "angles_tet": [ - 14.168, - 149.33 + 17.241, + 144.22 ], "angles_trig": [ - 18.275, - 123.81 + 17.777, + 121.5 ], "ne1d": 64, "ne2d": 722, - "ne3d": 1244, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 10, 25, 61, 77, 117, 140, 158, 172, 138, 144, 118, 66, 15]", - "total_badness": 1843.7405821 + "ne3d": 1246, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 11, 23, 42, 90, 110, 129, 162, 174, 152, 136, 131, 67, 18]", + "total_badness": 1823.124854 }, { "angles_tet": [ - 19.863, - 144.26 + 17.406, + 142.43 ], "angles_trig": [ - 22.797, - 126.63 + 19.91, + 123.02 ], "ne1d": 96, "ne2d": 1660, - "ne3d": 4395, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 14, 39, 86, 147, 270, 427, 584, 724, 725, 723, 492, 162]", - "total_badness": 5745.9242938 + "ne3d": 4458, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 8, 32, 70, 131, 272, 410, 628, 728, 793, 731, 514, 139]", + "total_badness": 5796.7549854 }, { "angles_tet": [ - 23.928, - 143.79 + 22.764, + 140.56 ], "angles_trig": [ - 23.981, - 123.07 + 27.263, + 120.46 ], "ne1d": 160, "ne2d": 4748, - "ne3d": 27365, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 8, 35, 121, 352, 715, 1535, 2882, 4456, 5703, 5878, 4303, 1377]", - "total_badness": 33766.111622 + "ne3d": 27254, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 16, 71, 235, 659, 1375, 2774, 4392, 5618, 6099, 4470, 1540]", + "total_badness": 33350.665768 } ], "cube.geo": [ @@ -430,23 +430,23 @@ }, { "angles_tet": [ - 28.058, - 136.51 + 27.354, + 136.27 ], "angles_trig": [ - 23.62, - 124.99 + 21.671, + 126.93 ], "ne1d": 48, "ne2d": 36, "ne3d": 57, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 2, 12, 14, 4, 12, 2, 2, 3, 0]", - "total_badness": 84.416883473 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 1, 10, 12, 9, 12, 4, 1, 2, 0]", + "total_badness": 83.840161698 }, { "angles_tet": [ 21.865, - 138.69 + 136.72 ], "angles_trig": [ 22.37, @@ -454,46 +454,46 @@ ], "ne1d": 72, "ne2d": 116, - "ne3d": 167, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 2, 5, 5, 16, 8, 18, 30, 31, 29, 11, 7]", - "total_badness": 224.7322738 + "ne3d": 169, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 4, 8, 13, 12, 20, 28, 33, 27, 11, 6]", + "total_badness": 228.41837612 } ], "cubeandring.geo": [ { "angles_tet": [ - 2.8878, - 174.5 + 5.0886, + 168.15 ], "angles_trig": [ - 10.113, + 11.704, 150.46 ], "ne1d": 262, "ne2d": 726, - "ne3d": 2225, - "quality_histogram": "[0, 10, 19, 36, 98, 105, 126, 110, 98, 59, 71, 87, 153, 186, 272, 275, 223, 160, 109, 28]", - "total_badness": 4466.5881396 + "ne3d": 2165, + "quality_histogram": "[0, 4, 9, 26, 77, 106, 122, 104, 88, 59, 50, 85, 108, 191, 251, 255, 262, 219, 117, 32]", + "total_badness": 4081.3030242 }, { "angles_tet": [ - 15.685, - 157.54 + 16.741, + 140.94 ], "angles_trig": [ 19.264, - 124.57 + 120.29 ], "ne1d": 134, "ne2d": 164, - "ne3d": 250, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 4, 4, 6, 13, 24, 28, 43, 40, 34, 25, 19, 7, 2]", - "total_badness": 372.39445714 + "ne3d": 252, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 2, 3, 11, 30, 31, 34, 40, 38, 33, 17, 7, 1]", + "total_badness": 369.95189199 }, { "angles_tet": [ - 11.693, - 163.42 + 21.008, + 143.76 ], "angles_trig": [ 21.077, @@ -501,54 +501,54 @@ ], "ne1d": 190, "ne2d": 300, - "ne3d": 646, - "quality_histogram": "[0, 0, 0, 1, 2, 0, 0, 2, 10, 27, 58, 69, 66, 107, 87, 91, 60, 44, 20, 2]", - "total_badness": 978.54289744 + "ne3d": 637, + "quality_histogram": "[0, 0, 0, 0, 1, 0, 0, 2, 9, 26, 46, 56, 73, 108, 88, 92, 64, 48, 22, 2]", + "total_badness": 947.83482937 }, { "angles_tet": [ - 5.4096, - 166.24 + 6.3388, + 162.18 ], "angles_trig": [ - 10.783, - 156.33 + 13.547, + 150.69 ], "ne1d": 262, "ne2d": 726, - "ne3d": 2087, - "quality_histogram": "[0, 2, 12, 18, 54, 90, 113, 95, 88, 55, 41, 59, 111, 196, 254, 299, 260, 193, 114, 33]", - "total_badness": 3774.9667473 + "ne3d": 2042, + "quality_histogram": "[0, 2, 2, 14, 38, 85, 114, 100, 71, 41, 42, 59, 98, 174, 237, 295, 282, 216, 136, 36]", + "total_badness": 3537.8190966 }, { "angles_tet": [ - 18.754, - 147.58 + 23.906, + 141.88 ], "angles_trig": [ - 17.855, - 114.9 + 23.172, + 119.78 ], "ne1d": 378, "ne2d": 1412, - "ne3d": 7741, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 11, 17, 64, 139, 294, 516, 862, 1328, 1545, 1486, 1147, 331]", - "total_badness": 9711.521562 + "ne3d": 7695, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 8, 36, 113, 286, 492, 840, 1340, 1570, 1501, 1167, 340]", + "total_badness": 9589.479693 }, { "angles_tet": [ - 21.111, - 146.93 + 24.428, + 143.27 ], "angles_trig": [ - 22.35, - 120.66 + 24.968, + 121.61 ], "ne1d": 624, "ne2d": 3944, - "ne3d": 38347, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 18, 40, 131, 351, 853, 2070, 3906, 6037, 7925, 8484, 6438, 2092]", - "total_badness": 47000.212862 + "ne3d": 38343, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 12, 72, 229, 696, 1857, 3739, 6022, 8041, 8829, 6603, 2238]", + "total_badness": 46633.485738 } ], "cubeandspheres.geo": [ @@ -633,650 +633,650 @@ 154.37 ], "angles_trig": [ - 18.947, + 19.374, 128.1 ], "ne1d": 428, "ne2d": 926, - "ne3d": 1074, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 23, 50, 36, 109, 137, 96, 117, 160, 162, 67, 60, 32, 22]", - "total_badness": 1675.8711911 + "ne3d": 1071, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 3, 22, 48, 36, 110, 131, 98, 115, 161, 162, 68, 66, 30, 20]", + "total_badness": 1667.9770545 } ], "cubemcyl.geo": [ { "angles_tet": [ - 15.965, - 154.0 + 19.041, + 148.34 ], "angles_trig": [ - 19.053, - 133.76 + 19.915, + 129.27 ], "ne1d": 142, "ne2d": 2488, - "ne3d": 20783, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 26, 94, 208, 408, 708, 1158, 1848, 2485, 3200, 3251, 3127, 2474, 1418, 376]", - "total_badness": 28813.276387 + "ne3d": 20432, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 14, 54, 187, 395, 899, 1585, 2434, 3099, 3519, 3425, 2759, 1616, 443]", + "total_badness": 27337.360732 }, { "angles_tet": [ 20.47, - 145.86 + 140.16 ], "angles_trig": [ - 19.065, - 136.17 + 17.584, + 126.83 ], "ne1d": 64, "ne2d": 642, - "ne3d": 3214, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 7, 13, 34, 74, 140, 230, 351, 455, 533, 531, 378, 284, 151, 31]", - "total_badness": 4592.7629352 + "ne3d": 3267, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 11, 22, 60, 129, 205, 354, 477, 540, 526, 443, 324, 153, 22]", + "total_badness": 4603.5864383 }, { "angles_tet": [ - 18.957, - 152.21 + 22.711, + 143.32 ], "angles_trig": [ - 15.347, - 130.4 + 17.713, + 129.68 ], "ne1d": 102, "ne2d": 1402, - "ne3d": 8234, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 12, 30, 67, 143, 309, 586, 856, 1050, 1271, 1291, 1179, 825, 462, 151]", - "total_badness": 11552.618825 + "ne3d": 8240, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 4, 30, 67, 191, 423, 704, 1053, 1363, 1371, 1302, 971, 578, 181]", + "total_badness": 11153.756744 }, { "angles_tet": [ - 19.96, - 148.01 + 21.242, + 144.44 ], "angles_trig": [ - 21.126, - 127.16 + 21.964, + 122.59 ], "ne1d": 142, "ne2d": 2488, - "ne3d": 19499, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 5, 27, 106, 226, 529, 1209, 2008, 2862, 3440, 3576, 3083, 1921, 507]", - "total_badness": 25390.546576 + "ne3d": 19443, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 11, 46, 120, 425, 1007, 1816, 2772, 3553, 3744, 3270, 2124, 553]", + "total_badness": 24928.621019 }, { "angles_tet": [ - 20.31, - 146.81 + 22.179, + 143.28 ], "angles_trig": [ - 22.349, - 123.87 + 22.998, + 122.28 ], "ne1d": 210, "ne2d": 5508, - "ne3d": 88767, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 26, 120, 352, 982, 2386, 5436, 9851, 14528, 18286, 19003, 13703, 4092]", - "total_badness": 109764.47526 + "ne3d": 89117, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 7, 64, 213, 756, 2149, 5057, 9544, 14526, 18574, 19578, 14242, 4407]", + "total_badness": 109474.0737 }, { "angles_tet": [ - 19.195, - 152.34 + 22.072, + 141.68 ], "angles_trig": [ - 23.93, - 127.18 + 23.818, + 123.89 ], "ne1d": 362, "ne2d": 15122, - "ne3d": 524413, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 23, 86, 347, 1131, 3167, 9094, 23844, 49271, 81498, 111440, 122044, 93488, 28977]", - "total_badness": 636787.56071 + "ne3d": 525200, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 82, 526, 2296, 7742, 21372, 47326, 79983, 111877, 125226, 97896, 30868]", + "total_badness": 633738.01838 } ], "cubemsphere.geo": [ { "angles_tet": [ - 16.908, - 150.99 + 18.771, + 145.97 ], "angles_trig": [ - 19.951, - 128.55 + 21.404, + 128.34 ], "ne1d": 90, "ne2d": 702, - "ne3d": 4867, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 5, 17, 43, 80, 172, 274, 422, 600, 765, 725, 748, 588, 317, 111]", - "total_badness": 6717.4363413 + "ne3d": 4831, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 6, 10, 61, 94, 209, 377, 599, 716, 821, 772, 684, 378, 103]", + "total_badness": 6481.1281561 }, { "angles_tet": [ - 15.907, - 149.0 + 17.436, + 150.08 ], "angles_trig": [ - 12.785, - 137.16 + 14.077, + 130.7 ], "ne1d": 44, "ne2d": 274, - "ne3d": 768, - "quality_histogram": "[0, 0, 0, 0, 1, 5, 9, 11, 26, 62, 72, 78, 114, 95, 91, 78, 74, 24, 22, 6]", - "total_badness": 1237.8358347 + "ne3d": 769, + "quality_histogram": "[0, 0, 0, 0, 1, 3, 9, 15, 28, 41, 69, 78, 114, 88, 96, 95, 62, 35, 31, 4]", + "total_badness": 1221.5992458 }, { "angles_tet": [ - 20.765, - 150.5 + 20.966, + 149.27 ], "angles_trig": [ - 22.025, - 122.56 + 22.441, + 124.17 ], "ne1d": 68, "ne2d": 402, - "ne3d": 1600, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 4, 26, 61, 119, 170, 232, 277, 269, 214, 148, 71, 7]", - "total_badness": 2248.6479915 + "ne3d": 1570, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 10, 25, 53, 109, 194, 185, 264, 251, 214, 153, 94, 16]", + "total_badness": 2195.1465077 }, { "angles_tet": [ - 20.874, - 146.16 + 24.932, + 138.52 ], "angles_trig": [ - 20.643, - 124.01 + 22.159, + 120.51 ], "ne1d": 90, "ne2d": 702, - "ne3d": 4618, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 4, 24, 53, 140, 293, 465, 706, 805, 841, 747, 418, 120]", - "total_badness": 6022.3952178 + "ne3d": 4638, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 20, 47, 101, 244, 467, 692, 821, 890, 755, 457, 141]", + "total_badness": 5985.8946244 }, { "angles_tet": [ - 20.202, - 147.7 + 25.469, + 139.67 ], "angles_trig": [ - 23.911, - 127.56 + 24.507, + 122.25 ], "ne1d": 146, "ne2d": 1492, - "ne3d": 17800, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 7, 23, 89, 208, 524, 1085, 1942, 2969, 3729, 3811, 2675, 736]", - "total_badness": 22074.204803 + "ne3d": 17944, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 14, 55, 167, 422, 1012, 1922, 3070, 3860, 3747, 2850, 824]", + "total_badness": 22091.45854 }, { "angles_tet": [ - 16.707, - 151.25 + 23.568, + 140.8 ], "angles_trig": [ - 22.482, - 126.62 + 24.037, + 125.3 ], "ne1d": 248, "ne2d": 4354, - "ne3d": 113716, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 5, 12, 43, 136, 381, 909, 2353, 5720, 11280, 18112, 23886, 25957, 19090, 5832]", - "total_badness": 139103.15382 + "ne3d": 113873, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 22, 142, 565, 1781, 4999, 10821, 18217, 24198, 26644, 20232, 6250]", + "total_badness": 138024.45404 } ], "cylinder.geo": [ { "angles_tet": [ - 20.283, - 142.15 + 19.066, + 144.66 ], "angles_trig": [ - 22.846, - 116.55 + 22.516, + 111.49 ], "ne1d": 52, "ne2d": 288, - "ne3d": 410, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 2, 8, 14, 31, 47, 57, 67, 64, 53, 44, 13, 9]", - "total_badness": 577.74781759 + "ne3d": 403, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 1, 4, 15, 36, 40, 54, 81, 51, 55, 40, 13, 11]", + "total_badness": 567.02829865 }, { "angles_tet": [ - 32.792, - 125.93 + 35.352, + 114.72 ], "angles_trig": [ - 30.35, - 116.69 + 32.903, + 97.687 ], "ne1d": 24, "ne2d": 66, - "ne3d": 124, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 9, 12, 16, 23, 39, 12, 5]", - "total_badness": 153.9684245 + "ne3d": 107, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 7, 15, 12, 16, 25, 14, 15]", + "total_badness": 129.9282285 }, { "angles_tet": [ - 9.0715, - 166.36 + 15.283, + 154.13 ], "angles_trig": [ - 12.882, - 145.84 + 18.507, + 126.84 ], "ne1d": 36, "ne2d": 152, - "ne3d": 376, - "quality_histogram": "[0, 0, 0, 8, 18, 19, 17, 43, 35, 17, 29, 16, 18, 42, 20, 21, 38, 16, 12, 7]", - "total_badness": 793.09247202 + "ne3d": 329, + "quality_histogram": "[0, 0, 0, 0, 0, 4, 13, 28, 34, 14, 22, 24, 26, 29, 34, 19, 41, 22, 12, 7]", + "total_badness": 573.53528334 }, { "angles_tet": [ - 20.083, - 141.64 + 19.059, + 144.67 ], "angles_trig": [ - 22.107, - 118.69 + 22.497, + 111.48 ], "ne1d": 52, "ne2d": 288, - "ne3d": 404, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 2, 4, 15, 25, 38, 68, 66, 55, 55, 52, 15, 8]", - "total_badness": 562.71987918 + "ne3d": 403, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 1, 4, 15, 36, 40, 54, 81, 51, 56, 39, 13, 11]", + "total_badness": 567.02256434 }, { "angles_tet": [ - 21.957, - 139.74 + 22.02, + 138.96 ], "angles_trig": [ - 25.008, - 119.81 + 24.393, + 119.51 ], "ne1d": 76, "ne2d": 636, - "ne3d": 1146, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 12, 34, 57, 101, 121, 179, 190, 199, 137, 96, 17]", - "total_badness": 1547.7672308 + "ne3d": 1193, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 35, 58, 101, 143, 198, 194, 198, 145, 89, 22]", + "total_badness": 1610.5397081 }, { "angles_tet": [ - 26.272, - 139.98 + 26.431, + 137.01 ], "angles_trig": [ - 27.921, - 120.23 + 29.429, + 114.09 ], "ne1d": 124, "ne2d": 1672, - "ne3d": 8039, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 16, 52, 160, 405, 772, 1246, 1710, 1808, 1421, 444]", - "total_badness": 9788.5339464 + "ne3d": 8121, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 9, 50, 133, 416, 799, 1302, 1711, 1834, 1397, 468]", + "total_badness": 9872.9589801 } ], "cylsphere.geo": [ { "angles_tet": [ - 17.345, - 141.22 + 16.89, + 141.12 ], "angles_trig": [ - 17.322, - 121.83 + 17.583, + 119.1 ], "ne1d": 104, "ne2d": 496, - "ne3d": 711, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 9, 15, 36, 63, 90, 107, 103, 99, 56, 60, 50, 17, 2]", - "total_badness": 1105.8880942 + "ne3d": 707, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 8, 14, 34, 56, 93, 112, 103, 97, 52, 69, 49, 14, 3]", + "total_badness": 1093.5696529 }, { "angles_tet": [ - 11.989, - 163.66 + 11.216, + 162.1 ], "angles_trig": [ - 12.383, - 154.84 + 11.297, + 157.18 ], "ne1d": 48, "ne2d": 142, - "ne3d": 242, - "quality_histogram": "[0, 0, 0, 16, 20, 29, 22, 22, 6, 8, 6, 14, 5, 13, 14, 25, 18, 13, 11, 0]", - "total_badness": 604.89450225 + "ne3d": 240, + "quality_histogram": "[0, 0, 0, 15, 15, 39, 22, 23, 9, 4, 1, 5, 6, 15, 17, 35, 20, 8, 3, 3]", + "total_badness": 600.26723612 }, { "angles_tet": [ - 17.13, - 139.15 + 16.975, + 137.45 ], "angles_trig": [ - 17.276, - 122.05 + 17.533, + 120.6 ], "ne1d": 104, "ne2d": 496, - "ne3d": 709, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 5, 15, 29, 63, 86, 110, 109, 89, 69, 66, 45, 15, 4]", - "total_badness": 1092.3394563 + "ne3d": 706, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 5, 14, 31, 59, 94, 101, 111, 93, 65, 66, 46, 15, 3]", + "total_badness": 1086.526116 }, { "angles_tet": [ - 23.36, - 138.86 + 24.122, + 136.31 ], "angles_trig": [ - 20.916, - 121.19 + 20.921, + 117.93 ], "ne1d": 152, "ne2d": 1084, - "ne3d": 2798, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 5, 19, 44, 91, 162, 267, 345, 422, 507, 505, 322, 108]", - "total_badness": 3620.8176099 + "ne3d": 2876, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 19, 35, 100, 163, 262, 362, 452, 549, 486, 354, 89]", + "total_badness": 3717.0068038 }, { "angles_tet": [ - 18.426, - 141.96 + 21.966, + 141.66 ], "angles_trig": [ - 25.597, - 124.07 + 24.678, + 126.09 ], "ne1d": 248, "ne2d": 2820, - "ne3d": 17745, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 20, 57, 142, 331, 880, 1771, 2788, 3668, 3998, 3037, 1049]", - "total_badness": 21647.214644 + "ne3d": 17753, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 31, 104, 303, 725, 1654, 2787, 3759, 4114, 3205, 1066]", + "total_badness": 21493.852902 } ], "ellipsoid.geo": [ { "angles_tet": [ - 15.608, - 152.11 + 17.18, + 148.24 ], "angles_trig": [ - 18.3, - 125.11 + 18.74, + 123.79 ], "ne1d": 0, "ne2d": 704, - "ne3d": 1297, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 7, 14, 42, 76, 119, 157, 154, 160, 158, 142, 111, 89, 54, 14]", - "total_badness": 2009.8527353 + "ne3d": 1288, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 12, 35, 66, 96, 127, 161, 175, 155, 147, 142, 92, 55, 23]", + "total_badness": 1943.7694776 }, { "angles_tet": [ - 1.9897, - 175.64 + 3.2444, + 174.72 ], "angles_trig": [ - 4.4046, - 166.23 + 4.0664, + 165.5 ], "ne1d": 0, "ne2d": 192, - "ne3d": 915, - "quality_histogram": "[24, 146, 135, 112, 105, 65, 62, 41, 46, 43, 32, 26, 19, 24, 15, 10, 6, 1, 3, 0]", - "total_badness": 5760.7267346 + "ne3d": 898, + "quality_histogram": "[2, 121, 119, 126, 114, 100, 65, 46, 55, 37, 31, 24, 13, 16, 8, 9, 10, 0, 0, 2]", + "total_badness": 4890.5820005 }, { "angles_tet": [ - 18.187, - 147.6 + 19.919, + 134.24 ], "angles_trig": [ - 19.806, - 116.38 + 19.054, + 114.7 ], "ne1d": 0, "ne2d": 394, - "ne3d": 592, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 5, 9, 21, 38, 80, 86, 90, 99, 53, 48, 29, 22, 12]", - "total_badness": 893.18441542 + "ne3d": 597, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 6, 29, 49, 60, 87, 92, 86, 82, 48, 33, 15, 8]", + "total_badness": 899.55007686 }, { "angles_tet": [ - 18.725, - 144.28 + 19.369, + 144.19 ], "angles_trig": [ - 18.226, - 122.74 + 18.297, + 124.49 ], "ne1d": 0, "ne2d": 704, - "ne3d": 1282, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 10, 33, 59, 108, 136, 158, 156, 163, 153, 115, 97, 69, 23]", - "total_badness": 1929.3894181 + "ne3d": 1285, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 6, 32, 61, 67, 125, 157, 151, 179, 160, 155, 100, 67, 24]", + "total_badness": 1894.9301899 }, { "angles_tet": [ - 20.843, - 143.48 + 22.352, + 144.95 ], "angles_trig": [ - 23.059, - 122.67 + 22.933, + 115.76 ], "ne1d": 0, "ne2d": 1618, - "ne3d": 5569, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 23, 73, 130, 303, 511, 700, 922, 1025, 989, 693, 195]", - "total_badness": 7142.2540344 + "ne3d": 5619, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 15, 46, 131, 304, 463, 681, 893, 1027, 1081, 754, 221]", + "total_badness": 7143.079025 }, { "angles_tet": [ - 23.185, - 142.25 + 23.712, + 141.53 ], "angles_trig": [ - 26.409, - 123.29 + 27.221, + 119.7 ], "ne1d": 0, "ne2d": 4236, - "ne3d": 37387, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 17, 75, 239, 644, 1587, 3545, 5826, 7874, 8638, 6846, 2092]", - "total_badness": 45341.992565 + "ne3d": 37117, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 44, 184, 483, 1429, 3235, 5608, 7742, 8925, 7191, 2263]", + "total_badness": 44684.151242 } ], "ellipticcone.geo": [ { "angles_tet": [ - 18.933, - 144.15 + 17.696, + 148.03 ], "angles_trig": [ - 20.648, - 123.53 - ], - "ne1d": 174, - "ne2d": 1562, - "ne3d": 5180, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 18, 65, 115, 211, 361, 589, 766, 881, 904, 732, 405, 130]", - "total_badness": 6920.4601657 - }, - { - "angles_tet": [ - 16.487, - 156.55 - ], - "angles_trig": [ - 20.632, - 127.9 - ], - "ne1d": 86, - "ne2d": 380, - "ne3d": 585, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 5, 13, 17, 32, 57, 64, 73, 84, 89, 68, 47, 22, 12]", - "total_badness": 860.61770269 - }, - { - "angles_tet": [ - 16.099, - 152.06 - ], - "angles_trig": [ - 17.036, - 136.53 - ], - "ne1d": 130, - "ne2d": 864, - "ne3d": 1734, - "quality_histogram": "[0, 0, 0, 0, 0, 7, 9, 28, 37, 57, 85, 135, 132, 216, 225, 256, 238, 177, 100, 32]", - "total_badness": 2535.8367438 - }, - { - "angles_tet": [ - 19.919, - 143.23 - ], - "angles_trig": [ - 19.838, + 22.831, 122.76 ], "ne1d": 174, "ne2d": 1562, - "ne3d": 4943, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 15, 49, 116, 255, 456, 635, 917, 1005, 806, 517, 167]", - "total_badness": 6347.4280983 + "ne3d": 5179, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 12, 41, 90, 190, 296, 503, 717, 972, 960, 765, 460, 170]", + "total_badness": 6791.2847453 }, { "angles_tet": [ - 21.992, - 147.97 + 17.515, + 154.86 ], "angles_trig": [ - 20.703, - 123.53 + 18.772, + 127.9 + ], + "ne1d": 86, + "ne2d": 380, + "ne3d": 576, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 3, 4, 11, 25, 33, 61, 54, 71, 83, 79, 64, 47, 22, 17]", + "total_badness": 854.86560286 + }, + { + "angles_tet": [ + 16.279, + 155.23 + ], + "angles_trig": [ + 16.146, + 133.94 + ], + "ne1d": 130, + "ne2d": 864, + "ne3d": 1707, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 7, 21, 23, 42, 68, 102, 150, 186, 197, 269, 284, 209, 118, 29]", + "total_badness": 2408.1612987 + }, + { + "angles_tet": [ + 21.749, + 144.86 + ], + "angles_trig": [ + 25.521, + 119.99 + ], + "ne1d": 174, + "ne2d": 1562, + "ne3d": 4993, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 10, 43, 82, 190, 407, 651, 895, 1050, 901, 559, 201]", + "total_badness": 6324.738761 + }, + { + "angles_tet": [ + 20.935, + 144.66 + ], + "angles_trig": [ + 18.719, + 132.57 ], "ne1d": 258, "ne2d": 3468, - "ne3d": 13314, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 33, 103, 197, 351, 652, 1077, 1619, 2280, 2518, 2361, 1583, 535]", - "total_badness": 17113.967555 + "ne3d": 13471, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 8, 18, 67, 132, 305, 570, 999, 1594, 2335, 2604, 2480, 1787, 572]", + "total_badness": 17093.610487 }, { "angles_tet": [ - 18.422, - 146.5 + 19.639, + 144.83 ], "angles_trig": [ - 21.186, - 126.64 + 21.736, + 126.14 ], "ne1d": 432, "ne2d": 9544, - "ne3d": 69891, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 9, 37, 119, 313, 839, 1927, 4086, 7715, 11454, 14338, 14977, 10816, 3260]", - "total_badness": 86472.194086 + "ne3d": 69841, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 8, 29, 68, 223, 647, 1557, 3675, 7009, 11233, 14653, 15498, 11829, 3411]", + "total_badness": 85612.037608 } ], "ellipticcyl.geo": [ { "angles_tet": [ - 19.118, - 146.33 + 16.524, + 149.5 ], "angles_trig": [ - 22.174, - 124.24 + 21.243, + 122.35 ], "ne1d": 156, "ne2d": 996, - "ne3d": 2299, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 12, 15, 55, 86, 117, 235, 272, 372, 360, 358, 240, 144, 33]", - "total_badness": 3202.1380209 + "ne3d": 2251, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 10, 51, 75, 118, 218, 247, 339, 373, 356, 250, 161, 49]", + "total_badness": 3094.4761746 }, { "angles_tet": [ - 22.599, - 136.88 + 22.853, + 132.4 ], "angles_trig": [ - 23.125, - 107.81 + 21.921, + 108.66 ], "ne1d": 76, "ne2d": 238, - "ne3d": 325, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 18, 28, 26, 38, 68, 55, 45, 28, 11, 2]", - "total_badness": 459.61476239 + "ne3d": 318, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 16, 20, 33, 38, 67, 54, 49, 20, 11, 1]", + "total_badness": 450.48872415 }, { "angles_tet": [ - 19.987, - 148.46 + 20.733, + 143.0 ], "angles_trig": [ - 22.258, - 115.22 + 23.594, + 117.45 ], "ne1d": 116, "ne2d": 596, - "ne3d": 1129, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 2, 10, 28, 38, 75, 130, 159, 208, 199, 162, 100, 17]", - "total_badness": 1500.1384781 + "ne3d": 1126, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 9, 28, 29, 73, 131, 178, 186, 196, 165, 107, 21]", + "total_badness": 1489.487043 }, { "angles_tet": [ - 17.153, - 144.96 + 18.67, + 144.62 ], "angles_trig": [ - 22.173, - 123.09 + 23.116, + 121.16 ], "ne1d": 156, "ne2d": 996, - "ne3d": 2214, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 4, 40, 47, 89, 182, 262, 324, 362, 381, 279, 196, 46]", - "total_badness": 2974.3073079 + "ne3d": 2223, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 7, 27, 54, 105, 179, 229, 331, 394, 366, 287, 195, 47]", + "total_badness": 2982.3855227 }, { "angles_tet": [ - 20.357, - 141.36 + 24.468, + 138.03 ], "angles_trig": [ - 23.621, - 122.53 + 25.275, + 115.12 ], "ne1d": 232, "ne2d": 2212, - "ne3d": 8313, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 15, 37, 113, 263, 626, 1005, 1387, 1743, 1660, 1133, 327]", - "total_badness": 10392.004794 + "ne3d": 8292, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 15, 37, 90, 258, 586, 955, 1411, 1668, 1703, 1209, 359]", + "total_badness": 10319.810588 }, { "angles_tet": [ - 21.254, - 146.12 + 21.427, + 140.07 ], "angles_trig": [ - 22.961, - 120.91 + 23.929, + 119.81 ], "ne1d": 388, "ne2d": 6142, - "ne3d": 54975, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 12, 45, 127, 329, 844, 2554, 5100, 8469, 11479, 12855, 9876, 3283]", - "total_badness": 66669.096677 + "ne3d": 54717, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 62, 250, 720, 2125, 4823, 8219, 11623, 13212, 10219, 3446]", + "total_badness": 65897.718457 } ], "fichera.geo": [ { "angles_tet": [ - 24.34, - 140.85 + 35.188, + 126.84 ], "angles_trig": [ 35.264, @@ -1284,9 +1284,9 @@ ], "ne1d": 50, "ne2d": 38, - "ne3d": 40, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 4, 3, 5, 7, 8, 2, 1, 0, 2]", - "total_badness": 62.361996939 + "ne3d": 34, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 2, 9, 3, 10, 3, 0, 0, 3]", + "total_badness": 47.155868379 }, { "angles_tet": [ @@ -1320,8 +1320,8 @@ }, { "angles_tet": [ - 24.34, - 140.85 + 35.188, + 126.84 ], "angles_trig": [ 35.264, @@ -1329,29 +1329,29 @@ ], "ne1d": 50, "ne2d": 38, - "ne3d": 40, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 4, 3, 5, 7, 8, 2, 1, 0, 2]", - "total_badness": 62.361996939 + "ne3d": 34, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 2, 9, 3, 10, 3, 0, 0, 3]", + "total_badness": 47.155868379 }, { "angles_tet": [ - 25.229, - 133.14 + 25.061, + 136.16 ], "angles_trig": [ 29.251, - 111.18 + 110.29 ], "ne1d": 96, "ne2d": 120, - "ne3d": 211, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 6, 14, 22, 26, 38, 37, 41, 14, 9]", - "total_badness": 273.06134659 + "ne3d": 205, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 4, 13, 17, 26, 36, 40, 31, 22, 10]", + "total_badness": 264.77766512 }, { "angles_tet": [ - 26.198, - 137.42 + 26.621, + 137.76 ], "angles_trig": [ 22.737, @@ -1359,15 +1359,15 @@ ], "ne1d": 144, "ne2d": 274, - "ne3d": 510, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 8, 16, 34, 67, 79, 99, 78, 66, 48, 12]", - "total_badness": 673.19970182 + "ne3d": 489, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 20, 29, 59, 75, 95, 77, 74, 43, 13]", + "total_badness": 639.78974452 } ], "frame.step": [ { "angles_tet": [ - 2.1167, + 2.7663, 169.42 ], "angles_trig": [ @@ -1376,46 +1376,46 @@ ], "ne1d": 12694, "ne2d": 40504, - "ne3d": 218733, - "quality_histogram": "[4, 7, 19, 26, 34, 80, 334, 892, 2071, 3877, 6685, 11284, 17985, 25708, 31526, 35128, 33835, 27776, 17087, 4375]", - "total_badness": 300987.32592 + "ne3d": 217035, + "quality_histogram": "[2, 7, 6, 10, 13, 38, 104, 293, 948, 2202, 4751, 9102, 16010, 24305, 31395, 36541, 36662, 30391, 19284, 4971]", + "total_badness": 290345.32031 }, { "angles_tet": [ 2.296, - 175.7 + 175.61 ], "angles_trig": [ - 2.16, - 146.31 + 2.0087, + 175.57 ], "ne1d": 6026, "ne2d": 11450, - "ne3d": 30266, - "quality_histogram": "[3, 4, 4, 15, 27, 52, 144, 325, 794, 1146, 1804, 2656, 3402, 4054, 4470, 4132, 3244, 2343, 1324, 323]", - "total_badness": 45523.987082 + "ne3d": 30659, + "quality_histogram": "[3, 4, 8, 18, 26, 57, 158, 291, 798, 1106, 1681, 2709, 3238, 4075, 4533, 4309, 3453, 2498, 1351, 343]", + "total_badness": 45874.630632 }, { "angles_tet": [ - 1.8818, + 1.8662, 175.73 ], "angles_trig": [ 1.6035, - 166.47 + 174.13 ], "ne1d": 9704, "ne2d": 24550, - "ne3d": 95261, - "quality_histogram": "[7, 41, 55, 151, 370, 1084, 2131, 3122, 4208, 5545, 7047, 8851, 10433, 11502, 11477, 10373, 8376, 6104, 3497, 887]", - "total_badness": 157567.1736 + "ne3d": 95234, + "quality_histogram": "[10, 30, 47, 144, 375, 1073, 2109, 3137, 4186, 5488, 7023, 8891, 10539, 11468, 11436, 10390, 8429, 6086, 3487, 886]", + "total_badness": 157343.87525 } ], "hinge.stl": [ { "angles_tet": [ - 21.226, - 147.39 + 21.231, + 144.42 ], "angles_trig": [ 18.101, @@ -1423,24 +1423,24 @@ ], "ne1d": 456, "ne2d": 1220, - "ne3d": 1980, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 11, 19, 47, 65, 135, 159, 254, 309, 289, 269, 237, 142, 44]", - "total_badness": 2756.1867742 + "ne3d": 1990, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 8, 18, 40, 68, 124, 179, 249, 297, 309, 262, 257, 140, 39]", + "total_badness": 2756.3340439 }, { "angles_tet": [ - 7.7862, + 7.5286, 161.84 ], "angles_trig": [ - 7.0669, - 143.28 + 9.1007, + 148.89 ], "ne1d": 298, "ne2d": 610, - "ne3d": 798, - "quality_histogram": "[0, 0, 1, 9, 10, 6, 28, 14, 41, 51, 72, 81, 97, 98, 79, 82, 52, 48, 25, 4]", - "total_badness": 1395.9318106 + "ne3d": 787, + "quality_histogram": "[0, 0, 1, 9, 10, 4, 21, 15, 37, 42, 66, 85, 104, 95, 83, 89, 51, 47, 24, 4]", + "total_badness": 1354.692379 }, { "angles_tet": [ @@ -1448,34 +1448,34 @@ 157.43 ], "angles_trig": [ - 15.428, - 134.88 + 11.548, + 152.72 ], "ne1d": 370, "ne2d": 856, - "ne3d": 1144, - "quality_histogram": "[0, 0, 0, 1, 4, 6, 18, 28, 41, 51, 76, 117, 140, 147, 147, 148, 99, 70, 43, 8]", - "total_badness": 1817.5662995 + "ne3d": 1136, + "quality_histogram": "[0, 0, 0, 2, 4, 5, 14, 24, 38, 56, 79, 116, 136, 138, 156, 152, 98, 66, 43, 9]", + "total_badness": 1797.1086909 }, { "angles_tet": [ - 11.964, - 156.88 + 13.485, + 156.97 ], "angles_trig": [ 19.521, - 130.96 + 135.02 ], "ne1d": 516, "ne2d": 1574, - "ne3d": 2625, - "quality_histogram": "[0, 0, 0, 0, 1, 2, 4, 10, 41, 66, 110, 179, 253, 312, 372, 380, 333, 296, 218, 48]", - "total_badness": 3701.4387818 + "ne3d": 2597, + "quality_histogram": "[0, 0, 0, 0, 0, 4, 3, 6, 25, 48, 90, 173, 227, 322, 389, 382, 338, 326, 216, 48]", + "total_badness": 3604.1017054 }, { "angles_tet": [ - 19.877, - 146.81 + 15.942, + 153.4 ], "angles_trig": [ 21.493, @@ -1483,24 +1483,24 @@ ], "ne1d": 722, "ne2d": 2866, - "ne3d": 6605, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 1, 25, 48, 59, 177, 334, 665, 897, 1055, 1130, 1130, 838, 242]", - "total_badness": 8524.0032138 + "ne3d": 6698, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 2, 26, 31, 56, 169, 332, 647, 888, 1046, 1166, 1195, 882, 256]", + "total_badness": 8595.0135342 }, { "angles_tet": [ - 20.094, - 148.92 + 20.701, + 142.89 ], "angles_trig": [ - 20.856, - 124.08 + 22.443, + 124.89 ], "ne1d": 1862, "ne2d": 19474, - "ne3d": 136180, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 7, 31, 132, 391, 1019, 2826, 6825, 13187, 21357, 28846, 30587, 23490, 7479]", - "total_badness": 166221.42387 + "ne3d": 136616, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 16, 59, 293, 886, 2637, 6509, 13074, 21322, 29014, 31086, 23883, 7836]", + "total_badness": 166167.05414 } ], "lense.in2d": [ @@ -1658,189 +1658,189 @@ }, { "angles_tet": [ - 31.337, - 128.87 + 31.641, + 125.43 ], "angles_trig": [ 32.108, - 97.641 + 97.676 ], "ne1d": 80, "ne2d": 76, "ne3d": 88, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 10, 9, 21, 23, 7, 6, 1, 4]", - "total_badness": 121.1271847 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 6, 24, 21, 11, 5, 1, 5]", + "total_badness": 119.51330947 }, { "angles_tet": [ - 25.368, - 136.06 + 25.888, + 130.74 ], "angles_trig": [ 26.255, - 113.74 + 106.78 ], "ne1d": 122, "ne2d": 204, "ne3d": 326, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 11, 17, 43, 51, 53, 55, 51, 33, 6]", - "total_badness": 427.73309234 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 12, 19, 39, 41, 73, 58, 41, 29, 11]", + "total_badness": 425.73888937 } ], "manyholes.geo": [ { "angles_tet": [ - 11.024, - 157.73 + 14.385, + 155.18 ], "angles_trig": [ 13.429, - 138.83 + 141.4 ], "ne1d": 5886, "ne2d": 48052, - "ne3d": 179262, - "quality_histogram": "[0, 0, 0, 0, 7, 34, 52, 190, 559, 1394, 3332, 7622, 12534, 20021, 27619, 30066, 29961, 25045, 16810, 4016]", - "total_badness": 238415.32571 + "ne3d": 178778, + "quality_histogram": "[0, 0, 0, 0, 0, 5, 15, 82, 302, 823, 2352, 6219, 11001, 18996, 27378, 30679, 31231, 26885, 18302, 4508]", + "total_badness": 234001.02203 }, { "angles_tet": [ - 12.767, - 155.51 + 12.34, + 149.72 ], "angles_trig": [ - 14.03, + 14.887, 137.87 ], "ne1d": 2746, "ne2d": 13866, - "ne3d": 29255, - "quality_histogram": "[0, 0, 0, 0, 12, 22, 36, 163, 382, 903, 1510, 2377, 3268, 4375, 4191, 3761, 3120, 2567, 1846, 722]", - "total_badness": 42256.964101 + "ne3d": 29325, + "quality_histogram": "[0, 0, 0, 0, 14, 17, 42, 146, 371, 869, 1440, 2330, 3302, 4289, 4156, 3769, 3286, 2641, 1936, 717]", + "total_badness": 42177.790336 }, { "angles_tet": [ 11.183, - 158.0 + 156.56 ], "angles_trig": [ - 14.404, + 12.194, 138.76 ], "ne1d": 4106, "ne2d": 27994, - "ne3d": 70558, - "quality_histogram": "[0, 0, 0, 2, 32, 84, 194, 406, 841, 1669, 2783, 4416, 6997, 9372, 10151, 10346, 9564, 7474, 4487, 1740]", - "total_badness": 99764.452235 + "ne3d": 70627, + "quality_histogram": "[0, 0, 0, 1, 31, 76, 173, 355, 687, 1481, 2555, 4161, 6718, 9312, 10356, 10578, 9851, 7683, 4827, 1782]", + "total_badness": 98944.029805 } ], "manyholes2.geo": [ { "angles_tet": [ - 12.524, - 156.94 + 14.171, + 152.51 ], "angles_trig": [ - 14.039, - 144.68 + 15.466, + 134.18 ], "ne1d": 10202, "ne2d": 55380, - "ne3d": 127866, - "quality_histogram": "[0, 0, 0, 0, 5, 32, 101, 306, 842, 2081, 4519, 7983, 11838, 17786, 18634, 18254, 16922, 14537, 10444, 3582]", - "total_badness": 176665.61274 + "ne3d": 128050, + "quality_histogram": "[0, 0, 0, 0, 3, 31, 92, 255, 781, 1986, 4473, 7684, 11685, 17377, 18570, 18322, 17145, 15100, 10854, 3692]", + "total_badness": 176139.44449 } ], "matrix.geo": [ { "angles_tet": [ - 8.7425, - 169.61 + 8.793, + 169.51 ], "angles_trig": [ - 9.4044, - 158.86 + 9.0081, + 159.2 ], "ne1d": 174, "ne2d": 1198, - "ne3d": 5246, - "quality_histogram": "[0, 0, 39, 136, 119, 93, 134, 174, 148, 224, 329, 399, 532, 581, 603, 563, 474, 398, 241, 59]", - "total_badness": 9567.4544817 + "ne3d": 5195, + "quality_histogram": "[0, 0, 35, 130, 120, 83, 123, 149, 142, 185, 326, 347, 519, 643, 613, 574, 501, 419, 220, 66]", + "total_badness": 9312.8788458 }, { "angles_tet": [ - 9.3893, - 167.55 + 9.3063, + 168.95 ], "angles_trig": [ 7.9174, - 156.64 + 161.29 ], "ne1d": 106, "ne2d": 610, - "ne3d": 1936, - "quality_histogram": "[0, 1, 11, 66, 104, 143, 140, 142, 192, 179, 201, 199, 161, 135, 74, 57, 51, 46, 29, 5]", - "total_badness": 4606.0709672 + "ne3d": 1925, + "quality_histogram": "[0, 1, 8, 53, 94, 131, 144, 153, 184, 150, 232, 199, 160, 126, 83, 56, 60, 52, 33, 6]", + "total_badness": 4460.6379185 }, { "angles_tet": [ 6.3111, - 167.44 + 166.92 ], "angles_trig": [ - 8.5226, - 161.64 + 9.9928, + 159.03 ], "ne1d": 132, "ne2d": 830, - "ne3d": 2751, - "quality_histogram": "[0, 0, 4, 57, 63, 116, 124, 163, 226, 230, 333, 307, 270, 240, 206, 164, 105, 82, 43, 18]", - "total_badness": 5616.8677502 + "ne3d": 2764, + "quality_histogram": "[0, 0, 6, 34, 73, 104, 121, 141, 207, 263, 336, 307, 292, 221, 216, 173, 115, 95, 40, 20]", + "total_badness": 5528.4346023 }, { "angles_tet": [ - 8.3643, - 169.46 + 8.8485, + 169.45 ], "angles_trig": [ - 9.2702, - 159.43 + 8.8831, + 160.37 ], "ne1d": 174, "ne2d": 1198, - "ne3d": 5176, - "quality_histogram": "[0, 0, 31, 113, 115, 69, 111, 172, 123, 209, 285, 339, 485, 597, 595, 628, 503, 468, 254, 79]", - "total_badness": 9086.4626755 + "ne3d": 5125, + "quality_histogram": "[0, 0, 24, 114, 114, 73, 115, 136, 123, 180, 303, 344, 482, 597, 605, 617, 543, 441, 233, 81]", + "total_badness": 8942.8952661 }, { "angles_tet": [ - 12.515, - 149.31 + 12.758, + 144.88 ], "angles_trig": [ - 15.659, + 15.825, 143.02 ], "ne1d": 248, "ne2d": 2324, - "ne3d": 16341, - "quality_histogram": "[0, 0, 0, 0, 0, 7, 23, 64, 122, 219, 336, 666, 982, 1584, 2204, 2586, 2786, 2581, 1637, 544]", - "total_badness": 21749.164857 + "ne3d": 16197, + "quality_histogram": "[0, 0, 0, 0, 0, 5, 22, 53, 115, 169, 301, 650, 904, 1483, 2057, 2572, 2763, 2706, 1807, 590]", + "total_badness": 21350.026437 }, { "angles_tet": [ 18.203, - 148.52 + 145.24 ], "angles_trig": [ 17.821, - 133.29 + 128.91 ], "ne1d": 418, "ne2d": 5968, - "ne3d": 100573, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 18, 78, 192, 438, 1216, 2786, 6112, 10628, 15970, 20785, 21682, 15766, 4896]", - "total_badness": 124376.56219 + "ne3d": 101069, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 8, 49, 101, 356, 1010, 2560, 5576, 10199, 16122, 20707, 22180, 16876, 5319]", + "total_badness": 124148.28491 } ], "ortho.geo": [ @@ -1906,50 +1906,50 @@ }, { "angles_tet": [ - 30.374, - 135.21 + 27.31, + 136.31 ], "angles_trig": [ - 31.206, - 114.73 + 32.958, + 102.54 ], "ne1d": 48, "ne2d": 36, "ne3d": 57, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 8, 9, 8, 14, 5, 3, 1, 0]", - "total_badness": 83.060809673 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 2, 9, 11, 10, 12, 4, 1, 2, 0]", + "total_badness": 83.838340747 }, { "angles_tet": [ - 27.475, - 132.1 + 26.39, + 132.21 ], "angles_trig": [ 26.945, - 100.32 + 100.27 ], "ne1d": 72, "ne2d": 116, - "ne3d": 180, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 11, 12, 24, 35, 36, 29, 16, 9]", - "total_badness": 231.52239849 + "ne3d": 179, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 9, 9, 26, 31, 39, 31, 13, 12]", + "total_badness": 229.03446012 } ], "part1.stl": [ { "angles_tet": [ - 19.762, - 149.4 + 13.213, + 147.22 ], "angles_trig": [ - 20.599, - 125.75 + 19.94, + 128.03 ], "ne1d": 170, "ne2d": 448, "ne3d": 1260, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 6, 18, 26, 49, 88, 123, 148, 183, 193, 167, 145, 87, 23]", - "total_badness": 1772.4232339 + "quality_histogram": "[0, 0, 0, 0, 0, 2, 2, 9, 17, 21, 37, 69, 106, 152, 209, 198, 165, 149, 98, 26]", + "total_badness": 1750.899754 }, { "angles_tet": [ @@ -1962,153 +1962,153 @@ ], "ne1d": 134, "ne2d": 288, - "ne3d": 528, - "quality_histogram": "[0, 0, 0, 1, 3, 3, 5, 6, 14, 33, 36, 50, 63, 70, 69, 69, 55, 27, 20, 4]", - "total_badness": 830.65240856 + "ne3d": 527, + "quality_histogram": "[0, 0, 0, 2, 4, 1, 5, 6, 12, 28, 41, 42, 57, 73, 71, 55, 60, 43, 25, 2]", + "total_badness": 821.06101889 }, { "angles_tet": [ 21.121, - 145.72 + 139.87 ], "angles_trig": [ - 19.421, - 131.84 + 24.396, + 116.29 ], "ne1d": 194, "ne2d": 594, - "ne3d": 1710, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 10, 15, 40, 73, 127, 207, 260, 276, 284, 223, 153, 40]", - "total_badness": 2293.663372 + "ne3d": 1699, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 5, 17, 32, 53, 137, 190, 257, 263, 303, 245, 156, 40]", + "total_badness": 2254.3558031 }, { "angles_tet": [ - 20.561, - 150.37 + 25.805, + 141.2 ], "angles_trig": [ - 21.304, + 25.911, 119.75 ], "ne1d": 266, "ne2d": 986, - "ne3d": 4084, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 0, 3, 7, 32, 69, 144, 306, 518, 709, 824, 785, 548, 138]", - "total_badness": 5147.3961968 + "ne3d": 4110, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 12, 34, 53, 157, 293, 528, 685, 844, 803, 570, 128]", + "total_badness": 5173.2430553 }, { "angles_tet": [ - 21.607, - 147.03 + 23.304, + 138.08 ], "angles_trig": [ - 24.642, - 123.29 + 24.552, + 127.25 ], "ne1d": 674, "ne2d": 6854, - "ne3d": 82879, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 24, 61, 236, 636, 1697, 4041, 8182, 13143, 17498, 18865, 14126, 4366]", - "total_badness": 101181.66513 + "ne3d": 82752, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 17, 121, 418, 1371, 3648, 7603, 12815, 17667, 19635, 14903, 4550]", + "total_badness": 100228.92096 } ], "period.geo": [ { "angles_tet": [ - 13.762, - 154.57 + 11.121, + 150.16 ], "angles_trig": [ - 18.268, - 134.54 + 18.741, + 133.14 ], "ne1d": 344, "ne2d": 1136, - "ne3d": 3291, - "quality_histogram": "[0, 0, 0, 0, 1, 6, 24, 38, 73, 142, 237, 280, 363, 430, 473, 394, 337, 293, 163, 37]", - "total_badness": 4941.6426523 + "ne3d": 3271, + "quality_histogram": "[0, 0, 0, 0, 2, 4, 14, 25, 57, 98, 181, 263, 348, 435, 470, 451, 410, 296, 170, 47]", + "total_badness": 4769.4409222 }, { "angles_tet": [ - 9.8394, - 168.45 + 9.1864, + 168.11 ], "angles_trig": [ - 12.775, - 141.37 + 12.295, + 146.03 ], "ne1d": 160, "ne2d": 286, - "ne3d": 642, - "quality_histogram": "[0, 0, 4, 7, 11, 22, 28, 28, 40, 61, 66, 58, 59, 55, 53, 53, 40, 36, 16, 5]", - "total_badness": 1235.2259283 + "ne3d": 611, + "quality_histogram": "[0, 0, 1, 6, 8, 15, 20, 23, 35, 58, 66, 65, 63, 50, 48, 52, 42, 40, 15, 4]", + "total_badness": 1118.3047788 }, { "angles_tet": [ - 1.9156, - 176.45 + 8.6839, + 164.46 ], "angles_trig": [ - 2.8402, - 170.87 + 11.423, + 149.93 ], "ne1d": 232, "ne2d": 598, - "ne3d": 1654, - "quality_histogram": "[5, 18, 43, 57, 47, 59, 62, 79, 117, 120, 126, 148, 134, 159, 134, 113, 117, 66, 39, 11]", - "total_badness": 3928.2006441 + "ne3d": 1637, + "quality_histogram": "[0, 0, 1, 12, 24, 43, 73, 80, 119, 138, 142, 156, 149, 167, 143, 128, 99, 87, 59, 17]", + "total_badness": 3031.5898155 }, { "angles_tet": [ - 15.25, - 146.58 + 11.121, + 150.16 ], "angles_trig": [ - 18.527, - 134.98 + 19.105, + 134.29 ], "ne1d": 344, "ne2d": 1136, - "ne3d": 3221, - "quality_histogram": "[0, 0, 0, 0, 0, 3, 20, 24, 54, 111, 178, 268, 317, 453, 436, 450, 365, 311, 187, 44]", - "total_badness": 4704.9518805 + "ne3d": 3242, + "quality_histogram": "[0, 0, 0, 0, 2, 4, 12, 26, 47, 83, 167, 224, 320, 431, 478, 450, 428, 327, 190, 53]", + "total_badness": 4663.1458352 }, { "angles_tet": [ - 14.338, - 151.8 + 20.377, + 144.13 ], "angles_trig": [ - 22.31, - 123.65 + 23.234, + 122.41 ], "ne1d": 480, "ne2d": 2256, - "ne3d": 11709, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 2, 9, 15, 51, 115, 243, 547, 966, 1489, 2032, 2273, 2081, 1459, 426]", - "total_badness": 14941.96653 + "ne3d": 11567, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 5, 27, 92, 220, 494, 890, 1473, 1992, 2352, 2055, 1523, 443]", + "total_badness": 14638.419715 }, { "angles_tet": [ - 19.395, - 150.05 + 21.556, + 145.28 ], "angles_trig": [ 22.722, - 125.06 + 129.08 ], "ne1d": 820, "ne2d": 6226, - "ne3d": 68532, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 18, 76, 261, 684, 1675, 3888, 7222, 11072, 14234, 14852, 11076, 3469]", - "total_badness": 84325.408672 + "ne3d": 68692, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 11, 49, 188, 509, 1541, 3637, 6903, 11015, 14325, 15183, 11641, 3690]", + "total_badness": 84016.131742 } ], "plane.stl": [ { "angles_tet": [ 0.81532, - 175.91 + 175.03 ], "angles_trig": [ 1.1286, @@ -2116,29 +2116,29 @@ ], "ne1d": 890, "ne2d": 2626, - "ne3d": 8421, - "quality_histogram": "[6, 18, 26, 29, 58, 43, 65, 85, 138, 214, 343, 464, 720, 908, 1097, 1315, 1209, 968, 575, 140]", - "total_badness": 12967.318277 + "ne3d": 8335, + "quality_histogram": "[5, 19, 27, 26, 52, 45, 46, 61, 108, 192, 262, 419, 666, 871, 1144, 1269, 1297, 1065, 599, 162]", + "total_badness": 12602.083232 }, { "angles_tet": [ - 1.0663, + 1.0855, 174.05 ], "angles_trig": [ - 0.77944, - 170.54 + 3.4703, + 170.0 ], "ne1d": 570, "ne2d": 1202, - "ne3d": 1774, - "quality_histogram": "[8, 27, 47, 59, 51, 69, 95, 141, 155, 166, 171, 148, 140, 137, 118, 85, 69, 60, 22, 6]", - "total_badness": 4640.8658317 + "ne3d": 1771, + "quality_histogram": "[4, 27, 50, 46, 60, 72, 104, 134, 154, 166, 179, 154, 136, 133, 117, 82, 63, 58, 28, 4]", + "total_badness": 4553.9625805 }, { "angles_tet": [ 1.1034, - 172.01 + 172.02 ], "angles_trig": [ 2.4229, @@ -2146,9 +2146,9 @@ ], "ne1d": 724, "ne2d": 1730, - "ne3d": 3248, - "quality_histogram": "[6, 18, 34, 44, 44, 41, 60, 72, 119, 162, 214, 264, 370, 387, 415, 400, 299, 174, 99, 26]", - "total_badness": 6101.8771518 + "ne3d": 3232, + "quality_histogram": "[7, 17, 31, 43, 47, 39, 55, 72, 132, 154, 200, 242, 357, 412, 395, 396, 310, 192, 104, 27]", + "total_badness": 6043.769795 }, { "angles_tet": [ @@ -2156,29 +2156,29 @@ 169.94 ], "angles_trig": [ - 1.8573, - 161.93 + 3.0435, + 165.56 ], "ne1d": 956, "ne2d": 2828, - "ne3d": 8439, - "quality_histogram": "[3, 11, 37, 49, 40, 52, 58, 66, 92, 139, 212, 389, 524, 821, 1168, 1367, 1403, 1167, 678, 163]", - "total_badness": 12501.380591 + "ne3d": 8500, + "quality_histogram": "[3, 11, 34, 52, 41, 58, 52, 57, 82, 123, 197, 355, 535, 826, 1173, 1364, 1429, 1186, 733, 189]", + "total_badness": 12503.755575 }, { "angles_tet": [ - 1.1658, - 169.3 + 1.1599, + 169.09 ], "angles_trig": [ - 3.4032, - 150.86 + 1.0016, + 160.52 ], "ne1d": 1554, "ne2d": 6372, - "ne3d": 31592, - "quality_histogram": "[4, 7, 14, 6, 20, 51, 59, 69, 107, 192, 374, 768, 1364, 2471, 3945, 5450, 6033, 5767, 3797, 1094]", - "total_badness": 41134.059548 + "ne3d": 31631, + "quality_histogram": "[5, 6, 12, 5, 23, 49, 55, 63, 90, 195, 292, 620, 1288, 2354, 3827, 5338, 6210, 5933, 4102, 1164]", + "total_badness": 40835.800195 }, { "angles_tet": [ @@ -2191,138 +2191,138 @@ ], "ne1d": 2992, "ne2d": 23322, - "ne3d": 281009, - "quality_histogram": "[4, 10, 12, 10, 7, 26, 35, 86, 167, 454, 1176, 2879, 6743, 15159, 28763, 45456, 58769, 61389, 45901, 13963]", - "total_badness": 346296.38075 + "ne3d": 281422, + "quality_histogram": "[4, 10, 11, 11, 6, 23, 30, 63, 88, 249, 721, 2109, 5601, 13574, 27696, 44361, 59840, 63935, 48318, 14772]", + "total_badness": 343943.53192 } ], "revolution.geo": [ { "angles_tet": [ - 15.022, - 153.82 + 17.336, + 146.85 ], "angles_trig": [ - 17.273, - 129.26 + 16.849, + 130.09 ], "ne1d": 320, "ne2d": 3110, - "ne3d": 8443, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 12, 45, 144, 318, 519, 804, 967, 1078, 1145, 1112, 987, 738, 454, 119]", - "total_badness": 12356.528396 + "ne3d": 8398, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 22, 96, 199, 467, 694, 965, 1097, 1181, 1184, 1082, 796, 502, 111]", + "total_badness": 12004.074776 }, { "angles_tet": [ - 12.083, - 148.78 + 12.502, + 149.07 ], "angles_trig": [ - 14.181, - 133.81 + 14.625, + 130.94 ], "ne1d": 160, "ne2d": 822, "ne3d": 1279, - "quality_histogram": "[0, 0, 0, 0, 2, 14, 52, 81, 100, 116, 148, 146, 167, 114, 92, 74, 92, 44, 25, 12]", - "total_badness": 2305.3064983 + "quality_histogram": "[0, 0, 0, 0, 1, 11, 56, 78, 98, 130, 133, 136, 157, 128, 92, 92, 69, 56, 31, 11]", + "total_badness": 2299.3708145 }, { "angles_tet": [ - 18.299, - 154.43 + 17.575, + 145.02 ], "angles_trig": [ - 16.545, - 129.72 + 17.256, + 134.83 ], "ne1d": 240, "ne2d": 1830, - "ne3d": 3870, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 5, 29, 108, 195, 310, 445, 521, 478, 473, 425, 351, 292, 195, 41]", - "total_badness": 5884.7598106 + "ne3d": 3825, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 22, 69, 157, 287, 410, 484, 531, 496, 420, 382, 322, 195, 48]", + "total_badness": 5690.739258 }, { "angles_tet": [ - 16.32, - 151.1 + 19.517, + 143.57 ], "angles_trig": [ - 17.431, - 126.62 + 18.327, + 126.95 ], "ne1d": 320, "ne2d": 3110, - "ne3d": 8269, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 24, 69, 199, 438, 654, 876, 1057, 1127, 1199, 1061, 888, 548, 128]", - "total_badness": 11704.49421 + "ne3d": 8263, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 10, 47, 141, 349, 615, 835, 1021, 1147, 1245, 1168, 915, 608, 159]", + "total_badness": 11488.676872 }, { "angles_tet": [ - 18.421, - 147.2 + 19.038, + 141.18 ], "angles_trig": [ - 22.303, - 130.37 + 22.38, + 132.94 ], "ne1d": 480, "ne2d": 6864, - "ne3d": 33003, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 5, 20, 80, 243, 674, 1446, 2651, 4133, 5647, 6385, 6118, 4423, 1178]", - "total_badness": 41802.827145 + "ne3d": 33200, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 49, 189, 564, 1246, 2565, 4051, 5685, 6699, 6242, 4579, 1327]", + "total_badness": 41726.178564 }, { "angles_tet": [ - 20.787, - 147.12 + 21.86, + 143.83 ], "angles_trig": [ - 20.393, - 129.3 + 19.775, + 122.3 ], "ne1d": 800, "ne2d": 17934, - "ne3d": 201498, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 44, 148, 603, 1656, 4364, 10078, 19992, 31915, 42284, 45543, 34094, 10774]", - "total_badness": 246262.93603 + "ne3d": 201271, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 14, 92, 365, 1251, 3589, 9010, 18989, 30988, 42530, 46577, 36326, 11536]", + "total_badness": 244182.38794 } ], "screw.step": [ { "angles_tet": [ - 17.384, - 150.49 + 15.997, + 157.41 ], "angles_trig": [ - 16.746, + 15.767, 140.59 ], "ne1d": 400, "ne2d": 1432, - "ne3d": 2402, - "quality_histogram": "[0, 0, 0, 0, 0, 4, 21, 78, 107, 181, 201, 246, 254, 284, 278, 249, 221, 161, 101, 16]", - "total_badness": 3838.1456915 + "ne3d": 2403, + "quality_histogram": "[0, 0, 0, 0, 0, 5, 19, 74, 106, 152, 190, 256, 294, 268, 270, 272, 203, 174, 100, 20]", + "total_badness": 3811.8338111 }, { "angles_tet": [ - 16.908, - 146.51 + 16.773, + 143.17 ], "angles_trig": [ - 18.34, - 135.63 + 17.839, + 128.36 ], "ne1d": 530, "ne2d": 2718, - "ne3d": 8015, - "quality_histogram": "[0, 0, 0, 0, 1, 2, 5, 17, 43, 88, 192, 275, 495, 749, 1086, 1287, 1380, 1267, 866, 262]", - "total_badness": 10583.964534 + "ne3d": 7973, + "quality_histogram": "[0, 0, 0, 0, 1, 2, 5, 17, 41, 84, 145, 239, 436, 718, 1044, 1331, 1390, 1331, 932, 257]", + "total_badness": 10431.298999 }, { "angles_tet": [ - 17.763, - 150.24 + 16.801, + 151.58 ], "angles_trig": [ 14.994, @@ -2330,31 +2330,31 @@ ], "ne1d": 668, "ne2d": 5002, - "ne3d": 31735, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 1, 5, 28, 45, 134, 357, 793, 1795, 3287, 5145, 6774, 6789, 4992, 1588]", - "total_badness": 39141.53875 + "ne3d": 31806, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 0, 4, 14, 32, 119, 295, 705, 1638, 3204, 5122, 6933, 7051, 5138, 1549]", + "total_badness": 39034.593795 } ], "sculpture.geo": [ { "angles_tet": [ - 18.392, - 146.41 + 17.362, + 152.2 ], "angles_trig": [ - 23.82, + 25.459, 115.78 ], "ne1d": 192, "ne2d": 414, - "ne3d": 475, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 5, 17, 18, 32, 62, 64, 97, 98, 41, 25, 11, 2]", - "total_badness": 692.44104062 + "ne3d": 476, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 5, 16, 21, 32, 60, 64, 94, 100, 42, 25, 12, 2]", + "total_badness": 693.83910484 }, { "angles_tet": [ 28.072, - 135.55 + 137.6 ], "angles_trig": [ 27.015, @@ -2362,9 +2362,9 @@ ], "ne1d": 102, "ne2d": 146, - "ne3d": 141, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 5, 11, 19, 19, 36, 29, 17, 2]", - "total_badness": 178.07603683 + "ne3d": 142, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 1, 6, 11, 19, 18, 35, 29, 17, 2]", + "total_badness": 181.04521663 }, { "angles_tet": [ @@ -2372,49 +2372,49 @@ 139.76 ], "angles_trig": [ - 28.201, + 28.457, 103.35 ], "ne1d": 144, "ne2d": 250, - "ne3d": 263, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 6, 7, 14, 24, 29, 53, 46, 49, 24, 7]", - "total_badness": 343.8094424 + "ne3d": 264, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 5, 9, 13, 27, 29, 52, 47, 46, 25, 7]", + "total_badness": 345.68732003 }, { "angles_tet": [ - 18.392, - 146.41 + 17.362, + 152.2 ], "angles_trig": [ - 23.82, + 25.459, 115.78 ], "ne1d": 192, "ne2d": 414, - "ne3d": 475, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 5, 17, 18, 32, 62, 64, 97, 98, 41, 25, 11, 2]", - "total_badness": 692.44104062 + "ne3d": 476, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 5, 16, 21, 32, 60, 64, 94, 100, 42, 25, 12, 2]", + "total_badness": 693.83910484 }, { "angles_tet": [ - 16.551, - 147.09 + 16.484, + 145.52 ], "angles_trig": [ 21.309, - 121.8 + 127.3 ], "ne1d": 288, "ne2d": 962, - "ne3d": 1326, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 6, 24, 53, 87, 122, 149, 125, 142, 117, 141, 144, 119, 80, 15]", - "total_badness": 2054.7475159 + "ne3d": 1319, + "quality_histogram": "[0, 0, 0, 0, 1, 3, 7, 27, 52, 83, 117, 136, 128, 139, 114, 142, 145, 125, 81, 19]", + "total_badness": 2041.3028811 }, { "angles_tet": [ - 15.141, - 145.11 + 14.743, + 147.57 ], "angles_trig": [ 16.998, @@ -2422,26 +2422,26 @@ ], "ne1d": 480, "ne2d": 2394, - "ne3d": 6791, - "quality_histogram": "[0, 0, 0, 0, 2, 3, 12, 10, 30, 33, 80, 135, 286, 503, 747, 1080, 1312, 1266, 984, 308]", - "total_badness": 8649.5978251 + "ne3d": 6698, + "quality_histogram": "[0, 0, 0, 0, 1, 3, 9, 12, 16, 29, 59, 119, 253, 447, 729, 1079, 1336, 1333, 957, 316]", + "total_badness": 8454.7581852 } ], "shaft.geo": [ { "angles_tet": [ - 0.64499, - 179.05 + 3.2907, + 174.32 ], "angles_trig": [ - 1.2376, - 176.83 + 7.5056, + 160.11 ], "ne1d": 708, "ne2d": 1722, - "ne3d": 2757, - "quality_histogram": "[22, 11, 27, 30, 41, 40, 46, 62, 79, 140, 264, 373, 303, 274, 231, 291, 233, 179, 86, 25]", - "total_badness": 6328.6329226 + "ne3d": 2745, + "quality_histogram": "[2, 7, 21, 33, 32, 42, 46, 55, 73, 125, 264, 386, 303, 265, 234, 293, 240, 183, 107, 34]", + "total_badness": 4906.7001812 }, { "angles_tet": [ @@ -2450,73 +2450,73 @@ ], "angles_trig": [ 17.101, - 133.86 + 114.97 ], "ne1d": 410, "ne2d": 606, - "ne3d": 933, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 4, 1, 17, 25, 47, 58, 90, 116, 155, 146, 124, 96, 36, 17]", - "total_badness": 1336.5110795 + "ne3d": 875, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 0, 13, 21, 24, 40, 66, 86, 122, 134, 140, 119, 87, 22]", + "total_badness": 1190.1250091 }, { "angles_tet": [ - 1.7384, - 176.57 + 4.6838, + 172.82 ], "angles_trig": [ - 3.6075, - 170.33 + 7.6359, + 158.38 ], "ne1d": 510, "ne2d": 1004, - "ne3d": 2048, - "quality_histogram": "[11, 74, 88, 69, 81, 94, 99, 125, 99, 122, 96, 133, 133, 165, 190, 186, 163, 67, 45, 8]", - "total_badness": 5937.4200337 + "ne3d": 1988, + "quality_histogram": "[0, 19, 67, 59, 97, 97, 87, 135, 108, 111, 109, 144, 129, 178, 178, 176, 174, 69, 46, 5]", + "total_badness": 4737.8528785 }, { "angles_tet": [ - 2.1118, - 175.72 + 10.862, + 162.85 ], "angles_trig": [ - 5.1266, - 159.21 + 12.477, + 150.85 ], "ne1d": 708, "ne2d": 1722, - "ne3d": 2733, - "quality_histogram": "[6, 8, 10, 17, 29, 39, 34, 40, 80, 132, 254, 397, 302, 295, 238, 297, 250, 192, 88, 25]", - "total_badness": 4814.5951096 + "ne3d": 2728, + "quality_histogram": "[0, 0, 1, 15, 20, 21, 32, 50, 72, 135, 266, 400, 329, 266, 248, 274, 258, 201, 100, 40]", + "total_badness": 4448.4830214 }, { "angles_tet": [ - 14.953, - 144.12 + 19.192, + 146.58 ], "angles_trig": [ - 18.358, - 121.22 + 19.637, + 120.23 ], "ne1d": 1138, "ne2d": 4220, - "ne3d": 11242, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 1, 27, 78, 178, 382, 607, 934, 1459, 1772, 2147, 1927, 1325, 403]", - "total_badness": 14539.392197 + "ne3d": 11308, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 31, 72, 187, 328, 554, 979, 1446, 1850, 2217, 1952, 1280, 409]", + "total_badness": 14596.421815 }, { "angles_tet": [ - 22.34, - 145.52 + 25.341, + 142.09 ], "angles_trig": [ - 24.681, - 125.49 + 22.461, + 120.19 ], "ne1d": 1792, "ne2d": 10600, - "ne3d": 63895, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 18, 53, 198, 529, 1486, 3387, 6482, 10124, 13426, 13922, 10754, 3514]", - "total_badness": 78232.724768 + "ne3d": 63826, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 22, 128, 438, 1274, 3069, 6212, 10027, 13507, 14338, 11060, 3749]", + "total_badness": 77687.754158 } ], "sphere.geo": [ @@ -2582,55 +2582,55 @@ }, { "angles_tet": [ - 18.133, - 134.25 + 23.979, + 130.28 ], "angles_trig": [ - 19.678, - 114.4 + 21.654, + 112.69 ], "ne1d": 0, "ne2d": 258, - "ne3d": 366, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 6, 22, 32, 55, 47, 62, 28, 39, 31, 22, 15, 6]", - "total_badness": 562.00749621 + "ne3d": 365, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 22, 37, 56, 50, 43, 51, 29, 34, 23, 12, 6]", + "total_badness": 556.26115599 }, { "angles_tet": [ - 25.418, - 140.3 + 25.093, + 140.27 ], "angles_trig": [ - 25.287, - 120.11 + 24.971, + 118.43 ], "ne1d": 0, "ne2d": 660, - "ne3d": 2329, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 10, 28, 76, 158, 282, 415, 502, 433, 327, 91]", - "total_badness": 2913.3426209 + "ne3d": 2290, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 6, 21, 55, 155, 246, 393, 499, 453, 343, 116]", + "total_badness": 2832.4661091 } ], "sphereincube.geo": [ { "angles_tet": [ - 10.32, - 167.37 + 10.046, + 167.71 ], "angles_trig": [ - 11.28, - 155.31 + 10.478, + 156.64 ], "ne1d": 46, "ne2d": 202, - "ne3d": 490, - "quality_histogram": "[0, 0, 8, 59, 42, 29, 53, 45, 55, 46, 33, 14, 16, 11, 15, 12, 12, 24, 11, 5]", - "total_badness": 1429.7083119 + "ne3d": 498, + "quality_histogram": "[0, 0, 7, 50, 29, 31, 49, 49, 65, 50, 41, 19, 23, 9, 12, 11, 12, 24, 12, 5]", + "total_badness": 1375.9200797 }, { "angles_tet": [ 8.6025, - 156.39 + 151.32 ], "angles_trig": [ 10.358, @@ -2638,69 +2638,69 @@ ], "ne1d": 24, "ne2d": 60, - "ne3d": 166, - "quality_histogram": "[0, 0, 5, 12, 14, 15, 31, 10, 2, 1, 3, 2, 7, 9, 13, 13, 15, 9, 4, 1]", - "total_badness": 454.94795255 + "ne3d": 161, + "quality_histogram": "[0, 0, 5, 12, 14, 14, 30, 9, 2, 0, 0, 0, 6, 9, 4, 12, 22, 9, 13, 0]", + "total_badness": 435.55968129 }, { "angles_tet": [ - 9.197, - 165.59 + 8.1664, + 165.58 ], "angles_trig": [ 9.1515, - 158.73 + 158.53 ], "ne1d": 30, "ne2d": 116, - "ne3d": 345, - "quality_histogram": "[0, 0, 5, 24, 43, 41, 26, 26, 38, 32, 20, 18, 24, 14, 8, 9, 5, 7, 4, 1]", - "total_badness": 988.81847916 + "ne3d": 348, + "quality_histogram": "[0, 0, 1, 16, 29, 41, 29, 24, 36, 35, 26, 29, 26, 17, 8, 10, 9, 9, 2, 1]", + "total_badness": 911.10169994 }, { "angles_tet": [ - 11.378, - 167.92 + 8.6352, + 167.63 ], "angles_trig": [ - 10.021, - 159.12 + 11.28, + 149.71 ], "ne1d": 46, "ne2d": 202, - "ne3d": 498, - "quality_histogram": "[0, 0, 8, 41, 27, 29, 50, 44, 55, 58, 44, 25, 20, 15, 14, 15, 13, 24, 11, 5]", - "total_badness": 1326.92489 + "ne3d": 502, + "quality_histogram": "[0, 0, 5, 26, 21, 19, 43, 51, 66, 60, 50, 36, 31, 12, 14, 14, 13, 25, 11, 5]", + "total_badness": 1226.3202497 }, { "angles_tet": [ 14.196, - 144.16 + 141.03 ], "angles_trig": [ - 15.219, - 126.51 + 15.659, + 128.46 ], "ne1d": 74, "ne2d": 418, - "ne3d": 1788, - "quality_histogram": "[0, 0, 0, 0, 0, 6, 6, 21, 28, 38, 73, 98, 167, 213, 251, 273, 258, 200, 112, 44]", - "total_badness": 2540.547751 + "ne3d": 1742, + "quality_histogram": "[0, 0, 0, 0, 0, 5, 5, 10, 28, 29, 59, 81, 143, 233, 273, 268, 238, 191, 137, 42]", + "total_badness": 2433.1633041 }, { "angles_tet": [ - 23.561, - 147.15 + 25.05, + 140.17 ], "angles_trig": [ - 23.846, - 130.05 + 21.933, + 130.25 ], "ne1d": 122, "ne2d": 1082, - "ne3d": 14039, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 5, 31, 105, 218, 465, 893, 1497, 2202, 2857, 2912, 2179, 674]", - "total_badness": 17464.78638 + "ne3d": 13947, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 23, 94, 203, 398, 804, 1329, 2220, 2883, 2980, 2254, 756]", + "total_badness": 17220.84127 } ], "square.in2d": [ @@ -2982,93 +2982,93 @@ "torus.geo": [ { "angles_tet": [ - 13.144, - 152.82 + 16.897, + 152.81 ], "angles_trig": [ - 19.303, - 132.35 + 19.689, + 126.09 ], "ne1d": 0, "ne2d": 2534, - "ne3d": 5745, - "quality_histogram": "[0, 0, 0, 0, 0, 4, 19, 59, 148, 286, 440, 581, 679, 796, 742, 668, 583, 418, 238, 84]", - "total_badness": 8709.4458795 + "ne3d": 5711, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 26, 89, 200, 400, 544, 654, 766, 832, 716, 619, 495, 279, 88]", + "total_badness": 8374.2016452 }, { "angles_tet": [ - 1.2238, - 177.38 + 1.412, + 177.12 ], "angles_trig": [ - 2.9769, - 171.94 + 4.4579, + 167.41 ], "ne1d": 0, "ne2d": 692, - "ne3d": 3181, - "quality_histogram": "[166, 714, 477, 367, 312, 232, 199, 167, 108, 100, 92, 66, 48, 39, 30, 27, 18, 13, 6, 0]", - "total_badness": 24641.250872 + "ne3d": 3048, + "quality_histogram": "[104, 610, 485, 376, 328, 230, 202, 151, 107, 115, 94, 79, 57, 38, 28, 16, 16, 7, 4, 1]", + "total_badness": 21483.759565 }, { "angles_tet": [ - 19.725, - 139.57 + 18.241, + 146.38 ], "angles_trig": [ - 20.487, - 120.36 + 20.167, + 120.49 ], "ne1d": 0, "ne2d": 1446, - "ne3d": 2743, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 14, 62, 135, 247, 356, 403, 430, 384, 298, 200, 152, 59]", - "total_badness": 3928.1549928 + "ne3d": 2754, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 2, 14, 49, 134, 224, 374, 409, 417, 381, 338, 205, 156, 49]", + "total_badness": 3924.0113949 }, { "angles_tet": [ - 19.089, - 150.14 + 17.882, + 148.83 ], "angles_trig": [ - 19.879, - 128.33 + 19.93, + 125.41 ], "ne1d": 0, "ne2d": 2534, - "ne3d": 5584, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 27, 78, 171, 346, 509, 649, 760, 771, 771, 646, 472, 283, 100]", - "total_badness": 8111.5941443 + "ne3d": 5617, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 7, 32, 143, 292, 430, 647, 732, 843, 806, 683, 551, 344, 106]", + "total_badness": 7961.5278101 }, { "angles_tet": [ - 20.531, - 143.08 + 22.544, + 142.87 ], "angles_trig": [ - 22.447, - 120.05 + 22.773, + 121.69 ], "ne1d": 0, "ne2d": 5894, - "ne3d": 25294, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 9, 32, 149, 417, 947, 1723, 2990, 4145, 5146, 5002, 3604, 1129]", - "total_badness": 31642.969488 + "ne3d": 25233, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 12, 47, 132, 403, 862, 1701, 2827, 4136, 4957, 5179, 3813, 1164]", + "total_badness": 31444.677204 }, { "angles_tet": [ - 20.696, - 148.87 + 23.144, + 144.46 ], "angles_trig": [ - 22.772, - 123.66 + 22.932, + 121.88 ], "ne1d": 0, "ne2d": 16296, - "ne3d": 175351, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 7, 36, 115, 401, 1106, 3230, 8059, 16480, 27460, 37219, 40628, 30958, 9652]", - "total_badness": 213157.95506 + "ne3d": 175509, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 8, 57, 283, 907, 2701, 7294, 15838, 27050, 37138, 41309, 32367, 10556]", + "total_badness": 212108.41175 } ], "trafo.geo": [ @@ -3078,64 +3078,64 @@ 174.44 ], "angles_trig": [ - 13.504, - 145.01 + 14.916, + 132.02 ], "ne1d": 690, "ne2d": 1684, - "ne3d": 5231, - "quality_histogram": "[0, 2, 2, 2, 8, 24, 37, 50, 114, 203, 267, 363, 472, 583, 649, 706, 623, 527, 462, 137]", - "total_badness": 7683.599832 + "ne3d": 5188, + "quality_histogram": "[0, 3, 1, 1, 2, 11, 32, 48, 112, 189, 270, 369, 456, 565, 675, 703, 613, 543, 453, 142]", + "total_badness": 7545.0612948 }, { "angles_tet": [ 8.1301, - 164.94 + 160.14 ], "angles_trig": [ - 6.1428, - 158.67 + 7.7605, + 156.22 ], "ne1d": 390, "ne2d": 522, - "ne3d": 1353, - "quality_histogram": "[0, 0, 3, 17, 15, 42, 75, 123, 130, 146, 161, 124, 147, 105, 84, 88, 47, 33, 11, 2]", - "total_badness": 2768.022266 + "ne3d": 1352, + "quality_histogram": "[0, 0, 3, 12, 12, 38, 79, 115, 124, 150, 169, 129, 140, 109, 82, 85, 56, 36, 11, 2]", + "total_badness": 2721.6169239 }, { "angles_tet": [ - 6.2287, - 170.99 + 7.8932, + 164.55 ], "angles_trig": [ 14.15, - 144.73 + 148.05 ], "ne1d": 512, "ne2d": 874, - "ne3d": 2397, - "quality_histogram": "[0, 0, 1, 3, 9, 23, 41, 72, 132, 142, 188, 204, 304, 389, 343, 237, 138, 97, 48, 26]", - "total_badness": 3983.5650135 + "ne3d": 2381, + "quality_histogram": "[0, 0, 0, 3, 9, 15, 41, 69, 122, 140, 198, 211, 303, 380, 350, 236, 136, 97, 46, 25]", + "total_badness": 3929.771603 }, { "angles_tet": [ - 10.03, - 156.47 + 9.8264, + 163.31 ], "angles_trig": [ 14.916, - 132.87 + 132.02 ], "ne1d": 690, "ne2d": 1684, - "ne3d": 5147, - "quality_histogram": "[0, 0, 0, 1, 3, 12, 26, 40, 106, 188, 272, 357, 422, 561, 671, 714, 608, 558, 474, 134]", - "total_badness": 7408.6135626 + "ne3d": 5097, + "quality_histogram": "[0, 0, 0, 1, 0, 3, 22, 36, 103, 191, 264, 340, 427, 567, 670, 712, 608, 544, 468, 141]", + "total_badness": 7293.2350014 }, { "angles_tet": [ 16.895, - 145.94 + 147.06 ], "angles_trig": [ 17.568, @@ -3143,24 +3143,24 @@ ], "ne1d": 1050, "ne2d": 3812, - "ne3d": 18010, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 29, 42, 57, 198, 540, 1405, 2251, 2392, 2790, 2784, 2612, 2242, 664]", - "total_badness": 23560.24016 + "ne3d": 17978, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 16, 34, 64, 178, 563, 1427, 2209, 2293, 2685, 2720, 2714, 2365, 707]", + "total_badness": 23439.888638 }, { "angles_tet": [ - 11.084, - 149.86 + 14.338, + 149.41 ], "angles_trig": [ 19.234, - 130.9 + 129.78 ], "ne1d": 1722, "ne2d": 10042, - "ne3d": 84690, - "quality_histogram": "[0, 0, 0, 0, 2, 3, 54, 1424, 754, 408, 795, 1316, 2637, 5766, 9155, 13453, 16224, 16583, 12169, 3947]", - "total_badness": 108937.41902 + "ne3d": 84837, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 55, 1433, 719, 373, 690, 1186, 2485, 5464, 8945, 13165, 16437, 16971, 12818, 4093]", + "total_badness": 108579.70964 } ], "twobricks.geo": [ @@ -3176,8 +3176,8 @@ "ne1d": 72, "ne2d": 50, "ne3d": 41, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 1, 7, 3, 15, 4, 4, 0, 0, 0, 0]", - "total_badness": 68.929979132 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 8, 2, 16, 3, 4, 0, 0, 0, 0]", + "total_badness": 68.897088924 }, { "angles_tet": [ @@ -3221,38 +3221,38 @@ "ne1d": 72, "ne2d": 50, "ne3d": 41, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 1, 7, 3, 15, 4, 4, 0, 0, 0, 0]", - "total_badness": 68.929979132 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 8, 2, 16, 3, 4, 0, 0, 0, 0]", + "total_badness": 68.897088924 }, { "angles_tet": [ - 27.283, + 24.085, 131.06 ], "angles_trig": [ - 26.534, - 105.99 + 27.682, + 109.51 ], "ne1d": 116, "ne2d": 134, - "ne3d": 177, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 12, 10, 18, 38, 22, 27, 22, 18, 7]", - "total_badness": 234.47359 + "ne3d": 176, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 11, 13, 17, 37, 23, 30, 17, 17, 7]", + "total_badness": 234.86129156 }, { "angles_tet": [ 26.468, - 133.47 + 134.05 ], "angles_trig": [ 27.418, - 110.78 + 109.77 ], "ne1d": 186, "ne2d": 346, - "ne3d": 603, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 10, 25, 42, 66, 89, 101, 110, 93, 56, 10]", - "total_badness": 792.88605666 + "ne3d": 595, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 23, 40, 55, 95, 101, 105, 99, 60, 8]", + "total_badness": 777.63275425 } ], "twocubes.geo": [ @@ -3268,8 +3268,8 @@ "ne1d": 72, "ne2d": 50, "ne3d": 41, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 1, 7, 3, 15, 4, 4, 0, 0, 0, 0]", - "total_badness": 68.929979132 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 8, 2, 16, 3, 4, 0, 0, 0, 0]", + "total_badness": 68.897088924 }, { "angles_tet": [ @@ -3313,130 +3313,130 @@ "ne1d": 72, "ne2d": 50, "ne3d": 41, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 1, 7, 3, 15, 4, 4, 0, 0, 0, 0]", - "total_badness": 68.929979132 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 8, 2, 16, 3, 4, 0, 0, 0, 0]", + "total_badness": 68.897088924 }, { "angles_tet": [ - 27.283, + 24.085, 131.06 ], "angles_trig": [ - 26.534, - 105.99 + 27.682, + 109.51 ], "ne1d": 116, "ne2d": 134, - "ne3d": 177, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 12, 10, 18, 38, 22, 27, 22, 18, 7]", - "total_badness": 234.47359 + "ne3d": 176, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 11, 13, 17, 37, 23, 30, 17, 17, 7]", + "total_badness": 234.86129156 }, { "angles_tet": [ 26.468, - 133.47 + 134.05 ], "angles_trig": [ 27.418, - 110.78 + 109.77 ], "ne1d": 186, "ne2d": 346, - "ne3d": 603, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 10, 25, 42, 66, 89, 101, 110, 93, 56, 10]", - "total_badness": 792.88605666 + "ne3d": 595, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 23, 40, 55, 95, 101, 105, 99, 60, 8]", + "total_badness": 777.63275425 } ], "twocyl.geo": [ { "angles_tet": [ - 19.44, - 148.64 + 15.341, + 148.49 ], "angles_trig": [ - 14.153, + 18.029, 127.96 ], "ne1d": 144, "ne2d": 408, - "ne3d": 576, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 12, 19, 19, 17, 36, 50, 59, 82, 90, 73, 69, 34, 13, 1]", - "total_badness": 901.75131743 + "ne3d": 560, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 11, 18, 21, 13, 40, 49, 64, 78, 94, 74, 53, 33, 10, 1]", + "total_badness": 877.73286526 }, { "angles_tet": [ - 11.835, - 157.69 + 14.489, + 157.7 ], "angles_trig": [ - 12.796, - 135.11 + 26.565, + 125.14 ], "ne1d": 68, "ne2d": 100, - "ne3d": 209, - "quality_histogram": "[0, 0, 0, 1, 3, 6, 11, 2, 8, 5, 15, 18, 12, 28, 28, 27, 24, 17, 3, 1]", - "total_badness": 357.15447323 + "ne3d": 189, + "quality_histogram": "[0, 0, 0, 0, 1, 2, 1, 0, 7, 6, 5, 10, 18, 32, 32, 24, 25, 18, 8, 0]", + "total_badness": 281.96557687 }, { "angles_tet": [ - 2.5289, - 174.75 + 7.1224, + 165.69 ], "angles_trig": [ - 7.8638, - 160.72 + 11.214, + 147.28 ], "ne1d": 102, "ne2d": 238, - "ne3d": 548, - "quality_histogram": "[5, 24, 23, 35, 33, 46, 49, 52, 63, 39, 19, 20, 19, 22, 19, 24, 40, 14, 2, 0]", - "total_badness": 1932.6124156 + "ne3d": 538, + "quality_histogram": "[0, 1, 13, 22, 29, 50, 62, 58, 63, 34, 36, 16, 23, 32, 21, 20, 36, 18, 4, 0]", + "total_badness": 1411.6824583 }, { "angles_tet": [ - 19.577, - 146.75 + 19.827, + 141.68 ], "angles_trig": [ - 19.468, + 18.029, 127.96 ], "ne1d": 144, "ne2d": 408, - "ne3d": 576, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 4, 12, 10, 12, 24, 41, 69, 88, 108, 88, 65, 40, 13, 2]", - "total_badness": 853.37034747 + "ne3d": 550, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 5, 11, 14, 10, 37, 58, 71, 75, 92, 80, 53, 34, 8, 1]", + "total_badness": 839.5988737 }, { "angles_tet": [ - 23.256, - 137.47 + 19.806, + 141.75 ], "angles_trig": [ - 23.036, - 119.69 + 22.382, + 115.67 ], "ne1d": 214, "ne2d": 910, - "ne3d": 1921, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 33, 75, 117, 230, 320, 358, 348, 243, 159, 28]", - "total_badness": 2544.8927759 + "ne3d": 1906, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 14, 28, 73, 129, 185, 278, 363, 378, 262, 155, 38]", + "total_badness": 2512.8115918 }, { "angles_tet": [ - 24.255, - 141.91 + 26.173, + 141.08 ], "angles_trig": [ - 24.573, - 121.54 + 26.564, + 123.51 ], "ne1d": 350, "ne2d": 2374, - "ne3d": 13509, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 11, 29, 98, 286, 655, 1353, 2161, 2913, 3068, 2220, 713]", - "total_badness": 16499.785789 + "ne3d": 13532, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 23, 84, 243, 598, 1273, 2166, 2872, 3118, 2387, 764]", + "total_badness": 16428.083882 } ] } \ No newline at end of file From ab024c2e6c4d70ae5322f365e2ceed683e4f4ad9 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Thu, 24 Oct 2019 18:04:56 +0200 Subject: [PATCH 088/120] Sort edges by improvement in SwapImprove2 --- libsrc/meshing/improve3.cpp | 34 +++++++++++++++++++--------------- libsrc/meshing/improve3.hpp | 2 +- tests/pytest/results.json | 12 ++++++------ 3 files changed, 26 insertions(+), 22 deletions(-) diff --git a/libsrc/meshing/improve3.cpp b/libsrc/meshing/improve3.cpp index 83a8be25..c97e0974 100644 --- a/libsrc/meshing/improve3.cpp +++ b/libsrc/meshing/improve3.cpp @@ -3280,7 +3280,7 @@ void MeshOptimize3d :: SwapImproveSurface (Mesh & mesh, OPTIMIZEGOAL goal, 2 -> 3 conversion */ -bool MeshOptimize3d :: SwapImprove2 ( Mesh & mesh, OPTIMIZEGOAL goal, ElementIndex eli1, int face, +double MeshOptimize3d :: SwapImprove2 ( Mesh & mesh, OPTIMIZEGOAL goal, ElementIndex eli1, int face, Table & elementsonnode, TABLE & belementsonnode, bool check_only ) { @@ -3288,9 +3288,10 @@ bool MeshOptimize3d :: SwapImprove2 ( Mesh & mesh, OPTIMIZEGOAL goal, ElementInd Element el21(TET), el22(TET), el31(TET), el32(TET), el33(TET); int j = face; double bad1, bad2; + double d_badness = 0.0; Element & elem = mesh[eli1]; - if (elem.IsDeleted()) return false; + if (elem.IsDeleted()) return 0.0; int mattyp = elem.GetIndex(); @@ -3336,7 +3337,7 @@ bool MeshOptimize3d :: SwapImprove2 ( Mesh & mesh, OPTIMIZEGOAL goal, ElementInd } } - if (bface) return false; + if (bface) return 0.0; FlatArray row = elementsonnode[pi1]; @@ -3406,14 +3407,16 @@ bool MeshOptimize3d :: SwapImprove2 ( Mesh & mesh, OPTIMIZEGOAL goal, ElementInd bad2 += 1e4; - bool do_swap = (bad2 < bad1); + d_badness = bad2 - bad1; if ( ((bad2 < 1e6) || (bad2 < 10 * bad1)) && mesh.BoundaryEdge (pi4, pi5)) - do_swap = 1; + d_badness = -1e4; + if(check_only) + return d_badness; - if (!check_only && do_swap) + if (d_badness<0.0) { el31.flags.illegal_valid = 0; el32.flags.illegal_valid = 0; @@ -3425,12 +3428,11 @@ bool MeshOptimize3d :: SwapImprove2 ( Mesh & mesh, OPTIMIZEGOAL goal, ElementInd mesh.AddVolumeElement (el32); mesh.AddVolumeElement (el33); } - return do_swap; + return d_badness; } } } - - return false; + return d_badness; } /* @@ -3573,8 +3575,8 @@ void MeshOptimize3d :: SwapImprove2 (Mesh & mesh, OPTIMIZEGOAL goal) int num_threads = ngcore::TaskManager::GetNumThreads(); - Array> faces_with_improvement; - Array>> faces_with_improvement_threadlocal(num_threads); + Array> faces_with_improvement; + Array>> faces_with_improvement_threadlocal(num_threads); ParallelForRange( Range(ne), [&]( auto myrange ) { @@ -3601,8 +3603,9 @@ void MeshOptimize3d :: SwapImprove2 (Mesh & mesh, OPTIMIZEGOAL goal) for (int j = 0; j < 4; j++) { - if(SwapImprove2( mesh, goal, eli1, j, elementsonnode, belementsonnode, true)) - my_faces_with_improvement.Append( std::make_tuple(eli1, j) ); + double d_badness = SwapImprove2( mesh, goal, eli1, j, elementsonnode, belementsonnode, true); + if(d_badness<0.0) + my_faces_with_improvement.Append( std::make_tuple(d_badness, eli1, j) ); } } }); @@ -3612,8 +3615,9 @@ void MeshOptimize3d :: SwapImprove2 (Mesh & mesh, OPTIMIZEGOAL goal) QuickSort(faces_with_improvement); - for (auto [eli,j] : faces_with_improvement) - cnt += SwapImprove2( mesh, goal, eli, j, elementsonnode, belementsonnode, false); + for (auto [dummy, eli,j] : faces_with_improvement) + if(SwapImprove2( mesh, goal, eli, j, elementsonnode, belementsonnode, false) < 0.0) + cnt++; PrintMessage (5, cnt, " swaps performed"); diff --git a/libsrc/meshing/improve3.hpp b/libsrc/meshing/improve3.hpp index 0ddcc484..309df47f 100644 --- a/libsrc/meshing/improve3.hpp +++ b/libsrc/meshing/improve3.hpp @@ -35,7 +35,7 @@ public: const NgArray< NgArray* > * idmaps = NULL); void SwapImprove2Sequential (Mesh & mesh, OPTIMIZEGOAL goal = OPT_QUALITY); void SwapImprove2 (Mesh & mesh, OPTIMIZEGOAL goal = OPT_QUALITY); - bool SwapImprove2 ( Mesh & mesh, OPTIMIZEGOAL goal, ElementIndex eli1, int face, Table & elementsonnode, TABLE & belementsonnode, bool check_only=false ); + double SwapImprove2 ( Mesh & mesh, OPTIMIZEGOAL goal, ElementIndex eli1, int face, Table & elementsonnode, TABLE & belementsonnode, bool check_only=false ); double CalcBad (const Mesh::T_POINTS & points, const Element & elem, double h) diff --git a/tests/pytest/results.json b/tests/pytest/results.json index e8d57ab9..e8e49b6b 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -1391,9 +1391,9 @@ ], "ne1d": 6026, "ne2d": 11450, - "ne3d": 30659, - "quality_histogram": "[3, 4, 8, 18, 26, 57, 158, 291, 798, 1106, 1681, 2709, 3238, 4075, 4533, 4309, 3453, 2498, 1351, 343]", - "total_badness": 45874.630632 + "ne3d": 30654, + "quality_histogram": "[3, 4, 8, 18, 25, 59, 158, 291, 794, 1103, 1677, 2706, 3249, 4083, 4515, 4321, 3450, 2495, 1353, 342]", + "total_badness": 45863.767283 }, { "angles_tet": [ @@ -2460,7 +2460,7 @@ }, { "angles_tet": [ - 4.6838, + 4.7033, 172.82 ], "angles_trig": [ @@ -2470,8 +2470,8 @@ "ne1d": 510, "ne2d": 1004, "ne3d": 1988, - "quality_histogram": "[0, 19, 67, 59, 97, 97, 87, 135, 108, 111, 109, 144, 129, 178, 178, 176, 174, 69, 46, 5]", - "total_badness": 4737.8528785 + "quality_histogram": "[0, 18, 67, 62, 94, 98, 88, 137, 111, 106, 105, 142, 130, 182, 178, 175, 174, 70, 46, 5]", + "total_badness": 4736.9626467 }, { "angles_tet": [ From a13cc21d3f040d5a6c43011d221de0653464a6d7 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Thu, 24 Oct 2019 18:22:25 +0200 Subject: [PATCH 089/120] add script compare_results.py --- tests/pytest/compare_results.py | 91 +++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 tests/pytest/compare_results.py diff --git a/tests/pytest/compare_results.py b/tests/pytest/compare_results.py new file mode 100644 index 00000000..8a74fb9d --- /dev/null +++ b/tests/pytest/compare_results.py @@ -0,0 +1,91 @@ +import json +import sys +import subprocess +import statistics + +def readData(a, files): + amin=[] + amax=[] + amin1=[] + amax1=[] + bad=[] + ne1d=[] + ne2d=[] + ne3d=[] + for f in files: + for t in a[f]: + if t['ne1d']>0: + ne1d.append(t['ne1d']) + if t['ne2d']>0: + ne2d.append(t['ne2d']) + if t['ne3d']>0: + ne3d.append(t['ne3d']) + if t['total_badness']>0.0: + bad.append(t['total_badness']) + if 'angles_tet' in t: + amin.append(t['angles_tet'][0]) + amax.append(t['angles_tet'][1]) + if 'angles_trig' in t: + amin1.append(t['angles_trig'][0]) + amax1.append(t['angles_trig'][1]) + return { + "min tet angle":amin, + "max tet angle" : amax, + "min trig angle":amin1, + "max trig angle" : amax1, + "badness" : bad, + "#edges" : ne1d, + "#trigs" : ne2d, + "#tets" : ne3d, + } + +import matplotlib.pyplot as plt + +ref = 'master' +if len(sys.argv)>1: + ref = sys.argv[1] + +res = subprocess.run(['git','show','{}:./results.json'.format(ref)], capture_output=True) +s = json.loads(res.stdout.decode()) + +if len(sys.argv) > 2: + ref2 = sys.argv[2] + res = subprocess.run(['git','show','{}:./results.json'.format(ref2)], capture_output=True) + s2 = res.stdout.decode() +else: + ref2 = 'current' + s2 = open('results.json','r').read() +s2 = json.loads(s2) + +filenames = [f for f in s if f in s2] +data = readData(s, filenames) +data2 = readData(s2, filenames) + +n = len(data)+1 +fig,ax = plt.subplots(figsize=(10,7)) +for i,d in enumerate(['min trig angle','min tet angle','max trig angle','max tet angle']): + ax = plt.subplot(2,5,i+1) + plt.title(d) + ax.set_xticks([1,2]) + if len(data[d])==0 or len(data2[d])==0: + continue + + plt.violinplot([data[d],data2[d]], showmedians=True) + med = statistics.median(data[d]) + plt.hlines(med, 1,2, linestyle='dotted') + if d=='badness': + ax.set_yscale('log') + ax.set_xticklabels([ref, ref2]) + + +for i,d in enumerate(['badness','#edges','#trigs','#tets']): + ax = plt.subplot(2,5,6+i) + plt.title('difference '+d+' (in %)') +# plt.violinplot([(y-x)/x for x,y in zip(data[d],data2[d])], showmedians=True) + plt.boxplot([(y-x)/x for x,y in zip(data[d],data2[d])]) + plt.hlines(0.0, 0.5,1.5, linestyle='dotted') + + +# plt.savefig('comparison.png', dpi=100) +plt.show() + From 63aab9076c89a4f82498f0825ce96e94b2fc347d Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Fri, 25 Oct 2019 14:57:00 +0200 Subject: [PATCH 090/120] parallel SplitImprove --- libsrc/meshing/improve3.cpp | 242 +++++- libsrc/meshing/improve3.hpp | 3 + tests/pytest/results.json | 1478 +++++++++++++++++------------------ 3 files changed, 983 insertions(+), 740 deletions(-) diff --git a/libsrc/meshing/improve3.cpp b/libsrc/meshing/improve3.cpp index c97e0974..a07088dc 100644 --- a/libsrc/meshing/improve3.cpp +++ b/libsrc/meshing/improve3.cpp @@ -527,6 +527,246 @@ void MeshOptimize3d :: CombineImprove (Mesh & mesh, +double MeshOptimize3d :: SplitImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, Table & elementsonnode, Array &elerrs, NgArray &locfaces, double badmax, PointIndex pi1, PointIndex pi2, PointIndex ptmp, bool check_only) +{ + double d_badness = 0.0; + int cnt = 0; + + ArrayMem hasbothpoints; + + if (mesh.BoundaryEdge (pi1, pi2)) return 0.0; + + for (ElementIndex ei : elementsonnode[pi1]) + { + Element & el = mesh[ei]; + + if(el.IsDeleted()) return 0.0; + if (mesh[ei].GetType() != TET) return 0.0; + + bool has1 = el.PNums().Contains(pi1); + bool has2 = el.PNums().Contains(pi2); + + if (has1 && has2) + if (!hasbothpoints.Contains (ei)) + hasbothpoints.Append (ei); + } + + if(mp.only3D_domain_nr) + for(auto ei : hasbothpoints) + if(mp.only3D_domain_nr != mesh[ei].GetIndex()) + return 0.0; + + + double bad1 = 0.0; + for (ElementIndex ei : hasbothpoints) + bad1 += CalcBad (mesh.Points(), mesh[ei], 0); + + bool puretet = 1; + for (ElementIndex ei : hasbothpoints) + if (mesh[ei].GetType() != TET) + puretet = 0; + if (!puretet) return 0.0; + + Point3d p1 = mesh[pi1]; + Point3d p2 = mesh[pi2]; + + locfaces.SetSize(0); + for (ElementIndex ei : hasbothpoints) + { + const Element & el = mesh[ei]; + + for (int l = 0; l < 4; l++) + if (el[l] == pi1 || el[l] == pi2) + { + INDEX_3 i3; + Element2d face(TRIG); + el.GetFace (l+1, face); + for (int kk = 1; kk <= 3; kk++) + i3.I(kk) = face.PNum(kk); + locfaces.Append (i3); + } + } + + PointFunction1 pf (mesh.Points(), locfaces, mp, -1); + OptiParameters par; + par.maxit_linsearch = 50; + par.maxit_bfgs = 20; + + Point3d pnew = Center (p1, p2); + Vector px(3); + px(0) = pnew.X(); + px(1) = pnew.Y(); + px(2) = pnew.Z(); + + if (bad1 > 0.1 * badmax) + BFGS (px, pf, par); + + double bad2 = pf.Func (px); + + pnew.X() = px(0); + pnew.Y() = px(1); + pnew.Z() = px(2); + + mesh[ptmp] = Point<3>(pnew); + + for (int k = 0; k < hasbothpoints.Size(); k++) + { + Element & oldel = mesh[hasbothpoints[k]]; + Element newel1 = oldel; + Element newel2 = oldel; + + oldel.flags.illegal_valid = 0; + newel1.flags.illegal_valid = 0; + newel2.flags.illegal_valid = 0; + + for (int l = 0; l < 4; l++) + { + if (newel1[l] == pi2) newel1[l] = ptmp; + if (newel2[l] == pi1) newel2[l] = ptmp; + } + + if (!mesh.LegalTet (oldel)) bad1 += 1e6; + if (!mesh.LegalTet (newel1)) bad2 += 1e6; + if (!mesh.LegalTet (newel2)) bad2 += 1e6; + } + + d_badness = bad2-bad1; + if(check_only) + return d_badness; + + if (d_badness<0.0) + { + cnt++; + + PointIndex pinew = mesh.AddPoint (pnew); + + for (ElementIndex ei : hasbothpoints) + { + Element & oldel = mesh[ei]; + Element newel1 = oldel; + Element newel2 = oldel; + + oldel.flags.illegal_valid = 0; + oldel.Delete(); + + newel1.flags.illegal_valid = 0; + newel2.flags.illegal_valid = 0; + + for (int l = 0; l < 4; l++) + { + if (newel1[l] == pi2) newel1[l] = pinew; + if (newel2[l] == pi1) newel2[l] = pinew; + } + + mesh.AddVolumeElement (newel1); + mesh.AddVolumeElement (newel2); + } + } + return d_badness; +} + +void MeshOptimize3d :: SplitImprove (Mesh & mesh, + OPTIMIZEGOAL goal) +{ + static Timer t("MeshOptimize3d::SplitImprove"); RegionTimer reg(t); + static Timer topt("Optimize"); + static Timer tsearch("Search"); + + // return SplitImproveSequential(mesh, goal); + + int np = mesh.GetNP(); + int ne = mesh.GetNE(); + double bad = 0.0; + double badmax = 0.0; + + auto elementsonnode = mesh.CreatePoint2ElementTable(); + + Array elerrs(ne); + + const char * savetask = multithread.task; + multithread.task = "Split Improve"; + + PrintMessage (3, "SplitImprove"); + (*testout) << "start SplitImprove" << "\n"; + + ParallelFor( mesh.VolumeElements().Range(), [&] (ElementIndex ei) NETGEN_LAMBDA_INLINE + { + if(mp.only3D_domain_nr && mp.only3D_domain_nr != mesh.VolumeElement(ei).GetIndex()) + return; + + elerrs[ei] = CalcBad (mesh.Points(), mesh[ei], 0); + bad += elerrs[ei]; + AtomicMax(badmax, elerrs[ei]); + }); + + if (goal == OPT_QUALITY) + { + bad = mesh.CalcTotalBad (mp); + (*testout) << "Total badness = " << bad << endl; + } + + Array> edges; + BuildEdgeList(mesh, elementsonnode, edges); + + // Find edges with improvement + Array> candidate_edges(edges.Size()); + std::atomic improvement_counter(0); + auto ptmp = mesh.AddPoint( {0,0,0} ); + + tsearch.Start(); + ParallelForRange(Range(edges), [&] (auto myrange) + { + NgArray locfaces; + + for(auto i : myrange) + { + auto [p0,p1] = edges[i]; + double d_badness = SplitImproveEdge (mesh, goal, elementsonnode, elerrs, locfaces, badmax, p0, p1, ptmp, true); + if(d_badness<0.0) + { + int index = improvement_counter++; + candidate_edges[index] = make_tuple(d_badness, i); + } + } + }, ngcore::TasksPerThread(4)); + tsearch.Stop(); + + auto edges_with_improvement = candidate_edges.Part(0, improvement_counter.load()); + + QuickSort(edges_with_improvement); + PrintMessage(5, edges.Size(), " edges"); + PrintMessage(5, edges_with_improvement.Size(), " edges with improvement"); + + // Apply actual optimizations + topt.Start(); + int cnt = 0; + NgArray locfaces; + for(auto [d_badness, ei] : edges_with_improvement) + { + auto [p0,p1] = edges[ei]; + if (SplitImproveEdge (mesh, goal, elementsonnode, elerrs, locfaces, badmax, p0, p1, ptmp, false) < 0.0) + cnt++; + } + topt.Stop(); + mesh.Compress(); + PrintMessage (5, cnt, " splits performed"); + (*testout) << "Splitt - Improve done" << "\n"; + + if (goal == OPT_QUALITY) + { + bad = mesh.CalcTotalBad (mp); + (*testout) << "Total badness = " << bad << endl; + + int cntill = 0; + ne = mesh.GetNE(); + for (ElementIndex ei = 0; ei < ne; ei++) + if (!mesh.LegalTet (mesh[ei])) + cntill++; + // cout << cntill << " illegal tets" << endl; + } + + multithread.task = savetask; +} /* @@ -534,7 +774,7 @@ void MeshOptimize3d :: CombineImprove (Mesh & mesh, If mesh quality is improved by inserting a node into an inner edge, the edge is split into two parts. */ -void MeshOptimize3d :: SplitImprove (Mesh & mesh, +void MeshOptimize3d :: SplitImproveSequential (Mesh & mesh, OPTIMIZEGOAL goal) { static Timer t("MeshOptimize3d::SplitImprove"); RegionTimer reg(t); diff --git a/libsrc/meshing/improve3.hpp b/libsrc/meshing/improve3.hpp index 309df47f..5bced8a1 100644 --- a/libsrc/meshing/improve3.hpp +++ b/libsrc/meshing/improve3.hpp @@ -24,6 +24,9 @@ public: void CombineImproveSequential (Mesh & mesh, OPTIMIZEGOAL goal = OPT_QUALITY); void SplitImprove (Mesh & mesh, OPTIMIZEGOAL goal = OPT_QUALITY); + void SplitImproveSequential (Mesh & mesh, OPTIMIZEGOAL goal = OPT_QUALITY); + double SplitImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, Table & elementsonnode, Array &elerrs, NgArray &locfaces, double badmax, PointIndex pi1, PointIndex pi2, PointIndex ptmp, bool check_only=false); + double SwapImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, const NgBitArray * working_elements, Table & elementsonnode, INDEX_3_HASHTABLE & faces, PointIndex pi1, PointIndex pi2, bool check_only=false); void SwapImprove (Mesh & mesh, OPTIMIZEGOAL goal = OPT_QUALITY, diff --git a/tests/pytest/results.json b/tests/pytest/results.json index e8e49b6b..6dd84e7c 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -2,18 +2,18 @@ "boundarycondition.geo": [ { "angles_tet": [ - 30.666, - 127.89 + 27.914, + 137.69 ], "angles_trig": [ - 26.565, - 91.094 + 29.255, + 99.865 ], "ne1d": 74, "ne2d": 54, - "ne3d": 40, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 16, 1, 5, 2, 0, 0, 0]", - "total_badness": 61.085020204 + "ne3d": 46, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 5, 6, 15, 3, 7, 5, 0, 0, 0]", + "total_badness": 70.019644222 }, { "angles_tet": [ @@ -47,18 +47,18 @@ }, { "angles_tet": [ - 30.666, - 127.89 + 27.914, + 137.69 ], "angles_trig": [ - 26.565, - 91.094 + 29.255, + 99.865 ], "ne1d": 74, "ne2d": 54, - "ne3d": 40, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 16, 1, 5, 2, 0, 0, 0]", - "total_badness": 61.085020204 + "ne3d": 46, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 5, 6, 15, 3, 7, 5, 0, 0, 0]", + "total_badness": 70.019644216 }, { "angles_tet": [ @@ -73,7 +73,7 @@ "ne2d": 140, "ne3d": 165, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 9, 13, 23, 20, 31, 25, 21, 14, 6, 1]", - "total_badness": 233.73328914 + "total_badness": 233.73328915 }, { "angles_tet": [ @@ -87,8 +87,8 @@ "ne1d": 181, "ne2d": 325, "ne3d": 520, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 17, 38, 51, 64, 81, 91, 93, 61, 15]", - "total_badness": 673.69458466 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 14, 39, 52, 64, 79, 98, 93, 57, 15]", + "total_badness": 673.37179433 } ], "boxcyl.geo": [ @@ -113,29 +113,29 @@ 141.96 ], "angles_trig": [ - 16.491, - 127.01 + 16.682, + 126.99 ], "ne1d": 94, "ne2d": 114, - "ne3d": 151, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 6, 12, 13, 7, 5, 10, 6, 18, 23, 15, 23, 9, 2]", - "total_badness": 235.71475569 + "ne3d": 157, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 7, 11, 12, 9, 4, 12, 5, 20, 23, 15, 25, 11, 1]", + "total_badness": 244.61102429 }, { "angles_tet": [ 16.335, - 150.13 + 155.63 ], "angles_trig": [ - 22.011, - 118.9 + 14.668, + 147.85 ], "ne1d": 136, "ne2d": 222, - "ne3d": 376, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 2, 2, 6, 20, 29, 32, 62, 63, 67, 49, 24, 17, 2]", - "total_badness": 538.32692177 + "ne3d": 381, + "quality_histogram": "[0, 0, 0, 0, 1, 4, 2, 4, 6, 5, 14, 34, 38, 48, 65, 73, 50, 16, 17, 4]", + "total_badness": 563.54810644 }, { "angles_tet": [ @@ -154,18 +154,18 @@ }, { "angles_tet": [ - 26.449, - 140.15 + 26.476, + 140.11 ], "angles_trig": [ - 24.477, - 114.57 + 26.654, + 117.5 ], "ne1d": 284, "ne2d": 938, - "ne3d": 3808, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 12, 47, 117, 277, 497, 641, 782, 746, 506, 177]", - "total_badness": 4753.2608817 + "ne3d": 3844, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 14, 51, 129, 292, 530, 650, 787, 717, 501, 171]", + "total_badness": 4815.6094781 }, { "angles_tet": [ @@ -271,74 +271,74 @@ "ne1d": 224, "ne2d": 944, "ne3d": 11879, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 15, 66, 190, 486, 1113, 1774, 2543, 2771, 2231, 685]", - "total_badness": 14361.247834 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 15, 66, 190, 486, 1113, 1773, 2543, 2772, 2231, 685]", + "total_badness": 14361.247665 } ], "cone.geo": [ { "angles_tet": [ - 13.001, - 151.67 + 12.9, + 152.18 ], "angles_trig": [ - 18.841, - 121.55 + 18.843, + 127.95 ], "ne1d": 64, "ne2d": 722, - "ne3d": 1273, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 6, 15, 38, 56, 96, 131, 135, 153, 162, 152, 136, 115, 62, 14]", - "total_badness": 1925.8714141 + "ne3d": 1287, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 8, 15, 35, 61, 97, 133, 123, 161, 175, 151, 136, 112, 60, 18]", + "total_badness": 1946.0484538 }, { "angles_tet": [ - 9.8354, - 165.47 + 13.641, + 161.17 ], "angles_trig": [ - 11.866, - 146.87 + 12.726, + 140.38 ], "ne1d": 32, "ne2d": 220, - "ne3d": 682, - "quality_histogram": "[0, 0, 3, 6, 27, 29, 43, 59, 57, 69, 78, 72, 47, 60, 28, 31, 30, 24, 12, 7]", - "total_badness": 1446.4542095 + "ne3d": 847, + "quality_histogram": "[0, 0, 0, 0, 1, 14, 31, 45, 73, 89, 90, 85, 83, 69, 67, 60, 57, 51, 25, 7]", + "total_badness": 1516.2572857 }, { "angles_tet": [ - 2.1733, - 172.69 + 3.6386, + 171.81 ], "angles_trig": [ - 6.6643, - 162.43 + 6.6632, + 161.63 ], "ne1d": 48, "ne2d": 428, - "ne3d": 923, - "quality_histogram": "[6, 19, 49, 47, 58, 49, 52, 62, 83, 82, 70, 88, 52, 49, 61, 32, 23, 28, 11, 2]", - "total_badness": 2830.4770758 + "ne3d": 1000, + "quality_histogram": "[0, 15, 60, 63, 62, 69, 60, 59, 84, 82, 83, 86, 67, 51, 63, 28, 23, 25, 19, 1]", + "total_badness": 2965.2093875 }, { "angles_tet": [ - 17.241, - 144.22 + 17.354, + 145.27 ], "angles_trig": [ - 17.777, - 121.5 + 17.781, + 119.21 ], "ne1d": 64, "ne2d": 722, - "ne3d": 1246, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 11, 23, 42, 90, 110, 129, 162, 174, 152, 136, 131, 67, 18]", - "total_badness": 1823.124854 + "ne3d": 1266, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 9, 21, 45, 72, 122, 136, 159, 177, 181, 146, 112, 69, 16]", + "total_badness": 1845.674381 }, { "angles_tet": [ - 17.406, + 17.405, 142.43 ], "angles_trig": [ @@ -349,22 +349,22 @@ "ne2d": 1660, "ne3d": 4458, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 8, 32, 70, 131, 272, 410, 628, 728, 793, 731, 514, 139]", - "total_badness": 5796.7549854 + "total_badness": 5796.7552731 }, { "angles_tet": [ - 22.764, - 140.56 + 22.876, + 139.95 ], "angles_trig": [ - 27.263, + 25.605, 120.46 ], "ne1d": 160, "ne2d": 4748, - "ne3d": 27254, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 16, 71, 235, 659, 1375, 2774, 4392, 5618, 6099, 4470, 1540]", - "total_badness": 33350.665768 + "ne3d": 27248, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 17, 69, 239, 641, 1323, 2759, 4411, 5626, 6124, 4496, 1539]", + "total_badness": 33323.749036 } ], "cube.geo": [ @@ -462,18 +462,18 @@ "cubeandring.geo": [ { "angles_tet": [ - 5.0886, - 168.15 + 5.2065, + 170.27 ], "angles_trig": [ - 11.704, + 12.789, 150.46 ], "ne1d": 262, "ne2d": 726, - "ne3d": 2165, - "quality_histogram": "[0, 4, 9, 26, 77, 106, 122, 104, 88, 59, 50, 85, 108, 191, 251, 255, 262, 219, 117, 32]", - "total_badness": 4081.3030242 + "ne3d": 2190, + "quality_histogram": "[0, 3, 5, 28, 68, 111, 125, 104, 84, 57, 59, 89, 112, 203, 259, 256, 258, 226, 113, 30]", + "total_badness": 4074.9593098 }, { "angles_tet": [ @@ -488,12 +488,12 @@ "ne2d": 164, "ne3d": 252, "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 2, 3, 11, 30, 31, 34, 40, 38, 33, 17, 7, 1]", - "total_badness": 369.95189199 + "total_badness": 369.95185592 }, { "angles_tet": [ - 21.008, - 143.76 + 20.8, + 140.12 ], "angles_trig": [ 21.077, @@ -501,54 +501,54 @@ ], "ne1d": 190, "ne2d": 300, - "ne3d": 637, - "quality_histogram": "[0, 0, 0, 0, 1, 0, 0, 2, 9, 26, 46, 56, 73, 108, 88, 92, 64, 48, 22, 2]", - "total_badness": 947.83482937 + "ne3d": 633, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 7, 20, 39, 56, 55, 111, 96, 80, 83, 55, 25, 4]", + "total_badness": 919.1584555 }, { "angles_tet": [ - 6.3388, - 162.18 + 5.9887, + 162.04 ], "angles_trig": [ - 13.547, - 150.69 + 13.633, + 150.46 ], "ne1d": 262, "ne2d": 726, - "ne3d": 2042, - "quality_histogram": "[0, 2, 2, 14, 38, 85, 114, 100, 71, 41, 42, 59, 98, 174, 237, 295, 282, 216, 136, 36]", - "total_badness": 3537.8190966 + "ne3d": 2023, + "quality_histogram": "[0, 3, 2, 11, 31, 76, 116, 93, 80, 43, 38, 52, 90, 195, 227, 293, 281, 223, 133, 36]", + "total_badness": 3469.7404067 }, { "angles_tet": [ - 23.906, - 141.88 + 23.833, + 141.99 ], "angles_trig": [ - 23.172, - 119.78 + 23.082, + 116.18 ], "ne1d": 378, "ne2d": 1412, - "ne3d": 7695, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 8, 36, 113, 286, 492, 840, 1340, 1570, 1501, 1167, 340]", - "total_badness": 9589.479693 + "ne3d": 7796, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 8, 34, 125, 288, 492, 851, 1322, 1544, 1550, 1212, 367]", + "total_badness": 9700.3117232 }, { "angles_tet": [ - 24.428, - 143.27 + 24.435, + 143.51 ], "angles_trig": [ - 24.968, - 121.61 + 24.282, + 121.95 ], "ne1d": 624, "ne2d": 3944, - "ne3d": 38343, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 12, 72, 229, 696, 1857, 3739, 6022, 8041, 8829, 6603, 2238]", - "total_badness": 46633.485738 + "ne3d": 38258, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 14, 63, 223, 668, 1796, 3698, 6025, 8126, 8752, 6655, 2234]", + "total_badness": 46480.533567 } ], "cubeandspheres.geo": [ @@ -646,63 +646,63 @@ "cubemcyl.geo": [ { "angles_tet": [ - 19.041, - 148.34 + 18.025, + 150.96 ], "angles_trig": [ - 19.915, - 129.27 + 19.513, + 133.51 ], "ne1d": 142, "ne2d": 2488, - "ne3d": 20432, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 14, 54, 187, 395, 899, 1585, 2434, 3099, 3519, 3425, 2759, 1616, 443]", - "total_badness": 27337.360732 + "ne3d": 20418, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 14, 49, 202, 394, 845, 1593, 2466, 3106, 3519, 3405, 2750, 1635, 437]", + "total_badness": 27308.898163 }, { "angles_tet": [ 20.47, - 140.16 + 140.14 ], "angles_trig": [ - 17.584, - 126.83 + 17.578, + 126.88 ], "ne1d": 64, "ne2d": 642, "ne3d": 3267, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 11, 22, 60, 129, 205, 354, 477, 540, 526, 443, 324, 153, 22]", - "total_badness": 4603.5864383 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 10, 25, 61, 132, 206, 350, 474, 527, 539, 435, 328, 157, 22]", + "total_badness": 4603.1212688 }, { "angles_tet": [ - 22.711, - 143.32 + 22.382, + 143.35 ], "angles_trig": [ - 17.713, - 129.68 + 18.374, + 130.35 ], "ne1d": 102, "ne2d": 1402, - "ne3d": 8240, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 4, 30, 67, 191, 423, 704, 1053, 1363, 1371, 1302, 971, 578, 181]", - "total_badness": 11153.756744 + "ne3d": 8310, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 4, 28, 59, 209, 415, 702, 1096, 1322, 1458, 1327, 950, 571, 167]", + "total_badness": 11254.481655 }, { "angles_tet": [ - 21.242, - 144.44 + 21.525, + 144.69 ], "angles_trig": [ - 21.964, - 122.59 + 23.793, + 122.54 ], "ne1d": 142, "ne2d": 2488, - "ne3d": 19443, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 11, 46, 120, 425, 1007, 1816, 2772, 3553, 3744, 3270, 2124, 553]", - "total_badness": 24928.621019 + "ne3d": 19408, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 8, 44, 109, 424, 991, 1840, 2835, 3532, 3751, 3227, 2104, 542]", + "total_badness": 24892.465354 }, { "angles_tet": [ @@ -716,8 +716,8 @@ "ne1d": 210, "ne2d": 5508, "ne3d": 89117, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 7, 64, 213, 756, 2149, 5057, 9544, 14526, 18574, 19578, 14242, 4407]", - "total_badness": 109474.0737 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 7, 64, 213, 756, 2149, 5056, 9540, 14533, 18572, 19573, 14246, 4408]", + "total_badness": 109473.41917 }, { "angles_tet": [ @@ -732,7 +732,7 @@ "ne2d": 15122, "ne3d": 525200, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 82, 526, 2296, 7742, 21372, 47326, 79983, 111877, 125226, 97896, 30868]", - "total_badness": 633738.01838 + "total_badness": 633738.01761 } ], "cubemsphere.geo": [ @@ -747,24 +747,24 @@ ], "ne1d": 90, "ne2d": 702, - "ne3d": 4831, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 6, 10, 61, 94, 209, 377, 599, 716, 821, 772, 684, 378, 103]", - "total_badness": 6481.1281561 + "ne3d": 4832, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 6, 10, 60, 96, 207, 372, 599, 721, 814, 768, 688, 386, 104]", + "total_badness": 6481.1187794 }, { "angles_tet": [ - 17.436, - 150.08 + 15.952, + 150.19 ], "angles_trig": [ - 14.077, - 130.7 + 14.233, + 127.99 ], "ne1d": 44, "ne2d": 274, - "ne3d": 769, - "quality_histogram": "[0, 0, 0, 0, 1, 3, 9, 15, 28, 41, 69, 78, 114, 88, 96, 95, 62, 35, 31, 4]", - "total_badness": 1221.5992458 + "ne3d": 786, + "quality_histogram": "[0, 0, 0, 0, 1, 3, 8, 9, 33, 46, 85, 95, 112, 103, 87, 76, 59, 33, 28, 8]", + "total_badness": 1260.9360809 }, { "angles_tet": [ @@ -783,7 +783,7 @@ }, { "angles_tet": [ - 24.932, + 24.86, 138.52 ], "angles_trig": [ @@ -792,13 +792,13 @@ ], "ne1d": 90, "ne2d": 702, - "ne3d": 4638, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 20, 47, 101, 244, 467, 692, 821, 890, 755, 457, 141]", - "total_badness": 5985.8946244 + "ne3d": 4632, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 20, 47, 99, 242, 464, 688, 808, 898, 763, 453, 147]", + "total_badness": 5974.4782285 }, { "angles_tet": [ - 25.469, + 25.47, 139.67 ], "angles_trig": [ @@ -807,24 +807,24 @@ ], "ne1d": 146, "ne2d": 1492, - "ne3d": 17944, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 14, 55, 167, 422, 1012, 1922, 3070, 3860, 3747, 2850, 824]", - "total_badness": 22091.45854 + "ne3d": 17955, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 13, 51, 178, 420, 1013, 1930, 3073, 3841, 3759, 2846, 830]", + "total_badness": 22106.809834 }, { "angles_tet": [ - 23.568, + 23.59, 140.8 ], "angles_trig": [ - 24.037, - 125.3 + 24.874, + 125.34 ], "ne1d": 248, "ne2d": 4354, - "ne3d": 113873, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 22, 142, 565, 1781, 4999, 10821, 18217, 24198, 26644, 20232, 6250]", - "total_badness": 138024.45404 + "ne3d": 113906, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 20, 147, 542, 1787, 4999, 10827, 18062, 24526, 26516, 20186, 6293]", + "total_badness": 138048.7365 } ], "cylinder.geo": [ @@ -845,33 +845,33 @@ }, { "angles_tet": [ - 35.352, - 114.72 + 35.277, + 118.01 ], "angles_trig": [ - 32.903, - 97.687 + 31.331, + 91.351 ], "ne1d": 24, "ne2d": 66, - "ne3d": 107, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 7, 15, 12, 16, 25, 14, 15]", - "total_badness": 129.9282285 + "ne3d": 96, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 9, 6, 14, 33, 17, 14]", + "total_badness": 111.99292091 }, { "angles_tet": [ - 15.283, - 154.13 + 14.646, + 148.59 ], "angles_trig": [ - 18.507, - 126.84 + 15.784, + 130.31 ], "ne1d": 36, "ne2d": 152, - "ne3d": 329, - "quality_histogram": "[0, 0, 0, 0, 0, 4, 13, 28, 34, 14, 22, 24, 26, 29, 34, 19, 41, 22, 12, 7]", - "total_badness": 573.53528334 + "ne3d": 428, + "quality_histogram": "[0, 0, 0, 0, 0, 4, 4, 22, 20, 37, 36, 43, 44, 48, 44, 36, 44, 27, 15, 4]", + "total_badness": 705.52205541 }, { "angles_tet": [ @@ -890,33 +890,33 @@ }, { "angles_tet": [ - 22.02, - 138.96 + 21.985, + 136.08 ], "angles_trig": [ - 24.393, - 119.51 + 24.141, + 119.73 ], "ne1d": 76, "ne2d": 636, - "ne3d": 1193, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 35, 58, 101, 143, 198, 194, 198, 145, 89, 22]", - "total_badness": 1610.5397081 + "ne3d": 1183, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 29, 61, 96, 141, 201, 195, 208, 129, 88, 25]", + "total_badness": 1595.7683733 }, { "angles_tet": [ - 26.431, - 137.01 + 26.542, + 136.11 ], "angles_trig": [ - 29.429, - 114.09 + 29.438, + 113.26 ], "ne1d": 124, "ne2d": 1672, - "ne3d": 8121, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 9, 50, 133, 416, 799, 1302, 1711, 1834, 1397, 468]", - "total_badness": 9872.9589801 + "ne3d": 8113, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 7, 46, 139, 415, 799, 1289, 1722, 1833, 1400, 461]", + "total_badness": 9862.4056943 } ], "cylsphere.geo": [ @@ -937,18 +937,18 @@ }, { "angles_tet": [ - 11.216, - 162.1 + 10.328, + 164.46 ], "angles_trig": [ - 11.297, - 157.18 + 7.7848, + 162.2 ], "ne1d": 48, "ne2d": 142, - "ne3d": 240, - "quality_histogram": "[0, 0, 0, 15, 15, 39, 22, 23, 9, 4, 1, 5, 6, 15, 17, 35, 20, 8, 3, 3]", - "total_badness": 600.26723612 + "ne3d": 244, + "quality_histogram": "[0, 0, 1, 13, 18, 29, 23, 9, 16, 4, 13, 9, 6, 21, 15, 29, 28, 6, 3, 1]", + "total_badness": 590.64515274 }, { "angles_tet": [ @@ -968,109 +968,109 @@ { "angles_tet": [ 24.122, - 136.31 + 133.55 ], "angles_trig": [ 20.921, - 117.93 + 118.4 ], "ne1d": 152, "ne2d": 1084, - "ne3d": 2876, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 19, 35, 100, 163, 262, 362, 452, 549, 486, 354, 89]", - "total_badness": 3717.0068038 + "ne3d": 2874, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 16, 39, 89, 168, 262, 358, 447, 555, 493, 356, 86]", + "total_badness": 3711.0960906 }, { "angles_tet": [ - 21.966, - 141.66 + 21.928, + 141.79 ], "angles_trig": [ - 24.678, - 126.09 + 24.75, + 125.82 ], "ne1d": 248, "ne2d": 2820, - "ne3d": 17753, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 31, 104, 303, 725, 1654, 2787, 3759, 4114, 3205, 1066]", - "total_badness": 21493.852902 + "ne3d": 17811, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 31, 109, 304, 725, 1677, 2822, 3762, 4125, 3189, 1061]", + "total_badness": 21578.072496 } ], "ellipsoid.geo": [ { "angles_tet": [ - 17.18, - 148.24 + 17.269, + 151.81 ], "angles_trig": [ - 18.74, - 123.79 + 19.871, + 123.83 ], "ne1d": 0, "ne2d": 704, - "ne3d": 1288, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 12, 35, 66, 96, 127, 161, 175, 155, 147, 142, 92, 55, 23]", - "total_badness": 1943.7694776 + "ne3d": 1308, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 10, 29, 69, 93, 136, 153, 148, 188, 162, 141, 101, 55, 20]", + "total_badness": 1962.073156 }, { "angles_tet": [ - 3.2444, - 174.72 + 3.9602, + 171.53 ], "angles_trig": [ - 4.0664, - 165.5 + 7.5528, + 160.29 ], "ne1d": 0, "ne2d": 192, - "ne3d": 898, - "quality_histogram": "[2, 121, 119, 126, 114, 100, 65, 46, 55, 37, 31, 24, 13, 16, 8, 9, 10, 0, 0, 2]", - "total_badness": 4890.5820005 + "ne3d": 1093, + "quality_histogram": "[0, 33, 94, 152, 154, 110, 114, 88, 76, 70, 54, 48, 38, 21, 10, 13, 10, 6, 1, 1]", + "total_badness": 4345.0695569 }, { "angles_tet": [ - 19.919, - 134.24 + 20.327, + 138.87 ], "angles_trig": [ - 19.054, - 114.7 + 19.875, + 114.49 ], "ne1d": 0, "ne2d": 394, - "ne3d": 597, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 6, 29, 49, 60, 87, 92, 86, 82, 48, 33, 15, 8]", - "total_badness": 899.55007686 + "ne3d": 613, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 7, 27, 44, 55, 87, 98, 96, 79, 56, 33, 19, 10]", + "total_badness": 911.68785911 }, { "angles_tet": [ - 19.369, - 144.19 + 19.716, + 141.53 ], "angles_trig": [ - 18.297, - 124.49 + 19.373, + 123.99 ], "ne1d": 0, "ne2d": 704, - "ne3d": 1285, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 6, 32, 61, 67, 125, 157, 151, 179, 160, 155, 100, 67, 24]", - "total_badness": 1894.9301899 + "ne3d": 1290, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 37, 59, 71, 122, 133, 174, 165, 170, 165, 98, 69, 24]", + "total_badness": 1895.8131549 }, { "angles_tet": [ - 22.352, - 144.95 + 23.414, + 143.68 ], "angles_trig": [ - 22.933, - 115.76 + 22.924, + 115.08 ], "ne1d": 0, "ne2d": 1618, - "ne3d": 5619, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 15, 46, 131, 304, 463, 681, 893, 1027, 1081, 754, 221]", - "total_badness": 7143.079025 + "ne3d": 5617, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 1, 13, 45, 133, 300, 457, 675, 899, 1033, 1085, 754, 221]", + "total_badness": 7133.2862172 }, { "angles_tet": [ @@ -1091,100 +1091,100 @@ "ellipticcone.geo": [ { "angles_tet": [ - 17.696, + 17.699, 148.03 ], "angles_trig": [ - 22.831, + 23.432, 122.76 ], "ne1d": 174, "ne2d": 1562, - "ne3d": 5179, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 12, 41, 90, 190, 296, 503, 717, 972, 960, 765, 460, 170]", - "total_badness": 6791.2847453 + "ne3d": 5188, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 9, 32, 97, 195, 341, 536, 705, 942, 939, 749, 465, 176]", + "total_badness": 6820.3521124 }, { "angles_tet": [ - 17.515, - 154.86 + 13.538, + 154.19 ], "angles_trig": [ - 18.772, - 127.9 + 18.191, + 127.96 ], "ne1d": 86, "ne2d": 380, - "ne3d": 576, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 3, 4, 11, 25, 33, 61, 54, 71, 83, 79, 64, 47, 22, 17]", - "total_badness": 854.86560286 + "ne3d": 581, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 2, 6, 15, 22, 38, 48, 71, 68, 67, 86, 66, 47, 26, 17]", + "total_badness": 864.01541316 }, { "angles_tet": [ - 16.279, - 155.23 + 16.937, + 158.53 ], "angles_trig": [ - 16.146, - 133.94 + 17.918, + 140.74 ], "ne1d": 130, "ne2d": 864, - "ne3d": 1707, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 7, 21, 23, 42, 68, 102, 150, 186, 197, 269, 284, 209, 118, 29]", - "total_badness": 2408.1612987 + "ne3d": 1752, + "quality_histogram": "[0, 0, 0, 0, 1, 1, 6, 20, 30, 49, 67, 118, 150, 184, 211, 261, 278, 240, 105, 31]", + "total_badness": 2483.6354405 }, { "angles_tet": [ - 21.749, - 144.86 + 21.003, + 144.04 ], "angles_trig": [ - 25.521, + 25.698, 119.99 ], "ne1d": 174, "ne2d": 1562, - "ne3d": 4993, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 10, 43, 82, 190, 407, 651, 895, 1050, 901, 559, 201]", - "total_badness": 6324.738761 + "ne3d": 5006, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 10, 46, 103, 236, 414, 648, 903, 1011, 879, 548, 205]", + "total_badness": 6374.6263795 }, { "angles_tet": [ - 20.935, - 144.66 + 20.937, + 143.54 ], "angles_trig": [ - 18.719, - 132.57 + 18.946, + 132.45 ], "ne1d": 258, "ne2d": 3468, - "ne3d": 13471, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 8, 18, 67, 132, 305, 570, 999, 1594, 2335, 2604, 2480, 1787, 572]", - "total_badness": 17093.610487 + "ne3d": 13537, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 21, 59, 150, 296, 549, 975, 1620, 2285, 2650, 2548, 1773, 607]", + "total_badness": 17147.627547 }, { "angles_tet": [ - 19.639, + 20.184, 144.83 ], "angles_trig": [ - 21.736, + 21.582, 126.14 ], "ne1d": 432, "ne2d": 9544, - "ne3d": 69841, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 8, 29, 68, 223, 647, 1557, 3675, 7009, 11233, 14653, 15498, 11829, 3411]", - "total_badness": 85612.037608 + "ne3d": 69860, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 7, 30, 69, 224, 646, 1567, 3678, 7012, 11245, 14665, 15510, 11805, 3401]", + "total_badness": 85646.633699 } ], "ellipticcyl.geo": [ { "angles_tet": [ - 16.524, - 149.5 + 16.526, + 149.46 ], "angles_trig": [ 21.243, @@ -1192,39 +1192,39 @@ ], "ne1d": 156, "ne2d": 996, - "ne3d": 2251, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 10, 51, 75, 118, 218, 247, 339, 373, 356, 250, 161, 49]", - "total_badness": 3094.4761746 + "ne3d": 2250, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 3, 10, 54, 75, 108, 223, 245, 334, 397, 328, 264, 157, 51]", + "total_badness": 3092.4590274 }, { "angles_tet": [ - 22.853, - 132.4 + 22.336, + 134.82 ], "angles_trig": [ - 21.921, - 108.66 + 22.081, + 106.88 ], "ne1d": 76, "ne2d": 238, - "ne3d": 318, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 16, 20, 33, 38, 67, 54, 49, 20, 11, 1]", - "total_badness": 450.48872415 + "ne3d": 324, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 10, 17, 21, 32, 45, 64, 59, 44, 21, 8, 2]", + "total_badness": 462.78168789 }, { "angles_tet": [ - 20.733, - 143.0 + 20.852, + 142.71 ], "angles_trig": [ - 23.594, - 117.45 + 23.587, + 117.49 ], "ne1d": 116, "ne2d": 596, - "ne3d": 1126, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 9, 28, 29, 73, 131, 178, 186, 196, 165, 107, 21]", - "total_badness": 1489.487043 + "ne3d": 1134, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 10, 26, 33, 64, 125, 173, 204, 206, 172, 98, 20]", + "total_badness": 1497.0983847 }, { "angles_tet": [ @@ -1232,51 +1232,51 @@ 144.62 ], "angles_trig": [ - 23.116, + 23.115, 121.16 ], "ne1d": 156, "ne2d": 996, - "ne3d": 2223, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 7, 27, 54, 105, 179, 229, 331, 394, 366, 287, 195, 47]", - "total_badness": 2982.3855227 + "ne3d": 2228, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 7, 26, 55, 99, 185, 230, 332, 401, 349, 286, 208, 48]", + "total_badness": 2986.6628685 }, { "angles_tet": [ - 24.468, - 138.03 + 24.51, + 137.57 ], "angles_trig": [ - 25.275, - 115.12 + 25.277, + 115.15 ], "ne1d": 232, "ne2d": 2212, - "ne3d": 8292, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 15, 37, 90, 258, 586, 955, 1411, 1668, 1703, 1209, 359]", - "total_badness": 10319.810588 + "ne3d": 8317, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 13, 36, 93, 268, 583, 968, 1432, 1665, 1688, 1220, 350]", + "total_badness": 10359.049019 }, { "angles_tet": [ - 21.427, - 140.07 + 21.424, + 141.72 ], "angles_trig": [ - 23.929, + 23.642, 119.81 ], "ne1d": 388, "ne2d": 6142, - "ne3d": 54717, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 62, 250, 720, 2125, 4823, 8219, 11623, 13212, 10219, 3446]", - "total_badness": 65897.718457 + "ne3d": 54724, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 15, 66, 243, 706, 2138, 4789, 8230, 11658, 13128, 10331, 3418]", + "total_badness": 65893.973096 } ], "fichera.geo": [ { "angles_tet": [ - 35.188, - 126.84 + 31.324, + 131.07 ], "angles_trig": [ 35.264, @@ -1284,9 +1284,9 @@ ], "ne1d": 50, "ne2d": 38, - "ne3d": 34, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 2, 9, 3, 10, 3, 0, 0, 3]", - "total_badness": 47.155868379 + "ne3d": 35, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 3, 8, 4, 10, 2, 0, 0, 2]", + "total_badness": 50.263302236 }, { "angles_tet": [ @@ -1320,8 +1320,8 @@ }, { "angles_tet": [ - 35.188, - 126.84 + 31.324, + 131.07 ], "angles_trig": [ 35.264, @@ -1329,9 +1329,9 @@ ], "ne1d": 50, "ne2d": 38, - "ne3d": 34, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 2, 9, 3, 10, 3, 0, 0, 3]", - "total_badness": 47.155868379 + "ne3d": 35, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 3, 8, 4, 10, 2, 0, 0, 2]", + "total_badness": 50.263302236 }, { "angles_tet": [ @@ -1350,8 +1350,8 @@ }, { "angles_tet": [ - 26.621, - 137.76 + 26.792, + 137.1 ], "angles_trig": [ 22.737, @@ -1359,16 +1359,16 @@ ], "ne1d": 144, "ne2d": 274, - "ne3d": 489, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 20, 29, 59, 75, 95, 77, 74, 43, 13]", - "total_badness": 639.78974452 + "ne3d": 495, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 17, 29, 58, 79, 105, 72, 75, 42, 14]", + "total_badness": 646.85540277 } ], "frame.step": [ { "angles_tet": [ - 2.7663, - 169.42 + 2.4313, + 169.75 ], "angles_trig": [ 1.7007, @@ -1376,9 +1376,9 @@ ], "ne1d": 12694, "ne2d": 40504, - "ne3d": 217035, - "quality_histogram": "[2, 7, 6, 10, 13, 38, 104, 293, 948, 2202, 4751, 9102, 16010, 24305, 31395, 36541, 36662, 30391, 19284, 4971]", - "total_badness": 290345.32031 + "ne3d": 217246, + "quality_histogram": "[1, 6, 8, 8, 16, 37, 106, 300, 948, 2218, 4792, 9112, 16087, 24307, 31406, 36515, 36658, 30414, 19320, 4987]", + "total_badness": 290676.80791 }, { "angles_tet": [ @@ -1391,14 +1391,14 @@ ], "ne1d": 6026, "ne2d": 11450, - "ne3d": 30654, - "quality_histogram": "[3, 4, 8, 18, 25, 59, 158, 291, 794, 1103, 1677, 2706, 3249, 4083, 4515, 4321, 3450, 2495, 1353, 342]", - "total_badness": 45863.767283 + "ne3d": 30727, + "quality_histogram": "[3, 4, 6, 14, 20, 56, 153, 286, 812, 1099, 1712, 2719, 3278, 4078, 4527, 4307, 3435, 2514, 1371, 333]", + "total_badness": 45935.705192 }, { "angles_tet": [ - 1.8662, - 175.73 + 2.1887, + 174.11 ], "angles_trig": [ 1.6035, @@ -1406,15 +1406,15 @@ ], "ne1d": 9704, "ne2d": 24550, - "ne3d": 95234, - "quality_histogram": "[10, 30, 47, 144, 375, 1073, 2109, 3137, 4186, 5488, 7023, 8891, 10539, 11468, 11436, 10390, 8429, 6086, 3487, 886]", - "total_badness": 157343.87525 + "ne3d": 95379, + "quality_histogram": "[2, 15, 20, 121, 363, 1069, 2161, 3193, 4233, 5543, 7043, 8842, 10552, 11486, 11430, 10400, 8432, 6101, 3489, 884]", + "total_badness": 157041.94225 } ], "hinge.stl": [ { "angles_tet": [ - 21.231, + 17.355, 144.42 ], "angles_trig": [ @@ -1423,24 +1423,24 @@ ], "ne1d": 456, "ne2d": 1220, - "ne3d": 1990, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 8, 18, 40, 68, 124, 179, 249, 297, 309, 262, 257, 140, 39]", - "total_badness": 2756.3340439 + "ne3d": 1991, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 9, 18, 42, 76, 116, 177, 249, 306, 297, 267, 261, 134, 39]", + "total_badness": 2763.9243811 }, { "angles_tet": [ - 7.5286, + 7.7862, 161.84 ], "angles_trig": [ - 9.1007, + 7.0669, 148.89 ], "ne1d": 298, "ne2d": 610, - "ne3d": 787, - "quality_histogram": "[0, 0, 1, 9, 10, 4, 21, 15, 37, 42, 66, 85, 104, 95, 83, 89, 51, 47, 24, 4]", - "total_badness": 1354.692379 + "ne3d": 802, + "quality_histogram": "[0, 0, 1, 9, 9, 4, 23, 15, 39, 40, 69, 83, 108, 103, 80, 88, 52, 47, 28, 4]", + "total_badness": 1376.1215919 }, { "angles_tet": [ @@ -1448,14 +1448,14 @@ 157.43 ], "angles_trig": [ - 11.548, + 12.656, 152.72 ], "ne1d": 370, "ne2d": 856, - "ne3d": 1136, - "quality_histogram": "[0, 0, 0, 2, 4, 5, 14, 24, 38, 56, 79, 116, 136, 138, 156, 152, 98, 66, 43, 9]", - "total_badness": 1797.1086909 + "ne3d": 1141, + "quality_histogram": "[0, 0, 0, 2, 4, 5, 13, 24, 37, 50, 76, 120, 142, 140, 154, 152, 99, 68, 46, 9]", + "total_badness": 1797.640739 }, { "angles_tet": [ @@ -1468,14 +1468,14 @@ ], "ne1d": 516, "ne2d": 1574, - "ne3d": 2597, - "quality_histogram": "[0, 0, 0, 0, 0, 4, 3, 6, 25, 48, 90, 173, 227, 322, 389, 382, 338, 326, 216, 48]", - "total_badness": 3604.1017054 + "ne3d": 2588, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 2, 6, 22, 42, 90, 172, 242, 309, 401, 389, 332, 313, 216, 50]", + "total_badness": 3580.9561619 }, { "angles_tet": [ - 15.942, - 153.4 + 19.877, + 146.81 ], "angles_trig": [ 21.493, @@ -1483,9 +1483,9 @@ ], "ne1d": 722, "ne2d": 2866, - "ne3d": 6698, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 2, 26, 31, 56, 169, 332, 647, 888, 1046, 1166, 1195, 882, 256]", - "total_badness": 8595.0135342 + "ne3d": 6697, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 26, 31, 55, 168, 331, 644, 894, 1039, 1172, 1197, 880, 257]", + "total_badness": 8589.7963349 }, { "angles_tet": [ @@ -1498,9 +1498,9 @@ ], "ne1d": 1862, "ne2d": 19474, - "ne3d": 136616, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 16, 59, 293, 886, 2637, 6509, 13074, 21322, 29014, 31086, 23883, 7836]", - "total_badness": 166167.05414 + "ne3d": 136621, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 14, 55, 291, 892, 2633, 6517, 13067, 21320, 29000, 31114, 23880, 7837]", + "total_badness": 166165.22295 } ], "lense.in2d": [ @@ -1598,18 +1598,18 @@ "lshape3d.geo": [ { "angles_tet": [ - 35.388, - 125.2 + 35.202, + 125.39 ], "angles_trig": [ - 35.264, - 90.0 + 35.225, + 109.34 ], "ne1d": 44, "ne2d": 28, - "ne3d": 18, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 16, 0, 1, 0, 0, 0, 0]", - "total_badness": 27.266612058 + "ne3d": 24, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 20, 0, 2, 0, 0, 0, 0]", + "total_badness": 36.197580222 }, { "angles_tet": [ @@ -1643,18 +1643,18 @@ }, { "angles_tet": [ - 35.388, - 125.2 + 35.202, + 125.39 ], "angles_trig": [ - 35.264, - 90.0 + 35.225, + 109.34 ], "ne1d": 44, "ne2d": 28, - "ne3d": 18, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 16, 0, 1, 0, 0, 0, 0]", - "total_badness": 27.266612058 + "ne3d": 24, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 20, 0, 2, 0, 0, 0, 0]", + "total_badness": 36.197580222 }, { "angles_tet": [ @@ -1690,23 +1690,23 @@ "manyholes.geo": [ { "angles_tet": [ - 14.385, + 16.739, 155.18 ], "angles_trig": [ - 13.429, + 16.38, 141.4 ], "ne1d": 5886, "ne2d": 48052, - "ne3d": 178778, - "quality_histogram": "[0, 0, 0, 0, 0, 5, 15, 82, 302, 823, 2352, 6219, 11001, 18996, 27378, 30679, 31231, 26885, 18302, 4508]", - "total_badness": 234001.02203 + "ne3d": 178760, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 12, 80, 302, 822, 2342, 6218, 10972, 19015, 27357, 30678, 31231, 26920, 18300, 4508]", + "total_badness": 233946.62795 }, { "angles_tet": [ 12.34, - 149.72 + 154.57 ], "angles_trig": [ 14.887, @@ -1714,14 +1714,14 @@ ], "ne1d": 2746, "ne2d": 13866, - "ne3d": 29325, - "quality_histogram": "[0, 0, 0, 0, 14, 17, 42, 146, 371, 869, 1440, 2330, 3302, 4289, 4156, 3769, 3286, 2641, 1936, 717]", - "total_badness": 42177.790336 + "ne3d": 29442, + "quality_histogram": "[0, 0, 0, 0, 12, 16, 37, 132, 353, 844, 1436, 2314, 3286, 4343, 4190, 3761, 3341, 2704, 1959, 714]", + "total_badness": 42234.934692 }, { "angles_tet": [ 11.183, - 156.56 + 158.49 ], "angles_trig": [ 12.194, @@ -1729,58 +1729,58 @@ ], "ne1d": 4106, "ne2d": 27994, - "ne3d": 70627, - "quality_histogram": "[0, 0, 0, 1, 31, 76, 173, 355, 687, 1481, 2555, 4161, 6718, 9312, 10356, 10578, 9851, 7683, 4827, 1782]", - "total_badness": 98944.029805 + "ne3d": 70656, + "quality_histogram": "[0, 0, 0, 1, 32, 76, 171, 350, 674, 1483, 2521, 4177, 6716, 9269, 10330, 10654, 9939, 7668, 4819, 1776]", + "total_badness": 98935.486353 } ], "manyholes2.geo": [ { "angles_tet": [ - 14.171, + 15.378, 152.51 ], "angles_trig": [ 15.466, - 134.18 + 135.27 ], "ne1d": 10202, "ne2d": 55380, - "ne3d": 128050, - "quality_histogram": "[0, 0, 0, 0, 3, 31, 92, 255, 781, 1986, 4473, 7684, 11685, 17377, 18570, 18322, 17145, 15100, 10854, 3692]", - "total_badness": 176139.44449 + "ne3d": 128087, + "quality_histogram": "[0, 0, 0, 0, 1, 29, 89, 256, 787, 1967, 4465, 7680, 11657, 17411, 18584, 18304, 17173, 15121, 10875, 3688]", + "total_badness": 176150.00061 } ], "matrix.geo": [ { "angles_tet": [ - 8.793, - 169.51 + 9.9191, + 168.94 ], "angles_trig": [ - 9.0081, - 159.2 + 9.3137, + 159.4 ], "ne1d": 174, "ne2d": 1198, - "ne3d": 5195, - "quality_histogram": "[0, 0, 35, 130, 120, 83, 123, 149, 142, 185, 326, 347, 519, 643, 613, 574, 501, 419, 220, 66]", - "total_badness": 9312.8788458 + "ne3d": 5572, + "quality_histogram": "[0, 0, 31, 112, 111, 84, 129, 149, 129, 231, 347, 410, 512, 614, 660, 644, 564, 471, 287, 87]", + "total_badness": 9719.7984643 }, { "angles_tet": [ - 9.3063, - 168.95 + 9.4256, + 164.28 ], "angles_trig": [ - 7.9174, - 161.29 + 9.4686, + 154.65 ], "ne1d": 106, "ne2d": 610, - "ne3d": 1925, - "quality_histogram": "[0, 1, 8, 53, 94, 131, 144, 153, 184, 150, 232, 199, 160, 126, 83, 56, 60, 52, 33, 6]", - "total_badness": 4460.6379185 + "ne3d": 2133, + "quality_histogram": "[0, 1, 4, 23, 46, 92, 111, 125, 167, 176, 210, 215, 227, 185, 162, 118, 108, 95, 53, 15]", + "total_badness": 4241.9896407 }, { "angles_tet": [ @@ -1788,29 +1788,29 @@ 166.92 ], "angles_trig": [ - 9.9928, - 159.03 + 10.116, + 156.64 ], "ne1d": 132, "ne2d": 830, - "ne3d": 2764, - "quality_histogram": "[0, 0, 6, 34, 73, 104, 121, 141, 207, 263, 336, 307, 292, 221, 216, 173, 115, 95, 40, 20]", - "total_badness": 5528.4346023 + "ne3d": 2909, + "quality_histogram": "[0, 0, 3, 26, 49, 91, 128, 138, 160, 275, 317, 321, 315, 240, 250, 217, 170, 117, 67, 25]", + "total_badness": 5514.4460451 }, { "angles_tet": [ - 8.8485, - 169.45 + 9.9174, + 168.99 ], "angles_trig": [ - 8.8831, - 160.37 + 9.2867, + 159.4 ], "ne1d": 174, "ne2d": 1198, - "ne3d": 5125, - "quality_histogram": "[0, 0, 24, 114, 114, 73, 115, 136, 123, 180, 303, 344, 482, 597, 605, 617, 543, 441, 233, 81]", - "total_badness": 8942.8952661 + "ne3d": 5482, + "quality_histogram": "[0, 0, 23, 99, 103, 83, 114, 147, 109, 181, 291, 358, 477, 587, 693, 654, 635, 517, 319, 92]", + "total_badness": 9284.0511582 }, { "angles_tet": [ @@ -1823,24 +1823,24 @@ ], "ne1d": 248, "ne2d": 2324, - "ne3d": 16197, - "quality_histogram": "[0, 0, 0, 0, 0, 5, 22, 53, 115, 169, 301, 650, 904, 1483, 2057, 2572, 2763, 2706, 1807, 590]", - "total_badness": 21350.026437 + "ne3d": 16222, + "quality_histogram": "[0, 0, 0, 0, 0, 5, 21, 52, 115, 181, 300, 633, 916, 1521, 2073, 2581, 2745, 2693, 1823, 563]", + "total_badness": 21398.373545 }, { "angles_tet": [ 18.203, - 145.24 + 145.26 ], "angles_trig": [ 17.821, - 128.91 + 129.69 ], "ne1d": 418, "ne2d": 5968, - "ne3d": 101069, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 6, 8, 49, 101, 356, 1010, 2560, 5576, 10199, 16122, 20707, 22180, 16876, 5319]", - "total_badness": 124148.28491 + "ne3d": 101046, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 5, 8, 51, 102, 360, 987, 2555, 5555, 10157, 16065, 20720, 22257, 16899, 5325]", + "total_badness": 124081.81744 } ], "ortho.geo": [ @@ -1962,44 +1962,44 @@ ], "ne1d": 134, "ne2d": 288, - "ne3d": 527, - "quality_histogram": "[0, 0, 0, 2, 4, 1, 5, 6, 12, 28, 41, 42, 57, 73, 71, 55, 60, 43, 25, 2]", - "total_badness": 821.06101889 + "ne3d": 533, + "quality_histogram": "[0, 0, 0, 2, 4, 1, 5, 4, 13, 27, 34, 42, 58, 69, 77, 63, 60, 41, 29, 4]", + "total_badness": 820.60412439 }, { "angles_tet": [ 21.121, - 139.87 + 136.21 ], "angles_trig": [ - 24.396, - 116.29 + 24.417, + 116.05 ], "ne1d": 194, "ne2d": 594, - "ne3d": 1699, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 5, 17, 32, 53, 137, 190, 257, 263, 303, 245, 156, 40]", - "total_badness": 2254.3558031 + "ne3d": 1709, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 17, 22, 65, 123, 200, 268, 255, 306, 252, 152, 45]", + "total_badness": 2261.8702946 }, { "angles_tet": [ - 25.805, - 141.2 + 21.951, + 141.33 ], "angles_trig": [ - 25.911, + 25.614, 119.75 ], "ne1d": 266, "ne2d": 986, "ne3d": 4110, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 12, 34, 53, 157, 293, 528, 685, 844, 803, 570, 128]", - "total_badness": 5173.2430553 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 12, 26, 57, 136, 313, 510, 702, 829, 808, 582, 130]", + "total_badness": 5164.884636 }, { "angles_tet": [ - 23.304, - 138.08 + 23.542, + 139.47 ], "angles_trig": [ 24.552, @@ -2008,8 +2008,8 @@ "ne1d": 674, "ne2d": 6854, "ne3d": 82752, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 17, 121, 418, 1371, 3648, 7603, 12815, 17667, 19635, 14903, 4550]", - "total_badness": 100228.92096 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 16, 111, 443, 1386, 3654, 7632, 12838, 17655, 19575, 14895, 4543]", + "total_badness": 100256.75416 } ], "period.geo": [ @@ -2019,44 +2019,44 @@ 150.16 ], "angles_trig": [ - 18.741, - 133.14 + 18.686, + 133.12 ], "ne1d": 344, "ne2d": 1136, - "ne3d": 3271, - "quality_histogram": "[0, 0, 0, 0, 2, 4, 14, 25, 57, 98, 181, 263, 348, 435, 470, 451, 410, 296, 170, 47]", - "total_badness": 4769.4409222 + "ne3d": 3272, + "quality_histogram": "[0, 0, 0, 0, 1, 4, 13, 27, 58, 93, 184, 265, 356, 439, 457, 431, 402, 312, 179, 51]", + "total_badness": 4769.6458229 }, { "angles_tet": [ - 9.1864, - 168.11 + 10.991, + 167.0 ], "angles_trig": [ - 12.295, - 146.03 + 15.337, + 143.35 ], "ne1d": 160, "ne2d": 286, - "ne3d": 611, - "quality_histogram": "[0, 0, 1, 6, 8, 15, 20, 23, 35, 58, 66, 65, 63, 50, 48, 52, 42, 40, 15, 4]", - "total_badness": 1118.3047788 + "ne3d": 689, + "quality_histogram": "[0, 0, 1, 0, 2, 7, 15, 26, 41, 57, 81, 81, 78, 64, 63, 58, 49, 42, 20, 4]", + "total_badness": 1180.0358212 }, { "angles_tet": [ - 8.6839, - 164.46 + 13.74, + 157.41 ], "angles_trig": [ - 11.423, - 149.93 + 13.483, + 149.45 ], "ne1d": 232, "ne2d": 598, - "ne3d": 1637, - "quality_histogram": "[0, 0, 1, 12, 24, 43, 73, 80, 119, 138, 142, 156, 149, 167, 143, 128, 99, 87, 59, 17]", - "total_badness": 3031.5898155 + "ne3d": 1709, + "quality_histogram": "[0, 0, 0, 0, 4, 13, 35, 57, 101, 136, 171, 173, 197, 171, 191, 136, 134, 111, 59, 20]", + "total_badness": 2852.3453886 }, { "angles_tet": [ @@ -2064,34 +2064,34 @@ 150.16 ], "angles_trig": [ - 19.105, - 134.29 + 19.4, + 134.3 ], "ne1d": 344, "ne2d": 1136, "ne3d": 3242, - "quality_histogram": "[0, 0, 0, 0, 2, 4, 12, 26, 47, 83, 167, 224, 320, 431, 478, 450, 428, 327, 190, 53]", - "total_badness": 4663.1458352 + "quality_histogram": "[0, 0, 0, 0, 1, 4, 13, 24, 50, 83, 162, 232, 337, 433, 463, 438, 431, 327, 187, 57]", + "total_badness": 4665.0223577 }, { "angles_tet": [ 20.377, - 144.13 + 143.63 ], "angles_trig": [ - 23.234, - 122.41 + 23.316, + 122.91 ], "ne1d": 480, "ne2d": 2256, - "ne3d": 11567, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 5, 27, 92, 220, 494, 890, 1473, 1992, 2352, 2055, 1523, 443]", - "total_badness": 14638.419715 + "ne3d": 11585, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 28, 100, 212, 494, 899, 1478, 1995, 2325, 2096, 1510, 442]", + "total_badness": 14663.481315 }, { "angles_tet": [ - 21.556, - 145.28 + 21.511, + 145.14 ], "angles_trig": [ 22.722, @@ -2099,30 +2099,30 @@ ], "ne1d": 820, "ne2d": 6226, - "ne3d": 68692, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 11, 49, 188, 509, 1541, 3637, 6903, 11015, 14325, 15183, 11641, 3690]", - "total_badness": 84016.131742 + "ne3d": 68750, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 12, 49, 196, 532, 1546, 3635, 6913, 11019, 14365, 15164, 11586, 3733]", + "total_badness": 84119.909258 } ], "plane.stl": [ { "angles_tet": [ - 0.81532, + 1.1884, 175.03 ], "angles_trig": [ - 1.1286, + 1.908, 172.51 ], "ne1d": 890, "ne2d": 2626, - "ne3d": 8335, - "quality_histogram": "[5, 19, 27, 26, 52, 45, 46, 61, 108, 192, 262, 419, 666, 871, 1144, 1269, 1297, 1065, 599, 162]", - "total_badness": 12602.083232 + "ne3d": 8400, + "quality_histogram": "[4, 15, 26, 32, 60, 52, 51, 61, 111, 195, 249, 421, 655, 874, 1178, 1281, 1302, 1072, 587, 174]", + "total_badness": 12611.722208 }, { "angles_tet": [ - 1.0855, + 1.0836, 174.05 ], "angles_trig": [ @@ -2131,131 +2131,131 @@ ], "ne1d": 570, "ne2d": 1202, - "ne3d": 1771, - "quality_histogram": "[4, 27, 50, 46, 60, 72, 104, 134, 154, 166, 179, 154, 136, 133, 117, 82, 63, 58, 28, 4]", - "total_badness": 4553.9625805 + "ne3d": 1896, + "quality_histogram": "[3, 21, 33, 53, 67, 79, 103, 138, 141, 206, 192, 169, 173, 159, 121, 85, 68, 51, 28, 6]", + "total_badness": 4606.3683325 }, { "angles_tet": [ - 1.1034, - 172.02 + 1.1033, + 172.28 ], "angles_trig": [ - 2.4229, + 3.728, 163.66 ], "ne1d": 724, "ne2d": 1730, - "ne3d": 3232, - "quality_histogram": "[7, 17, 31, 43, 47, 39, 55, 72, 132, 154, 200, 242, 357, 412, 395, 396, 310, 192, 104, 27]", - "total_badness": 6043.769795 + "ne3d": 3279, + "quality_histogram": "[3, 13, 29, 47, 49, 42, 61, 76, 136, 164, 211, 262, 331, 417, 410, 369, 324, 206, 98, 31]", + "total_badness": 6003.722435 }, { "angles_tet": [ - 1.2088, + 1.2156, 169.94 ], "angles_trig": [ - 3.0435, + 4.6774, 165.56 ], "ne1d": 956, "ne2d": 2828, - "ne3d": 8500, - "quality_histogram": "[3, 11, 34, 52, 41, 58, 52, 57, 82, 123, 197, 355, 535, 826, 1173, 1364, 1429, 1186, 733, 189]", - "total_badness": 12503.755575 + "ne3d": 8535, + "quality_histogram": "[3, 8, 31, 53, 38, 56, 56, 61, 92, 125, 198, 359, 519, 823, 1170, 1403, 1442, 1186, 728, 184]", + "total_badness": 12500.150133 }, { "angles_tet": [ - 1.1599, - 169.09 + 1.1519, + 168.31 ], "angles_trig": [ - 1.0016, - 160.52 + 3.4032, + 150.86 ], "ne1d": 1554, "ne2d": 6372, - "ne3d": 31631, - "quality_histogram": "[5, 6, 12, 5, 23, 49, 55, 63, 90, 195, 292, 620, 1288, 2354, 3827, 5338, 6210, 5933, 4102, 1164]", - "total_badness": 40835.800195 + "ne3d": 31679, + "quality_histogram": "[2, 8, 13, 7, 23, 49, 54, 65, 94, 193, 300, 633, 1284, 2354, 3841, 5362, 6207, 5906, 4128, 1156]", + "total_badness": 40904.871814 }, { "angles_tet": [ - 1.2237, - 165.99 + 1.2315, + 163.84 ], "angles_trig": [ - 1.2553, - 156.34 + 1.2724, + 158.0 ], "ne1d": 2992, "ne2d": 23322, - "ne3d": 281422, - "quality_histogram": "[4, 10, 11, 11, 6, 23, 30, 63, 88, 249, 721, 2109, 5601, 13574, 27696, 44361, 59840, 63935, 48318, 14772]", - "total_badness": 343943.53192 + "ne3d": 281474, + "quality_histogram": "[4, 8, 11, 10, 9, 25, 31, 65, 94, 255, 730, 2082, 5611, 13539, 27670, 44430, 59821, 63913, 48452, 14714]", + "total_badness": 343986.69494 } ], "revolution.geo": [ { "angles_tet": [ - 17.336, - 146.85 + 17.244, + 146.94 ], "angles_trig": [ - 16.849, - 130.09 + 16.856, + 127.1 ], "ne1d": 320, "ne2d": 3110, - "ne3d": 8398, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 22, 96, 199, 467, 694, 965, 1097, 1181, 1184, 1082, 796, 502, 111]", - "total_badness": 12004.074776 + "ne3d": 8368, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 20, 92, 209, 475, 678, 964, 1102, 1158, 1201, 1045, 819, 494, 109]", + "total_badness": 11961.833328 }, { "angles_tet": [ - 12.502, - 149.07 + 15.676, + 147.54 ], "angles_trig": [ - 14.625, - 130.94 + 15.258, + 133.97 ], "ne1d": 160, "ne2d": 822, - "ne3d": 1279, - "quality_histogram": "[0, 0, 0, 0, 1, 11, 56, 78, 98, 130, 133, 136, 157, 128, 92, 92, 69, 56, 31, 11]", - "total_badness": 2299.3708145 + "ne3d": 1329, + "quality_histogram": "[0, 0, 0, 0, 0, 8, 47, 67, 94, 113, 150, 152, 152, 136, 115, 94, 89, 61, 34, 17]", + "total_badness": 2313.8241188 }, { "angles_tet": [ - 17.575, - 145.02 + 17.226, + 145.03 ], "angles_trig": [ - 17.256, - 134.83 + 17.855, + 134.86 ], "ne1d": 240, "ne2d": 1830, - "ne3d": 3825, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 22, 69, 157, 287, 410, 484, 531, 496, 420, 382, 322, 195, 48]", - "total_badness": 5690.739258 + "ne3d": 3935, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 16, 79, 127, 291, 402, 515, 506, 549, 453, 425, 313, 213, 44]", + "total_badness": 5811.9376155 }, { "angles_tet": [ - 19.517, - 143.57 + 19.508, + 144.17 ], "angles_trig": [ - 18.327, - 126.95 + 18.334, + 126.86 ], "ne1d": 320, "ne2d": 3110, - "ne3d": 8263, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 10, 47, 141, 349, 615, 835, 1021, 1147, 1245, 1168, 915, 608, 159]", - "total_badness": 11488.676872 + "ne3d": 8247, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 11, 48, 148, 350, 622, 836, 1015, 1158, 1210, 1194, 928, 570, 154]", + "total_badness": 11489.396743 }, { "angles_tet": [ @@ -2274,25 +2274,25 @@ }, { "angles_tet": [ - 21.86, + 21.88, 143.83 ], "angles_trig": [ - 19.775, - 122.3 + 19.749, + 129.57 ], "ne1d": 800, "ne2d": 17934, - "ne3d": 201271, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 14, 92, 365, 1251, 3589, 9010, 18989, 30988, 42530, 46577, 36326, 11536]", - "total_badness": 244182.38794 + "ne3d": 201317, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 14, 90, 366, 1253, 3607, 9038, 19001, 30940, 42588, 46561, 36314, 11541]", + "total_badness": 244248.61385 } ], "screw.step": [ { "angles_tet": [ - 15.997, - 157.41 + 18.3, + 145.57 ], "angles_trig": [ 15.767, @@ -2300,24 +2300,24 @@ ], "ne1d": 400, "ne2d": 1432, - "ne3d": 2403, - "quality_histogram": "[0, 0, 0, 0, 0, 5, 19, 74, 106, 152, 190, 256, 294, 268, 270, 272, 203, 174, 100, 20]", - "total_badness": 3811.8338111 + "ne3d": 2431, + "quality_histogram": "[0, 0, 0, 0, 0, 4, 17, 63, 85, 162, 159, 233, 285, 296, 294, 267, 241, 197, 111, 17]", + "total_badness": 3781.3195561 }, { "angles_tet": [ - 16.773, + 16.908, 143.17 ], "angles_trig": [ - 17.839, - 128.36 + 17.733, + 126.93 ], "ne1d": 530, "ne2d": 2718, - "ne3d": 7973, - "quality_histogram": "[0, 0, 0, 0, 1, 2, 5, 17, 41, 84, 145, 239, 436, 718, 1044, 1331, 1390, 1331, 932, 257]", - "total_badness": 10431.298999 + "ne3d": 8005, + "quality_histogram": "[0, 0, 0, 0, 1, 2, 5, 16, 40, 69, 152, 242, 464, 718, 1021, 1325, 1422, 1385, 893, 250]", + "total_badness": 10469.297341 }, { "angles_tet": [ @@ -2342,19 +2342,19 @@ 152.2 ], "angles_trig": [ - 25.459, - 115.78 + 22.526, + 131.23 ], "ne1d": 192, "ne2d": 414, - "ne3d": 476, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 5, 16, 21, 32, 60, 64, 94, 100, 42, 25, 12, 2]", - "total_badness": 693.83910484 + "ne3d": 485, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 4, 6, 19, 20, 32, 58, 65, 96, 99, 42, 27, 12, 3]", + "total_badness": 712.08285364 }, { "angles_tet": [ - 28.072, - 137.6 + 25.982, + 141.31 ], "angles_trig": [ 27.015, @@ -2362,9 +2362,9 @@ ], "ne1d": 102, "ne2d": 146, - "ne3d": 142, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 1, 6, 11, 19, 18, 35, 29, 17, 2]", - "total_badness": 181.04521663 + "ne3d": 143, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 1, 6, 13, 20, 19, 34, 27, 16, 2]", + "total_badness": 184.24378391 }, { "angles_tet": [ @@ -2387,14 +2387,14 @@ 152.2 ], "angles_trig": [ - 25.459, - 115.78 + 22.525, + 131.23 ], "ne1d": 192, "ne2d": 414, - "ne3d": 476, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 5, 16, 21, 32, 60, 64, 94, 100, 42, 25, 12, 2]", - "total_badness": 693.83910484 + "ne3d": 485, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 4, 6, 19, 20, 32, 58, 65, 96, 99, 42, 27, 12, 3]", + "total_badness": 712.0829194 }, { "angles_tet": [ @@ -2407,9 +2407,9 @@ ], "ne1d": 288, "ne2d": 962, - "ne3d": 1319, - "quality_histogram": "[0, 0, 0, 0, 1, 3, 7, 27, 52, 83, 117, 136, 128, 139, 114, 142, 145, 125, 81, 19]", - "total_badness": 2041.3028811 + "ne3d": 1330, + "quality_histogram": "[0, 0, 0, 0, 1, 2, 6, 22, 47, 84, 113, 139, 135, 140, 118, 143, 144, 129, 89, 18]", + "total_badness": 2040.923408 }, { "angles_tet": [ @@ -2422,26 +2422,26 @@ ], "ne1d": 480, "ne2d": 2394, - "ne3d": 6698, - "quality_histogram": "[0, 0, 0, 0, 1, 3, 9, 12, 16, 29, 59, 119, 253, 447, 729, 1079, 1336, 1333, 957, 316]", - "total_badness": 8454.7581852 + "ne3d": 6711, + "quality_histogram": "[0, 0, 0, 0, 1, 2, 5, 9, 18, 27, 60, 127, 255, 455, 730, 1074, 1345, 1332, 952, 319]", + "total_badness": 8467.8828851 } ], "shaft.geo": [ { "angles_tet": [ - 3.2907, - 174.32 + 6.6152, + 167.23 ], "angles_trig": [ - 7.5056, - 160.11 + 9.0059, + 160.46 ], "ne1d": 708, "ne2d": 1722, - "ne3d": 2745, - "quality_histogram": "[2, 7, 21, 33, 32, 42, 46, 55, 73, 125, 264, 386, 303, 265, 234, 293, 240, 183, 107, 34]", - "total_badness": 4906.7001812 + "ne3d": 2818, + "quality_histogram": "[0, 0, 4, 17, 34, 64, 58, 61, 93, 125, 275, 399, 324, 279, 241, 290, 246, 176, 96, 36]", + "total_badness": 4835.1609793 }, { "angles_tet": [ @@ -2454,39 +2454,39 @@ ], "ne1d": 410, "ne2d": 606, - "ne3d": 875, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 0, 13, 21, 24, 40, 66, 86, 122, 134, 140, 119, 87, 22]", - "total_badness": 1190.1250091 + "ne3d": 981, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 0, 13, 21, 28, 47, 92, 119, 150, 160, 161, 105, 59, 25]", + "total_badness": 1354.0992928 }, { "angles_tet": [ - 4.7033, - 172.82 + 5.9287, + 168.55 ], "angles_trig": [ - 7.6359, - 158.38 + 12.518, + 148.6 ], "ne1d": 510, "ne2d": 1004, - "ne3d": 1988, - "quality_histogram": "[0, 18, 67, 62, 94, 98, 88, 137, 111, 106, 105, 142, 130, 182, 178, 175, 174, 70, 46, 5]", - "total_badness": 4736.9626467 + "ne3d": 2190, + "quality_histogram": "[0, 0, 5, 21, 47, 65, 108, 131, 132, 141, 163, 186, 183, 218, 230, 219, 188, 89, 53, 11]", + "total_badness": 4143.7303382 }, { "angles_tet": [ - 10.862, - 162.85 + 11.07, + 153.85 ], "angles_trig": [ - 12.477, - 150.85 + 15.567, + 143.82 ], "ne1d": 708, "ne2d": 1722, - "ne3d": 2728, - "quality_histogram": "[0, 0, 1, 15, 20, 21, 32, 50, 72, 135, 266, 400, 329, 266, 248, 274, 258, 201, 100, 40]", - "total_badness": 4448.4830214 + "ne3d": 2771, + "quality_histogram": "[0, 0, 0, 0, 5, 10, 31, 34, 87, 131, 258, 425, 328, 293, 255, 305, 264, 204, 103, 38]", + "total_badness": 4362.3768794 }, { "angles_tet": [ @@ -2499,24 +2499,24 @@ ], "ne1d": 1138, "ne2d": 4220, - "ne3d": 11308, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 31, 72, 187, 328, 554, 979, 1446, 1850, 2217, 1952, 1280, 409]", - "total_badness": 14596.421815 + "ne3d": 11319, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 31, 70, 184, 327, 552, 980, 1448, 1855, 2225, 1947, 1282, 415]", + "total_badness": 14604.609669 }, { "angles_tet": [ 25.341, - 142.09 + 140.25 ], "angles_trig": [ - 22.461, - 120.19 + 22.82, + 120.2 ], "ne1d": 1792, "ne2d": 10600, - "ne3d": 63826, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 22, 128, 438, 1274, 3069, 6212, 10027, 13507, 14338, 11060, 3749]", - "total_badness": 77687.754158 + "ne3d": 63864, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 23, 133, 434, 1291, 3093, 6200, 9970, 13551, 14434, 11025, 3708]", + "total_badness": 77751.111698 } ], "sphere.geo": [ @@ -2614,18 +2614,18 @@ "sphereincube.geo": [ { "angles_tet": [ - 10.046, - 167.71 + 10.239, + 167.43 ], "angles_trig": [ - 10.478, - 156.64 + 11.28, + 147.53 ], "ne1d": 46, "ne2d": 202, - "ne3d": 498, - "quality_histogram": "[0, 0, 7, 50, 29, 31, 49, 49, 65, 50, 41, 19, 23, 9, 12, 11, 12, 24, 12, 5]", - "total_badness": 1375.9200797 + "ne3d": 509, + "quality_histogram": "[0, 0, 7, 49, 25, 35, 47, 46, 61, 49, 46, 29, 20, 18, 14, 13, 11, 23, 12, 4]", + "total_badness": 1380.3308492 }, { "angles_tet": [ @@ -2638,39 +2638,39 @@ ], "ne1d": 24, "ne2d": 60, - "ne3d": 161, - "quality_histogram": "[0, 0, 5, 12, 14, 14, 30, 9, 2, 0, 0, 0, 6, 9, 4, 12, 22, 9, 13, 0]", - "total_badness": 435.55968129 + "ne3d": 165, + "quality_histogram": "[0, 0, 5, 12, 14, 14, 30, 9, 2, 0, 4, 2, 7, 6, 7, 17, 15, 11, 9, 1]", + "total_badness": 445.33373939 }, { "angles_tet": [ - 8.1664, - 165.58 + 9.5694, + 165.32 ], "angles_trig": [ - 9.1515, - 158.53 + 9.2408, + 153.15 ], "ne1d": 30, "ne2d": 116, - "ne3d": 348, - "quality_histogram": "[0, 0, 1, 16, 29, 41, 29, 24, 36, 35, 26, 29, 26, 17, 8, 10, 9, 9, 2, 1]", - "total_badness": 911.10169994 + "ne3d": 351, + "quality_histogram": "[0, 0, 2, 17, 30, 29, 27, 28, 29, 36, 28, 27, 18, 26, 23, 14, 10, 5, 2, 0]", + "total_badness": 891.37154329 }, { "angles_tet": [ - 8.6352, - 167.63 + 8.3098, + 167.82 ], "angles_trig": [ 11.28, - 149.71 + 154.52 ], "ne1d": 46, "ne2d": 202, - "ne3d": 502, - "quality_histogram": "[0, 0, 5, 26, 21, 19, 43, 51, 66, 60, 50, 36, 31, 12, 14, 14, 13, 25, 11, 5]", - "total_badness": 1226.3202497 + "ne3d": 511, + "quality_histogram": "[0, 0, 6, 24, 20, 22, 53, 46, 58, 57, 53, 30, 35, 19, 19, 16, 13, 24, 12, 4]", + "total_badness": 1239.0180034 }, { "angles_tet": [ @@ -2689,18 +2689,18 @@ }, { "angles_tet": [ - 25.05, - 140.17 + 25.478, + 139.78 ], "angles_trig": [ - 21.933, - 130.25 + 22.262, + 127.12 ], "ne1d": 122, "ne2d": 1082, - "ne3d": 13947, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 23, 94, 203, 398, 804, 1329, 2220, 2883, 2980, 2254, 756]", - "total_badness": 17220.84127 + "ne3d": 13976, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 79, 195, 404, 805, 1362, 2194, 2884, 2993, 2299, 739]", + "total_badness": 17240.917492 } ], "square.in2d": [ @@ -2982,48 +2982,48 @@ "torus.geo": [ { "angles_tet": [ - 16.897, + 16.896, 152.81 ], "angles_trig": [ 19.689, - 126.09 + 126.12 ], "ne1d": 0, "ne2d": 2534, - "ne3d": 5711, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 26, 89, 200, 400, 544, 654, 766, 832, 716, 619, 495, 279, 88]", - "total_badness": 8374.2016452 + "ne3d": 5725, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 26, 89, 206, 394, 548, 658, 774, 820, 719, 629, 496, 275, 88]", + "total_badness": 8397.4026608 }, { "angles_tet": [ - 1.412, - 177.12 + 1.8765, + 174.24 ], "angles_trig": [ - 4.4579, - 167.41 + 4.7257, + 167.49 ], "ne1d": 0, "ne2d": 692, - "ne3d": 3048, - "quality_histogram": "[104, 610, 485, 376, 328, 230, 202, 151, 107, 115, 94, 79, 57, 38, 28, 16, 16, 7, 4, 1]", - "total_badness": 21483.759565 + "ne3d": 3633, + "quality_histogram": "[19, 390, 609, 512, 475, 360, 289, 219, 200, 146, 127, 79, 57, 47, 39, 22, 23, 11, 6, 3]", + "total_badness": 19650.173928 }, { "angles_tet": [ - 18.241, - 146.38 + 18.466, + 141.93 ], "angles_trig": [ - 20.167, - 120.49 + 19.816, + 120.31 ], "ne1d": 0, "ne2d": 1446, - "ne3d": 2754, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 2, 14, 49, 134, 224, 374, 409, 417, 381, 338, 205, 156, 49]", - "total_badness": 3924.0113949 + "ne3d": 2748, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 12, 53, 107, 233, 337, 417, 426, 386, 311, 233, 164, 64]", + "total_badness": 3887.4074267 }, { "angles_tet": [ @@ -3032,28 +3032,28 @@ ], "angles_trig": [ 19.93, - 125.41 + 125.43 ], "ne1d": 0, "ne2d": 2534, - "ne3d": 5617, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 7, 32, 143, 292, 430, 647, 732, 843, 806, 683, 551, 344, 106]", - "total_badness": 7961.5278101 + "ne3d": 5622, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 7, 30, 146, 290, 432, 650, 749, 830, 788, 702, 543, 347, 107]", + "total_badness": 7969.2642686 }, { "angles_tet": [ - 22.544, - 142.87 + 22.918, + 146.74 ], "angles_trig": [ - 22.773, - 121.69 + 22.789, + 121.82 ], "ne1d": 0, "ne2d": 5894, - "ne3d": 25233, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 12, 47, 132, 403, 862, 1701, 2827, 4136, 4957, 5179, 3813, 1164]", - "total_badness": 31444.677204 + "ne3d": 25225, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 8, 36, 127, 405, 852, 1685, 2839, 4088, 4981, 5152, 3881, 1169]", + "total_badness": 31406.455825 }, { "angles_tet": [ @@ -3061,21 +3061,21 @@ 144.46 ], "angles_trig": [ - 22.932, + 22.929, 121.88 ], "ne1d": 0, "ne2d": 16296, - "ne3d": 175509, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 8, 57, 283, 907, 2701, 7294, 15838, 27050, 37138, 41309, 32367, 10556]", - "total_badness": 212108.41175 + "ne3d": 175522, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 8, 58, 284, 905, 2699, 7304, 15855, 27048, 37168, 41273, 32327, 10592]", + "total_badness": 212128.85502 } ], "trafo.geo": [ { "angles_tet": [ - 3.9276, - 174.44 + 9.8264, + 163.31 ], "angles_trig": [ 14.916, @@ -3083,9 +3083,9 @@ ], "ne1d": 690, "ne2d": 1684, - "ne3d": 5188, - "quality_histogram": "[0, 3, 1, 1, 2, 11, 32, 48, 112, 189, 270, 369, 456, 565, 675, 703, 613, 543, 453, 142]", - "total_badness": 7545.0612948 + "ne3d": 5197, + "quality_histogram": "[0, 0, 0, 1, 1, 11, 32, 47, 111, 198, 279, 365, 465, 566, 668, 699, 616, 545, 452, 141]", + "total_badness": 7521.8556471 }, { "angles_tet": [ @@ -3098,9 +3098,9 @@ ], "ne1d": 390, "ne2d": 522, - "ne3d": 1352, - "quality_histogram": "[0, 0, 3, 12, 12, 38, 79, 115, 124, 150, 169, 129, 140, 109, 82, 85, 56, 36, 11, 2]", - "total_badness": 2721.6169239 + "ne3d": 1362, + "quality_histogram": "[0, 0, 3, 12, 12, 38, 80, 115, 128, 152, 166, 127, 147, 106, 88, 87, 53, 35, 11, 2]", + "total_badness": 2741.1573806 }, { "angles_tet": [ @@ -3113,9 +3113,9 @@ ], "ne1d": 512, "ne2d": 874, - "ne3d": 2381, - "quality_histogram": "[0, 0, 0, 3, 9, 15, 41, 69, 122, 140, 198, 211, 303, 380, 350, 236, 136, 97, 46, 25]", - "total_badness": 3929.771603 + "ne3d": 2394, + "quality_histogram": "[0, 0, 0, 3, 8, 13, 41, 69, 121, 139, 196, 214, 310, 387, 348, 237, 141, 96, 46, 25]", + "total_badness": 3940.3463668 }, { "angles_tet": [ @@ -3128,14 +3128,14 @@ ], "ne1d": 690, "ne2d": 1684, - "ne3d": 5097, - "quality_histogram": "[0, 0, 0, 1, 0, 3, 22, 36, 103, 191, 264, 340, 427, 567, 670, 712, 608, 544, 468, 141]", - "total_badness": 7293.2350014 + "ne3d": 5103, + "quality_histogram": "[0, 0, 0, 1, 0, 3, 23, 37, 102, 191, 269, 343, 430, 564, 673, 707, 611, 543, 465, 141]", + "total_badness": 7308.1826107 }, { "angles_tet": [ 16.895, - 147.06 + 145.94 ], "angles_trig": [ 17.568, @@ -3143,9 +3143,9 @@ ], "ne1d": 1050, "ne2d": 3812, - "ne3d": 17978, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 16, 34, 64, 178, 563, 1427, 2209, 2293, 2685, 2720, 2714, 2365, 707]", - "total_badness": 23439.888638 + "ne3d": 17989, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 15, 34, 64, 182, 572, 1421, 2208, 2295, 2686, 2718, 2715, 2367, 709]", + "total_badness": 23456.461898 }, { "angles_tet": [ @@ -3158,9 +3158,9 @@ ], "ne1d": 1722, "ne2d": 10042, - "ne3d": 84837, - "quality_histogram": "[0, 0, 0, 0, 0, 3, 55, 1433, 719, 373, 690, 1186, 2485, 5464, 8945, 13165, 16437, 16971, 12818, 4093]", - "total_badness": 108579.70964 + "ne3d": 84846, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 55, 1436, 720, 373, 694, 1188, 2495, 5466, 8917, 13178, 16414, 16982, 12849, 4076]", + "total_badness": 108595.81093 } ], "twobricks.geo": [ @@ -3252,7 +3252,7 @@ "ne2d": 346, "ne3d": 595, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 23, 40, 55, 95, 101, 105, 99, 60, 8]", - "total_badness": 777.63275425 + "total_badness": 777.63273621 } ], "twocubes.geo": [ @@ -3344,84 +3344,84 @@ "ne2d": 346, "ne3d": 595, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 23, 40, 55, 95, 101, 105, 99, 60, 8]", - "total_badness": 777.63275425 + "total_badness": 777.63273621 } ], "twocyl.geo": [ { "angles_tet": [ - 15.341, - 148.49 + 19.248, + 145.27 ], "angles_trig": [ - 18.029, - 127.96 + 20.903, + 115.14 ], "ne1d": 144, "ne2d": 408, - "ne3d": 560, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 11, 18, 21, 13, 40, 49, 64, 78, 94, 74, 53, 33, 10, 1]", - "total_badness": 877.73286526 + "ne3d": 575, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 3, 8, 29, 49, 73, 88, 111, 94, 65, 35, 14, 3]", + "total_badness": 829.9829498 }, { "angles_tet": [ - 14.489, - 157.7 + 30.607, + 131.81 ], "angles_trig": [ - 26.565, - 125.14 + 31.025, + 102.88 ], "ne1d": 68, "ne2d": 100, - "ne3d": 189, - "quality_histogram": "[0, 0, 0, 0, 1, 2, 1, 0, 7, 6, 5, 10, 18, 32, 32, 24, 25, 18, 8, 0]", - "total_badness": 281.96557687 + "ne3d": 182, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 5, 23, 22, 41, 33, 33, 15, 5]", + "total_badness": 233.48438775 }, { "angles_tet": [ - 7.1224, - 165.69 + 12.832, + 161.72 ], "angles_trig": [ - 11.214, - 147.28 + 12.422, + 145.22 ], "ne1d": 102, "ne2d": 238, - "ne3d": 538, - "quality_histogram": "[0, 1, 13, 22, 29, 50, 62, 58, 63, 34, 36, 16, 23, 32, 21, 20, 36, 18, 4, 0]", - "total_badness": 1411.6824583 + "ne3d": 552, + "quality_histogram": "[0, 0, 0, 4, 10, 19, 32, 57, 80, 49, 44, 31, 40, 39, 33, 35, 48, 23, 5, 3]", + "total_badness": 1120.6372579 }, { "angles_tet": [ - 19.827, - 141.68 + 19.336, + 133.79 ], "angles_trig": [ - 18.029, - 127.96 + 20.384, + 110.81 ], "ne1d": 144, "ne2d": 408, - "ne3d": 550, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 5, 11, 14, 10, 37, 58, 71, 75, 92, 80, 53, 34, 8, 1]", - "total_badness": 839.5988737 + "ne3d": 575, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 7, 26, 47, 82, 84, 103, 100, 63, 42, 14, 3]", + "total_badness": 824.91371063 }, { "angles_tet": [ - 19.806, - 141.75 + 20.464, + 141.49 ], "angles_trig": [ - 22.382, - 115.67 + 22.436, + 116.28 ], "ne1d": 214, "ne2d": 910, - "ne3d": 1906, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 14, 28, 73, 129, 185, 278, 363, 378, 262, 155, 38]", - "total_badness": 2512.8115918 + "ne3d": 1935, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 17, 29, 82, 132, 192, 307, 374, 358, 243, 168, 31]", + "total_badness": 2563.7381807 }, { "angles_tet": [ From d0864b9901b76f0e3b0c289ff2ac1e9eefea4878 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joachim=20Sch=C3=B6berl?= Date: Mon, 28 Oct 2019 12:18:12 +0100 Subject: [PATCH 091/120] Apple-clang seems to support now the standard thread_local variables --- libsrc/core/taskmanager.cpp | 8 ++++---- libsrc/core/taskmanager.hpp | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/libsrc/core/taskmanager.cpp b/libsrc/core/taskmanager.cpp index 6b7b9f9a..e730e55c 100644 --- a/libsrc/core/taskmanager.cpp +++ b/libsrc/core/taskmanager.cpp @@ -35,11 +35,11 @@ namespace ngcore int TaskManager :: num_threads = 1; -#ifndef __clang__ + // #ifndef __clang__ thread_local int TaskManager :: thread_id = 0; -#else - __thread int TaskManager :: thread_id; -#endif + // #else + // __thread int TaskManager :: thread_id; + // #endif const function * TaskManager::func; const function * TaskManager::startup_function = nullptr; diff --git a/libsrc/core/taskmanager.hpp b/libsrc/core/taskmanager.hpp index 6710ee11..4ba656c3 100644 --- a/libsrc/core/taskmanager.hpp +++ b/libsrc/core/taskmanager.hpp @@ -72,11 +72,11 @@ namespace ngcore -#ifndef __clang__ + // #ifndef __clang__ static thread_local int thread_id; -#else - static __thread int thread_id; -#endif + // #else + // static __thread int thread_id; + // #endif NGCORE_API static bool use_paje_trace; public: From 5b45c7a9723944c55fa3bcbc3c055812ee98f8c3 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Mon, 28 Oct 2019 13:44:51 +0100 Subject: [PATCH 092/120] implement meshing2 functionality for 3d geometries --- libsrc/csg/genmesh.cpp | 2 +- libsrc/csg/meshsurf.cpp | 15 +++++---- libsrc/csg/meshsurf.hpp | 4 ++- libsrc/geom2d/genmesh2d.cpp | 2 +- libsrc/meshing/meshing2.cpp | 56 ++++++++++++++++++------------- libsrc/meshing/meshing2.hpp | 10 ++++-- libsrc/occ/occgenmesh.cpp | 2 +- libsrc/occ/occmeshsurf.cpp | 6 ++-- libsrc/occ/occmeshsurf.hpp | 3 +- libsrc/stlgeom/meshstlsurface.cpp | 2 +- 10 files changed, 60 insertions(+), 42 deletions(-) diff --git a/libsrc/csg/genmesh.cpp b/libsrc/csg/genmesh.cpp index 9ac96715..6e3c76c2 100644 --- a/libsrc/csg/genmesh.cpp +++ b/libsrc/csg/genmesh.cpp @@ -422,7 +422,7 @@ namespace netgen geom.GetSurface((mesh.GetFaceDescriptor(k).SurfNr())); - Meshing2Surfaces meshing(*surf, mparam, geom.BoundingBox()); + Meshing2Surfaces meshing(geom, *surf, mparam, geom.BoundingBox()); meshing.SetStartTime (starttime); double eps = 1e-8 * geom.MaxSize(); diff --git a/libsrc/csg/meshsurf.cpp b/libsrc/csg/meshsurf.cpp index f7b8d3fb..234c7c40 100644 --- a/libsrc/csg/meshsurf.cpp +++ b/libsrc/csg/meshsurf.cpp @@ -14,13 +14,14 @@ Meshing2Surfaces :: Meshing2Surfaces (const Surface & asurface) ; } */ -Meshing2Surfaces :: Meshing2Surfaces (const Surface & asurf, - const MeshingParameters & mp, - const Box<3> & abb) - : Meshing2(mp, abb), surface(asurf), mparam (mp) -{ - ; -} + Meshing2Surfaces :: Meshing2Surfaces (const CSGeometry& geo, + const Surface & asurf, + const MeshingParameters & mp, + const Box<3> & abb) + : Meshing2(geo, mp, abb), surface(asurf), mparam (mp) + { + ; + } void Meshing2Surfaces :: DefineTransformation (const Point<3> & p1, const Point<3> & p2, diff --git a/libsrc/csg/meshsurf.hpp b/libsrc/csg/meshsurf.hpp index 25e23857..11fec3bf 100644 --- a/libsrc/csg/meshsurf.hpp +++ b/libsrc/csg/meshsurf.hpp @@ -16,7 +16,9 @@ namespace netgen /// // Meshing2Surfaces (const Surface & asurf); /// - Meshing2Surfaces (const Surface & asurf, const MeshingParameters & mp, + Meshing2Surfaces (const CSGeometry& geo, + const Surface & asurf, + const MeshingParameters & mp, const Box<3> & aboundingbox); protected: diff --git a/libsrc/geom2d/genmesh2d.cpp b/libsrc/geom2d/genmesh2d.cpp index 59405dc1..09ef0260 100644 --- a/libsrc/geom2d/genmesh2d.cpp +++ b/libsrc/geom2d/genmesh2d.cpp @@ -565,7 +565,7 @@ namespace netgen mp.quad = hquad || geometry.GetDomainQuadMeshing (domnr); - Meshing2 meshing (mp, Box<3> (pmin, pmax)); + Meshing2 meshing (geometry, mp, Box<3> (pmin, pmax)); NgArray compress(bnp); compress = -1; diff --git a/libsrc/meshing/meshing2.cpp b/libsrc/meshing/meshing2.cpp index e4cabded..070a31ef 100644 --- a/libsrc/meshing/meshing2.cpp +++ b/libsrc/meshing/meshing2.cpp @@ -38,8 +38,10 @@ namespace netgen static Array> global_quad_rules; - Meshing2 :: Meshing2 (const MeshingParameters & mp, const Box<3> & aboundingbox) - : adfront(aboundingbox), boundingbox(aboundingbox) + Meshing2 :: Meshing2 (const NetgenGeometry& ageo, + const MeshingParameters & mp, + const Box<3> & aboundingbox) + : geo(ageo), adfront(aboundingbox), boundingbox(aboundingbox) { static Timer t("Mesing2::Meshing2"); RegionTimer r(t); @@ -133,29 +135,38 @@ namespace netgen // static Vec3d ex, ey; // static Point3d globp1; - void Meshing2 :: DefineTransformation (const Point<3> & p1, const Point<3> & p2, - const PointGeomInfo * geominfo1, - const PointGeomInfo * geominfo2) + void Meshing2 :: DefineTransformation (const Point<3> & ap1, + const Point<3> & ap2, + const PointGeomInfo * gi1, + const PointGeomInfo * gi2) { - globp1 = p1; - ex = p2 - p1; - ex /= ex.Length(); - ey.X() = -ex.Y(); - ey.Y() = ex.X(); - ey.Z() = 0; + p1 = ap1; + p2 = ap2; + auto n1 = geo.GetNormal(gi1->trignum, p1, *gi1); + auto n2 = geo.GetNormal(gi2->trignum, p2, *gi2); + + ez = 0.5 * (n1+n2); + ez.Normalize(); + ex = (p2-p1).Normalize(); + ez -= (ez*ex)*ex; + ez.Normalize(); + ey = Cross(ez, ex); } void Meshing2 :: TransformToPlain (const Point<3> & locpoint, - const MultiPointGeomInfo & geominf, + const MultiPointGeomInfo & geominfo, Point<2> & plainpoint, double h, int & zone) { - Vec3d p1p (globp1, locpoint); + auto& gi = geominfo.GetPGI(1); + auto n = geo.GetNormal(gi.trignum, locpoint, gi); + auto p1p = locpoint - p1; + plainpoint(0) = (p1p * ex) / h; + plainpoint(1) = (p1p * ey) / h; - // p1p = locpoint - globp1; - p1p /= h; - plainpoint[0] = p1p * ex; - plainpoint[1] = p1p * ey; - zone = 0; + if(n*ez < 0) + zone = -1; + else + zone = 0; } int Meshing2 :: TransformFromPlain (const Point<2> & plainpoint, @@ -163,12 +174,9 @@ namespace netgen PointGeomInfo & gi, double h) { - Vec3d p1p; - gi.trignum = 1; - - p1p = plainpoint[0] * ex + plainpoint[1] * ey; - p1p *= h; - locpoint = globp1 + p1p; + locpoint = p1 + (h*plainpoint(0)) * ex + (h* plainpoint(1)) * ey; + if (!geo.ProjectPointGI(gi.trignum, locpoint, gi)) + geo.ProjectPoint(gi.trignum, locpoint); return 0; } diff --git a/libsrc/meshing/meshing2.hpp b/libsrc/meshing/meshing2.hpp index d7a638c0..dfaa06ab 100644 --- a/libsrc/meshing/meshing2.hpp +++ b/libsrc/meshing/meshing2.hpp @@ -41,12 +41,16 @@ class Meshing2 /// double maxarea; - Vec3d ex, ey; - Point3d globp1; + Vec3d ex, ey, ez; + Point<3> p1, p2; + + const NetgenGeometry& geo; public: /// - DLL_HEADER Meshing2 (const MeshingParameters & mp, const Box<3> & aboundingbox); + DLL_HEADER Meshing2 (const NetgenGeometry& geo, + const MeshingParameters & mp, + const Box<3> & aboundingbox); /// DLL_HEADER virtual ~Meshing2 (); diff --git a/libsrc/occ/occgenmesh.cpp b/libsrc/occ/occgenmesh.cpp index 88384d6a..bc63203b 100644 --- a/libsrc/occ/occgenmesh.cpp +++ b/libsrc/occ/occgenmesh.cpp @@ -651,7 +651,7 @@ namespace netgen static Timer tinit("init"); tinit.Start(); - Meshing2OCCSurfaces meshing(TopoDS::Face(geom.fmap(k)), bb, projecttype, mparam); + Meshing2OCCSurfaces meshing(geom, TopoDS::Face(geom.fmap(k)), bb, projecttype, mparam); tinit.Stop(); diff --git a/libsrc/occ/occmeshsurf.cpp b/libsrc/occ/occmeshsurf.cpp index 847907b1..7fa5d237 100644 --- a/libsrc/occ/occmeshsurf.cpp +++ b/libsrc/occ/occmeshsurf.cpp @@ -492,10 +492,12 @@ namespace netgen } - Meshing2OCCSurfaces :: Meshing2OCCSurfaces (const TopoDS_Shape & asurf, + Meshing2OCCSurfaces :: Meshing2OCCSurfaces (const NetgenGeometry& geo, + const TopoDS_Shape & asurf, const Box<3> & abb, int aprojecttype, const MeshingParameters & mparam) - : Meshing2(mparam, Box<3>(abb.PMin(), abb.PMax())), surface(TopoDS::Face(asurf), aprojecttype) + : Meshing2(geo, mparam, Box<3>(abb.PMin(), abb.PMax())), + surface(TopoDS::Face(asurf), aprojecttype) { ; } diff --git a/libsrc/occ/occmeshsurf.hpp b/libsrc/occ/occmeshsurf.hpp index 3a74b170..2488a18f 100644 --- a/libsrc/occ/occmeshsurf.hpp +++ b/libsrc/occ/occmeshsurf.hpp @@ -113,7 +113,8 @@ class Meshing2OCCSurfaces : public Meshing2 public: /// - Meshing2OCCSurfaces (const TopoDS_Shape & asurf, const Box<3> & aboundingbox, + Meshing2OCCSurfaces (const NetgenGeometry& geo, + const TopoDS_Shape & asurf, const Box<3> & aboundingbox, int aprojecttype, const MeshingParameters & mparam); /// diff --git a/libsrc/stlgeom/meshstlsurface.cpp b/libsrc/stlgeom/meshstlsurface.cpp index 9259aba6..039f5538 100644 --- a/libsrc/stlgeom/meshstlsurface.cpp +++ b/libsrc/stlgeom/meshstlsurface.cpp @@ -897,7 +897,7 @@ void STLSurfaceOptimization (STLGeometry & geom, MeshingSTLSurface :: MeshingSTLSurface (STLGeometry & ageom, const MeshingParameters & mp) - : Meshing2(mp, ageom.GetBoundingBox()), geom(ageom) + : Meshing2(ageom, mp, ageom.GetBoundingBox()), geom(ageom) { ; } From 2a687481179506484b9d4c3dd5fd97fc3e4272f3 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 28 Oct 2019 13:57:21 +0100 Subject: [PATCH 093/120] Add missing delete operators on MacOS --- libsrc/core/ngcore_api.hpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/libsrc/core/ngcore_api.hpp b/libsrc/core/ngcore_api.hpp index 4841eb07..6f6e7756 100644 --- a/libsrc/core/ngcore_api.hpp +++ b/libsrc/core/ngcore_api.hpp @@ -74,6 +74,22 @@ inline void operator delete[]( void* ptr, std::align_val_t al ) noexcept delete[] (char*)ptr; } +inline void operator delete ( void* ptr, std::size_t sz, std::align_val_t al ) noexcept +{ + if (int(al) > __STDCPP_DEFAULT_NEW_ALIGNMENT__) + _mm_free(ptr); + else + delete (char*)ptr; +} + +inline void operator delete[]( void* ptr, std::size_t sz, std::align_val_t al ) noexcept +{ + if (int(al) > __STDCPP_DEFAULT_NEW_ALIGNMENT__) + _mm_free(ptr); + else + delete[] (char*)ptr; +} + #endif // __MAC_OS_X_VERSION_MIN_REQUIRED #endif // __MAC_OS_X_VERSION_MIN_REQUIRED < 101300 From 93874d6296e29d7e0dd385bae5fd9155c4203b6f Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Thu, 24 Oct 2019 10:46:58 +0200 Subject: [PATCH 094/120] [testing] Use libocct instead of liboce --- tests/dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/dockerfile b/tests/dockerfile index 7b1b4a5d..3415481f 100644 --- a/tests/dockerfile +++ b/tests/dockerfile @@ -1,5 +1,5 @@ -FROM ubuntu:18.04 +FROM ubuntu:19.10 ENV DEBIAN_FRONTEND=noninteractive MAINTAINER Matthias Hochsteger -RUN apt-get update && apt-get -y install python3 libpython3-dev libxmu-dev tk-dev tcl-dev cmake git g++ libglu1-mesa-dev ccache python3-pytest python3-numpy python3-tk clang-tidy python3-distutils clang liboce-ocaf-dev +RUN apt-get update && apt-get -y install python3 libpython3-dev libxmu-dev tk-dev tcl-dev cmake git g++ libglu1-mesa-dev ccache python3-pytest python3-numpy python3-tk clang-tidy python3-distutils clang libocct-data-exchange-dev ADD . /root/src/netgen From 396d7cdcd243d6cccfba5bde483769b30c7ae245 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 28 Oct 2019 14:19:57 +0100 Subject: [PATCH 095/120] Option to link static build of OpenCascade 7.4.0 For static builds, freetype must be linked explicitly --- cmake/cmake_modules/FindOpenCasCade.cmake | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cmake/cmake_modules/FindOpenCasCade.cmake b/cmake/cmake_modules/FindOpenCasCade.cmake index a981af7b..a265feaf 100644 --- a/cmake/cmake_modules/FindOpenCasCade.cmake +++ b/cmake/cmake_modules/FindOpenCasCade.cmake @@ -74,12 +74,17 @@ set(OCC_LIBRARY_NAMES TKSTL TKTopAlgo TKV3d + TKVCAF TKXCAF TKXDEIGES TKXDESTEP TKXSBase ) +if(OCC_LINK_FREETYPE) + set(OCC_LIBRARY_NAMES ${OCC_LIBRARY_NAMES} freetype) +endif(OCC_LINK_FREETYPE) + foreach( libname ${OCC_LIBRARY_NAMES} ) find_library( ${libname} ${libname} ${OCC_LIBRARY_DIR} ) set(OCC_LIBRARIES ${OCC_LIBRARIES} ${${libname}}) From fc1e4e6a6f731201d291070fb90ee0d6a3767c8b Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 28 Oct 2019 14:25:48 +0100 Subject: [PATCH 096/120] [testing] Link against static version of OCCT 7.4.0 --- .gitlab-ci.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b85f1349..8083995f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -56,6 +56,9 @@ build_win: -G Ninja -DCMAKE_INSTALL_PREFIX=%INSTALL_DIR% -DUSE_OCC=ON + -DOCC_LIBRARY=C:/install_opencascade_7.4.0_static/win64/vc14/lib/TKernel.lib + -DOCC_INCLUDE_DIR=C:/install_opencascade_7.4.0_static/inc + -DOCC_LINK_FREETYPE=ON -DUSE_CCACHE=ON -DENABLE_UNIT_TESTS=ON -DCMAKE_BUILD_TYPE=Release @@ -239,6 +242,10 @@ build_mac: -DENABLE_UNIT_TESTS=ON -DCMAKE_OSX_DEPLOYMENT_TARGET=10.12 -DCMAKE_OSX_SYSROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk + -DUSE_OCC=ON + -DOCC_LIBRARY=/usr/local/opt/opencascade-7.4.0/lib/libTKernel.a + -DOCC_INCLUDE_DIR=/usr/local/opt/opencascade-7.4.0/include/opencascade + -DOCC_LINK_FREETYPE=ON - make -j5 install test_mac: From b0db24fa83d3d4e6be75fb07278e4728991da5a3 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Mon, 28 Oct 2019 14:41:31 +0100 Subject: [PATCH 097/120] implement meshsurface in basegeometry --- libsrc/meshing/basegeom.cpp | 71 +++++++++++++++++++++++++++++++++++-- libsrc/meshing/basegeom.hpp | 26 +++++++++++--- libsrc/occ/occgenmesh.cpp | 4 +-- libsrc/occ/occgeom.cpp | 6 ++-- libsrc/occ/occgeom.hpp | 12 +++---- 5 files changed, 102 insertions(+), 17 deletions(-) diff --git a/libsrc/meshing/basegeom.cpp b/libsrc/meshing/basegeom.cpp index 429a5d58..d7489a81 100644 --- a/libsrc/meshing/basegeom.cpp +++ b/libsrc/meshing/basegeom.cpp @@ -11,7 +11,7 @@ namespace netgen { ; } void NetgenGeometry :: Analyse(Mesh& mesh, - const MeshingParameters& mparam) + const MeshingParameters& mparam) const { static Timer t1("SetLocalMeshsize"); RegionTimer regt(t1); mesh.SetGlobalH(mparam.maxh); @@ -25,7 +25,74 @@ namespace netgen mesh.LoadLocalMeshSize(mparam.meshsizefilename); } - void NetgenGeometry :: OptimizeSurface(Mesh& mesh, const MeshingParameters& mparam) + void NetgenGeometry :: FindEdges(Mesh& mesh, + const MeshingParameters& mparam) const + { + } + + void NetgenGeometry :: MeshSurface(Mesh& mesh, + const MeshingParameters& mparam) const + { + static Timer t1("Surface Meshing"); RegionTimer regt(t1); + + Array glob2loc(mesh.GetNP()); + for(auto k : Range(faces)) + { + const auto& face = *faces[k]; + auto bb = face.GetBoundingBox(); + bb.Increase(bb.Diam()/10); + Meshing2 meshing(*this, mparam, bb); + glob2loc = 0; + int cntp = 0; + + for(auto& seg : mesh.LineSegments()) + { + if(seg.si == k+1) + { + for(auto j : Range(2)) + { + auto pi = seg[j]; + if(glob2loc[pi] == 0) + { + meshing.AddPoint(mesh[pi], pi); + cntp++; + glob2loc[pi] = cntp; + } + } + } + } + for(auto & seg : mesh.LineSegments()) + { + if(seg.si == k+1) + { + PointGeomInfo gi0, gi1; + gi0.trignum = gi1.trignum = k+1; + gi0.u = seg.epgeominfo[0].u; + gi0.v = seg.epgeominfo[0].v; + gi1.u = seg.epgeominfo[1].u; + gi1.v = seg.epgeominfo[1].v; + meshing.AddBoundaryElement(glob2loc[seg[0]], + glob2loc[seg[1]], + gi0, gi1); + } + } + + // TODO Set max area 2* area of face + + auto noldsurfels = mesh.GetNSE(); + + + static Timer t("GenerateMesh"); RegionTimer reg(t); + MESHING2_RESULT res = meshing.GenerateMesh(mesh, mparam, mparam.maxh, k+1); + + for(auto i : Range(noldsurfels, mesh.GetNSE())) + { + mesh.SurfaceElements()[i].SetIndex(k+1); + } + } + } + + void NetgenGeometry :: OptimizeSurface(Mesh& mesh, const MeshingParameters& mparam) const { const auto savetask = multithread.task; multithread.task = "Optimizing surface"; diff --git a/libsrc/meshing/basegeom.hpp b/libsrc/meshing/basegeom.hpp index 86d19546..4efe2cbb 100644 --- a/libsrc/meshing/basegeom.hpp +++ b/libsrc/meshing/basegeom.hpp @@ -12,11 +12,29 @@ struct Tcl_Interp; namespace netgen { + class GeometryEdge + { + public: + virtual ~GeometryEdge() {} + }; + + class GeometryFace + { + public: + virtual ~GeometryFace() {} + virtual size_t GetNBoundaries() const = 0; + virtual Array GetBoundary(size_t index) const = 0; + // Project point using geo info. Fast if point is close to + // parametrization in geo info. + virtual bool ProjectPointGI(Point<3>& p, PointGeomInfo& gi) const =0; + virtual Box<3> GetBoundingBox() const = 0; + }; class DLL_HEADER NetgenGeometry { unique_ptr ref; protected: + Array> faces; Box<3> bounding_box; public: NetgenGeometry() @@ -37,12 +55,12 @@ namespace netgen virtual Mesh::GEOM_TYPE GetGeomType() const { return Mesh::NO_GEOM; } virtual void Analyse(Mesh& mesh, - const MeshingParameters& mparam); + const MeshingParameters& mparam) const; virtual void RestrictLocalMeshsize(Mesh& mesh, const MeshingParameters& mparam) const {} - virtual void FindEdges(Mesh& mesh, const MeshingParameters& mparam) {} - virtual void MeshSurface(Mesh& mesh, const MeshingParameters& mparam) {} - virtual void OptimizeSurface(Mesh& mesh, const MeshingParameters& mparam); + virtual void FindEdges(Mesh& mesh, const MeshingParameters& mparam) const; + virtual void MeshSurface(Mesh& mesh, const MeshingParameters& mparam) const; + virtual void OptimizeSurface(Mesh& mesh, const MeshingParameters& mparam) const; virtual void FinalizeMesh(Mesh& mesh) const {} diff --git a/libsrc/occ/occgenmesh.cpp b/libsrc/occ/occgenmesh.cpp index bc63203b..c6732a9d 100644 --- a/libsrc/occ/occgenmesh.cpp +++ b/libsrc/occ/occgenmesh.cpp @@ -306,7 +306,7 @@ namespace netgen - void OCCFindEdges (OCCGeometry & geom, Mesh & mesh, const MeshingParameters & mparam) + void OCCFindEdges (const OCCGeometry & geom, Mesh & mesh, const MeshingParameters & mparam) { static Timer t("OCCFindEdges"); RegionTimer r(t); static Timer tsearch("OCCFindEdges - search point"); @@ -601,7 +601,7 @@ namespace netgen - void OCCMeshSurface (OCCGeometry & geom, Mesh & mesh, + void OCCMeshSurface (const OCCGeometry & geom, Mesh & mesh, const MeshingParameters & mparam) { static Timer t("OCCMeshSurface"); RegionTimer r(t); diff --git a/libsrc/occ/occgeom.cpp b/libsrc/occ/occgeom.cpp index bb95ee88..96434678 100644 --- a/libsrc/occ/occgeom.cpp +++ b/libsrc/occ/occgeom.cpp @@ -75,19 +75,19 @@ void STEP_GetEntityName(const TopoDS_Shape & theShape, STEPCAFControl_Reader * a } void OCCGeometry :: Analyse(Mesh& mesh, - const MeshingParameters& mparam) + const MeshingParameters& mparam) const { OCCSetLocalMeshSize(*this, mesh, mparam, occparam); } void OCCGeometry :: FindEdges(Mesh& mesh, - const MeshingParameters& mparam) + const MeshingParameters& mparam) const { OCCFindEdges(*this, mesh, mparam); } void OCCGeometry :: MeshSurface(Mesh& mesh, - const MeshingParameters& mparam) + const MeshingParameters& mparam) const { OCCMeshSurface(*this, mesh, mparam); } diff --git a/libsrc/occ/occgeom.hpp b/libsrc/occ/occgeom.hpp index 25369ac7..09561b29 100644 --- a/libsrc/occ/occgeom.hpp +++ b/libsrc/occ/occgeom.hpp @@ -224,7 +224,7 @@ namespace netgen Handle_XCAFDoc_ColorTool face_colours; mutable int changed; - NgArray facemeshstatus; + mutable NgArray facemeshstatus; // Philippose - 15/01/2009 // Maximum mesh size for a given face @@ -268,11 +268,11 @@ namespace netgen { occparam = par; } void Analyse(Mesh& mesh, - const MeshingParameters& mparam) override; + const MeshingParameters& mparam) const override; void FindEdges(Mesh& mesh, - const MeshingParameters& mparam) override; + const MeshingParameters& mparam) const override; void MeshSurface(Mesh& mesh, - const MeshingParameters& mparam) override; + const MeshingParameters& mparam) const override; void FinalizeMesh(Mesh& mesh) const override; @@ -459,11 +459,11 @@ namespace netgen DLL_HEADER extern void OCCSetLocalMeshSize(const OCCGeometry & geom, Mesh & mesh, const MeshingParameters & mparam, const OCCParameters& occparam); - DLL_HEADER extern void OCCMeshSurface (OCCGeometry & geom, Mesh & mesh, const MeshingParameters & mparam); + DLL_HEADER extern void OCCMeshSurface (const OCCGeometry & geom, Mesh & mesh, const MeshingParameters & mparam); DLL_HEADER extern void OCCOptimizeSurface (OCCGeometry & geom, Mesh & mesh, const MeshingParameters & mparam); - DLL_HEADER extern void OCCFindEdges (OCCGeometry & geom, Mesh & mesh, const MeshingParameters & mparam); + DLL_HEADER extern void OCCFindEdges (const OCCGeometry & geom, Mesh & mesh, const MeshingParameters & mparam); } #endif From 2a51bf76c162a2fdeac06feaa49983757c63589a Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 28 Oct 2019 15:11:42 +0100 Subject: [PATCH 098/120] [testing] Add results for OCC 7.4, skip tests on Ubuntu (with OCC 7.3) --- libsrc/occ/python_occ.cpp | 2 + tests/pytest/results.json | 92 +++++++++++++++++----------------- tests/pytest/test_tutorials.py | 2 +- 3 files changed, 49 insertions(+), 47 deletions(-) diff --git a/libsrc/occ/python_occ.cpp b/libsrc/occ/python_occ.cpp index e5f458cb..43fbf6b1 100644 --- a/libsrc/occ/python_occ.cpp +++ b/libsrc/occ/python_occ.cpp @@ -7,6 +7,7 @@ #include #include +#include using namespace netgen; @@ -57,6 +58,7 @@ void CreateOCCParametersFromKwargs(OCCParameters& occparam, py::dict kwargs) DLL_HEADER void ExportNgOCC(py::module &m) { + m.attr("occ_version") = OCC_VERSION_COMPLETE; py::class_, NetgenGeometry> (m, "OCCGeometry", R"raw_string(Use LoadOCCGeometry to load the geometry from a *.step file.)raw_string") .def(py::init<>()) .def(py::init([] (const string& filename) diff --git a/tests/pytest/results.json b/tests/pytest/results.json index 6dd84e7c..50a2f19b 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -1367,18 +1367,18 @@ "frame.step": [ { "angles_tet": [ - 2.4313, + 2.683, 169.75 ], "angles_trig": [ - 1.7007, - 160.42 + 1.845, + 158.55 ], - "ne1d": 12694, - "ne2d": 40504, - "ne3d": 217246, - "quality_histogram": "[1, 6, 8, 8, 16, 37, 106, 300, 948, 2218, 4792, 9112, 16087, 24307, 31406, 36515, 36658, 30414, 19320, 4987]", - "total_badness": 290676.80791 + "ne1d": 12598, + "ne2d": 39662, + "ne3d": 203027, + "quality_histogram": "[2, 10, 6, 6, 13, 45, 110, 311, 897, 2099, 4379, 8358, 14738, 22840, 29701, 33857, 34077, 28609, 18092, 4877]", + "total_badness": 271598.85365 }, { "angles_tet": [ @@ -1386,29 +1386,29 @@ 175.61 ], "angles_trig": [ - 2.0087, + 1.8443, 175.57 ], - "ne1d": 6026, - "ne2d": 11450, - "ne3d": 30727, - "quality_histogram": "[3, 4, 6, 14, 20, 56, 153, 286, 812, 1099, 1712, 2719, 3278, 4078, 4527, 4307, 3435, 2514, 1371, 333]", - "total_badness": 45935.705192 + "ne1d": 5988, + "ne2d": 11102, + "ne3d": 29340, + "quality_histogram": "[3, 4, 6, 12, 26, 44, 133, 247, 705, 1030, 1583, 2493, 3121, 3932, 4273, 4235, 3375, 2438, 1373, 307]", + "total_badness": 43614.304159 }, { "angles_tet": [ - 2.1887, + 2.1668, 174.11 ], "angles_trig": [ - 1.6035, + 2.2053, 174.13 ], - "ne1d": 9704, - "ne2d": 24550, - "ne3d": 95379, - "quality_histogram": "[2, 15, 20, 121, 363, 1069, 2161, 3193, 4233, 5543, 7043, 8842, 10552, 11486, 11430, 10400, 8432, 6101, 3489, 884]", - "total_badness": 157041.94225 + "ne1d": 9622, + "ne2d": 23964, + "ne3d": 80802, + "quality_histogram": "[1, 16, 2, 18, 17, 39, 99, 230, 517, 1077, 2406, 4571, 7482, 10360, 12598, 13191, 11859, 9163, 5737, 1419]", + "total_badness": 111718.91178 } ], "hinge.stl": [ @@ -2291,48 +2291,48 @@ "screw.step": [ { "angles_tet": [ - 18.3, - 145.57 + 17.543, + 147.55 ], "angles_trig": [ - 15.767, + 17.516, 140.59 ], "ne1d": 400, - "ne2d": 1432, - "ne3d": 2431, - "quality_histogram": "[0, 0, 0, 0, 0, 4, 17, 63, 85, 162, 159, 233, 285, 296, 294, 267, 241, 197, 111, 17]", - "total_badness": 3781.3195561 + "ne2d": 1436, + "ne3d": 2409, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 18, 65, 91, 197, 205, 271, 295, 257, 282, 272, 183, 164, 90, 16]", + "total_badness": 3840.0858333 }, { "angles_tet": [ - 16.908, - 143.17 + 16.035, + 146.84 ], "angles_trig": [ - 17.733, - 126.93 + 15.569, + 126.67 ], - "ne1d": 530, - "ne2d": 2718, - "ne3d": 8005, - "quality_histogram": "[0, 0, 0, 0, 1, 2, 5, 16, 40, 69, 152, 242, 464, 718, 1021, 1325, 1422, 1385, 893, 250]", - "total_badness": 10469.297341 + "ne1d": 528, + "ne2d": 2792, + "ne3d": 8178, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 6, 14, 37, 95, 180, 281, 525, 801, 1072, 1331, 1488, 1289, 801, 256]", + "total_badness": 10803.963539 }, { "angles_tet": [ - 16.801, - 151.58 + 17.002, + 149.0 ], "angles_trig": [ - 14.994, - 127.34 + 15.019, + 124.53 ], - "ne1d": 668, - "ne2d": 5002, - "ne3d": 31806, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 0, 4, 14, 32, 119, 295, 705, 1638, 3204, 5122, 6933, 7051, 5138, 1549]", - "total_badness": 39034.593795 + "ne1d": 666, + "ne2d": 4922, + "ne3d": 31518, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 6, 9, 37, 95, 305, 701, 1673, 3213, 4989, 6771, 6963, 5176, 1579]", + "total_badness": 38669.36435 } ], "sculpture.geo": [ diff --git a/tests/pytest/test_tutorials.py b/tests/pytest/test_tutorials.py index 8f653cce..6f7ae822 100644 --- a/tests/pytest/test_tutorials.py +++ b/tests/pytest/test_tutorials.py @@ -8,7 +8,7 @@ from pyngcore import TaskManager import json try: import netgen.occ as occ - has_occ = True + has_occ = occ.occ_version >= "7.4.0" except ImportError: has_occ = False From 66618fa08a203ec3a85d17e6a2a03aaf550c9ab5 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 28 Oct 2019 16:26:11 +0100 Subject: [PATCH 099/120] Fix mesh curving --- libsrc/meshing/curvedelems.cpp | 3 ++- libsrc/meshing/curvedelems.hpp | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/meshing/curvedelems.cpp b/libsrc/meshing/curvedelems.cpp index 0ffc9b7a..43d8ae35 100644 --- a/libsrc/meshing/curvedelems.cpp +++ b/libsrc/meshing/curvedelems.cpp @@ -539,7 +539,7 @@ namespace netgen CurvedElements :: CurvedElements (const Mesh & amesh) - : mesh(amesh), geo(*mesh.GetGeometry()) + : mesh(amesh) { order = 1; rational = 0; @@ -555,6 +555,7 @@ namespace netgen void CurvedElements :: BuildCurvedElements(const Refinement * ref, int aorder, bool arational) { + auto & geo = *mesh.GetGeometry(); ishighorder = 0; order = 1; diff --git a/libsrc/meshing/curvedelems.hpp b/libsrc/meshing/curvedelems.hpp index da46ae21..f1a732a0 100644 --- a/libsrc/meshing/curvedelems.hpp +++ b/libsrc/meshing/curvedelems.hpp @@ -17,7 +17,6 @@ class Refinement; class CurvedElements { const Mesh & mesh; - const NetgenGeometry& geo; NgArray edgeorder; NgArray faceorder; From db2656132c072f0804823e2bed3c8b96d8627824 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 28 Oct 2019 17:03:59 +0100 Subject: [PATCH 100/120] Link OCC lib TKVCAF only for occ>=7.3.0 --- cmake/cmake_modules/FindOpenCasCade.cmake | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cmake/cmake_modules/FindOpenCasCade.cmake b/cmake/cmake_modules/FindOpenCasCade.cmake index a265feaf..053cd680 100644 --- a/cmake/cmake_modules/FindOpenCasCade.cmake +++ b/cmake/cmake_modules/FindOpenCasCade.cmake @@ -74,7 +74,6 @@ set(OCC_LIBRARY_NAMES TKSTL TKTopAlgo TKV3d - TKVCAF TKXCAF TKXDEIGES TKXDESTEP @@ -85,6 +84,10 @@ if(OCC_LINK_FREETYPE) set(OCC_LIBRARY_NAMES ${OCC_LIBRARY_NAMES} freetype) endif(OCC_LINK_FREETYPE) +if(OCC_VERSION_STRING VERSION_GREATER_EQUAL "7.3.0") + set(OCC_LIBRARY_NAMES ${OCC_LIBRARY_NAMES} TKVCAF) +endif() + foreach( libname ${OCC_LIBRARY_NAMES} ) find_library( ${libname} ${libname} ${OCC_LIBRARY_DIR} ) set(OCC_LIBRARIES ${OCC_LIBRARIES} ${${libname}}) From e221c550aca23144276ad54c1bf43639f06cb147 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Mon, 28 Oct 2019 17:14:55 +0100 Subject: [PATCH 101/120] implement find edges in base geometry --- libsrc/meshing/basegeom.cpp | 151 ++++++++++++++++++++++++++++++++++++ libsrc/meshing/basegeom.hpp | 30 ++++++- 2 files changed, 180 insertions(+), 1 deletion(-) diff --git a/libsrc/meshing/basegeom.cpp b/libsrc/meshing/basegeom.cpp index d7489a81..7f160bac 100644 --- a/libsrc/meshing/basegeom.cpp +++ b/libsrc/meshing/basegeom.cpp @@ -28,6 +28,157 @@ namespace netgen void NetgenGeometry :: FindEdges(Mesh& mesh, const MeshingParameters& mparam) const { + static Timer t1("MeshEdges"); RegionTimer regt(t1); + + // create face descriptors and set bc names + mesh.SetNBCNames(faces.Size()); + for(auto i : Range(faces.Size())) + { + mesh.SetBCName(i, faces[i]->GetName()); + // todo find attached solids + FaceDescriptor fd(i+1, 1, 0, i+1); + fd.SetBCName(mesh.GetBCNamePtr(i)); + mesh.AddFaceDescriptor(fd); + } + + std::map vert2meshpt; + for(auto i : Range(vertices)) + { + const auto& vert = *vertices[i]; + MeshPoint mp(vert.GetPoint()); + vert2meshpt[vert.GetHash()] = mesh.AddPoint(mp); + } + + size_t segnr = 0; + for(auto facenr : Range(faces.Size())) + { + const auto& face = *faces[facenr]; + for(auto facebndnr : Range(face.GetNBoundaries())) + { + auto boundary = face.GetBoundary(facebndnr); + for(auto enr : Range(boundary)) + { + const auto& oriented_edge = *boundary[enr]; + auto edgenr = GetEdgeIndex(oriented_edge); + const auto& edge = edges[edgenr]; + PointIndex startp, endp; + // throws if points are not found + startp = vert2meshpt.at(edge->GetStartVertex().GetHash()); + endp = vert2meshpt.at(edge->GetEndVertex().GetHash()); + + // ignore collapsed edges + if(startp == endp && edge->GetLength() < 1e-10 * bounding_box.Diam()) + continue; + + + Array mps; + Array params; + // -------------------- DivideEdge ----------------- + static constexpr int divide_edge_sections = 1000; + double hvalue[divide_edge_sections+1]; + hvalue[0] = 0; + + Point<3> oldpnt; + auto pnt = edge->GetPoint(0.); + + // calc local h for edge + for(auto i : Range(divide_edge_sections)) + { + oldpnt = pnt; + pnt = edge->GetPoint(double(i+1)/divide_edge_sections); + hvalue[i+1] = hvalue[i] + 1./mesh.GetH(pnt) * (pnt-oldpnt).Length(); + } + int nsubedges = max2(1, int(floor(hvalue[divide_edge_sections]+0.5))); + mps.SetSize(nsubedges-1); + params.SetSize(nsubedges+1); + + int i = 1; + int i1 = 0; + do + { + if (hvalue[i1]/hvalue[divide_edge_sections]*nsubedges >= i) + { + params[i] = (i1/double(divide_edge_sections)); + pnt = edge->GetPoint(params[i]); + mps[i-1] = MeshPoint(pnt); + i++; + } + i1++; + if (i1 > divide_edge_sections) + { + nsubedges = i; + mps.SetSize(nsubedges-1); + params.SetSize(nsubedges+1); + cout << "divide edge: local h too small" << endl; + } + + } while(i < nsubedges); + + params[0] = 0.; + params[nsubedges] = 1.; + + if(params[nsubedges] <= params[nsubedges-1]) + { + cout << "CORRECTED" << endl; + mps.SetSize (nsubedges-2); + params.SetSize (nsubedges); + params[nsubedges] = 1.; + } + // ----------- Add Points to mesh and create segments ----- + + Array pnums(mps.Size() + 2); + pnums[0] = startp; + pnums[mps.Size()+1] = endp; + + double eps = bounding_box.Diam() * 1e-8; + + for(auto i : Range(mps)) + { + bool exists = false; + for(auto pi : Range(mesh.Points())) + { + if((mesh[pi] - mps[i]).Length() < eps) + { + exists = true; + pnums[i+1] = pi; + break; + } + } + if(!exists) + pnums[i+1] = mesh.AddPoint(mps[i]); + } + + for(auto i : Range(pnums.Size()-1)) + { + segnr++; + Segment seg; + seg[0] = pnums[i]; + seg[1] = pnums[i+1]; + seg.edgenr = segnr; + seg.epgeominfo[0].dist = params[i]; + seg.epgeominfo[1].dist = params[i+1]; + seg.epgeominfo[0].edgenr = edgenr; + seg.epgeominfo[1].edgenr = edgenr; + seg.si = facenr+1; + seg.surfnr1 = facenr+1; + + // TODO: implement functionality to transfer edge parameter t to face parameters u,v + for(auto j : Range(2)) + face.CalcEdgePointGI(*edge, params[i+j], + seg.epgeominfo[j]); + + if(!oriented_edge.OrientedLikeGlobal()) + { + swap (seg[0], seg[1]); + swap (seg.epgeominfo[0].dist, seg.epgeominfo[1].dist); + swap (seg.epgeominfo[0].u, seg.epgeominfo[1].u); + swap (seg.epgeominfo[0].v, seg.epgeominfo[1].v); + } + mesh.AddSegment(seg); + } + } + } + } } void NetgenGeometry :: MeshSurface(Mesh& mesh, diff --git a/libsrc/meshing/basegeom.hpp b/libsrc/meshing/basegeom.hpp index 4efe2cbb..3835937c 100644 --- a/libsrc/meshing/basegeom.hpp +++ b/libsrc/meshing/basegeom.hpp @@ -12,10 +12,24 @@ struct Tcl_Interp; namespace netgen { + class GeometryVertex + { + public: + virtual ~GeometryVertex() {} + virtual Point<3> GetPoint() const = 0; + virtual size_t GetHash() const = 0; + }; + class GeometryEdge { public: virtual ~GeometryEdge() {} + virtual const GeometryVertex& GetStartVertex() const = 0; + virtual const GeometryVertex& GetEndVertex() const = 0; + virtual double GetLength() const = 0; + virtual Point<3> GetPoint(double t) const = 0; + virtual bool OrientedLikeGlobal() const = 0; + virtual size_t GetHash() const = 0; }; class GeometryFace @@ -23,10 +37,14 @@ namespace netgen public: virtual ~GeometryFace() {} virtual size_t GetNBoundaries() const = 0; - virtual Array GetBoundary(size_t index) const = 0; + virtual Array> GetBoundary(size_t index) const = 0; + virtual string GetName() const { return "default"; } // Project point using geo info. Fast if point is close to // parametrization in geo info. virtual bool ProjectPointGI(Point<3>& p, PointGeomInfo& gi) const =0; + virtual void CalcEdgePointGI(const GeometryEdge& edge, + double t, + EdgePointGeomInfo& egi) const = 0; virtual Box<3> GetBoundingBox() const = 0; }; @@ -34,6 +52,8 @@ namespace netgen { unique_ptr ref; protected: + Array> vertices; + Array> edges; Array> faces; Box<3> bounding_box; public: @@ -112,6 +132,14 @@ namespace netgen int surfi2, const EdgePointGeomInfo & egi) const { throw Exception("Call GetTangent of " + Demangle(typeid(*this).name())); } + + virtual size_t GetEdgeIndex(const GeometryEdge& edge) const + { + for(auto i : Range(edges)) + if(edge.GetHash() == edges[i]->GetHash()) + return i; + throw Exception("Couldn't find edge index"); + } virtual void Save (string filename) const; virtual void SaveToMeshFile (ostream & /* ost */) const { ; } }; From a76d4079793eb5f24067ae2a7690dcd1948470e3 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Mon, 28 Oct 2019 19:58:35 +0100 Subject: [PATCH 102/120] implement functionality to restrict meshsize in base class not yet used in any derived geometry --- libsrc/meshing/basegeom.cpp | 111 +++++++++++++++++++++++++++++++++++- libsrc/meshing/basegeom.hpp | 18 +++++- 2 files changed, 126 insertions(+), 3 deletions(-) diff --git a/libsrc/meshing/basegeom.cpp b/libsrc/meshing/basegeom.cpp index 7f160bac..7b772e5d 100644 --- a/libsrc/meshing/basegeom.cpp +++ b/libsrc/meshing/basegeom.cpp @@ -10,6 +10,81 @@ namespace netgen GeometryRegister :: ~GeometryRegister() { ; } + void GeometryFace :: RestrictHTrig(Mesh& mesh, + const PointGeomInfo& gi0, + const PointGeomInfo& gi1, + const PointGeomInfo& gi2, + const MeshingParameters& mparam, + int depth, double h) const + { + auto p0 = GetPoint(gi0); + auto p1 = GetPoint(gi1); + auto p2 = GetPoint(gi2); + auto longest = (p0-p1).Length(); + int cutedge = 2; + if(auto len = (p0-p2).Length(); len > longest) + { + longest = len; + cutedge = 1; + } + if(auto len = (p1-p2).Length(); len > longest) + { + longest = len; + cutedge = 0; + } + PointGeomInfo gi_mid; + gi_mid.u = (gi0.u + gi1.u + gi2.u)/3; + gi_mid.v = (gi0.v + gi1.v + gi2.v)/3; + + if(depth % 3 == 0) + { + double curvature = 0.; + curvature = max2(max2(curvature, GetCurvature(gi_mid)), + max3(GetCurvature(gi0), GetCurvature(gi1), + GetCurvature(gi2))); + if(curvature < 1e-3) + return; + double kappa = curvature * mparam.curvaturesafety; + h = mparam.maxh * kappa < 1 ? mparam.maxh : 1./kappa; + if(h < 1e-4 * longest) + return; + } + + if(h < longest && depth < 10) + { + if(cutedge == 0) + { + PointGeomInfo gi_m; + gi_m.u = 0.5 * (gi1.u + gi2.u); + gi_m.v = 0.5 * (gi1.v + gi2.v); + RestrictHTrig(mesh, gi_m, gi2, gi0, mparam, depth+1, h); + RestrictHTrig(mesh, gi_m, gi0, gi1, mparam, depth+1, h); + } + else if(cutedge == 1) + { + PointGeomInfo gi_m; + gi_m.u = 0.5 * (gi0.u + gi2.u); + gi_m.v = 0.5 * (gi0.v + gi2.v); + RestrictHTrig(mesh, gi_m, gi1, gi2, mparam, depth+1, h); + RestrictHTrig(mesh, gi_m, gi0, gi1, mparam, depth+1, h); + } + else if(cutedge == 2) + { + PointGeomInfo gi_m; + gi_m.u = 0.5 * (gi0.u + gi1.u); + gi_m.v = 0.5 * (gi0.v + gi1.v); + RestrictHTrig(mesh, gi_m, gi1, gi2, mparam, depth+1, h); + RestrictHTrig(mesh, gi_m, gi2, gi0, mparam, depth+1, h); + } + } + else + { + auto pmid = GetPoint(gi_mid); + for(const auto& p : {p0, p1, p2, pmid}) + mesh.RestrictLocalH(p, h); + } + } + void NetgenGeometry :: Analyse(Mesh& mesh, const MeshingParameters& mparam) const { @@ -21,7 +96,41 @@ namespace netgen mparam.grading); if(mparam.uselocalh) - RestrictLocalMeshsize(mesh, mparam); + { + double eps = 1e-12 * bounding_box.Diam(); + + // restrict meshsize on edges + for(const auto & edge : edges) + { + auto length = edge->GetLength(); + // skip very short edges + if(length < eps) + continue; + static constexpr int npts = 20; + // restrict mesh size based on edge length + for(auto i : Range(npts+1)) + mesh.RestrictLocalH(edge->GetPoint(double(i)/npts), length/mparam.segmentsperedge); + + // restrict mesh size based on edge curvature + double t = 0.; + auto p_old = edge->GetPoint(t); + while(t < 1.-eps) + { + t += edge->CalcStep(t, 1./mparam.curvaturesafety); + if(t < 1.) + { + auto p = edge->GetPoint(t); + auto dist = (p-p_old).Length(); + mesh.RestrictLocalH(p, dist); + p_old = p; + } + } + } + + // restrict meshsize on faces + for(const auto& face : faces) + face->RestrictH(mesh, mparam); + } mesh.LoadLocalMeshSize(mparam.meshsizefilename); } diff --git a/libsrc/meshing/basegeom.hpp b/libsrc/meshing/basegeom.hpp index 3835937c..6ef03aef 100644 --- a/libsrc/meshing/basegeom.hpp +++ b/libsrc/meshing/basegeom.hpp @@ -28,6 +28,8 @@ namespace netgen virtual const GeometryVertex& GetEndVertex() const = 0; virtual double GetLength() const = 0; virtual Point<3> GetPoint(double t) const = 0; + // Calculate parameter step respecting edges sag value + virtual double CalcStep(double t, double sag) const = 0; virtual bool OrientedLikeGlobal() const = 0; virtual size_t GetHash() const = 0; }; @@ -42,10 +44,24 @@ namespace netgen // Project point using geo info. Fast if point is close to // parametrization in geo info. virtual bool ProjectPointGI(Point<3>& p, PointGeomInfo& gi) const =0; + virtual Point<3> GetPoint(const PointGeomInfo& gi) const = 0; virtual void CalcEdgePointGI(const GeometryEdge& edge, double t, EdgePointGeomInfo& egi) const = 0; virtual Box<3> GetBoundingBox() const = 0; + + // Get curvature in point from local coordinates in PointGeomInfo + virtual double GetCurvature(const PointGeomInfo& gi) const = 0; + + virtual void RestrictH(Mesh& mesh, const MeshingParameters& mparam) const = 0; + + protected: + void RestrictHTrig(Mesh& mesh, + const PointGeomInfo& gi0, + const PointGeomInfo& gi1, + const PointGeomInfo& gi2, + const MeshingParameters& mparam, + int depth = 0, double h = 0.) const; }; class DLL_HEADER NetgenGeometry @@ -76,8 +92,6 @@ namespace netgen virtual Mesh::GEOM_TYPE GetGeomType() const { return Mesh::NO_GEOM; } virtual void Analyse(Mesh& mesh, const MeshingParameters& mparam) const; - virtual void RestrictLocalMeshsize(Mesh& mesh, - const MeshingParameters& mparam) const {} virtual void FindEdges(Mesh& mesh, const MeshingParameters& mparam) const; virtual void MeshSurface(Mesh& mesh, const MeshingParameters& mparam) const; virtual void OptimizeSurface(Mesh& mesh, const MeshingParameters& mparam) const; From aa580e4025781dcdd409a0e67eebfe3d93b4887d Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Tue, 29 Oct 2019 11:37:27 +0100 Subject: [PATCH 103/120] add timer and little cleanup in not yet used findedges --- libsrc/meshing/basegeom.cpp | 42 ++++++++++++++++++++----------------- libsrc/meshing/basegeom.hpp | 1 + 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/libsrc/meshing/basegeom.cpp b/libsrc/meshing/basegeom.cpp index 7b772e5d..1adb07dd 100644 --- a/libsrc/meshing/basegeom.cpp +++ b/libsrc/meshing/basegeom.cpp @@ -10,6 +10,14 @@ namespace netgen GeometryRegister :: ~GeometryRegister() { ; } + Array> GeometryEdge :: GetEquidistantPointArray(size_t npoints) const + { + Array> pts(npoints); + for(auto i : Range(npoints)) + pts[i] = GetPoint(double(i)/(npoints-1)); + return pts; + } + void GeometryFace :: RestrictHTrig(Mesh& mesh, const PointGeomInfo& gi0, const PointGeomInfo& gi1, @@ -39,9 +47,9 @@ namespace netgen if(depth % 3 == 0) { double curvature = 0.; - curvature = max2(max2(curvature, GetCurvature(gi_mid)), - max3(GetCurvature(gi0), GetCurvature(gi1), - GetCurvature(gi2))); + curvature = max({curvature, GetCurvature(gi_mid), + GetCurvature(gi0), GetCurvature(gi1), + GetCurvature(gi2)}); if(curvature < 1e-3) return; double kappa = curvature * mparam.curvaturesafety; @@ -138,6 +146,8 @@ namespace netgen const MeshingParameters& mparam) const { static Timer t1("MeshEdges"); RegionTimer regt(t1); + static Timer tdivide("Divide Edges"); + static Timer tdivedgesections("Divide edge sections"); // create face descriptors and set bc names mesh.SetNBCNames(faces.Size()); @@ -178,26 +188,21 @@ namespace netgen // ignore collapsed edges if(startp == endp && edge->GetLength() < 1e-10 * bounding_box.Diam()) continue; - - Array mps; Array params; // -------------------- DivideEdge ----------------- - static constexpr int divide_edge_sections = 1000; + static constexpr size_t divide_edge_sections = 1000; + tdivide.Start(); double hvalue[divide_edge_sections+1]; hvalue[0] = 0; - Point<3> oldpnt; - auto pnt = edge->GetPoint(0.); - // calc local h for edge - for(auto i : Range(divide_edge_sections)) - { - oldpnt = pnt; - pnt = edge->GetPoint(double(i+1)/divide_edge_sections); - hvalue[i+1] = hvalue[i] + 1./mesh.GetH(pnt) * (pnt-oldpnt).Length(); - } + tdivedgesections.Start(); + auto edgepts = edge->GetEquidistantPointArray(divide_edge_sections+1); + for(auto i : Range(edgepts.Size()-1)) + hvalue[i+1] = hvalue[i] + 1./mesh.GetH(edgepts[i+1]) * (edgepts[i+1]-edgepts[i]).Length(); int nsubedges = max2(1, int(floor(hvalue[divide_edge_sections]+0.5))); + tdivedgesections.Stop(); mps.SetSize(nsubedges-1); params.SetSize(nsubedges+1); @@ -207,9 +212,8 @@ namespace netgen { if (hvalue[i1]/hvalue[divide_edge_sections]*nsubedges >= i) { - params[i] = (i1/double(divide_edge_sections)); - pnt = edge->GetPoint(params[i]); - mps[i-1] = MeshPoint(pnt); + params[i] = (double(i1)/divide_edge_sections); + mps[i-1] = MeshPoint(edge->GetPoint(params[i])); i++; } i1++; @@ -233,8 +237,8 @@ namespace netgen params.SetSize (nsubedges); params[nsubedges] = 1.; } + tdivide.Stop(); // ----------- Add Points to mesh and create segments ----- - Array pnums(mps.Size() + 2); pnums[0] = startp; pnums[mps.Size()+1] = endp; diff --git a/libsrc/meshing/basegeom.hpp b/libsrc/meshing/basegeom.hpp index 6ef03aef..c854b490 100644 --- a/libsrc/meshing/basegeom.hpp +++ b/libsrc/meshing/basegeom.hpp @@ -32,6 +32,7 @@ namespace netgen virtual double CalcStep(double t, double sag) const = 0; virtual bool OrientedLikeGlobal() const = 0; virtual size_t GetHash() const = 0; + virtual Array> GetEquidistantPointArray(size_t npoints) const; }; class GeometryFace From 69a420aacb27b998e31ba3a515571da9304c484f Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Tue, 29 Oct 2019 16:11:03 +0100 Subject: [PATCH 104/120] Don't include python headers in non-python builds --- libsrc/meshing/meshclass.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libsrc/meshing/meshclass.cpp b/libsrc/meshing/meshclass.cpp index e6067a5f..b2c8174d 100644 --- a/libsrc/meshing/meshclass.cpp +++ b/libsrc/meshing/meshclass.cpp @@ -1,7 +1,11 @@ #include #include #include "meshing.hpp" + +#ifdef NG_PYTHON +// must be included to instantiate Archive::Shallow(NetgenGeometry&) #include +#endif namespace netgen { From 3acadc023f6e0a82216fc57f635229cfc431e6b4 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Tue, 29 Oct 2019 17:58:37 +0100 Subject: [PATCH 105/120] Rework on 3D SplitImprove - Try (expensive) split operation only if badness > 100 (of any adjacent tet) and badness > 0.1 * badness_max - Use FindInnerPoint before BFGS to ensure valid starting point (similar as in ImproveMesh() ) - Skip valid tets if goal==OPT_LEGAL (as in sequential version) --- libsrc/meshing/findip.hpp | 6 +- libsrc/meshing/improve3.cpp | 45 +- libsrc/meshing/meshing.hpp | 5 +- tests/pytest/results.json | 1346 +++++++++++++++++------------------ 4 files changed, 715 insertions(+), 687 deletions(-) diff --git a/libsrc/meshing/findip.hpp b/libsrc/meshing/findip.hpp index dc3c6744..71de05f9 100644 --- a/libsrc/meshing/findip.hpp +++ b/libsrc/meshing/findip.hpp @@ -118,10 +118,10 @@ inline int FindInnerPoint (POINTArray & points, { // const Element2d & el = faces[i]; // (*testout) << "el[" << i << "] = " << el << endl; - for (int j = 1; j <= 3; j++) + for (int j : Range(3)) { - double hi = Dist (points[faces[i].PNumMod(j)], - points[faces[i].PNumMod(j+1)]); + double hi = Dist (points[faces[i][j%3]], + points[faces[i][(j+1)%3]]); if (hi > hmax) hmax = hi; } } diff --git a/libsrc/meshing/improve3.cpp b/libsrc/meshing/improve3.cpp index a07088dc..bda1cfdb 100644 --- a/libsrc/meshing/improve3.cpp +++ b/libsrc/meshing/improve3.cpp @@ -556,10 +556,27 @@ double MeshOptimize3d :: SplitImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, Table if(mp.only3D_domain_nr != mesh[ei].GetIndex()) return 0.0; + if (goal == OPT_LEGAL) + { + bool all_tets_legal = true; + for(auto ei : hasbothpoints) + if( !mesh.LegalTet (mesh[ei]) || elerrs[ei] > 1e3) + all_tets_legal = false; + if(all_tets_legal) + return 0.0; + } double bad1 = 0.0; + double bad1_max = 0.0; for (ElementIndex ei : hasbothpoints) - bad1 += CalcBad (mesh.Points(), mesh[ei], 0); + { + double bad = elerrs[ei]; + bad1 += bad; + bad1_max = max(bad1_max, bad); + } + + if(bad1_max < 100.0) + return 0.0; bool puretet = 1; for (ElementIndex ei : hasbothpoints) @@ -598,15 +615,26 @@ double MeshOptimize3d :: SplitImproveEdge (Mesh & mesh, OPTIMIZEGOAL goal, Table px(1) = pnew.Y(); px(2) = pnew.Z(); - if (bad1 > 0.1 * badmax) - BFGS (px, pf, par); + if (bad1_max > 0.1 * badmax) + { + int pok = pf.Func (px) < 1e10; + if (!pok) + pok = FindInnerPoint (mesh.Points(), locfaces, pnew); + + if(pok) + { + px(0) = pnew.X(); + px(1) = pnew.Y(); + px(2) = pnew.Z(); + BFGS (px, pf, par); + pnew.X() = px(0); + pnew.Y() = px(1); + pnew.Z() = px(2); + } + } double bad2 = pf.Func (px); - pnew.X() = px(0); - pnew.Y() = px(1); - pnew.Z() = px(2); - mesh[ptmp] = Point<3>(pnew); for (int k = 0; k < hasbothpoints.Size(); k++) @@ -688,6 +716,7 @@ void MeshOptimize3d :: SplitImprove (Mesh & mesh, PrintMessage (3, "SplitImprove"); (*testout) << "start SplitImprove" << "\n"; + mesh.BoundaryEdge (1,2); // ensure the boundary-elements table is built ParallelFor( mesh.VolumeElements().Range(), [&] (ElementIndex ei) NETGEN_LAMBDA_INLINE { @@ -749,7 +778,7 @@ void MeshOptimize3d :: SplitImprove (Mesh & mesh, } topt.Stop(); mesh.Compress(); - PrintMessage (5, cnt, " splits performed"); + PrintMessage (1, cnt, " splits performed"); (*testout) << "Splitt - Improve done" << "\n"; if (goal == OPT_QUALITY) diff --git a/libsrc/meshing/meshing.hpp b/libsrc/meshing/meshing.hpp index 8ed81256..35cb9add 100644 --- a/libsrc/meshing/meshing.hpp +++ b/libsrc/meshing/meshing.hpp @@ -42,13 +42,12 @@ namespace netgen #define _INCLUDE_MORE +#include "findip.hpp" +#include "findip2.hpp" #include "meshing3.hpp" #include "improve3.hpp" -#include "findip.hpp" -#include "findip2.hpp" - #include "curvedelems.hpp" #include "clusters.hpp" diff --git a/tests/pytest/results.json b/tests/pytest/results.json index 50a2f19b..ec0753f3 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -109,33 +109,33 @@ }, { "angles_tet": [ - 19.341, - 141.96 + 14.829, + 145.34 ], "angles_trig": [ - 16.682, - 126.99 + 16.491, + 127.01 ], "ne1d": 94, "ne2d": 114, - "ne3d": 157, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 1, 7, 11, 12, 9, 4, 12, 5, 20, 23, 15, 25, 11, 1]", - "total_badness": 244.61102429 + "ne3d": 121, + "quality_histogram": "[0, 0, 0, 0, 1, 2, 4, 9, 17, 14, 11, 12, 10, 7, 11, 4, 2, 14, 3, 0]", + "total_badness": 227.92261008 }, { "angles_tet": [ 16.335, - 155.63 + 152.61 ], "angles_trig": [ - 14.668, - 147.85 + 20.0, + 140.0 ], "ne1d": 136, "ne2d": 222, - "ne3d": 381, - "quality_histogram": "[0, 0, 0, 0, 1, 4, 2, 4, 6, 5, 14, 34, 38, 48, 65, 73, 50, 16, 17, 4]", - "total_badness": 563.54810644 + "ne3d": 348, + "quality_histogram": "[0, 0, 0, 0, 0, 4, 3, 5, 4, 9, 18, 23, 27, 46, 55, 62, 55, 20, 16, 1]", + "total_badness": 514.05343802 }, { "angles_tet": [ @@ -154,33 +154,33 @@ }, { "angles_tet": [ - 26.476, - 140.11 + 26.449, + 140.15 ], "angles_trig": [ - 26.654, - 117.5 + 24.477, + 114.57 ], "ne1d": 284, "ne2d": 938, - "ne3d": 3844, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 14, 51, 129, 292, 530, 650, 787, 717, 501, 171]", - "total_badness": 4815.6094781 + "ne3d": 3808, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 12, 47, 117, 277, 497, 641, 782, 746, 506, 177]", + "total_badness": 4753.2608558 }, { "angles_tet": [ - 28.77, + 28.839, 136.82 ], "angles_trig": [ 24.852, - 123.15 + 123.06 ], "ne1d": 456, "ne2d": 2496, - "ne3d": 18753, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 32, 96, 275, 747, 1627, 2885, 4041, 4511, 3355, 1181]", - "total_badness": 22636.690026 + "ne3d": 18745, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 27, 92, 267, 746, 1634, 2890, 4017, 4509, 3387, 1173]", + "total_badness": 22615.490176 } ], "circle_on_cube.geo": [ @@ -270,71 +270,71 @@ ], "ne1d": 224, "ne2d": 944, - "ne3d": 11879, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 15, 66, 190, 486, 1113, 1773, 2543, 2772, 2231, 685]", - "total_badness": 14361.247665 + "ne3d": 11884, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 15, 67, 187, 504, 1104, 1766, 2553, 2772, 2223, 688]", + "total_badness": 14368.116024 } ], "cone.geo": [ { "angles_tet": [ - 12.9, - 152.18 + 12.946, + 151.76 ], "angles_trig": [ - 18.843, - 127.95 + 17.672, + 123.45 ], "ne1d": 64, "ne2d": 722, - "ne3d": 1287, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 8, 15, 35, 61, 97, 133, 123, 161, 175, 151, 136, 112, 60, 18]", - "total_badness": 1946.0484538 + "ne3d": 1259, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 8, 17, 41, 54, 101, 121, 139, 140, 171, 144, 127, 124, 55, 16]", + "total_badness": 1909.2743283 }, { "angles_tet": [ - 13.641, - 161.17 + 12.942, + 162.28 ], "angles_trig": [ - 12.726, - 140.38 + 10.449, + 154.86 ], "ne1d": 32, "ne2d": 220, - "ne3d": 847, - "quality_histogram": "[0, 0, 0, 0, 1, 14, 31, 45, 73, 89, 90, 85, 83, 69, 67, 60, 57, 51, 25, 7]", - "total_badness": 1516.2572857 + "ne3d": 651, + "quality_histogram": "[0, 0, 0, 7, 5, 23, 31, 53, 53, 64, 49, 37, 45, 59, 49, 52, 48, 45, 23, 8]", + "total_badness": 1234.956476 }, { "angles_tet": [ - 3.6386, - 171.81 + 2.7343, + 173.79 ], "angles_trig": [ - 6.6632, - 161.63 + 8.7414, + 158.73 ], "ne1d": 48, "ne2d": 428, - "ne3d": 1000, - "quality_histogram": "[0, 15, 60, 63, 62, 69, 60, 59, 84, 82, 83, 86, 67, 51, 63, 28, 23, 25, 19, 1]", - "total_badness": 2965.2093875 + "ne3d": 868, + "quality_histogram": "[0, 7, 36, 34, 44, 67, 67, 67, 87, 94, 61, 81, 55, 45, 46, 23, 20, 18, 15, 1]", + "total_badness": 2363.7016426 }, { "angles_tet": [ - 17.354, - 145.27 + 15.888, + 150.08 ], "angles_trig": [ - 17.781, - 119.21 + 17.326, + 121.07 ], "ne1d": 64, "ne2d": 722, - "ne3d": 1266, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 9, 21, 45, 72, 122, 136, 159, 177, 181, 146, 112, 69, 16]", - "total_badness": 1845.674381 + "ne3d": 1237, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 5, 6, 28, 49, 94, 114, 121, 154, 165, 157, 128, 136, 64, 15]", + "total_badness": 1827.4800276 }, { "angles_tet": [ @@ -353,18 +353,18 @@ }, { "angles_tet": [ - 22.876, - 139.95 + 22.764, + 140.56 ], "angles_trig": [ - 25.605, + 27.263, 120.46 ], "ne1d": 160, "ne2d": 4748, - "ne3d": 27248, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 17, 69, 239, 641, 1323, 2759, 4411, 5626, 6124, 4496, 1539]", - "total_badness": 33323.749036 + "ne3d": 27254, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 16, 71, 235, 659, 1375, 2774, 4392, 5618, 6099, 4470, 1540]", + "total_badness": 33350.665582 } ], "cube.geo": [ @@ -462,18 +462,18 @@ "cubeandring.geo": [ { "angles_tet": [ - 5.2065, - 170.27 + 4.093, + 171.18 ], "angles_trig": [ - 12.789, + 12.541, 150.46 ], "ne1d": 262, "ne2d": 726, - "ne3d": 2190, - "quality_histogram": "[0, 3, 5, 28, 68, 111, 125, 104, 84, 57, 59, 89, 112, 203, 259, 256, 258, 226, 113, 30]", - "total_badness": 4074.9593098 + "ne3d": 2187, + "quality_histogram": "[0, 4, 11, 35, 76, 102, 132, 102, 83, 52, 60, 80, 114, 196, 255, 258, 257, 227, 114, 29]", + "total_badness": 4157.6373393 }, { "angles_tet": [ @@ -488,12 +488,12 @@ "ne2d": 164, "ne3d": 252, "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 2, 3, 11, 30, 31, 34, 40, 38, 33, 17, 7, 1]", - "total_badness": 369.95185592 + "total_badness": 369.95189199 }, { "angles_tet": [ 20.8, - 140.12 + 137.89 ], "angles_trig": [ 21.077, @@ -501,54 +501,54 @@ ], "ne1d": 190, "ne2d": 300, - "ne3d": 633, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 7, 20, 39, 56, 55, 111, 96, 80, 83, 55, 25, 4]", - "total_badness": 919.1584555 + "ne3d": 631, + "quality_histogram": "[0, 0, 0, 0, 1, 0, 0, 3, 8, 27, 48, 60, 69, 107, 85, 89, 64, 48, 20, 2]", + "total_badness": 943.22810332 }, { "angles_tet": [ - 5.9887, - 162.04 + 5.1036, + 168.02 ], "angles_trig": [ - 13.633, + 12.696, 150.46 ], "ne1d": 262, "ne2d": 726, - "ne3d": 2023, - "quality_histogram": "[0, 3, 2, 11, 31, 76, 116, 93, 80, 43, 38, 52, 90, 195, 227, 293, 281, 223, 133, 36]", - "total_badness": 3469.7404067 + "ne3d": 2083, + "quality_histogram": "[0, 2, 6, 20, 50, 80, 113, 89, 78, 45, 36, 73, 98, 176, 267, 270, 286, 225, 135, 34]", + "total_badness": 3674.0021566 }, { "angles_tet": [ - 23.833, - 141.99 + 24.1, + 141.88 ], "angles_trig": [ - 23.082, - 116.18 + 23.859, + 119.8 ], "ne1d": 378, "ne2d": 1412, - "ne3d": 7796, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 8, 34, 125, 288, 492, 851, 1322, 1544, 1550, 1212, 367]", - "total_badness": 9700.3117232 + "ne3d": 7670, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 7, 36, 112, 284, 477, 845, 1308, 1555, 1517, 1168, 359]", + "total_badness": 9545.7928464 }, { "angles_tet": [ - 24.435, - 143.51 + 24.428, + 143.27 ], "angles_trig": [ - 24.282, - 121.95 + 24.968, + 121.61 ], "ne1d": 624, "ne2d": 3944, - "ne3d": 38258, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 14, 63, 223, 668, 1796, 3698, 6025, 8126, 8752, 6655, 2234]", - "total_badness": 46480.533567 + "ne3d": 38337, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 12, 70, 233, 701, 1858, 3746, 6011, 8031, 8828, 6611, 2231]", + "total_badness": 46629.830149 } ], "cubeandspheres.geo": [ @@ -646,63 +646,63 @@ "cubemcyl.geo": [ { "angles_tet": [ - 18.025, - 150.96 + 19.095, + 148.41 ], "angles_trig": [ - 19.513, - 133.51 + 19.819, + 130.08 ], "ne1d": 142, "ne2d": 2488, - "ne3d": 20418, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 14, 49, 202, 394, 845, 1593, 2466, 3106, 3519, 3405, 2750, 1635, 437]", - "total_badness": 27308.898163 + "ne3d": 20377, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 13, 54, 165, 390, 900, 1554, 2429, 3089, 3513, 3446, 2730, 1633, 458]", + "total_badness": 27224.35447 }, { "angles_tet": [ 20.47, - 140.14 + 141.07 ], "angles_trig": [ - 17.578, - 126.88 + 17.455, + 137.29 ], "ne1d": 64, "ne2d": 642, - "ne3d": 3267, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 10, 25, 61, 132, 206, 350, 474, 527, 539, 435, 328, 157, 22]", - "total_badness": 4603.1212688 + "ne3d": 3261, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 17, 24, 62, 115, 220, 353, 475, 545, 510, 445, 318, 143, 32]", + "total_badness": 4608.5480688 }, { "angles_tet": [ - 22.382, - 143.35 + 20.675, + 143.54 ], "angles_trig": [ - 18.374, - 130.35 + 14.769, + 129.61 ], "ne1d": 102, "ne2d": 1402, - "ne3d": 8310, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 4, 28, 59, 209, 415, 702, 1096, 1322, 1458, 1327, 950, 571, 167]", - "total_badness": 11254.481655 + "ne3d": 8209, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 4, 4, 26, 56, 216, 420, 704, 1026, 1323, 1412, 1302, 954, 587, 173]", + "total_badness": 11118.365255 }, { "angles_tet": [ - 21.525, - 144.69 + 21.997, + 146.77 ], "angles_trig": [ - 23.793, - 122.54 + 23.524, + 123.14 ], "ne1d": 142, "ne2d": 2488, - "ne3d": 19408, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 8, 44, 109, 424, 991, 1840, 2835, 3532, 3751, 3227, 2104, 542]", - "total_badness": 24892.465354 + "ne3d": 19366, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 7, 43, 115, 406, 1004, 1806, 2745, 3564, 3751, 3220, 2125, 577]", + "total_badness": 24813.005671 }, { "angles_tet": [ @@ -738,33 +738,33 @@ "cubemsphere.geo": [ { "angles_tet": [ - 18.771, - 145.97 + 18.937, + 145.89 ], "angles_trig": [ - 21.404, - 128.34 + 21.407, + 128.79 ], "ne1d": 90, "ne2d": 702, - "ne3d": 4832, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 6, 10, 60, 96, 207, 372, 599, 721, 814, 768, 688, 386, 104]", - "total_badness": 6481.1187794 + "ne3d": 4814, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 10, 55, 89, 206, 386, 582, 723, 808, 801, 647, 392, 111]", + "total_badness": 6443.9958085 }, { "angles_tet": [ - 15.952, - 150.19 + 17.436, + 150.08 ], "angles_trig": [ - 14.233, - 127.99 + 14.077, + 130.7 ], "ne1d": 44, "ne2d": 274, - "ne3d": 786, - "quality_histogram": "[0, 0, 0, 0, 1, 3, 8, 9, 33, 46, 85, 95, 112, 103, 87, 76, 59, 33, 28, 8]", - "total_badness": 1260.9360809 + "ne3d": 769, + "quality_histogram": "[0, 0, 0, 0, 1, 3, 9, 15, 28, 41, 69, 78, 114, 88, 96, 95, 62, 35, 31, 4]", + "total_badness": 1221.5992458 }, { "angles_tet": [ @@ -783,48 +783,48 @@ }, { "angles_tet": [ - 24.86, - 138.52 + 22.975, + 142.5 ], "angles_trig": [ - 22.159, - 120.51 + 21.962, + 120.34 ], "ne1d": 90, "ne2d": 702, - "ne3d": 4632, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 20, 47, 99, 242, 464, 688, 808, 898, 763, 453, 147]", - "total_badness": 5974.4782285 + "ne3d": 4601, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 21, 45, 92, 246, 466, 682, 801, 899, 738, 477, 130]", + "total_badness": 5937.2722105 }, { "angles_tet": [ - 25.47, - 139.67 + 25.354, + 139.69 ], "angles_trig": [ - 24.507, + 24.508, 122.25 ], "ne1d": 146, "ne2d": 1492, - "ne3d": 17955, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 13, 51, 178, 420, 1013, 1930, 3073, 3841, 3759, 2846, 830]", - "total_badness": 22106.809834 + "ne3d": 17953, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 15, 49, 186, 416, 1010, 1922, 3086, 3851, 3738, 2822, 857]", + "total_badness": 22102.299848 }, { "angles_tet": [ - 23.59, - 140.8 + 23.515, + 140.76 ], "angles_trig": [ - 24.874, - 125.34 + 24.908, + 125.3 ], "ne1d": 248, "ne2d": 4354, - "ne3d": 113906, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 20, 147, 542, 1787, 4999, 10827, 18062, 24526, 26516, 20186, 6293]", - "total_badness": 138048.7365 + "ne3d": 113864, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 21, 137, 566, 1806, 4993, 10776, 18228, 24232, 26678, 20186, 6238]", + "total_badness": 138017.18455 } ], "cylinder.geo": [ @@ -845,33 +845,33 @@ }, { "angles_tet": [ - 35.277, - 118.01 + 19.3, + 149.07 ], "angles_trig": [ - 31.331, - 91.351 + 23.799, + 122.37 ], "ne1d": 24, "ne2d": 66, - "ne3d": 96, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 9, 6, 14, 33, 17, 14]", - "total_badness": 111.99292091 + "ne3d": 76, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 1, 6, 10, 0, 4, 5, 8, 5, 4, 10, 19, 2, 0]", + "total_badness": 119.18652785 }, { "angles_tet": [ - 14.646, - 148.59 + 17.07, + 156.8 ], "angles_trig": [ - 15.784, - 130.31 + 18.547, + 129.78 ], "ne1d": 36, "ne2d": 152, - "ne3d": 428, - "quality_histogram": "[0, 0, 0, 0, 0, 4, 4, 22, 20, 37, 36, 43, 44, 48, 44, 36, 44, 27, 15, 4]", - "total_badness": 705.52205541 + "ne3d": 425, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 16, 28, 35, 41, 45, 44, 30, 38, 28, 28, 45, 18, 20, 7]", + "total_badness": 743.37290709 }, { "angles_tet": [ @@ -937,18 +937,18 @@ }, { "angles_tet": [ - 10.328, - 164.46 + 10.144, + 167.27 ], "angles_trig": [ - 7.7848, - 162.2 + 10.966, + 150.52 ], "ne1d": 48, "ne2d": 142, - "ne3d": 244, - "quality_histogram": "[0, 0, 1, 13, 18, 29, 23, 9, 16, 4, 13, 9, 6, 21, 15, 29, 28, 6, 3, 1]", - "total_badness": 590.64515274 + "ne3d": 162, + "quality_histogram": "[0, 0, 2, 7, 26, 32, 17, 2, 0, 2, 0, 1, 4, 4, 6, 13, 15, 13, 18, 0]", + "total_badness": 438.06788961 }, { "angles_tet": [ @@ -968,175 +968,175 @@ { "angles_tet": [ 24.122, - 133.55 + 136.31 ], "angles_trig": [ 20.921, - 118.4 + 117.93 ], "ne1d": 152, "ne2d": 1084, - "ne3d": 2874, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 16, 39, 89, 168, 262, 358, 447, 555, 493, 356, 86]", - "total_badness": 3711.0960906 + "ne3d": 2876, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 4, 19, 35, 100, 163, 262, 362, 452, 549, 486, 354, 89]", + "total_badness": 3717.0068038 }, { "angles_tet": [ - 21.928, - 141.79 + 21.955, + 141.68 ], "angles_trig": [ - 24.75, - 125.82 + 24.73, + 126.1 ], "ne1d": 248, "ne2d": 2820, - "ne3d": 17811, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 31, 109, 304, 725, 1677, 2822, 3762, 4125, 3189, 1061]", - "total_badness": 21578.072496 + "ne3d": 17779, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 33, 102, 305, 737, 1664, 2832, 3742, 4116, 3177, 1066]", + "total_badness": 21539.566965 } ], "ellipsoid.geo": [ { "angles_tet": [ - 17.269, - 151.81 + 17.39, + 153.23 ], "angles_trig": [ - 19.871, - 123.83 + 18.41, + 123.71 ], "ne1d": 0, "ne2d": 704, - "ne3d": 1308, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 10, 29, 69, 93, 136, 153, 148, 188, 162, 141, 101, 55, 20]", - "total_badness": 1962.073156 + "ne3d": 1282, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 10, 36, 69, 94, 134, 144, 177, 156, 153, 137, 92, 60, 18]", + "total_badness": 1935.37865 }, { "angles_tet": [ - 3.9602, - 171.53 + 3.5997, + 172.04 ], "angles_trig": [ - 7.5528, - 160.29 + 6.8707, + 163.48 ], "ne1d": 0, "ne2d": 192, - "ne3d": 1093, - "quality_histogram": "[0, 33, 94, 152, 154, 110, 114, 88, 76, 70, 54, 48, 38, 21, 10, 13, 10, 6, 1, 1]", - "total_badness": 4345.0695569 + "ne3d": 1007, + "quality_histogram": "[0, 29, 63, 130, 181, 138, 104, 73, 68, 45, 42, 28, 23, 29, 16, 12, 9, 9, 6, 2]", + "total_badness": 3930.5060123 }, { "angles_tet": [ - 20.327, - 138.87 + 19.919, + 134.24 ], "angles_trig": [ - 19.875, - 114.49 + 19.054, + 114.7 ], "ne1d": 0, "ne2d": 394, - "ne3d": 613, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 7, 27, 44, 55, 87, 98, 96, 79, 56, 33, 19, 10]", - "total_badness": 911.68785911 + "ne3d": 597, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 6, 29, 49, 60, 87, 92, 86, 82, 48, 33, 15, 8]", + "total_badness": 899.55007686 }, { "angles_tet": [ - 19.716, - 141.53 + 19.843, + 146.94 ], "angles_trig": [ - 19.373, - 123.99 + 19.04, + 124.64 ], "ne1d": 0, "ne2d": 704, - "ne3d": 1290, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 37, 59, 71, 122, 133, 174, 165, 170, 165, 98, 69, 24]", - "total_badness": 1895.8131549 + "ne3d": 1279, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 5, 24, 63, 82, 136, 148, 154, 170, 159, 151, 92, 69, 26]", + "total_badness": 1888.990628 }, { "angles_tet": [ - 23.414, - 143.68 + 19.838, + 144.66 ], "angles_trig": [ - 22.924, - 115.08 + 24.559, + 116.15 ], "ne1d": 0, "ne2d": 1618, - "ne3d": 5617, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 1, 13, 45, 133, 300, 457, 675, 899, 1033, 1085, 754, 221]", - "total_badness": 7133.2862172 + "ne3d": 5582, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 1, 18, 48, 133, 269, 450, 670, 884, 1028, 1098, 753, 228]", + "total_badness": 7078.3419995 }, { "angles_tet": [ - 23.712, - 141.53 + 23.713, + 141.52 ], "angles_trig": [ - 27.221, - 119.7 + 27.222, + 121.78 ], "ne1d": 0, "ne2d": 4236, - "ne3d": 37117, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 44, 184, 483, 1429, 3235, 5608, 7742, 8925, 7191, 2263]", - "total_badness": 44684.151242 + "ne3d": 37098, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 11, 43, 183, 472, 1416, 3234, 5627, 7717, 8927, 7206, 2261]", + "total_badness": 44647.422985 } ], "ellipticcone.geo": [ { "angles_tet": [ - 17.699, + 17.698, 148.03 ], "angles_trig": [ - 23.432, + 23.433, 122.76 ], "ne1d": 174, "ne2d": 1562, "ne3d": 5188, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 9, 32, 97, 195, 341, 536, 705, 942, 939, 749, 465, 176]", - "total_badness": 6820.3521124 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 1, 9, 31, 100, 197, 340, 544, 700, 933, 940, 757, 460, 175]", + "total_badness": 6822.0657356 }, { "angles_tet": [ - 13.538, - 154.19 + 16.573, + 145.68 ], "angles_trig": [ - 18.191, - 127.96 + 18.772, + 127.9 ], "ne1d": 86, "ne2d": 380, - "ne3d": 581, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 2, 6, 15, 22, 38, 48, 71, 68, 67, 86, 66, 47, 26, 17]", - "total_badness": 864.01541316 + "ne3d": 533, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 10, 16, 31, 44, 51, 59, 72, 64, 75, 46, 37, 14, 11]", + "total_badness": 822.13701721 }, { "angles_tet": [ - 16.937, - 158.53 + 16.571, + 149.96 ], "angles_trig": [ - 17.918, - 140.74 + 18.137, + 135.0 ], "ne1d": 130, "ne2d": 864, - "ne3d": 1752, - "quality_histogram": "[0, 0, 0, 0, 1, 1, 6, 20, 30, 49, 67, 118, 150, 184, 211, 261, 278, 240, 105, 31]", - "total_badness": 2483.6354405 + "ne3d": 1653, + "quality_histogram": "[0, 0, 0, 0, 0, 2, 9, 29, 44, 46, 61, 116, 147, 195, 200, 234, 270, 172, 100, 28]", + "total_badness": 2389.4865072 }, { "angles_tet": [ - 21.003, + 21.001, 144.04 ], "angles_trig": [ @@ -1145,24 +1145,24 @@ ], "ne1d": 174, "ne2d": 1562, - "ne3d": 5006, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 10, 46, 103, 236, 414, 648, 903, 1011, 879, 548, 205]", - "total_badness": 6374.6263795 + "ne3d": 5007, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 10, 50, 105, 242, 409, 648, 901, 1007, 887, 539, 206]", + "total_badness": 6381.0431998 }, { "angles_tet": [ - 20.937, - 143.54 + 20.935, + 144.66 ], "angles_trig": [ - 18.946, - 132.45 + 18.719, + 132.57 ], "ne1d": 258, "ne2d": 3468, - "ne3d": 13537, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 21, 59, 150, 296, 549, 975, 1620, 2285, 2650, 2548, 1773, 607]", - "total_badness": 17147.627547 + "ne3d": 13471, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 8, 18, 67, 132, 305, 570, 999, 1594, 2335, 2604, 2480, 1787, 572]", + "total_badness": 17093.610487 }, { "angles_tet": [ @@ -1198,33 +1198,33 @@ }, { "angles_tet": [ - 22.336, - 134.82 + 22.853, + 132.4 ], "angles_trig": [ - 22.081, - 106.88 + 21.921, + 108.66 ], "ne1d": 76, "ne2d": 238, - "ne3d": 324, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 10, 17, 21, 32, 45, 64, 59, 44, 21, 8, 2]", - "total_badness": 462.78168789 + "ne3d": 318, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 16, 20, 33, 38, 67, 54, 49, 20, 11, 1]", + "total_badness": 450.48872379 }, { "angles_tet": [ - 20.852, - 142.71 + 20.733, + 143.0 ], "angles_trig": [ - 23.587, - 117.49 + 23.594, + 117.45 ], "ne1d": 116, "ne2d": 596, - "ne3d": 1134, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 10, 26, 33, 64, 125, 173, 204, 206, 172, 98, 20]", - "total_badness": 1497.0983847 + "ne3d": 1126, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 9, 28, 29, 73, 131, 178, 186, 196, 165, 107, 21]", + "total_badness": 1489.487043 }, { "angles_tet": [ @@ -1243,33 +1243,33 @@ }, { "angles_tet": [ - 24.51, - 137.57 + 24.468, + 138.03 ], "angles_trig": [ - 25.277, - 115.15 + 25.275, + 115.12 ], "ne1d": 232, "ne2d": 2212, - "ne3d": 8317, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 13, 36, 93, 268, 583, 968, 1432, 1665, 1688, 1220, 350]", - "total_badness": 10359.049019 + "ne3d": 8292, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 15, 37, 90, 258, 586, 955, 1411, 1668, 1703, 1209, 359]", + "total_badness": 10319.810588 }, { "angles_tet": [ - 21.424, - 141.72 + 21.427, + 143.66 ], "angles_trig": [ - 23.642, + 23.929, 119.81 ], "ne1d": 388, "ne2d": 6142, - "ne3d": 54724, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 15, 66, 243, 706, 2138, 4789, 8230, 11658, 13128, 10331, 3418]", - "total_badness": 65893.973096 + "ne3d": 54709, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 17, 61, 251, 727, 2119, 4819, 8218, 11623, 13209, 10213, 3450]", + "total_badness": 65887.909834 } ], "fichera.geo": [ @@ -1350,8 +1350,8 @@ }, { "angles_tet": [ - 26.792, - 137.1 + 26.621, + 137.76 ], "angles_trig": [ 22.737, @@ -1359,15 +1359,15 @@ ], "ne1d": 144, "ne2d": 274, - "ne3d": 495, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 17, 29, 58, 79, 105, 72, 75, 42, 14]", - "total_badness": 646.85540277 + "ne3d": 489, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 20, 29, 59, 75, 95, 77, 74, 43, 13]", + "total_badness": 639.78974791 } ], "frame.step": [ { "angles_tet": [ - 2.683, + 2.6027, 169.75 ], "angles_trig": [ @@ -1376,9 +1376,9 @@ ], "ne1d": 12598, "ne2d": 39662, - "ne3d": 203027, - "quality_histogram": "[2, 10, 6, 6, 13, 45, 110, 311, 897, 2099, 4379, 8358, 14738, 22840, 29701, 33857, 34077, 28609, 18092, 4877]", - "total_badness": 271598.85365 + "ne3d": 202894, + "quality_histogram": "[2, 10, 7, 6, 13, 48, 112, 309, 901, 2108, 4329, 8335, 14659, 22946, 29480, 33978, 34111, 28568, 18133, 4839]", + "total_badness": 271396.36361 }, { "angles_tet": [ @@ -1391,13 +1391,13 @@ ], "ne1d": 5988, "ne2d": 11102, - "ne3d": 29340, - "quality_histogram": "[3, 4, 6, 12, 26, 44, 133, 247, 705, 1030, 1583, 2493, 3121, 3932, 4273, 4235, 3375, 2438, 1373, 307]", - "total_badness": 43614.304159 + "ne3d": 29168, + "quality_histogram": "[3, 4, 7, 13, 24, 42, 119, 241, 722, 989, 1571, 2460, 3055, 3939, 4323, 4223, 3360, 2411, 1347, 315]", + "total_badness": 43309.92559 }, { "angles_tet": [ - 2.1668, + 2.1657, 174.11 ], "angles_trig": [ @@ -1406,15 +1406,15 @@ ], "ne1d": 9622, "ne2d": 23964, - "ne3d": 80802, - "quality_histogram": "[1, 16, 2, 18, 17, 39, 99, 230, 517, 1077, 2406, 4571, 7482, 10360, 12598, 13191, 11859, 9163, 5737, 1419]", - "total_badness": 111718.91178 + "ne3d": 80728, + "quality_histogram": "[1, 16, 3, 20, 18, 44, 94, 232, 517, 1099, 2434, 4593, 7471, 10296, 12656, 13142, 11844, 9162, 5660, 1426]", + "total_badness": 111694.25744 } ], "hinge.stl": [ { "angles_tet": [ - 17.355, + 20.946, 144.42 ], "angles_trig": [ @@ -1423,24 +1423,24 @@ ], "ne1d": 456, "ne2d": 1220, - "ne3d": 1991, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 9, 18, 42, 76, 116, 177, 249, 306, 297, 267, 261, 134, 39]", - "total_badness": 2763.9243811 + "ne3d": 1986, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 7, 20, 39, 70, 124, 179, 243, 300, 298, 263, 259, 143, 41]", + "total_badness": 2750.7798523 }, { "angles_tet": [ - 7.7862, + 7.6272, 161.84 ], "angles_trig": [ - 7.0669, + 9.1007, 148.89 ], "ne1d": 298, "ne2d": 610, - "ne3d": 802, - "quality_histogram": "[0, 0, 1, 9, 9, 4, 23, 15, 39, 40, 69, 83, 108, 103, 80, 88, 52, 47, 28, 4]", - "total_badness": 1376.1215919 + "ne3d": 832, + "quality_histogram": "[0, 0, 1, 11, 8, 3, 21, 17, 42, 47, 76, 91, 104, 97, 92, 86, 57, 48, 27, 4]", + "total_badness": 1432.6971804 }, { "angles_tet": [ @@ -1453,9 +1453,9 @@ ], "ne1d": 370, "ne2d": 856, - "ne3d": 1141, - "quality_histogram": "[0, 0, 0, 2, 4, 5, 13, 24, 37, 50, 76, 120, 142, 140, 154, 152, 99, 68, 46, 9]", - "total_badness": 1797.640739 + "ne3d": 1135, + "quality_histogram": "[0, 0, 0, 2, 4, 5, 14, 26, 39, 57, 79, 117, 135, 136, 153, 151, 97, 67, 45, 8]", + "total_badness": 1799.6066426 }, { "angles_tet": [ @@ -1468,9 +1468,9 @@ ], "ne1d": 516, "ne2d": 1574, - "ne3d": 2588, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 2, 6, 22, 42, 90, 172, 242, 309, 401, 389, 332, 313, 216, 50]", - "total_badness": 3580.9561619 + "ne3d": 2598, + "quality_histogram": "[0, 0, 0, 0, 0, 4, 3, 4, 26, 48, 95, 172, 225, 326, 383, 383, 339, 325, 216, 49]", + "total_badness": 3605.8538311 }, { "angles_tet": [ @@ -1484,8 +1484,8 @@ "ne1d": 722, "ne2d": 2866, "ne3d": 6697, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 26, 31, 55, 168, 331, 644, 894, 1039, 1172, 1197, 880, 257]", - "total_badness": 8589.7963349 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 26, 30, 56, 167, 331, 645, 892, 1039, 1173, 1196, 881, 258]", + "total_badness": 8588.7853201 }, { "angles_tet": [ @@ -1674,7 +1674,7 @@ { "angles_tet": [ 25.888, - 130.74 + 130.75 ], "angles_trig": [ 26.255, @@ -1684,29 +1684,29 @@ "ne2d": 204, "ne3d": 326, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 12, 19, 39, 41, 73, 58, 41, 29, 11]", - "total_badness": 425.73888937 + "total_badness": 425.73873607 } ], "manyholes.geo": [ { "angles_tet": [ - 16.739, + 14.385, 155.18 ], "angles_trig": [ - 16.38, + 13.429, 141.4 ], "ne1d": 5886, "ne2d": 48052, - "ne3d": 178760, - "quality_histogram": "[0, 0, 0, 0, 0, 3, 12, 80, 302, 822, 2342, 6218, 10972, 19015, 27357, 30678, 31231, 26920, 18300, 4508]", - "total_badness": 233946.62795 + "ne3d": 178770, + "quality_histogram": "[0, 0, 0, 0, 0, 5, 15, 82, 303, 822, 2352, 6216, 10998, 19000, 27368, 30676, 31225, 26902, 18298, 4508]", + "total_badness": 233986.23978 }, { "angles_tet": [ - 12.34, - 154.57 + 11.536, + 149.67 ], "angles_trig": [ 14.887, @@ -1714,14 +1714,14 @@ ], "ne1d": 2746, "ne2d": 13866, - "ne3d": 29442, - "quality_histogram": "[0, 0, 0, 0, 12, 16, 37, 132, 353, 844, 1436, 2314, 3286, 4343, 4190, 3761, 3341, 2704, 1959, 714]", - "total_badness": 42234.934692 + "ne3d": 29396, + "quality_histogram": "[0, 0, 0, 0, 14, 15, 38, 137, 372, 851, 1456, 2307, 3270, 4307, 4196, 3746, 3316, 2685, 1975, 711]", + "total_badness": 42211.73971 }, { "angles_tet": [ 11.183, - 158.49 + 158.43 ], "angles_trig": [ 12.194, @@ -1729,15 +1729,15 @@ ], "ne1d": 4106, "ne2d": 27994, - "ne3d": 70656, - "quality_histogram": "[0, 0, 0, 1, 32, 76, 171, 350, 674, 1483, 2521, 4177, 6716, 9269, 10330, 10654, 9939, 7668, 4819, 1776]", - "total_badness": 98935.486353 + "ne3d": 70594, + "quality_histogram": "[0, 0, 0, 1, 34, 79, 184, 352, 684, 1479, 2553, 4149, 6716, 9292, 10342, 10582, 9852, 7683, 4825, 1787]", + "total_badness": 98915.787673 } ], "manyholes2.geo": [ { "angles_tet": [ - 15.378, + 14.171, 152.51 ], "angles_trig": [ @@ -1746,76 +1746,76 @@ ], "ne1d": 10202, "ne2d": 55380, - "ne3d": 128087, - "quality_histogram": "[0, 0, 0, 0, 1, 29, 89, 256, 787, 1967, 4465, 7680, 11657, 17411, 18584, 18304, 17173, 15121, 10875, 3688]", - "total_badness": 176150.00061 + "ne3d": 128326, + "quality_histogram": "[0, 0, 0, 0, 4, 29, 80, 239, 718, 1909, 4473, 7696, 11673, 17533, 18499, 18373, 17274, 15234, 10928, 3664]", + "total_badness": 176317.23115 } ], "matrix.geo": [ { "angles_tet": [ - 9.9191, - 168.94 + 9.8227, + 167.77 ], "angles_trig": [ - 9.3137, - 159.4 + 10.647, + 154.14 ], "ne1d": 174, "ne2d": 1198, - "ne3d": 5572, - "quality_histogram": "[0, 0, 31, 112, 111, 84, 129, 149, 129, 231, 347, 410, 512, 614, 660, 644, 564, 471, 287, 87]", - "total_badness": 9719.7984643 + "ne3d": 5066, + "quality_histogram": "[0, 0, 11, 118, 169, 57, 61, 111, 95, 184, 293, 368, 508, 651, 617, 577, 496, 429, 246, 75]", + "total_badness": 8799.2034124 }, { "angles_tet": [ - 9.4256, - 164.28 + 7.9601, + 167.83 ], "angles_trig": [ - 9.4686, - 154.65 + 7.9174, + 161.29 ], "ne1d": 106, "ne2d": 610, - "ne3d": 2133, - "quality_histogram": "[0, 1, 4, 23, 46, 92, 111, 125, 167, 176, 210, 215, 227, 185, 162, 118, 108, 95, 53, 15]", - "total_badness": 4241.9896407 + "ne3d": 1654, + "quality_histogram": "[0, 1, 12, 50, 83, 156, 195, 155, 160, 124, 137, 141, 133, 102, 67, 34, 32, 43, 24, 5]", + "total_badness": 4104.7339693 }, { "angles_tet": [ 6.3111, - 166.92 + 169.7 ], "angles_trig": [ 10.116, - 156.64 + 150.34 ], "ne1d": 132, "ne2d": 830, - "ne3d": 2909, - "quality_histogram": "[0, 0, 3, 26, 49, 91, 128, 138, 160, 275, 317, 321, 315, 240, 250, 217, 170, 117, 67, 25]", - "total_badness": 5514.4460451 + "ne3d": 2488, + "quality_histogram": "[0, 0, 3, 37, 71, 155, 161, 102, 158, 211, 284, 276, 249, 203, 195, 139, 108, 79, 42, 15]", + "total_badness": 5146.3098742 }, { "angles_tet": [ - 9.9174, - 168.99 + 9.8227, + 167.77 ], "angles_trig": [ - 9.2867, - 159.4 + 10.647, + 154.14 ], "ne1d": 174, "ne2d": 1198, - "ne3d": 5482, - "quality_histogram": "[0, 0, 23, 99, 103, 83, 114, 147, 109, 181, 291, 358, 477, 587, 693, 654, 635, 517, 319, 92]", - "total_badness": 9284.0511582 + "ne3d": 5005, + "quality_histogram": "[0, 0, 7, 100, 165, 53, 56, 108, 103, 165, 278, 336, 503, 574, 623, 631, 520, 438, 264, 81]", + "total_badness": 8524.8161998 }, { "angles_tet": [ 12.758, - 144.88 + 147.69 ], "angles_trig": [ 15.825, @@ -1823,9 +1823,9 @@ ], "ne1d": 248, "ne2d": 2324, - "ne3d": 16222, - "quality_histogram": "[0, 0, 0, 0, 0, 5, 21, 52, 115, 181, 300, 633, 916, 1521, 2073, 2581, 2745, 2693, 1823, 563]", - "total_badness": 21398.373545 + "ne3d": 16276, + "quality_histogram": "[0, 0, 0, 0, 0, 5, 22, 54, 116, 179, 301, 610, 975, 1512, 2111, 2585, 2741, 2659, 1833, 573]", + "total_badness": 21483.905479 }, { "angles_tet": [ @@ -1838,9 +1838,9 @@ ], "ne1d": 418, "ne2d": 5968, - "ne3d": 101046, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 5, 8, 51, 102, 360, 987, 2555, 5555, 10157, 16065, 20720, 22257, 16899, 5325]", - "total_badness": 124081.81744 + "ne3d": 101047, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 5, 8, 52, 104, 356, 989, 2551, 5548, 10164, 16045, 20725, 22252, 16919, 5328]", + "total_badness": 124081.8709 } ], "ortho.geo": [ @@ -1962,44 +1962,44 @@ ], "ne1d": 134, "ne2d": 288, - "ne3d": 533, - "quality_histogram": "[0, 0, 0, 2, 4, 1, 5, 4, 13, 27, 34, 42, 58, 69, 77, 63, 60, 41, 29, 4]", - "total_badness": 820.60412439 + "ne3d": 528, + "quality_histogram": "[0, 0, 0, 2, 4, 2, 4, 3, 16, 24, 36, 41, 54, 70, 68, 73, 59, 47, 24, 1]", + "total_badness": 813.79298259 }, { "angles_tet": [ 21.121, - 136.21 + 136.02 ], "angles_trig": [ - 24.417, - 116.05 + 24.392, + 116.27 ], "ne1d": 194, "ne2d": 594, - "ne3d": 1709, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 17, 22, 65, 123, 200, 268, 255, 306, 252, 152, 45]", - "total_badness": 2261.8702946 + "ne3d": 1699, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 16, 27, 60, 126, 203, 248, 264, 314, 243, 151, 43]", + "total_badness": 2248.5537373 }, { "angles_tet": [ - 21.951, - 141.33 + 22.052, + 141.32 ], "angles_trig": [ - 25.614, + 25.868, 119.75 ], "ne1d": 266, "ne2d": 986, - "ne3d": 4110, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 12, 26, 57, 136, 313, 510, 702, 829, 808, 582, 130]", - "total_badness": 5164.884636 + "ne3d": 4101, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 5, 12, 29, 53, 158, 292, 530, 683, 826, 812, 568, 133]", + "total_badness": 5160.0364225 }, { "angles_tet": [ - 23.542, - 139.47 + 23.306, + 138.08 ], "angles_trig": [ 24.552, @@ -2007,9 +2007,9 @@ ], "ne1d": 674, "ne2d": 6854, - "ne3d": 82752, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 16, 111, 443, 1386, 3654, 7632, 12838, 17655, 19575, 14895, 4543]", - "total_badness": 100256.75416 + "ne3d": 82748, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 3, 17, 121, 417, 1362, 3669, 7623, 12797, 17700, 19603, 14878, 4557]", + "total_badness": 100231.59467 } ], "period.geo": [ @@ -2019,44 +2019,44 @@ 150.16 ], "angles_trig": [ - 18.686, + 18.679, 133.12 ], "ne1d": 344, "ne2d": 1136, - "ne3d": 3272, - "quality_histogram": "[0, 0, 0, 0, 1, 4, 13, 27, 58, 93, 184, 265, 356, 439, 457, 431, 402, 312, 179, 51]", - "total_badness": 4769.6458229 + "ne3d": 3267, + "quality_histogram": "[0, 0, 0, 0, 1, 4, 15, 26, 55, 93, 181, 259, 350, 454, 454, 445, 400, 295, 185, 50]", + "total_badness": 4760.8393552 }, { "angles_tet": [ - 10.991, - 167.0 + 9.7531, + 164.55 ], "angles_trig": [ - 15.337, - 143.35 + 12.309, + 141.65 ], "ne1d": 160, "ne2d": 286, - "ne3d": 689, - "quality_histogram": "[0, 0, 1, 0, 2, 7, 15, 26, 41, 57, 81, 81, 78, 64, 63, 58, 49, 42, 20, 4]", - "total_badness": 1180.0358212 + "ne3d": 585, + "quality_histogram": "[0, 0, 0, 2, 9, 14, 21, 29, 35, 70, 61, 78, 66, 39, 36, 37, 36, 33, 14, 5]", + "total_badness": 1085.7831583 }, { "angles_tet": [ - 13.74, - 157.41 + 10.104, + 163.38 ], "angles_trig": [ - 13.483, - 149.45 + 14.246, + 141.37 ], "ne1d": 232, "ne2d": 598, - "ne3d": 1709, - "quality_histogram": "[0, 0, 0, 0, 4, 13, 35, 57, 101, 136, 171, 173, 197, 171, 191, 136, 134, 111, 59, 20]", - "total_badness": 2852.3453886 + "ne3d": 1538, + "quality_histogram": "[0, 0, 0, 2, 14, 22, 43, 65, 85, 110, 147, 167, 147, 176, 174, 120, 115, 80, 58, 13]", + "total_badness": 2657.5718121 }, { "angles_tet": [ @@ -2069,29 +2069,29 @@ ], "ne1d": 344, "ne2d": 1136, - "ne3d": 3242, - "quality_histogram": "[0, 0, 0, 0, 1, 4, 13, 24, 50, 83, 162, 232, 337, 433, 463, 438, 431, 327, 187, 57]", - "total_badness": 4665.0223577 + "ne3d": 3229, + "quality_histogram": "[0, 0, 0, 0, 1, 4, 13, 23, 46, 81, 150, 228, 330, 443, 467, 439, 439, 323, 180, 62]", + "total_badness": 4634.0843144 }, { "angles_tet": [ - 20.377, - 143.63 + 20.737, + 141.73 ], "angles_trig": [ - 23.316, - 122.91 + 23.506, + 122.66 ], "ne1d": 480, "ne2d": 2256, - "ne3d": 11585, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 6, 28, 100, 212, 494, 899, 1478, 1995, 2325, 2096, 1510, 442]", - "total_badness": 14663.481315 + "ne3d": 11548, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 4, 28, 90, 222, 484, 867, 1460, 1999, 2324, 2067, 1547, 456]", + "total_badness": 14596.906314 }, { "angles_tet": [ - 21.511, - 145.14 + 21.559, + 145.28 ], "angles_trig": [ 22.722, @@ -2099,9 +2099,9 @@ ], "ne1d": 820, "ne2d": 6226, - "ne3d": 68750, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 12, 49, 196, 532, 1546, 3635, 6913, 11019, 14365, 15164, 11586, 3733]", - "total_badness": 84119.909258 + "ne3d": 68687, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 11, 49, 183, 506, 1537, 3645, 6895, 10992, 14335, 15196, 11647, 3691]", + "total_badness": 84001.076915 } ], "plane.stl": [ @@ -2116,9 +2116,9 @@ ], "ne1d": 890, "ne2d": 2626, - "ne3d": 8400, - "quality_histogram": "[4, 15, 26, 32, 60, 52, 51, 61, 111, 195, 249, 421, 655, 874, 1178, 1281, 1302, 1072, 587, 174]", - "total_badness": 12611.722208 + "ne3d": 8294, + "quality_histogram": "[4, 17, 28, 31, 56, 53, 52, 65, 101, 174, 258, 406, 664, 825, 1173, 1279, 1268, 1067, 604, 169]", + "total_badness": 12467.41506 }, { "angles_tet": [ @@ -2126,14 +2126,14 @@ 174.05 ], "angles_trig": [ - 3.4703, + 2.5669, 170.0 ], "ne1d": 570, "ne2d": 1202, - "ne3d": 1896, - "quality_histogram": "[3, 21, 33, 53, 67, 79, 103, 138, 141, 206, 192, 169, 173, 159, 121, 85, 68, 51, 28, 6]", - "total_badness": 4606.3683325 + "ne3d": 1838, + "quality_histogram": "[2, 29, 38, 59, 64, 78, 101, 142, 154, 179, 190, 164, 155, 136, 119, 81, 72, 47, 24, 4]", + "total_badness": 4626.8081476 }, { "angles_tet": [ @@ -2146,9 +2146,9 @@ ], "ne1d": 724, "ne2d": 1730, - "ne3d": 3279, - "quality_histogram": "[3, 13, 29, 47, 49, 42, 61, 76, 136, 164, 211, 262, 331, 417, 410, 369, 324, 206, 98, 31]", - "total_badness": 6003.722435 + "ne3d": 3241, + "quality_histogram": "[3, 15, 33, 52, 50, 37, 49, 80, 128, 163, 207, 267, 344, 390, 425, 377, 308, 193, 92, 28]", + "total_badness": 5992.5764939 }, { "angles_tet": [ @@ -2156,14 +2156,14 @@ 169.94 ], "angles_trig": [ - 4.6774, + 3.0435, 165.56 ], "ne1d": 956, "ne2d": 2828, - "ne3d": 8535, - "quality_histogram": "[3, 8, 31, 53, 38, 56, 56, 61, 92, 125, 198, 359, 519, 823, 1170, 1403, 1442, 1186, 728, 184]", - "total_badness": 12500.150133 + "ne3d": 8553, + "quality_histogram": "[3, 9, 39, 50, 44, 51, 59, 58, 82, 134, 194, 341, 553, 831, 1187, 1355, 1471, 1204, 712, 176]", + "total_badness": 12579.823603 }, { "angles_tet": [ @@ -2176,9 +2176,9 @@ ], "ne1d": 1554, "ne2d": 6372, - "ne3d": 31679, - "quality_histogram": "[2, 8, 13, 7, 23, 49, 54, 65, 94, 193, 300, 633, 1284, 2354, 3841, 5362, 6207, 5906, 4128, 1156]", - "total_badness": 40904.871814 + "ne3d": 31632, + "quality_histogram": "[2, 8, 13, 8, 24, 53, 51, 72, 93, 187, 306, 631, 1287, 2372, 3831, 5340, 6171, 5877, 4151, 1155]", + "total_badness": 40867.972596 }, { "angles_tet": [ @@ -2191,148 +2191,148 @@ ], "ne1d": 2992, "ne2d": 23322, - "ne3d": 281474, - "quality_histogram": "[4, 8, 11, 10, 9, 25, 31, 65, 94, 255, 730, 2082, 5611, 13539, 27670, 44430, 59821, 63913, 48452, 14714]", - "total_badness": 343986.69494 + "ne3d": 281660, + "quality_histogram": "[4, 9, 10, 11, 11, 22, 32, 66, 101, 250, 741, 2131, 5596, 13622, 27762, 44430, 59896, 63856, 48363, 14747]", + "total_badness": 344296.42922 } ], "revolution.geo": [ { "angles_tet": [ - 17.244, - 146.94 + 17.33, + 146.89 ], "angles_trig": [ - 16.856, - 127.1 + 16.848, + 130.37 ], "ne1d": 320, "ne2d": 3110, - "ne3d": 8368, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 20, 92, 209, 475, 678, 964, 1102, 1158, 1201, 1045, 819, 494, 109]", - "total_badness": 11961.833328 + "ne3d": 8379, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 27, 91, 210, 452, 680, 983, 1089, 1149, 1165, 1083, 812, 518, 117]", + "total_badness": 11964.310541 }, { "angles_tet": [ - 15.676, - 147.54 + 12.622, + 146.3 ], "angles_trig": [ - 15.258, - 133.97 + 15.111, + 130.65 ], "ne1d": 160, "ne2d": 822, - "ne3d": 1329, - "quality_histogram": "[0, 0, 0, 0, 0, 8, 47, 67, 94, 113, 150, 152, 152, 136, 115, 94, 89, 61, 34, 17]", - "total_badness": 2313.8241188 + "ne3d": 1231, + "quality_histogram": "[0, 0, 0, 0, 0, 11, 51, 85, 105, 139, 138, 152, 155, 101, 76, 79, 66, 43, 24, 6]", + "total_badness": 2255.1850071 }, { "angles_tet": [ - 17.226, - 145.03 + 15.455, + 145.04 ], "angles_trig": [ - 17.855, - 134.86 + 14.648, + 134.93 ], "ne1d": 240, "ne2d": 1830, - "ne3d": 3935, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 16, 79, 127, 291, 402, 515, 506, 549, 453, 425, 313, 213, 44]", - "total_badness": 5811.9376155 + "ne3d": 3862, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 32, 67, 154, 280, 412, 508, 495, 499, 430, 398, 332, 213, 40]", + "total_badness": 5742.111994 }, { "angles_tet": [ - 19.508, - 144.17 + 18.416, + 144.94 ], "angles_trig": [ - 18.334, - 126.86 + 18.352, + 126.94 ], "ne1d": 320, "ne2d": 3110, - "ne3d": 8247, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 11, 48, 148, 350, 622, 836, 1015, 1158, 1210, 1194, 928, 570, 154]", - "total_badness": 11489.396743 + "ne3d": 8253, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 13, 47, 138, 333, 624, 839, 1047, 1151, 1187, 1166, 945, 608, 153]", + "total_badness": 11468.849016 }, { "angles_tet": [ 19.038, - 141.18 + 140.94 ], "angles_trig": [ - 22.38, - 132.94 + 22.544, + 132.58 ], "ne1d": 480, "ne2d": 6864, - "ne3d": 33200, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 49, 189, 564, 1246, 2565, 4051, 5685, 6699, 6242, 4579, 1327]", - "total_badness": 41726.178564 + "ne3d": 33174, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 52, 185, 571, 1253, 2563, 4038, 5675, 6688, 6259, 4556, 1330]", + "total_badness": 41696.548837 }, { "angles_tet": [ - 21.88, + 21.857, 143.83 ], "angles_trig": [ - 19.749, - 129.57 + 19.774, + 121.07 ], "ne1d": 800, "ne2d": 17934, - "ne3d": 201317, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 14, 90, 366, 1253, 3607, 9038, 19001, 30940, 42588, 46561, 36314, 11541]", - "total_badness": 244248.61385 + "ne3d": 201342, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 13, 87, 366, 1250, 3570, 9060, 18977, 31022, 42571, 46627, 36250, 11545]", + "total_badness": 244286.77424 } ], "screw.step": [ { "angles_tet": [ - 17.543, - 147.55 + 15.138, + 148.37 ], "angles_trig": [ - 17.516, + 17.355, 140.59 ], "ne1d": 400, "ne2d": 1436, - "ne3d": 2409, - "quality_histogram": "[0, 0, 0, 0, 0, 3, 18, 65, 91, 197, 205, 271, 295, 257, 282, 272, 183, 164, 90, 16]", - "total_badness": 3840.0858333 + "ne3d": 2341, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 15, 60, 96, 166, 202, 251, 312, 271, 259, 270, 191, 140, 90, 18]", + "total_badness": 3714.0468775 }, { "angles_tet": [ - 16.035, - 146.84 + 21.55, + 146.38 ], "angles_trig": [ - 15.569, - 126.67 + 17.221, + 126.09 ], "ne1d": 528, "ne2d": 2792, - "ne3d": 8178, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 6, 14, 37, 95, 180, 281, 525, 801, 1072, 1331, 1488, 1289, 801, 256]", - "total_badness": 10803.963539 + "ne3d": 8129, + "quality_histogram": "[0, 0, 0, 0, 0, 1, 4, 8, 35, 96, 188, 298, 537, 817, 1057, 1323, 1446, 1284, 798, 237]", + "total_badness": 10753.086327 }, { "angles_tet": [ - 17.002, - 149.0 + 20.515, + 144.02 ], "angles_trig": [ - 15.019, - 124.53 + 20.575, + 124.46 ], "ne1d": 666, "ne2d": 4922, - "ne3d": 31518, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 6, 9, 37, 95, 305, 701, 1673, 3213, 4989, 6771, 6963, 5176, 1579]", - "total_badness": 38669.36435 + "ne3d": 31526, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 6, 35, 90, 306, 711, 1685, 3214, 4996, 6794, 6910, 5193, 1584]", + "total_badness": 38669.670326 } ], "sculpture.geo": [ @@ -2342,19 +2342,19 @@ 152.2 ], "angles_trig": [ - 22.526, - 131.23 + 25.459, + 115.78 ], "ne1d": 192, "ne2d": 414, - "ne3d": 485, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 4, 6, 19, 20, 32, 58, 65, 96, 99, 42, 27, 12, 3]", - "total_badness": 712.08285364 + "ne3d": 476, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 5, 16, 21, 32, 60, 64, 94, 100, 42, 25, 12, 2]", + "total_badness": 693.83910484 }, { "angles_tet": [ - 25.982, - 141.31 + 28.072, + 137.6 ], "angles_trig": [ 27.015, @@ -2362,9 +2362,9 @@ ], "ne1d": 102, "ne2d": 146, - "ne3d": 143, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 1, 6, 13, 20, 19, 34, 27, 16, 2]", - "total_badness": 184.24378391 + "ne3d": 142, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 1, 6, 11, 19, 18, 35, 29, 17, 2]", + "total_badness": 181.04521663 }, { "angles_tet": [ @@ -2387,14 +2387,14 @@ 152.2 ], "angles_trig": [ - 22.525, - 131.23 + 25.459, + 115.78 ], "ne1d": 192, "ne2d": 414, - "ne3d": 485, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 4, 6, 19, 20, 32, 58, 65, 96, 99, 42, 27, 12, 3]", - "total_badness": 712.0829194 + "ne3d": 476, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 2, 5, 16, 21, 32, 60, 64, 94, 100, 42, 25, 12, 2]", + "total_badness": 693.83910484 }, { "angles_tet": [ @@ -2407,9 +2407,9 @@ ], "ne1d": 288, "ne2d": 962, - "ne3d": 1330, - "quality_histogram": "[0, 0, 0, 0, 1, 2, 6, 22, 47, 84, 113, 139, 135, 140, 118, 143, 144, 129, 89, 18]", - "total_badness": 2040.923408 + "ne3d": 1325, + "quality_histogram": "[0, 0, 0, 0, 1, 3, 6, 25, 50, 85, 117, 137, 126, 139, 114, 144, 146, 127, 86, 19]", + "total_badness": 2043.076343 }, { "angles_tet": [ @@ -2430,63 +2430,63 @@ "shaft.geo": [ { "angles_tet": [ - 6.6152, - 167.23 + 11.861, + 162.65 ], "angles_trig": [ - 9.0059, - 160.46 + 11.536, + 151.09 ], "ne1d": 708, "ne2d": 1722, - "ne3d": 2818, - "quality_histogram": "[0, 0, 4, 17, 34, 64, 58, 61, 93, 125, 275, 399, 324, 279, 241, 290, 246, 176, 96, 36]", - "total_badness": 4835.1609793 + "ne3d": 2888, + "quality_histogram": "[0, 0, 0, 5, 22, 31, 50, 68, 109, 164, 278, 418, 327, 290, 256, 301, 246, 188, 106, 29]", + "total_badness": 4780.7450312 }, { "angles_tet": [ - 16.307, - 153.33 + 14.99, + 157.83 ], "angles_trig": [ 17.101, - 114.97 + 121.63 ], "ne1d": 410, "ne2d": 606, - "ne3d": 981, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 0, 0, 13, 21, 28, 47, 92, 119, 150, 160, 161, 105, 59, 25]", - "total_badness": 1354.0992928 + "ne3d": 837, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 0, 5, 21, 42, 43, 54, 83, 94, 118, 110, 89, 78, 51, 46]", + "total_badness": 1215.3787027 }, { "angles_tet": [ - 5.9287, - 168.55 + 8.4343, + 167.31 ], "angles_trig": [ - 12.518, - 148.6 + 10.596, + 155.64 ], "ne1d": 510, "ne2d": 1004, - "ne3d": 2190, - "quality_histogram": "[0, 0, 5, 21, 47, 65, 108, 131, 132, 141, 163, 186, 183, 218, 230, 219, 188, 89, 53, 11]", - "total_badness": 4143.7303382 + "ne3d": 2038, + "quality_histogram": "[0, 0, 4, 28, 43, 77, 101, 140, 143, 120, 135, 161, 142, 194, 216, 184, 195, 85, 56, 14]", + "total_badness": 3926.3340848 }, { "angles_tet": [ - 11.07, - 153.85 + 14.303, + 162.65 ], "angles_trig": [ - 15.567, - 143.82 + 15.347, + 147.74 ], "ne1d": 708, "ne2d": 1722, - "ne3d": 2771, - "quality_histogram": "[0, 0, 0, 0, 5, 10, 31, 34, 87, 131, 258, 425, 328, 293, 255, 305, 264, 204, 103, 38]", - "total_badness": 4362.3768794 + "ne3d": 2795, + "quality_histogram": "[0, 0, 0, 1, 2, 2, 18, 29, 64, 128, 269, 412, 331, 316, 289, 307, 277, 209, 109, 32]", + "total_badness": 4321.8306337 }, { "angles_tet": [ @@ -2499,24 +2499,24 @@ ], "ne1d": 1138, "ne2d": 4220, - "ne3d": 11319, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 31, 70, 184, 327, 552, 980, 1448, 1855, 2225, 1947, 1282, 415]", - "total_badness": 14604.609669 + "ne3d": 11314, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 31, 71, 185, 327, 551, 977, 1446, 1854, 2226, 1947, 1281, 415]", + "total_badness": 14598.782663 }, { "angles_tet": [ 25.341, - 140.25 + 142.09 ], "angles_trig": [ - 22.82, + 22.461, 120.2 ], "ne1d": 1792, "ne2d": 10600, - "ne3d": 63864, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 23, 133, 434, 1291, 3093, 6200, 9970, 13551, 14434, 11025, 3708]", - "total_badness": 77751.111698 + "ne3d": 63811, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 22, 127, 439, 1283, 3078, 6205, 10007, 13534, 14326, 11042, 3746]", + "total_badness": 77678.178377 } ], "sphere.geo": [ @@ -2614,23 +2614,23 @@ "sphereincube.geo": [ { "angles_tet": [ - 10.239, - 167.43 + 10.889, + 166.62 ], "angles_trig": [ 11.28, - 147.53 + 151.39 ], "ne1d": 46, "ne2d": 202, - "ne3d": 509, - "quality_histogram": "[0, 0, 7, 49, 25, 35, 47, 46, 61, 49, 46, 29, 20, 18, 14, 13, 11, 23, 12, 4]", - "total_badness": 1380.3308492 + "ne3d": 422, + "quality_histogram": "[0, 0, 2, 60, 42, 39, 29, 25, 44, 40, 28, 14, 16, 8, 9, 12, 12, 25, 12, 5]", + "total_badness": 1241.4610254 }, { "angles_tet": [ 8.6025, - 151.32 + 158.11 ], "angles_trig": [ 10.358, @@ -2638,44 +2638,44 @@ ], "ne1d": 24, "ne2d": 60, - "ne3d": 165, - "quality_histogram": "[0, 0, 5, 12, 14, 14, 30, 9, 2, 0, 4, 2, 7, 6, 7, 17, 15, 11, 9, 1]", - "total_badness": 445.33373939 + "ne3d": 128, + "quality_histogram": "[0, 0, 5, 12, 14, 16, 34, 28, 18, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]", + "total_badness": 451.47087804 }, { "angles_tet": [ - 9.5694, - 165.32 + 8.1657, + 165.53 ], "angles_trig": [ 9.2408, - 153.15 + 143.87 ], "ne1d": 30, "ne2d": 116, - "ne3d": 351, - "quality_histogram": "[0, 0, 2, 17, 30, 29, 27, 28, 29, 36, 28, 27, 18, 26, 23, 14, 10, 5, 2, 0]", - "total_badness": 891.37154329 + "ne3d": 262, + "quality_histogram": "[0, 0, 4, 26, 30, 52, 33, 16, 22, 13, 11, 12, 11, 8, 6, 7, 6, 3, 2, 0]", + "total_badness": 832.73325512 }, { "angles_tet": [ - 8.3098, - 167.82 + 10.889, + 166.62 ], "angles_trig": [ 11.28, - 154.52 + 151.39 ], "ne1d": 46, "ne2d": 202, - "ne3d": 511, - "quality_histogram": "[0, 0, 6, 24, 20, 22, 53, 46, 58, 57, 53, 30, 35, 19, 19, 16, 13, 24, 12, 4]", - "total_badness": 1239.0180034 + "ne3d": 422, + "quality_histogram": "[0, 0, 2, 60, 42, 39, 29, 25, 44, 40, 28, 14, 16, 8, 9, 12, 12, 25, 12, 5]", + "total_badness": 1241.4610254 }, { "angles_tet": [ 14.196, - 141.03 + 141.07 ], "angles_trig": [ 15.659, @@ -2683,24 +2683,24 @@ ], "ne1d": 74, "ne2d": 418, - "ne3d": 1742, - "quality_histogram": "[0, 0, 0, 0, 0, 5, 5, 10, 28, 29, 59, 81, 143, 233, 273, 268, 238, 191, 137, 42]", - "total_badness": 2433.1633041 + "ne3d": 1737, + "quality_histogram": "[0, 0, 0, 0, 0, 5, 5, 10, 28, 29, 64, 81, 147, 223, 267, 259, 251, 200, 126, 42]", + "total_badness": 2428.2600478 }, { "angles_tet": [ - 25.478, - 139.78 + 25.662, + 141.31 ], "angles_trig": [ - 22.262, - 127.12 + 22.482, + 131.58 ], "ne1d": 122, "ne2d": 1082, - "ne3d": 13976, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 79, 195, 404, 805, 1362, 2194, 2884, 2993, 2299, 739]", - "total_badness": 17240.917492 + "ne3d": 13915, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 3, 20, 89, 213, 396, 802, 1392, 2185, 2853, 2977, 2228, 757]", + "total_badness": 17194.535821 } ], "square.in2d": [ @@ -2997,33 +2997,33 @@ }, { "angles_tet": [ - 1.8765, - 174.24 + 1.6289, + 174.98 ], "angles_trig": [ - 4.7257, - 167.49 + 4.715, + 167.36 ], "ne1d": 0, "ne2d": 692, - "ne3d": 3633, - "quality_histogram": "[19, 390, 609, 512, 475, 360, 289, 219, 200, 146, 127, 79, 57, 47, 39, 22, 23, 11, 6, 3]", - "total_badness": 19650.173928 + "ne3d": 3327, + "quality_histogram": "[18, 376, 565, 458, 423, 303, 290, 219, 148, 131, 120, 79, 58, 39, 36, 20, 15, 21, 4, 4]", + "total_badness": 18184.120092 }, { "angles_tet": [ - 18.466, - 141.93 + 18.239, + 144.68 ], "angles_trig": [ - 19.816, - 120.31 + 19.683, + 120.56 ], "ne1d": 0, "ne2d": 1446, - "ne3d": 2748, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 4, 12, 53, 107, 233, 337, 417, 426, 386, 311, 233, 164, 64]", - "total_badness": 3887.4074267 + "ne3d": 2732, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 1, 14, 50, 134, 229, 351, 416, 425, 383, 313, 197, 166, 51]", + "total_badness": 3892.9500522 }, { "angles_tet": [ @@ -3042,18 +3042,18 @@ }, { "angles_tet": [ - 22.918, - 146.74 + 22.543, + 142.87 ], "angles_trig": [ - 22.789, - 121.82 + 22.771, + 121.22 ], "ne1d": 0, "ne2d": 5894, - "ne3d": 25225, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 8, 36, 127, 405, 852, 1685, 2839, 4088, 4981, 5152, 3881, 1169]", - "total_badness": 31406.455825 + "ne3d": 25266, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 11, 45, 117, 415, 859, 1688, 2866, 4124, 4942, 5200, 3815, 1184]", + "total_badness": 31475.174764 }, { "angles_tet": [ @@ -3061,21 +3061,21 @@ 144.46 ], "angles_trig": [ - 22.929, + 22.932, 121.88 ], "ne1d": 0, "ne2d": 16296, - "ne3d": 175522, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 8, 58, 284, 905, 2699, 7304, 15855, 27048, 37168, 41273, 32327, 10592]", - "total_badness": 212128.85502 + "ne3d": 175488, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 9, 59, 275, 907, 2675, 7276, 15893, 27102, 37072, 41339, 32333, 10547]", + "total_badness": 212080.25891 } ], "trafo.geo": [ { "angles_tet": [ - 9.8264, - 163.31 + 7.5246, + 167.34 ], "angles_trig": [ 14.916, @@ -3083,9 +3083,9 @@ ], "ne1d": 690, "ne2d": 1684, - "ne3d": 5197, - "quality_histogram": "[0, 0, 0, 1, 1, 11, 32, 47, 111, 198, 279, 365, 465, 566, 668, 699, 616, 545, 452, 141]", - "total_badness": 7521.8556471 + "ne3d": 5193, + "quality_histogram": "[0, 0, 1, 1, 1, 11, 32, 47, 111, 196, 275, 365, 465, 566, 668, 699, 617, 545, 452, 141]", + "total_badness": 7518.4794095 }, { "angles_tet": [ @@ -3098,9 +3098,9 @@ ], "ne1d": 390, "ne2d": 522, - "ne3d": 1362, - "quality_histogram": "[0, 0, 3, 12, 12, 38, 80, 115, 128, 152, 166, 127, 147, 106, 88, 87, 53, 35, 11, 2]", - "total_badness": 2741.1573806 + "ne3d": 1353, + "quality_histogram": "[0, 0, 3, 13, 12, 38, 80, 115, 128, 149, 170, 126, 139, 107, 87, 85, 54, 34, 11, 2]", + "total_badness": 2731.8393348 }, { "angles_tet": [ @@ -3113,14 +3113,14 @@ ], "ne1d": 512, "ne2d": 874, - "ne3d": 2394, - "quality_histogram": "[0, 0, 0, 3, 8, 13, 41, 69, 121, 139, 196, 214, 310, 387, 348, 237, 141, 96, 46, 25]", - "total_badness": 3940.3463668 + "ne3d": 2381, + "quality_histogram": "[0, 0, 0, 3, 9, 15, 42, 68, 122, 139, 198, 209, 307, 380, 349, 235, 137, 97, 46, 25]", + "total_badness": 3929.5802554 }, { "angles_tet": [ - 9.8264, - 163.31 + 7.5246, + 167.34 ], "angles_trig": [ 14.916, @@ -3128,14 +3128,14 @@ ], "ne1d": 690, "ne2d": 1684, - "ne3d": 5103, - "quality_histogram": "[0, 0, 0, 1, 0, 3, 23, 37, 102, 191, 269, 343, 430, 564, 673, 707, 611, 543, 465, 141]", - "total_badness": 7308.1826107 + "ne3d": 5099, + "quality_histogram": "[0, 0, 1, 1, 0, 3, 23, 37, 102, 189, 265, 343, 430, 564, 673, 707, 612, 543, 465, 141]", + "total_badness": 7304.8063731 }, { "angles_tet": [ - 16.895, - 145.94 + 6.8825, + 166.88 ], "angles_trig": [ 17.568, @@ -3143,9 +3143,9 @@ ], "ne1d": 1050, "ne2d": 3812, - "ne3d": 17989, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 15, 34, 64, 182, 572, 1421, 2208, 2295, 2686, 2718, 2715, 2367, 709]", - "total_badness": 23456.461898 + "ne3d": 17990, + "quality_histogram": "[0, 0, 1, 0, 0, 0, 3, 15, 34, 64, 183, 570, 1424, 2206, 2299, 2682, 2720, 2713, 2367, 709]", + "total_badness": 23464.671179 }, { "angles_tet": [ @@ -3158,9 +3158,9 @@ ], "ne1d": 1722, "ne2d": 10042, - "ne3d": 84846, - "quality_histogram": "[0, 0, 0, 0, 0, 3, 55, 1436, 720, 373, 694, 1188, 2495, 5466, 8917, 13178, 16414, 16982, 12849, 4076]", - "total_badness": 108595.81093 + "ne3d": 84837, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 55, 1435, 719, 373, 691, 1186, 2492, 5459, 8935, 13171, 16437, 16966, 12825, 4090]", + "total_badness": 108583.90758 } ], "twobricks.geo": [ @@ -3350,78 +3350,78 @@ "twocyl.geo": [ { "angles_tet": [ - 19.248, - 145.27 + 17.425, + 151.3 ], "angles_trig": [ - 20.903, - 115.14 + 21.178, + 117.72 ], "ne1d": 144, "ne2d": 408, - "ne3d": 575, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 3, 3, 8, 29, 49, 73, 88, 111, 94, 65, 35, 14, 3]", - "total_badness": 829.9829498 + "ne3d": 577, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 6, 9, 16, 24, 56, 67, 84, 115, 83, 63, 36, 11, 6]", + "total_badness": 849.57493713 }, { "angles_tet": [ - 30.607, - 131.81 + 18.424, + 153.38 ], "angles_trig": [ - 31.025, - 102.88 + 27.664, + 121.51 ], "ne1d": 68, "ne2d": 100, - "ne3d": 182, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 5, 23, 22, 41, 33, 33, 15, 5]", - "total_badness": 233.48438775 + "ne3d": 152, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 2, 5, 6, 12, 11, 10, 14, 22, 19, 18, 23, 4, 4]", + "total_badness": 226.47203657 }, { "angles_tet": [ - 12.832, - 161.72 + 10.647, + 163.92 ], "angles_trig": [ - 12.422, - 145.22 + 11.415, + 146.97 ], "ne1d": 102, "ne2d": 238, - "ne3d": 552, - "quality_histogram": "[0, 0, 0, 4, 10, 19, 32, 57, 80, 49, 44, 31, 40, 39, 33, 35, 48, 23, 5, 3]", - "total_badness": 1120.6372579 + "ne3d": 548, + "quality_histogram": "[0, 0, 0, 5, 10, 19, 40, 65, 83, 49, 39, 31, 25, 38, 34, 37, 44, 20, 7, 2]", + "total_badness": 1137.6676071 }, { "angles_tet": [ - 19.336, - 133.79 + 17.51, + 141.43 ], "angles_trig": [ - 20.384, - 110.81 + 21.505, + 117.52 ], "ne1d": 144, "ne2d": 408, "ne3d": 575, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 2, 2, 7, 26, 47, 82, 84, 103, 100, 63, 42, 14, 3]", - "total_badness": 824.91371063 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 4, 7, 10, 20, 57, 65, 76, 116, 90, 74, 40, 14, 2]", + "total_badness": 830.26839459 }, { "angles_tet": [ - 20.464, - 141.49 + 19.806, + 141.75 ], "angles_trig": [ - 22.436, - 116.28 + 22.382, + 115.67 ], "ne1d": 214, "ne2d": 910, - "ne3d": 1935, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 2, 17, 29, 82, 132, 192, 307, 374, 358, 243, 168, 31]", - "total_badness": 2563.7381807 + "ne3d": 1906, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 2, 14, 28, 73, 129, 185, 278, 363, 378, 262, 155, 38]", + "total_badness": 2512.811709 }, { "angles_tet": [ From 17b6c83499a0359e1e7f3926c378eb4e25ba2b93 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Wed, 30 Oct 2019 09:09:57 +0100 Subject: [PATCH 106/120] Remove debug output --- libsrc/meshing/improve3.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/meshing/improve3.cpp b/libsrc/meshing/improve3.cpp index bda1cfdb..bb90bada 100644 --- a/libsrc/meshing/improve3.cpp +++ b/libsrc/meshing/improve3.cpp @@ -778,7 +778,7 @@ void MeshOptimize3d :: SplitImprove (Mesh & mesh, } topt.Stop(); mesh.Compress(); - PrintMessage (1, cnt, " splits performed"); + PrintMessage (5, cnt, " splits performed"); (*testout) << "Splitt - Improve done" << "\n"; if (goal == OPT_QUALITY) From 94d0a5a585eb24b6ee5f979543680a2bc04e2b73 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Wed, 30 Oct 2019 13:56:49 +0100 Subject: [PATCH 107/120] [cmake] Set interface include dir for ngcore --- libsrc/core/CMakeLists.txt | 1 + tests/pytest/compare_results.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/libsrc/core/CMakeLists.txt b/libsrc/core/CMakeLists.txt index e18dd87d..7a8567c8 100644 --- a/libsrc/core/CMakeLists.txt +++ b/libsrc/core/CMakeLists.txt @@ -32,6 +32,7 @@ if(WIN32) endif(WIN32) target_compile_definitions(ngcore PUBLIC $<$:NETGEN_ENABLE_CHECK_RANGE>) +target_include_directories(ngcore INTERFACE $ $) if(CHECK_RANGE) target_compile_definitions(ngcore PUBLIC NETGEN_ENABLE_CHECK_RANGE) diff --git a/tests/pytest/compare_results.py b/tests/pytest/compare_results.py index 8a74fb9d..82f578e6 100644 --- a/tests/pytest/compare_results.py +++ b/tests/pytest/compare_results.py @@ -82,7 +82,7 @@ for i,d in enumerate(['badness','#edges','#trigs','#tets']): ax = plt.subplot(2,5,6+i) plt.title('difference '+d+' (in %)') # plt.violinplot([(y-x)/x for x,y in zip(data[d],data2[d])], showmedians=True) - plt.boxplot([(y-x)/x for x,y in zip(data[d],data2[d])]) + plt.boxplot([100.0*(y-x)/x for x,y in zip(data[d],data2[d])]) plt.hlines(0.0, 0.5,1.5, linestyle='dotted') From 9fdd28e3b8d3b5ac4d724c0a346547071e5b7ef4 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Wed, 30 Oct 2019 16:09:04 +0100 Subject: [PATCH 108/120] Compress mesh in SwapImprove2 --- libsrc/meshing/improve3.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libsrc/meshing/improve3.cpp b/libsrc/meshing/improve3.cpp index bb90bada..7138e0ab 100644 --- a/libsrc/meshing/improve3.cpp +++ b/libsrc/meshing/improve3.cpp @@ -3802,6 +3802,7 @@ void MeshOptimize3d :: SwapImprove2Sequential (Mesh & mesh, OPTIMIZEGOAL goal) */ + mesh.Compress(); bad1 = mesh.CalcTotalBad (mp); (*testout) << "Total badness = " << bad1 << endl; (*testout) << "swapimprove2 done" << "\n"; @@ -3890,6 +3891,7 @@ void MeshOptimize3d :: SwapImprove2 (Mesh & mesh, OPTIMIZEGOAL goal) PrintMessage (5, cnt, " swaps performed"); + mesh.Compress(); bad1 = mesh.CalcTotalBad (mp); (*testout) << "Total badness = " << bad1 << endl; (*testout) << "swapimprove2 done" << "\n"; From fbf6d92895bb52f37f59d01f90f9e0e4c146d2ed Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Thu, 31 Oct 2019 13:34:40 +0100 Subject: [PATCH 109/120] clean up geometry interface, fix if number of subdivided edges was not correct --- libsrc/meshing/basegeom.cpp | 24 ++++++------- libsrc/meshing/basegeom.hpp | 69 +++++++++++++++++++++++++++++++------ 2 files changed, 71 insertions(+), 22 deletions(-) diff --git a/libsrc/meshing/basegeom.cpp b/libsrc/meshing/basegeom.cpp index 1adb07dd..0e5fa405 100644 --- a/libsrc/meshing/basegeom.cpp +++ b/libsrc/meshing/basegeom.cpp @@ -10,14 +10,6 @@ namespace netgen GeometryRegister :: ~GeometryRegister() { ; } - Array> GeometryEdge :: GetEquidistantPointArray(size_t npoints) const - { - Array> pts(npoints); - for(auto i : Range(npoints)) - pts[i] = GetPoint(double(i)/(npoints-1)); - return pts; - } - void GeometryFace :: RestrictHTrig(Mesh& mesh, const PointGeomInfo& gi0, const PointGeomInfo& gi1, @@ -148,6 +140,8 @@ namespace netgen static Timer t1("MeshEdges"); RegionTimer regt(t1); static Timer tdivide("Divide Edges"); static Timer tdivedgesections("Divide edge sections"); + const char* savetask = multithread.task; + multithread.task = "Mesh Edges"; // create face descriptors and set bc names mesh.SetNBCNames(faces.Size()); @@ -196,11 +190,15 @@ namespace netgen double hvalue[divide_edge_sections+1]; hvalue[0] = 0; + Point<3> old_pt = edge->GetPoint(0.); // calc local h for edge tdivedgesections.Start(); - auto edgepts = edge->GetEquidistantPointArray(divide_edge_sections+1); - for(auto i : Range(edgepts.Size()-1)) - hvalue[i+1] = hvalue[i] + 1./mesh.GetH(edgepts[i+1]) * (edgepts[i+1]-edgepts[i]).Length(); + for(auto i : Range(divide_edge_sections)) + { + auto pt = edge->GetPoint(double(i+1)/divide_edge_sections); + hvalue[i+1] = hvalue[i] + 1./mesh.GetH(pt) * (pt-old_pt).Length(); + old_pt = pt; + } int nsubedges = max2(1, int(floor(hvalue[divide_edge_sections]+0.5))); tdivedgesections.Stop(); mps.SetSize(nsubedges-1); @@ -235,7 +233,7 @@ namespace netgen cout << "CORRECTED" << endl; mps.SetSize (nsubedges-2); params.SetSize (nsubedges); - params[nsubedges] = 1.; + params[nsubedges-1] = 1.; } tdivide.Stop(); // ----------- Add Points to mesh and create segments ----- @@ -292,6 +290,8 @@ namespace netgen } } } + mesh.CalcSurfacesOfNode(); + multithread.task = savetask; } void NetgenGeometry :: MeshSurface(Mesh& mesh, diff --git a/libsrc/meshing/basegeom.hpp b/libsrc/meshing/basegeom.hpp index c854b490..b9e7bb16 100644 --- a/libsrc/meshing/basegeom.hpp +++ b/libsrc/meshing/basegeom.hpp @@ -32,7 +32,15 @@ namespace netgen virtual double CalcStep(double t, double sag) const = 0; virtual bool OrientedLikeGlobal() const = 0; virtual size_t GetHash() const = 0; - virtual Array> GetEquidistantPointArray(size_t npoints) const; + virtual void ProjectPoint(Point<3>& p, EdgePointGeomInfo& gi) const = 0; + virtual void PointBetween(const Point<3>& p1, + const Point<3>& p2, + double secpoint, + const EdgePointGeomInfo& gi1, + const EdgePointGeomInfo& gi2, + Point<3>& newp, + EdgePointGeomInfo& newgi) const = 0; + virtual Vec<3> GetTangent(const Point<3>& p) const = 0; }; class GeometryFace @@ -42,9 +50,11 @@ namespace netgen virtual size_t GetNBoundaries() const = 0; virtual Array> GetBoundary(size_t index) const = 0; virtual string GetName() const { return "default"; } + virtual void Project(Point<3>& p) const = 0; // Project point using geo info. Fast if point is close to // parametrization in geo info. virtual bool ProjectPointGI(Point<3>& p, PointGeomInfo& gi) const =0; + virtual bool CalcPointGeomInfo(const Point<3>& p, PointGeomInfo& gi) const = 0; virtual Point<3> GetPoint(const PointGeomInfo& gi) const = 0; virtual void CalcEdgePointGI(const GeometryEdge& edge, double t, @@ -55,6 +65,21 @@ namespace netgen virtual double GetCurvature(const PointGeomInfo& gi) const = 0; virtual void RestrictH(Mesh& mesh, const MeshingParameters& mparam) const = 0; + virtual Vec<3> GetNormal(const Point<3>& p) const + { + return {0.,0.,1.}; + } + virtual Vec<3> GetNormal(const Point<3>& p, const PointGeomInfo& gi) const + { + return GetNormal(p); + } + virtual void PointBetween(const Point<3>& p1, + const Point<3>& p2, + double secpoint, + const PointGeomInfo& gi1, + const PointGeomInfo& gi2, + Point<3>& newp, + PointGeomInfo& newgi) const = 0; protected: void RestrictHTrig(Mesh& mesh, @@ -100,21 +125,32 @@ namespace netgen virtual void FinalizeMesh(Mesh& mesh) const {} virtual void ProjectPoint (int surfind, Point<3> & p) const - { } - virtual void ProjectPointEdge (int surfind, int surfind2, Point<3> & p) const { } - virtual void ProjectPointEdge (int surfind, int surfind2, Point<3> & p, EdgePointGeomInfo& gi) const - { ProjectPointEdge(surfind, surfind2, p); } + { + faces[surfind-1]->Project(p); + } - virtual bool CalcPointGeomInfo(int surfind, PointGeomInfo& gi, const Point<3> & p3) const {return false;} + virtual void ProjectPointEdge (int surfind, int surfind2, Point<3> & p) const + { + throw Exception("In ProjectPointEdge of basegeometry"); + } + virtual void ProjectPointEdge (int surfind, int surfind2, Point<3> & p, EdgePointGeomInfo& gi) const + { + edges[gi.edgenr]->ProjectPoint(p, gi); + } + + virtual bool CalcPointGeomInfo(int surfind, PointGeomInfo& gi, const Point<3> & p3) const + { + return faces[surfind-1]->CalcPointGeomInfo(p3, gi); + } virtual bool ProjectPointGI (int surfind, Point<3> & p, PointGeomInfo & gi) const { - throw Exception("ProjectPointGI not overloaded in class" + Demangle(typeid(*this).name())); + return faces[surfind-1]->ProjectPointGI(p, gi); } virtual Vec<3> GetNormal(int surfind, const Point<3> & p) const - { return {0.,0.,1.}; } + { return faces[surfind-1]->GetNormal(p); } virtual Vec<3> GetNormal(int surfind, const Point<3> & p, const PointGeomInfo & gi) const - { return GetNormal(surfind, p); } + { return faces[surfind-1]->GetNormal(p, gi); } [[deprecated]] void GetNormal(int surfind, const Point<3> & p, Vec<3> & n) const { @@ -129,6 +165,11 @@ namespace netgen Point<3> & newp, PointGeomInfo & newgi) const { + if(faces.Size()) + { + faces[surfi-1]->PointBetween(p1, p2, secpoint, gi1, gi2, newp, newgi); + return; + } newp = p1 + secpoint * (p2-p1); } @@ -140,13 +181,21 @@ namespace netgen Point<3> & newp, EdgePointGeomInfo & newgi) const { + if(edges.Size()) + { + edges[ap1.edgenr]->PointBetween(p1, p2, secpoint, + ap1, ap2, newp, newgi); + return; + } newp = p1+secpoint*(p2-p1); } virtual Vec<3> GetTangent(const Point<3> & p, int surfi1, int surfi2, const EdgePointGeomInfo & egi) const - { throw Exception("Call GetTangent of " + Demangle(typeid(*this).name())); } + { + return edges[egi.edgenr]->GetTangent(p); + } virtual size_t GetEdgeIndex(const GeometryEdge& edge) const { From 249d78508433a6e03535a3320f6d62cd4aa0bae3 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Thu, 31 Oct 2019 15:17:28 +0100 Subject: [PATCH 110/120] progress bars for find edges, mesh surface,... --- libsrc/meshing/basegeom.cpp | 9 ++++++++- libsrc/meshing/improve3.cpp | 12 ++++++------ libsrc/meshing/meshfunc.cpp | 10 +++++++--- libsrc/meshing/smoothing3.cpp | 10 +++++----- 4 files changed, 26 insertions(+), 15 deletions(-) diff --git a/libsrc/meshing/basegeom.cpp b/libsrc/meshing/basegeom.cpp index 0e5fa405..eae2031e 100644 --- a/libsrc/meshing/basegeom.cpp +++ b/libsrc/meshing/basegeom.cpp @@ -171,6 +171,7 @@ namespace netgen auto boundary = face.GetBoundary(facebndnr); for(auto enr : Range(boundary)) { + multithread.percent = 100. * ((double(enr)/boundary.Size() + facebndnr)/face.GetNBoundaries() + facenr)/faces.Size(); const auto& oriented_edge = *boundary[enr]; auto edgenr = GetEdgeIndex(oriented_edge); const auto& edge = edges[edgenr]; @@ -298,10 +299,13 @@ namespace netgen const MeshingParameters& mparam) const { static Timer t1("Surface Meshing"); RegionTimer regt(t1); + const char* savetask = multithread.task; + multithread.task = "Mesh Surface"; Array glob2loc(mesh.GetNP()); for(auto k : Range(faces)) { + multithread.percent = 100. * k/faces.Size(); const auto& face = *faces[k]; auto bb = face.GetBoundingBox(); bb.Increase(bb.Diam()/10); @@ -354,6 +358,7 @@ namespace netgen mesh.SurfaceElements()[i].SetIndex(k+1); } } + multithread.task = savetask; } void NetgenGeometry :: OptimizeSurface(Mesh& mesh, const MeshingParameters& mparam) const @@ -366,9 +371,11 @@ namespace netgen auto meshopt = MeshOptimize2d(mesh); for(auto i : Range(mparam.optsteps2d)) { - PrintMessage(2, "Optimization step ", i); + PrintMessage(3, "Optimization step ", i); + int innerstep = 0; for(auto optstep : mparam.optimize2d) { + multithread.percent = 100. * (double(innerstep++)/mparam.optimize2d.size() + i)/mparam.optsteps2d; switch(optstep) { case 's': diff --git a/libsrc/meshing/improve3.cpp b/libsrc/meshing/improve3.cpp index 7138e0ab..d9cc3534 100644 --- a/libsrc/meshing/improve3.cpp +++ b/libsrc/meshing/improve3.cpp @@ -183,7 +183,7 @@ void MeshOptimize3d :: CombineImproveSequential (Mesh & mesh, // mesh.CalcSurfacesOfNode (); const char * savetask = multithread.task; - multithread.task = "Combine Improve"; + multithread.task = "Optimize Volume: Combine Improve"; double totalbad = 0; @@ -435,7 +435,7 @@ void MeshOptimize3d :: CombineImprove (Mesh & mesh, // mesh.CalcSurfacesOfNode (); const char * savetask = multithread.task; - multithread.task = "Combine Improve"; + multithread.task = "Optimize Volume: Combine Improve"; tbad.Start(); @@ -712,7 +712,7 @@ void MeshOptimize3d :: SplitImprove (Mesh & mesh, Array elerrs(ne); const char * savetask = multithread.task; - multithread.task = "Split Improve"; + multithread.task = "Optimize Volume: Split Improve"; PrintMessage (3, "SplitImprove"); (*testout) << "start SplitImprove" << "\n"; @@ -826,7 +826,7 @@ void MeshOptimize3d :: SplitImproveSequential (Mesh & mesh, illegaltet.Clear(); const char * savetask = multithread.task; - multithread.task = "Split Improve"; + multithread.task = "Optimize Volume: Split Improve"; PrintMessage (3, "SplitImprove"); (*testout) << "start SplitImprove" << "\n"; @@ -1121,7 +1121,7 @@ void MeshOptimize3d :: SwapImproveSequential (Mesh & mesh, OPTIMIZEGOAL goal, (*testout) << "\n" << "Start SwapImprove" << endl; const char * savetask = multithread.task; - multithread.task = "Swap Improve"; + multithread.task = "Optimize Volume: Swap Improve"; // mesh.CalcSurfacesOfNode (); @@ -2617,7 +2617,7 @@ void MeshOptimize3d :: SwapImprove (Mesh & mesh, OPTIMIZEGOAL goal, (*testout) << "\n" << "Start SwapImprove" << endl; const char * savetask = multithread.task; - multithread.task = "Swap Improve"; + multithread.task = "Optimize Volume: Swap Improve"; INDEX_3_HASHTABLE faces(mesh.GetNOpenElements()/3 + 2); if (goal == OPT_CONFORM) diff --git a/libsrc/meshing/meshfunc.cpp b/libsrc/meshing/meshfunc.cpp index 4b92ed8f..f21e0812 100644 --- a/libsrc/meshing/meshfunc.cpp +++ b/libsrc/meshing/meshfunc.cpp @@ -646,6 +646,8 @@ namespace netgen { static Timer t("OptimizeVolume"); RegionTimer reg(t); RegionTaskManager rtm(mp.parallel_meshing ? mp.nthreads : 0); + const char* savetask = multithread.task; + multithread.task = "Optimize Volume"; int i; @@ -663,7 +665,7 @@ namespace netgen */ mesh3d.CalcSurfacesOfNode(); - for (i = 1; i <= mp.optsteps3d; i++) + for (auto i : Range(mp.optsteps3d)) { if (multithread.terminate) break; @@ -672,12 +674,13 @@ namespace netgen // teterrpow = mp.opterrpow; // for (size_t j = 1; j <= strlen(mp.optimize3d); j++) - for (size_t j = 1; j <= mp.optimize3d.length(); j++) + for (auto j : Range(mp.optimize3d.size())) { + multithread.percent = 100.* (double(j)/mp.optimize3d.size() + i)/mp.optsteps3d; if (multithread.terminate) break; - switch (mp.optimize3d[j-1]) + switch (mp.optimize3d[j]) { case 'c': optmesh.CombineImprove(mesh3d, OPT_REST); break; case 'd': optmesh.SplitImprove(mesh3d); break; @@ -698,6 +701,7 @@ namespace netgen MeshQuality3d (mesh3d); } + multithread.task = savetask; return MESHING3_OK; } diff --git a/libsrc/meshing/smoothing3.cpp b/libsrc/meshing/smoothing3.cpp index de0b6cb5..e84a18ba 100644 --- a/libsrc/meshing/smoothing3.cpp +++ b/libsrc/meshing/smoothing3.cpp @@ -1164,7 +1164,7 @@ void Mesh :: ImproveMesh (const CSG eometry & geometry, OPTIMIZEGOAL goal) } const char * savetask = multithread.task; - multithread.task = "Smooth Mesh"; + multithread.task = "Optimize Volume: Smooth Mesh"; TABLE surfelementsonpoint(points.Size()); @@ -1398,7 +1398,7 @@ void Mesh :: ImproveMeshSequential (const MeshingParameters & mp, OPTIMIZEGOAL g const char * savetask = multithread.task; - multithread.task = "Smooth Mesh"; + multithread.task = "Optimize Volume: Smooth Mesh"; for (PointIndex pi : points.Range()) if ( (*this)[pi].Type() == INNERPOINT ) @@ -1524,7 +1524,7 @@ void Mesh :: ImproveMesh (const MeshingParameters & mp, OPTIMIZEGOAL goal) } const char * savetask = multithread.task; - multithread.task = "Smooth Mesh"; + multithread.task = "Optimize Volume: Smooth Mesh"; topt.Start(); int counter = 0; @@ -1659,7 +1659,7 @@ void Mesh :: ImproveMeshJacobian (const MeshingParameters & mp, const char * savetask = multithread.task; - multithread.task = "Smooth Mesh Jacobian"; + multithread.task = "Optimize Volume: Smooth Mesh Jacobian"; // for (PointIndex pi = points.Begin(); i < points.End(); pi++) for (PointIndex pi : points.Range()) @@ -1815,7 +1815,7 @@ void Mesh :: ImproveMeshJacobianOnSurface (const MeshingParameters & mp, const char * savetask = multithread.task; - multithread.task = "Smooth Mesh Jacobian"; + multithread.task = "Optimize Volume: Smooth Mesh Jacobian"; // for (PointIndex pi = points.Begin(); pi <= points.End(); pi++) for (PointIndex pi : points.Range()) From 1e3ed047db2a79c8ae9542c2d13d92cef60809a0 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Thu, 31 Oct 2019 15:25:47 +0100 Subject: [PATCH 111/120] progress for analyse geometry --- libsrc/meshing/basegeom.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/libsrc/meshing/basegeom.cpp b/libsrc/meshing/basegeom.cpp index eae2031e..d9542149 100644 --- a/libsrc/meshing/basegeom.cpp +++ b/libsrc/meshing/basegeom.cpp @@ -98,10 +98,14 @@ namespace netgen if(mparam.uselocalh) { double eps = 1e-12 * bounding_box.Diam(); + const char* savetask = multithread.task; + multithread.task = "Analyse Edges"; // restrict meshsize on edges - for(const auto & edge : edges) + for(auto i : Range(edges)) { + multithread.percent = 100. * i/edges.Size(); + const auto & edge = edges[i]; auto length = edge->GetLength(); // skip very short edges if(length < eps) @@ -127,9 +131,15 @@ namespace netgen } } + multithread.task = "Analyse Faces"; // restrict meshsize on faces - for(const auto& face : faces) - face->RestrictH(mesh, mparam); + for(auto i : Range(faces)) + { + multithread.percent = 100. * i/faces.Size(); + const auto& face = faces[i]; + face->RestrictH(mesh, mparam); + } + multithread.task = savetask; } mesh.LoadLocalMeshSize(mparam.meshsizefilename); } From 9ebc6b00f3208908a78195d9ebc881b3794952fd Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Thu, 31 Oct 2019 15:38:40 +0000 Subject: [PATCH 112/120] [testing] update results --- tests/pytest/results.json | 362 +++++++++++++++++++------------------- 1 file changed, 181 insertions(+), 181 deletions(-) diff --git a/tests/pytest/results.json b/tests/pytest/results.json index ec0753f3..67022c1a 100644 --- a/tests/pytest/results.json +++ b/tests/pytest/results.json @@ -293,33 +293,33 @@ }, { "angles_tet": [ - 12.942, - 162.28 + 15.271, + 159.02 ], "angles_trig": [ - 10.449, - 154.86 + 14.076, + 146.64 ], "ne1d": 32, "ne2d": 220, - "ne3d": 651, - "quality_histogram": "[0, 0, 0, 7, 5, 23, 31, 53, 53, 64, 49, 37, 45, 59, 49, 52, 48, 45, 23, 8]", - "total_badness": 1234.956476 + "ne3d": 642, + "quality_histogram": "[0, 0, 0, 0, 4, 22, 41, 45, 52, 48, 42, 42, 63, 64, 57, 33, 39, 45, 37, 8]", + "total_badness": 1182.99704 }, { "angles_tet": [ - 2.7343, - 173.79 + 2.7569, + 173.39 ], "angles_trig": [ - 8.7414, - 158.73 + 7.6422, + 156.83 ], "ne1d": 48, "ne2d": 428, - "ne3d": 868, - "quality_histogram": "[0, 7, 36, 34, 44, 67, 67, 67, 87, 94, 61, 81, 55, 45, 46, 23, 20, 18, 15, 1]", - "total_badness": 2363.7016426 + "ne3d": 811, + "quality_histogram": "[0, 8, 32, 34, 32, 51, 46, 63, 86, 81, 63, 72, 59, 44, 46, 24, 27, 24, 15, 4]", + "total_badness": 2131.9115363 }, { "angles_tet": [ @@ -471,9 +471,9 @@ ], "ne1d": 262, "ne2d": 726, - "ne3d": 2187, - "quality_histogram": "[0, 4, 11, 35, 76, 102, 132, 102, 83, 52, 60, 80, 114, 196, 255, 258, 257, 227, 114, 29]", - "total_badness": 4157.6373393 + "ne3d": 2186, + "quality_histogram": "[0, 4, 11, 34, 76, 101, 133, 102, 83, 52, 61, 79, 114, 196, 255, 258, 257, 227, 114, 29]", + "total_badness": 4154.7434704 }, { "angles_tet": [ @@ -507,8 +507,8 @@ }, { "angles_tet": [ - 5.1036, - 168.02 + 5.1018, + 167.98 ], "angles_trig": [ 12.696, @@ -516,9 +516,9 @@ ], "ne1d": 262, "ne2d": 726, - "ne3d": 2083, - "quality_histogram": "[0, 2, 6, 20, 50, 80, 113, 89, 78, 45, 36, 73, 98, 176, 267, 270, 286, 225, 135, 34]", - "total_badness": 3674.0021566 + "ne3d": 2080, + "quality_histogram": "[0, 2, 6, 20, 50, 80, 113, 90, 72, 47, 38, 75, 95, 179, 262, 272, 286, 224, 135, 34]", + "total_badness": 3667.9320382 }, { "angles_tet": [ @@ -854,24 +854,24 @@ ], "ne1d": 24, "ne2d": 66, - "ne3d": 76, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 1, 6, 10, 0, 4, 5, 8, 5, 4, 10, 19, 2, 0]", - "total_badness": 119.18652785 + "ne3d": 71, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 2, 4, 9, 1, 5, 3, 3, 3, 2, 9, 24, 3, 1]", + "total_badness": 108.79228828 }, { "angles_tet": [ - 17.07, - 156.8 + 14.383, + 158.73 ], "angles_trig": [ - 18.547, - 129.78 + 12.296, + 144.06 ], "ne1d": 36, "ne2d": 152, - "ne3d": 425, - "quality_histogram": "[0, 0, 0, 0, 0, 2, 16, 28, 35, 41, 45, 44, 30, 38, 28, 28, 45, 18, 20, 7]", - "total_badness": 743.37290709 + "ne3d": 515, + "quality_histogram": "[0, 0, 0, 1, 2, 12, 25, 45, 55, 55, 63, 44, 38, 41, 26, 30, 42, 16, 13, 7]", + "total_badness": 981.48109509 }, { "angles_tet": [ @@ -941,14 +941,14 @@ 167.27 ], "angles_trig": [ - 10.966, + 10.973, 150.52 ], "ne1d": 48, "ne2d": 142, "ne3d": 162, - "quality_histogram": "[0, 0, 2, 7, 26, 32, 17, 2, 0, 2, 0, 1, 4, 4, 6, 13, 15, 13, 18, 0]", - "total_badness": 438.06788961 + "quality_histogram": "[0, 0, 2, 7, 26, 32, 17, 2, 0, 2, 0, 1, 2, 5, 6, 15, 15, 13, 17, 0]", + "total_badness": 437.74460755 }, { "angles_tet": [ @@ -1014,18 +1014,18 @@ }, { "angles_tet": [ - 3.5997, - 172.04 + 4.2159, + 171.02 ], "angles_trig": [ - 6.8707, - 163.48 + 7.6756, + 159.68 ], "ne1d": 0, "ne2d": 192, - "ne3d": 1007, - "quality_histogram": "[0, 29, 63, 130, 181, 138, 104, 73, 68, 45, 42, 28, 23, 29, 16, 12, 9, 9, 6, 2]", - "total_badness": 3930.5060123 + "ne3d": 957, + "quality_histogram": "[0, 21, 76, 109, 128, 111, 100, 84, 77, 55, 62, 31, 32, 22, 10, 15, 8, 10, 4, 2]", + "total_badness": 3582.099151 }, { "angles_tet": [ @@ -1074,18 +1074,18 @@ }, { "angles_tet": [ - 23.713, - 141.52 + 23.712, + 141.53 ], "angles_trig": [ - 27.222, - 121.78 + 27.221, + 120.25 ], "ne1d": 0, "ne2d": 4236, - "ne3d": 37098, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 11, 43, 183, 472, 1416, 3234, 5627, 7717, 8927, 7206, 2261]", - "total_badness": 44647.422985 + "ne3d": 37109, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 1, 11, 43, 182, 476, 1429, 3220, 5619, 7718, 8934, 7209, 2267]", + "total_badness": 44660.376357 } ], "ellipticcone.geo": [ @@ -1162,7 +1162,7 @@ "ne2d": 3468, "ne3d": 13471, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 8, 18, 67, 132, 305, 570, 999, 1594, 2335, 2604, 2480, 1787, 572]", - "total_badness": 17093.610487 + "total_badness": 17093.610502 }, { "angles_tet": [ @@ -1175,9 +1175,9 @@ ], "ne1d": 432, "ne2d": 9544, - "ne3d": 69860, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 7, 30, 69, 224, 646, 1567, 3678, 7012, 11245, 14665, 15510, 11805, 3401]", - "total_badness": 85646.633699 + "ne3d": 69863, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 7, 30, 69, 222, 646, 1562, 3675, 7035, 11242, 14646, 15515, 11810, 3403]", + "total_badness": 85648.446235 } ], "ellipticcyl.geo": [ @@ -1367,18 +1367,18 @@ "frame.step": [ { "angles_tet": [ - 2.6027, + 2.6064, 169.75 ], "angles_trig": [ 1.845, - 158.55 + 168.38 ], "ne1d": 12598, "ne2d": 39662, - "ne3d": 202894, - "quality_histogram": "[2, 10, 7, 6, 13, 48, 112, 309, 901, 2108, 4329, 8335, 14659, 22946, 29480, 33978, 34111, 28568, 18133, 4839]", - "total_badness": 271396.36361 + "ne3d": 202536, + "quality_histogram": "[2, 10, 7, 6, 13, 37, 104, 289, 845, 2026, 4332, 8423, 14609, 22851, 29589, 34182, 33768, 28703, 18049, 4691]", + "total_badness": 270815.65433 }, { "angles_tet": [ @@ -1391,24 +1391,24 @@ ], "ne1d": 5988, "ne2d": 11102, - "ne3d": 29168, - "quality_histogram": "[3, 4, 7, 13, 24, 42, 119, 241, 722, 989, 1571, 2460, 3055, 3939, 4323, 4223, 3360, 2411, 1347, 315]", - "total_badness": 43309.92559 + "ne3d": 29144, + "quality_histogram": "[3, 4, 7, 13, 24, 39, 120, 238, 735, 977, 1562, 2454, 3050, 3952, 4320, 4203, 3345, 2437, 1347, 314]", + "total_badness": 43262.081817 }, { "angles_tet": [ - 2.1657, + 2.1686, 174.11 ], "angles_trig": [ - 2.2053, + 1.6035, 174.13 ], "ne1d": 9622, - "ne2d": 23964, - "ne3d": 80728, - "quality_histogram": "[1, 16, 3, 20, 18, 44, 94, 232, 517, 1099, 2434, 4593, 7471, 10296, 12656, 13142, 11844, 9162, 5660, 1426]", - "total_badness": 111694.25744 + "ne2d": 23960, + "ne3d": 80378, + "quality_histogram": "[1, 16, 3, 18, 17, 40, 88, 211, 453, 1061, 2481, 4518, 7443, 10609, 12618, 12976, 11798, 9193, 5456, 1378]", + "total_badness": 111174.13725 } ], "hinge.stl": [ @@ -1438,9 +1438,9 @@ ], "ne1d": 298, "ne2d": 610, - "ne3d": 832, - "quality_histogram": "[0, 0, 1, 11, 8, 3, 21, 17, 42, 47, 76, 91, 104, 97, 92, 86, 57, 48, 27, 4]", - "total_badness": 1432.6971804 + "ne3d": 817, + "quality_histogram": "[0, 0, 1, 11, 8, 5, 21, 16, 43, 41, 72, 88, 107, 100, 84, 87, 52, 50, 28, 3]", + "total_badness": 1409.8967045 }, { "angles_tet": [ @@ -1498,9 +1498,9 @@ ], "ne1d": 1862, "ne2d": 19474, - "ne3d": 136621, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 14, 55, 291, 892, 2633, 6517, 13067, 21320, 29000, 31114, 23880, 7837]", - "total_badness": 166165.22295 + "ne3d": 136597, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 1, 12, 54, 288, 870, 2618, 6513, 13052, 21346, 28986, 31108, 23898, 7851]", + "total_badness": 166108.75934 } ], "lense.in2d": [ @@ -1765,7 +1765,7 @@ "ne2d": 1198, "ne3d": 5066, "quality_histogram": "[0, 0, 11, 118, 169, 57, 61, 111, 95, 184, 293, 368, 508, 651, 617, 577, 496, 429, 246, 75]", - "total_badness": 8799.2034124 + "total_badness": 8799.2034431 }, { "angles_tet": [ @@ -1795,7 +1795,7 @@ "ne2d": 830, "ne3d": 2488, "quality_histogram": "[0, 0, 3, 37, 71, 155, 161, 102, 158, 211, 284, 276, 249, 203, 195, 139, 108, 79, 42, 15]", - "total_badness": 5146.3098742 + "total_badness": 5146.3098744 }, { "angles_tet": [ @@ -1839,8 +1839,8 @@ "ne1d": 418, "ne2d": 5968, "ne3d": 101047, - "quality_histogram": "[0, 0, 0, 0, 0, 1, 5, 8, 52, 104, 356, 989, 2551, 5548, 10164, 16045, 20725, 22252, 16919, 5328]", - "total_badness": 124081.8709 + "quality_histogram": "[0, 0, 0, 0, 0, 1, 5, 8, 52, 104, 356, 989, 2551, 5548, 10164, 16045, 20725, 22251, 16920, 5328]", + "total_badness": 124081.88321 } ], "ortho.geo": [ @@ -1964,7 +1964,7 @@ "ne2d": 288, "ne3d": 528, "quality_histogram": "[0, 0, 0, 2, 4, 2, 4, 3, 16, 24, 36, 41, 54, 70, 68, 73, 59, 47, 24, 1]", - "total_badness": 813.79298259 + "total_badness": 813.79298254 }, { "angles_tet": [ @@ -2024,39 +2024,39 @@ ], "ne1d": 344, "ne2d": 1136, - "ne3d": 3267, - "quality_histogram": "[0, 0, 0, 0, 1, 4, 15, 26, 55, 93, 181, 259, 350, 454, 454, 445, 400, 295, 185, 50]", - "total_badness": 4760.8393552 + "ne3d": 3263, + "quality_histogram": "[0, 0, 0, 0, 1, 4, 15, 26, 53, 90, 178, 259, 351, 445, 457, 447, 406, 297, 185, 49]", + "total_badness": 4746.5378667 }, { "angles_tet": [ - 9.7531, - 164.55 + 9.7417, + 164.57 ], "angles_trig": [ - 12.309, - 141.65 + 12.303, + 141.6 ], "ne1d": 160, "ne2d": 286, - "ne3d": 585, - "quality_histogram": "[0, 0, 0, 2, 9, 14, 21, 29, 35, 70, 61, 78, 66, 39, 36, 37, 36, 33, 14, 5]", - "total_badness": 1085.7831583 + "ne3d": 568, + "quality_histogram": "[0, 0, 0, 2, 9, 12, 20, 25, 31, 69, 59, 78, 60, 40, 38, 40, 34, 33, 14, 4]", + "total_badness": 1044.7873254 }, { "angles_tet": [ - 10.104, - 163.38 + 13.063, + 161.0 ], "angles_trig": [ - 14.246, + 16.741, 141.37 ], "ne1d": 232, "ne2d": 598, - "ne3d": 1538, - "quality_histogram": "[0, 0, 0, 2, 14, 22, 43, 65, 85, 110, 147, 167, 147, 176, 174, 120, 115, 80, 58, 13]", - "total_badness": 2657.5718121 + "ne3d": 1523, + "quality_histogram": "[0, 0, 0, 1, 7, 20, 34, 48, 65, 111, 135, 155, 165, 189, 171, 134, 132, 89, 52, 15]", + "total_badness": 2538.6647915 }, { "angles_tet": [ @@ -2069,9 +2069,9 @@ ], "ne1d": 344, "ne2d": 1136, - "ne3d": 3229, - "quality_histogram": "[0, 0, 0, 0, 1, 4, 13, 23, 46, 81, 150, 228, 330, 443, 467, 439, 439, 323, 180, 62]", - "total_badness": 4634.0843144 + "ne3d": 3233, + "quality_histogram": "[0, 0, 0, 0, 1, 4, 12, 23, 48, 81, 149, 226, 335, 430, 473, 436, 439, 333, 186, 57]", + "total_badness": 4637.4815537 }, { "angles_tet": [ @@ -2090,7 +2090,7 @@ }, { "angles_tet": [ - 21.559, + 21.56, 145.28 ], "angles_trig": [ @@ -2099,9 +2099,9 @@ ], "ne1d": 820, "ne2d": 6226, - "ne3d": 68687, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 11, 49, 183, 506, 1537, 3645, 6895, 10992, 14335, 15196, 11647, 3691]", - "total_badness": 84001.076915 + "ne3d": 68692, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 11, 49, 185, 510, 1531, 3657, 6895, 10997, 14320, 15199, 11644, 3694]", + "total_badness": 84012.009025 } ], "plane.stl": [ @@ -2116,9 +2116,9 @@ ], "ne1d": 890, "ne2d": 2626, - "ne3d": 8294, - "quality_histogram": "[4, 17, 28, 31, 56, 53, 52, 65, 101, 174, 258, 406, 664, 825, 1173, 1279, 1268, 1067, 604, 169]", - "total_badness": 12467.41506 + "ne3d": 8292, + "quality_histogram": "[4, 17, 28, 31, 55, 55, 51, 64, 101, 174, 260, 405, 664, 824, 1173, 1279, 1268, 1066, 604, 169]", + "total_badness": 12461.942534 }, { "angles_tet": [ @@ -2131,9 +2131,9 @@ ], "ne1d": 570, "ne2d": 1202, - "ne3d": 1838, - "quality_histogram": "[2, 29, 38, 59, 64, 78, 101, 142, 154, 179, 190, 164, 155, 136, 119, 81, 72, 47, 24, 4]", - "total_badness": 4626.8081476 + "ne3d": 1831, + "quality_histogram": "[2, 29, 38, 60, 65, 77, 105, 141, 152, 176, 189, 161, 156, 135, 118, 80, 71, 48, 24, 4]", + "total_badness": 4620.6249923 }, { "angles_tet": [ @@ -2161,9 +2161,9 @@ ], "ne1d": 956, "ne2d": 2828, - "ne3d": 8553, - "quality_histogram": "[3, 9, 39, 50, 44, 51, 59, 58, 82, 134, 194, 341, 553, 831, 1187, 1355, 1471, 1204, 712, 176]", - "total_badness": 12579.823603 + "ne3d": 8549, + "quality_histogram": "[3, 9, 39, 50, 44, 51, 59, 59, 82, 133, 195, 336, 560, 830, 1174, 1357, 1462, 1224, 706, 176]", + "total_badness": 12575.367761 }, { "angles_tet": [ @@ -2176,9 +2176,9 @@ ], "ne1d": 1554, "ne2d": 6372, - "ne3d": 31632, - "quality_histogram": "[2, 8, 13, 8, 24, 53, 51, 72, 93, 187, 306, 631, 1287, 2372, 3831, 5340, 6171, 5877, 4151, 1155]", - "total_badness": 40867.972596 + "ne3d": 31639, + "quality_histogram": "[2, 8, 13, 8, 24, 53, 51, 73, 92, 189, 305, 634, 1290, 2378, 3824, 5340, 6177, 5876, 4146, 1156]", + "total_badness": 40882.230035 }, { "angles_tet": [ @@ -2192,8 +2192,8 @@ "ne1d": 2992, "ne2d": 23322, "ne3d": 281660, - "quality_histogram": "[4, 9, 10, 11, 11, 22, 32, 66, 101, 250, 741, 2131, 5596, 13622, 27762, 44430, 59896, 63856, 48363, 14747]", - "total_badness": 344296.42922 + "quality_histogram": "[4, 9, 10, 11, 11, 22, 32, 66, 101, 250, 741, 2131, 5596, 13622, 27762, 44429, 59897, 63856, 48363, 14747]", + "total_badness": 344296.42526 } ], "revolution.geo": [ @@ -2209,8 +2209,8 @@ "ne1d": 320, "ne2d": 3110, "ne3d": 8379, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 27, 91, 210, 452, 680, 983, 1089, 1149, 1165, 1083, 812, 518, 117]", - "total_badness": 11964.310541 + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 27, 91, 210, 453, 679, 983, 1088, 1150, 1165, 1083, 812, 518, 117]", + "total_badness": 11964.310211 }, { "angles_tet": [ @@ -2229,18 +2229,18 @@ }, { "angles_tet": [ - 15.455, + 15.408, 145.04 ], "angles_trig": [ - 14.648, + 14.362, 134.93 ], "ne1d": 240, "ne2d": 1830, - "ne3d": 3862, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 32, 67, 154, 280, 412, 508, 495, 499, 430, 398, 332, 213, 40]", - "total_badness": 5742.111994 + "ne3d": 3864, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 31, 69, 157, 283, 417, 507, 494, 513, 422, 403, 319, 206, 40]", + "total_badness": 5758.3866216 }, { "angles_tet": [ @@ -2255,7 +2255,7 @@ "ne2d": 3110, "ne3d": 8253, "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 13, 47, 138, 333, 624, 839, 1047, 1151, 1187, 1166, 945, 608, 153]", - "total_badness": 11468.849016 + "total_badness": 11468.848993 }, { "angles_tet": [ @@ -2430,63 +2430,63 @@ "shaft.geo": [ { "angles_tet": [ - 11.861, - 162.65 + 11.152, + 164.8 ], "angles_trig": [ - 11.536, - 151.09 + 13.065, + 153.81 ], "ne1d": 708, "ne2d": 1722, - "ne3d": 2888, - "quality_histogram": "[0, 0, 0, 5, 22, 31, 50, 68, 109, 164, 278, 418, 327, 290, 256, 301, 246, 188, 106, 29]", - "total_badness": 4780.7450312 + "ne3d": 2786, + "quality_histogram": "[0, 0, 1, 6, 23, 42, 45, 55, 94, 140, 280, 392, 314, 282, 250, 301, 240, 180, 105, 36]", + "total_badness": 4609.6986746 }, { "angles_tet": [ - 14.99, - 157.83 + 14.566, + 156.38 ], "angles_trig": [ 17.101, - 121.63 + 120.3 ], "ne1d": 410, "ne2d": 606, - "ne3d": 837, - "quality_histogram": "[0, 0, 0, 0, 0, 3, 0, 5, 21, 42, 43, 54, 83, 94, 118, 110, 89, 78, 51, 46]", - "total_badness": 1215.3787027 + "ne3d": 870, + "quality_histogram": "[0, 0, 0, 0, 0, 3, 2, 5, 22, 36, 42, 53, 91, 101, 127, 131, 94, 85, 47, 31]", + "total_badness": 1263.6238885 }, { "angles_tet": [ - 8.4343, - 167.31 + 9.5449, + 167.3 ], "angles_trig": [ - 10.596, - 155.64 + 10.216, + 148.27 ], "ne1d": 510, "ne2d": 1004, - "ne3d": 2038, - "quality_histogram": "[0, 0, 4, 28, 43, 77, 101, 140, 143, 120, 135, 161, 142, 194, 216, 184, 195, 85, 56, 14]", - "total_badness": 3926.3340848 + "ne3d": 2013, + "quality_histogram": "[0, 0, 2, 11, 38, 79, 90, 131, 106, 114, 113, 172, 155, 218, 217, 207, 190, 98, 58, 14]", + "total_badness": 3713.7502435 }, { "angles_tet": [ - 14.303, + 14.302, 162.65 ], "angles_trig": [ - 15.347, - 147.74 + 17.889, + 130.85 ], "ne1d": 708, "ne2d": 1722, - "ne3d": 2795, - "quality_histogram": "[0, 0, 0, 1, 2, 2, 18, 29, 64, 128, 269, 412, 331, 316, 289, 307, 277, 209, 109, 32]", - "total_badness": 4321.8306337 + "ne3d": 2748, + "quality_histogram": "[0, 0, 0, 0, 5, 3, 17, 26, 54, 118, 266, 416, 341, 298, 267, 329, 256, 205, 110, 37]", + "total_badness": 4242.1246898 }, { "angles_tet": [ @@ -2982,7 +2982,7 @@ "torus.geo": [ { "angles_tet": [ - 16.896, + 16.805, 152.81 ], "angles_trig": [ @@ -2991,24 +2991,24 @@ ], "ne1d": 0, "ne2d": 2534, - "ne3d": 5725, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 26, 89, 206, 394, 548, 658, 774, 820, 719, 629, 496, 275, 88]", - "total_badness": 8397.4026608 + "ne3d": 5726, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 3, 26, 89, 209, 392, 549, 656, 774, 819, 718, 633, 497, 273, 88]", + "total_badness": 8399.0875048 }, { "angles_tet": [ - 1.6289, - 174.98 + 1.8454, + 174.07 ], "angles_trig": [ - 4.715, - 167.36 + 3.7635, + 166.86 ], "ne1d": 0, "ne2d": 692, - "ne3d": 3327, - "quality_histogram": "[18, 376, 565, 458, 423, 303, 290, 219, 148, 131, 120, 79, 58, 39, 36, 20, 15, 21, 4, 4]", - "total_badness": 18184.120092 + "ne3d": 3289, + "quality_histogram": "[22, 357, 521, 490, 397, 337, 276, 212, 158, 125, 86, 85, 59, 35, 37, 25, 30, 23, 11, 3]", + "total_badness": 17806.714921 }, { "angles_tet": [ @@ -3036,9 +3036,9 @@ ], "ne1d": 0, "ne2d": 2534, - "ne3d": 5622, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 7, 30, 146, 290, 432, 650, 749, 830, 788, 702, 543, 347, 107]", - "total_badness": 7969.2642686 + "ne3d": 5613, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 1, 7, 32, 146, 287, 439, 640, 748, 826, 786, 707, 539, 349, 106]", + "total_badness": 7957.8333725 }, { "angles_tet": [ @@ -3051,9 +3051,9 @@ ], "ne1d": 0, "ne2d": 5894, - "ne3d": 25266, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 11, 45, 117, 415, 859, 1688, 2866, 4124, 4942, 5200, 3815, 1184]", - "total_badness": 31475.174764 + "ne3d": 25261, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 11, 44, 119, 414, 855, 1696, 2860, 4123, 4940, 5200, 3813, 1186]", + "total_badness": 31467.735079 }, { "angles_tet": [ @@ -3160,7 +3160,7 @@ "ne2d": 10042, "ne3d": 84837, "quality_histogram": "[0, 0, 0, 0, 0, 3, 55, 1435, 719, 373, 691, 1186, 2492, 5459, 8935, 13171, 16437, 16966, 12825, 4090]", - "total_badness": 108583.90758 + "total_badness": 108583.90765 } ], "twobricks.geo": [ @@ -3252,7 +3252,7 @@ "ne2d": 346, "ne3d": 595, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 23, 40, 55, 95, 101, 105, 99, 60, 8]", - "total_badness": 777.63273621 + "total_badness": 777.63275563 } ], "twocubes.geo": [ @@ -3344,7 +3344,7 @@ "ne2d": 346, "ne3d": 595, "quality_histogram": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 23, 40, 55, 95, 101, 105, 99, 60, 8]", - "total_badness": 777.63273621 + "total_badness": 777.63275563 } ], "twocyl.geo": [ @@ -3365,33 +3365,33 @@ }, { "angles_tet": [ - 18.424, + 18.404, 153.38 ], "angles_trig": [ - 27.664, + 26.007, 121.51 ], "ne1d": 68, "ne2d": 100, - "ne3d": 152, - "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 2, 5, 6, 12, 11, 10, 14, 22, 19, 18, 23, 4, 4]", - "total_badness": 226.47203657 + "ne3d": 150, + "quality_histogram": "[0, 0, 0, 0, 0, 0, 2, 2, 4, 6, 12, 12, 8, 13, 24, 18, 18, 23, 4, 4]", + "total_badness": 222.6797729 }, { "angles_tet": [ - 10.647, - 163.92 + 12.34, + 161.32 ], "angles_trig": [ - 11.415, - 146.97 + 12.084, + 152.05 ], "ne1d": 102, "ne2d": 238, - "ne3d": 548, - "quality_histogram": "[0, 0, 0, 5, 10, 19, 40, 65, 83, 49, 39, 31, 25, 38, 34, 37, 44, 20, 7, 2]", - "total_badness": 1137.6676071 + "ne3d": 497, + "quality_histogram": "[0, 0, 0, 2, 11, 31, 40, 56, 65, 43, 34, 21, 26, 25, 30, 31, 43, 28, 8, 3]", + "total_badness": 1042.5778658 }, { "angles_tet": [ From 96a914119970266135b7586ed4d6ac535b162894 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Thu, 31 Oct 2019 16:51:13 +0100 Subject: [PATCH 113/120] [testing] Increase tolerance for angles --- tests/pytest/test_tutorials.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/pytest/test_tutorials.py b/tests/pytest/test_tutorials.py index 6f7ae822..90bccc3f 100644 --- a/tests/pytest/test_tutorials.py +++ b/tests/pytest/test_tutorials.py @@ -41,8 +41,8 @@ def checkData(mesh, mp, ref): assert ref['ne3d'] == data['ne3d'] assert json.loads(ref['quality_histogram']) == pytest.approx(json.loads(data['quality_histogram']), abs=1, rel=0.4) assert ref['total_badness'] == pytest.approx(data['total_badness'], rel=1e-5) - assert ref['angles_trig'] == pytest.approx(data['angles_trig'], rel=1e-5) - assert ref['angles_tet'] == pytest.approx(data['angles_tet'], rel=1e-5) + assert ref['angles_trig'] == pytest.approx(data['angles_trig'], rel=1e-4) + assert ref['angles_tet'] == pytest.approx(data['angles_tet'], rel=1e-4) # get tutorials def getFiles(fileEnding): From 6c012675aa84fdbfe271441c78da2103da13ccb6 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Thu, 31 Oct 2019 17:08:29 +0100 Subject: [PATCH 114/120] project point without geominfo returns new geominfo --- libsrc/csg/csgeom.cpp | 3 ++- libsrc/csg/csgeom.hpp | 2 +- libsrc/meshing/basegeom.cpp | 5 ++++- libsrc/meshing/basegeom.hpp | 6 +++--- libsrc/meshing/meshing2.cpp | 2 +- libsrc/occ/occgeom.cpp | 9 ++++++--- libsrc/occ/occgeom.hpp | 2 +- libsrc/stlgeom/stlgeom.cpp | 2 +- libsrc/stlgeom/stlgeom.hpp | 2 +- 9 files changed, 20 insertions(+), 13 deletions(-) diff --git a/libsrc/csg/csgeom.cpp b/libsrc/csg/csgeom.cpp index f8145009..ad3912d4 100644 --- a/libsrc/csg/csgeom.cpp +++ b/libsrc/csg/csgeom.cpp @@ -72,11 +72,12 @@ namespace netgen Clean(); } - void CSGeometry :: ProjectPoint(int surfind, Point<3> & p) const + PointGeomInfo CSGeometry :: ProjectPoint(int surfind, Point<3> & p) const { Point<3> hp = p; GetSurface(surfind)->Project (hp); p = hp; + return PointGeomInfo(); } bool CSGeometry :: ProjectPointGI(int surfind, Point<3> & p, PointGeomInfo & gi) const diff --git a/libsrc/csg/csgeom.hpp b/libsrc/csg/csgeom.hpp index 07844c91..32473ed0 100644 --- a/libsrc/csg/csgeom.hpp +++ b/libsrc/csg/csgeom.hpp @@ -188,7 +188,7 @@ namespace netgen virtual void SaveToMeshFile (ostream & ost) const override; - void ProjectPoint(INDEX surfind, Point<3> & p) const override; + PointGeomInfo ProjectPoint(INDEX surfind, Point<3> & p) const override; bool ProjectPointGI (int surfind, Point<3> & p, PointGeomInfo & gi) const override; void ProjectPointEdge(INDEX surfind, INDEX surfind2, Point<3> & p) const override; Vec<3> GetNormal(int surfind, const Point<3> & p) const override; diff --git a/libsrc/meshing/basegeom.cpp b/libsrc/meshing/basegeom.cpp index d9542149..ec3930fa 100644 --- a/libsrc/meshing/basegeom.cpp +++ b/libsrc/meshing/basegeom.cpp @@ -95,6 +95,9 @@ namespace netgen mesh.SetLocalH(bounding_box.PMin(), bounding_box.PMax(), mparam.grading); + // only set meshsize for edges longer than this + double mincurvelength = 1e-3 * bounding_box.Diam(); + if(mparam.uselocalh) { double eps = 1e-12 * bounding_box.Diam(); @@ -108,7 +111,7 @@ namespace netgen const auto & edge = edges[i]; auto length = edge->GetLength(); // skip very short edges - if(length < eps) + if(length < mincurvelength) continue; static constexpr int npts = 20; // restrict mesh size based on edge length diff --git a/libsrc/meshing/basegeom.hpp b/libsrc/meshing/basegeom.hpp index b9e7bb16..53808739 100644 --- a/libsrc/meshing/basegeom.hpp +++ b/libsrc/meshing/basegeom.hpp @@ -50,7 +50,7 @@ namespace netgen virtual size_t GetNBoundaries() const = 0; virtual Array> GetBoundary(size_t index) const = 0; virtual string GetName() const { return "default"; } - virtual void Project(Point<3>& p) const = 0; + virtual PointGeomInfo Project(Point<3>& p) const = 0; // Project point using geo info. Fast if point is close to // parametrization in geo info. virtual bool ProjectPointGI(Point<3>& p, PointGeomInfo& gi) const =0; @@ -124,9 +124,9 @@ namespace netgen virtual void FinalizeMesh(Mesh& mesh) const {} - virtual void ProjectPoint (int surfind, Point<3> & p) const + virtual PointGeomInfo ProjectPoint (int surfind, Point<3> & p) const { - faces[surfind-1]->Project(p); + return faces[surfind-1]->Project(p); } virtual void ProjectPointEdge (int surfind, int surfind2, Point<3> & p) const diff --git a/libsrc/meshing/meshing2.cpp b/libsrc/meshing/meshing2.cpp index 070a31ef..e275bb22 100644 --- a/libsrc/meshing/meshing2.cpp +++ b/libsrc/meshing/meshing2.cpp @@ -176,7 +176,7 @@ namespace netgen { locpoint = p1 + (h*plainpoint(0)) * ex + (h* plainpoint(1)) * ey; if (!geo.ProjectPointGI(gi.trignum, locpoint, gi)) - geo.ProjectPoint(gi.trignum, locpoint); + gi = geo.ProjectPoint(gi.trignum, locpoint); return 0; } diff --git a/libsrc/occ/occgeom.cpp b/libsrc/occ/occgeom.cpp index 96434678..6b54ed66 100644 --- a/libsrc/occ/occgeom.cpp +++ b/libsrc/occ/occgeom.cpp @@ -1034,7 +1034,7 @@ void STEP_GetEntityName(const TopoDS_Shape & theShape, STEPCAFControl_Reader * a SetCenter(); } - void OCCGeometry :: ProjectPoint(int surfi, Point<3> & p) const + PointGeomInfo OCCGeometry :: ProjectPoint(int surfi, Point<3> & p) const { static int cnt = 0; if (++cnt % 1000 == 0) cout << "Project cnt = " << cnt << endl; @@ -1048,9 +1048,12 @@ void STEP_GetEntityName(const TopoDS_Shape & theShape, STEPCAFControl_Reader * a suval.Coord( u, v); pnt = thesurf->Value( u, v ); - + PointGeomInfo gi; + gi.trignum = surfi; + gi.u = u; + gi.v = v; p = Point<3> (pnt.X(), pnt.Y(), pnt.Z()); - + return gi; } bool OCCGeometry :: ProjectPointGI(int surfind, Point<3>& p, PointGeomInfo& gi) const diff --git a/libsrc/occ/occgeom.hpp b/libsrc/occ/occgeom.hpp index 09561b29..6dd2aab7 100644 --- a/libsrc/occ/occgeom.hpp +++ b/libsrc/occ/occgeom.hpp @@ -280,7 +280,7 @@ namespace netgen void DoArchive(Archive& ar) override; - void ProjectPoint(int surfind, Point<3> & p) const override; + PointGeomInfo ProjectPoint(int surfind, Point<3> & p) const override; void ProjectPointEdge (int surfind, int surfind2, Point<3> & p) const override; bool ProjectPointGI (int surfind, Point<3> & p, PointGeomInfo & gi) const override; Vec<3> GetNormal(int surfind, const Point<3> & p) const override; diff --git a/libsrc/stlgeom/stlgeom.cpp b/libsrc/stlgeom/stlgeom.cpp index 7d254162..8adcaaaa 100644 --- a/libsrc/stlgeom/stlgeom.cpp +++ b/libsrc/stlgeom/stlgeom.cpp @@ -144,7 +144,7 @@ bool STLGeometry :: ProjectPointGI (int surfind, Point<3> & p, PointGeomInfo & g return true; } -void STLGeometry :: ProjectPoint (INDEX surfind, Point<3> & p) const +PointGeomInfo STLGeometry :: ProjectPoint (INDEX surfind, Point<3> & p) const { throw Exception("ProjectPoint without PointGeomInfo not implemented"); } diff --git a/libsrc/stlgeom/stlgeom.hpp b/libsrc/stlgeom/stlgeom.hpp index e29e4824..f542d11b 100644 --- a/libsrc/stlgeom/stlgeom.hpp +++ b/libsrc/stlgeom/stlgeom.hpp @@ -193,7 +193,7 @@ namespace netgen virtual void Save (string filename) const override; bool CalcPointGeomInfo(int surfind, PointGeomInfo& gi, const Point<3> & p3) const override; - void ProjectPoint(INDEX surfind, Point<3> & p) const override; + PointGeomInfo ProjectPoint(INDEX surfind, Point<3> & p) const override; bool ProjectPointGI (int surfind, Point<3> & p, PointGeomInfo & gi) const override; Vec<3> GetNormal(int surfind, const Point<3> & p) const override; Vec<3> GetNormal(int surfind, const Point<3> & p, const PointGeomInfo & gi) const override; From 262c656bcb5403cd5f8058902c5346e64909cfb9 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Thu, 31 Oct 2019 18:39:45 +0100 Subject: [PATCH 115/120] Fix overflow in backtrace --- libsrc/core/exception.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/libsrc/core/exception.cpp b/libsrc/core/exception.cpp index 93e0e7e9..49594bd1 100644 --- a/libsrc/core/exception.cpp +++ b/libsrc/core/exception.cpp @@ -14,6 +14,7 @@ #include #include #include +#include namespace ngcore { @@ -104,11 +105,11 @@ namespace ngcore if(!funcname.empty()) { - std::array buffer; + std::vector buffer(10240); int status; size_t size = buffer.size(); - abi::__cxa_demangle(funcname.c_str(), buffer.data(), &size, &status); - out << "in " << yellow << buffer.data() << reset_shell << '\n'; + abi::__cxa_demangle(funcname.c_str(), &buffer[0], &size, &status); + out << "in " << yellow << &buffer[0] << reset_shell << '\n'; std::string nm_command = "nm " + libname + " | grep " + funcname + " | cut -f 1 -d ' '"; std::string output; @@ -145,12 +146,12 @@ namespace ngcore { std::cerr << "Collecting backtrace..." << std::endl; std::stringstream result; - void *bt[1024]; + void *bt[100]; int bt_size; char **bt_syms; int i; - bt_size = backtrace(bt, 1024); + bt_size = backtrace(bt, 100); bt_syms = backtrace_symbols(bt, bt_size); Dl_info info; for (i = 1; i < bt_size-1; i++) From 1b1c4700ad9ad231cdaae526101895e80257c185 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Mon, 4 Nov 2019 11:27:01 +0100 Subject: [PATCH 116/120] geo GetNormal and ProjectPointEdge with geoinfo pointer --- libsrc/csg/csgeom.cpp | 5 +++-- libsrc/csg/csgeom.hpp | 6 ++++-- libsrc/geom2d/geometry2d.cpp | 2 +- libsrc/geom2d/geometry2d.hpp | 2 +- libsrc/meshing/basegeom.hpp | 29 ++++++----------------------- libsrc/meshing/curvedelems.cpp | 6 +++--- libsrc/meshing/improve2.cpp | 6 +++--- libsrc/meshing/improve2gen.cpp | 2 +- libsrc/meshing/meshing2.cpp | 6 +++--- libsrc/meshing/smoothing2.cpp | 10 +++++----- libsrc/occ/occgeom.cpp | 31 +++++++++++++++---------------- libsrc/occ/occgeom.hpp | 6 +++--- libsrc/stlgeom/stlgeom.cpp | 11 ++++------- libsrc/stlgeom/stlgeom.hpp | 3 +-- 14 files changed, 53 insertions(+), 72 deletions(-) diff --git a/libsrc/csg/csgeom.cpp b/libsrc/csg/csgeom.cpp index ad3912d4..fa4c78f7 100644 --- a/libsrc/csg/csgeom.cpp +++ b/libsrc/csg/csgeom.cpp @@ -87,7 +87,7 @@ namespace netgen } void CSGeometry :: ProjectPointEdge(int surfind, INDEX surfind2, - Point<3> & p) const + Point<3> & p, EdgePointGeomInfo* /*unused*/) const { Point<3> hp = p; ProjectToEdge (GetSurface(surfind), @@ -96,7 +96,8 @@ namespace netgen } - Vec<3> CSGeometry :: GetNormal(int surfind, const Point<3> & p) const + Vec<3> CSGeometry :: GetNormal(int surfind, const Point<3> & p, + const PointGeomInfo* /*unused*/) const { Vec<3> hn; GetSurface(surfind)->CalcGradient(p, hn); diff --git a/libsrc/csg/csgeom.hpp b/libsrc/csg/csgeom.hpp index 32473ed0..c419c9a4 100644 --- a/libsrc/csg/csgeom.hpp +++ b/libsrc/csg/csgeom.hpp @@ -190,8 +190,10 @@ namespace netgen PointGeomInfo ProjectPoint(INDEX surfind, Point<3> & p) const override; bool ProjectPointGI (int surfind, Point<3> & p, PointGeomInfo & gi) const override; - void ProjectPointEdge(INDEX surfind, INDEX surfind2, Point<3> & p) const override; - Vec<3> GetNormal(int surfind, const Point<3> & p) const override; + void ProjectPointEdge(INDEX surfind, INDEX surfind2, Point<3> & p, + EdgePointGeomInfo* gi = nullptr) const override; + Vec<3> GetNormal(int surfind, const Point<3> & p, const PointGeomInfo* gi = nullptr) const override; + void PointBetween(const Point<3> & p1, const Point<3> & p2, double secpoint, int surfi, const PointGeomInfo & gi1, diff --git a/libsrc/geom2d/geometry2d.cpp b/libsrc/geom2d/geometry2d.cpp index 43282cff..11ea2df9 100644 --- a/libsrc/geom2d/geometry2d.cpp +++ b/libsrc/geom2d/geometry2d.cpp @@ -86,7 +86,7 @@ namespace netgen } Vec<3> SplineGeometry2d :: GetNormal(int surfi1, const Point<3> & p, - const PointGeomInfo & gi) const + const PointGeomInfo* gi) const { return Vec<3> (0,0,1); } diff --git a/libsrc/geom2d/geometry2d.hpp b/libsrc/geom2d/geometry2d.hpp index 7dfcbe9f..ff4c459c 100644 --- a/libsrc/geom2d/geometry2d.hpp +++ b/libsrc/geom2d/geometry2d.hpp @@ -182,7 +182,7 @@ namespace netgen Vec<3> GetTangent (const Point<3> & p, int surfi1, int surfi2, const EdgePointGeomInfo & ap1) const override; Vec<3> GetNormal(int surfi1, const Point<3> & p, - const PointGeomInfo & gi) const override; + const PointGeomInfo* gi) const override; const SplineSegExt & GetSpline (const int i) const { diff --git a/libsrc/meshing/basegeom.hpp b/libsrc/meshing/basegeom.hpp index 53808739..05dd1a90 100644 --- a/libsrc/meshing/basegeom.hpp +++ b/libsrc/meshing/basegeom.hpp @@ -32,7 +32,7 @@ namespace netgen virtual double CalcStep(double t, double sag) const = 0; virtual bool OrientedLikeGlobal() const = 0; virtual size_t GetHash() const = 0; - virtual void ProjectPoint(Point<3>& p, EdgePointGeomInfo& gi) const = 0; + virtual void ProjectPoint(Point<3>& p, EdgePointGeomInfo* gi) const = 0; virtual void PointBetween(const Point<3>& p1, const Point<3>& p2, double secpoint, @@ -65,14 +65,8 @@ namespace netgen virtual double GetCurvature(const PointGeomInfo& gi) const = 0; virtual void RestrictH(Mesh& mesh, const MeshingParameters& mparam) const = 0; - virtual Vec<3> GetNormal(const Point<3>& p) const - { - return {0.,0.,1.}; - } - virtual Vec<3> GetNormal(const Point<3>& p, const PointGeomInfo& gi) const - { - return GetNormal(p); - } + virtual Vec<3> GetNormal(const Point<3>& p, const PointGeomInfo* gi = nullptr) const = 0; + virtual void PointBetween(const Point<3>& p1, const Point<3>& p2, double secpoint, @@ -129,13 +123,9 @@ namespace netgen return faces[surfind-1]->Project(p); } - virtual void ProjectPointEdge (int surfind, int surfind2, Point<3> & p) const - { - throw Exception("In ProjectPointEdge of basegeometry"); - } - virtual void ProjectPointEdge (int surfind, int surfind2, Point<3> & p, EdgePointGeomInfo& gi) const + virtual void ProjectPointEdge (int surfind, int surfind2, Point<3> & p, EdgePointGeomInfo* gi = nullptr) const { - edges[gi.edgenr]->ProjectPoint(p, gi); + edges[gi->edgenr]->ProjectPoint(p, gi); } virtual bool CalcPointGeomInfo(int surfind, PointGeomInfo& gi, const Point<3> & p3) const @@ -147,15 +137,8 @@ namespace netgen return faces[surfind-1]->ProjectPointGI(p, gi); } - virtual Vec<3> GetNormal(int surfind, const Point<3> & p) const - { return faces[surfind-1]->GetNormal(p); } - virtual Vec<3> GetNormal(int surfind, const Point<3> & p, const PointGeomInfo & gi) const + virtual Vec<3> GetNormal(int surfind, const Point<3> & p, const PointGeomInfo* gi = nullptr) const { return faces[surfind-1]->GetNormal(p, gi); } - [[deprecated]] - void GetNormal(int surfind, const Point<3> & p, Vec<3> & n) const - { - n = GetNormal(surfind, p); - } virtual void PointBetween (const Point<3> & p1, const Point<3> & p2, double secpoint, diff --git a/libsrc/meshing/curvedelems.cpp b/libsrc/meshing/curvedelems.cpp index 43d8ae35..71fb7d83 100644 --- a/libsrc/meshing/curvedelems.cpp +++ b/libsrc/meshing/curvedelems.cpp @@ -839,8 +839,8 @@ namespace netgen { Point<3> pm = Center (p1, p2); - Vec<3> n1 = geo.GetNormal (surfnr[e], p1, gi0[e]); - Vec<3> n2 = geo.GetNormal (surfnr[e], p2, gi1[e]); + Vec<3> n1 = geo.GetNormal (surfnr[e], p1, &gi0[e]); + Vec<3> n2 = geo.GetNormal (surfnr[e], p2, &gi1[e]); // p3 = pm + alpha1 n1 + alpha2 n2 @@ -1084,7 +1084,7 @@ namespace netgen v05 /= 1 + (w-1) * 0.5; Point<3> p05 (v05), pp05(v05); geo.ProjectPointEdge(edge_surfnr1[edgenr], edge_surfnr2[edgenr], pp05, - edge_gi0[edgenr]); + &edge_gi0[edgenr]); double d = Dist (pp05, p05); if (d < dold) diff --git a/libsrc/meshing/improve2.cpp b/libsrc/meshing/improve2.cpp index 524ba239..fe40259f 100644 --- a/libsrc/meshing/improve2.cpp +++ b/libsrc/meshing/improve2.cpp @@ -85,11 +85,11 @@ namespace netgen nv1.Normalize(); nv2.Normalize(); - auto nvp3 = geo.GetNormal (surfnr, mesh.Point(pi3), gi3); + auto nvp3 = geo.GetNormal (surfnr, mesh.Point(pi3), &gi3); nvp3.Normalize(); - auto nvp4 = geo.GetNormal (surfnr, mesh.Point(pi4), gi4); + auto nvp4 = geo.GetNormal (surfnr, mesh.Point(pi4), &gi4); nvp4.Normalize(); @@ -648,7 +648,7 @@ namespace netgen { const int faceindex = hel.GetIndex(); const int surfnr = mesh.GetFaceDescriptor (faceindex).SurfNr(); - normals[pi] = geo.GetNormal (surfnr, mesh[pi], hel.GeomInfoPi(k+1)); + normals[pi] = geo.GetNormal (surfnr, mesh[pi], &hel.GeomInfoPi(k+1)); break; } } diff --git a/libsrc/meshing/improve2gen.cpp b/libsrc/meshing/improve2gen.cpp index 1d4ebbc9..ddbd397e 100644 --- a/libsrc/meshing/improve2gen.cpp +++ b/libsrc/meshing/improve2gen.cpp @@ -397,7 +397,7 @@ namespace netgen // calc metric badness double bad1 = 0, bad2 = 0; // SelectSurfaceOfPoint (mesh.Point(pmap.Get(1)), pgi.Get(1)); - auto n = geo.GetNormal(surfnr, mesh.Point(pmap.Get(1)), pgi.Elem(1)); + auto n = geo.GetNormal(surfnr, mesh.Point(pmap.Get(1)), &pgi.Elem(1)); for (int j = 0; j < rule.oldels.Size(); j++) bad1 += mesh[elmap[j]].CalcJacobianBadness (mesh.Points(), n); diff --git a/libsrc/meshing/meshing2.cpp b/libsrc/meshing/meshing2.cpp index e275bb22..bda90593 100644 --- a/libsrc/meshing/meshing2.cpp +++ b/libsrc/meshing/meshing2.cpp @@ -142,8 +142,8 @@ namespace netgen { p1 = ap1; p2 = ap2; - auto n1 = geo.GetNormal(gi1->trignum, p1, *gi1); - auto n2 = geo.GetNormal(gi2->trignum, p2, *gi2); + auto n1 = geo.GetNormal(gi1->trignum, p1, gi1); + auto n2 = geo.GetNormal(gi2->trignum, p2, gi2); ez = 0.5 * (n1+n2); ez.Normalize(); @@ -158,7 +158,7 @@ namespace netgen Point<2> & plainpoint, double h, int & zone) { auto& gi = geominfo.GetPGI(1); - auto n = geo.GetNormal(gi.trignum, locpoint, gi); + auto n = geo.GetNormal(gi.trignum, locpoint, &gi); auto p1p = locpoint - p1; plainpoint(0) = (p1p * ex) / h; plainpoint(1) = (p1p * ey) / h; diff --git a/libsrc/meshing/smoothing2.cpp b/libsrc/meshing/smoothing2.cpp index b4d5ab9a..11f21cb8 100644 --- a/libsrc/meshing/smoothing2.cpp +++ b/libsrc/meshing/smoothing2.cpp @@ -218,7 +218,7 @@ namespace netgen { double badness = 0; - auto n = geo.GetNormal(ld.surfi, ld.sp1, ld.gi1); + auto n = geo.GetNormal(ld.surfi, ld.sp1, &ld.gi1); Point<3> pp1 = ld.sp1 + x(0) * ld.t1 + x(1) * ld.t2; for (int j = 0; j < ld.locelements.Size(); j++) @@ -359,7 +359,7 @@ namespace netgen vgrad = 0; double badness = 0; - auto n = geo.GetNormal(ld.surfi, ld.sp1, ld.gi1); + auto n = geo.GetNormal(ld.surfi, ld.sp1, &ld.gi1); pp1 = ld.sp1 + x(0) * ld.t1 + x(1) * ld.t2; // meshthis -> ProjectPoint (surfi, pp1); @@ -414,7 +414,7 @@ namespace netgen vgrad = 0; double badness = 0; - auto n = geo.GetNormal(ld.surfi, ld.sp1, ld.gi1); + auto n = geo.GetNormal(ld.surfi, ld.sp1, &ld.gi1); pp1 = ld.sp1 + x(0) * ld.t1 + x(1) * ld.t2; for (int j = 0; j < ld.locelements.Size(); j++) @@ -577,7 +577,7 @@ namespace netgen vgrad = 0; badness = 0; - auto n = geo.GetNormal(ld.surfi, ld.sp1, ld.gi1); + // auto n = geo.GetNormal(ld.surfi, ld.sp1, &ld.gi1); pp1 = ld.sp1 + x(0) * ld.t1 + x(1) * ld.t2; @@ -933,7 +933,7 @@ namespace netgen } - ld.normal = geo.GetNormal(ld.surfi, ld.sp1, ld.gi1); + ld.normal = geo.GetNormal(ld.surfi, ld.sp1, &ld.gi1); ld.t1 = ld.normal.GetNormal (); ld.t2 = Cross (ld.normal, ld.t1); diff --git a/libsrc/occ/occgeom.cpp b/libsrc/occ/occgeom.cpp index 6b54ed66..6a441bf5 100644 --- a/libsrc/occ/occgeom.cpp +++ b/libsrc/occ/occgeom.cpp @@ -1072,7 +1072,7 @@ void STEP_GetEntityName(const TopoDS_Shape & theShape, STEPCAFControl_Reader * a } void OCCGeometry :: ProjectPointEdge(int surfind, INDEX surfind2, - Point<3> & p) const + Point<3> & p, EdgePointGeomInfo* gi) const { TopExp_Explorer exp0, exp1; bool done = false; @@ -1154,26 +1154,25 @@ void STEP_GetEntityName(const TopoDS_Shape & theShape, STEPCAFControl_Reader * a return true; } - Vec<3> OCCGeometry :: GetNormal(int surfind, const Point<3> & p, const PointGeomInfo & geominfo) const + Vec<3> OCCGeometry :: GetNormal(int surfind, const Point<3> & p, const PointGeomInfo* geominfo) const { - gp_Pnt pnt; - gp_Vec du, dv; + if(geominfo) + { + gp_Pnt pnt; + gp_Vec du, dv; - Handle(Geom_Surface) occface; - occface = BRep_Tool::Surface(TopoDS::Face(fmap(surfind))); + Handle(Geom_Surface) occface; + occface = BRep_Tool::Surface(TopoDS::Face(fmap(surfind))); - occface->D1(geominfo.u,geominfo.v,pnt,du,dv); + occface->D1(geominfo->u,geominfo->v,pnt,du,dv); - auto n = Cross (Vec<3>(du.X(), du.Y(), du.Z()), - Vec<3>(dv.X(), dv.Y(), dv.Z())); - n.Normalize(); + auto n = Cross (Vec<3>(du.X(), du.Y(), du.Z()), + Vec<3>(dv.X(), dv.Y(), dv.Z())); + n.Normalize(); - if (fmap(surfind).Orientation() == TopAbs_REVERSED) n *= -1; - return n; - } - - Vec<3> OCCGeometry :: GetNormal(int surfind, const Point<3> & p) const - { + if (fmap(surfind).Orientation() == TopAbs_REVERSED) n *= -1; + return n; + } Standard_Real u,v; gp_Pnt pnt(p(0), p(1), p(2)); diff --git a/libsrc/occ/occgeom.hpp b/libsrc/occ/occgeom.hpp index 6dd2aab7..94f3fd27 100644 --- a/libsrc/occ/occgeom.hpp +++ b/libsrc/occ/occgeom.hpp @@ -281,10 +281,10 @@ namespace netgen void DoArchive(Archive& ar) override; PointGeomInfo ProjectPoint(int surfind, Point<3> & p) const override; - void ProjectPointEdge (int surfind, int surfind2, Point<3> & p) const override; + void ProjectPointEdge (int surfind, int surfind2, Point<3> & p, + EdgePointGeomInfo* gi = nullptr) const override; bool ProjectPointGI (int surfind, Point<3> & p, PointGeomInfo & gi) const override; - Vec<3> GetNormal(int surfind, const Point<3> & p) const override; - Vec<3> GetNormal(int surfind, const Point<3> & p, const PointGeomInfo & gi) const override; + Vec<3> GetNormal(int surfind, const Point<3> & p, const PointGeomInfo* gi) const override; bool CalcPointGeomInfo(int surfind, PointGeomInfo& gi, const Point<3> & p3) const override; void PointBetweenEdge(const Point<3> & p1, const Point<3> & p2, double secpoint, diff --git a/libsrc/stlgeom/stlgeom.cpp b/libsrc/stlgeom/stlgeom.cpp index 8adcaaaa..e65c0090 100644 --- a/libsrc/stlgeom/stlgeom.cpp +++ b/libsrc/stlgeom/stlgeom.cpp @@ -100,14 +100,11 @@ int STLGeometry :: GenerateMesh (shared_ptr & mesh, MeshingParameters & mp return STLMeshingDummy (this, mesh, mparam, stlpar); } -Vec<3> STLGeometry :: GetNormal(INDEX surfind, const Point<3> & p) const +Vec<3> STLGeometry :: GetNormal(int surfind, const Point<3> & p, const PointGeomInfo* gi) const { - throw Exception("STLGeometry::GetNormal without PointGeomInfo called"); -} - -Vec<3> STLGeometry :: GetNormal(int surfind, const Point<3> & p, const PointGeomInfo & gi) const -{ - return GetChart(GetChartNr(gi.trignum)).GetNormal(); + if(!gi) + throw Exception("STLGeometry::GetNormal without PointGeomInfo called"); + return GetChart(GetChartNr(gi->trignum)).GetNormal(); } bool STLGeometry :: CalcPointGeomInfo(int /*surfind*/, PointGeomInfo& gi, const Point<3> & p3) const diff --git a/libsrc/stlgeom/stlgeom.hpp b/libsrc/stlgeom/stlgeom.hpp index f542d11b..85212d55 100644 --- a/libsrc/stlgeom/stlgeom.hpp +++ b/libsrc/stlgeom/stlgeom.hpp @@ -195,8 +195,7 @@ namespace netgen bool CalcPointGeomInfo(int surfind, PointGeomInfo& gi, const Point<3> & p3) const override; PointGeomInfo ProjectPoint(INDEX surfind, Point<3> & p) const override; bool ProjectPointGI (int surfind, Point<3> & p, PointGeomInfo & gi) const override; - Vec<3> GetNormal(int surfind, const Point<3> & p) const override; - Vec<3> GetNormal(int surfind, const Point<3> & p, const PointGeomInfo & gi) const override; + Vec<3> GetNormal(int surfind, const Point<3> & p, const PointGeomInfo* gi = nullptr) const override; void PointBetween(const Point<3> & p1, const Point<3> & p2, double secpoint, int surfi, const PointGeomInfo & gi1, From 84eed492ca2f7651948a4cf3458e444018ca238a Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 4 Nov 2019 17:22:59 +0100 Subject: [PATCH 117/120] [cmake] Export CHECK_RANGE settings --- cmake/NetgenConfig.cmake.in | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/NetgenConfig.cmake.in b/cmake/NetgenConfig.cmake.in index 4c5217b8..67c85756 100644 --- a/cmake/NetgenConfig.cmake.in +++ b/cmake/NetgenConfig.cmake.in @@ -14,6 +14,7 @@ get_filename_component(NETGEN_RESOURCE_DIR "${NETGEN_CMAKE_DIR}/@NETGEN_RESOURCE set(NETGEN_SOURCE_DIR "@PROJECT_SOURCE_DIR@") +set(NETGEN_CHECK_RANGE "@CHECK_RANGE@") set(NETGEN_INCLUDE_DIRS "${NETGEN_INCLUDE_DIR}/include;${NETGEN_INCLUDE_DIR}") set(NETGEN_CMAKE_THREAD_LIBS_INIT "@CMAKE_THREAD_LIBS_INIT@") set(NETGEN_FFMPEG_LIBRARIES "@FFMPEG_LIBRARIES@") From 073e215bb6bc97d8712990cba9cc6e9e1e4d8b2a Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Mon, 4 Nov 2019 19:34:46 +0100 Subject: [PATCH 118/120] add closeedge meshsize to base geometry (not used) closedgefac moved to meshingparameters for this --- libsrc/meshing/basegeom.cpp | 95 ++++++++++++++++++++++++++++++- libsrc/meshing/basegeom.hpp | 4 +- libsrc/meshing/meshtype.cpp | 4 +- libsrc/meshing/meshtype.hpp | 2 + libsrc/meshing/python_mesh.hpp | 2 + libsrc/occ/occgenmesh.cpp | 4 +- libsrc/occ/occgeom.cpp | 2 - libsrc/occ/occgeom.hpp | 6 +- libsrc/occ/occpkg.cpp | 6 +- libsrc/occ/python_occ.cpp | 11 ---- libsrc/stlgeom/meshstlsurface.cpp | 2 +- libsrc/stlgeom/python_stl.cpp | 11 ---- libsrc/stlgeom/stlgeom.hpp | 2 +- libsrc/stlgeom/stlgeommesh.cpp | 6 +- libsrc/stlgeom/stlpkg.cpp | 7 +-- libsrc/stlgeom/stltool.cpp | 8 +-- libsrc/stlgeom/stltool.hpp | 4 +- ng/ngpkg.cpp | 4 ++ nglib/nglib.cpp | 4 +- 19 files changed, 127 insertions(+), 57 deletions(-) diff --git a/libsrc/meshing/basegeom.cpp b/libsrc/meshing/basegeom.cpp index ec3930fa..77e5ebbf 100644 --- a/libsrc/meshing/basegeom.cpp +++ b/libsrc/meshing/basegeom.cpp @@ -85,6 +85,23 @@ namespace netgen } } + struct Line + { + Point<3> p0, p1; + inline double Length() const { return (p1-p0).Length(); } + inline double Dist(const Line& other) const + { + Vec<3> n = p1-p0; + Vec<3> q = other.p1-other.p0; + double nq = n*q; + Point<3> p = p0 + 0.5*n; + double lambda = (p-other.p0)*n / (nq + 1e-10); + if (lambda >= 0 && lambda <= 1) + return (p-other.p0-lambda*q).Length(); + return 1e99; + } + }; + void NetgenGeometry :: Analyse(Mesh& mesh, const MeshingParameters& mparam) const { @@ -100,7 +117,7 @@ namespace netgen if(mparam.uselocalh) { - double eps = 1e-12 * bounding_box.Diam(); + double eps = 1e-10 * bounding_box.Diam(); const char* savetask = multithread.task; multithread.task = "Analyse Edges"; @@ -142,8 +159,84 @@ namespace netgen const auto& face = faces[i]; face->RestrictH(mesh, mparam); } + + if(mparam.closeedgefac.has_value()) + { + multithread.task = "Analyse close edges"; + constexpr int sections = 100; + Array lines; + lines.SetAllocSize(sections*edges.Size()); + BoxTree<3> searchtree(bounding_box.PMin(), + bounding_box.PMax()); + for(const auto& edge : edges) + { + if(edge->GetLength() < eps) + continue; + double t = 0.; + auto p_old = edge->GetPoint(t); + auto t_old = edge->GetTangent(t); + t_old.Normalize(); + for(auto i : IntRange(1, sections+1)) + { + t = double(i)/sections; + auto p_new = edge->GetPoint(t); + auto t_new = edge->GetTangent(t); + t_new.Normalize(); + auto cosalpha = fabs(t_old * t_new); + if((i == sections) || (cosalpha < cos(10./180 * M_PI))) + { + auto index = lines.Append({p_old, p_new}); + searchtree.Insert(p_old, p_new, index); + p_old = p_new; + t_old = t_new; + } + } + } + Array linenums; + for(auto i : Range(lines)) + { + const auto& line = lines[i]; + if(line.Length() < eps) continue; + multithread.percent = 100.*i/lines.Size(); + Box<3> box; + box.Set(line.p0); + box.Add(line.p1); + // box.Increase(max2(mesh.GetH(line.p0), mesh.GetH(line.p1))); + box.Increase(line.Length()); + double mindist = 1e99; + linenums.SetSize0(); + searchtree.GetIntersecting(box.PMin(), box.PMax(), + linenums); + for(auto num : linenums) + { + if(i == num) continue; + const auto & other = lines[num]; + if((line.p0 - other.p0).Length2() < eps || + (line.p0 - other.p1).Length2() < eps || + (line.p1 - other.p0).Length2() < eps || + (line.p1 - other.p1).Length2() < eps) + continue; + mindist = min2(mindist, line.Dist(other)); + } + if(mindist == 1e99) continue; + mindist /= mparam.closeedgefac.value() + 1e-10; + if(mindist < 1e-3 * bounding_box.Diam()) + { + (*testout) << "extremely small local h: " << mindist + << " --> setting to " << 1e-3 * bounding_box.Diam() << endl; + (*testout) << "somewhere near " << line.p0 << " - " << line.p1 << endl +; + mindist = 1e-3 * bounding_box.Diam(); + } + mesh.RestrictLocalHLine(line.p0, line.p1, mindist); + } + } multithread.task = savetask; } + + for(const auto& mspnt : mparam.meshsize_points) + mesh.RestrictLocalH(mspnt.pnt, mspnt.h); + mesh.LoadLocalMeshSize(mparam.meshsizefilename); } diff --git a/libsrc/meshing/basegeom.hpp b/libsrc/meshing/basegeom.hpp index 05dd1a90..57e62353 100644 --- a/libsrc/meshing/basegeom.hpp +++ b/libsrc/meshing/basegeom.hpp @@ -40,7 +40,7 @@ namespace netgen const EdgePointGeomInfo& gi2, Point<3>& newp, EdgePointGeomInfo& newgi) const = 0; - virtual Vec<3> GetTangent(const Point<3>& p) const = 0; + virtual Vec<3> GetTangent(double t) const = 0; }; class GeometryFace @@ -177,7 +177,7 @@ namespace netgen int surfi2, const EdgePointGeomInfo & egi) const { - return edges[egi.edgenr]->GetTangent(p); + throw Exception("Base geometry get tangent called"); } virtual size_t GetEdgeIndex(const GeometryEdge& edge) const diff --git a/libsrc/meshing/meshtype.cpp b/libsrc/meshing/meshtype.cpp index db9d2e1a..bd5563d5 100644 --- a/libsrc/meshing/meshtype.cpp +++ b/libsrc/meshing/meshtype.cpp @@ -2801,7 +2801,9 @@ namespace netgen << " elementorder = " << elementorder << endl << " quad = " << quad << endl << " inverttets = " << inverttets << endl - << " inverttrigs = " << inverttrigs << endl; + << " inverttrigs = " << inverttrigs << endl + << "closeedge enabled = " << closeedgefac.has_value() << endl + << "closeedgefac = " << (closeedgefac.has_value() ? closeedgefac.value() : 0.) << endl; } /* diff --git a/libsrc/meshing/meshtype.hpp b/libsrc/meshing/meshtype.hpp index f28a5cd1..f22a6529 100644 --- a/libsrc/meshing/meshtype.hpp +++ b/libsrc/meshing/meshtype.hpp @@ -1259,6 +1259,8 @@ namespace netgen double minh = 0.0; /// file for meshsize string meshsizefilename = ""; + /// restrict h based on close edges + optional closeedgefac = {}; /// start surfacemeshing from everywhere in surface bool startinsurface = false; /// check overlapping surfaces (debug) diff --git a/libsrc/meshing/python_mesh.hpp b/libsrc/meshing/python_mesh.hpp index 96c930a5..6deab5d2 100644 --- a/libsrc/meshing/python_mesh.hpp +++ b/libsrc/meshing/python_mesh.hpp @@ -176,6 +176,8 @@ inline void CreateMPfromKwargs(MeshingParameters& mp, py::kwargs kwargs, bool th mp.parallel_meshing = py::cast(kwargs.attr("pop")("parallel_meshing")); if(kwargs.contains("nthreads")) mp.nthreads = py::cast(kwargs.attr("pop")("nthreads")); + if(kwargs.contains("closeedgefac")) + mp.closeedgefac = py::cast>(kwargs.attr("pop")("closeedgefac")); if(kwargs.size()) { if(throw_if_not_all_parsed) diff --git a/libsrc/occ/occgenmesh.cpp b/libsrc/occ/occgenmesh.cpp index c6732a9d..7ab12806 100644 --- a/libsrc/occ/occgenmesh.cpp +++ b/libsrc/occ/occgenmesh.cpp @@ -1174,7 +1174,7 @@ namespace netgen // setting close edges - if (occparam.resthcloseedgeenable) + if (mparam.closeedgefac.has_value()) { multithread.task = "Setting local mesh size (close edges)"; @@ -1259,7 +1259,7 @@ namespace netgen mindist = min (mindist, line.Dist(lines[num])); } - mindist /= (occparam.resthcloseedgefac + VSMALL); + mindist /= (mparam.closeedgefac.value() + VSMALL); if (mindist < 1e-3 * bb.Diam()) { diff --git a/libsrc/occ/occgeom.cpp b/libsrc/occ/occgeom.cpp index 6a441bf5..1bb09e94 100644 --- a/libsrc/occ/occgeom.cpp +++ b/libsrc/occ/occgeom.cpp @@ -1897,8 +1897,6 @@ void STEP_GetEntityName(const TopoDS_Shape & theShape, STEPCAFControl_Reader * a void OCCParameters :: Print(ostream & ost) const { ost << "OCC Parameters:" << endl - << "close edges: " << resthcloseedgeenable - << ", fac = " << resthcloseedgefac << endl << "minimum edge length: " << resthminedgelenenable << ", min len = " << resthminedgelen << endl; } diff --git a/libsrc/occ/occgeom.hpp b/libsrc/occ/occgeom.hpp index 94f3fd27..69d906ec 100644 --- a/libsrc/occ/occgeom.hpp +++ b/libsrc/occ/occgeom.hpp @@ -187,11 +187,11 @@ namespace netgen { public: - /// Factor for meshing close edges - double resthcloseedgefac = 2.; + /// Factor for meshing close edges, moved to meshingparameters + // double resthcloseedgefac = 2.; /// Enable / Disable detection of close edges - int resthcloseedgeenable = true; + // int resthcloseedgeenable = true; /// Minimum edge length to be used for dividing edges to mesh points double resthminedgelen = 0.001; diff --git a/libsrc/occ/occpkg.cpp b/libsrc/occ/occpkg.cpp index 7ebc13d3..a4f019a7 100644 --- a/libsrc/occ/occpkg.cpp +++ b/libsrc/occ/occpkg.cpp @@ -45,11 +45,7 @@ namespace netgen virtual void SetParameters (Tcl_Interp * interp) { - occparam.resthcloseedgefac = - atof (Tcl_GetVar (interp, "::stloptions.resthcloseedgefac", 0)); - occparam.resthcloseedgeenable = - atoi (Tcl_GetVar (interp, "::stloptions.resthcloseedgeenable", 0)); - occparam.resthminedgelen = + occparam.resthminedgelen = atof (Tcl_GetVar (interp, "::stloptions.resthminedgelen", 0)); occparam.resthminedgelenenable = atoi (Tcl_GetVar (interp, "::stloptions.resthminedgelenenable", 0)); diff --git a/libsrc/occ/python_occ.cpp b/libsrc/occ/python_occ.cpp index 43fbf6b1..07887466 100644 --- a/libsrc/occ/python_occ.cpp +++ b/libsrc/occ/python_occ.cpp @@ -31,17 +31,6 @@ minedgelen: Optional[float] = 0.001 void CreateOCCParametersFromKwargs(OCCParameters& occparam, py::dict kwargs) { - if(kwargs.contains("closeedgefac")) - { - auto val = kwargs.attr("pop")("closeedgefac"); - if(val.is_none()) - occparam.resthcloseedgeenable = false; - else - { - occparam.resthcloseedgefac = py::cast(val); - occparam.resthcloseedgeenable = true; - } - } if(kwargs.contains("minedgelen")) { auto val = kwargs.attr("pop")("minedgelen"); diff --git a/libsrc/stlgeom/meshstlsurface.cpp b/libsrc/stlgeom/meshstlsurface.cpp index 039f5538..f39b106d 100644 --- a/libsrc/stlgeom/meshstlsurface.cpp +++ b/libsrc/stlgeom/meshstlsurface.cpp @@ -22,7 +22,7 @@ static void STLFindEdges (STLGeometry & geom, Mesh & mesh, // mark edge points: //int ngp = geom.GetNP(); - geom.RestrictLocalH(mesh, h, stlparam); + geom.RestrictLocalH(mesh, h, stlparam, mparam); PushStatusF("Mesh Lines"); diff --git a/libsrc/stlgeom/python_stl.cpp b/libsrc/stlgeom/python_stl.cpp index 83e7b36b..104504bf 100644 --- a/libsrc/stlgeom/python_stl.cpp +++ b/libsrc/stlgeom/python_stl.cpp @@ -87,17 +87,6 @@ void CreateSTLParametersFromKwargs(STLParameters& stlparam, py::dict kwargs) stlparam.resthchartdistfac = py::cast(val); } } - if(kwargs.contains("closeedgefac")) - { - auto val = kwargs.attr("pop")("closeedgefac"); - if(val.is_none()) - stlparam.resthcloseedgeenable = false; - else - { - stlparam.resthcloseedgeenable = true; - stlparam.resthcloseedgefac = py::cast(val); - } - } if(kwargs.contains("edgeanglefac")) { auto val = kwargs.attr("pop")("edgeanglefac"); diff --git a/libsrc/stlgeom/stlgeom.hpp b/libsrc/stlgeom/stlgeom.hpp index 85212d55..9b57f634 100644 --- a/libsrc/stlgeom/stlgeom.hpp +++ b/libsrc/stlgeom/stlgeom.hpp @@ -465,7 +465,7 @@ namespace netgen int LineEndPointsSet() const {return lineendpoints.Size() == GetNP();} void ClearLineEndPoints(); - DLL_HEADER void RestrictLocalH(class Mesh & mesh, double gh, const STLParameters& stlparam); + DLL_HEADER void RestrictLocalH(class Mesh & mesh, double gh, const STLParameters& stlparam, const MeshingParameters& mparam); void RestrictLocalHCurv(class Mesh & mesh, double gh, const STLParameters& stlparam); void RestrictHChartDistOneChart(ChartId chartnum, NgArray& acttrigs, class Mesh & mesh, double gh, double fact, double minh, const STLParameters& stlparam); diff --git a/libsrc/stlgeom/stlgeommesh.cpp b/libsrc/stlgeom/stlgeommesh.cpp index a5d32c9e..60d9a482 100644 --- a/libsrc/stlgeom/stlgeommesh.cpp +++ b/libsrc/stlgeom/stlgeommesh.cpp @@ -814,7 +814,7 @@ void STLGeometry :: RestrictLocalHCurv(class Mesh & mesh, double gh, const STLPa } //restrict local h due to near edges and due to outer chart distance -void STLGeometry :: RestrictLocalH(class Mesh & mesh, double gh, const STLParameters& stlparam) +void STLGeometry :: RestrictLocalH(class Mesh & mesh, double gh, const STLParameters& stlparam, const MeshingParameters& mparam) { //bei jedem Dreieck alle Nachbardreiecke vergleichen, und, fallskein Kante dazwischen, @@ -921,12 +921,12 @@ void STLGeometry :: RestrictLocalH(class Mesh & mesh, double gh, const STLParame PopStatus(); } - if (stlparam.resthcloseedgeenable) + if (mparam.closeedgefac.has_value()) { PushStatusF("Restrict H due to close edges"); //geht nicht für spiralen!!!!!!!!!!!!!!!!!! - double disttohfact = sqr(10.0 / stlparam.resthcloseedgefac); + double disttohfact = sqr(10.0 / mparam.closeedgefac.value()); int k,l; double h1, h2, dist; int rc = 0; diff --git a/libsrc/stlgeom/stlpkg.cpp b/libsrc/stlgeom/stlpkg.cpp index 3d234bbb..bf9c80e3 100644 --- a/libsrc/stlgeom/stlpkg.cpp +++ b/libsrc/stlgeom/stlpkg.cpp @@ -78,11 +78,6 @@ namespace netgen stlparam.resthlinelengthenable = atoi (Tcl_GetVar (interp, "::stloptions.resthlinelengthenable", 0)); - stlparam.resthcloseedgefac = - atof (Tcl_GetVar (interp, "::stloptions.resthcloseedgefac", 0)); - stlparam.resthcloseedgeenable = - atoi (Tcl_GetVar (interp, "::stloptions.resthcloseedgeenable", 0)); - stlparam.resthedgeanglefac = atof (Tcl_GetVar (interp, "::stloptions.resthedgeanglefac", 0)); stlparam.resthedgeangleenable = @@ -538,7 +533,7 @@ namespace netgen mesh -> SetLocalH (stlgeometry->GetBoundingBox().PMin() - Vec3d(10, 10, 10), stlgeometry->GetBoundingBox().PMax() + Vec3d(10, 10, 10), mparam.grading); - stlgeometry -> RestrictLocalH(*mesh, mparam.maxh, stlparam); + stlgeometry -> RestrictLocalH(*mesh, mparam.maxh, stlparam, mparam); if (stlparam.resthsurfmeshcurvenable) mesh -> CalcLocalHFromSurfaceCurvature (mparam.grading, diff --git a/libsrc/stlgeom/stltool.cpp b/libsrc/stlgeom/stltool.cpp index 9dd7011c..8839935a 100644 --- a/libsrc/stlgeom/stltool.cpp +++ b/libsrc/stlgeom/stltool.cpp @@ -1462,8 +1462,8 @@ STLParameters :: STLParameters() resthchartdistenable = 1; resthlinelengthfac = 0.5; resthlinelengthenable = 1; - resthcloseedgefac = 1; - resthcloseedgeenable = 1; + // resthcloseedgefac = 1; + // resthcloseedgeenable = 1; resthedgeanglefac = 1; resthedgeangleenable = 0; resthsurfmeshcurvfac = 1; @@ -1488,8 +1488,8 @@ void STLParameters :: Print (ostream & ost) const << ", fac = " << resthchartdistfac << endl << "line length: " << resthlinelengthenable << ", fac = " << resthlinelengthfac << endl - << "close edges: " << resthcloseedgeenable - << ", fac = " << resthcloseedgefac << endl + // << "close edges: " << resthcloseedgeenable + // << ", fac = " << resthcloseedgefac << endl << "edge angle: " << resthedgeangleenable << ", fac = " << resthedgeanglefac << endl; } diff --git a/libsrc/stlgeom/stltool.hpp b/libsrc/stlgeom/stltool.hpp index fd029dad..e3e57385 100644 --- a/libsrc/stlgeom/stltool.hpp +++ b/libsrc/stlgeom/stltool.hpp @@ -282,8 +282,8 @@ public: double resthchartdistfac = 1.2; bool resthchartdistenable = true; - double resthcloseedgefac = 1.; - bool resthcloseedgeenable = true; + // double resthcloseedgefac = 1.; + // bool resthcloseedgeenable = true; double resthedgeanglefac = 1.; bool resthedgeangleenable = false; diff --git a/ng/ngpkg.cpp b/ng/ngpkg.cpp index 931da7a7..aed8161d 100644 --- a/ng/ngpkg.cpp +++ b/ng/ngpkg.cpp @@ -1283,6 +1283,10 @@ namespace netgen mparam.parallel_meshing = atoi (Tcl_GetVar (interp, "::options.parallel_meshing", 0)); mparam.nthreads = atoi (Tcl_GetVar (interp, "::options.nthreads", 0)); + if(atoi(Tcl_GetVar (interp, "::stloptions.resthcloseedgeenable", 0))) + mparam.closeedgefac = atof(Tcl_GetVar (interp, "::stloptions.resthcloseedgefac", 0)); + else + mparam.closeedgefac = {}; //BaseMoveableMem::totalsize = 0; // 1048576 * atoi (Tcl_GetVar (interp, "::options.memory", 0)); diff --git a/nglib/nglib.cpp b/nglib/nglib.cpp index a988b106..0e93b392 100644 --- a/nglib/nglib.cpp +++ b/nglib/nglib.cpp @@ -856,8 +856,8 @@ namespace nglib mp->Transfer_Parameters(); - occparam.resthcloseedgeenable = mp->closeedgeenable; - occparam.resthcloseedgefac = mp->closeedgefact; + if(mp->closeedgeenable) + mparam.closeedgefac = mp->closeedgefact; // Delete the mesh structures in order to start with a clean // slate From b99e37999ffcf2e84126c2e7a239ed655be26568 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Tue, 5 Nov 2019 15:19:54 +0100 Subject: [PATCH 119/120] fixes for mac and windows --- libsrc/meshing/basegeom.cpp | 2 +- libsrc/meshing/meshtype.cpp | 2 +- libsrc/meshing/meshtype.hpp | 2 +- libsrc/occ/occgenmesh.cpp | 2 +- libsrc/stlgeom/stlgeommesh.cpp | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/libsrc/meshing/basegeom.cpp b/libsrc/meshing/basegeom.cpp index 77e5ebbf..a305d478 100644 --- a/libsrc/meshing/basegeom.cpp +++ b/libsrc/meshing/basegeom.cpp @@ -219,7 +219,7 @@ namespace netgen mindist = min2(mindist, line.Dist(other)); } if(mindist == 1e99) continue; - mindist /= mparam.closeedgefac.value() + 1e-10; + mindist /= *mparam.closeedgefac + 1e-10; if(mindist < 1e-3 * bounding_box.Diam()) { (*testout) << "extremely small local h: " << mindist diff --git a/libsrc/meshing/meshtype.cpp b/libsrc/meshing/meshtype.cpp index bd5563d5..9523fab7 100644 --- a/libsrc/meshing/meshtype.cpp +++ b/libsrc/meshing/meshtype.cpp @@ -2803,7 +2803,7 @@ namespace netgen << " inverttets = " << inverttets << endl << " inverttrigs = " << inverttrigs << endl << "closeedge enabled = " << closeedgefac.has_value() << endl - << "closeedgefac = " << (closeedgefac.has_value() ? closeedgefac.value() : 0.) << endl; + << "closeedgefac = " << closeedgefac.value_or(0.) << endl; } /* diff --git a/libsrc/meshing/meshtype.hpp b/libsrc/meshing/meshtype.hpp index f22a6529..1a42b33a 100644 --- a/libsrc/meshing/meshtype.hpp +++ b/libsrc/meshing/meshtype.hpp @@ -1260,7 +1260,7 @@ namespace netgen /// file for meshsize string meshsizefilename = ""; /// restrict h based on close edges - optional closeedgefac = {}; + optional closeedgefac = nullopt; /// start surfacemeshing from everywhere in surface bool startinsurface = false; /// check overlapping surfaces (debug) diff --git a/libsrc/occ/occgenmesh.cpp b/libsrc/occ/occgenmesh.cpp index 7ab12806..8b00b684 100644 --- a/libsrc/occ/occgenmesh.cpp +++ b/libsrc/occ/occgenmesh.cpp @@ -1259,7 +1259,7 @@ namespace netgen mindist = min (mindist, line.Dist(lines[num])); } - mindist /= (mparam.closeedgefac.value() + VSMALL); + mindist /= (*mparam.closeedgefac + VSMALL); if (mindist < 1e-3 * bb.Diam()) { diff --git a/libsrc/stlgeom/stlgeommesh.cpp b/libsrc/stlgeom/stlgeommesh.cpp index 60d9a482..bf715a66 100644 --- a/libsrc/stlgeom/stlgeommesh.cpp +++ b/libsrc/stlgeom/stlgeommesh.cpp @@ -926,7 +926,7 @@ void STLGeometry :: RestrictLocalH(class Mesh & mesh, double gh, const STLParame PushStatusF("Restrict H due to close edges"); //geht nicht für spiralen!!!!!!!!!!!!!!!!!! - double disttohfact = sqr(10.0 / mparam.closeedgefac.value()); + double disttohfact = sqr(10.0 / *mparam.closeedgefac); int k,l; double h1, h2, dist; int rc = 0; From a3ae9cc6f9f2511fac712b62d34053cd320e12ab Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Tue, 5 Nov 2019 16:19:49 +0100 Subject: [PATCH 120/120] include optional --- libsrc/include/mystdlib.h | 1 + 1 file changed, 1 insertion(+) diff --git a/libsrc/include/mystdlib.h b/libsrc/include/mystdlib.h index b55ba3da..f79e0ad2 100644 --- a/libsrc/include/mystdlib.h +++ b/libsrc/include/mystdlib.h @@ -19,6 +19,7 @@ #include #include #include +#include #include #include