[Bf-blender-cvs] [c2c12a16e23] gpencil-new-data-proposal: old to new conversion + testing
Amelie Fondevilla
noreply at git.blender.org
Tue Nov 29 10:27:44 CET 2022
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);
}
More information about the Bf-blender-cvs
mailing list