|
Blender V5.0
|
#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_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_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 Lattice * | object_defgroup_lattice_get (ID *id) |
| void | BKE_object_defgroup_remap_update_users (Object *ob, const int *map) |
Group creation | |
| bDeformGroup * | BKE_object_defgroup_add_name (Object *ob, const char *name) |
| bDeformGroup * | BKE_object_defgroup_add (Object *ob) |
| MDeformVert * | BKE_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) |
| int * | BKE_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) |
| bool BKE_object_defgroup_active_is_locked | ( | const Object * | ob | ) |
Definition at line 696 of file object_deform.cc.
References BLI_findlink(), Object::data, DG_LOCK_WEIGHT, bDeformGroup::flag, OB_GREASE_PENCIL, Object::type, GreasePencil::vertex_group_active_index, and GreasePencil::vertex_group_names.
| bDeformGroup * BKE_object_defgroup_add | ( | struct Object * | ob | ) |
Add a vgroup of default name to object. Does not handle MDeformVert data at all!
Definition at line 114 of file object_deform.cc.
References BKE_object_defgroup_add_name(), and DATA_.
Referenced by data_transfer_layersmapping_vgroups(), data_transfer_layersmapping_vgroups_multisrc_to_dst(), ED_wpaint_ensure_data(), blender::ed::sculpt_paint::greasepencil::WeightPaintOperation::ensure_active_vertex_group_in_object(), blender::ed::object::vertex_group_add_exec(), and blender::ed::object::vertex_group_assign_new_exec().
| bDeformGroup * BKE_object_defgroup_add_name | ( | struct Object * | ob, |
| const char * | name ) |
Add a vgroup of given name to object. Does not handle MDeformVert data at all!
Definition at line 100 of file object_deform.cc.
References BKE_object_defgroup_active_index_set(), BKE_object_defgroup_count(), BKE_object_defgroup_new(), name, OB_TYPE_SUPPORT_VGROUP, and Object::type.
Referenced by blender::ed::greasepencil::add_armature_vertex_groups(), BKE_object_defgroup_add(), data_transfer_layersmapping_vgroups(), data_transfer_layersmapping_vgroups_multisrc_to_dst(), dgroup_skinnable_cb(), ED_wpaint_ensure_data(), blender::ed::sculpt_paint::greasepencil::WeightPaintOperation::ensure_active_vertex_group_in_object(), blender::ed::greasepencil::get_skinnable_bones_and_deform_group_names(), blender::io::fbx::import_blend_shape_full_weights(), blender::io::usd::import_mesh_skel_bindings(), output_toggle_exec(), blender::ed::object::skin_armature_bone_create(), and vgroup_add_unique_bone_cb().
| bool BKE_object_defgroup_array_get | ( | struct ID * | id, |
| struct MDeformVert ** | dvert_arr, | ||
| int * | dvert_tot ) |
Get MDeformVert vgroup data from given object. Should only be used in Object mode.
Definition at line 509 of file object_deform.cc.
References Lattice::dvert, GS, ID_GP, ID_LT, ID_ME, object_defgroup_lattice_get(), Lattice::pntsu, Lattice::pntsv, and Lattice::pntsw.
Referenced by object_defgroup_remove_object_mode(), blender::ed::object::vgroup_do_remap(), blender::ed::object::vgroup_nr_vert_add(), blender::ed::object::vgroup_vert_add(), and blender::ed::object::vgroup_vert_remove().
| bool BKE_object_defgroup_check_lock_relative | ( | const bool * | lock_flags, |
| const bool * | validmap, | ||
| int | index ) |
Checks if the lock relative mode is applicable.
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().
| 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.
Definition at line 674 of file object_deform.cc.
References i.
Referenced by blender::draw::drw_mesh_weight_state_extract(), weight_sample_invoke(), and wpaint_stroke_test_start().
| bool BKE_object_defgroup_clear | ( | struct Object * | ob, |
| struct bDeformGroup * | dg, | ||
| bool | use_selection ) |
Remove all verts (or only selected ones) from given vgroup. Work in Object and Edit modes.
| use_selection | Only operate on selection. |
Definition at line 140 of file object_deform.cc.
References BKE_defvert_find_index(), BKE_defvert_remove_group(), BKE_object_defgroup_list(), BLI_findindex(), BM_ELEM_CD_GET_VOID_P, BM_elem_flag_test, BM_ELEM_SELECT, BM_ITER_MESH, BM_VERTS_OF_MESH, CD_MDEFORMVERT, CustomData_get_offset(), Object::data, Lattice::def, Lattice::dvert, MDeformVert::dw, BPoint::f1, i, blender::bke::AttributeAccessor::lookup_or_default(), OB_LATTICE, OB_MESH, object_defgroup_lattice_get(), Lattice::pntsu, Lattice::pntsv, Lattice::pntsw, blender::bke::Point, SELECT, and Object::type.
Referenced by BKE_object_defgroup_clear_all(), object_defgroup_remove_edit_mode(), and blender::ed::object::vertex_group_remove_from_exec().
| 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.
| use_selection | Only operate on selection. |
Definition at line 213 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().
| MDeformVert * BKE_object_defgroup_data_create | ( | struct ID * | id | ) |
Create MDeformVert data for given ID. Work in Object mode only.
Definition at line 119 of file object_deform.cc.
References Lattice::dvert, GS, ID_LT, ID_ME, MEM_calloc_arrayN(), ID::name, Lattice::pntsu, Lattice::pntsv, and Lattice::pntsw.
Referenced by add_verts_to_dgroups(), ED_wpaint_ensure_data(), blender::ed::geometry::geometry_attribute_convert_exec(), blender::io::usd::import_mesh_skel_bindings(), blender::ed::object::vgroup_array_copy(), blender::ed::object::vgroup_assign_verts(), and blender::ed::object::vgroup_vert_add().
| void BKE_object_defgroup_index_map_apply | ( | MDeformVert * | dvert, |
| int | dvert_len, | ||
| const int * | map, | ||
| int | map_len ) |
Definition at line 474 of file object_deform.cc.
References MDeformWeight::def_nr, MDeformVert::dw, i, MEM_reallocN, MEM_SAFE_FREE, and MDeformVert::totweight.
Referenced by mesh_merge_transform().
| 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 441 of file object_deform.cc.
References BKE_object_defgroup_list(), BKE_object_defgroup_name_index(), BLI_listbase_count(), BLI_listbase_is_empty(), ListBase::first, i, MEM_freeN(), MEM_malloc_arrayN(), bDeformGroup::name, and bDeformGroup::next.
Referenced by arrayModifier_doArray().
| bool * BKE_object_defgroup_lock_flags_get | ( | struct Object * | ob, |
| int | defbase_tot ) |
Gets the status of "flag" for each bDeformGroup in the object data's vertex group list and returns an array containing them
Definition at line 543 of file object_deform.cc.
References BKE_object_defgroup_list_mutable(), DG_LOCK_WEIGHT, ListBase::first, bDeformGroup::flag, i, MEM_freeN(), MEM_malloc_arrayN(), and bDeformGroup::next.
Referenced by blender::draw::drw_mesh_weight_state_extract(), paint_weight_gradient_exec(), blender::ed::object::vertex_group_smooth_exec(), blender::ed::object::vgroup_normalize_active_vertex(), weight_sample_invoke(), and wpaint_stroke_test_start().
| 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, i, 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().
| void BKE_object_defgroup_remap_update_users | ( | struct Object * | ob, |
| const int * | map ) |
Update users of vgroups from this object, according to given map.
Use it when you remove or reorder vgroups in the object.
| map | an array mapping old indices to new indices. |
Definition at line 54 of file object_deform.cc.
References ClothModifierData::coll_parms, eModifierType_Cloth, eModifierType_Explode, LISTBASE_FOREACH, Object::modifiers, Object::particlesystem, PSYS_TOT_VG, ClothModifierData::sim_parms, Object::soft, SoftBody::vertgroup, ExplodeModifierData::vgroup, ClothSimSettings::vgroup_bend, ClothSimSettings::vgroup_intern, ClothSimSettings::vgroup_mass, ClothCollSettings::vgroup_objcol, ClothSimSettings::vgroup_pressure, ClothCollSettings::vgroup_selfcol, ClothSimSettings::vgroup_shear, ClothSimSettings::vgroup_shrink, and ClothSimSettings::vgroup_struct.
Referenced by object_defgroup_remove_update_users(), blender::ed::object::vgroup_array_copy(), and blender::ed::object::vgroup_do_remap().
| void BKE_object_defgroup_remove | ( | struct Object * | ob, |
| struct bDeformGroup * | defgroup ) |
Remove given vgroup from object. Work in Object and Edit modes.
Definition at line 377 of file object_deform.cc.
References BKE_object_batch_cache_dirty_tag(), BKE_object_is_in_editmode_vgroup(), Object::data, OB_GREASE_PENCIL, object_defgroup_remove_edit_mode(), object_defgroup_remove_object_mode(), Object::type, and blender::bke::greasepencil::validate_drawing_vertex_groups().
Referenced by data_transfer_layersmapping_vgroups_multisrc_to_dst(), blender::ed::object::grease_pencil_clear_from_vgroup(), output_toggle_exec(), and blender::ed::object::vgroup_delete_active().
| void BKE_object_defgroup_remove_all | ( | struct Object * | ob | ) |
Remove all vgroups from object. Work in Object and Edit modes.
Definition at line 436 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().
| void BKE_object_defgroup_remove_all_ex | ( | struct Object * | ob, |
| bool | only_unlocked ) |
Remove all vgroups from object. Work in Object and Edit modes. When only_unlocked=true, locked vertex groups are not removed.
Definition at line 394 of file object_deform.cc.
References BKE_object_defgroup_active_index_set(), BKE_object_defgroup_list_mutable(), BKE_object_is_in_editmode_vgroup(), CD_MDEFORMVERT, blender::bke::greasepencil::clear_vertex_groups(), CustomData_free_layer_active(), Object::data, DG_LOCK_WEIGHT, Lattice::dvert, ListBase::first, bDeformGroup::flag, MEM_SAFE_FREE, bDeformGroup::next, OB_GREASE_PENCIL, OB_LATTICE, OB_MESH, object_defgroup_lattice_get(), object_defgroup_remove_edit_mode(), object_defgroup_remove_object_mode(), and Object::type.
Referenced by BKE_object_defgroup_remove_all(), and blender::ed::object::vertex_group_remove_exec().
| bool * BKE_object_defgroup_selected_get | ( | struct Object * | ob, |
| int | defbase_tot, | ||
| int * | r_dg_flags_sel_tot ) |
Returns total selected vgroups, wpi.defbase_sel is assumed malloc'd, all values are set.
Definition at line 634 of file object_deform.cc.
References BKE_object_defgroup_list(), BKE_object_pose_armature_get(), BKE_pose_channel_find_name(), ListBase::first, bPoseChannel::flag, i, MEM_malloc_arrayN(), bDeformGroup::name, bDeformGroup::next, Object::pose, and POSE_SELECTED.
Referenced by BKE_object_defgroup_subset_from_select_type(), blender::draw::drw_mesh_weight_state_extract(), blender::ed::object::vgroup_selected_get(), weight_sample_invoke(), and wpaint_stroke_test_start().
| 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.
References i.
Referenced by blender::draw::drw_mesh_weight_state_extract(), weight_sample_invoke(), and wpaint_stroke_test_start().
| bool * BKE_object_defgroup_subset_from_select_type | ( | struct Object * | ob, |
| enum eVGroupSelect | subset_type, | ||
| int * | r_defgroup_tot, | ||
| int * | r_subset_count ) |
Return the subset type of the Vertex Group Selection.
Definition at line 768 of file object_deform.cc.
References BKE_object_defgroup_active_index_get(), BKE_object_defgroup_count(), BKE_object_defgroup_selected_get(), BKE_object_defgroup_validmap_get(), i, MEM_malloc_arrayN(), WT_VGROUP_ACTIVE, WT_VGROUP_ALL, WT_VGROUP_BONE_DEFORM, WT_VGROUP_BONE_DEFORM_OFF, and WT_VGROUP_BONE_SELECT.
Referenced by data_transfer_layersmapping_vgroups(), blender::ed::object::vertex_group_clean_exec(), blender::ed::object::vertex_group_invert_exec(), blender::ed::object::vertex_group_levels_exec(), blender::ed::object::vertex_group_limit_total_exec(), blender::ed::object::vertex_group_normalize_all_exec(), blender::ed::object::vertex_group_quantize_exec(), blender::ed::object::vertex_group_smooth_exec(), blender::ed::object::vgroup_copy_active_to_sel(), blender::ed::object::vgroup_normalize_active_vertex(), and view3d_panel_vgroup().
| 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 830 of file object_deform.cc.
References i.
Referenced by blender::ed::object::vgroup_smooth_subset().
| bool * BKE_object_defgroup_validmap_get | ( | Object * | ob, |
| const int | defbase_tot ) |
Definition at line 565 of file object_deform.cc.
References BKE_modifiers_get_virtual_modifierlist(), BKE_object_defgroup_list(), BLI_assert, BLI_ghash_free(), BLI_ghash_insert(), BLI_ghash_len(), BLI_ghash_lookup(), BLI_ghash_lookup_p(), BLI_ghash_str_new_ex(), BLI_listbase_is_empty(), BONE_NO_DEFORM, bPose::chanbase, ELEM, eModifierMode_Realtime, eModifierMode_Virtual, eModifierType_Armature, eModifierType_GreasePencilArmature, ListBase::first, i, LISTBASE_FOREACH, MEM_malloc_arrayN(), ModifierData::mode, Object::modifiers, bDeformGroup::name, bDeformGroup::next, ModifierData::next, POINTER_FROM_INT, and ModifierData::type.
Referenced by BKE_object_defgroup_subset_from_select_type(), blender::draw::drw_mesh_weight_state_extract(), blender::ed::object::normalize_vertex_group_target(), paint_weight_gradient_exec(), weight_sample_invoke(), and wpaint_stroke_test_start().
Definition at line 47 of file object_deform.cc.
References BLI_assert, Lattice::editlatt, GS, ID_LT, EditLatt::latt, and ID::name.
Referenced by BKE_object_defgroup_array_get(), BKE_object_defgroup_clear(), BKE_object_defgroup_remove_all_ex(), and object_defgroup_remove_common().
|
static |
Definition at line 251 of file object_deform.cc.
References BKE_object_defgroup_active_index_get(), BKE_object_defgroup_active_index_set(), BKE_object_defgroup_list_mutable(), BLI_freelinkN(), BLI_listbase_is_empty(), CD_MDEFORMVERT, blender::bke::greasepencil::clear_vertex_groups(), CustomData_free_layer_active(), Object::data, Lattice::dvert, MEM_SAFE_FREE, OB_GREASE_PENCIL, OB_LATTICE, OB_MESH, object_defgroup_lattice_get(), object_defgroup_remove_update_users(), and Object::type.
Referenced by object_defgroup_remove_edit_mode(), and object_defgroup_remove_object_mode().
|
static |
Definition at line 321 of file object_deform.cc.
References BKE_object_defgroup_clear(), BKE_object_defgroup_list(), BLI_assert, BLI_findindex(), BMEditMesh::bm, BM_ELEM_CD_GET_VOID_P, BM_ITER_MESH, BM_VERTS_OF_MESH, CD_MDEFORMVERT, CustomData_get_offset(), Object::data, Lattice::def, MDeformWeight::def_nr, Lattice::dvert, MDeformVert::dw, Lattice::editlatt, i, EditLatt::latt, OB_LATTICE, OB_MESH, object_defgroup_remove_common(), Lattice::pntsu, Lattice::pntsv, Lattice::pntsw, MDeformVert::totweight, Object::type, and BMesh::vdata.
Referenced by BKE_object_defgroup_remove(), and BKE_object_defgroup_remove_all_ex().
|
static |
Definition at line 287 of file object_deform.cc.
References BKE_defvert_find_index(), BKE_defvert_remove_group(), BKE_object_defgroup_array_get(), BKE_object_defgroup_list(), BLI_assert, BLI_findindex(), Object::data, MDeformWeight::def_nr, MDeformVert::dw, i, object_defgroup_remove_common(), and MDeformVert::totweight.
Referenced by BKE_object_defgroup_remove(), and BKE_object_defgroup_remove_all_ex().
|
static |
Definition at line 234 of file object_deform.cc.
References BKE_object_defgroup_count(), BKE_object_defgroup_remap_update_users(), i, MEM_freeN(), and MEM_malloc_arrayN().
Referenced by object_defgroup_remove_common().