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>();
488 auto xod = std::make_unique<XFormObjectData_PointCloud>();
490 xod->positions = pointcloud->positions();
491 xod->radii.reinitialize(pointcloud->
totpoint);
492 pointcloud->radius().materialize(xod->radii);
517 for (const int i : range) {
518 dst[i] = math::transform_point(transform, src[i]);
529 for (const int i : range) {
530 dst[i] = src[i] * scale;
542 const int key_index = -1;
545 if (xod.is_edit_mode) {
553 mesh->tag_positions_changed();
556 if (
key !=
nullptr) {
568 const int key_index = -1;
571 if (xod.is_edit_mode) {
576 if ((
key !=
nullptr) && !xod.key_data.is_empty()) {
588 const int key_index = -1;
591 if (xod.is_edit_mode) {
593 nurb = &editnurb->
nurbs;
605 if ((
key !=
nullptr) && !xod.key_data.is_empty()) {
616 if (xod.is_edit_mode) {
635 *grease_pencil, xod.positions, xod.radii,
transform);
648 bke::curves::bezier::write_all_positions(
674 const int key_index = -1;
677 if (xod.is_edit_mode) {
684 mesh->vert_positions_for_write().copy_from(xod.positions);
685 mesh->tag_positions_changed();
688 if ((
key !=
nullptr) && !xod.key_data.is_empty()) {
700 const int key_index = -1;
703 if (xod.is_edit_mode) {
708 if ((
key !=
nullptr) && !xod.key_data.is_empty()) {
718 const int key_index = -1;
721 if (xod.is_edit_mode) {
731 if ((
key !=
nullptr) && !xod.key_data.is_empty()) {
740 if (xod.is_edit_mode) {
769 bke::curves::bezier::write_all_positions(curves, curves.
curves_range(), xod.positions);
777 pointcloud->positions_for_write().copy_from(xod.positions);
778 pointcloud->radius_for_write().copy_from(xod.radii);
793 if (xod.is_edit_mode) {
795 params.calc_looptris =
true;
796 params.calc_normals =
true;
797 params.is_destructive =
false;
850 pointcloud->tag_positions_changed();
851 pointcloud->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)
SIMD_FORCE_INLINE btVector3 transform(const btVector3 &point) const
constexpr T * data() const
constexpr void copy_from(Span< T > values) const
constexpr const T * data() const
constexpr IndexRange index_range() const
void materialize(MutableSpan< T > r_span) const
MutableSpan< float3 > positions_for_write()
IndexRange curves_range() const
VArray< float > radius() const
Span< float3 > positions() const
MutableSpan< float > radius_for_write()
bool has_curve_with_type(CurveType type) const
void tag_positions_changed()
Array< float3 > retrieve_all_positions(const bke::CurvesGeometry &curves, const IndexMask &curves_selection)
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 copy_transformed_positions(const Span< float3 > src, const float4x4 &transform, MutableSpan< float3 > dst)
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 parallel_for(const IndexRange range, const int64_t grain_size, const Function &function, const TaskSizeHints &size_hints=detail::TaskSizeHints_Static(1))
struct EditLatt * editlatt
MeshRuntimeHandle * runtime
static MatBase identity()