Commit: 9b8b4a5ab86516b9948b97928d945cd7be76a2d7 Author: Hans Goudey Date: Tue Jun 29 12:43:03 2021 -0500 Branches: refactor-vertex-group-names https://developer.blender.org/rB9b8b4a5ab86516b9948b97928d945cd7be76a2d7
Move active index to geometry =================================================================== M source/blender/blenkernel/BKE_deform.h M source/blender/blenkernel/intern/deform.c M source/blender/blenkernel/intern/object_deform.c M source/blender/draw/intern/draw_cache.c M source/blender/draw/intern/draw_cache_impl_gpencil.c M source/blender/draw/intern/draw_cache_impl_mesh.c M source/blender/editors/gpencil/gpencil_data.c M source/blender/editors/gpencil/gpencil_fill.c M source/blender/editors/gpencil/gpencil_paint.c M source/blender/editors/gpencil/gpencil_primitive.c M source/blender/editors/gpencil/gpencil_sculpt_paint.c M source/blender/editors/gpencil/gpencil_utils.c M source/blender/editors/gpencil/gpencil_weight_paint.c M source/blender/editors/mesh/editmesh_tools.c M source/blender/editors/mesh/meshtools.c M source/blender/editors/object/object_hook.c M source/blender/editors/object/object_vgroup.c M source/blender/editors/sculpt_paint/paint_vertex.c M source/blender/editors/sculpt_paint/paint_vertex_color_ops.c M source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c M source/blender/editors/sculpt_paint/paint_vertex_weight_utils.c M source/blender/editors/space_outliner/outliner_select.c M source/blender/editors/space_view3d/view3d_buttons.c M source/blender/makesdna/DNA_gpencil_types.h M source/blender/makesdna/DNA_lattice_types.h M source/blender/makesdna/DNA_mesh_types.h M source/blender/makesdna/DNA_object_types.h M source/blender/makesrna/intern/rna_object.c M source/blender/render/intern/texture_pointdensity.c =================================================================== diff --git a/source/blender/blenkernel/BKE_deform.h b/source/blender/blenkernel/BKE_deform.h index c9f01f3d2eb..3a9475e2f6c 100644 --- a/source/blender/blenkernel/BKE_deform.h +++ b/source/blender/blenkernel/BKE_deform.h @@ -41,6 +41,10 @@ struct bDeformGroup; const struct ListBase *BKE_object_defgroup_list_for_read(const struct Object *ob); struct ListBase *BKE_object_defgroup_list_for_write(struct Object *ob); +int BKE_object_defgroup_count(const struct Object *ob); +int BKE_object_defgroup_active_index_get(const struct Object *ob); +void BKE_object_defgroup_active_index_set(struct Object *ob, const int new_index); + struct bDeformGroup *BKE_object_defgroup_new(struct Object *ob, const char *name); void BKE_defgroup_copy_list(struct ListBase *outbase, const struct ListBase *inbase); struct bDeformGroup *BKE_defgroup_duplicate(const struct bDeformGroup *ingroup); diff --git a/source/blender/blenkernel/intern/deform.c b/source/blender/blenkernel/intern/deform.c index a448cf4236b..1a375c4b452 100644 --- a/source/blender/blenkernel/intern/deform.c +++ b/source/blender/blenkernel/intern/deform.c @@ -546,6 +546,61 @@ ListBase *BKE_object_defgroup_list_for_write(Object *ob) return NULL; } +int BKE_object_defgroup_count(const Object *ob) +{ + return BLI_listbase_count(BKE_object_defgroup_list_for_read(ob)); +} + +/** + * \note For historical reasons, the index starts at 1 rather than 0. + */ +int BKE_object_defgroup_active_index_get(const Object *ob) +{ + switch (ob->type) { + case OB_MESH: { + const Mesh *mesh = (const Mesh *)ob->data; + return mesh->vertex_group_active_index; + } + case OB_LATTICE: { + const Lattice *lattice = (const Lattice *)ob->data; + return lattice->vertex_group_active_index; + } + case OB_GPENCIL: { + const bGPdata *gpd = (const bGPdata *)ob->data; + return gpd->vertex_group_active_index; + } + } + BLI_assert_unreachable(); + return -1; +} + +/** + * \note For historical reasons, the index starts at 1 rather than 0. + */ +void BKE_object_defgroup_active_index_set(Object *ob, const int new_index) +{ + switch (ob->type) { + case OB_MESH: { + Mesh *mesh = (Mesh *)ob->data; + mesh->vertex_group_active_index = new_index; + break; + } + case OB_LATTICE: { + Lattice *lattice = (Lattice *)ob->data; + lattice->vertex_group_active_index = new_index; + break; + } + case OB_GPENCIL: { + bGPdata *gpd = (bGPdata *)ob->data; + gpd->vertex_group_active_index = new_index; + break; + } + default: { + BLI_assert_unreachable(); + } + } +} + /** * \note caller must free. */ @@ -1329,7 +1384,7 @@ static bool data_transfer_layersmapping_vgroups_multisrc_to_dst(ListBase *r_map, if ((idx_dst = BKE_object_defgroup_name_index(ob_dst, dg_src->name)) == -1) { if (use_create) { BKE_object_defgroup_add_name(ob_dst, dg_src->name); - idx_dst = ob_dst->actdef - 1; + idx_dst = BKE_object_defgroup_active_index_get(ob_dst) - 1; } else { /* If we are not allowed to create missing dst vgroups, just skip matching src one. */ @@ -1427,7 +1482,7 @@ bool data_transfer_layersmapping_vgroups(ListBase *r_map, return false; } } - else if ((idx_src = ob_src->actdef - 1) == -1) { + else if ((idx_src = BKE_object_defgroup_active_index_get(ob_src) - 1) == -1) { return false; } @@ -1439,14 +1494,14 @@ bool data_transfer_layersmapping_vgroups(ListBase *r_map, UNUSED_VARS_NDEBUG(dst_defbase); } else if (tolayers == DT_LAYERS_ACTIVE_DST) { - if ((idx_dst = ob_dst->actdef - 1) == -1) { + if ((idx_dst = BKE_object_defgroup_active_index_get(ob_dst) - 1) == -1) { bDeformGroup *dg_src; if (!use_create) { return true; } dg_src = BLI_findlink(src_defbase, idx_src); BKE_object_defgroup_add_name(ob_dst, dg_src->name); - idx_dst = ob_dst->actdef - 1; + idx_dst = BKE_object_defgroup_active_index_get(ob_dst) - 1; } } else if (tolayers == DT_LAYERS_INDEX_DST) { @@ -1469,7 +1524,7 @@ bool data_transfer_layersmapping_vgroups(ListBase *r_map, return true; } BKE_object_defgroup_add_name(ob_dst, dg_src->name); - idx_dst = ob_dst->actdef - 1; + idx_dst = BKE_object_defgroup_active_index_get(ob_dst) - 1; } } else { diff --git a/source/blender/blenkernel/intern/object_deform.c b/source/blender/blenkernel/intern/object_deform.c index 07d801f45c2..6659dd058db 100644 --- a/source/blender/blenkernel/intern/object_deform.c +++ b/source/blender/blenkernel/intern/object_deform.c @@ -123,8 +123,7 @@ bDeformGroup *BKE_object_defgroup_add_name(Object *ob, const char *name) } defgroup = BKE_object_defgroup_new(ob, name); - - ob->actdef = BLI_listbase_count(BKE_object_defgroup_list_for_read(ob)); + BKE_object_defgroup_active_index_set(ob, BKE_object_defgroup_count(ob)); return defgroup; } @@ -294,8 +293,9 @@ static void object_defgroup_remove_common(Object *ob, bDeformGroup *dg, const in BLI_freelinkN(defbase, dg); /* Update the active deform index if necessary */ - if (ob->actdef > def_nr) { - ob->actdef--; + const int active_index = BKE_object_defgroup_active_index_get(ob); + if (active_index > def_nr) { + BKE_object_defgroup_active_index_set(ob, active_index - 1); } /* remove all dverts */ @@ -313,8 +313,9 @@ static void object_defgroup_remove_common(Object *ob, bDeformGroup *dg, const in } } } - else if (ob->actdef < 1) { /* Keep a valid active index if we still have some vgroups. */ - ob->actdef = 1; + else if (BKE_object_defgroup_active_index_get(ob) < 1) { + /* Keep a valid active index if we still have some vgroups. */ + BKE_object_defgroup_active_index_set(ob, 1); } } @@ -470,7 +471,7 @@ void BKE_object_defgroup_remove_all_ex(struct Object *ob, bool only_unlocked) } } /* Fix counters/indices */ - ob->actdef = 0; + BKE_object_defgroup_active_index_set(ob, 0); } } @@ -828,7 +829,7 @@ bool *BKE_object_defgroup_subset_from_select_type(Object *ob, switch (subset_type) { case WT_VGROUP_ACTIVE: { - const int def_nr_active = ob->actdef - 1; + const int def_nr_active = BKE_object_defgroup_active_index_get(ob) - 1; defgroup_validmap = MEM_mallocN(*r_defgroup_tot * sizeof(*defgroup_validmap), __func__); memset(defgroup_validmap, false, *r_defgroup_tot * sizeof(*defgroup_validmap)); if ((def_nr_active >= 0) && (def_nr_active < *r_defgroup_tot)) { diff --git a/source/blender/draw/intern/draw_cache.c b/source/blender/draw/intern/draw_cache.c index 51bb9253e62..654494a9fe0 100644 --- a/source/blender/draw/intern/draw_cache.c +++ b/source/blender/draw/intern/draw_cache.c @@ -3275,7 +3275,7 @@ GPUBatch *DRW_cache_lattice_wire_get(Object *ob, bool use_weight) int actdef = -1; if (use_weight && !BLI_listbase_is_empty(<->vertex_group_names) && lt->editlatt->latt->dvert) { - actdef = ob->actdef - 1; + actdef = lt->vertex_group_active_index - 1; } return DRW_lattice_batch_cache_get_all_edges(lt, use_weight, actdef); diff --git a/source/blender/draw/intern/draw_cache_impl_gpencil.c b/source/blender/draw/intern/draw_cache_impl_gpencil.c index cca3e8a8b3c..3c82b4d4b6f 100644 --- a/source/blender/draw/intern/draw_cache_impl_gpencil.c +++ b/source/blender/draw/intern/draw_cache_impl_gpencil.c @@ -843,7 +843,7 @@ static void gpencil_edit_batches_ensure(Object *ob, GpencilBatchCache *cache, in int vert_len = GPU_vertbuf_get_vertex_len(cache->vbo); gpEditIterData iter; - iter.vgindex = ob->actdef - 1; + iter.vgindex = BKE_object_defgroup_active_index_get(ob) - 1; if (!BLI_findlink(&gpd->vertex_group_names, iter.vgindex)) { iter.vgindex = -1; } diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c index 6938a12c474..673a662a512 100644 --- a/source/blender/draw/intern/draw_cache_impl_mesh.c +++ b/source/blender/draw/intern/draw_cache_impl_mesh.c @@ -544,7 +544,7 @@ static void drw_mesh_weight_state_extract(Object *ob, /* Extract complete vertex weight group selection state and mode flags. */ memset(wstate, 0, sizeof(*wstate)); - wstate->defgroup_active = ob->actdef - 1; + wstate->defgroup_active = me->vertex_group_active_index - 1; wstate->defgroup_len = BLI_listbase_count(&me->vertex_group_names); wstate->alert_mode = ts->weightuser; diff --git a/source/blender/editors/gpencil/gpencil_data.c b/source/blender/editors/gpencil/gpencil_data.c index 4df9c37ff89..59a3acfeeaf 100644 --- a/source/blender/editors/gpencil/gpencil_data.c +++ b/source/blender/editors/gpencil/gpencil_data.c @@ -2345,7 +2345,7 @@ static int gpencil_vertex_group_invert_exec(bContext *C, wmOperator *op) } MDeformVert *dvert; - const int def_nr = ob->actdef - 1; + const int def_nr = gpd->vertex_group_active_index - 1; bDeformGroup *defgroup = BLI_findlink(&gpd->vertex_group_names, def_nr); if (defgroup == NULL) { @@ -2415,7 +2415,7 @@ static int gpencil_vertex_group_smooth_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - const int def_nr = ob->actdef - 1; + const int def_nr = gpd->vertex_group_active_index - 1; bDeformGroup *defgroup = BLI_findlink(&gpd->vertex_group_names, def_nr); if (defgroup == NULL) { return OPERATOR_CANCELLED; @@ -2514,7 +2514,7 @@ static int gpencil_vertex_group_normalize_exec(bContext *C, wmOperator *op) MDeformVert *dvert = NULL; MDeformWeight *dw = NULL; - const int def_nr = ob->actdef - 1; + const int def_nr = gpd->vertex_group_active_index - 1; bDeformGroup *defgroup = BLI_findlink(&gpd->vertex_group_names, def_nr); if (defgroup == NULL) { return OPERATOR_CANCELLED; @@ -2591,7 +2591,7 @@ static int gpencil_vertex_group_normalize_all_exec(bContext *C, wmOperator *op) bDeformGroup *defgroup = NULL; MDeformVert *dvert = NULL; MDeformWeight *dw = NULL; - const int def_nr = ob->actdef - 1; + const int def_nr = gpd->vertex_group_active_in @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs