From 9471715720489b36f2472f00363440546e9a07a5 Mon Sep 17 00:00:00 2001 From: Howard Trickey Date: Tue, 20 Jul 2021 07:28:46 -0400 Subject: Fix crash in delaunay C interface test. The test forgot to set the new need_ids field, which luckily exposed a bug in the C api for delaunay when that field is false. Fixed the bug and the test, and added a test for the need_ids false case. --- source/blender/blenlib/intern/delaunay_2d.cc | 6 ++++-- .../blender/blenlib/tests/BLI_delaunay_2d_test.cc | 25 ++++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) (limited to 'source/blender/blenlib') diff --git a/source/blender/blenlib/intern/delaunay_2d.cc b/source/blender/blenlib/intern/delaunay_2d.cc index 362dbdf15c5..08f18d5cbf3 100644 --- a/source/blender/blenlib/intern/delaunay_2d.cc +++ b/source/blender/blenlib/intern/delaunay_2d.cc @@ -2851,10 +2851,12 @@ extern "C" ::CDT_result *BLI_delaunay_2d_cdt_calc(const ::CDT_input *input, for (int e = 0; e < ne; ++e) { tot_e_orig += res.edge_orig[e].size(); } - for (int f = 0; f < nf; ++f) { + } + for (int f = 0; f < nf; ++f) { + if (input->need_ids) { tot_f_orig += res.face_orig[f].size(); - tot_f_lens += res.face[f].size(); } + tot_f_lens += res.face[f].size(); } output->vert_coords = static_castvert_coords)>( diff --git a/source/blender/blenlib/tests/BLI_delaunay_2d_test.cc b/source/blender/blenlib/tests/BLI_delaunay_2d_test.cc index bc6b7e9fe4e..cd2d48eac4d 100644 --- a/source/blender/blenlib/tests/BLI_delaunay_2d_test.cc +++ b/source/blender/blenlib/tests/BLI_delaunay_2d_test.cc @@ -1756,9 +1756,34 @@ TEST(delaunay_d, CintTwoFace) input.faces_len_table = faces_len; input.faces_start_table = faces_start; input.epsilon = 1e-5f; + input.need_ids = false; ::CDT_result *output = BLI_delaunay_2d_cdt_calc(&input, CDT_FULL); BLI_delaunay_2d_cdt_free(output); } + +TEST(delaunay_d, CintTwoFaceNoIds) +{ + float vert_coords[][2] = { + {0.0, 0.0}, {1.0, 0.0}, {0.5, 1.0}, {1.1, 1.0}, {1.1, 0.0}, {1.6, 1.0}}; + int faces[] = {0, 1, 2, 3, 4, 5}; + int faces_len[] = {3, 3}; + int faces_start[] = {0, 3}; + + ::CDT_input input; + input.verts_len = 6; + input.edges_len = 0; + input.faces_len = 2; + input.vert_coords = vert_coords; + input.edges = nullptr; + input.faces = faces; + input.faces_len_table = faces_len; + input.faces_start_table = faces_start; + input.epsilon = 1e-5f; + input.need_ids = true; + ::CDT_result *output = BLI_delaunay_2d_cdt_calc(&input, CDT_FULL); + BLI_delaunay_2d_cdt_free(output); +} + #endif #if DO_TEXT_TESTS -- cgit v1.2.3