add new test case and a new class Exception_ostream

This commit is contained in:
Laurent Rineau 2025-11-26 14:05:51 +01:00
parent 4f30141af0
commit 8c6dd11492
5 changed files with 697 additions and 10 deletions

View File

@ -39,6 +39,7 @@
#include <CGAL/Dynamic_property_map.h> #include <CGAL/Dynamic_property_map.h>
#include <CGAL/enum.h> #include <CGAL/enum.h>
#include <CGAL/Exact_predicates_exact_constructions_kernel.h> #include <CGAL/Exact_predicates_exact_constructions_kernel.h>
#include <CGAL/Exception_ostream.h>
#include <CGAL/exceptions.h> #include <CGAL/exceptions.h>
#include <CGAL/intersection_3.h> #include <CGAL/intersection_3.h>
#include <CGAL/IO/Color.h> #include <CGAL/IO/Color.h>
@ -2628,13 +2629,14 @@ private:
std::set<std::pair<Vertex_handle, Vertex_handle>> non_intersecting_edges_set; std::set<std::pair<Vertex_handle, Vertex_handle>> non_intersecting_edges_set;
if constexpr (cdt_3_can_use_cxx20_format()) if(this->debug().regions()) {
expensive_debug_dump_tetrahedra_intersect_region(face_index, region_index, cdt_2, fh_region);
}
detect_edges_and_cells_intersecting_region(face_index, region_index, cdt_2, fh_region, region_border_vertices, detect_edges_and_cells_intersecting_region(face_index, region_index, cdt_2, fh_region, region_border_vertices,
first_intersecting_edge, intersecting_edges, intersecting_cells, first_intersecting_edge, intersecting_edges, intersecting_cells,
non_intersecting_edges_set); non_intersecting_edges_set);
if constexpr (cdt_3_can_use_cxx20_format()) if(this->debug().regions()) {
expensive_debug_dump_tetrahedra_intersect_region(face_index, region_index, cdt_2, fh_region,
std::as_const(intersecting_cells));
}
if(this->use_older_cavity_algorithm()) { if(this->use_older_cavity_algorithm()) {
process_older_cavity_algorithm(intersecting_edges, cr_intersecting_cells, vertices_of_upper_cavity, process_older_cavity_algorithm(intersecting_edges, cr_intersecting_cells, vertices_of_upper_cavity,
vertices_of_lower_cavity, facets_of_upper_cavity, facets_of_lower_cavity); vertices_of_lower_cavity, facets_of_upper_cavity, facets_of_lower_cavity);
@ -3457,6 +3459,9 @@ private:
int i; int i;
typename CDT_2::Locate_type lt; typename CDT_2::Locate_type lt;
const auto fh = cdt_2.locate(p, lt, i, hint); const auto fh = cdt_2.locate(p, lt, i, hint);
if(lt != CDT_2::VERTEX) {
exception_ostream() << cdt_3_format("vertex_of_cdt_2_functor: point {} lt = {}\n", IO::oformat(p), int(lt));
}
CGAL_assume(lt == CDT_2::VERTEX); CGAL_assume(lt == CDT_2::VERTEX);
hint = fh; hint = fh;
return fh->vertex(i); return fh->vertex(i);
@ -4491,11 +4496,13 @@ public:
return b; return b;
})) }))
{ {
std::cerr << cdt_3_format( exception_ostream()
"ERROR: The following tetrahedron (#{}) does not intersect the region:\n {}\n {}\n {}\n {}\n", << cdt_3_format(
ch->time_stamp(), "ERROR: The following tetrahedron (#{}) does not intersect the region:\n {}\n {}\n {}\n {}",
IO::oformat(ch->vertex(0), with_point_and_info), IO::oformat(ch->vertex(1), with_point_and_info), ch->time_stamp(), IO::oformat(ch->vertex(0), with_point_and_info),
IO::oformat(ch->vertex(2), with_point_and_info), IO::oformat(ch->vertex(3), with_point_and_info)); IO::oformat(ch->vertex(1), with_point_and_info), IO::oformat(ch->vertex(2), with_point_and_info),
IO::oformat(ch->vertex(3), with_point_and_info))
<< std::endl;
} }
} }
} }
@ -4504,7 +4511,8 @@ public:
void expensive_debug_dump_tetrahedra_intersect_region(CDT_3_signed_index face_index, void expensive_debug_dump_tetrahedra_intersect_region(CDT_3_signed_index face_index,
int region_index, int region_index,
const CDT_2& cdt_2, const CDT_2& cdt_2,
const Fh_region& fh_region) const Fh_region& fh_region,
const std::set<Cell_handle>& intersecting_cells_to_check)
{ {
using Mesh = Surface_mesh<Point_3>; using Mesh = Surface_mesh<Point_3>;
using Face_index = typename Mesh::Face_index; using Face_index = typename Mesh::Face_index;
@ -4516,12 +4524,18 @@ public:
auto [color_vpmap, _] = tets_intersect_region_mesh.template add_property_map<Face_index, int>("f:patch_id"); auto [color_vpmap, _] = tets_intersect_region_mesh.template add_property_map<Face_index, int>("f:patch_id");
for(auto ch : tr().finite_cell_handles()) { for(auto ch : tr().finite_cell_handles()) {
const bool is_in_set = intersecting_cells_to_check.find(ch) != intersecting_cells_to_check.end();
auto tetrahedron = tr().tetrahedron(ch); auto tetrahedron = tr().tetrahedron(ch);
if(!std::any_of(fh_region.begin(), fh_region.end(), [&](auto fh) { if(!std::any_of(fh_region.begin(), fh_region.end(), [&](auto fh) {
const auto triangle = cdt_2.triangle(fh); const auto triangle = cdt_2.triangle(fh);
return does_tetrahedron_intersect_triangle_interior(tetrahedron, triangle, tr().geom_traits()); return does_tetrahedron_intersect_triangle_interior(tetrahedron, triangle, tr().geom_traits());
})) }))
{ {
if(is_in_set) {
exception_ostream() << cdt_3_format(
"ERROR: tetrahedron #{} is in the intersecting_cells_to_check set but it does not intersect the region",
ch->time_stamp()) << std::endl;
}
continue; continue;
} }
bool intersects = false; bool intersects = false;
@ -4536,6 +4550,13 @@ public:
if(!intersects) { if(!intersects) {
std::cerr << "ERROR: tetrahedron #" << ch->time_stamp() << " has no edge intersecting the region\n"; std::cerr << "ERROR: tetrahedron #" << ch->time_stamp() << " has no edge intersecting the region\n";
} }
if(is_in_set != intersects) {
exception_ostream() << cdt_3_format(
"ERROR: tetrahedron #{} is {} in the intersecting_cells_to_check set but it {}intersects the region\n",
ch->time_stamp(),
is_in_set ? "" : "not",
intersects ? "" : "does not ")<< std::endl;
}
std::ofstream dump_tetrahedron( std::ofstream dump_tetrahedron(
cdt_3_format("dump_intersecting_{}_{}_tetrahedron_{}.off", face_index, region_index, ch->time_stamp())); cdt_3_format("dump_intersecting_{}_{}_tetrahedron_{}.off", face_index, region_index, ch->time_stamp()));
dump_tetrahedron.precision(17); dump_tetrahedron.precision(17);

View File

@ -130,6 +130,7 @@ if (CGAL_CDT_TEST_USE_THINGI)
CGAL_add_cdt3_from_local_off_test(40985-min3) CGAL_add_cdt3_from_local_off_test(40985-min3)
CGAL_add_cdt3_from_local_off_test(505036-min1) CGAL_add_cdt3_from_local_off_test(505036-min1)
CGAL_add_cdt3_from_local_off_test(57811-min) CGAL_add_cdt3_from_local_off_test(57811-min)
CGAL_add_cdt3_from_local_off_test(734961-min1)
CGAL_add_cdt3_from_local_off_test(error_mesh-p_not_equal_0-min2) CGAL_add_cdt3_from_local_off_test(error_mesh-p_not_equal_0-min2)
CGAL_add_cdt3_from_local_off_test(thingi-1036467-selection3) CGAL_add_cdt3_from_local_off_test(thingi-1036467-selection3)

View File

@ -0,0 +1,592 @@
OFF
284 304 0
-36.779350280761719 -23.099626541137695 18.701873779296875
-42.555007934570312 -19.583858489990234 23.548229217529297
-42.555007934570312 19.583858489990234 23.548229217529297
-42.931419372558594 -19.638389587402344 23.76545524597168
-42.931419372558594 19.638389587402344 23.76545524597168
-43.321365356445312 -19.682565689086914 23.840118408203125
-43.321365356445312 19.682565689086914 23.840118408203125
-43.58544921875 -19.706684112548828 23.819894790649414
-43.58544921875 19.706684112548828 23.819894790649414
-43.839744567871094 -19.725315093994141 23.744318008422852
-43.839744567871094 19.725315093994141 23.744318008422852
-44.072181701660156 -19.737567901611328 23.616901397705078
-44.072181701660156 19.737567901611328 23.616901397705078
-44.272682189941406 -19.742908477783203 23.443172454833984
-44.272682189941406 19.742908477783203 23.443172454833984
-37.944908142089844 24.230958938598633 18.133537292480469
-43.83099365234375 20.647974014282227 23.072547912597656
-37.682060241699219 24.161458969116211 18.396366119384766
-43.64532470703125 20.612237930297852 23.258724212646484
-43.446907043457031 20.530267715454102 23.414690017700195
-37.410129547119141 23.994781494140625 18.599523544311523
-43.244354248046875 20.405618667602539 23.533679962158203
-37.154006958007812 23.746179580688477 18.724409103393555
-43.047248840332031 20.244251251220703 23.610109329223633
-42.779983520507812 19.948694229125977 23.638385772705078
-36.779350280761719 23.099626541137695 18.701873779296875
-36.937129974365234 23.438405990600586 18.759601593017578
-36.297103881835938 23.479263305664062 18.371559143066406
-36.620006561279297 23.682655334472656 18.507028579711914
-34.850986480712891 24.316011428833008 18.000007629394531
-35.311180114746094 24.090059280395508 18.035511016845703
-35.752426147460938 23.839736938476562 18.138641357421875
-34.850986480712891 14.027206420898438 18.000007629394531
-34.850986480712891 -24.316011428833008 18.000007629394531
-34.850986480712891 -14.027389526367188 18.000007629394531
-36.507049560546875 -23.322196960449219 18.498517990112305
-35.142234802246094 -24.177053451538086 18.014181137084961
-35.62921142578125 -23.913114547729492 18.102706909179688
-36.087120056152344 -23.625667572021484 18.266511917114258
-37.018566131591797 31.353113174438477 0.57017076015472412
-31.488866806030273 33.198989868164062 0.79087954759597778
-32.837959289550781 32.925224304199219 0.73261791467666626
-34.1419677734375 32.558513641357422 0.67864316701889038
-36.223121643066406 31.745574951171875 0.59852051734924316
-35.401527404785156 32.101917266845703 0.62917023897171021
-45.971839904785156 21.947345733642578 0.36052587628364563
-46.772842407226562 20.331201553344727 0.35106539726257324
-47.610565185546875 18.363397598266602 0.34236899018287659
-48.338508605957031 16.342769622802734 0.33569896221160889
-48.963981628417969 14.277647018432617 0.33057129383087158
-49.492584228515625 12.175520896911621 0.32660263776779175
-50.32745361328125 7.5033769607543945 0.32097962498664856
-50.589942932128906 5.1325240135192871 0.31935694813728333
-50.752395629882812 2.7478582859039307 0.31838774681091309
-50.816146850585938 0.35597807168960571 0.31801745295524597
-35.191650390625 8.0233678817749023 16.466701507568359
-34.508567810058594 12.283490180969238 16.345012664794922
-34.134033203125 13.834349632263184 16.330089569091797
-33.933021545410156 14.552207946777344 16.331699371337891
-33.168899536132812 16.9285888671875 16.338346481323242
-32.733959197998047 18.091268539428711 16.342527389526367
-31.360790252685547 21.144365310668945 16.357900619506836
-30.864288330078125 22.072181701660156 16.364362716674805
-22.254966735839844 30.377103805541992 17.169248580932617
-21.388984680175781 30.713247299194336 17.389657974243164
-20.500434875488281 31.004573822021484 17.645532608032227
-19.419178009033203 31.294624328613281 17.998111724853516
-18.323799133300781 31.525302886962891 18.402353286743164
-17.169727325439453 31.708671569824219 18.880874633789062
-16.018253326416016 31.838802337646484 19.413871765136719
-14.776437759399414 31.928308486938477 20.053590774536133
-35.607261657714844 1.5982358455657959 16.604997634887695
-35.535102844238281 3.7208642959594727 16.577224731445312
-35.398593902587891 5.877772331237793 16.529092788696289
47.098747253417969 33.880203247070312 74.279922485351562
46.244697570800781 33.886741638183594 74.747245788574219
47.17083740234375 34 74.316596984863281
46.16943359375 34 74.865982055664062
47.305160522460938 34.414215087890625 74.604652404785156
46.3402099609375 34.414215087890625 75.134048461914062
47.480216979980469 34.732051849365234 74.980056762695312
46.562767028808594 34.732051849365234 75.483390808105469
47.684074401855469 34.931850433349609 75.417228698730469
46.821937561035156 34.931850433349609 75.890205383300781
47.667686462402344 35 76.001419067382812
45.102317810058594 34.931850433349609 87.062767028808594
44.520851135253906 34.931850433349609 86.269744873046875
44.732803344726562 34.732051849365234 87.372817993164062
44.114028930664062 34.732051849365234 86.528915405273438
44.415496826171875 34.414215087890625 87.639068603515625
43.764686584472656 34.414215087890625 86.751472473144531
44.172019958496094 34 87.843376159667969
43.496627807617188 34 86.922248840332031
44.018966674804688 33.51763916015625 87.9718017578125
43.328117370605469 33.51763916015625 87.02960205078125
43.306808471679688 33 87.122528076171875
57.755561828613281 33 76.4454345703125
57.061042785644531 33 75.70660400390625
57.703361511230469 33.51763916015625 76.489234924316406
56.895431518554688 33.51763916015625 75.645271301269531
57.550300598144531 34 76.617668151855469
56.760452270507812 34 75.792579650878906
57.30682373046875 34.414215087890625 76.821968078613281
54.393745422363281 32 84.106910705566406
54.393745422363281 27.329744338989258 84.106910705566406
57.507408142089844 27.819313049316406 76.6053466796875
57.684379577636719 28.143291473388672 76.479019165039062
57.755561828613281 28.525449752807617 76.4454345703125
-34.9549560546875 13.490707397460938 18.001808166503906
-35.116249084472656 -12.564321517944336 18.011754989624023
-35.405059814453125 -10.521085739135742 18.051620483398438
-35.622817993164062 -8.4573488235473633 18.100996017456055
-35.938854217529297 -2.9209175109863281 18.204202651977539
-35.844734191894531 -5.3018879890441895 18.169376373291016
-35.977474212646484 -0.53356623649597168 18.219537734985352
-35.966587066650391 1.618476390838623 18.215152740478516
-35.911941528320312 3.7682209014892578 18.193878173828125
-35.808559417724609 5.9533171653747559 18.156938552856445
-35.491828918457031 9.7716169357299805 18.069252014160156
-35.651840209960938 8.1280059814453125 18.108875274658203
-35.290451049804688 11.403753280639648 18.032369613647461
-55.864982604980469 -14.244834899902344 4.3644118309020996
-54.462471008300781 -17.755165100097656 3.0565366744995117
-54.818603515625 -17.94352912902832 3.3886284828186035
-56.626029968261719 -15.95280647277832 5.0740923881530762
-56.585136413574219 -16.471908569335938 5.0359563827514648
-56.173324584960938 -14.552809715270996 4.6519408226013184
-55.1982421875 -17.999443054199219 3.7426614761352539
-55.575538635253906 -17.919099807739258 4.094489574432373
-55.924766540527344 -17.707971572875977 4.4201545715332031
-56.222137451171875 -17.380449295043945 4.6974596977233887
-56.447372436523438 -16.958850860595703 4.907494068145752
-56.567268371582031 -15.436921119689941 5.0192937850952148
-56.412864685058594 -14.959407806396484 4.8753066062927246
-54.409530639648438 16.04719352722168 7.4509906768798828
-54.350776672363281 16.563079833984375 7.3961920738220215
-54.196365356445312 17.040592193603516 7.2522048950195312
-53.956832885742188 17.44719123840332 7.028839111328125
-53.648490905761719 17.755165100097656 6.7413101196289062
-53.292366027832031 17.94352912902832 6.4092183113098145
-55.324134826660156 12.75 8.3038663864135742
-50.570335388183594 12.75 3.8708794116973877
-55.324134826660156 19.25 8.3038663864135742
-50.570335388183594 19.25 3.8708794116973877
-41.743515014648438 12.75 22.867301940917969
-36.779350280761719 12.75 18.701873779296875
-36.757293701171875 12.75 18.683547973632812
-36.757293701171875 19.25 18.683547973632812
-36.779350280761719 19.25 18.701873779296875
-41.743515014648438 19.25 22.867301940917969
-36.757297515869141 11.250000953674316 18.683549880981445
-36.779350280761719 11.25 18.701873779296875
-36.757297515869141 4.7500004768371582 18.683549880981445
-36.779350280761719 4.7500004768371582 18.701873779296875
-36.757297515869141 3.2500004768371582 18.683549880981445
-36.779350280761719 3.2500004768371582 18.701873779296875
-36.757297515869141 -3.2499995231628418 18.683549880981445
-36.779350280761719 -3.2499995231628418 18.701873779296875
-36.757297515869141 -4.7499995231628418 18.683549880981445
-36.779350280761719 -4.7499995231628418 18.701873779296875
-36.757297515869141 -11.249999046325684 18.683549880981445
-36.779350280761719 -11.249999046325684 18.701873779296875
-36.757297515869141 -12.749999046325684 18.683549880981445
-36.779350280761719 -12.75 18.701873779296875
-36.779350280761719 -19.25 18.701873779296875
-36.757297515869141 -19.25 18.683549880981445
-41.743515014648438 -19.25 22.867301940917969
-41.743515014648438 11.250000953674316 22.867301940917969
-41.743515014648438 -12.749999046325684 22.867301940917969
-41.743515014648438 -11.249999046325684 22.867301940917969
-41.743515014648438 -4.7499995231628418 22.867301940917969
-41.743515014648438 -3.2499995231628418 22.867301940917969
-41.743515014648438 3.2500004768371582 22.867301940917969
-41.743515014648438 4.7500004768371582 22.867301940917969
-52.245979309082031 -17.755165100097656 5.4334349632263184
-52.602104187011719 -17.94352912902832 5.7655272483825684
-52.98175048828125 -17.999443054199219 6.1195602416992188
-53.359046936035156 -17.919099807739258 6.4713883399963379
-53.708274841308594 -17.707971572875977 6.797053337097168
-54.005638122558594 -17.380449295043945 7.0743570327758789
-54.230880737304688 -16.958850860595703 7.2843923568725586
-54.368644714355469 -16.471908569335938 7.4128546714782715
-54.409530639648438 -15.95280647277832 7.4509906768798828
-54.350776672363281 -15.436921119689941 7.3961920738220215
-54.196365356445312 -14.959407806396484 7.2522048950195312
-53.956832885742188 -14.552809715270996 7.028839111328125
-52.245979309082031 6.2448348999023438 5.4334349632263184
-52.602104187011719 6.0564718246459961 5.7655272483825684
-52.98175048828125 6.0005569458007812 6.1195602416992188
-53.359046936035156 6.0809006690979004 6.4713883399963379
-53.708274841308594 6.2920279502868652 6.797053337097168
-54.005638122558594 6.6195507049560547 7.0743570327758789
-54.230880737304688 7.0411491394042969 7.2843923568725586
-54.368644714355469 7.5280909538269043 7.4128546714782715
-54.409530639648438 8.0471935272216797 7.4509906768798828
-54.350776672363281 8.5630788803100586 7.3961920738220215
-54.196365356445312 9.0405921936035156 7.2522048950195312
-53.956832885742188 9.4471902847290039 7.028839111328125
-53.648490905761719 9.7551651000976562 6.7413101196289062
-53.292366027832031 9.9435281753540039 6.4092183113098145
-52.9127197265625 9.9994430541992188 6.0551853179931641
-52.535423278808594 9.9190988540649414 5.7033572196960449
-52.186195373535156 9.7079715728759766 5.3776912689208984
-51.888832092285156 9.3804492950439453 5.1003875732421875
-51.663589477539062 8.9588508605957031 4.8903532028198242
-51.525825500488281 8.4719085693359375 4.7618908882141113
-51.484931945800781 7.9528069496154785 4.7237534523010254
-51.543693542480469 7.4369211196899414 4.7785534858703613
-51.698104858398438 6.9594078063964844 4.9225406646728516
-51.937637329101562 6.5528097152709961 5.1459064483642578
-52.245979309082031 -9.7551651000976562 5.4334349632263184
-52.602104187011719 -9.9435281753540039 5.7655272483825684
-52.98175048828125 -9.9994430541992188 6.1195602416992188
-53.359046936035156 -9.9190988540649414 6.4713883399963379
-53.708274841308594 -9.7079715728759766 6.797053337097168
-54.005638122558594 -9.3804492950439453 7.0743570327758789
-54.230880737304688 -8.9588508605957031 7.2843923568725586
-54.368644714355469 -8.4719085693359375 7.4128546714782715
-54.409530639648438 -7.9528069496154785 7.4509906768798828
-54.350776672363281 -7.4369211196899414 7.3961920738220215
-54.196365356445312 -6.9594078063964844 7.2522048950195312
-53.956832885742188 -6.5528097152709961 7.028839111328125
-53.648490905761719 -6.2448348999023438 6.7413101196289062
-53.292366027832031 -6.0564718246459961 6.4092183113098145
-52.9127197265625 -6.0005569458007812 6.0551853179931641
-52.535423278808594 -6.0809006690979004 5.7033572196960449
-52.186195373535156 -6.2920279502868652 5.3776912689208984
-51.888832092285156 -6.6195507049560547 5.1003875732421875
-51.663589477539062 -7.0411491394042969 4.8903532028198242
-51.525825500488281 -7.5280909538269043 4.7618908882141113
-51.484931945800781 -8.0471935272216797 4.7237534523010254
-51.543693542480469 -8.5630788803100586 4.7785534858703613
-51.698104858398438 -9.0405921936035156 4.9225406646728516
-51.937637329101562 -9.4471902847290039 5.1459064483642578
-52.245979309082031 -1.7551651000976562 5.4334349632263184
-52.602104187011719 -1.9435282945632935 5.7655272483825684
-52.98175048828125 -1.9994431734085083 6.1195602416992188
-53.359046936035156 -1.9190992116928101 6.4713883399963379
-53.708274841308594 -1.7079719305038452 6.797053337097168
-54.005638122558594 -1.3804491758346558 7.0743570327758789
-54.230880737304688 -0.95885109901428223 7.2843923568725586
-54.368644714355469 -0.47190886735916138 7.4128546714782715
-54.409530639648438 0.047193169593811035 7.4509906768798828
-54.350776672363281 0.56307905912399292 7.3961920738220215
-54.196365356445312 1.0405920743942261 7.2522048950195312
-53.956832885742188 1.4471904039382935 7.028839111328125
-53.648490905761719 1.7551651000976562 6.7413101196289062
-53.292366027832031 1.9435282945632935 6.4092183113098145
-52.9127197265625 1.9994431734085083 6.0551853179931641
-52.535423278808594 1.9190992116928101 5.7033572196960449
-52.186195373535156 1.7079719305038452 5.3776912689208984
-51.888832092285156 1.3804491758346558 5.1003875732421875
-51.663589477539062 0.95885109901428223 4.8903532028198242
-51.525825500488281 0.47190886735916138 4.7618908882141113
-51.484931945800781 -0.047193169593811035 4.7237534523010254
-51.543693542480469 -0.56307905912399292 4.7785534858703613
-51.698104858398438 -1.0405920743942261 4.9225406646728516
-51.937637329101562 -1.4471904039382935 5.1459064483642578
-55.324134826660156 -19.25 8.3038663864135742
-55.324134826660156 -12.749999046325684 8.3038663864135742
-55.324134826660156 -11.249999046325684 8.3038663864135742
-50.570335388183594 -11.249999046325684 3.8708794116973877
-55.324134826660156 -4.7499995231628418 8.3038663864135742
-50.570335388183594 -4.7499995231628418 3.8708794116973877
-55.324134826660156 4.7500004768371582 8.3038663864135742
-50.570335388183594 4.7500004768371582 3.8708794116973877
-55.324134826660156 11.250000953674316 8.3038663864135742
-50.570335388183594 11.250000953674316 3.8708794116973877
-55.324134826660156 -3.2499995231628418 8.3038663864135742
-50.570335388183594 -3.2499995231628418 3.8708794116973877
-55.324134826660156 3.2500004768371582 8.3038663864135742
-50.570335388183594 3.2500004768371582 3.8708794116973877
54.561210632324219 32 84.306480407714844
54.561210632324219 27.316091537475586 84.306480407714844
59.023063659667969 27.245063781738281 83.614967346191406
58.855140686035156 27.220464706420898 84.373291015625
58.709556579589844 27.20634651184082 83.559196472167969
58.547500610351562 27.182525634765625 84.288505554199219
58.705459594726562 27.198905944824219 84.742828369140625
58.318092346191406 27.161706924438477 84.999580383300781
58.428375244140625 28.472723007202148 77.358428955078125
58.353050231933594 28.08903694152832 77.383209228515625
58.16021728515625 27.764249801635742 77.487274169921875
57.879478454589844 27.548213958740234 77.654670715332031
3 3 4 5
3 5 4 6
3 5 6 7
3 7 6 8
3 7 8 9
3 9 8 10
3 9 10 11
3 11 10 12
3 11 12 13
3 13 12 14
3 15 16 17
3 17 16 18
3 17 18 19
3 17 19 20
3 20 19 21
3 20 21 22
3 22 21 23
3 22 23 24
3 2 25 24
3 24 25 26
3 24 26 22
3 27 28 25
3 50 49 56
3 49 57 56
3 49 48 57
3 48 58 57
3 48 59 58
3 48 47 59
3 47 60 59
3 47 46 60
3 39 43 63
3 43 64 63
3 43 44 64
3 44 65 64
3 44 66 65
3 42 41 67
3 41 68 67
3 41 69 68
3 41 40 69
3 40 70 69
3 54 53 71
3 71 53 72
3 52 72 53
3 72 52 73
3 51 73 52
3 73 51 55
3 46 45 61
3 45 62 61
3 44 42 66
3 66 42 67
3 74 75 76
3 76 75 77
3 76 77 78
3 78 77 79
3 78 79 80
3 80 79 81
3 80 81 82
3 82 81 83
3 82 83 84
3 85 86 87
3 87 86 88
3 87 88 89
3 89 88 90
3 89 90 91
3 91 90 92
3 91 92 93
3 93 92 94
3 93 94 95
3 96 97 98
3 98 97 99
3 98 99 100
3 100 99 101
3 100 101 102
3 142 134 135
3 142 135 136
3 142 136 137
3 142 137 138
3 142 138 139
3 142 139 143
3 140 144 141
3 141 144 145
3 141 145 146
3 147 143 146
3 143 141 146
3 143 147 142
3 142 147 148
3 142 148 149
3 144 140 149
3 140 142 149
3 30 31 119
3 31 117 119
3 31 116 117
3 29 30 108
3 30 120 108
3 30 118 120
3 25 148 27
3 148 147 27
3 146 145 150
3 145 151 150
3 152 153 154
3 153 155 154
3 156 157 158
3 157 159 158
3 160 161 162
3 161 163 162
3 113 112 37
3 112 38 37
3 112 114 38
3 110 111 36
3 111 37 36
3 111 113 37
3 34 109 33
3 109 36 33
3 109 110 36
3 35 164 0
3 35 165 164
3 35 162 165
3 35 160 162
3 35 158 160
3 35 156 158
3 35 154 156
3 35 152 154
3 35 150 152
3 35 146 150
3 35 147 146
3 35 27 147
3 35 38 27
3 27 115 31
3 27 114 115
3 27 38 114
3 116 31 115
3 119 118 30
3 32 29 108
3 166 1 164
3 1 0 164
3 145 144 151
3 144 167 151
3 144 1 167
3 2 148 25
3 2 149 148
3 2 144 149
3 2 1 144
3 168 1 166
3 168 169 1
3 168 161 169
3 168 163 161
3 170 1 169
3 170 171 1
3 170 157 171
3 170 159 157
3 172 1 171
3 172 173 1
3 172 153 173
3 172 155 153
3 1 173 167
3 122 123 174
3 123 175 174
3 123 127 175
3 127 176 175
3 127 128 176
3 128 177 176
3 128 129 177
3 129 178 177
3 129 130 178
3 130 179 178
3 130 131 179
3 131 180 179
3 131 125 180
3 125 181 180
3 125 124 181
3 124 182 181
3 124 132 182
3 132 183 182
3 132 133 183
3 133 184 183
3 133 126 184
3 126 185 184
3 126 121 185
3 258 259 168
3 260 261 213
3 260 213 214
3 260 214 215
3 260 215 216
3 260 216 217
3 260 217 218
3 260 218 262
3 261 263 229
3 261 229 230
3 261 230 231
3 261 231 232
3 261 232 233
3 261 233 210
3 261 210 211
3 261 211 212
3 261 212 213
3 263 223 224
3 263 224 225
3 263 225 226
3 263 226 227
3 263 227 228
3 263 228 229
3 262 218 219
3 262 219 220
3 262 220 221
3 262 221 222
3 262 222 223
3 262 223 263
3 260 169 261
3 261 169 161
3 261 161 160
3 158 263 160
3 263 261 160
3 263 158 262
3 262 158 159
3 262 159 170
3 169 260 170
3 260 262 170
3 264 265 189
3 264 189 190
3 264 190 191
3 264 191 192
3 264 192 193
3 264 193 194
3 264 194 266
3 265 267 205
3 265 205 206
3 265 206 207
3 265 207 208
3 265 208 209
3 265 209 186
3 265 186 187
3 265 187 188
3 265 188 189
3 267 199 200
3 267 200 201
3 267 201 202
3 267 202 203
3 267 203 204
3 267 204 205
3 266 194 195
3 266 195 196
3 266 196 197
3 266 197 198
3 266 198 199
3 266 199 267
3 264 173 265
3 265 173 153
3 265 153 152
3 150 267 152
3 267 265 152
3 267 150 266
3 266 150 151
3 266 151 167
3 173 264 167
3 264 266 167
3 268 269 237
3 268 237 238
3 268 238 239
3 268 239 240
3 268 240 241
3 268 241 242
3 268 242 270
3 269 271 253
3 269 253 254
3 269 254 255
3 269 255 256
3 269 256 257
3 269 257 234
3 269 234 235
3 269 235 236
3 269 236 237
3 271 247 248
3 271 248 249
3 271 249 250
3 271 250 251
3 271 251 252
3 271 252 253
3 270 242 243
3 270 243 244
3 270 244 245
3 270 245 246
3 270 246 247
3 270 247 271
3 268 171 269
3 269 171 157
3 269 157 156
3 154 271 156
3 271 269 156
3 271 154 270
3 270 154 155
3 270 155 172
3 171 268 172
3 268 270 172
3 272 103 273
3 273 103 104
3 274 275 276
3 275 277 276
3 275 278 277
3 278 279 277
3 280 281 107
3 281 106 107
3 281 282 106
3 282 105 106
3 282 283 105

View File

@ -6,4 +6,5 @@ INPUT += ${CGAL_PACKAGE_INCLUDE_DIR}/CGAL/value_type_traits.h
INPUT += ${CGAL_PACKAGE_INCLUDE_DIR}/CGAL/functional.h INPUT += ${CGAL_PACKAGE_INCLUDE_DIR}/CGAL/functional.h
INPUT += ${CGAL_PACKAGE_INCLUDE_DIR}/CGAL/Triangulation_simplex_base_with_time_stamp.h INPUT += ${CGAL_PACKAGE_INCLUDE_DIR}/CGAL/Triangulation_simplex_base_with_time_stamp.h
INPUT += ${CGAL_PACKAGE_INCLUDE_DIR}/CGAL/bisect_failures.h INPUT += ${CGAL_PACKAGE_INCLUDE_DIR}/CGAL/bisect_failures.h
INPUT += ${CGAL_PACKAGE_INCLUDE_DIR}/CGAL/Exception_ostream.h

View File

@ -0,0 +1,72 @@
// Copyright (c) 2025 GeometryFactory Sarl (France).
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org).
//
// $URL$
// $Id$
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
//
// Author(s) : Laurent Rineau
#ifndef CGAL_EXCEPTION_OSTREAM_H
#define CGAL_EXCEPTION_OSTREAM_H
#include <ostream>
#include <sstream>
#include <stdexcept>
#include <string>
namespace CGAL {
/**
* \class Exception_basic_ostream
* \brief A std::basic_ostream that throws an exception with its buffer content when flushed.
*
* Usage:
* \code
* CGAL::Exception_basic_ostream os;
* os << "Error: " << value << std::endl; // throws std::runtime_error with the message
* \endcode
*
* \tparam CharT Character type (default: char)
* \tparam Traits Character traits (default: std::char_traits<CharT>)
*/
template <typename CharT = char, typename Traits = std::char_traits<CharT>>
class Exception_basic_ostream : public std::basic_ostream<CharT, Traits> {
class buffer_type : public std::basic_stringbuf<CharT, Traits> {
public:
using int_type = typename Traits::int_type;
buffer_type() = default;
// When the buffer is flushed, throw an exception with the buffer content
int sync() override {
std::basic_string<CharT, Traits> msg = this->str();
this->str({}); // clear buffer
throw std::runtime_error(std::string(msg.begin(), msg.end()));
}
};
buffer_type buffer_;
public:
Exception_basic_ostream() : std::basic_ostream<CharT, Traits>(&buffer_) {}
// Disallow copy and move
Exception_basic_ostream(const Exception_basic_ostream&) = delete;
Exception_basic_ostream& operator=(const Exception_basic_ostream&) = delete;
Exception_basic_ostream(Exception_basic_ostream&&) = delete;
Exception_basic_ostream& operator=(Exception_basic_ostream&&) = delete;
~Exception_basic_ostream() override = default;
};
/// /relates Exception_basic_ostream
using Exception_ostream = Exception_basic_ostream<char>;
/// /relates Exception_basic_ostream
using Exception_wostream = Exception_basic_ostream<wchar_t>;
inline Exception_ostream& exception_ostream() {
static Exception_ostream os;
return os;
}
} // namespace CGAL
#endif // CGAL_EXCEPTION_OSTREAM_H