Blender V4.3
object_vgroup.cc File Reference
#include <cmath>
#include <cstddef>
#include <cstring>
#include "MEM_guardedalloc.h"
#include "DNA_curve_types.h"
#include "DNA_gpencil_legacy_types.h"
#include "DNA_lattice_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_modifier_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "BLI_array.hh"
#include "BLI_bitmap.h"
#include "BLI_blenlib.h"
#include "BLI_listbase.h"
#include "BLI_utildefines.h"
#include "BLI_utildefines_stack.h"
#include "BLI_vector.hh"
#include "BKE_attribute.hh"
#include "BKE_context.hh"
#include "BKE_customdata.hh"
#include "BKE_deform.hh"
#include "BKE_editmesh.hh"
#include "BKE_grease_pencil_vertex_groups.hh"
#include "BKE_lattice.hh"
#include "BKE_mesh.hh"
#include "BKE_mesh_mapping.hh"
#include "BKE_modifier.hh"
#include "BKE_object.hh"
#include "BKE_object_deform.h"
#include "BKE_report.hh"
#include "DEG_depsgraph.hh"
#include "DEG_depsgraph_build.hh"
#include "BLT_translation.hh"
#include "DNA_armature_types.h"
#include "RNA_access.hh"
#include "RNA_define.hh"
#include "RNA_enum_types.hh"
#include "WM_api.hh"
#include "WM_types.hh"
#include "ED_grease_pencil.hh"
#include "ED_mesh.hh"
#include "ED_object.hh"
#include "ED_object_vgroup.hh"
#include "ED_screen.hh"
#include "UI_resources.hh"
#include "object_intern.hh"

Go to the source code of this file.

Namespaces

namespace  blender
 
namespace  blender::ed
 
namespace  blender::ed::object
 

Macros

#define IS_BM_VERT_READ(v)   (use_hide ? (BM_elem_flag_test(v, BM_ELEM_HIDDEN) == 0) : true)
 
#define IS_BM_VERT_WRITE(v)   (use_select ? (BM_elem_flag_test(v, BM_ELEM_SELECT) != 0) : true)
 
#define IS_ME_VERT_READ(v)   (use_hide ? !(hide_vert && hide_vert[v]) : true)
 
#define IS_ME_VERT_WRITE(v)   (use_select ? select_vert[v] : true)
 
#define WEIGHT_ACCUMULATE
 

Functions

Shared Operator Poll Functions
static bool blender::ed::object::vertex_group_supported_poll_ex (bContext *C, const Object *ob)
 
static bool blender::ed::object::vertex_group_supported_poll (bContext *C)
 
static bool blender::ed::object::vertex_group_poll_ex (bContext *C, Object *ob)
 
static bool blender::ed::object::vertex_group_poll (bContext *C)
 
static bool UNUSED_FUNCTION blender::ed::object::vertex_group_poll_edit (bContext *C)
 
static bool blender::ed::object::vertex_group_vert_poll_ex (bContext *C, const bool needs_select, const short ob_type_flag)
 
static bool blender::ed::object::vertex_group_mesh_vert_poll (bContext *C)
 
static bool blender::ed::object::vertex_group_vert_select_poll (bContext *C)
 
static bool blender::ed::object::vertex_group_vert_select_unlocked_poll (bContext *C)
 
static bool blender::ed::object::vertex_group_vert_select_mesh_poll (bContext *C)
 
Local Utility Functions
static bool blender::ed::object::object_array_for_wpaint_filter (const Object *ob, void *user_data)
 
static Vector< Object * > blender::ed::object::object_array_for_wpaint (bContext *C)
 
static bool blender::ed::object::vertex_group_use_vert_sel (Object *ob)
 
static Latticeblender::ed::object::vgroup_edit_lattice (Object *ob)
 
Public Utility Functions
bool blender::ed::object::vgroup_sync_from_pose (Object *ob)
 
void blender::ed::object::vgroup_data_clamp_range (ID *id, int total)
 
bool blender::ed::object::vgroup_parray_alloc (ID *id, MDeformVert ***dvert_arr, int *dvert_tot, bool use_vert_sel)
 
void blender::ed::object::vgroup_parray_mirror_sync (Object *ob, MDeformVert **dvert_array, int dvert_tot, const bool *vgroup_validmap, int vgroup_tot)
 
void blender::ed::object::vgroup_parray_mirror_assign (Object *ob, MDeformVert **dvert_array, int dvert_tot)
 
void blender::ed::object::vgroup_parray_remove_zero (MDeformVert **dvert_array, int dvert_tot, const bool *vgroup_validmap, int vgroup_tot, float epsilon, bool keep_single)
 
bool blender::ed::object::vgroup_array_copy (Object *ob, Object *ob_from)
 
void blender::ed::object::vgroup_parray_to_weight_array (const MDeformVert **dvert_array, int dvert_tot, float *dvert_weights, int def_nr)
 
void blender::ed::object::vgroup_parray_from_weight_array (MDeformVert **dvert_array, int dvert_tot, const float *dvert_weights, int def_nr, bool remove_zero)
 
static void blender::ed::object::mesh_defvert_mirror_update_internal (Object *ob, MDeformVert *dvert_dst, MDeformVert *dvert_src, const int def_nr)
 
static void blender::ed::object::ED_mesh_defvert_mirror_update_em (Object *ob, BMVert *eve, int def_nr, int vidx, const int cd_dvert_offset)
 
static void blender::ed::object::ED_mesh_defvert_mirror_update_ob (Object *ob, int def_nr, int vidx)
 
void blender::ed::object::vgroup_vert_active_mirror (Object *ob, int def_nr)
 
static void blender::ed::object::vgroup_remove_weight (Object *ob, const int def_nr)
 
static bool blender::ed::object::vgroup_normalize_active_vertex (Object *ob, eVGroupSelect subset_type)
 
static void blender::ed::object::vgroup_copy_active_to_sel (Object *ob, eVGroupSelect subset_type)
 
High Level Vertex Group Add/Remove

Wrap lower level BKE functions.

Note
that operations on many vertices should use vgroup_parray_alloc.
static void blender::ed::object::vgroup_nr_vert_add (Object *ob, const int def_nr, const int vertnum, const float weight, const int assignmode)
 
void blender::ed::object::vgroup_vert_add (Object *ob, bDeformGroup *dg, int vertnum, float weight, int assignmode)
 
void blender::ed::object::vgroup_vert_remove (Object *ob, bDeformGroup *dg, int vertnum)
 
static float blender::ed::object::get_vert_def_nr (Object *ob, const int def_nr, const int vertnum)
 
float blender::ed::object::vgroup_vert_weight (Object *ob, bDeformGroup *dg, int vertnum)
 
void blender::ed::object::vgroup_select_by_name (Object *ob, const char *name)
 
Vertex Group Add Operator
static int blender::ed::object::vertex_group_add_exec (bContext *C, wmOperator *)
 
void blender::ed::object::OBJECT_OT_vertex_group_add (wmOperatorType *ot)
 
Vertex Group Remove Operator
static void blender::ed::object::grease_pencil_clear_from_vgroup (Scene &scene, Object &ob, bDeformGroup *dg, const bool use_selection, const bool all_drawings=false)
 
static void blender::ed::object::grease_pencil_clear_from_all_vgroup (Scene &scene, Object &ob, const bool use_selection, const bool all_drawings=false, const bool only_unlocked=false)
 
static int blender::ed::object::vertex_group_remove_exec (bContext *C, wmOperator *op)
 
void blender::ed::object::OBJECT_OT_vertex_group_remove (wmOperatorType *ot)
 
Vertex Group Assign Operator
static int blender::ed::object::vertex_group_assign_exec (bContext *C, wmOperator *)
 
void blender::ed::object::OBJECT_OT_vertex_group_assign (wmOperatorType *ot)
 
Vertex Group Assign New Operator
static int blender::ed::object::vertex_group_assign_new_exec (bContext *C, wmOperator *op)
 
void blender::ed::object::OBJECT_OT_vertex_group_assign_new (wmOperatorType *ot)
 
Vertex Group Remove From Operator
static int blender::ed::object::vertex_group_remove_from_exec (bContext *C, wmOperator *op)
 
void blender::ed::object::OBJECT_OT_vertex_group_remove_from (wmOperatorType *ot)
 
Vertex Group Select Operator
static int blender::ed::object::vertex_group_select_exec (bContext *C, wmOperator *)
 
void blender::ed::object::OBJECT_OT_vertex_group_select (wmOperatorType *ot)
 
Vertex Group Deselect Operator
static int blender::ed::object::vertex_group_deselect_exec (bContext *C, wmOperator *)
 
void blender::ed::object::OBJECT_OT_vertex_group_deselect (wmOperatorType *ot)
 
Vertex Group Copy Operator
static int blender::ed::object::vertex_group_copy_exec (bContext *C, wmOperator *)
 
void blender::ed::object::OBJECT_OT_vertex_group_copy (wmOperatorType *ot)
 
Vertex Group Levels Operator
static int blender::ed::object::vertex_group_levels_exec (bContext *C, wmOperator *op)
 
void blender::ed::object::OBJECT_OT_vertex_group_levels (wmOperatorType *ot)
 
Vertex Group Normalize Operator
static int blender::ed::object::vertex_group_normalize_exec (bContext *C, wmOperator *)
 
void blender::ed::object::OBJECT_OT_vertex_group_normalize (wmOperatorType *ot)
 
Vertex Group Normalize All Operator
static eVGroupSelect blender::ed::object::normalize_vertex_group_target (Object *ob)
 
static int blender::ed::object::vertex_group_normalize_all_exec (bContext *C, wmOperator *op)
 
void blender::ed::object::OBJECT_OT_vertex_group_normalize_all (wmOperatorType *ot)
 
Vertex Group Lock Operator
static int blender::ed::object::vertex_group_lock_exec (bContext *C, wmOperator *op)
 
static std::string blender::ed::object::vertex_group_lock_get_description (bContext *, wmOperatorType *, PointerRNA *ptr)
 
void blender::ed::object::OBJECT_OT_vertex_group_lock (wmOperatorType *ot)
 
Vertex Group Invert Operator
static int blender::ed::object::vertex_group_invert_exec (bContext *C, wmOperator *op)
 
void blender::ed::object::OBJECT_OT_vertex_group_invert (wmOperatorType *ot)
 
static int blender::ed::object::vertex_group_smooth_exec (bContext *C, wmOperator *op)
 
void blender::ed::object::OBJECT_OT_vertex_group_smooth (wmOperatorType *ot)
 
Vertex Group Clean Operator
static int blender::ed::object::vertex_group_clean_exec (bContext *C, wmOperator *op)
 
void blender::ed::object::OBJECT_OT_vertex_group_clean (wmOperatorType *ot)
 
Vertex Group Quantize Operator
static int blender::ed::object::vertex_group_quantize_exec (bContext *C, wmOperator *op)
 
void blender::ed::object::OBJECT_OT_vertex_group_quantize (wmOperatorType *ot)
 
Vertex Group Limit Total Operator
static int blender::ed::object::vertex_group_limit_total_exec (bContext *C, wmOperator *op)
 
void blender::ed::object::OBJECT_OT_vertex_group_limit_total (wmOperatorType *ot)
 
Vertex Group Mirror Operator
static int blender::ed::object::vertex_group_mirror_exec (bContext *C, wmOperator *op)
 
void blender::ed::object::OBJECT_OT_vertex_group_mirror (wmOperatorType *ot)
 
Vertex Group Copy to Selected Operator
static int blender::ed::object::vertex_group_copy_to_selected_exec (bContext *C, wmOperator *op)
 
void blender::ed::object::OBJECT_OT_vertex_group_copy_to_selected (wmOperatorType *ot)
 
Vertex Group Set Active Operator
static int blender::ed::object::set_active_group_exec (bContext *C, wmOperator *op)
 
static const EnumPropertyItemblender::ed::object::vgroup_itemf (bContext *C, PointerRNA *, PropertyRNA *, bool *r_free)
 
void blender::ed::object::OBJECT_OT_vertex_group_set_active (wmOperatorType *ot)
 
Vertex Group Move Operator
static int blender::ed::object::vgroup_move_exec (bContext *C, wmOperator *op)
 
void blender::ed::object::OBJECT_OT_vertex_group_move (wmOperatorType *ot)
 
Vertex Group Weight Paste Operator
static void blender::ed::object::vgroup_copy_active_to_sel_single (Object *ob, const int def_nr)
 
static bool blender::ed::object::check_vertex_group_accessible (wmOperator *op, Object *ob, int def_nr)
 
static int blender::ed::object::vertex_weight_paste_exec (bContext *C, wmOperator *op)
 
void blender::ed::object::OBJECT_OT_vertex_weight_paste (wmOperatorType *ot)
 
Vertex Group Weight Delete Operator
static int blender::ed::object::vertex_weight_delete_exec (bContext *C, wmOperator *op)
 
void blender::ed::object::OBJECT_OT_vertex_weight_delete (wmOperatorType *ot)
 
Vertex Group Set Active by Weight Operator
static int blender::ed::object::vertex_weight_set_active_exec (bContext *C, wmOperator *op)
 
void blender::ed::object::OBJECT_OT_vertex_weight_set_active (wmOperatorType *ot)
 
Vertex Group Normalize Active Vertex Operator
static int blender::ed::object::vertex_weight_normalize_active_vertex_exec (bContext *C, wmOperator *)
 
void blender::ed::object::OBJECT_OT_vertex_weight_normalize_active_vertex (wmOperatorType *ot)
 
Vertex Group Copy Weights from Active Operator
static int blender::ed::object::vertex_weight_copy_exec (bContext *C, wmOperator *)
 
void blender::ed::object::OBJECT_OT_vertex_weight_copy (wmOperatorType *ot)
 

Operator Function Implementations

enum  { blender::ed::object::VGROUP_TOGGLE , blender::ed::object::VGROUP_LOCK , blender::ed::object::VGROUP_UNLOCK , blender::ed::object::VGROUP_INVERT }
 
enum  { blender::ed::object::VGROUP_MASK_ALL , blender::ed::object::VGROUP_MASK_SELECTED , blender::ed::object::VGROUP_MASK_UNSELECTED , blender::ed::object::VGROUP_MASK_INVERT_UNSELECTED }
 
static const EnumPropertyItem blender::ed::object::vgroup_lock_actions []
 
static const EnumPropertyItem blender::ed::object::vgroup_lock_mask []
 
static void blender::ed::object::vgroup_select_verts (const ToolSettings &tool_settings, Object *ob, Scene &scene, int select)
 
static void blender::ed::object::vgroup_duplicate (Object *ob)
 
static bool blender::ed::object::vgroup_normalize (Object *ob)
 
static void blender::ed::object::vgroup_levels_subset (Object *ob, const bool *vgroup_validmap, const int vgroup_tot, const int, const float offset, const float gain)
 
static bool blender::ed::object::vgroup_normalize_all (Object *ob, const bool *vgroup_validmap, const int vgroup_tot, const int subset_count, const bool lock_active, ReportList *reports)
 
static bool * blender::ed::object::vgroup_selected_get (Object *ob)
 
static void blender::ed::object::vgroup_lock_all (Object *ob, int action, int mask)
 
static void blender::ed::object::vgroup_invert_subset (Object *ob, const bool *vgroup_validmap, const int vgroup_tot, const int, const bool auto_assign, const bool auto_remove)
 
static void blender::ed::object::vgroup_smooth_subset (Object *ob, const bool *vgroup_validmap, const int vgroup_tot, const int subset_count, const float fac, const int repeat, const float fac_expand)
 
static int blender::ed::object::inv_cmp_mdef_vert_weights (const void *a1, const void *a2)
 
static int blender::ed::object::vgroup_limit_total_subset (Object *ob, const bool *vgroup_validmap, const int vgroup_tot, const int subset_count, const int max_weights)
 
static void blender::ed::object::vgroup_clean_subset (Object *ob, const bool *vgroup_validmap, const int vgroup_tot, const int, const float epsilon, const bool keep_single)
 
static void blender::ed::object::vgroup_quantize_subset (Object *ob, const bool *vgroup_validmap, const int vgroup_tot, const int, const int steps)
 
static void blender::ed::object::dvert_mirror_op (MDeformVert *dvert, MDeformVert *dvert_mirr, const char sel, const char sel_mirr, const int *flip_map, const int flip_map_len, const bool mirror_weights, const bool flip_vgroups, const bool all_vgroups, const int act_vgroup)
 
void blender::ed::object::vgroup_mirror (Object *ob, bool mirror_weights, bool flip_vgroups, bool all_vgroups, bool use_topology, int *r_totmirr, int *r_totfail)
 
static void blender::ed::object::vgroup_delete_active (Object *ob)
 
static void blender::ed::object::vgroup_assign_verts (Object *ob, Scene &scene, const float weight)
 

Vertex Group Sort Operator

enum  { blender::ed::object::SORT_TYPE_NAME = 0 , blender::ed::object::SORT_TYPE_BONEHIERARCHY = 1 }
 
static char * blender::ed::object::vgroup_init_remap (Object *ob)
 
static int blender::ed::object::vgroup_do_remap (Object *ob, const char *name_array, wmOperator *op)
 
static int blender::ed::object::vgroup_sort_name (const void *def_a_ptr, const void *def_b_ptr)
 
static void blender::ed::object::vgroup_sort_bone_hierarchy (Object *ob, ListBase *bonebase)
 
static int blender::ed::object::vertex_group_sort_exec (bContext *C, wmOperator *op)
 
void blender::ed::object::OBJECT_OT_vertex_group_sort (wmOperatorType *ot)
 

Shared Weight Transfer Operator Properties

static const EnumPropertyItem blender::ed::object::WT_vertex_group_select_item []
 
const EnumPropertyItemblender::ed::object::vgroup_selection_itemf_helper (const bContext *C, PointerRNA *ptr, PropertyRNA *prop, bool *r_free, unsigned int selection_mask)
 
static const EnumPropertyItemblender::ed::object::rna_vertex_group_with_single_itemf (bContext *C, PointerRNA *ptr, PropertyRNA *prop, bool *r_free)
 
static const EnumPropertyItemblender::ed::object::rna_vertex_group_select_itemf (bContext *C, PointerRNA *ptr, PropertyRNA *prop, bool *r_free)
 
static void blender::ed::object::vgroup_operator_subset_select_props (wmOperatorType *ot, bool use_active)
 

Macro Definition Documentation

◆ IS_BM_VERT_READ

#define IS_BM_VERT_READ ( v)    (use_hide ? (BM_elem_flag_test(v, BM_ELEM_HIDDEN) == 0) : true)

◆ IS_BM_VERT_WRITE

#define IS_BM_VERT_WRITE ( v)    (use_select ? (BM_elem_flag_test(v, BM_ELEM_SELECT) != 0) : true)

◆ IS_ME_VERT_READ

#define IS_ME_VERT_READ ( v)    (use_hide ? !(hide_vert && hide_vert[v]) : true)

◆ IS_ME_VERT_WRITE

#define IS_ME_VERT_WRITE ( v)    (use_select ? select_vert[v] : true)

◆ WEIGHT_ACCUMULATE

#define WEIGHT_ACCUMULATE
Value:
{ \
float weight_other = weight_accum_prev[i_other]; \
float tot_factor = 1.0f; \
if (expand_sign == 1) { /* expand */ \
if (weight_other < weight_accum_prev[i]) { \
weight_other = (weight_accum_prev[i] * expand) + (weight_other * iexpand); \
tot_factor = iexpand; \
} \
} \
else if (expand_sign == -1) { /* contract */ \
if (weight_other > weight_accum_prev[i]) { \
weight_other = (weight_accum_prev[i] * expand) + (weight_other * iexpand); \
tot_factor = iexpand; \
} \
} \
weight += tot_factor * weight_other; \
weight_tot += tot_factor; \
} \
((void)0)

Referenced by blender::ed::object::vgroup_smooth_subset().