30 const int island_index,
33 if (island_data->
center && island_index != -1) {
34 return island_data->
center[island_index];
43 const int island_index)
70 Mesh *mesh =
static_cast<Mesh *
>(tc->obedit->data);
74 float mtx[3][3], smtx[3][3];
116 if (is_island_center) {
123 const bool calc_island_center =
false;
124 const bool calc_island_axismtx =
false;
127 em, calc_single_islands, calc_island_center, calc_island_axismtx, &island_data);
130 copy_m3_m4(mtx, tc->obedit->object_to_world().ptr());
137 int *dists_index =
nullptr;
138 float *dists =
nullptr;
141 if (is_island_center) {
148 if (tc->use_mirror_axis_any) {
151 const bool mirror_axis[3] = {
152 bool(tc->use_mirror_axis_x), bool(tc->use_mirror_axis_y), bool(tc->use_mirror_axis_z)};
154 em, use_select, use_topology, mirror_axis, &mirror_data);
176 tc->data_len = data_len;
187 int island_index = -1;
189 const int connected_index = (dists_index && dists_index[a] != -1) ? dists_index[a] : a;
195 (
TransDataBasic *)td_mirror, em, eve, &island_data, island_index);
203 td_mirror->loc_src = vs->
radius;
215 td->axismtx[0][0] = td->axismtx[0][1] = td->axismtx[0][2] = td->axismtx[1][0] =
216 td->axismtx[1][1] = td->axismtx[1][2] = 0.0f;
232 !crazyspace_data.
defmats.is_empty() ? crazyspace_data.
defmats[a].ptr() :
nullptr,
234 crazyspace_data.
quats[a] :
263 if (tc->use_mirror_axis_any) {
265 for (
int i = 0; i < tc->data_mirror_len; i++, td_mirror++) {
void * CustomData_bmesh_get(const CustomData *data, void *block, eCustomDataType type)
bool CustomData_has_layer(const CustomData *data, eCustomDataType type)
BMEditMesh * BKE_editmesh_from_object(Object *ob)
Return the BMEditMesh for a given object.
void BKE_editmesh_looptris_and_normals_calc(BMEditMesh *em)
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
Read Guarded memory(de)allocation.
#define BM_elem_flag_test(ele, hflag)
#define BM_ITER_MESH(ele, iter, bm, itype)
#define BM_ITER_MESH_INDEX(ele, iter, bm, itype, indexvar)
ATTR_WARN_UNUSED_RESULT BMesh * bm
BLI_INLINE BMVert * BM_vert_at_index(BMesh *bm, const int index)
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
MirrorDataVert * vert_map