diff options
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r-- | source/blender/blenkernel/intern/brush.cc | 15 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/paint.cc | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/scene.cc | 70 |
3 files changed, 88 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/brush.cc b/source/blender/blenkernel/intern/brush.cc index 3708090f8ed..fb8a6785f64 100644 --- a/source/blender/blenkernel/intern/brush.cc +++ b/source/blender/blenkernel/intern/brush.cc @@ -72,6 +72,8 @@ static void brush_copy_data(Main *UNUSED(bmain), ID *id_dst, const ID *id_src, c } brush_dst->curve = BKE_curvemapping_copy(brush_src->curve); + brush_dst->automasking_cavity_curve = BKE_curvemapping_copy(brush_src->automasking_cavity_curve); + if (brush_src->gpencil_settings != nullptr) { brush_dst->gpencil_settings = MEM_cnew(__func__, *(brush_src->gpencil_settings)); brush_dst->gpencil_settings->curve_sensitivity = BKE_curvemapping_copy( @@ -109,6 +111,7 @@ static void brush_free_data(ID *id) IMB_freeImBuf(brush->icon_imbuf); } BKE_curvemapping_free(brush->curve); + BKE_curvemapping_free(brush->automasking_cavity_curve); if (brush->gpencil_settings != nullptr) { BKE_curvemapping_free(brush->gpencil_settings->curve_sensitivity); @@ -212,6 +215,10 @@ static void brush_blend_write(BlendWriter *writer, ID *id, const void *id_addres BKE_curvemapping_blend_write(writer, brush->curve); } + if (brush->automasking_cavity_curve) { + BKE_curvemapping_blend_write(writer, brush->automasking_cavity_curve); + } + if (brush->gpencil_settings) { BLO_write_struct(writer, BrushGpencilSettings, brush->gpencil_settings); @@ -267,6 +274,14 @@ static void brush_blend_read_data(BlendDataReader *reader, ID *id) BKE_brush_curve_preset(brush, CURVE_PRESET_SHARP); } + BLO_read_data_address(reader, &brush->automasking_cavity_curve); + if (brush->automasking_cavity_curve) { + BKE_curvemapping_blend_read(reader, brush->automasking_cavity_curve); + } + else { + brush->automasking_cavity_curve = BKE_sculpt_default_cavity_curve(); + } + /* grease pencil */ BLO_read_data_address(reader, &brush->gpencil_settings); if (brush->gpencil_settings != nullptr) { diff --git a/source/blender/blenkernel/intern/paint.cc b/source/blender/blenkernel/intern/paint.cc index a735250fd2a..08e49550426 100644 --- a/source/blender/blenkernel/intern/paint.cc +++ b/source/blender/blenkernel/intern/paint.cc @@ -2089,6 +2089,9 @@ void BKE_sculpt_toolsettings_data_ensure(Scene *scene) if (!sd->paint.tile_offset[2]) { sd->paint.tile_offset[2] = 1.0f; } + if (!sd->automasking_cavity_curve || !sd->automasking_cavity_curve_op) { + BKE_sculpt_check_cavity_curves(sd); + } } static bool check_sculpt_object_deformed(Object *object, const bool for_construction) 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); } |