83#define COPY_PTR(member) memcpy(elem->member, bone->member, sizeof(bone->member))
84#define COPY_VAL(member) memcpy(&elem->member, &bone->member, sizeof(bone->member))
116#define COPY_PTR(member) memcpy(bone->member, elem->member, sizeof(bone->member))
117#define COPY_VAL(member) memcpy(&bone->member, &elem->member, sizeof(bone->member))
159 ebone = ebone->
next, elem++)
162#define COPY_PTR(member) memcpy(elem->member, ebone->member, sizeof(ebone->member))
163#define COPY_VAL(member) memcpy(&elem->member, &ebone->member, sizeof(ebone->member))
183 ebone = ebone->
next, elem++)
186#define COPY_PTR(member) memcpy(ebone->member, elem->member, sizeof(ebone->member))
187#define COPY_VAL(member) memcpy(&ebone->member, &elem->member, sizeof(ebone->member))
224 ml = ml->
next, elem++)
327 const int key_index = -1;
333 auto xod = std::make_unique<XFormObjectData_Mesh>();
335 xod->is_edit_mode = is_edit_mode;
336 xod->positions.reinitialize(
bm->totvert);
340 if (key !=
nullptr) {
343 xod->key_data.reinitialize(key_size);
350 auto xod = std::make_unique<XFormObjectData_Mesh>();
352 xod->is_edit_mode = is_edit_mode;
353 xod->positions =
mesh->vert_positions();
355 if (key !=
nullptr) {
358 xod->key_data.reinitialize(key_size);
368 const int key_index = -1;
375 auto xod = std::make_unique<XFormObjectData_Lattice>();
377 xod->is_edit_mode = is_edit_mode;
380 if (key !=
nullptr) {
383 xod->key_data.reinitialize(key_size);
399 const int key_index = -1;
403 nurbs = &editnurb->
nurbs;
411 auto xod = std::make_unique<XFormObjectData_Curve>();
413 xod->is_edit_mode = is_edit_mode;
416 if (key !=
nullptr) {
419 xod->key_data.reinitialize(key_size);
429 auto xod = std::make_unique<XFormObjectData_Armature>();
431 xod->is_edit_mode = is_edit_mode;
436 auto xod = std::make_unique<XFormObjectData_Armature>();
438 xod->is_edit_mode = is_edit_mode;
446 auto xod = std::make_unique<XFormObjectData_MetaBall>();
448 xod->is_edit_mode = is_edit_mode;
456 auto xod = std::make_unique<XFormObjectData_GreasePencil>();
459 xod->positions.reinitialize(elem_array_len);
462 xod->positions.reinitialize(elem_array_len * 3);
464 xod->radii.reinitialize(elem_array_len);
471 auto xod = std::make_unique<XFormObjectData_Curves>();
475 xod->positions =
curves.positions();
482 xod->radii.reinitialize(
curves.points_num());
483 curves.radius().materialize(xod->radii);
488 auto xod = std::make_unique<XFormObjectData_PointCloud>();
491 xod->radii.reinitialize(
pointcloud->totpoint);
518 for (const int i : range) {
519 dst[i] = src[i] * scale;
531 const int key_index = -1;
534 if (xod.is_edit_mode) {
542 mesh->tag_positions_changed();
545 if (key !=
nullptr) {
557 const int key_index = -1;
560 if (xod.is_edit_mode) {
565 if ((key !=
nullptr) && !xod.key_data.is_empty()) {
577 const int key_index = -1;
580 if (xod.is_edit_mode) {
582 nurb = &editnurb->
nurbs;
594 if ((key !=
nullptr) && !xod.key_data.is_empty()) {
596 key, nurb, key_index, xod.key_data.data(),
transform);
605 if (xod.is_edit_mode) {
624 *grease_pencil, xod.positions, xod.radii,
transform);
663 const int key_index = -1;
666 if (xod.is_edit_mode) {
673 mesh->vert_positions_for_write().copy_from(xod.positions);
674 mesh->tag_positions_changed();
677 if ((key !=
nullptr) && !xod.key_data.is_empty()) {
689 const int key_index = -1;
692 if (xod.is_edit_mode) {
697 if ((key !=
nullptr) && !xod.key_data.is_empty()) {
707 const int key_index = -1;
710 if (xod.is_edit_mode) {
720 if ((key !=
nullptr) && !xod.key_data.is_empty()) {
729 if (xod.is_edit_mode) {
755 curves.positions_for_write().copy_from(xod.positions);
760 curves.radius_for_write().copy_from(xod.radii);
766 pointcloud->positions_for_write().copy_from(xod.positions);
767 pointcloud->radius_for_write().copy_from(xod.radii);
782 if (xod.is_edit_mode) {
784 params.calc_looptris =
true;
785 params.calc_normals =
true;
786 params.is_destructive =
false;
832 curves.tag_positions_changed();
833 curves.tag_radii_changed();
int BKE_armature_bonelist_count(const ListBase *lb)
void BKE_armature_transform(bArmature *arm, const float mat[4][4], bool do_props)
blender::Array< blender::float3 > BKE_curve_nurbs_vert_coords_alloc(const ListBase *lb)
void BKE_curve_nurbs_vert_coords_apply_with_mat4(ListBase *lb, const blender::Span< blender::float3 >, const blender::float4x4 &transform, bool constrain_2d)
void BKE_curve_nurbs_vert_coords_apply(ListBase *lb, const blender::Span< blender::float3 > vert_coords, bool constrain_2d)
Low-level operations for curves.
Low-level operations for grease pencil.
void BKE_grease_pencil_point_coords_apply(GreasePencil &grease_pencil, blender::Span< blender::float3 > all_positions, blender::Span< float > all_radii)
void BKE_grease_pencil_point_coords_apply_with_mat4(GreasePencil &grease_pencil, blender::Span< blender::float3 > all_positions, blender::Span< float > all_radii, const blender::float4x4 &mat)
void BKE_grease_pencil_point_coords_get(const GreasePencil &grease_pencil, blender::MutableSpan< blender::float3 > all_positions, blender::MutableSpan< float > all_radii)
bool BKE_grease_pencil_has_curve_with_type(const GreasePencil &grease_pencil, CurveType type)
int BKE_grease_pencil_stroke_point_count(const GreasePencil &grease_pencil)
void BKE_keyblock_data_set_with_mat4(Key *key, int shape_index, blender::Span< blender::float3 > coords, const blender::float4x4 &transform)
void BKE_keyblock_data_get_from_shape(const Key *key, blender::MutableSpan< blender::float3 > arr, int shape_index)
void BKE_keyblock_curve_data_set_with_mat4(Key *key, const ListBase *nurb, int shape_index, const void *data, const blender::float4x4 &transform)
void BKE_keyblock_data_set(Key *key, int shape_index, const void *data)
size_t BKE_keyblock_element_calc_size_from_shape(const Key *key, int shape_index)
void BKE_lattice_vert_coords_apply(Lattice *lt, blender::Span< blender::float3 > vert_coordss)
void BKE_lattice_vert_coords_apply_with_mat4(Lattice *lt, blender::Span< blender::float3 > vert_coordss, const blender::float4x4 &transform)
blender::Array< blender::float3 > BKE_lattice_vert_coords_alloc(const Lattice *lt)
void BKE_mball_transform(MetaBall *mb, const float mat[4][4], bool do_props)
#define LISTBASE_FOREACH(type, var, list)
int BLI_listbase_count(const ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
float mat4_to_scale(const float mat[4][4])
void copy_qt_qt(float q[4], const float a[4])
MINLINE void copy_v3_v3(float r[3], const float a[3])
void DEG_id_tag_update(ID *id, unsigned int flags)
Object is a sort of wrapper for general info.
void EDBM_update(Mesh *mesh, const EDBMUpdate_Params *params)
void ED_armature_edit_transform(bArmature *arm, const float mat[4][4], const bool do_props)
void BM_mesh_vert_coords_apply(BMesh *bm, const Span< float3 > vert_coords)
void BM_mesh_vert_coords_get(BMesh *bm, MutableSpan< float3 > positions)
void BM_mesh_vert_coords_apply_with_mat4(BMesh *bm, const Span< float3 > vert_coords, const float4x4 &transform)
constexpr T * data() const
constexpr const T * data() const
constexpr IndexRange index_range() const
Array< float3 > retrieve_all_positions(const bke::CurvesGeometry &curves, const IndexMask &curves_selection)
void write_all_positions(bke::CurvesGeometry &curves, const IndexMask &curves_selection, Span< float3 > all_positions)
static void edit_armature_coords_and_quats_apply_with_mat4(bArmature *arm, const Span< ElemData_Armature > elem_array, const float4x4 &transform)
static const ElemData_Armature * armature_coords_and_quats_apply_with_mat4_recurse(ListBase *bone_base, const ElemData_Armature *elem_array, const float4x4 &transform)
static void metaball_coords_and_quats_apply_with_mat4(MetaBall *mb, const Span< ElemData_MetaBall > elem_array, const float4x4 &transform)
static void edit_armature_coords_and_quats_get(const bArmature *arm, MutableSpan< ElemData_Armature > elem_array)
static void copy_transformed_radii(const Span< float > src, const float4x4 &transform, MutableSpan< float > dst)
static void armature_coords_and_quats_apply(bArmature *arm, const Span< ElemData_Armature > elem_array)
static void metaball_coords_and_quats_apply(MetaBall *mb, const Span< ElemData_MetaBall > elem_array)
void data_xform_by_mat4(XFormObjectData &xod, const float4x4 &transform)
std::unique_ptr< XFormObjectData > data_xform_create(ID *id)
void data_xform_restore(XFormObjectData &xod)
std::unique_ptr< XFormObjectData > data_xform_create_from_edit_mode(ID *id)
static ElemData_Armature * armature_coords_and_quats_get_recurse(const ListBase *bone_base, ElemData_Armature *elem_array)
static void metaball_coords_and_quats_get(const MetaBall *mb, MutableSpan< ElemData_MetaBall > elem_array)
void data_xform_tag_update(XFormObjectData &xod)
static std::unique_ptr< XFormObjectData > data_xform_create_ex(ID *id, bool is_edit_mode)
static void armature_coords_and_quats_get(const bArmature *arm, MutableSpan< ElemData_Armature > elem_array)
static void armature_coords_and_quats_apply_with_mat4(bArmature *arm, const Span< ElemData_Armature > elem_array, const float4x4 &transform)
static void edit_armature_coords_and_quats_apply(bArmature *arm, const Span< ElemData_Armature > elem_array)
void transform_points(const float4x4 &transform, MutableSpan< float3 > points, bool use_threading=true)
void parallel_for(const IndexRange range, const int64_t grain_size, const Function &function, const TaskSizeHints &size_hints=detail::TaskSizeHints_Static(1))
MatBase< float, 4, 4 > float4x4
struct EditLatt * editlatt
static MatBase identity()