Refactor: Extract CurvesGeometry read/write function #105737

Merged
Falk David merged 3 commits from filedescriptor/blender:refactor-curves-extract-read-write-functions into main 2023-03-13 18:43:03 +01:00
3 changed files with 41 additions and 23 deletions

View File

@ -384,6 +384,13 @@ class CurvesGeometry : public ::CurvesGeometry {
{
return this->adapt_domain(GVArray(varray), from, to).typed<T>();
}
/* --------------------------------------------------------------------
* File Read/Write.
*/
void blend_read(BlendDataReader &reader);
filedescriptor marked this conversation as resolved Outdated

Use references here instead of pointers

Use references here instead of pointers
void blend_write(BlendWriter &writer, ID &id);
filedescriptor marked this conversation as resolved Outdated

If the id argument is expected to be non-null, it should be a reference too

If the `id` argument is expected to be non-null, it should be a reference too
};
static_assert(sizeof(blender::bke::CurvesGeometry) == sizeof(::CurvesGeometry));

View File

@ -130,30 +130,12 @@ static void curves_blend_write(BlendWriter *writer, ID *id, const void *id_addre
{
Curves *curves = (Curves *)id;
Vector<CustomDataLayer, 16> point_layers;
Vector<CustomDataLayer, 16> 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);

View File

@ -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<CustomDataLayer, 16> point_layers;
Vector<CustomDataLayer, 16> 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