From 865aca0ba0fce9f92f2832cfeb2dec71e6052f59 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Tue, 8 Oct 2019 13:46:27 +0200 Subject: [PATCH] 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": [