From 60ea01aa30d36a5bb81649142d38786d00fa3481 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Fri, 20 Jan 2023 11:55:43 -0600 Subject: [PATCH] Cleanup: Move four sculpt/paint files to C++ For continued refactoring of the Mesh data structure. See T103343. --- .../editors/sculpt_paint/CMakeLists.txt | 8 +- .../{paint_mask.c => paint_mask.cc} | 324 +++++++++--------- ...eight_ops.c => paint_vertex_weight_ops.cc} | 158 +++++---- .../{sculpt_expand.c => sculpt_expand.cc} | 141 ++++---- .../{sculpt_geodesic.c => sculpt_geodesic.cc} | 17 +- 5 files changed, 335 insertions(+), 313 deletions(-) rename source/blender/editors/sculpt_paint/{paint_mask.c => paint_mask.cc} (88%) rename source/blender/editors/sculpt_paint/{paint_vertex_weight_ops.c => paint_vertex_weight_ops.cc} (87%) rename source/blender/editors/sculpt_paint/{sculpt_expand.c => sculpt_expand.cc} (94%) rename source/blender/editors/sculpt_paint/{sculpt_geodesic.c => sculpt_geodesic.cc} (96%) diff --git a/source/blender/editors/sculpt_paint/CMakeLists.txt b/source/blender/editors/sculpt_paint/CMakeLists.txt index 62a07310106..35fc4ba705e 100644 --- a/source/blender/editors/sculpt_paint/CMakeLists.txt +++ b/source/blender/editors/sculpt_paint/CMakeLists.txt @@ -51,14 +51,14 @@ set(SRC paint_image_2d_curve_mask.cc paint_image_ops_paint.cc paint_image_proj.cc - paint_mask.c + paint_mask.cc paint_ops.c paint_stroke.c paint_utils.c paint_vertex.cc paint_vertex_color_ops.cc paint_vertex_proj.c - paint_vertex_weight_ops.c + paint_vertex_weight_ops.cc paint_vertex_weight_utils.c sculpt.cc sculpt_automasking.cc @@ -67,12 +67,12 @@ set(SRC sculpt_cloth.c sculpt_detail.c sculpt_dyntopo.cc - sculpt_expand.c + sculpt_expand.cc sculpt_face_set.cc sculpt_filter_color.c sculpt_filter_mask.c sculpt_filter_mesh.c - sculpt_geodesic.c + sculpt_geodesic.cc sculpt_mask_expand.c sculpt_mask_init.c sculpt_multiplane_scrape.c diff --git a/source/blender/editors/sculpt_paint/paint_mask.c b/source/blender/editors/sculpt_paint/paint_mask.cc similarity index 88% rename from source/blender/editors/sculpt_paint/paint_mask.c rename to source/blender/editors/sculpt_paint/paint_mask.cc index 26d3b4fead9..c0f4ddf4218 100644 --- a/source/blender/editors/sculpt_paint/paint_mask.c +++ b/source/blender/editors/sculpt_paint/paint_mask.cc @@ -5,6 +5,8 @@ * \ingroup edsculpt */ +#include + #include "MEM_guardedalloc.h" #include "DNA_mesh_types.h" @@ -13,7 +15,6 @@ #include "DNA_object_types.h" #include "DNA_vec_types.h" -#include "BLI_alloca.h" #include "BLI_bitmap_draw_2d.h" #include "BLI_lasso_2d.h" #include "BLI_math_geom.h" @@ -53,8 +54,6 @@ /* For undo push. */ #include "sculpt_intern.h" -#include - static const EnumPropertyItem mode_items[] = { {PAINT_MASK_FLOOD_VALUE, "VALUE", @@ -84,7 +83,7 @@ static void mask_flood_fill_set_elem(float *elem, PaintMaskFloodMode mode, float } } -typedef struct MaskTaskData { +struct MaskTaskData { Object *ob; PBVH *pbvh; PBVHNode **nodes; @@ -96,13 +95,13 @@ typedef struct MaskTaskData { bool front_faces_only; float view_normal[3]; -} MaskTaskData; +}; static void mask_flood_fill_task_cb(void *__restrict userdata, const int i, - const TaskParallelTLS *__restrict UNUSED(tls)) + const TaskParallelTLS *__restrict /*tls*/) { - MaskTaskData *data = userdata; + MaskTaskData *data = static_cast(userdata); PBVHNode *node = data->nodes[i]; @@ -136,15 +135,13 @@ static int mask_flood_fill_exec(bContext *C, wmOperator *op) const Scene *scene = CTX_data_scene(C); Object *ob = CTX_data_active_object(C); Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C); - PaintMaskFloodMode mode; - float value; PBVH *pbvh; PBVHNode **nodes; int totnode; bool multires; - mode = RNA_enum_get(op->ptr, "mode"); - value = RNA_float_get(op->ptr, "value"); + PaintMaskFloodMode mode = PaintMaskFloodMode(RNA_enum_get(op->ptr, "mode")); + float value = RNA_float_get(op->ptr, "value"); MultiresModifierData *mmd = BKE_sculpt_multires_active(scene, ob); BKE_sculpt_mask_layers_ensure(depsgraph, CTX_data_main(C), ob, mmd); @@ -153,18 +150,17 @@ static int mask_flood_fill_exec(bContext *C, wmOperator *op) pbvh = ob->sculpt->pbvh; multires = (BKE_pbvh_type(pbvh) == PBVH_GRIDS); - BKE_pbvh_search_gather(pbvh, NULL, NULL, &nodes, &totnode); + BKE_pbvh_search_gather(pbvh, nullptr, nullptr, &nodes, &totnode); SCULPT_undo_push_begin(ob, op); - MaskTaskData data = { - .ob = ob, - .pbvh = pbvh, - .nodes = nodes, - .multires = multires, - .mode = mode, - .value = value, - }; + MaskTaskData data{}; + data.ob = ob; + data.pbvh = pbvh; + data.nodes = nodes; + data.multires = multires; + data.mode = mode; + data.value = value; TaskParallelSettings settings; BKE_pbvh_parallel_range_settings(&settings, true, totnode); @@ -187,7 +183,7 @@ static int mask_flood_fill_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void PAINT_OT_mask_flood_fill(struct wmOperatorType *ot) +void PAINT_OT_mask_flood_fill(wmOperatorType *ot) { /* Identifiers. */ ot->name = "Mask Flood Fill"; @@ -201,7 +197,7 @@ void PAINT_OT_mask_flood_fill(struct wmOperatorType *ot) ot->flag = OPTYPE_REGISTER; /* RNA. */ - RNA_def_enum(ot->srna, "mode", mode_items, PAINT_MASK_FLOOD_VALUE, "Mode", NULL); + RNA_def_enum(ot->srna, "mode", mode_items, PAINT_MASK_FLOOD_VALUE, "Mode", nullptr); RNA_def_float( ot->srna, "value", @@ -216,13 +212,13 @@ void PAINT_OT_mask_flood_fill(struct wmOperatorType *ot) /* Sculpt Gesture Operators. */ -typedef enum eSculptGestureShapeType { +enum eSculptGestureShapeType { SCULPT_GESTURE_SHAPE_BOX, SCULPT_GESTURE_SHAPE_LASSO, SCULPT_GESTURE_SHAPE_LINE, -} eMaskGesturesShapeType; +}; -typedef struct LassoGestureData { +struct LassoGestureData { float projviewobjmat[4][4]; rcti boundbox; @@ -230,9 +226,9 @@ typedef struct LassoGestureData { /* 2D bitmap to test if a vertex is affected by the lasso shape. */ BLI_bitmap *mask_px; -} LassoGestureData; +}; -typedef struct LineGestureData { +struct LineGestureData { /* Plane aligned to the gesture line. */ float true_plane[4]; float plane[4]; @@ -244,11 +240,11 @@ typedef struct LineGestureData { bool use_side_planes; bool flip; -} LineGestureData; +}; struct SculptGestureOperation; -typedef struct SculptGestureContext { +struct SculptGestureContext { SculptSession *ss; ViewContext vc; @@ -257,10 +253,10 @@ typedef struct SculptGestureContext { ePaintSymmetryFlags symmpass; /* Operation parameters. */ - eMaskGesturesShapeType shape_type; + eSculptGestureShapeType shape_type; bool front_faces_only; - struct SculptGestureOperation *operation; + SculptGestureOperation *operation; /* Gesture data. */ /* Screen space points that represent the gesture shape. */ @@ -294,19 +290,19 @@ typedef struct SculptGestureContext { /* Task Callback Data. */ PBVHNode **nodes; int totnode; -} SculptGestureContext; +}; -typedef struct SculptGestureOperation { +struct SculptGestureOperation { /* Initial setup (data updates, special undo push...). */ - void (*sculpt_gesture_begin)(struct bContext *, SculptGestureContext *); + void (*sculpt_gesture_begin)(bContext *, SculptGestureContext *); /* Apply the gesture action for each symmetry pass. */ - void (*sculpt_gesture_apply_for_symmetry_pass)(struct bContext *, SculptGestureContext *); + void (*sculpt_gesture_apply_for_symmetry_pass)(bContext *, SculptGestureContext *); /* Remaining actions after finishing the symmetry passes iterations * (updating data-layers, tagging PBVH updates...). */ - void (*sculpt_gesture_end)(struct bContext *, SculptGestureContext *); -} SculptGestureOperation; + void (*sculpt_gesture_end)(bContext *, SculptGestureContext *); +}; static void sculpt_gesture_operator_properties(wmOperatorType *ot) { @@ -340,7 +336,7 @@ static void sculpt_gesture_context_init_common(bContext *C, sgcontext->ss = ob->sculpt; /* Symmetry. */ - sgcontext->symm = SCULPT_mesh_symmetry_xyz_get(ob); + sgcontext->symm = ePaintSymmetryFlags(SCULPT_mesh_symmetry_xyz_get(ob)); /* View Normal. */ float mat[3][3]; @@ -359,7 +355,7 @@ static void sculpt_gesture_context_init_common(bContext *C, static void sculpt_gesture_lasso_px_cb(int x, int x_end, int y, void *user_data) { - SculptGestureContext *mcontext = user_data; + SculptGestureContext *mcontext = static_cast(user_data); LassoGestureData *lasso = &mcontext->lasso; int index = (y * lasso->width) + x; int index_end = (y * lasso->width) + x_end; @@ -370,8 +366,7 @@ static void sculpt_gesture_lasso_px_cb(int x, int x_end, int y, void *user_data) static SculptGestureContext *sculpt_gesture_init_from_lasso(bContext *C, wmOperator *op) { - SculptGestureContext *sgcontext = MEM_callocN(sizeof(SculptGestureContext), - "sculpt gesture context lasso"); + SculptGestureContext *sgcontext = MEM_cnew(__func__); sgcontext->shape_type = SCULPT_GESTURE_SHAPE_LASSO; sculpt_gesture_context_init_common(C, op, sgcontext); @@ -380,7 +375,7 @@ static SculptGestureContext *sculpt_gesture_init_from_lasso(bContext *C, wmOpera const int(*mcoords)[2] = WM_gesture_lasso_path_to_array(C, op, &mcoords_len); if (!mcoords) { - return NULL; + return nullptr; } ED_view3d_ob_project_mat_get( @@ -407,7 +402,8 @@ static SculptGestureContext *sculpt_gesture_init_from_lasso(bContext *C, wmOpera sgcontext->vc.obact, &sgcontext->lasso.boundbox); - sgcontext->gesture_points = MEM_malloc_arrayN(mcoords_len, sizeof(float[2]), "trim points"); + sgcontext->gesture_points = static_cast( + MEM_malloc_arrayN(mcoords_len, sizeof(float[2]), "trim points")); sgcontext->tot_gesture_points = mcoords_len; for (int i = 0; i < mcoords_len; i++) { sgcontext->gesture_points[i][0] = mcoords[i][0]; @@ -421,8 +417,7 @@ static SculptGestureContext *sculpt_gesture_init_from_lasso(bContext *C, wmOpera static SculptGestureContext *sculpt_gesture_init_from_box(bContext *C, wmOperator *op) { - SculptGestureContext *sgcontext = MEM_callocN(sizeof(SculptGestureContext), - "sculpt gesture context box"); + SculptGestureContext *sgcontext = MEM_cnew(__func__); sgcontext->shape_type = SCULPT_GESTURE_SHAPE_BOX; sculpt_gesture_context_init_common(C, op, sgcontext); @@ -434,7 +429,8 @@ static SculptGestureContext *sculpt_gesture_init_from_box(bContext *C, wmOperato ED_view3d_clipping_calc( &bb, sgcontext->true_clip_planes, sgcontext->vc.region, sgcontext->vc.obact, &rect); - sgcontext->gesture_points = MEM_calloc_arrayN(4, sizeof(float[2]), "trim points"); + sgcontext->gesture_points = static_cast( + MEM_calloc_arrayN(4, sizeof(float[2]), "trim points")); sgcontext->tot_gesture_points = 4; sgcontext->gesture_points[0][0] = rect.xmax; @@ -497,8 +493,7 @@ static void sculpt_gesture_line_calculate_plane_points(SculptGestureContext *sgc static SculptGestureContext *sculpt_gesture_init_from_line(bContext *C, wmOperator *op) { - SculptGestureContext *sgcontext = MEM_callocN(sizeof(SculptGestureContext), - "sculpt gesture context line"); + SculptGestureContext *sgcontext = MEM_cnew(__func__); sgcontext->shape_type = SCULPT_GESTURE_SHAPE_LINE; sculpt_gesture_context_init_common(C, op, sgcontext); @@ -600,8 +595,10 @@ static void sculpt_gesture_update_effected_nodes_by_line_plane(SculptGestureCont copy_v4_v4(clip_planes[1], sgcontext->line.side_plane[0]); copy_v4_v4(clip_planes[2], sgcontext->line.side_plane[1]); - const int num_planes = sgcontext->line.use_side_planes ? 3 : 1; - PBVHFrustumPlanes frustum = {.planes = clip_planes, .num_planes = num_planes}; + PBVHFrustumPlanes frustum{}; + frustum.planes = clip_planes; + frustum.num_planes = sgcontext->line.use_side_planes ? 3 : 1; + BKE_pbvh_search_gather(ss->pbvh, BKE_pbvh_node_frustum_contain_AABB, &frustum, @@ -615,7 +612,11 @@ static void sculpt_gesture_update_effected_nodes_by_clip_planes(SculptGestureCon float clip_planes[4][4]; copy_m4_m4(clip_planes, sgcontext->clip_planes); negate_m4(clip_planes); - PBVHFrustumPlanes frustum = {.planes = clip_planes, .num_planes = 4}; + + PBVHFrustumPlanes frustum{}; + frustum.planes = clip_planes; + frustum.num_planes = 4; + BKE_pbvh_search_gather(ss->pbvh, BKE_pbvh_node_frustum_contain_AABB, &frustum, @@ -709,9 +710,9 @@ static void sculpt_gesture_apply(bContext *C, SculptGestureContext *sgcontext, w operation->sculpt_gesture_begin(C, sgcontext); - for (ePaintSymmetryFlags symmpass = 0; symmpass <= sgcontext->symm; symmpass++) { + for (int symmpass = 0; symmpass <= sgcontext->symm; symmpass++) { if (SCULPT_is_symmetry_iteration_valid(symmpass, sgcontext->symm)) { - sculpt_gesture_flip_for_symmetry_pass(sgcontext, symmpass); + sculpt_gesture_flip_for_symmetry_pass(sgcontext, ePaintSymmetryFlags(symmpass)); sculpt_gesture_update_effected_nodes(sgcontext); operation->sculpt_gesture_apply_for_symmetry_pass(C, sgcontext); @@ -730,11 +731,11 @@ static void sculpt_gesture_apply(bContext *C, SculptGestureContext *sgcontext, w /* Face Set Gesture Operation. */ -typedef struct SculptGestureFaceSetOperation { +struct SculptGestureFaceSetOperation { SculptGestureOperation op; int new_face_set_id; -} SculptGestureFaceSetOperation; +}; static void sculpt_gesture_face_set_begin(bContext *C, SculptGestureContext *sgcontext) { @@ -744,9 +745,9 @@ static void sculpt_gesture_face_set_begin(bContext *C, SculptGestureContext *sgc static void face_set_gesture_apply_task_cb(void *__restrict userdata, const int i, - const TaskParallelTLS *__restrict UNUSED(tls)) + const TaskParallelTLS *__restrict /*tls*/) { - SculptGestureContext *sgcontext = userdata; + SculptGestureContext *sgcontext = static_cast(userdata); SculptGestureFaceSetOperation *face_set_operation = (SculptGestureFaceSetOperation *) sgcontext->operation; PBVHNode *node = sgcontext->nodes[i]; @@ -768,7 +769,7 @@ static void face_set_gesture_apply_task_cb(void *__restrict userdata, } } -static void sculpt_gesture_face_set_apply_for_symmetry_pass(bContext *UNUSED(C), +static void sculpt_gesture_face_set_apply_for_symmetry_pass(bContext * /*C*/, SculptGestureContext *sgcontext) { TaskParallelSettings settings; @@ -777,16 +778,17 @@ static void sculpt_gesture_face_set_apply_for_symmetry_pass(bContext *UNUSED(C), 0, sgcontext->totnode, sgcontext, face_set_gesture_apply_task_cb, &settings); } -static void sculpt_gesture_face_set_end(bContext *UNUSED(C), SculptGestureContext *sgcontext) +static void sculpt_gesture_face_set_end(bContext * /*C*/, SculptGestureContext *sgcontext) { BKE_pbvh_update_vertex_data(sgcontext->ss->pbvh, PBVH_UpdateVisibility); } static void sculpt_gesture_init_face_set_properties(SculptGestureContext *sgcontext, - wmOperator *UNUSED(op)) + wmOperator * /*op*/) { - struct Mesh *mesh = BKE_mesh_from_object(sgcontext->vc.obact); - sgcontext->operation = MEM_callocN(sizeof(SculptGestureFaceSetOperation), "Face Set Operation"); + Mesh *mesh = BKE_mesh_from_object(sgcontext->vc.obact); + sgcontext->operation = reinterpret_cast( + MEM_cnew(__func__)); sgcontext->ss->face_sets = BKE_sculpt_face_sets_ensure(mesh); @@ -803,12 +805,12 @@ static void sculpt_gesture_init_face_set_properties(SculptGestureContext *sgcont /* Mask Gesture Operation. */ -typedef struct SculptGestureMaskOperation { +struct SculptGestureMaskOperation { SculptGestureOperation op; PaintMaskFloodMode mode; float value; -} SculptGestureMaskOperation; +}; static void sculpt_gesture_mask_begin(bContext *C, SculptGestureContext *sgcontext) { @@ -818,9 +820,9 @@ static void sculpt_gesture_mask_begin(bContext *C, SculptGestureContext *sgconte static void mask_gesture_apply_task_cb(void *__restrict userdata, const int i, - const TaskParallelTLS *__restrict UNUSED(tls)) + const TaskParallelTLS *__restrict /*tls*/) { - SculptGestureContext *sgcontext = userdata; + SculptGestureContext *sgcontext = static_cast(userdata); SculptGestureMaskOperation *mask_operation = (SculptGestureMaskOperation *)sgcontext->operation; Object *ob = sgcontext->vc.obact; PBVHNode *node = sgcontext->nodes[i]; @@ -856,7 +858,7 @@ static void mask_gesture_apply_task_cb(void *__restrict userdata, } } -static void sculpt_gesture_mask_apply_for_symmetry_pass(bContext *UNUSED(C), +static void sculpt_gesture_mask_apply_for_symmetry_pass(bContext * /*C*/, SculptGestureContext *sgcontext) { TaskParallelSettings settings; @@ -877,7 +879,8 @@ static void sculpt_gesture_init_mask_properties(bContext *C, SculptGestureContext *sgcontext, wmOperator *op) { - sgcontext->operation = MEM_callocN(sizeof(SculptGestureMaskOperation), "Mask Operation"); + sgcontext->operation = reinterpret_cast( + MEM_cnew(__func__)); SculptGestureMaskOperation *mask_operation = (SculptGestureMaskOperation *)sgcontext->operation; @@ -891,13 +894,13 @@ static void sculpt_gesture_init_mask_properties(bContext *C, sculpt_gesture_mask_apply_for_symmetry_pass; mask_operation->op.sculpt_gesture_end = sculpt_gesture_mask_end; - mask_operation->mode = RNA_enum_get(op->ptr, "mode"); + mask_operation->mode = PaintMaskFloodMode(RNA_enum_get(op->ptr, "mode")); mask_operation->value = RNA_float_get(op->ptr, "value"); } static void paint_mask_gesture_operator_properties(wmOperatorType *ot) { - RNA_def_enum(ot->srna, "mode", mode_items, PAINT_MASK_FLOOD_VALUE, "Mode", NULL); + RNA_def_enum(ot->srna, "mode", mode_items, PAINT_MASK_FLOOD_VALUE, "Mode", nullptr); RNA_def_float( ot->srna, "value", @@ -912,12 +915,12 @@ static void paint_mask_gesture_operator_properties(wmOperatorType *ot) /* Trim Gesture Operation. */ -typedef enum eSculptTrimOperationType { +enum eSculptTrimOperationType { SCULPT_GESTURE_TRIM_INTERSECT, SCULPT_GESTURE_TRIM_DIFFERENCE, SCULPT_GESTURE_TRIM_UNION, SCULPT_GESTURE_TRIM_JOIN, -} eSculptTrimOperationType; +}; /* Intersect is not exposed in the UI because it does not work correctly with symmetry (it deletes * the symmetrical part of the mesh in the first symmetry pass). */ @@ -933,13 +936,13 @@ static EnumPropertyItem prop_trim_operation_types[] = { 0, "Join", "Join the new mesh as separate geometry, without performing any boolean operation"}, - {0, NULL, 0, NULL, NULL}, + {0, nullptr, 0, nullptr, nullptr}, }; -typedef enum eSculptTrimOrientationType { +enum eSculptTrimOrientationType { SCULPT_GESTURE_TRIM_ORIENTATION_VIEW, SCULPT_GESTURE_TRIM_ORIENTATION_SURFACE, -} eSculptTrimOrientationType; +}; static EnumPropertyItem prop_trim_orientation_types[] = { {SCULPT_GESTURE_TRIM_ORIENTATION_VIEW, "VIEW", @@ -951,13 +954,13 @@ static EnumPropertyItem prop_trim_orientation_types[] = { 0, "Surface", "Use the surface normal to orientate the trimming shape"}, - {0, NULL, 0, NULL, NULL}, + {0, nullptr, 0, nullptr, nullptr}, }; -typedef enum eSculptTrimExtrudeMode { +enum eSculptTrimExtrudeMode { SCULPT_GESTURE_TRIM_EXTRUDE_PROJECT, SCULPT_GESTURE_TRIM_EXTRUDE_FIXED -} eSculptTrimExtrudeMode; +}; static EnumPropertyItem prop_trim_extrude_modes[] = { {SCULPT_GESTURE_TRIM_EXTRUDE_PROJECT, @@ -966,10 +969,10 @@ static EnumPropertyItem prop_trim_extrude_modes[] = { "Project", "Project back faces when extruding"}, {SCULPT_GESTURE_TRIM_EXTRUDE_FIXED, "FIXED", 0, "Fixed", "Extrude back faces by fixed amount"}, - {0, NULL, 0, NULL, NULL}, + {0, nullptr, 0, nullptr, nullptr}, }; -typedef struct SculptGestureTrimOperation { +struct SculptGestureTrimOperation { SculptGestureOperation op; Mesh *mesh; @@ -983,7 +986,7 @@ typedef struct SculptGestureTrimOperation { eSculptTrimOperationType mode; eSculptTrimOrientationType orientation; eSculptTrimExtrudeMode extrude_mode; -} SculptGestureTrimOperation; +}; static void sculpt_gesture_trim_normals_update(SculptGestureContext *sgcontext) { @@ -991,31 +994,29 @@ static void sculpt_gesture_trim_normals_update(SculptGestureContext *sgcontext) Mesh *trim_mesh = trim_operation->mesh; const BMAllocTemplate allocsize = BMALLOC_TEMPLATE_FROM_ME(trim_mesh); - BMesh *bm; - bm = BM_mesh_create(&allocsize, - &((struct BMeshCreateParams){ - .use_toolflags = true, - })); - BM_mesh_bm_from_me(bm, - trim_mesh, - (&(struct BMeshFromMeshParams){ - .calc_face_normal = true, - .calc_vert_normal = true, - })); + BMeshCreateParams bm_create_params{}; + bm_create_params.use_toolflags = true; + BMesh *bm = BM_mesh_create(&allocsize, &bm_create_params); + + BMeshFromMeshParams bm_from_me_params{}; + bm_from_me_params.calc_face_normal = true; + bm_from_me_params.calc_vert_normal = true; + BM_mesh_bm_from_me(bm, trim_mesh, &bm_from_me_params); + BM_mesh_elem_hflag_enable_all(bm, BM_FACE, BM_ELEM_TAG, false); BMO_op_callf(bm, (BMO_FLAG_DEFAULTS & ~BMO_FLAG_RESPECT_HIDE), "recalc_face_normals faces=%hf", BM_ELEM_TAG); BM_mesh_elem_hflag_disable_all(bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_TAG, false); - Mesh *result = BKE_mesh_from_bmesh_nomain(bm, - (&(struct BMeshToMeshParams){ - .calc_object_remap = false, - }), - trim_mesh); + + BMeshToMeshParams convert_params{}; + convert_params.calc_object_remap = false; + Mesh *result = BKE_mesh_from_bmesh_nomain(bm, &convert_params, trim_mesh); + BM_mesh_free(bm); - BKE_id_free(NULL, trim_mesh); + BKE_id_free(nullptr, trim_mesh); trim_operation->mesh = result; } @@ -1142,7 +1143,8 @@ static void sculpt_gesture_trim_geometry_generate(SculptGestureContext *sgcontex const int trim_totpolys = (2 * (tot_screen_points - 2)) + (2 * tot_screen_points); trim_operation->mesh = BKE_mesh_new_nomain( trim_totverts, 0, 0, trim_totpolys * 3, trim_totpolys); - trim_operation->true_mesh_co = MEM_malloc_arrayN(trim_totverts, sizeof(float[3]), "mesh orco"); + trim_operation->true_mesh_co = static_cast( + MEM_malloc_arrayN(trim_totverts, sizeof(float[3]), "mesh orco")); float depth_front = trim_operation->depth_front; float depth_back = trim_operation->depth_back; @@ -1213,7 +1215,8 @@ static void sculpt_gesture_trim_geometry_generate(SculptGestureContext *sgcontex /* Get the triangulation for the front/back poly. */ const int tot_tris_face = tot_screen_points - 2; - uint(*r_tris)[3] = MEM_malloc_arrayN(tot_tris_face, sizeof(uint[3]), "tris"); + uint(*r_tris)[3] = static_cast( + MEM_malloc_arrayN(tot_tris_face, sizeof(uint[3]), "tris")); BLI_polyfill_calc(screen_points, tot_screen_points, 0, r_tris); /* Write the front face triangle indices. */ @@ -1222,7 +1225,7 @@ static void sculpt_gesture_trim_geometry_generate(SculptGestureContext *sgcontex MPoly *mp = polys; MLoop *ml = loops; for (int i = 0; i < tot_tris_face; i++, mp++, ml += 3) { - mp->loopstart = (int)(ml - loops); + mp->loopstart = int(ml - loops); mp->totloop = 3; ml[0].v = r_tris[i][0]; ml[1].v = r_tris[i][1]; @@ -1231,7 +1234,7 @@ static void sculpt_gesture_trim_geometry_generate(SculptGestureContext *sgcontex /* Write the back face triangle indices. */ for (int i = 0; i < tot_tris_face; i++, mp++, ml += 3) { - mp->loopstart = (int)(ml - loops); + mp->loopstart = int(ml - loops); mp->totloop = 3; ml[0].v = r_tris[i][0] + tot_screen_points; ml[1].v = r_tris[i][1] + tot_screen_points; @@ -1242,7 +1245,7 @@ static void sculpt_gesture_trim_geometry_generate(SculptGestureContext *sgcontex /* Write the indices for the lateral triangles. */ for (int i = 0; i < tot_screen_points; i++, mp++, ml += 3) { - mp->loopstart = (int)(ml - loops); + mp->loopstart = int(ml - loops); mp->totloop = 3; int current_index = i; int next_index = current_index + 1; @@ -1255,7 +1258,7 @@ static void sculpt_gesture_trim_geometry_generate(SculptGestureContext *sgcontex } for (int i = 0; i < tot_screen_points; i++, mp++, ml += 3) { - mp->loopstart = (int)(ml - loops); + mp->loopstart = int(ml - loops); mp->totloop = 3; int current_index = i; int next_index = current_index + 1; @@ -1274,11 +1277,11 @@ static void sculpt_gesture_trim_geometry_generate(SculptGestureContext *sgcontex static void sculpt_gesture_trim_geometry_free(SculptGestureContext *sgcontext) { SculptGestureTrimOperation *trim_operation = (SculptGestureTrimOperation *)sgcontext->operation; - BKE_id_free(NULL, trim_operation->mesh); + BKE_id_free(nullptr, trim_operation->mesh); MEM_freeN(trim_operation->true_mesh_co); } -static int bm_face_isect_pair(BMFace *f, void *UNUSED(user_data)) +static int bm_face_isect_pair(BMFace *f, void * /*user_data*/) { return BM_elem_flag_test(f, BM_ELEM_DRAW) ? 1 : 0; } @@ -1289,30 +1292,21 @@ static void sculpt_gesture_apply_trim(SculptGestureContext *sgcontext) Mesh *sculpt_mesh = BKE_mesh_from_object(sgcontext->vc.obact); Mesh *trim_mesh = trim_operation->mesh; - BMesh *bm; const BMAllocTemplate allocsize = BMALLOC_TEMPLATE_FROM_ME(sculpt_mesh, trim_mesh); - bm = BM_mesh_create(&allocsize, - &((struct BMeshCreateParams){ - .use_toolflags = false, - })); - BM_mesh_bm_from_me(bm, - trim_mesh, - &((struct BMeshFromMeshParams){ - .calc_face_normal = true, - .calc_vert_normal = true, - })); + BMeshCreateParams bm_create_params{}; + bm_create_params.use_toolflags = false; + BMesh *bm = BM_mesh_create(&allocsize, &bm_create_params); - BM_mesh_bm_from_me(bm, - sculpt_mesh, - &((struct BMeshFromMeshParams){ - .calc_face_normal = true, - .calc_vert_normal = true, - })); + BMeshFromMeshParams bm_from_me_params{}; + bm_from_me_params.calc_face_normal = true; + bm_from_me_params.calc_vert_normal = true; + BM_mesh_bm_from_me(bm, trim_mesh, &bm_from_me_params); + BM_mesh_bm_from_me(bm, sculpt_mesh, &bm_from_me_params); const int looptris_tot = poly_to_tri_count(bm->totface, bm->totloop); - BMLoop *(*looptris)[3]; - looptris = MEM_malloc_arrayN(looptris_tot, sizeof(*looptris), __func__); + BMLoop *(*looptris)[3] = static_cast( + MEM_malloc_arrayN(looptris_tot, sizeof(*looptris), __func__)); BM_mesh_calc_tessellation_beauty(bm, looptris); BMIter iter; @@ -1323,7 +1317,7 @@ static void sculpt_gesture_apply_trim(SculptGestureContext *sgcontext) * we could calculate on the fly too (before calling split). */ const short ob_src_totcol = trim_mesh->totcol; - short *material_remap = BLI_array_alloca(material_remap, ob_src_totcol ? ob_src_totcol : 1); + blender::Array material_remap(ob_src_totcol ? ob_src_totcol : 1); BMFace *efa; i = 0; @@ -1360,19 +1354,27 @@ static void sculpt_gesture_apply_trim(SculptGestureContext *sgcontext) BLI_assert(false); break; } - BM_mesh_boolean( - bm, looptris, looptris_tot, bm_face_isect_pair, NULL, 2, true, true, false, boolean_mode); + BM_mesh_boolean(bm, + looptris, + looptris_tot, + bm_face_isect_pair, + nullptr, + 2, + true, + true, + false, + boolean_mode); } MEM_freeN(looptris); - Mesh *result = BKE_mesh_from_bmesh_nomain(bm, - (&(struct BMeshToMeshParams){ - .calc_object_remap = false, - }), - sculpt_mesh); + BMeshToMeshParams convert_params{}; + convert_params.calc_object_remap = false; + Mesh *result = BKE_mesh_from_bmesh_nomain(bm, &convert_params, sculpt_mesh); + BM_mesh_free(bm); - BKE_mesh_nomain_to_mesh(result, sgcontext->vc.obact->data, sgcontext->vc.obact); + BKE_mesh_nomain_to_mesh( + result, static_cast(sgcontext->vc.obact->data), sgcontext->vc.obact); } static void sculpt_gesture_trim_begin(bContext *C, SculptGestureContext *sgcontext) @@ -1387,10 +1389,10 @@ static void sculpt_gesture_trim_begin(bContext *C, SculptGestureContext *sgconte sculpt_gesture_trim_geometry_generate(sgcontext); SCULPT_topology_islands_invalidate(ss); BKE_sculpt_update_object_for_edit(depsgraph, sgcontext->vc.obact, true, false, false); - SCULPT_undo_push_node(sgcontext->vc.obact, NULL, SCULPT_UNDO_GEOMETRY); + SCULPT_undo_push_node(sgcontext->vc.obact, nullptr, SCULPT_UNDO_GEOMETRY); } -static void sculpt_gesture_trim_apply_for_symmetry_pass(bContext *UNUSED(C), +static void sculpt_gesture_trim_apply_for_symmetry_pass(bContext * /*C*/, SculptGestureContext *sgcontext) { SculptGestureTrimOperation *trim_operation = (SculptGestureTrimOperation *)sgcontext->operation; @@ -1403,30 +1405,31 @@ static void sculpt_gesture_trim_apply_for_symmetry_pass(bContext *UNUSED(C), sculpt_gesture_apply_trim(sgcontext); } -static void sculpt_gesture_trim_end(bContext *UNUSED(C), SculptGestureContext *sgcontext) +static void sculpt_gesture_trim_end(bContext * /*C*/, SculptGestureContext *sgcontext) { Object *object = sgcontext->vc.obact; SculptSession *ss = object->sculpt; Mesh *mesh = (Mesh *)object->data; - ss->face_sets = CustomData_get_layer_named_for_write( - &mesh->pdata, CD_PROP_INT32, ".sculpt_face_set", mesh->totpoly); + ss->face_sets = static_cast(CustomData_get_layer_named_for_write( + &mesh->pdata, CD_PROP_INT32, ".sculpt_face_set", mesh->totpoly)); if (ss->face_sets) { /* Assign a new Face Set ID to the new faces created by the trim operation. */ - const int next_face_set_id = ED_sculpt_face_sets_find_next_available_id(object->data); - ED_sculpt_face_sets_initialize_none_to_id(object->data, next_face_set_id); + const int next_face_set_id = ED_sculpt_face_sets_find_next_available_id(mesh); + ED_sculpt_face_sets_initialize_none_to_id(mesh, next_face_set_id); } sculpt_gesture_trim_geometry_free(sgcontext); - SCULPT_undo_push_node(sgcontext->vc.obact, NULL, SCULPT_UNDO_GEOMETRY); - BKE_mesh_batch_cache_dirty_tag(sgcontext->vc.obact->data, BKE_MESH_BATCH_DIRTY_ALL); + SCULPT_undo_push_node(sgcontext->vc.obact, nullptr, SCULPT_UNDO_GEOMETRY); + BKE_mesh_batch_cache_dirty_tag(mesh, BKE_MESH_BATCH_DIRTY_ALL); DEG_id_tag_update(&sgcontext->vc.obact->id, ID_RECALC_GEOMETRY); } static void sculpt_gesture_init_trim_properties(SculptGestureContext *sgcontext, wmOperator *op) { - sgcontext->operation = MEM_callocN(sizeof(SculptGestureTrimOperation), "Trim Operation"); + sgcontext->operation = reinterpret_cast( + MEM_cnew(__func__)); SculptGestureTrimOperation *trim_operation = (SculptGestureTrimOperation *)sgcontext->operation; @@ -1435,10 +1438,12 @@ static void sculpt_gesture_init_trim_properties(SculptGestureContext *sgcontext, sculpt_gesture_trim_apply_for_symmetry_pass; trim_operation->op.sculpt_gesture_end = sculpt_gesture_trim_end; - trim_operation->mode = RNA_enum_get(op->ptr, "trim_mode"); + trim_operation->mode = eSculptTrimOperationType(RNA_enum_get(op->ptr, "trim_mode")); trim_operation->use_cursor_depth = RNA_boolean_get(op->ptr, "use_cursor_depth"); - trim_operation->orientation = RNA_enum_get(op->ptr, "trim_orientation"); - trim_operation->extrude_mode = RNA_enum_get(op->ptr, "trim_extrude_mode"); + trim_operation->orientation = eSculptTrimOrientationType( + RNA_enum_get(op->ptr, "trim_orientation")); + trim_operation->extrude_mode = eSculptTrimExtrudeMode( + RNA_enum_get(op->ptr, "trim_extrude_mode")); /* If the cursor was not over the mesh, force the orientation to view. */ if (!sgcontext->ss->gesture_initial_hit) { @@ -1453,7 +1458,7 @@ static void sculpt_trim_gesture_operator_properties(wmOperatorType *ot) prop_trim_operation_types, SCULPT_GESTURE_TRIM_DIFFERENCE, "Trim Mode", - NULL); + nullptr); RNA_def_boolean( ot->srna, "use_cursor_depth", @@ -1465,20 +1470,20 @@ static void sculpt_trim_gesture_operator_properties(wmOperatorType *ot) prop_trim_orientation_types, SCULPT_GESTURE_TRIM_ORIENTATION_VIEW, "Shape Orientation", - NULL); + nullptr); RNA_def_enum(ot->srna, "trim_extrude_mode", prop_trim_extrude_modes, SCULPT_GESTURE_TRIM_EXTRUDE_FIXED, "Extrude Mode", - NULL); + nullptr); } /* Project Gesture Operation. */ -typedef struct SculptGestureProjectOperation { +struct SculptGestureProjectOperation { SculptGestureOperation operation; -} SculptGestureProjectOperation; +}; static void sculpt_gesture_project_begin(bContext *C, SculptGestureContext *sgcontext) { @@ -1488,9 +1493,9 @@ static void sculpt_gesture_project_begin(bContext *C, SculptGestureContext *sgco static void project_line_gesture_apply_task_cb(void *__restrict userdata, const int i, - const TaskParallelTLS *__restrict UNUSED(tls)) + const TaskParallelTLS *__restrict /*tls*/) { - SculptGestureContext *sgcontext = userdata; + SculptGestureContext *sgcontext = static_cast(userdata); PBVHNode *node = sgcontext->nodes[i]; PBVHVertexIter vd; @@ -1526,7 +1531,7 @@ static void project_line_gesture_apply_task_cb(void *__restrict userdata, } } -static void sculpt_gesture_project_apply_for_symmetry_pass(bContext *UNUSED(C), +static void sculpt_gesture_project_apply_for_symmetry_pass(bContext * /*C*/, SculptGestureContext *sgcontext) { TaskParallelSettings settings; @@ -1558,9 +1563,10 @@ static void sculpt_gesture_project_end(bContext *C, SculptGestureContext *sgcont } static void sculpt_gesture_init_project_properties(SculptGestureContext *sgcontext, - wmOperator *UNUSED(op)) + wmOperator * /*op*/) { - sgcontext->operation = MEM_callocN(sizeof(SculptGestureFaceSetOperation), "Project Operation"); + sgcontext->operation = reinterpret_cast( + MEM_cnew(__func__)); SculptGestureProjectOperation *project_operation = (SculptGestureProjectOperation *) sgcontext->operation; @@ -1662,7 +1668,7 @@ static int sculpt_trim_gesture_box_invoke(bContext *C, wmOperator *op, const wmE SculptSession *ss = ob->sculpt; SculptCursorGeometryInfo sgi; - const float mval_fl[2] = {UNPACK2(event->mval)}; + const float mval_fl[2] = {float(event->mval[0]), float(event->mval[1])}; SCULPT_vertex_random_access_ensure(ss); ss->gesture_initial_hit = SCULPT_cursor_geometry_info_update(C, &sgi, mval_fl, false); if (ss->gesture_initial_hit) { @@ -1703,7 +1709,7 @@ static int sculpt_trim_gesture_lasso_invoke(bContext *C, wmOperator *op, const w SculptSession *ss = ob->sculpt; SculptCursorGeometryInfo sgi; - const float mval_fl[2] = {UNPACK2(event->mval)}; + const float mval_fl[2] = {float(event->mval[0]), float(event->mval[1])}; SCULPT_vertex_random_access_ensure(ss); ss->gesture_initial_hit = SCULPT_cursor_geometry_info_update(C, &sgi, mval_fl, false); if (ss->gesture_initial_hit) { diff --git a/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c b/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.cc similarity index 87% rename from source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c rename to source/blender/editors/sculpt_paint/paint_vertex_weight_ops.cc index 816e779cd06..1e6a70c8bb2 100644 --- a/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c +++ b/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.cc @@ -52,34 +52,35 @@ struct WPaintPrev { /* previous vertex weights */ - struct MDeformVert *wpaint_prev; + MDeformVert *wpaint_prev; /* allocation size of prev buffers */ int tot; }; -static void wpaint_prev_init(struct WPaintPrev *wpp) +static void wpaint_prev_init(WPaintPrev *wpp) { - wpp->wpaint_prev = NULL; + wpp->wpaint_prev = nullptr; wpp->tot = 0; } -static void wpaint_prev_create(struct WPaintPrev *wpp, MDeformVert *dverts, int dcount) +static void wpaint_prev_create(WPaintPrev *wpp, MDeformVert *dverts, int dcount) { wpaint_prev_init(wpp); if (dverts && dcount) { - wpp->wpaint_prev = MEM_mallocN(sizeof(MDeformVert) * dcount, "wpaint prev"); + wpp->wpaint_prev = static_cast( + MEM_malloc_arrayN(dcount, sizeof(MDeformVert), __func__)); wpp->tot = dcount; BKE_defvert_array_copy(wpp->wpaint_prev, dverts, dcount); } } -static void wpaint_prev_destroy(struct WPaintPrev *wpp) +static void wpaint_prev_destroy(WPaintPrev *wpp) { if (wpp->wpaint_prev) { BKE_defvert_array_free(wpp->wpaint_prev, wpp->tot); } - wpp->wpaint_prev = NULL; + wpp->wpaint_prev = nullptr; wpp->tot = 0; } @@ -102,7 +103,7 @@ static int weight_from_bones_exec(bContext *C, wmOperator *op) Scene *scene = CTX_data_scene(C); Object *ob = CTX_data_active_object(C); Object *armob = BKE_modifiers_is_deformed_by_armature(ob); - Mesh *me = ob->data; + Mesh *me = static_cast(ob->data); int type = RNA_enum_get(op->ptr, "type"); ED_object_vgroup_calc_from_armature( @@ -124,7 +125,7 @@ void PAINT_OT_weight_from_bones(wmOperatorType *ot) 0, "From Envelopes", "Weights from envelopes with user defined radius"}, - {0, NULL, 0, NULL, NULL}, + {0, nullptr, 0, nullptr, nullptr}, }; /* identifiers */ @@ -203,7 +204,7 @@ static int weight_sample_invoke(bContext *C, wmOperator *op, const wmEvent *even float vgroup_weight = BKE_defvert_find_weight(&dvert[v_idx_best], vgroup_active); const int defbase_tot = BLI_listbase_count(&me->vertex_group_names); bool use_lock_relative = ts->wpaint_lock_relative; - bool *defbase_locked = NULL, *defbase_unlocked = NULL; + bool *defbase_locked = nullptr, *defbase_unlocked = nullptr; if (use_lock_relative) { defbase_locked = BKE_object_defgroup_lock_flags_get(vc.obact, defbase_tot); @@ -257,7 +258,7 @@ static int weight_sample_invoke(bContext *C, wmOperator *op, const wmEvent *even if (changed) { /* not really correct since the brush didn't change, but redraws the toolbar */ - WM_main_add_notifier(NC_BRUSH | NA_EDITED, NULL); /* ts->wpaint->paint.brush */ + WM_main_add_notifier(NC_BRUSH | NA_EDITED, nullptr); /* ts->wpaint->paint.brush */ return OPERATOR_FINISHED; } @@ -303,8 +304,8 @@ static bool weight_paint_sample_enum_itemf__helper(const MDeformVert *dvert, return found; } static const EnumPropertyItem *weight_paint_sample_enum_itemf(bContext *C, - PointerRNA *UNUSED(ptr), - PropertyRNA *UNUSED(prop), + PointerRNA * /*ptr*/, + PropertyRNA * /*prop*/, bool *r_free) { if (C) { @@ -323,7 +324,7 @@ static const EnumPropertyItem *weight_paint_sample_enum_itemf(bContext *C, if (me && dverts && vc.v3d && vc.rv3d && me->vertex_group_names.first) { const int defbase_tot = BLI_listbase_count(&me->vertex_group_names); const bool use_vert_sel = (me->editflag & ME_EDIT_PAINT_VERT_SEL) != 0; - int *groups = MEM_callocN(defbase_tot * sizeof(int), "groups"); + int *groups = static_cast(MEM_callocN(defbase_tot * sizeof(int), "groups")); bool found = false; uint index; @@ -357,11 +358,13 @@ static const EnumPropertyItem *weight_paint_sample_enum_itemf(bContext *C, MEM_freeN(groups); } else { - EnumPropertyItem *item = NULL, item_tmp = {0}; + EnumPropertyItem *item = nullptr, item_tmp = {0}; int totitem = 0; int i = 0; bDeformGroup *dg; - for (dg = me->vertex_group_names.first; dg && i < defbase_tot; i++, dg = dg->next) { + for (dg = static_cast(me->vertex_group_names.first); + dg && i < defbase_tot; + i++, dg = dg->next) { if (groups[i]) { item_tmp.identifier = item_tmp.name = dg->name; item_tmp.value = i; @@ -402,7 +405,7 @@ void PAINT_OT_weight_sample_group(wmOperatorType *ot) /* TODO: we could make this a menu into #OBJECT_OT_vertex_group_set_active * rather than its own operator */ - PropertyRNA *prop = NULL; + PropertyRNA *prop = nullptr; /* identifiers */ ot->name = "Weight Paint Sample Group"; @@ -434,7 +437,7 @@ void PAINT_OT_weight_sample_group(wmOperatorType *ot) /* fills in the selected faces with the current weight and vertex group */ static bool weight_paint_set(Object *ob, float paintweight) { - Mesh *me = ob->data; + Mesh *me = static_cast(ob->data); const MPoly *mp; MDeformWeight *dw, *dw_prev; int vgroup_active, vgroup_mirror = -1; @@ -448,7 +451,7 @@ static bool weight_paint_set(Object *ob, float paintweight) const MLoop *loops = BKE_mesh_loops(me); MDeformVert *dvert = BKE_mesh_deform_verts_for_write(me); - if (me->totpoly == 0 || dvert == NULL) { + if (me->totpoly == 0 || dvert == nullptr) { return false; } @@ -459,7 +462,7 @@ static bool weight_paint_set(Object *ob, float paintweight) vgroup_mirror = ED_wpaint_mirror_vgroup_ensure(ob, vgroup_active); } - struct WPaintPrev wpp; + WPaintPrev wpp; wpaint_prev_create(&wpp, dvert, me->totvert); const bool *select_vert = (const bool *)CustomData_get_layer_named( @@ -490,7 +493,7 @@ static bool weight_paint_set(Object *ob, float paintweight) if (me->symmetry & ME_SYMMETRY_X) { /* x mirror painting */ - int j = mesh_get_x_mirror_vert(ob, NULL, vidx, topology); + int j = mesh_get_x_mirror_vert(ob, nullptr, vidx, topology); if (j >= 0) { /* copy, not paint again */ if (vgroup_mirror != -1) { @@ -528,13 +531,13 @@ static bool weight_paint_set(Object *ob, float paintweight) static int weight_paint_set_exec(bContext *C, wmOperator *op) { - struct Scene *scene = CTX_data_scene(C); + Scene *scene = CTX_data_scene(C); Object *obact = CTX_data_active_object(C); ToolSettings *ts = CTX_data_tool_settings(C); Brush *brush = BKE_paint_brush(&ts->wpaint->paint); float vgroup_weight = BKE_brush_weight_get(scene, brush); - if (ED_wpaint_ensure_data(C, op->reports, WPAINT_ENSURE_MIRROR, NULL) == false) { + if (ED_wpaint_ensure_data(C, op->reports, WPAINT_ENSURE_MIRROR, nullptr) == false) { return OPERATOR_CANCELLED; } @@ -567,23 +570,25 @@ void PAINT_OT_weight_set(wmOperatorType *ot) * \{ */ /* *** VGroups Gradient *** */ -typedef struct WPGradient_vertStore { - float sco[2]; - float weight_orig; - enum { +struct WPGradient_vertStore { + enum Flag { VGRAD_STORE_NOP = 0, VGRAD_STORE_DW_EXIST = (1 << 0), VGRAD_STORE_IS_MODIFIED = (1 << 1) - } flag; -} WPGradient_vertStore; + }; + float sco[2]; + float weight_orig; + Flag flag; +}; +ENUM_OPERATORS(WPGradient_vertStore::Flag, WPGradient_vertStore::VGRAD_STORE_IS_MODIFIED); -typedef struct WPGradient_vertStoreBase { - struct WPaintPrev wpp; +struct WPGradient_vertStoreBase { + WPaintPrev wpp; WPGradient_vertStore elem[0]; -} WPGradient_vertStoreBase; +}; -typedef struct WPGradient_userData { - struct ARegion *region; +struct WPGradient_userData { + ARegion *region; Scene *scene; Mesh *me; MDeformVert *dvert; @@ -603,16 +608,17 @@ typedef struct WPGradient_userData { bool use_vgroup_restrict; short type; float weightpaint; -} WPGradient_userData; +}; static void gradientVert_update(WPGradient_userData *grad_data, int index) { WPGradient_vertStore *vs = &grad_data->vert_cache->elem[index]; /* Optionally restrict to assigned vertices only. */ - if (grad_data->use_vgroup_restrict && ((vs->flag & VGRAD_STORE_DW_EXIST) == 0)) { + if (grad_data->use_vgroup_restrict && + ((vs->flag & WPGradient_vertStore::VGRAD_STORE_DW_EXIST) == 0)) { /* In this case the vertex will never have been touched. */ - BLI_assert((vs->flag & VGRAD_STORE_IS_MODIFIED) == 0); + BLI_assert((vs->flag & WPGradient_vertStore::VGRAD_STORE_IS_MODIFIED) == 0); return; } @@ -641,12 +647,12 @@ static void gradientVert_update(WPGradient_userData *grad_data, int index) tool, vs->weight_orig, grad_data->weightpaint, alpha * grad_data->brush->alpha); CLAMP(testw, 0.0f, 1.0f); dw->weight = testw; - vs->flag |= VGRAD_STORE_IS_MODIFIED; + vs->flag |= WPGradient_vertStore::VGRAD_STORE_IS_MODIFIED; } else { MDeformVert *dv = &grad_data->dvert[index]; - if (vs->flag & VGRAD_STORE_DW_EXIST) { - /* normally we NULL check, but in this case we know it exists */ + if (vs->flag & WPGradient_vertStore::VGRAD_STORE_DW_EXIST) { + /* normally we nullptr check, but in this case we know it exists */ MDeformWeight *dw = BKE_defvert_find_index(dv, grad_data->def_nr); dw->weight = vs->weight_orig; } @@ -657,16 +663,16 @@ static void gradientVert_update(WPGradient_userData *grad_data, int index) BKE_defvert_remove_group(dv, dw); } } - vs->flag &= ~VGRAD_STORE_IS_MODIFIED; + vs->flag &= ~WPGradient_vertStore::VGRAD_STORE_IS_MODIFIED; } } static void gradientVertUpdate__mapFunc(void *userData, int index, - const float UNUSED(co[3]), - const float UNUSED(no[3])) + const float /*co*/[3], + const float /*no*/[3]) { - WPGradient_userData *grad_data = userData; + WPGradient_userData *grad_data = static_cast(userData); WPGradient_vertStore *vs = &grad_data->vert_cache->elem[index]; if (vs->sco[0] == FLT_MAX) { @@ -679,9 +685,9 @@ static void gradientVertUpdate__mapFunc(void *userData, static void gradientVertInit__mapFunc(void *userData, int index, const float co[3], - const float UNUSED(no[3])) + const float /*no*/[3]) { - WPGradient_userData *grad_data = userData; + WPGradient_userData *grad_data = static_cast(userData); WPGradient_vertStore *vs = &grad_data->vert_cache->elem[index]; if (grad_data->use_select && (grad_data->select_vert && !grad_data->select_vert[index])) { @@ -709,11 +715,11 @@ static void gradientVertInit__mapFunc(void *userData, const MDeformWeight *dw = BKE_defvert_find_index(dv, grad_data->def_nr); if (dw) { vs->weight_orig = dw->weight; - vs->flag = VGRAD_STORE_DW_EXIST; + vs->flag = WPGradient_vertStore::VGRAD_STORE_DW_EXIST; } else { vs->weight_orig = 0.0f; - vs->flag = VGRAD_STORE_NOP; + vs->flag = WPGradient_vertStore::VGRAD_STORE_NOP; } BLI_BITMAP_ENABLE(grad_data->vert_visit, index); gradientVert_update(grad_data, index); @@ -721,8 +727,9 @@ static void gradientVertInit__mapFunc(void *userData, static int paint_weight_gradient_modal(bContext *C, wmOperator *op, const wmEvent *event) { - wmGesture *gesture = op->customdata; - WPGradient_vertStoreBase *vert_cache = gesture->user_data.data; + wmGesture *gesture = static_cast(op->customdata); + WPGradient_vertStoreBase *vert_cache = static_cast( + gesture->user_data.data); int ret = WM_gesture_straightline_modal(C, op, event); if (ret & OPERATOR_RUNNING_MODAL) { @@ -736,8 +743,8 @@ static int paint_weight_gradient_modal(bContext *C, wmOperator *op, const wmEven if (ret & OPERATOR_CANCELLED) { Object *ob = CTX_data_active_object(C); - if (vert_cache != NULL) { - Mesh *me = ob->data; + if (vert_cache != nullptr) { + Mesh *me = static_cast(ob->data); if (vert_cache->wpp.wpaint_prev) { MDeformVert *dvert = BKE_mesh_deform_verts_for_write(me); BKE_defvert_array_free_elems(dvert, me->totvert); @@ -760,27 +767,27 @@ static int paint_weight_gradient_modal(bContext *C, wmOperator *op, const wmEven static int paint_weight_gradient_exec(bContext *C, wmOperator *op) { - wmGesture *gesture = op->customdata; + wmGesture *gesture = static_cast(op->customdata); WPGradient_vertStoreBase *vert_cache; - struct ARegion *region = CTX_wm_region(C); + ARegion *region = CTX_wm_region(C); Scene *scene = CTX_data_scene(C); Object *ob = CTX_data_active_object(C); - Mesh *me = ob->data; + Mesh *me = static_cast(ob->data); MDeformVert *dverts = BKE_mesh_deform_verts_for_write(me); int x_start = RNA_int_get(op->ptr, "xstart"); int y_start = RNA_int_get(op->ptr, "ystart"); int x_end = RNA_int_get(op->ptr, "xend"); int y_end = RNA_int_get(op->ptr, "yend"); - const float sco_start[2] = {x_start, y_start}; - const float sco_end[2] = {x_end, y_end}; - const bool is_interactive = (gesture != NULL); + const float sco_start[2] = {float(x_start), float(y_start)}; + const float sco_end[2] = {float(x_end), float(y_end)}; + const bool is_interactive = (gesture != nullptr); Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C); - WPGradient_userData data = {NULL}; + WPGradient_userData data = {nullptr}; if (is_interactive) { - if (gesture->user_data.data == NULL) { + if (gesture->user_data.data == nullptr) { gesture->user_data.data = MEM_mallocN(sizeof(WPGradient_vertStoreBase) + (sizeof(WPGradient_vertStore) * me->totvert), __func__); @@ -796,21 +803,22 @@ static int paint_weight_gradient_exec(bContext *C, wmOperator *op) } } - vert_cache = gesture->user_data.data; + vert_cache = static_cast(gesture->user_data.data); } else { - if (ED_wpaint_ensure_data(C, op->reports, 0, NULL) == false) { + if (ED_wpaint_ensure_data(C, op->reports, eWPaintFlag(0), nullptr) == false) { return OPERATOR_CANCELLED; } data.is_init = true; - vert_cache = MEM_mallocN( - sizeof(WPGradient_vertStoreBase) + (sizeof(WPGradient_vertStore) * me->totvert), __func__); + vert_cache = static_cast(MEM_mallocN( + sizeof(WPGradient_vertStoreBase) + (sizeof(WPGradient_vertStore) * me->totvert), + __func__)); } data.region = region; data.scene = scene; - data.me = ob->data; + data.me = me; data.dvert = dverts; data.select_vert = (const bool *)CustomData_get_layer_named( &me->vdata, CD_PROP_BOOL, ".select_vert"); @@ -820,13 +828,13 @@ static int paint_weight_gradient_exec(bContext *C, wmOperator *op) data.def_nr = BKE_object_defgroup_active_index_get(ob) - 1; data.use_select = (me->editflag & (ME_EDIT_PAINT_FACE_SEL | ME_EDIT_PAINT_VERT_SEL)) != 0; data.vert_cache = vert_cache; - data.vert_visit = NULL; + data.vert_visit = nullptr; data.type = RNA_enum_get(op->ptr, "type"); { ToolSettings *ts = CTX_data_tool_settings(C); VPaint *wp = ts->wpaint; - struct Brush *brush = BKE_paint_brush(&wp->paint); + Brush *brush = BKE_paint_brush(&wp->paint); BKE_curvemapping_init(brush->curve); @@ -835,7 +843,7 @@ static int paint_weight_gradient_exec(bContext *C, wmOperator *op) data.use_vgroup_restrict = (ts->wpaint->flag & VP_FLAG_VGROUP_RESTRICT) != 0; } - ED_view3d_init_mats_rv3d(ob, region->regiondata); + ED_view3d_init_mats_rv3d(ob, static_cast(region->regiondata)); Scene *scene_eval = DEG_get_evaluated_scene(depsgraph); Object *ob_eval = DEG_get_evaluated_object(depsgraph, ob); @@ -851,7 +859,7 @@ static int paint_weight_gradient_exec(bContext *C, wmOperator *op) BKE_mesh_foreach_mapped_vert(me_eval, gradientVertInit__mapFunc, &data, MESH_FOREACH_NOP); MEM_freeN(data.vert_visit); - data.vert_visit = NULL; + data.vert_visit = nullptr; } else { BKE_mesh_foreach_mapped_vert(me_eval, gradientVertUpdate__mapFunc, &data, MESH_FOREACH_NOP); @@ -867,10 +875,10 @@ static int paint_weight_gradient_exec(bContext *C, wmOperator *op) if (scene->toolsettings->auto_normalize) { const int vgroup_num = BLI_listbase_count(&me->vertex_group_names); bool *vgroup_validmap = BKE_object_defgroup_validmap_get(ob, vgroup_num); - if (vgroup_validmap != NULL) { + if (vgroup_validmap != nullptr) { MDeformVert *dvert = dverts; for (int i = 0; i < me->totvert; i++) { - if ((data.vert_cache->elem[i].flag & VGRAD_STORE_IS_MODIFIED) != 0) { + if ((data.vert_cache->elem[i].flag & WPGradient_vertStore::VGRAD_STORE_IS_MODIFIED) != 0) { BKE_defvert_normalize_lock_single(&dvert[i], vgroup_validmap, vgroup_num, data.def_nr); } } @@ -885,17 +893,17 @@ static int paint_weight_gradient_invoke(bContext *C, wmOperator *op, const wmEve { int ret; - if (ED_wpaint_ensure_data(C, op->reports, 0, NULL) == false) { + if (ED_wpaint_ensure_data(C, op->reports, eWPaintFlag(0), nullptr) == false) { return OPERATOR_CANCELLED; } ret = WM_gesture_straightline_invoke(C, op, event); if (ret & OPERATOR_RUNNING_MODAL) { - struct ARegion *region = CTX_wm_region(C); + ARegion *region = CTX_wm_region(C); if (region->regiontype == RGN_TYPE_WINDOW) { /* TODO: hard-coded, extend `WM_gesture_straightline_*`. */ if (event->type == LEFTMOUSE && event->val == KM_PRESS) { - wmGesture *gesture = op->customdata; + wmGesture *gesture = static_cast(op->customdata); gesture->is_active = true; } } @@ -909,7 +917,7 @@ void PAINT_OT_weight_gradient(wmOperatorType *ot) static const EnumPropertyItem gradient_types[] = { {WPAINT_GRADIENT_TYPE_LINEAR, "LINEAR", 0, "Linear", ""}, {WPAINT_GRADIENT_TYPE_RADIAL, "RADIAL", 0, "Radial", ""}, - {0, NULL, 0, NULL, NULL}, + {0, nullptr, 0, nullptr, nullptr}, }; PropertyRNA *prop; diff --git a/source/blender/editors/sculpt_paint/sculpt_expand.c b/source/blender/editors/sculpt_paint/sculpt_expand.cc similarity index 94% rename from source/blender/editors/sculpt_paint/sculpt_expand.c rename to source/blender/editors/sculpt_paint/sculpt_expand.cc index 028ac847529..532466ab426 100644 --- a/source/blender/editors/sculpt_paint/sculpt_expand.c +++ b/source/blender/editors/sculpt_paint/sculpt_expand.cc @@ -5,6 +5,9 @@ * \ingroup edsculpt */ +#include +#include + #include "MEM_guardedalloc.h" #include "BLI_linklist_stack.h" @@ -48,9 +51,6 @@ #include "bmesh.h" -#include -#include - /* Sculpt Expand. */ /* Operator for creating selections and patterns in Sculpt Mode. Expand can create masks, face sets * and fill vertex colors. */ @@ -421,8 +421,8 @@ static PBVHVertRef sculpt_expand_get_vertex_index_for_symmetry_pass( } else { float location[3]; - flip_v3_v3(location, SCULPT_vertex_co_get(ss, original_vertex), symm_it); - symm_vertex = SCULPT_nearest_vertex_get(NULL, ob, location, FLT_MAX, false); + flip_v3_v3(location, SCULPT_vertex_co_get(ss, original_vertex), ePaintSymmetryFlags(symm_it)); + symm_vertex = SCULPT_nearest_vertex_get(nullptr, ob, location, FLT_MAX, false); } return symm_vertex; } @@ -440,12 +440,12 @@ static float *sculpt_expand_geodesic_falloff_create(Sculpt *sd, Object *ob, cons * Topology: Initializes the falloff using a flood-fill operation, * increasing the falloff value by 1 when visiting a new vertex. */ -typedef struct ExpandFloodFillData { +struct ExpandFloodFillData { float original_normal[3]; float edge_sensitivity; float *dists; float *edge_factor; -} ExpandFloodFillData; +}; static bool expand_topology_floodfill_cb( SculptSession *ss, PBVHVertRef from_v, PBVHVertRef to_v, bool is_duplicate, void *userdata) @@ -453,7 +453,7 @@ static bool expand_topology_floodfill_cb( int from_v_i = BKE_pbvh_vertex_to_index(ss->pbvh, from_v); int to_v_i = BKE_pbvh_vertex_to_index(ss->pbvh, to_v); - ExpandFloodFillData *data = userdata; + ExpandFloodFillData *data = static_cast(userdata); if (!is_duplicate) { const float to_it = data->dists[from_v_i] + 1.0f; data->dists[to_v_i] = to_it; @@ -468,7 +468,7 @@ static float *sculpt_expand_topology_falloff_create(Sculpt *sd, Object *ob, cons { SculptSession *ss = ob->sculpt; const int totvert = SCULPT_vertex_count_get(ss); - float *dists = MEM_calloc_arrayN(totvert, sizeof(float), "topology dist"); + float *dists = static_cast(MEM_calloc_arrayN(totvert, sizeof(float), __func__)); SculptFloodFill flood; SCULPT_floodfill_init(ss, &flood); @@ -494,7 +494,7 @@ static bool mask_expand_normal_floodfill_cb( int from_v_i = BKE_pbvh_vertex_to_index(ss->pbvh, from_v); int to_v_i = BKE_pbvh_vertex_to_index(ss->pbvh, to_v); - ExpandFloodFillData *data = userdata; + ExpandFloodFillData *data = static_cast(userdata); if (!is_duplicate) { float current_normal[3], prev_normal[3]; SCULPT_vertex_normal_get(ss, to_v, current_normal); @@ -521,8 +521,8 @@ static float *sculpt_expand_normal_falloff_create(Sculpt *sd, { SculptSession *ss = ob->sculpt; const int totvert = SCULPT_vertex_count_get(ss); - float *dists = MEM_malloc_arrayN(totvert, sizeof(float), "normal dist"); - float *edge_factor = MEM_callocN(sizeof(float) * totvert, "mask edge factor"); + float *dists = static_cast(MEM_malloc_arrayN(totvert, sizeof(float), __func__)); + float *edge_factor = static_cast(MEM_callocN(sizeof(float) * totvert, __func__)); for (int i = 0; i < totvert; i++) { edge_factor[i] = 1.0f; } @@ -568,7 +568,7 @@ static float *sculpt_expand_spherical_falloff_create(Object *ob, const PBVHVertR SculptSession *ss = ob->sculpt; const int totvert = SCULPT_vertex_count_get(ss); - float *dists = MEM_malloc_arrayN(totvert, sizeof(float), "spherical dist"); + float *dists = static_cast(MEM_malloc_arrayN(totvert, sizeof(float), __func__)); for (int i = 0; i < totvert; i++) { dists[i] = FLT_MAX; } @@ -602,7 +602,7 @@ static float *sculpt_expand_boundary_topology_falloff_create(Object *ob, const P { SculptSession *ss = ob->sculpt; const int totvert = SCULPT_vertex_count_get(ss); - float *dists = MEM_calloc_arrayN(totvert, sizeof(float), "spherical dist"); + float *dists = static_cast(MEM_calloc_arrayN(totvert, sizeof(float), __func__)); BLI_bitmap *visited_verts = BLI_BITMAP_NEW(totvert, "visited verts"); GSQueue *queue = BLI_gsqueue_new(sizeof(PBVHVertRef)); @@ -616,7 +616,7 @@ static float *sculpt_expand_boundary_topology_falloff_create(Object *ob, const P const PBVHVertRef symm_vertex = sculpt_expand_get_vertex_index_for_symmetry_pass( ob, symm_it, v); - SculptBoundary *boundary = SCULPT_boundary_data_init(ob, NULL, symm_vertex, FLT_MAX); + SculptBoundary *boundary = SCULPT_boundary_data_init(ob, nullptr, symm_vertex, FLT_MAX); if (!boundary) { continue; } @@ -666,7 +666,7 @@ static float *sculpt_expand_diagonals_falloff_create(Object *ob, const PBVHVertR { SculptSession *ss = ob->sculpt; const int totvert = SCULPT_vertex_count_get(ss); - float *dists = MEM_calloc_arrayN(totvert, sizeof(float), "spherical dist"); + float *dists = static_cast(MEM_calloc_arrayN(totvert, sizeof(float), __func__)); /* This algorithm uses mesh data (polys and loops), so this falloff type can't be initialized for * Multires. It also does not make sense to implement it for dyntopo as the result will be the @@ -822,11 +822,11 @@ static void sculpt_expand_mesh_face_falloff_from_vertex_falloff(SculptSession *s Mesh *mesh, ExpandCache *expand_cache) { - BLI_assert(expand_cache->vert_falloff != NULL); + BLI_assert(expand_cache->vert_falloff != nullptr); if (!expand_cache->face_falloff) { - expand_cache->face_falloff = MEM_malloc_arrayN( - mesh->totpoly, sizeof(float), "face falloff factors"); + expand_cache->face_falloff = static_cast( + MEM_malloc_arrayN(mesh->totpoly, sizeof(float), __func__)); } if (BKE_pbvh_type(ss->pbvh) == PBVH_FACES) { @@ -869,7 +869,7 @@ static void sculpt_expand_geodesics_from_state_boundary(Object *ob, MEM_SAFE_FREE(expand_cache->face_falloff); expand_cache->vert_falloff = SCULPT_geodesic_distances_create(ob, initial_verts, FLT_MAX); - BLI_gset_free(initial_verts, NULL); + BLI_gset_free(initial_verts, nullptr); } /** @@ -886,7 +886,7 @@ static void sculpt_expand_topology_from_state_boundary(Object *ob, SculptSession *ss = ob->sculpt; const int totvert = SCULPT_vertex_count_get(ss); - float *dists = MEM_calloc_arrayN(totvert, sizeof(float), "topology dist"); + float *dists = static_cast(MEM_calloc_arrayN(totvert, sizeof(float), __func__)); BLI_bitmap *boundary_verts = sculpt_expand_boundary_from_enabled(ss, enabled_verts, false); SculptFloodFill flood; @@ -939,7 +939,8 @@ static void sculpt_expand_resursion_step_add(Object *ob, sculpt_expand_update_max_vert_falloff_value(ss, expand_cache); if (expand_cache->target == SCULPT_EXPAND_TARGET_FACE_SETS) { - sculpt_expand_mesh_face_falloff_from_vertex_falloff(ss, ob->data, expand_cache); + sculpt_expand_mesh_face_falloff_from_vertex_falloff( + ss, static_cast(ob->data), expand_cache); sculpt_expand_update_max_face_falloff_factor(ss, expand_cache); } @@ -1069,7 +1070,8 @@ static void sculpt_expand_falloff_factors_from_vertex_and_symm_create( /* Update max falloff values and propagate to base mesh faces if needed. */ sculpt_expand_update_max_vert_falloff_value(ss, expand_cache); if (expand_cache->target == SCULPT_EXPAND_TARGET_FACE_SETS) { - sculpt_expand_mesh_face_falloff_from_vertex_falloff(ss, ob->data, expand_cache); + sculpt_expand_mesh_face_falloff_from_vertex_falloff( + ss, static_cast(ob->data), expand_cache); sculpt_expand_update_max_face_falloff_factor(ss, expand_cache); } } @@ -1113,7 +1115,7 @@ static void sculpt_expand_snap_initialize_from_enabled(SculptSession *ss, } if (any_disabled) { const int face_set = expand_cache->original_face_sets[p]; - BLI_gset_remove(expand_cache->snap_enabled_face_sets, POINTER_FROM_INT(face_set), NULL); + BLI_gset_remove(expand_cache->snap_enabled_face_sets, POINTER_FROM_INT(face_set), nullptr); } } @@ -1128,7 +1130,7 @@ static void sculpt_expand_snap_initialize_from_enabled(SculptSession *ss, static void sculpt_expand_cache_data_free(ExpandCache *expand_cache) { if (expand_cache->snap_enabled_face_sets) { - BLI_gset_free(expand_cache->snap_enabled_face_sets, NULL); + BLI_gset_free(expand_cache->snap_enabled_face_sets, nullptr); } MEM_SAFE_FREE(expand_cache->nodes); MEM_SAFE_FREE(expand_cache->vert_falloff); @@ -1143,9 +1145,9 @@ static void sculpt_expand_cache_data_free(ExpandCache *expand_cache) static void sculpt_expand_cache_free(SculptSession *ss) { sculpt_expand_cache_data_free(ss->expand_cache); - /* Needs to be set to NULL as the paint cursor relies on checking this pointer detecting if an + /* Needs to be set to nullptr as the paint cursor relies on checking this pointer detecting if an * expand operation is running. */ - ss->expand_cache = NULL; + ss->expand_cache = nullptr; } /** @@ -1155,7 +1157,7 @@ static void sculpt_expand_restore_face_set_data(SculptSession *ss, ExpandCache * { PBVHNode **nodes; int totnode; - BKE_pbvh_search_gather(ss->pbvh, NULL, NULL, &nodes, &totnode); + BKE_pbvh_search_gather(ss->pbvh, nullptr, nullptr, &nodes, &totnode); for (int n = 0; n < totnode; n++) { PBVHNode *node = nodes[n]; BKE_pbvh_node_mark_redraw(node); @@ -1170,7 +1172,7 @@ static void sculpt_expand_restore_color_data(SculptSession *ss, ExpandCache *exp { PBVHNode **nodes; int totnode; - BKE_pbvh_search_gather(ss->pbvh, NULL, NULL, &nodes, &totnode); + BKE_pbvh_search_gather(ss->pbvh, nullptr, nullptr, &nodes, &totnode); for (int n = 0; n < totnode; n++) { PBVHNode *node = nodes[n]; PBVHVertexIter vd; @@ -1187,7 +1189,7 @@ static void sculpt_expand_restore_mask_data(SculptSession *ss, ExpandCache *expa { PBVHNode **nodes; int totnode; - BKE_pbvh_search_gather(ss->pbvh, NULL, NULL, &nodes, &totnode); + BKE_pbvh_search_gather(ss->pbvh, nullptr, nullptr, &nodes, &totnode); for (int n = 0; n < totnode; n++) { PBVHNode *node = nodes[n]; PBVHVertexIter vd; @@ -1232,7 +1234,7 @@ static void sculpt_expand_restore_original_state(bContext *C, /** * Cancel operator callback. */ -static void sculpt_expand_cancel(bContext *C, wmOperator *UNUSED(op)) +static void sculpt_expand_cancel(bContext *C, wmOperator * /*op*/) { Object *ob = CTX_data_active_object(C); SculptSession *ss = ob->sculpt; @@ -1250,9 +1252,9 @@ static void sculpt_expand_cancel(bContext *C, wmOperator *UNUSED(op)) */ static void sculpt_expand_mask_update_task_cb(void *__restrict userdata, const int i, - const TaskParallelTLS *__restrict UNUSED(tls)) + const TaskParallelTLS *__restrict /*tls*/) { - SculptThreadedTaskData *data = userdata; + SculptThreadedTaskData *data = static_cast(userdata); SculptSession *ss = data->ob->sculpt; PBVHNode *node = data->nodes[i]; ExpandCache *expand_cache = ss->expand_cache; @@ -1329,9 +1331,9 @@ static void sculpt_expand_face_sets_update(SculptSession *ss, ExpandCache *expan */ static void sculpt_expand_colors_update_task_cb(void *__restrict userdata, const int i, - const TaskParallelTLS *__restrict UNUSED(tls)) + const TaskParallelTLS *__restrict /*tls*/) { - SculptThreadedTaskData *data = userdata; + SculptThreadedTaskData *data = static_cast(userdata); SculptSession *ss = data->ob->sculpt; PBVHNode *node = data->nodes[i]; ExpandCache *expand_cache = ss->expand_cache; @@ -1362,7 +1364,7 @@ static void sculpt_expand_colors_update_task_cb(void *__restrict userdata, IMB_blend_color_float(final_color, expand_cache->original_colors[vd.index], final_fill_color, - expand_cache->blend_mode); + IMB_BlendMode(expand_cache->blend_mode)); if (equals_v4v4(initial_color, final_color)) { continue; @@ -1405,8 +1407,10 @@ static void sculpt_expand_original_state_store(Object *ob, ExpandCache *expand_c const int totface = ss->totfaces; /* Face Sets are always stored as they are needed for snapping. */ - expand_cache->initial_face_sets = MEM_malloc_arrayN(totface, sizeof(int), "initial face set"); - expand_cache->original_face_sets = MEM_malloc_arrayN(totface, sizeof(int), "original face set"); + expand_cache->initial_face_sets = static_cast( + MEM_malloc_arrayN(totface, sizeof(int), "initial face set")); + expand_cache->original_face_sets = static_cast( + MEM_malloc_arrayN(totface, sizeof(int), "original face set")); if (ss->face_sets) { for (int i = 0; i < totface; i++) { expand_cache->initial_face_sets[i] = ss->face_sets[i]; @@ -1419,7 +1423,8 @@ static void sculpt_expand_original_state_store(Object *ob, ExpandCache *expand_c } if (expand_cache->target == SCULPT_EXPAND_TARGET_MASK) { - expand_cache->original_mask = MEM_malloc_arrayN(totvert, sizeof(float), "initial mask"); + expand_cache->original_mask = static_cast( + MEM_malloc_arrayN(totvert, sizeof(float), "initial mask")); for (int i = 0; i < totvert; i++) { PBVHVertRef vertex = BKE_pbvh_index_to_vertex(ss->pbvh, i); @@ -1428,7 +1433,8 @@ static void sculpt_expand_original_state_store(Object *ob, ExpandCache *expand_c } if (expand_cache->target == SCULPT_EXPAND_TARGET_COLORS) { - expand_cache->original_colors = MEM_malloc_arrayN(totvert, sizeof(float[4]), "initial colors"); + expand_cache->original_colors = static_cast( + MEM_malloc_arrayN(totvert, sizeof(float[4]), "initial colors")); for (int i = 0; i < totvert; i++) { PBVHVertRef vertex = BKE_pbvh_index_to_vertex(ss->pbvh, i); @@ -1483,11 +1489,10 @@ static void sculpt_expand_update_for_vertex(bContext *C, Object *ob, const PBVHV } /* Update the mesh sculpt data. */ - SculptThreadedTaskData data = { - .sd = sd, - .ob = ob, - .nodes = expand_cache->nodes, - }; + SculptThreadedTaskData data{}; + data.sd = sd; + data.ob = ob; + data.nodes = expand_cache->nodes; TaskParallelSettings settings; BKE_pbvh_parallel_range_settings(&settings, true, expand_cache->totnode); @@ -1597,7 +1602,7 @@ static void sculpt_expand_finish(bContext *C) /* Tag all nodes to redraw to avoid artifacts after the fast partial updates. */ PBVHNode **nodes; int totnode; - BKE_pbvh_search_gather(ss->pbvh, NULL, NULL, &nodes, &totnode); + BKE_pbvh_search_gather(ss->pbvh, nullptr, nullptr, &nodes, &totnode); for (int n = 0; n < totnode; n++) { BKE_pbvh_node_mark_update_mask(nodes[n]); } @@ -1616,7 +1621,7 @@ static void sculpt_expand_finish(bContext *C) } sculpt_expand_cache_free(ss); - ED_workspace_status_text(C, NULL); + ED_workspace_status_text(C, nullptr); } /** @@ -1640,8 +1645,8 @@ static void sculpt_expand_find_active_connected_components_from_vert( const PBVHVertRef symm_vertex = sculpt_expand_get_vertex_index_for_symmetry_pass( ob, symm_it, initial_vertex); - expand_cache->active_connected_islands[(int)symm_it] = SCULPT_vertex_island_get( - ss, symm_vertex); + expand_cache->active_connected_islands[int(symm_it)] = SCULPT_vertex_island_get(ss, + symm_vertex); } } @@ -1679,7 +1684,8 @@ static void sculpt_expand_set_initial_components_for_mouse(bContext *C, expand_cache->next_face_set = SCULPT_active_face_set_get(ss); } else { - expand_cache->next_face_set = ED_sculpt_face_sets_find_next_available_id(ob->data); + expand_cache->next_face_set = ED_sculpt_face_sets_find_next_available_id( + static_cast(ob->data)); } } @@ -1699,7 +1705,7 @@ static void sculpt_expand_move_propagation_origin(bContext *C, { Sculpt *sd = CTX_data_tool_settings(C)->sculpt; - const float mval_fl[2] = {UNPACK2(event->mval)}; + const float mval_fl[2] = {float(event->mval[0]), float(event->mval[1])}; float move_disp[2]; sub_v2_v2v2(move_disp, mval_fl, expand_cache->initial_mouse_move); @@ -1767,7 +1773,7 @@ static int sculpt_expand_modal(bContext *C, wmOperator *op, const wmEvent *event sculpt_expand_ensure_sculptsession_data(ob); /* Update and get the active vertex (and face) from the cursor. */ - const float mval_fl[2] = {UNPACK2(event->mval)}; + const float mval_fl[2] = {float(event->mval[0]), float(event->mval[1])}; const PBVHVertRef target_expand_vertex = sculpt_expand_target_vertex_update_and_get( C, ob, mval_fl); @@ -1802,8 +1808,8 @@ static int sculpt_expand_modal(bContext *C, wmOperator *op, const wmEvent *event if (expand_cache->snap) { expand_cache->snap = false; if (expand_cache->snap_enabled_face_sets) { - BLI_gset_free(expand_cache->snap_enabled_face_sets, NULL); - expand_cache->snap_enabled_face_sets = NULL; + BLI_gset_free(expand_cache->snap_enabled_face_sets, nullptr); + expand_cache->snap_enabled_face_sets = nullptr; } } else { @@ -1916,7 +1922,7 @@ static int sculpt_expand_modal(bContext *C, wmOperator *op, const wmEvent *event case SCULPT_EXPAND_MODAL_TEXTURE_DISTORTION_INCREASE: { if (expand_cache->texture_distortion_strength == 0.0f) { const MTex *mask_tex = BKE_brush_mask_texture_get(expand_cache->brush, OB_MODE_SCULPT); - if (mask_tex->tex == NULL) { + if (mask_tex->tex == nullptr) { BKE_report(op->reports, RPT_WARNING, "Active brush does not contain any texture to distort the expand boundary"); @@ -2067,7 +2073,7 @@ static void sculpt_expand_cache_initial_config_set(bContext *C, expand_cache->preserve = RNA_boolean_get(op->ptr, "use_mask_preserve"); expand_cache->auto_mask = RNA_boolean_get(op->ptr, "use_auto_mask"); expand_cache->falloff_gradient = RNA_boolean_get(op->ptr, "use_falloff_gradient"); - expand_cache->target = RNA_enum_get(op->ptr, "target"); + expand_cache->target = eSculptExpandTargetType(RNA_enum_get(op->ptr, "target")); expand_cache->modify_active_face_set = RNA_boolean_get(op->ptr, "use_modify_active"); expand_cache->reposition_pivot = RNA_boolean_get(op->ptr, "use_reposition_pivot"); expand_cache->max_geodesic_move_preview = RNA_int_get(op->ptr, "max_geodesic_move_preview"); @@ -2099,7 +2105,7 @@ static void sculpt_expand_undo_push(Object *ob, ExpandCache *expand_cache) SculptSession *ss = ob->sculpt; PBVHNode **nodes; int totnode; - BKE_pbvh_search_gather(ss->pbvh, NULL, NULL, &nodes, &totnode); + BKE_pbvh_search_gather(ss->pbvh, nullptr, nullptr, &nodes, &totnode); switch (expand_cache->target) { case SCULPT_EXPAND_TARGET_MASK: @@ -2132,7 +2138,7 @@ static int sculpt_expand_invoke(bContext *C, wmOperator *op, const wmEvent *even SCULPT_stroke_id_next(ob); /* Create and configure the Expand Cache. */ - ss->expand_cache = MEM_callocN(sizeof(ExpandCache), "expand cache"); + ss->expand_cache = MEM_cnew(__func__); sculpt_expand_cache_initial_config_set(C, op, ss->expand_cache); /* Update object. */ @@ -2168,7 +2174,7 @@ static int sculpt_expand_invoke(bContext *C, wmOperator *op, const wmEvent *even /* TODO: implement SCULPT_vertex_mask_set and use it here. */ - BKE_pbvh_search_gather(ss->pbvh, NULL, NULL, &nodes, &nodes_num); + BKE_pbvh_search_gather(ss->pbvh, nullptr, nullptr, &nodes, &nodes_num); for (int i = 0; i < nodes_num; i++) { PBVHVertexIter vd; @@ -2192,8 +2198,8 @@ static int sculpt_expand_invoke(bContext *C, wmOperator *op, const wmEvent *even return OPERATOR_CANCELLED; } + Mesh *mesh = static_cast(ob->data); if (ss->expand_cache->target == SCULPT_EXPAND_TARGET_FACE_SETS) { - Mesh *mesh = ob->data; ss->face_sets = BKE_sculpt_face_sets_ensure(mesh); } @@ -2211,12 +2217,12 @@ static int sculpt_expand_invoke(bContext *C, wmOperator *op, const wmEvent *even sculpt_expand_undo_push(ob, ss->expand_cache); /* Set the initial element for expand from the event position. */ - const float mouse[2] = {event->mval[0], event->mval[1]}; + const float mouse[2] = {float(event->mval[0]), float(event->mval[1])}; sculpt_expand_set_initial_components_for_mouse(C, ob, ss->expand_cache, mouse); /* Cache PBVH nodes. */ BKE_pbvh_search_gather( - ss->pbvh, NULL, NULL, &ss->expand_cache->nodes, &ss->expand_cache->totnode); + ss->pbvh, nullptr, nullptr, &ss->expand_cache->nodes, &ss->expand_cache->totnode); /* Store initial state. */ sculpt_expand_original_state_store(ob, ss->expand_cache); @@ -2225,12 +2231,13 @@ static int sculpt_expand_invoke(bContext *C, wmOperator *op, const wmEvent *even sculpt_expand_delete_face_set_id(ss->expand_cache->initial_face_sets, ss, ss->expand_cache, - ob->data, + mesh, ss->expand_cache->next_face_set); } /* Initialize the falloff. */ - eSculptExpandFalloffType falloff_type = RNA_enum_get(op->ptr, "falloff_type"); + eSculptExpandFalloffType falloff_type = eSculptExpandFalloffType( + RNA_enum_get(op->ptr, "falloff_type")); /* When starting from a boundary vertex, set the initial falloff to boundary. */ if (SCULPT_vertex_is_boundary(ss, ss->expand_cache->initial_active_vertex)) { @@ -2302,7 +2309,7 @@ void sculpt_expand_modal_keymap(wmKeyConfig *keyconf) 0, "Texture Distortion Decrease", ""}, - {0, NULL, 0, NULL, NULL}, + {0, nullptr, 0, nullptr, nullptr}, }; static const char *name = "Sculpt Expand Modal"; @@ -2345,14 +2352,14 @@ void SCULPT_OT_expand(wmOperatorType *ot) {SCULPT_EXPAND_FALLOFF_BOUNDARY_TOPOLOGY, "BOUNDARY_TOPOLOGY", 0, "Boundary Topology", ""}, {SCULPT_EXPAND_FALLOFF_BOUNDARY_FACE_SET, "BOUNDARY_FACE_SET", 0, "Boundary Face Set", ""}, {SCULPT_EXPAND_FALLOFF_ACTIVE_FACE_SET, "ACTIVE_FACE_SET", 0, "Active Face Set", ""}, - {0, NULL, 0, NULL, NULL}, + {0, nullptr, 0, nullptr, nullptr}, }; static EnumPropertyItem prop_sculpt_expand_target_type_items[] = { {SCULPT_EXPAND_TARGET_MASK, "MASK", 0, "Mask", ""}, {SCULPT_EXPAND_TARGET_FACE_SETS, "FACE_SETS", 0, "Face Sets", ""}, {SCULPT_EXPAND_TARGET_COLORS, "COLOR", 0, "Color", ""}, - {0, NULL, 0, NULL, NULL}, + {0, nullptr, 0, nullptr, nullptr}, }; RNA_def_enum(ot->srna, diff --git a/source/blender/editors/sculpt_paint/sculpt_geodesic.c b/source/blender/editors/sculpt_paint/sculpt_geodesic.cc similarity index 96% rename from source/blender/editors/sculpt_paint/sculpt_geodesic.c rename to source/blender/editors/sculpt_paint/sculpt_geodesic.cc index 89cf2fda27e..a8cac7dd7e5 100644 --- a/source/blender/editors/sculpt_paint/sculpt_geodesic.c +++ b/source/blender/editors/sculpt_paint/sculpt_geodesic.cc @@ -5,6 +5,9 @@ * \ingroup edsculpt */ +#include +#include + #include "MEM_guardedalloc.h" #include "BLI_linklist_stack.h" @@ -29,8 +32,6 @@ #include "bmesh.h" -#include -#include #define SCULPT_GEODESIC_VERTEX_NONE -1 /* Propagate distance from v1 and v2 to v0. */ @@ -90,7 +91,7 @@ static float *SCULPT_geodesic_mesh_create(Object *ob, const MPoly *polys = BKE_mesh_polys(mesh); const MLoop *loops = BKE_mesh_loops(mesh); - float *dists = MEM_malloc_arrayN(totvert, sizeof(float), "distances"); + float *dists = static_cast(MEM_malloc_arrayN(totvert, sizeof(float), __func__)); BLI_bitmap *edge_tag = BLI_BITMAP_NEW(totedge, "edge tag"); if (!ss->epmap) { @@ -242,7 +243,7 @@ static float *SCULPT_geodesic_fallback_create(Object *ob, GSet *initial_verts) SculptSession *ss = ob->sculpt; Mesh *mesh = BKE_object_get_original_mesh(ob); const int totvert = mesh->totvert; - float *dists = MEM_malloc_arrayN(totvert, sizeof(float), "distances"); + float *dists = static_cast(MEM_malloc_arrayN(totvert, sizeof(float), __func__)); int first_affected = SCULPT_GEODESIC_VERTEX_NONE; GSetIterator gs_iter; GSET_ITER (gs_iter, initial_verts) { @@ -279,7 +280,7 @@ float *SCULPT_geodesic_distances_create(Object *ob, GSet *initial_verts, const f return SCULPT_geodesic_fallback_create(ob, initial_verts); } BLI_assert(false); - return NULL; + return nullptr; } float *SCULPT_geodesic_from_vertex_and_symm(Sculpt *sd, @@ -300,7 +301,7 @@ float *SCULPT_geodesic_from_vertex_and_symm(Sculpt *sd, } else { float location[3]; - flip_v3_v3(location, SCULPT_vertex_co_get(ss, vertex), i); + flip_v3_v3(location, SCULPT_vertex_co_get(ss, vertex), ePaintSymmetryFlags(i)); v = SCULPT_nearest_vertex_get(sd, ob, location, FLT_MAX, false); } if (v.i != PBVH_REF_NONE) { @@ -310,7 +311,7 @@ float *SCULPT_geodesic_from_vertex_and_symm(Sculpt *sd, } float *dists = SCULPT_geodesic_distances_create(ob, initial_verts, limit_radius); - BLI_gset_free(initial_verts, NULL); + BLI_gset_free(initial_verts, nullptr); return dists; } @@ -320,6 +321,6 @@ float *SCULPT_geodesic_from_vertex(Object *ob, const PBVHVertRef vertex, const f BLI_gset_add(initial_verts, POINTER_FROM_INT(BKE_pbvh_vertex_to_index(ob->sculpt->pbvh, vertex))); float *dists = SCULPT_geodesic_distances_create(ob, initial_verts, limit_radius); - BLI_gset_free(initial_verts, NULL); + BLI_gset_free(initial_verts, nullptr); return dists; }