diff --git a/source/blender/blenkernel/BKE_curves.hh b/source/blender/blenkernel/BKE_curves.hh index c3ad7c027a1..e4a5bf8b733 100644 --- a/source/blender/blenkernel/BKE_curves.hh +++ b/source/blender/blenkernel/BKE_curves.hh @@ -384,6 +384,13 @@ class CurvesGeometry : public ::CurvesGeometry { { return this->adapt_domain(GVArray(varray), from, to).typed(); } + + /* -------------------------------------------------------------------- + * File Read/Write. + */ + + void blend_read(BlendDataReader &reader); + void blend_write(BlendWriter &writer, ID &id); }; static_assert(sizeof(blender::bke::CurvesGeometry) == sizeof(::CurvesGeometry)); diff --git a/source/blender/blenkernel/intern/curves.cc b/source/blender/blenkernel/intern/curves.cc index 2ee37129b11..0dbdbaf0a57 100644 --- a/source/blender/blenkernel/intern/curves.cc +++ b/source/blender/blenkernel/intern/curves.cc @@ -130,30 +130,12 @@ static void curves_blend_write(BlendWriter *writer, ID *id, const void *id_addre { Curves *curves = (Curves *)id; - Vector point_layers; - Vector curve_layers; - CustomData_blend_write_prepare(curves->geometry.point_data, point_layers); - CustomData_blend_write_prepare(curves->geometry.curve_data, curve_layers); - /* Write LibData */ BLO_write_id_struct(writer, Curves, id_address, &curves->id); BKE_id_blend_write(writer, &curves->id); /* Direct data */ - CustomData_blend_write(writer, - &curves->geometry.point_data, - point_layers, - curves->geometry.point_num, - CD_MASK_ALL, - &curves->id); - CustomData_blend_write(writer, - &curves->geometry.curve_data, - curve_layers, - curves->geometry.curve_num, - CD_MASK_ALL, - &curves->id); - - BLO_write_int32_array(writer, curves->geometry.curve_num + 1, curves->geometry.curve_offsets); + curves->geometry.wrap().blend_write(*writer, curves->id); BLO_write_string(writer, curves->surface_uv_map); @@ -170,10 +152,7 @@ static void curves_blend_read_data(BlendDataReader *reader, ID *id) BKE_animdata_blend_read_data(reader, curves->adt); /* Geometry */ - CustomData_blend_read(reader, &curves->geometry.point_data, curves->geometry.point_num); - CustomData_blend_read(reader, &curves->geometry.curve_data, curves->geometry.curve_num); - - BLO_read_int32_array(reader, curves->geometry.curve_num + 1, &curves->geometry.curve_offsets); + curves->geometry.wrap().blend_read(*reader); BLO_read_data_address(reader, &curves->surface_uv_map); diff --git a/source/blender/blenkernel/intern/curves_geometry.cc b/source/blender/blenkernel/intern/curves_geometry.cc index be0af1eb8a9..422192aed0b 100644 --- a/source/blender/blenkernel/intern/curves_geometry.cc +++ b/source/blender/blenkernel/intern/curves_geometry.cc @@ -17,11 +17,14 @@ #include "BLI_math_rotation_legacy.hh" #include "BLI_task.hh" +#include "BLO_read_write.h" + #include "DNA_curves_types.h" #include "BKE_attribute_math.hh" #include "BKE_curves.hh" #include "BKE_curves_utils.hh" +#include "BKE_customdata.h" namespace blender::bke { @@ -1572,4 +1575,33 @@ GVArray CurvesGeometry::adapt_domain(const GVArray &varray, /** \} */ +/* -------------------------------------------------------------------- */ +/** \name File reading/writing. + * \{ */ + +void CurvesGeometry::blend_read(BlendDataReader &reader) +{ + CustomData_blend_read(&reader, &this->point_data, this->point_num); + CustomData_blend_read(&reader, &this->curve_data, this->curve_num); + + BLO_read_int32_array(&reader, this->curve_num + 1, &this->curve_offsets); +} + +void CurvesGeometry::blend_write(BlendWriter &writer, ID &id) +{ + Vector point_layers; + Vector curve_layers; + CustomData_blend_write_prepare(this->point_data, point_layers); + CustomData_blend_write_prepare(this->curve_data, curve_layers); + + CustomData_blend_write( + &writer, &this->point_data, point_layers, this->point_num, CD_MASK_ALL, &id); + CustomData_blend_write( + &writer, &this->curve_data, curve_layers, this->curve_num, CD_MASK_ALL, &id); + + BLO_write_int32_array(&writer, this->curve_num + 1, this->curve_offsets); +} + +/** \} */ + } // namespace blender::bke