Blender V4.3
armature_deform.cc File Reference
#include <cctype>
#include <cfloat>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include "MEM_guardedalloc.h"
#include "BLI_listbase.h"
#include "BLI_math_matrix.h"
#include "BLI_math_rotation.h"
#include "BLI_math_vector.h"
#include "BLI_task.h"
#include "BLI_utildefines.h"
#include "DNA_armature_types.h"
#include "DNA_gpencil_legacy_types.h"
#include "DNA_lattice_types.h"
#include "DNA_listBase.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "BKE_action.hh"
#include "BKE_armature.hh"
#include "BKE_curves.hh"
#include "BKE_customdata.hh"
#include "BKE_deform.hh"
#include "BKE_editmesh.hh"
#include "BKE_lattice.hh"
#include "BKE_mesh.hh"
#include "DEG_depsgraph_build.hh"
#include "CLG_log.h"

Go to the source code of this file.

Classes

struct  ArmatureUserdata
 

Functions

Armature Deform Internal Utilities
static void pchan_deform_accumulate (const DualQuat *deform_dq, const float deform_mat[4][4], const float co_in[3], const float weight, float co_accum[3], DualQuat *dq_accum, float mat_accum[3][3], const bool full_deform)
 
static void b_bone_deform (const bPoseChannel *pchan, const float co[3], const float weight, float vec[3], DualQuat *dq, float defmat[3][3], const bool full_deform)
 
float distfactor_to_bone (const float vec[3], const float b1[3], const float b2[3], float rad1, float rad2, float rdist)
 
static float dist_bone_deform (const bPoseChannel *pchan, float vec[3], DualQuat *dq, float mat[3][3], const float co[3], const bool full_deform)
 
static void pchan_bone_deform (const bPoseChannel *pchan, const float weight, float vec[3], DualQuat *dq, float mat[3][3], const float co[3], const bool full_deform, float *contrib)
 
Armature Deform #BKE_armature_deform_coords API

#BKE_armature_deform_coords and related functions.

static void armature_vert_task_with_dvert (const ArmatureUserdata *data, const int i, const MDeformVert *dvert)
 
static void armature_vert_task (void *__restrict userdata, const int i, const TaskParallelTLS *__restrict)
 
static void armature_vert_task_editmesh (void *__restrict userdata, MempoolIterData *iter, const TaskParallelTLS *__restrict)
 
static void armature_vert_task_editmesh_no_dvert (void *__restrict userdata, MempoolIterData *iter, const TaskParallelTLS *__restrict)
 
static void armature_deform_coords_impl (const Object *ob_arm, const Object *ob_target, const ListBase *defbase, float(*vert_coords)[3], float(*vert_deform_mats)[3][3], const int vert_coords_len, const int deformflag, float(*vert_coords_prev)[3], const char *defgrp_name, blender::Span< MDeformVert > dverts, const Mesh *me_target, const BMEditMesh *em_target)
 
void BKE_armature_deform_coords_with_gpencil_stroke (const Object *ob_arm, const Object *ob_target, float(*vert_coords)[3], float(*vert_deform_mats)[3][3], int vert_coords_len, int deformflag, float(*vert_coords_prev)[3], const char *defgrp_name, bGPDstroke *gps_target)
 
void BKE_armature_deform_coords_with_curves (const Object &ob_arm, const Object &ob_target, const ListBase *defbase, blender::MutableSpan< blender::float3 > vert_coords, std::optional< blender::MutableSpan< blender::float3 > > vert_coords_prev, std::optional< blender::MutableSpan< blender::float3x3 > > vert_deform_mats, blender::Span< MDeformVert > dverts, int deformflag, blender::StringRefNull defgrp_name)
 
void BKE_armature_deform_coords_with_mesh (const Object *ob_arm, const Object *ob_target, float(*vert_coords)[3], float(*vert_deform_mats)[3][3], int vert_coords_len, int deformflag, float(*vert_coords_prev)[3], const char *defgrp_name, const Mesh *me_target)
 
void BKE_armature_deform_coords_with_editmesh (const Object *ob_arm, const Object *ob_target, float(*vert_coords)[3], float(*vert_deform_mats)[3][3], int vert_coords_len, int deformflag, float(*vert_coords_prev)[3], const char *defgrp_name, const BMEditMesh *em_target)
 

Variables

static CLG_LogRef LOG = {"bke.armature_deform"}
 

Detailed Description

Deform coordinates by a armature object (used by modifier).

Definition in file armature_deform.cc.

Function Documentation

◆ armature_deform_coords_impl()

static void armature_deform_coords_impl ( const Object * ob_arm,
const Object * ob_target,
const ListBase * defbase,
float(*) vert_coords[3],
float(*) vert_deform_mats[3][3],
const int vert_coords_len,
const int deformflag,
float(*) vert_coords_prev[3],
const char * defgrp_name,
blender::Span< MDeformVert > dverts,
const Mesh * me_target,
const BMEditMesh * em_target )
static

◆ armature_vert_task()

static void armature_vert_task ( void *__restrict userdata,
const int i,
const TaskParallelTLS * __restrict )
static

Definition at line 432 of file armature_deform.cc.

References armature_vert_task_with_dvert(), and BLI_assert.

Referenced by armature_deform_coords_impl().

◆ armature_vert_task_editmesh()

static void armature_vert_task_editmesh ( void *__restrict userdata,
MempoolIterData * iter,
const TaskParallelTLS * __restrict )
static

◆ armature_vert_task_editmesh_no_dvert()

static void armature_vert_task_editmesh_no_dvert ( void *__restrict userdata,
MempoolIterData * iter,
const TaskParallelTLS * __restrict )
static

Definition at line 473 of file armature_deform.cc.

References armature_vert_task_with_dvert(), BM_elem_index_get, and v.

Referenced by armature_deform_coords_impl().

◆ armature_vert_task_with_dvert()

◆ b_bone_deform()

static void b_bone_deform ( const bPoseChannel * pchan,
const float co[3],
const float weight,
float vec[3],
DualQuat * dq,
float defmat[3][3],
const bool full_deform )
static

◆ BKE_armature_deform_coords_with_curves()

void BKE_armature_deform_coords_with_curves ( const Object & ob_arm,
const Object & ob_target,
const ListBase * defbase,
blender::MutableSpan< blender::float3 > vert_coords,
std::optional< blender::MutableSpan< blender::float3 > > vert_coords_prev,
std::optional< blender::MutableSpan< blender::float3x3 > > vert_deform_mats,
blender::Span< MDeformVert > dverts,
int deformflag,
blender::StringRefNull defgrp_name )

◆ BKE_armature_deform_coords_with_editmesh()

void BKE_armature_deform_coords_with_editmesh ( const Object * ob_arm,
const Object * ob_target,
float(*) vert_coords[3],
float(*) vert_deform_mats[3][3],
int vert_coords_len,
int deformflag,
float(*) vert_coords_prev[3],
const char * defgrp_name,
const BMEditMesh * em_target )

◆ BKE_armature_deform_coords_with_gpencil_stroke()

void BKE_armature_deform_coords_with_gpencil_stroke ( const Object * ob_arm,
const Object * ob_target,
float(*) vert_coords[3],
float(*) vert_deform_mats[3][3],
int vert_coords_len,
int deformflag,
float(*) vert_coords_prev[3],
const char * defgrp_name,
bGPDstroke * gps_target )

◆ BKE_armature_deform_coords_with_mesh()

void BKE_armature_deform_coords_with_mesh ( const Object * ob_arm,
const Object * ob_target,
float(*) vert_coords[3],
float(*) vert_deform_mats[3][3],
int vert_coords_len,
int deformflag,
float(*) vert_coords_prev[3],
const char * defgrp_name,
const Mesh * me_target )

◆ dist_bone_deform()

◆ distfactor_to_bone()

float distfactor_to_bone ( const float vec[3],
const float b1[3],
const float b2[3],
float rad1,
float rad2,
float rdist )

◆ pchan_bone_deform()

static void pchan_bone_deform ( const bPoseChannel * pchan,
const float weight,
float vec[3],
DualQuat * dq,
float mat[3][3],
const float co[3],
const bool full_deform,
float * contrib )
static

◆ pchan_deform_accumulate()

static void pchan_deform_accumulate ( const DualQuat * deform_dq,
const float deform_mat[4][4],
const float co_in[3],
const float weight,
float co_accum[3],
DualQuat * dq_accum,
float mat_accum[3][3],
const bool full_deform )
static

Variable Documentation

◆ LOG

CLG_LogRef LOG = {"bke.armature_deform"}
static

Definition at line 48 of file armature_deform.cc.

Referenced by armature_deform_coords_impl().