Blender  V3.3
Classes | Macros
object_data_transform.c File Reference
#include <stdlib.h>
#include <string.h>
#include "DNA_anim_types.h"
#include "DNA_armature_types.h"
#include "DNA_collection_types.h"
#include "DNA_gpencil_types.h"
#include "DNA_lattice_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meta_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "BLI_listbase.h"
#include "BLI_math.h"
#include "BLI_utildefines.h"
#include "BKE_armature.h"
#include "BKE_curve.h"
#include "BKE_editmesh.h"
#include "BKE_gpencil_geom.h"
#include "BKE_key.h"
#include "BKE_lattice.h"
#include "BKE_mball.h"
#include "BKE_mesh.h"
#include "BKE_scene.h"
#include "bmesh.h"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_query.h"
#include "WM_types.h"
#include "ED_armature.h"
#include "ED_mesh.h"
#include "ED_object.h"
#include "MEM_guardedalloc.h"

Go to the source code of this file.

Classes

struct  ElemData_Armature
 
struct  ElemData_MetaBall
 
struct  XFormObjectData
 
struct  XFormObjectData_Mesh
 
struct  XFormObjectData_Lattice
 
struct  XFormObjectData_Curve
 
struct  XFormObjectData_Armature
 
struct  XFormObjectData_MetaBall
 
struct  XFormObjectData_GPencil
 

Macros

#define COPY_PTR(member)   memcpy(elem->member, bone->member, sizeof(bone->member))
 
#define COPY_VAL(member)   memcpy(&elem->member, &bone->member, sizeof(bone->member))
 
#define COPY_PTR(member)   memcpy(bone->member, elem->member, sizeof(bone->member))
 
#define COPY_VAL(member)   memcpy(&bone->member, &elem->member, sizeof(bone->member))
 
#define COPY_PTR(member)   memcpy(elem->member, ebone->member, sizeof(ebone->member))
 
#define COPY_VAL(member)   memcpy(&elem->member, &ebone->member, sizeof(ebone->member))
 
#define COPY_PTR(member)   memcpy(ebone->member, elem->member, sizeof(ebone->member))
 
#define COPY_VAL(member)   memcpy(&ebone->member, &elem->member, sizeof(ebone->member))
 

Functions

Internal Transform Get/Apply

Some object data types don't have utility functions to access their transformation data. Define these locally.

static struct ElemData_Armaturearmature_coords_and_quats_get_recurse (const ListBase *bone_base, struct ElemData_Armature *elem_array)
 
static void armature_coords_and_quats_get (const bArmature *arm, struct ElemData_Armature *elem_array)
 
static const struct ElemData_Armaturearmature_coords_and_quats_apply_with_mat4_recurse (ListBase *bone_base, const struct ElemData_Armature *elem_array, const float mat[4][4])
 
static void armature_coords_and_quats_apply_with_mat4 (bArmature *arm, const struct ElemData_Armature *elem_array, const float mat[4][4])
 
static void armature_coords_and_quats_apply (bArmature *arm, const struct ElemData_Armature *elem_array)
 
static void edit_armature_coords_and_quats_get (const bArmature *arm, struct ElemData_Armature *elem_array)
 
static void edit_armature_coords_and_quats_apply_with_mat4 (bArmature *arm, const struct ElemData_Armature *elem_array, const float mat[4][4])
 
static void edit_armature_coords_and_quats_apply (bArmature *arm, const struct ElemData_Armature *elem_array)
 
static void metaball_coords_and_quats_get (const MetaBall *mb, struct ElemData_MetaBall *elem_array)
 
static void metaball_coords_and_quats_apply_with_mat4 (MetaBall *mb, const struct ElemData_MetaBall *elem_array, const float mat[4][4])
 
static void metaball_coords_and_quats_apply (MetaBall *mb, const struct ElemData_MetaBall *elem_array)
 
Public Object Data Storage API

Used for interactively transforming object data.

Store object data transformation in an opaque struct.

struct XFormObjectDataED_object_data_xform_create_ex (ID *id, bool is_edit_mode)
 
struct XFormObjectDataED_object_data_xform_create (ID *id)
 
struct XFormObjectDataED_object_data_xform_create_from_edit_mode (ID *id)
 
void ED_object_data_xform_destroy (struct XFormObjectData *xod_base)
 
void ED_object_data_xform_by_mat4 (struct XFormObjectData *xod_base, const float mat[4][4])
 
void ED_object_data_xform_restore (struct XFormObjectData *xod_base)
 
void ED_object_data_xform_tag_update (struct XFormObjectData *xod_base)
 

Detailed Description

Use to transform object origins only.

This is a small API to store & apply transformations to object data, where a transformation matrix can be continually applied ontop of the original values so we don't lose precision over time.

Definition in file object_data_transform.c.

Macro Definition Documentation

◆ COPY_PTR [1/4]

#define COPY_PTR (   member)    memcpy(elem->member, bone->member, sizeof(bone->member))

◆ COPY_PTR [2/4]

#define COPY_PTR (   member)    memcpy(bone->member, elem->member, sizeof(bone->member))

◆ COPY_PTR [3/4]

#define COPY_PTR (   member)    memcpy(elem->member, ebone->member, sizeof(ebone->member))

◆ COPY_PTR [4/4]

#define COPY_PTR (   member)    memcpy(ebone->member, elem->member, sizeof(ebone->member))

◆ COPY_VAL [1/4]

#define COPY_VAL (   member)    memcpy(&elem->member, &bone->member, sizeof(bone->member))

◆ COPY_VAL [2/4]

#define COPY_VAL (   member)    memcpy(&bone->member, &elem->member, sizeof(bone->member))

◆ COPY_VAL [3/4]

#define COPY_VAL (   member)    memcpy(&elem->member, &ebone->member, sizeof(ebone->member))

◆ COPY_VAL [4/4]

#define COPY_VAL (   member)    memcpy(&ebone->member, &elem->member, sizeof(ebone->member))

Function Documentation

◆ armature_coords_and_quats_apply()

static void armature_coords_and_quats_apply ( bArmature arm,
const struct ElemData_Armature elem_array 
)
static

◆ armature_coords_and_quats_apply_with_mat4()

static void armature_coords_and_quats_apply_with_mat4 ( bArmature arm,
const struct ElemData_Armature elem_array,
const float  mat[4][4] 
)
static

◆ armature_coords_and_quats_apply_with_mat4_recurse()

static const struct ElemData_Armature* armature_coords_and_quats_apply_with_mat4_recurse ( ListBase bone_base,
const struct ElemData_Armature elem_array,
const float  mat[4][4] 
)
static

◆ armature_coords_and_quats_get()

static void armature_coords_and_quats_get ( const bArmature arm,
struct ElemData_Armature elem_array 
)
static

◆ armature_coords_and_quats_get_recurse()

static struct ElemData_Armature* armature_coords_and_quats_get_recurse ( const ListBase bone_base,
struct ElemData_Armature elem_array 
)
static

◆ ED_object_data_xform_by_mat4()

void ED_object_data_xform_by_mat4 ( struct XFormObjectData xod_base,
const float  mat[4][4] 
)

◆ ED_object_data_xform_create()

struct XFormObjectData* ED_object_data_xform_create ( ID id)

◆ ED_object_data_xform_create_ex()

struct XFormObjectData* ED_object_data_xform_create_ex ( ID id,
bool  is_edit_mode 
)

Definition at line 304 of file object_data_transform.c.

References armature_coords_and_quats_get(), XFormObjectData_Mesh::base, XFormObjectData_Lattice::base, XFormObjectData_Curve::base, XFormObjectData_GPencil::base, XFormObjectData_MetaBall::base, XFormObjectData_Armature::base, BKE_armature_bonelist_count(), BKE_curve_nurbs_vert_coords_get(), BKE_curve_type_get(), BKE_gpencil_point_coords_get(), BKE_gpencil_stroke_point_count(), BKE_keyblock_data_get_from_shape(), BKE_keyblock_element_calc_size_from_shape(), BKE_lattice_vert_coords_get(), BKE_mesh_vert_coords_get(), BKE_nurbList_verts_count(), BLI_listbase_count(), BMEditMesh::bm, bm, BM_mesh_vert_coords_get(), bArmature::bonebase, bArmature::edbo, edit_armature_coords_and_quats_get(), Mesh::edit_mesh, Lattice::editlatt, Curve::editnurb, XFormObjectData_GPencil::elem_array, XFormObjectData_Armature::elem_array, XFormObjectData_MetaBall::elem_array, XFormObjectData_Mesh::elem_array, XFormObjectData_Lattice::elem_array, XFormObjectData_Curve::elem_array, MetaBall::elems, GS, id, XFormObjectData::id, ID_AR, ID_CU_LEGACY, ID_GD, ID_LT, ID_MB, ID_ME, XFormObjectData::is_edit_mode, Curve::key, Lattice::key, Mesh::key, XFormObjectData_Mesh::key_data, XFormObjectData_Lattice::key_data, XFormObjectData_Curve::key_data, EditLatt::latt, MEM_mallocN, metaball_coords_and_quats_get(), ID::name, NULL, Curve::nurb, EditNurb::nurbs, OB_FONT, Lattice::pntsu, Lattice::pntsv, Lattice::pntsw, BMesh::totvert, and Mesh::totvert.

Referenced by ED_object_data_xform_create(), and ED_object_data_xform_create_from_edit_mode().

◆ ED_object_data_xform_create_from_edit_mode()

struct XFormObjectData* ED_object_data_xform_create_from_edit_mode ( ID id)

Definition at line 486 of file object_data_transform.c.

References ED_object_data_xform_create_ex().

Referenced by op_generic_value_invoke().

◆ ED_object_data_xform_destroy()

void ED_object_data_xform_destroy ( struct XFormObjectData xod_base)

◆ ED_object_data_xform_restore()

void ED_object_data_xform_restore ( struct XFormObjectData xod_base)

◆ ED_object_data_xform_tag_update()

void ED_object_data_xform_tag_update ( struct XFormObjectData xod_base)

◆ edit_armature_coords_and_quats_apply()

static void edit_armature_coords_and_quats_apply ( bArmature arm,
const struct ElemData_Armature elem_array 
)
static

◆ edit_armature_coords_and_quats_apply_with_mat4()

static void edit_armature_coords_and_quats_apply_with_mat4 ( bArmature arm,
const struct ElemData_Armature elem_array,
const float  mat[4][4] 
)
static

◆ edit_armature_coords_and_quats_get()

static void edit_armature_coords_and_quats_get ( const bArmature arm,
struct ElemData_Armature elem_array 
)
static

◆ metaball_coords_and_quats_apply()

static void metaball_coords_and_quats_apply ( MetaBall mb,
const struct ElemData_MetaBall elem_array 
)
static

◆ metaball_coords_and_quats_apply_with_mat4()

static void metaball_coords_and_quats_apply_with_mat4 ( MetaBall mb,
const struct ElemData_MetaBall elem_array,
const float  mat[4][4] 
)
static

◆ metaball_coords_and_quats_get()

static void metaball_coords_and_quats_get ( const MetaBall mb,
struct ElemData_MetaBall elem_array 
)
static