diff options
Diffstat (limited to 'source/blender/blenkernel/intern/scene.cc')
-rw-r--r-- | source/blender/blenkernel/intern/scene.cc | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/scene.cc b/source/blender/blenkernel/intern/scene.cc index 6d10d31e976..4af6409347d 100644 --- a/source/blender/blenkernel/intern/scene.cc +++ b/source/blender/blenkernel/intern/scene.cc @@ -114,6 +114,32 @@ #include "bmesh.h" +CurveMapping *BKE_sculpt_default_cavity_curve() + +{ + CurveMapping *cumap = BKE_curvemapping_add(1, 0, 0, 1, 1); + + cumap->flag &= ~CUMA_EXTEND_EXTRAPOLATE; + cumap->preset = CURVE_PRESET_LINE; + + BKE_curvemap_reset(cumap->cm, &cumap->clipr, cumap->preset, CURVEMAP_SLOPE_POSITIVE); + BKE_curvemapping_changed(cumap, false); + BKE_curvemapping_init(cumap); + + return cumap; +} + +void BKE_sculpt_check_cavity_curves(Sculpt *sd) +{ + if (!sd->automasking_cavity_curve) { + sd->automasking_cavity_curve = BKE_sculpt_default_cavity_curve(); + } + + if (!sd->automasking_cavity_curve_op) { + sd->automasking_cavity_curve_op = BKE_sculpt_default_cavity_curve(); + } +} + static void scene_init_data(ID *id) { Scene *scene = (Scene *)id; @@ -940,6 +966,13 @@ static void scene_blend_write(BlendWriter *writer, ID *id, const void *id_addres } if (tos->sculpt) { BLO_write_struct(writer, Sculpt, tos->sculpt); + if (tos->sculpt->automasking_cavity_curve) { + BKE_curvemapping_blend_write(writer, tos->sculpt->automasking_cavity_curve); + } + if (tos->sculpt->automasking_cavity_curve_op) { + BKE_curvemapping_blend_write(writer, tos->sculpt->automasking_cavity_curve_op); + } + BKE_paint_blend_write(writer, &tos->sculpt->paint); } if (tos->uvsculpt) { @@ -1153,6 +1186,24 @@ static void scene_blend_read_data(BlendDataReader *reader, ID *id) sce->toolsettings->particle.object = nullptr; sce->toolsettings->gp_sculpt.paintcursor = nullptr; + if (sce->toolsettings->sculpt) { + BLO_read_data_address(reader, &sce->toolsettings->sculpt->automasking_cavity_curve); + BLO_read_data_address(reader, &sce->toolsettings->sculpt->automasking_cavity_curve_op); + + if (sce->toolsettings->sculpt->automasking_cavity_curve) { + BKE_curvemapping_blend_read(reader, sce->toolsettings->sculpt->automasking_cavity_curve); + BKE_curvemapping_init(sce->toolsettings->sculpt->automasking_cavity_curve); + } + + if (sce->toolsettings->sculpt->automasking_cavity_curve_op) { + BKE_curvemapping_blend_read(reader, + sce->toolsettings->sculpt->automasking_cavity_curve_op); + BKE_curvemapping_init(sce->toolsettings->sculpt->automasking_cavity_curve_op); + } + + BKE_sculpt_check_cavity_curves(sce->toolsettings->sculpt); + } + /* Relink grease pencil interpolation curves. */ BLO_read_data_address(reader, &sce->toolsettings->gp_interpolate.custom_ipo); if (sce->toolsettings->gp_interpolate.custom_ipo) { @@ -1740,6 +1791,18 @@ ToolSettings *BKE_toolsettings_copy(ToolSettings *toolsettings, const int flag) if (ts->sculpt) { ts->sculpt = static_cast<Sculpt *>(MEM_dupallocN(ts->sculpt)); BKE_paint_copy(&ts->sculpt->paint, &ts->sculpt->paint, flag); + + if (ts->sculpt->automasking_cavity_curve) { + ts->sculpt->automasking_cavity_curve = BKE_curvemapping_copy( + ts->sculpt->automasking_cavity_curve); + BKE_curvemapping_init(ts->sculpt->automasking_cavity_curve); + } + + if (ts->sculpt->automasking_cavity_curve_op) { + ts->sculpt->automasking_cavity_curve_op = BKE_curvemapping_copy( + ts->sculpt->automasking_cavity_curve_op); + BKE_curvemapping_init(ts->sculpt->automasking_cavity_curve_op); + } } if (ts->uvsculpt) { ts->uvsculpt = static_cast<UvSculpt *>(MEM_dupallocN(ts->uvsculpt)); @@ -1797,6 +1860,13 @@ void BKE_toolsettings_free(ToolSettings *toolsettings) MEM_freeN(toolsettings->wpaint); } if (toolsettings->sculpt) { + if (toolsettings->sculpt->automasking_cavity_curve) { + BKE_curvemapping_free(toolsettings->sculpt->automasking_cavity_curve); + } + if (toolsettings->sculpt->automasking_cavity_curve_op) { + BKE_curvemapping_free(toolsettings->sculpt->automasking_cavity_curve_op); + } + BKE_paint_free(&toolsettings->sculpt->paint); MEM_freeN(toolsettings->sculpt); } |