Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/makesrna/intern/rna_pose_api.c')
-rw-r--r--source/blender/makesrna/intern/rna_pose_api.c195
1 files changed, 110 insertions, 85 deletions
diff --git a/source/blender/makesrna/intern/rna_pose_api.c b/source/blender/makesrna/intern/rna_pose_api.c
index 4366b18c049..42b5c762c62 100644
--- a/source/blender/makesrna/intern/rna_pose_api.c
+++ b/source/blender/makesrna/intern/rna_pose_api.c
@@ -21,7 +21,6 @@
* \ingroup RNA
*/
-
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
@@ -35,116 +34,142 @@
/* #include "BLI_sys_types.h" */
-#include "rna_internal.h" /* own include */
+#include "rna_internal.h" /* own include */
#ifdef RNA_RUNTIME
/* #include "DNA_anim_types.h" */
-#include "DNA_action_types.h" /* bPose */
-#include "BKE_armature.h"
+# include "DNA_action_types.h" /* bPose */
+# include "BKE_armature.h"
static float rna_PoseBone_do_envelope(bPoseChannel *chan, float *vec)
{
- Bone *bone = chan->bone;
+ Bone *bone = chan->bone;
- float scale = (bone->flag & BONE_MULT_VG_ENV) == BONE_MULT_VG_ENV ? bone->weight : 1.0f;
+ float scale = (bone->flag & BONE_MULT_VG_ENV) == BONE_MULT_VG_ENV ? bone->weight : 1.0f;
- return distfactor_to_bone(vec, chan->pose_head, chan->pose_tail, bone->rad_head * scale,
- bone->rad_tail * scale, bone->dist * scale);
+ return distfactor_to_bone(vec,
+ chan->pose_head,
+ chan->pose_tail,
+ bone->rad_head * scale,
+ bone->rad_tail * scale,
+ bone->dist * scale);
}
-static void rna_PoseBone_bbone_segment_matrix(bPoseChannel *pchan, ReportList *reports, float mat_ret[16], int index, bool rest)
+static void rna_PoseBone_bbone_segment_matrix(
+ bPoseChannel *pchan, ReportList *reports, float mat_ret[16], int index, bool rest)
{
- if (!pchan->bone || pchan->bone->segments <= 1) {
- BKE_reportf(reports, RPT_ERROR, "Bone '%s' is not a B-Bone!", pchan->name);
- return;
- }
- if (pchan->runtime.bbone_segments != pchan->bone->segments) {
- BKE_reportf(reports, RPT_ERROR, "Bone '%s' has out of date B-Bone segment data!", pchan->name);
- return;
- }
- if (index < 0 || index > pchan->runtime.bbone_segments) {
- BKE_reportf(reports, RPT_ERROR, "Invalid index %d for B-Bone segments of '%s'!", index, pchan->name);
- return;
- }
-
- if (rest) {
- copy_m4_m4((float (*)[4])mat_ret, pchan->runtime.bbone_rest_mats[index].mat);
- }
- else {
- copy_m4_m4((float (*)[4])mat_ret, pchan->runtime.bbone_pose_mats[index].mat);
- }
+ if (!pchan->bone || pchan->bone->segments <= 1) {
+ BKE_reportf(reports, RPT_ERROR, "Bone '%s' is not a B-Bone!", pchan->name);
+ return;
+ }
+ if (pchan->runtime.bbone_segments != pchan->bone->segments) {
+ BKE_reportf(reports, RPT_ERROR, "Bone '%s' has out of date B-Bone segment data!", pchan->name);
+ return;
+ }
+ if (index < 0 || index > pchan->runtime.bbone_segments) {
+ BKE_reportf(
+ reports, RPT_ERROR, "Invalid index %d for B-Bone segments of '%s'!", index, pchan->name);
+ return;
+ }
+
+ if (rest) {
+ copy_m4_m4((float(*)[4])mat_ret, pchan->runtime.bbone_rest_mats[index].mat);
+ }
+ else {
+ copy_m4_m4((float(*)[4])mat_ret, pchan->runtime.bbone_pose_mats[index].mat);
+ }
}
-static void rna_PoseBone_compute_bbone_handles(
- bPoseChannel *pchan, ReportList *reports,
- float ret_h1[3], float *ret_roll1, float ret_h2[3], float *ret_roll2,
- bool rest, bool ease, bool offsets)
+static void rna_PoseBone_compute_bbone_handles(bPoseChannel *pchan,
+ ReportList *reports,
+ float ret_h1[3],
+ float *ret_roll1,
+ float ret_h2[3],
+ float *ret_roll2,
+ bool rest,
+ bool ease,
+ bool offsets)
{
- if (!pchan->bone || pchan->bone->segments <= 1) {
- BKE_reportf(reports, RPT_ERROR, "Bone '%s' is not a B-Bone!", pchan->name);
- return;
- }
+ if (!pchan->bone || pchan->bone->segments <= 1) {
+ BKE_reportf(reports, RPT_ERROR, "Bone '%s' is not a B-Bone!", pchan->name);
+ return;
+ }
- BBoneSplineParameters params;
+ BBoneSplineParameters params;
- BKE_pchan_bbone_spline_params_get(pchan, rest, &params);
- BKE_pchan_bbone_handles_compute(&params, ret_h1, ret_roll1, ret_h2, ret_roll2, ease || offsets, offsets);
+ BKE_pchan_bbone_spline_params_get(pchan, rest, &params);
+ BKE_pchan_bbone_handles_compute(
+ &params, ret_h1, ret_roll1, ret_h2, ret_roll2, ease || offsets, offsets);
}
#else
void RNA_api_pose(StructRNA *UNUSED(srna))
{
- /* FunctionRNA *func; */
- /* PropertyRNA *parm; */
+ /* FunctionRNA *func; */
+ /* PropertyRNA *parm; */
}
void RNA_api_pose_channel(StructRNA *srna)
{
- PropertyRNA *parm;
- FunctionRNA *func;
-
- func = RNA_def_function(srna, "evaluate_envelope", "rna_PoseBone_do_envelope");
- RNA_def_function_ui_description(func, "Calculate bone envelope at given point");
- parm = RNA_def_float_vector_xyz(func, "point", 3, NULL, -FLT_MAX, FLT_MAX, "Point",
- "Position in 3d space to evaluate", -FLT_MAX, FLT_MAX);
- RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
- /* return value */
- parm = RNA_def_float(func, "factor", 0, -FLT_MAX, FLT_MAX, "Factor", "Envelope factor", -FLT_MAX, FLT_MAX);
- RNA_def_function_return(func, parm);
-
- /* B-Bone segment matrices */
- func = RNA_def_function(srna, "bbone_segment_matrix", "rna_PoseBone_bbone_segment_matrix");
- RNA_def_function_ui_description(func, "Retrieve the matrix of the joint between B-Bone segments if available");
- RNA_def_function_flag(func, FUNC_USE_REPORTS);
- parm = RNA_def_property(func, "matrix_return", PROP_FLOAT, PROP_MATRIX);
- RNA_def_property_multi_array(parm, 2, rna_matrix_dimsize_4x4);
- RNA_def_property_ui_text(parm, "", "The resulting matrix in bone local space");
- RNA_def_function_output(func, parm);
- parm = RNA_def_int(func, "index", 0, 0, INT_MAX, "", "Index of the segment endpoint", 0, 10000);
- RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
- parm = RNA_def_boolean(func, "rest", false, "", "Return the rest pose matrix");
-
- /* B-Bone custom handle positions */
- func = RNA_def_function(srna, "compute_bbone_handles", "rna_PoseBone_compute_bbone_handles");
- RNA_def_function_ui_description(func, "Retrieve the vectors and rolls coming from B-Bone custom handles");
- RNA_def_function_flag(func, FUNC_USE_REPORTS);
- parm = RNA_def_property(func, "handle1", PROP_FLOAT, PROP_XYZ);
- RNA_def_property_array(parm, 3);
- RNA_def_property_ui_text(parm, "", "The direction vector of the start handle in bone local space");
- RNA_def_function_output(func, parm);
- parm = RNA_def_float(func, "roll1", 0, -FLT_MAX, FLT_MAX, "", "Roll of the start handle", -FLT_MAX, FLT_MAX);
- RNA_def_function_output(func, parm);
- parm = RNA_def_property(func, "handle2", PROP_FLOAT, PROP_XYZ);
- RNA_def_property_array(parm, 3);
- RNA_def_property_ui_text(parm, "", "The direction vector of the end handle in bone local space");
- RNA_def_function_output(func, parm);
- parm = RNA_def_float(func, "roll2", 0, -FLT_MAX, FLT_MAX, "", "Roll of the end handle", -FLT_MAX, FLT_MAX);
- RNA_def_function_output(func, parm);
- parm = RNA_def_boolean(func, "rest", false, "", "Return the rest pose state");
- parm = RNA_def_boolean(func, "ease", false, "", "Apply scale from ease values");
- parm = RNA_def_boolean(func, "offsets", false, "", "Apply roll and curve offsets from bone properties");
+ PropertyRNA *parm;
+ FunctionRNA *func;
+
+ func = RNA_def_function(srna, "evaluate_envelope", "rna_PoseBone_do_envelope");
+ RNA_def_function_ui_description(func, "Calculate bone envelope at given point");
+ parm = RNA_def_float_vector_xyz(func,
+ "point",
+ 3,
+ NULL,
+ -FLT_MAX,
+ FLT_MAX,
+ "Point",
+ "Position in 3d space to evaluate",
+ -FLT_MAX,
+ FLT_MAX);
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+ /* return value */
+ parm = RNA_def_float(
+ func, "factor", 0, -FLT_MAX, FLT_MAX, "Factor", "Envelope factor", -FLT_MAX, FLT_MAX);
+ RNA_def_function_return(func, parm);
+
+ /* B-Bone segment matrices */
+ func = RNA_def_function(srna, "bbone_segment_matrix", "rna_PoseBone_bbone_segment_matrix");
+ RNA_def_function_ui_description(
+ func, "Retrieve the matrix of the joint between B-Bone segments if available");
+ RNA_def_function_flag(func, FUNC_USE_REPORTS);
+ parm = RNA_def_property(func, "matrix_return", PROP_FLOAT, PROP_MATRIX);
+ RNA_def_property_multi_array(parm, 2, rna_matrix_dimsize_4x4);
+ RNA_def_property_ui_text(parm, "", "The resulting matrix in bone local space");
+ RNA_def_function_output(func, parm);
+ parm = RNA_def_int(func, "index", 0, 0, INT_MAX, "", "Index of the segment endpoint", 0, 10000);
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+ parm = RNA_def_boolean(func, "rest", false, "", "Return the rest pose matrix");
+
+ /* B-Bone custom handle positions */
+ func = RNA_def_function(srna, "compute_bbone_handles", "rna_PoseBone_compute_bbone_handles");
+ RNA_def_function_ui_description(
+ func, "Retrieve the vectors and rolls coming from B-Bone custom handles");
+ RNA_def_function_flag(func, FUNC_USE_REPORTS);
+ parm = RNA_def_property(func, "handle1", PROP_FLOAT, PROP_XYZ);
+ RNA_def_property_array(parm, 3);
+ RNA_def_property_ui_text(
+ parm, "", "The direction vector of the start handle in bone local space");
+ RNA_def_function_output(func, parm);
+ parm = RNA_def_float(
+ func, "roll1", 0, -FLT_MAX, FLT_MAX, "", "Roll of the start handle", -FLT_MAX, FLT_MAX);
+ RNA_def_function_output(func, parm);
+ parm = RNA_def_property(func, "handle2", PROP_FLOAT, PROP_XYZ);
+ RNA_def_property_array(parm, 3);
+ RNA_def_property_ui_text(parm, "", "The direction vector of the end handle in bone local space");
+ RNA_def_function_output(func, parm);
+ parm = RNA_def_float(
+ func, "roll2", 0, -FLT_MAX, FLT_MAX, "", "Roll of the end handle", -FLT_MAX, FLT_MAX);
+ RNA_def_function_output(func, parm);
+ parm = RNA_def_boolean(func, "rest", false, "", "Return the rest pose state");
+ parm = RNA_def_boolean(func, "ease", false, "", "Apply scale from ease values");
+ parm = RNA_def_boolean(
+ func, "offsets", false, "", "Apply roll and curve offsets from bone properties");
}
-
#endif