27 const int island_index,
30 if (island_data->
center && island_index != -1) {
31 return island_data->
center[island_index];
40 const int island_index)
63 float mtx[3][3], smtx[3][3];
90 if (cd_offset == -1) {
111 if (is_island_center) {
118 const bool calc_island_center =
false;
119 const bool calc_island_axismtx =
false;
122 em, calc_single_islands, calc_island_center, calc_island_axismtx, &island_data);
125 copy_m3_m4(mtx, tc->obedit->object_to_world().ptr());
132 int *dists_index =
nullptr;
133 float *dists =
nullptr;
136 if (is_island_center) {
147 tc->data_len = data_len;
157 int island_index = -1;
159 const int connected_index = (dists_index && dists_index[a] != -1) ? dists_index[a] : a;
173 td->axismtx[0][0] = td->axismtx[0][1] = td->axismtx[0][2] = td->axismtx[1][0] =
174 td->axismtx[1][1] = td->axismtx[1][2] = 0.0f;
190 !crazyspace_data.
defmats.is_empty() ? crazyspace_data.
defmats[a].ptr() :
nullptr,
192 crazyspace_data.
quats[a] :
bool CustomData_has_layer_named(const CustomData *data, eCustomDataType type, blender::StringRef name)
int CustomData_get_offset_named(const CustomData *data, eCustomDataType type, blender::StringRef name)
BMEditMesh * BKE_editmesh_from_object(Object *ob)
Return the BMEditMesh for a given object.
void pseudoinverse_m3_m3(float inverse[3][3], const float mat[3][3], float epsilon)
void copy_m3_m4(float m1[3][3], const float m2[4][4])
#define PSEUDOINVERSE_EPSILON
MINLINE void copy_v3_v3(float r[3], const float a[3])
void DEG_id_tag_update(ID *id, unsigned int flags)
@ V3D_AROUND_LOCAL_ORIGINS
#define BM_ELEM_CD_GET_VOID_P(ele, offset)
#define BM_elem_flag_test(ele, hflag)
void BM_data_layer_add_named(BMesh *bm, CustomData *data, int type, const char *name)
#define BM_ITER_MESH(ele, iter, bm, itype)
#define BM_ITER_MESH_INDEX(ele, iter, bm, itype, indexvar)
ATTR_WARN_UNUSED_RESULT BMesh * bm
void *(* MEM_mallocN)(size_t len, const char *str)
void MEM_freeN(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
blender::Array< blender::float3x3, 0 > defmats