Commit: c2c12a16e23a56ab4d610d52a274bd796c63c265 Author: Amelie Fondevilla Date: Tue Nov 29 09:30:47 2022 +0100 Branches: gpencil-new-data-proposal https://developer.blender.org/rBc2c12a16e23a56ab4d610d52a274bd796c63c265
old to new conversion + testing =================================================================== M source/blender/blenkernel/intern/gpencil_new_proposal.hh M source/blender/blenkernel/intern/gpencil_new_proposal_conversion.cc M source/blender/blenkernel/intern/gpencil_new_proposal_test.cc =================================================================== diff --git a/source/blender/blenkernel/intern/gpencil_new_proposal.hh b/source/blender/blenkernel/intern/gpencil_new_proposal.hh index 64f6360e9aa..5b2818d5106 100644 --- a/source/blender/blenkernel/intern/gpencil_new_proposal.hh +++ b/source/blender/blenkernel/intern/gpencil_new_proposal.hh @@ -349,7 +349,7 @@ class GPData : public ::GPData { void update_frames_array(); }; -GreasePencil convert_old_to_new_gpencil_data(const bGPdata *old_gpd); +GPData convert_old_to_new_gpencil_data(bGPdata *old_gpd); bGPdata *convert_new_to_old_gpencil_data(const GreasePencil &new_gpd); } // namespace blender::bke diff --git a/source/blender/blenkernel/intern/gpencil_new_proposal_conversion.cc b/source/blender/blenkernel/intern/gpencil_new_proposal_conversion.cc index ae9fa96a19a..c9e3e3b552a 100644 --- a/source/blender/blenkernel/intern/gpencil_new_proposal_conversion.cc +++ b/source/blender/blenkernel/intern/gpencil_new_proposal_conversion.cc @@ -4,14 +4,32 @@ * \ingroup bke */ +#include "BKE_gpencil.h" #include "DNA_gpencil_types.h" #include "gpencil_new_proposal.hh" namespace blender::bke { -GreasePencil convert_old_to_new_gpencil_data(const bGPdata *old_gpd) +GPData convert_old_to_new_gpencil_data(bGPdata *old_gpd) { - GreasePencil new_gpd; + GPData new_gpd; + + /* Add all layers */ + Vector<std::string> layer_names; + LISTBASE_FOREACH (bGPDlayer *, lay, &old_gpd->layers) { + layer_names.append(std::string(lay->info)); + } + new_gpd.add_layers(layer_names.as_span()); + + /* Add all frames */ + int layer_index{-1}; + LISTBASE_FOREACH (bGPDlayer *, lay, &old_gpd->layers) { + Vector<int> frame_indices; + LISTBASE_FOREACH (bGPDframe *, frm, &lay->frames) { + frame_indices.append(frm->framenum); + } + new_gpd.add_frames_on_layer(++layer_index, frame_indices.as_span()); + } return new_gpd; } diff --git a/source/blender/blenkernel/intern/gpencil_new_proposal_test.cc b/source/blender/blenkernel/intern/gpencil_new_proposal_test.cc index f15eb03e8b8..f9ddd7727f1 100644 --- a/source/blender/blenkernel/intern/gpencil_new_proposal_test.cc +++ b/source/blender/blenkernel/intern/gpencil_new_proposal_test.cc @@ -121,6 +121,44 @@ static void free_old_gpencil_data(bGPdata *gpd) MEM_SAFE_FREE(gpd); } +static void compare_data_structures(const GPData &ngpd, const bGPdata *ogpd) +{ + /* Compare Layers */ + EXPECT_EQ(ngpd.layers_size, ogpd->totlayer); + + int offset{-1}; + LISTBASE_FOREACH (bGPDlayer *, lay, &ogpd->layers) { + const ::GPLayer *nlay = &(ngpd.layers_array[++offset]); + + // Same name + EXPECT_EQ(std::strcmp(nlay->name, lay->info), 0); + } + + /* Compare Frames */ + EXPECT_EQ(ngpd.frames_size, ogpd->totframe); + + // get plain list of frames + std::vector<std::pair<int, int>> ogpd_frames; + offset = 0; + LISTBASE_FOREACH (bGPDlayer *, lay, &ogpd->layers) { + LISTBASE_FOREACH (bGPDframe *, frm, &lay->frames) { + ogpd_frames.push_back({offset, frm->framenum}); + } + ++offset; + } + + // FIXME: this fails because in new data structure + // frames are sorted by frame_nb and then layer_index + for (int i = 0; i < ngpd.frames_size; i++) { + const ::GPFrame *nfrm = ngpd.frames_array + i; + int ofrm_layer_index{ogpd_frames[i].first}; + int ofrm_frame_number{ogpd_frames[i].second}; + + EXPECT_EQ(nfrm->layer_index, ofrm_layer_index); + EXPECT_EQ(nfrm->start_time, ofrm_frame_number); + } +} + TEST(gpencil_proposal, EmptyGPData) { GPData data; @@ -426,11 +464,13 @@ TEST(gpencil_proposal, TimeMultiFrameTransformStrokes) TEST(gpencil_proposal, Old2NewConversion) { - int layers_num = 10, frames_num = 20, strokes_num = 10, points_num = 100; + int layers_num = 2, frames_num = 2, strokes_num = 2, points_num = 2; bGPdata *old_data = build_old_gpencil_data(layers_num, frames_num, strokes_num, points_num); - GreasePencil data = convert_old_to_new_gpencil_data(old_data); + GPData data = convert_old_to_new_gpencil_data(old_data); + + compare_data_structures(data, old_data); free_old_gpencil_data(old_data); } _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs