Refactor: move blenloader code of surface deform modifier
This commit is contained in:
parent
8b59b97c10
commit
adcb7a2ce7
|
@ -5777,33 +5777,6 @@ static void direct_link_modifiers(BlendDataReader *reader, ListBase *lb, Object
|
|||
msmcd->reader = NULL;
|
||||
msmcd->reader_object_path[0] = '\0';
|
||||
}
|
||||
else if (md->type == eModifierType_SurfaceDeform) {
|
||||
SurfaceDeformModifierData *smd = (SurfaceDeformModifierData *)md;
|
||||
|
||||
BLO_read_data_address(reader, &smd->verts);
|
||||
|
||||
if (smd->verts) {
|
||||
for (int i = 0; i < smd->numverts; i++) {
|
||||
BLO_read_data_address(reader, &smd->verts[i].binds);
|
||||
|
||||
if (smd->verts[i].binds) {
|
||||
for (int j = 0; j < smd->verts[i].numbinds; j++) {
|
||||
BLO_read_uint32_array(
|
||||
reader, smd->verts[i].binds[j].numverts, &smd->verts[i].binds[j].vert_inds);
|
||||
|
||||
if (smd->verts[i].binds[j].mode == MOD_SDEF_MODE_CENTROID ||
|
||||
smd->verts[i].binds[j].mode == MOD_SDEF_MODE_LOOPTRI) {
|
||||
BLO_read_float3_array(reader, 1, &smd->verts[i].binds[j].vert_weights);
|
||||
}
|
||||
else {
|
||||
BLO_read_float_array(
|
||||
reader, smd->verts[i].binds[j].numverts, &smd->verts[i].binds[j].vert_weights);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (md->type == eModifierType_Bevel) {
|
||||
BevelModifierData *bmd = (BevelModifierData *)md;
|
||||
BLO_read_data_address(reader, &bmd->custom_profile);
|
||||
|
|
|
@ -1748,33 +1748,6 @@ static void write_modifiers(BlendWriter *writer, ListBase *modbase)
|
|||
writestruct(wd, DATA, MFace, collmd->numfaces, collmd->mfaces);
|
||||
#endif
|
||||
}
|
||||
else if (md->type == eModifierType_SurfaceDeform) {
|
||||
SurfaceDeformModifierData *smd = (SurfaceDeformModifierData *)md;
|
||||
|
||||
BLO_write_struct_array(writer, SDefVert, smd->numverts, smd->verts);
|
||||
|
||||
if (smd->verts) {
|
||||
for (int i = 0; i < smd->numverts; i++) {
|
||||
BLO_write_struct_array(writer, SDefBind, smd->verts[i].numbinds, smd->verts[i].binds);
|
||||
|
||||
if (smd->verts[i].binds) {
|
||||
for (int j = 0; j < smd->verts[i].numbinds; j++) {
|
||||
BLO_write_uint32_array(
|
||||
writer, smd->verts[i].binds[j].numverts, smd->verts[i].binds[j].vert_inds);
|
||||
|
||||
if (smd->verts[i].binds[j].mode == MOD_SDEF_MODE_CENTROID ||
|
||||
smd->verts[i].binds[j].mode == MOD_SDEF_MODE_LOOPTRI) {
|
||||
BLO_write_float3_array(writer, 1, smd->verts[i].binds[j].vert_weights);
|
||||
}
|
||||
else {
|
||||
BLO_write_float_array(
|
||||
writer, smd->verts[i].binds[j].numverts, smd->verts[i].binds[j].vert_weights);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (md->type == eModifierType_Bevel) {
|
||||
BevelModifierData *bmd = (BevelModifierData *)md;
|
||||
if (bmd->custom_profile) {
|
||||
|
|
|
@ -47,6 +47,8 @@
|
|||
#include "UI_interface.h"
|
||||
#include "UI_resources.h"
|
||||
|
||||
#include "BLO_read_write.h"
|
||||
|
||||
#include "RNA_access.h"
|
||||
|
||||
#include "DEG_depsgraph.h"
|
||||
|
@ -1438,6 +1440,64 @@ static void panelRegister(ARegionType *region_type)
|
|||
modifier_panel_register(region_type, eModifierType_SurfaceDeform, panel_draw);
|
||||
}
|
||||
|
||||
static void blendWrite(BlendWriter *writer, const ModifierData *md)
|
||||
{
|
||||
const SurfaceDeformModifierData *smd = (const SurfaceDeformModifierData *)md;
|
||||
|
||||
BLO_write_struct_array(writer, SDefVert, smd->numverts, smd->verts);
|
||||
|
||||
if (smd->verts) {
|
||||
for (int i = 0; i < smd->numverts; i++) {
|
||||
BLO_write_struct_array(writer, SDefBind, smd->verts[i].numbinds, smd->verts[i].binds);
|
||||
|
||||
if (smd->verts[i].binds) {
|
||||
for (int j = 0; j < smd->verts[i].numbinds; j++) {
|
||||
BLO_write_uint32_array(
|
||||
writer, smd->verts[i].binds[j].numverts, smd->verts[i].binds[j].vert_inds);
|
||||
|
||||
if (smd->verts[i].binds[j].mode == MOD_SDEF_MODE_CENTROID ||
|
||||
smd->verts[i].binds[j].mode == MOD_SDEF_MODE_LOOPTRI) {
|
||||
BLO_write_float3_array(writer, 1, smd->verts[i].binds[j].vert_weights);
|
||||
}
|
||||
else {
|
||||
BLO_write_float_array(
|
||||
writer, smd->verts[i].binds[j].numverts, smd->verts[i].binds[j].vert_weights);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void blendRead(BlendDataReader *reader, ModifierData *md)
|
||||
{
|
||||
SurfaceDeformModifierData *smd = (SurfaceDeformModifierData *)md;
|
||||
|
||||
BLO_read_data_address(reader, &smd->verts);
|
||||
|
||||
if (smd->verts) {
|
||||
for (int i = 0; i < smd->numverts; i++) {
|
||||
BLO_read_data_address(reader, &smd->verts[i].binds);
|
||||
|
||||
if (smd->verts[i].binds) {
|
||||
for (int j = 0; j < smd->verts[i].numbinds; j++) {
|
||||
BLO_read_uint32_array(
|
||||
reader, smd->verts[i].binds[j].numverts, &smd->verts[i].binds[j].vert_inds);
|
||||
|
||||
if (smd->verts[i].binds[j].mode == MOD_SDEF_MODE_CENTROID ||
|
||||
smd->verts[i].binds[j].mode == MOD_SDEF_MODE_LOOPTRI) {
|
||||
BLO_read_float3_array(reader, 1, &smd->verts[i].binds[j].vert_weights);
|
||||
}
|
||||
else {
|
||||
BLO_read_float_array(
|
||||
reader, smd->verts[i].binds[j].numverts, &smd->verts[i].binds[j].vert_weights);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ModifierTypeInfo modifierType_SurfaceDeform = {
|
||||
/* name */ "SurfaceDeform",
|
||||
/* structName */ "SurfaceDeformModifierData",
|
||||
|
@ -1468,6 +1528,6 @@ ModifierTypeInfo modifierType_SurfaceDeform = {
|
|||
/* foreachTexLink */ NULL,
|
||||
/* freeRuntimeData */ NULL,
|
||||
/* panelRegister */ panelRegister,
|
||||
/* blendWrite */ NULL,
|
||||
/* blendRead */ NULL,
|
||||
/* blendWrite */ blendWrite,
|
||||
/* blendRead */ blendRead,
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue