Blender V4.3
object_deform.cc File Reference
#include <cstdlib>
#include <cstring>
#include "MEM_guardedalloc.h"
#include "BLT_translation.hh"
#include "BLI_ghash.h"
#include "BLI_listbase.h"
#include "BLI_string_utils.hh"
#include "BLI_utildefines.h"
#include "DNA_armature_types.h"
#include "DNA_cloth_types.h"
#include "DNA_curve_types.h"
#include "DNA_gpencil_legacy_types.h"
#include "DNA_grease_pencil_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_force_types.h"
#include "DNA_object_types.h"
#include "DNA_particle_types.h"
#include "DNA_scene_types.h"
#include "BKE_action.hh"
#include "BKE_deform.hh"
#include "BKE_editmesh.hh"
#include "BKE_gpencil_legacy.h"
#include "BKE_grease_pencil_vertex_groups.hh"
#include "BKE_mesh.hh"
#include "BKE_modifier.hh"
#include "BKE_object.hh"
#include "BKE_object_deform.h"

Go to the source code of this file.

Functions

bool * BKE_object_defgroup_lock_flags_get (Object *ob, const int defbase_tot)
 
bool * BKE_object_defgroup_validmap_get (Object *ob, const int defbase_tot)
 
bool * BKE_object_defgroup_selected_get (Object *ob, int defbase_tot, int *r_dg_flags_sel_tot)
 
bool BKE_object_defgroup_check_lock_relative (const bool *lock_flags, const bool *validmap, int index)
 
bool BKE_object_defgroup_check_lock_relative_multi (int defbase_tot, const bool *lock_flags, const bool *selected, int sel_tot)
 
bool BKE_object_defgroup_active_is_locked (const Object *ob)
 
void BKE_object_defgroup_split_locked_validmap (int defbase_tot, const bool *locked, const bool *deform, bool *r_locked, bool *r_unlocked)
 
void BKE_object_defgroup_mirror_selection (Object *ob, int defbase_tot, const bool *dg_selection, bool *dg_flags_sel, int *r_dg_flags_sel_tot)
 
bool * BKE_object_defgroup_subset_from_select_type (Object *ob, eVGroupSelect subset_type, int *r_defgroup_tot, int *r_subset_count)
 
void BKE_object_defgroup_subset_to_index_array (const bool *defgroup_validmap, const int defgroup_tot, int *r_defgroup_subset_map)
 
Misc helpers
static Latticeobject_defgroup_lattice_get (ID *id)
 
void BKE_object_defgroup_remap_update_users (Object *ob, const int *map)
 
Group creation
bDeformGroupBKE_object_defgroup_add_name (Object *ob, const char *name)
 
bDeformGroupBKE_object_defgroup_add (Object *ob)
 
MDeformVertBKE_object_defgroup_data_create (ID *id)
 
Group clearing
bool BKE_object_defgroup_clear (Object *ob, bDeformGroup *dg, const bool use_selection)
 
bool BKE_object_defgroup_clear_all (Object *ob, const bool use_selection)
 
Group removal
static void object_defgroup_remove_update_users (Object *ob, const int idx)
 
static void object_defgroup_remove_common (Object *ob, bDeformGroup *dg, const int def_nr)
 
static void object_defgroup_remove_object_mode (Object *ob, bDeformGroup *dg)
 
static void object_defgroup_remove_edit_mode (Object *ob, bDeformGroup *dg)
 
void BKE_object_defgroup_remove (Object *ob, bDeformGroup *defgroup)
 
void BKE_object_defgroup_remove_all_ex (Object *ob, bool only_unlocked)
 
void BKE_object_defgroup_remove_all (Object *ob)
 
intBKE_object_defgroup_index_map_create (Object *ob_src, Object *ob_dst, int *r_map_len)
 
void BKE_object_defgroup_index_map_apply (MDeformVert *dvert, int dvert_len, const int *map, int map_len)
 
bool BKE_object_defgroup_array_get (ID *id, MDeformVert **dvert_arr, int *dvert_tot)
 

Function Documentation

◆ BKE_object_defgroup_active_is_locked()

◆ BKE_object_defgroup_add()

◆ BKE_object_defgroup_add_name()

◆ BKE_object_defgroup_array_get()

bool BKE_object_defgroup_array_get ( struct ID * id,
struct MDeformVert ** dvert_arr,
int * dvert_tot )

◆ BKE_object_defgroup_check_lock_relative()

bool BKE_object_defgroup_check_lock_relative ( const bool * lock_flags,
const bool * validmap,
int index )

Checks if the lock relative mode is applicable.

Returns
true if an unlocked deform group is active.

Definition at line 667 of file object_deform.cc.

Referenced by blender::draw::drw_mesh_weight_state_extract(), weight_sample_invoke(), and wpaint_stroke_test_start().

◆ BKE_object_defgroup_check_lock_relative_multi()

bool BKE_object_defgroup_check_lock_relative_multi ( int defbase_tot,
const bool * lock_flags,
const bool * selected,
int sel_tot )

Additional check for whether the lock relative mode is applicable in multi-paint mode.

Returns
true if none of the selected groups are locked.

Definition at line 674 of file object_deform.cc.

Referenced by blender::draw::drw_mesh_weight_state_extract(), weight_sample_invoke(), and wpaint_stroke_test_start().

◆ BKE_object_defgroup_clear()

bool BKE_object_defgroup_clear ( struct Object * ob,
struct bDeformGroup * dg,
bool use_selection )

◆ BKE_object_defgroup_clear_all()

bool BKE_object_defgroup_clear_all ( struct Object * ob,
bool use_selection )

Remove all verts (or only selected ones) from all vgroups. Work in Object and Edit modes.

Parameters
use_selectionOnly operate on selection.
Returns
True if any vertex was removed, false otherwise.

Definition at line 212 of file object_deform.cc.

References BKE_object_defgroup_clear(), BKE_object_defgroup_list(), and LISTBASE_FOREACH.

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

◆ BKE_object_defgroup_data_create()

◆ BKE_object_defgroup_index_map_apply()

void BKE_object_defgroup_index_map_apply ( MDeformVert * dvert,
int dvert_len,
const int * map,
int map_len )

◆ BKE_object_defgroup_index_map_create()

int * BKE_object_defgroup_index_map_create ( struct Object * ob_src,
struct Object * ob_dst,
int * r_map_len )

Compute mapping for vertex groups with matching name, -1 is used for no remapping. Returns null if no remapping is required. The returned array has to be freed.

Definition at line 440 of file object_deform.cc.

References BKE_object_defgroup_list(), BKE_object_defgroup_name_index(), BLI_listbase_count(), BLI_listbase_is_empty(), ListBase::first, MEM_freeN(), MEM_malloc_arrayN, bDeformGroup::name, and bDeformGroup::next.

Referenced by arrayModifier_doArray(), and join_mesh_single().

◆ BKE_object_defgroup_lock_flags_get()

bool * BKE_object_defgroup_lock_flags_get ( struct Object * ob,
int defbase_tot )

◆ BKE_object_defgroup_mirror_selection()

void BKE_object_defgroup_mirror_selection ( struct Object * ob,
int defbase_tot,
const bool * selection,
bool * dg_flags_sel,
int * r_dg_flags_sel_tot )

Marks mirror vgroups in output and counts them. Output and counter assumed to be already initialized. Designed to be usable after BKE_object_defgroup_selected_get to extend selection to mirror.

Definition at line 738 of file object_deform.cc.

References BKE_object_defgroup_list(), BKE_object_defgroup_name_index(), BLI_string_flip_side_name(), ListBase::first, MAXBONENAME, bDeformGroup::name, bDeformGroup::next, and STREQ.

Referenced by blender::draw::drw_mesh_weight_state_extract(), blender::ed::object::vgroup_selected_get(), weight_sample_invoke(), and wpaint_stroke_test_start().

◆ BKE_object_defgroup_remap_update_users()

◆ BKE_object_defgroup_remove()

◆ BKE_object_defgroup_remove_all()

void BKE_object_defgroup_remove_all ( struct Object * ob)

Remove all vgroups from object. Work in Object and Edit modes.

Definition at line 435 of file object_deform.cc.

References BKE_object_defgroup_remove_all_ex().

Referenced by data_transfer_layersmapping_vgroups(), and blender::ed::object::vgroup_array_copy().

◆ BKE_object_defgroup_remove_all_ex()

◆ BKE_object_defgroup_selected_get()

bool * BKE_object_defgroup_selected_get ( struct Object * ob,
int defbase_tot,
int * r_dg_flags_sel_tot )

◆ BKE_object_defgroup_split_locked_validmap()

void BKE_object_defgroup_split_locked_validmap ( int defbase_tot,
const bool * locked,
const bool * deform,
bool * r_locked,
bool * r_unlocked )

Takes a pair of boolean masks of all locked and all deform groups, and computes a pair of masks for locked deform and unlocked deform groups. Output buffers may reuse the input ones.

Definition at line 716 of file object_deform.cc.

Referenced by blender::draw::drw_mesh_weight_state_extract(), weight_sample_invoke(), and wpaint_stroke_test_start().

◆ BKE_object_defgroup_subset_from_select_type()

◆ BKE_object_defgroup_subset_to_index_array()

void BKE_object_defgroup_subset_to_index_array ( const bool * defgroup_validmap,
int defgroup_tot,
int * r_defgroup_subset_map )

Store indices from the defgroup_validmap (faster lookups in some cases).

Definition at line 832 of file object_deform.cc.

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

◆ BKE_object_defgroup_validmap_get()

◆ object_defgroup_lattice_get()

static Lattice * object_defgroup_lattice_get ( ID * id)
static

◆ object_defgroup_remove_common()

◆ object_defgroup_remove_edit_mode()

◆ object_defgroup_remove_object_mode()

◆ object_defgroup_remove_update_users()

static void object_defgroup_remove_update_users ( Object * ob,
const int idx )
static