Blender V4.5
BKE_deform.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2001-2002 NaN Holding BV. All rights reserved.
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
9#include "BLI_string_ref.hh"
11
16
17struct BlendDataReader;
18struct BlendWriter;
19struct ID;
20struct ListBase;
21struct MDeformVert;
22struct MDeformWeight;
23struct Object;
24struct bDeformGroup;
25
26bool BKE_id_supports_vertex_groups(const ID *id);
30
39void BKE_object_defgroup_active_index_set(Object *ob, int new_index);
40
46const ListBase *BKE_id_defgroup_list_get(const ID *id);
52 int *r_index,
53 bDeformGroup **r_group);
54bool BKE_id_defgroup_name_find(const ID *id,
56 int *r_index,
57 bDeformGroup **r_group);
58
60void BKE_defgroup_copy_list(ListBase *outbase, const ListBase *inbase);
77int *BKE_object_defgroup_flip_map(const Object *ob, bool use_default, int *r_flip_map_num);
78
83 bool use_default,
84 int *r_flip_map_num);
89 bool use_default,
90 int defgroup,
91 int *r_flip_map_num);
92int BKE_object_defgroup_flip_index(const Object *ob, int index, bool use_default);
95void BKE_object_defgroup_set_name(bDeformGroup *dg, Object *ob, const char *new_name);
96
97MDeformWeight *BKE_defvert_find_index(const MDeformVert *dv, int defgroup);
109void BKE_defvert_add_index_notest(MDeformVert *dv, int defgroup, float weight);
116void BKE_defvert_clear(MDeformVert *dvert);
121int BKE_defvert_find_shared(const MDeformVert *dvert_a, const MDeformVert *dvert_b);
125bool BKE_defvert_is_weight_zero(const MDeformVert *dvert, int defgroup_tot);
126
127void BKE_defvert_array_free_elems(MDeformVert *dvert, int totvert);
128void BKE_defvert_array_free(MDeformVert *dvert, int totvert);
129void BKE_defvert_array_copy(MDeformVert *dst, const MDeformVert *src, int totvert);
130
131float BKE_defvert_find_weight(const MDeformVert *dvert, int defgroup);
140 int index,
141 int defgroup,
142 bool invert);
143
148 int defbase_num,
149 const bool *defbase_sel);
150
160 int defbase_num,
161 const bool *defbase_sel,
162 int defbase_sel_num,
163 bool is_normalized);
164
165/* This much unlocked weight is considered equivalent to none. */
166#define VERTEX_WEIGHT_LOCK_EPSILON 1e-6f
167
174 float locked_weight,
175 float unlocked_weight);
181float BKE_defvert_lock_relative_weight(float weight,
182 const MDeformVert *dv,
183 int defbase_num,
184 const bool *defbase_locked,
185 const bool *defbase_unlocked);
186
187void BKE_defvert_copy(MDeformVert *dvert_dst, const MDeformVert *dvert_src);
194 const MDeformVert *dvert_src,
195 const bool *vgroup_subset,
196 int vgroup_num);
203 const MDeformVert *dvert_src,
204 const bool *vgroup_subset,
205 int vgroup_num,
206 const int *flip_map,
207 int flip_map_num);
213void BKE_defvert_copy_index(MDeformVert *dvert_dst,
214 int defgroup_dst,
215 const MDeformVert *dvert_src,
216 int defgroup_src);
221void BKE_defvert_sync(MDeformVert *dvert_dst, const MDeformVert *dvert_src, bool use_ensure);
226 const MDeformVert *dvert_src,
227 const int *flip_map,
228 int flip_map_num,
229 bool use_ensure);
233void BKE_defvert_remap(MDeformVert *dvert, const int *map, int map_len);
234void BKE_defvert_flip(MDeformVert *dvert, const int *flip_map, int flip_map_num);
235void BKE_defvert_flip_merged(MDeformVert *dvert, const int *flip_map, int flip_map_num);
240void BKE_defvert_normalize_subset(MDeformVert *dvert, const bool *vgroup_subset, int vgroup_num);
245 const bool *vgroup_subset,
246 int vgroup_num,
247 uint def_nr_lock);
252 const bool *vgroup_subset,
253 int vgroup_num,
254 const bool *lock_flags,
255 int defbase_num);
256
257/* Utilities to 'extract' a given vgroup into a simple float array,
258 * for verts, but also edges/faces/loops. */
259
261 const MDeformVert *dvert, int defgroup, int verts_num, bool invert_vgroup, float *r_weights);
262
268 int defgroup,
269 int verts_num,
270 const blender::int2 *edges,
271 int edges_num,
272 bool invert_vgroup,
273 float *r_weights);
275 int defgroup,
276 int verts_num,
277 const int *corner_verts,
278 int loops_num,
279 bool invert_vgroup,
280 float *r_weights);
281
283 int defgroup,
284 int verts_num,
285 const int *corner_verts,
286 int loops_num,
288 bool invert_vgroup,
289 float *r_weights);
290
291void BKE_defvert_weight_to_rgb(float r_rgb[3], float weight);
292
293void BKE_defvert_blend_write(BlendWriter *writer, int count, const MDeformVert *dvlist);
294void BKE_defvert_blend_read(BlendDataReader *reader, int count, MDeformVert *mdverts);
295void BKE_defbase_blend_write(BlendWriter *writer, const ListBase *defbase);
296
297namespace blender::bke {
298
301 int defgroup_index);
302void remove_defgroup_index(MutableSpan<MDeformVert> dverts, int defgroup_index);
303
306 const IndexMask &indices,
308
309} // namespace blender::bke
void BKE_defvert_extract_vgroup_to_faceweights(const MDeformVert *dvert, int defgroup, int verts_num, const int *corner_verts, int loops_num, blender::OffsetIndices< int > faces, bool invert_vgroup, float *r_weights)
Definition deform.cc:1151
void BKE_defvert_copy_index(MDeformVert *dvert_dst, int defgroup_dst, const MDeformVert *dvert_src, int defgroup_src)
Definition deform.cc:148
void BKE_object_defgroup_active_index_set(Object *ob, int new_index)
Definition deform.cc:601
void BKE_defvert_blend_write(BlendWriter *writer, int count, const MDeformVert *dvlist)
Definition deform.cc:1639
void BKE_defbase_blend_write(BlendWriter *writer, const ListBase *defbase)
Definition deform.cc:1632
ListBase * BKE_id_defgroup_list_get_mutable(ID *id)
Definition deform.cc:509
void BKE_defvert_array_free(MDeformVert *dvert, int totvert)
Definition deform.cc:1063
void BKE_defvert_array_copy(MDeformVert *dst, const MDeformVert *src, int totvert)
Definition deform.cc:1027
void BKE_defvert_sync_mapped(MDeformVert *dvert_dst, const MDeformVert *dvert_src, const int *flip_map, int flip_map_num, bool use_ensure)
Definition deform.cc:192
void BKE_defvert_normalize_lock_single(MDeformVert *dvert, const bool *vgroup_subset, int vgroup_num, uint def_nr_lock)
Definition deform.cc:296
bool BKE_id_supports_vertex_groups(const ID *id)
Definition deform.cc:444
int BKE_object_defgroup_active_index_get(const Object *ob)
Definition deform.cc:596
void BKE_defvert_flip(MDeformVert *dvert, const int *flip_map, int flip_map_num)
Definition deform.cc:405
float BKE_defvert_lock_relative_weight(float weight, const MDeformVert *dv, int defbase_num, const bool *defbase_locked, const bool *defbase_unlocked)
Definition deform.cc:1006
void BKE_defvert_normalize(MDeformVert *dvert)
Definition deform.cc:267
bool BKE_defgroup_listbase_name_find(const ListBase *defbase, blender::StringRef name, int *r_index, bDeformGroup **r_group)
Definition deform.cc:543
bool BKE_id_defgroup_name_find(const ID *id, blender::StringRef name, int *r_index, bDeformGroup **r_group)
Definition deform.cc:566
void BKE_defvert_extract_vgroup_to_edgeweights(const MDeformVert *dvert, int defgroup, int verts_num, const blender::int2 *edges, int edges_num, bool invert_vgroup, float *r_weights)
Definition deform.cc:1097
bDeformGroup * BKE_defgroup_duplicate(const bDeformGroup *ingroup)
Definition deform.cc:80
bDeformGroup * BKE_object_defgroup_new(Object *ob, blender::StringRef name)
Definition deform.cc:46
bool BKE_object_supports_vertex_groups(const Object *ob)
Definition deform.cc:452
void BKE_defvert_add_index_notest(MDeformVert *dv, int defgroup, float weight)
Definition deform.cc:845
int BKE_object_defgroup_count(const Object *ob)
Definition deform.cc:591
void BKE_defvert_mirror_subset(MDeformVert *dvert_dst, const MDeformVert *dvert_src, const bool *vgroup_subset, int vgroup_num, const int *flip_map, int flip_map_num)
Definition deform.cc:110
void BKE_defvert_remap(MDeformVert *dvert, const int *map, int map_len)
Definition deform.cc:218
void BKE_defvert_normalize_subset(MDeformVert *dvert, const bool *vgroup_subset, int vgroup_num)
Definition deform.cc:230
bool BKE_defvert_is_weight_zero(const MDeformVert *dvert, int defgroup_tot)
Definition deform.cc:925
int BKE_defgroup_name_index(const ListBase *defbase, blender::StringRef name)
Definition deform.cc:529
const ListBase * BKE_object_defgroup_list(const Object *ob)
Definition deform.cc:574
int BKE_object_defgroup_flip_index(const Object *ob, int index, bool use_default)
Definition deform.cc:703
float BKE_defvert_calc_lock_relative_weight(float weight, float locked_weight, float unlocked_weight)
Definition deform.cc:978
MDeformWeight * BKE_defvert_ensure_index(MDeformVert *dv, int defgroup)
Definition deform.cc:814
float BKE_defvert_array_find_weight_safe(const MDeformVert *dvert, int index, int defgroup, bool invert)
Definition deform.cc:769
int BKE_defvert_find_shared(const MDeformVert *dvert_a, const MDeformVert *dvert_b)
Definition deform.cc:909
void BKE_object_defgroup_unique_name(bDeformGroup *dg, Object *ob)
Definition deform.cc:741
void BKE_defvert_array_free_elems(MDeformVert *dvert, int totvert)
Definition deform.cc:1045
float BKE_defvert_total_selected_weight(const MDeformVert *dv, int defbase_num, const bool *defbase_sel)
Definition deform.cc:939
void BKE_defgroup_copy_list(ListBase *outbase, const ListBase *inbase)
Definition deform.cc:71
int * BKE_object_defgroup_flip_map_single(const Object *ob, bool use_default, int defgroup, int *r_flip_map_num)
Definition deform.cc:668
void BKE_defvert_extract_vgroup_to_loopweights(const MDeformVert *dvert, int defgroup, int verts_num, const int *corner_verts, int loops_num, bool invert_vgroup, float *r_weights)
Definition deform.cc:1125
MDeformWeight * BKE_defvert_find_index(const MDeformVert *dv, int defgroup)
Definition deform.cc:795
int BKE_id_defgroup_name_index(const ID *id, blender::StringRef name)
Definition deform.cc:538
void BKE_defvert_clear(MDeformVert *dvert)
Definition deform.cc:902
ListBase * BKE_object_defgroup_list_mutable(Object *ob)
Definition deform.cc:585
void BKE_defvert_weight_to_rgb(float r_rgb[3], float weight)
Definition deform.cc:1593
float BKE_defvert_find_weight(const MDeformVert *dvert, int defgroup)
Definition deform.cc:763
void BKE_defvert_extract_vgroup_to_vertweights(const MDeformVert *dvert, int defgroup, int verts_num, bool invert_vgroup, float *r_weights)
Definition deform.cc:1078
void BKE_defvert_sync(MDeformVert *dvert_dst, const MDeformVert *dvert_src, bool use_ensure)
Definition deform.cc:172
bDeformGroup * BKE_object_defgroup_find_name(const Object *ob, blender::StringRef name)
Definition deform.cc:515
void BKE_defvert_blend_read(BlendDataReader *reader, int count, MDeformVert *mdverts)
Definition deform.cc:1656
void BKE_defvert_copy_subset(MDeformVert *dvert_dst, const MDeformVert *dvert_src, const bool *vgroup_subset, int vgroup_num)
Definition deform.cc:97
int * BKE_object_defgroup_flip_map_unlocked(const Object *ob, bool use_default, int *r_flip_map_num)
Definition deform.cc:661
void BKE_defvert_copy(MDeformVert *dvert_dst, const MDeformVert *dvert_src)
Definition deform.cc:125
void BKE_defvert_flip_merged(MDeformVert *dvert, const int *flip_map, int flip_map_num)
Definition deform.cc:419
void BKE_defvert_remove_group(MDeformVert *dvert, MDeformWeight *dw)
Definition deform.cc:869
void BKE_defvert_normalize_lock_map(MDeformVert *dvert, const bool *vgroup_subset, int vgroup_num, const bool *lock_flags, int defbase_num)
Definition deform.cc:350
int * BKE_object_defgroup_flip_map(const Object *ob, bool use_default, int *r_flip_map_num)
Definition deform.cc:656
int BKE_object_defgroup_name_index(const Object *ob, blender::StringRef name)
Definition deform.cc:580
const ListBase * BKE_id_defgroup_list_get(const ID *id)
Definition deform.cc:459
void BKE_object_defgroup_set_name(bDeformGroup *dg, Object *ob, const char *new_name)
Definition deform.cc:751
float BKE_defvert_multipaint_collective_weight(const MDeformVert *dv, int defbase_num, const bool *defbase_sel, int defbase_sel_num, bool is_normalized)
Definition deform.cc:961
unsigned int uint
static ushort indices[]
int count
CCL_NAMESPACE_BEGIN ccl_device float invert(const float color, const float factor)
Definition invert.h:11
static char faces[256]
void remove_defgroup_index(MutableSpan< MDeformVert > dverts, int defgroup_index)
Definition deform.cc:1793
void gather_deform_verts(Span< MDeformVert > src, Span< int > indices, MutableSpan< MDeformVert > dst)
Definition deform.cc:1808
VMutableArray< float > varray_for_mutable_deform_verts(MutableSpan< MDeformVert > dverts, int defgroup_index)
Definition deform.cc:1787
VArray< float > varray_for_deform_verts(Span< MDeformVert > dverts, int defgroup_index)
Definition deform.cc:1783
VecBase< int32_t, 2 > int2
Definition DNA_ID.h:404