77 } *
data =
static_cast<Arg *
>(datap);
81 if (
data->heat &&
data->armob->pose &&
90 if (
data->list !=
nullptr) {
93 for (a = 0; a < segments; a++) {
150 bool is_weight_paint;
151 } *
data =
static_cast<Arg *
>(datap);
156 if (
data->heat &&
data->armob->pose &&
165 if (!
data->is_weight_paint ||
177 if (
data->list !=
nullptr) {
180 for (a = 0; a < segments; a++) {
200 const bool *selected,
207 bool use_mask =
false;
221 if (use_mask && !(select_vert && select_vert[
i])) {
228 for (
int j = 0; j < numbones; j++) {
229 if (selected[j] ==
false) {
233 Bone *bone = bonelist[j];
253 if (dgroupflip && dgroupflip[j] && iflip != -1) {
286 Bone **bonelist, *bone;
292 float(*root)[3], (*tip)[3], (*verts)[3];
294 int numbones, vertsfilled = 0, segments = 0;
300 bool is_weight_paint;
303 looper_data.armob = par;
304 looper_data.heat = heat;
305 looper_data.list =
nullptr;
306 looper_data.is_weight_paint = wpmode;
323 looper_data.list = bonelist;
332 looper_data.list = dgrouplist;
341 for (
int j = 0; j < numbones; j++) {
343 dgroup = dgrouplist[j];
366 if ((segments + 1) < bone->
segments) {
378 mul_m4_v3(par->object_to_world().ptr(), root[j]);
379 mul_m4_v3(par->object_to_world().ptr(), tip[j]);
392 if (dgroup && mirror) {
401 mesh =
static_cast<Mesh *
>(ob->
data);
402 verts =
static_cast<float(*)[3]
>(
433 const char *
error =
nullptr;
436 ob, mesh,
verts, numbones, dgrouplist, dgroupflip, root, tip, selected, &
error);
C++ functions to deal with Armature collections (i.e. the successor of bone layers).
bool ANIM_bone_in_visible_collection(const bArmature *armature, const Bone *bone)
Blender kernel action and pose functionality.
bPoseChannel * BKE_pose_channel_find_name(const bPose *pose, const char *name)
void BKE_pchan_bbone_spline_setup(bPoseChannel *pchan, bool rest, bool for_deform, Mat4 *result_array)
float distfactor_to_bone(const float vec[3], const float b1[3], const float b2[3], float rad1, float rad2, float rdist)
void BKE_mesh_foreach_mapped_vert_coords_get(const Mesh *mesh_eval, float(*r_cos)[3], int totcos)
ModifierData * BKE_modifiers_findby_type(const Object *ob, ModifierType type)
General operations, lookup, etc. for blender objects.
Mesh * BKE_object_get_evaluated_mesh(const Object *object_eval)
void BKE_report(ReportList *reports, eReportType type, const char *message)
void subsurf_calculate_limit_positions(Mesh *mesh, float(*r_positions)[3])
float mat4_to_scale(const float mat[4][4])
void mul_m4_v3(const float M[4][4], float r[3])
void mul_v3_m4v3(float r[3], const float mat[4][4], const float vec[3])
MINLINE void copy_v3_v3(float r[3], const float a[3])
size_t BLI_string_flip_side_name(char *name_dst, const char *name_src, bool strip_number, size_t name_dst_maxncpy) ATTR_NONNULL(1
T * DEG_get_evaluated(const Depsgraph *depsgraph, T *id)
Object is a sort of wrapper for general info.
#define ARM_GROUPS_ENVELOPE
int mesh_get_x_mirror_vert(Object *ob, Mesh *mesh_eval, int index, bool use_topology)
void ED_mesh_mirror_spatial_table_end(Object *ob)
Read Guarded memory(de)allocation.
int bone_looper(Object *ob, Bone *bone, void *data, int(*bone_func)(Object *, Bone *, void *))
static void envelope_bone_weighting(Object *ob, Mesh *mesh, float(*verts)[3], int numbones, Bone **bonelist, bDeformGroup **dgrouplist, bDeformGroup **dgroupflip, float(*root)[3], float(*tip)[3], const bool *selected, float scale)
static int bone_skinnable_cb(Object *, Bone *bone, void *datap)
void ED_object_vgroup_calc_from_armature(ReportList *reports, Depsgraph *depsgraph, Scene *scene, Object *ob, Object *par, const int mode, const bool mirror)
static int dgroup_skinnable_cb(Object *ob, Bone *bone, void *datap)
static int vgroup_add_unique_bone_cb(Object *ob, Bone *bone, void *)
static void add_verts_to_dgroups(ReportList *reports, Depsgraph *depsgraph, Scene *, Object *ob, Object *par, int heat, const bool mirror)
BMesh const char void * data
BPy_StructRNA * depsgraph
GAttributeReader lookup(const StringRef attribute_id) const
float distance(VecOp< float, D >, VecOp< float, D >) RET
void * MEM_calloc_arrayN(size_t len, size_t size, const char *str)
void * MEM_callocN(size_t len, const char *str)
void MEM_freeN(void *vmemh)
void heat_bone_weighting(Object *ob, Mesh *mesh, float(*verts)[3], int numbones, bDeformGroup **dgrouplist, bDeformGroup **dgroupflip, float(*root)[3], float(*tip)[3], const bool *selected, const char **r_error_str)
static void error(const char *str)
void vgroup_data_clamp_range(ID *id, int total)
void vgroup_vert_add(Object *ob, bDeformGroup *dg, int vertnum, float weight, int assignmode)
void vgroup_vert_remove(Object *ob, bDeformGroup *dg, int vertnum)