Blender  V3.3
Macros | Functions | Variables
mathutils.c File Reference
#include <Python.h>
#include "mathutils.h"
#include "BLI_math.h"
#include "BLI_utildefines.h"
#include "../generic/py_capi_utils.h"
#include "../generic/python_utildefines.h"
#include "BLI_dynstr.h"
#include "mathutils_geometry.h"
#include "mathutils_interpolate.h"
#include "mathutils_bvhtree.h"
#include "mathutils_kdtree.h"
#include "mathutils_noise.h"

Go to the source code of this file.

Macros

#define SIGNMASK(i)   (-(int)(((uint)(i)) >> 31))
 
#define MATHUTILS_TOT_CB   17
 

Functions

 PyDoc_STRVAR (M_Mathutils_doc, "This module provides access to math operations.\n" "\n" ".. note::\n" "\n" " Classes, methods and attributes that accept vectors also accept other numeric sequences,\n" " such as tuples, lists.\n" "\n" "The :mod:`mathutils` module provides the following classes:\n" "\n" "- :class:`Color`,\n" "- :class:`Euler`,\n" "- :class:`Matrix`,\n" "- :class:`Quaternion`,\n" "- :class:`Vector`,\n")
 
static int mathutils_array_parse_fast (float *array, int size, PyObject *value_fast, const char *error_prefix)
 
Py_hash_t mathutils_array_hash (const float *array, size_t array_len)
 
int mathutils_array_parse (float *array, int array_num_min, int array_num_max, PyObject *value, const char *error_prefix)
 
int mathutils_array_parse_alloc (float **array, int array_num, PyObject *value, const char *error_prefix)
 
int mathutils_array_parse_alloc_v (float **array, int array_dim, PyObject *value, const char *error_prefix)
 
int mathutils_int_array_parse (int *array, int array_dim, PyObject *value, const char *error_prefix)
 
int mathutils_array_parse_alloc_vi (int **array, int array_dim, PyObject *value, const char *error_prefix)
 
int mathutils_array_parse_alloc_viseq (int **array, int **start_table, int **len_table, PyObject *value, const char *error_prefix)
 
int mathutils_any_to_rotmat (float rmat[3][3], PyObject *value, const char *error_prefix)
 
int EXPP_FloatsAreEqual (float af, float bf, int maxDiff)
 
int EXPP_VectorsAreEqual (const float *vecA, const float *vecB, int size, int floatSteps)
 
PyObject * mathutils_dynstr_to_py (struct DynStr *ds)
 
uchar Mathutils_RegisterCallback (Mathutils_Callback *cb)
 
int _BaseMathObject_CheckCallback (BaseMathObject *self)
 
int _BaseMathObject_ReadCallback (BaseMathObject *self)
 
int _BaseMathObject_WriteCallback (BaseMathObject *self)
 
int _BaseMathObject_ReadIndexCallback (BaseMathObject *self, int index)
 
int _BaseMathObject_WriteIndexCallback (BaseMathObject *self, int index)
 
void _BaseMathObject_RaiseFrozenExc (const BaseMathObject *self)
 
void _BaseMathObject_RaiseNotFrozenExc (const BaseMathObject *self)
 
PyObject * BaseMathObject_owner_get (BaseMathObject *self, void *UNUSED(closure))
 
PyObject * BaseMathObject_is_wrapped_get (BaseMathObject *self, void *UNUSED(closure))
 
PyObject * BaseMathObject_is_frozen_get (BaseMathObject *self, void *UNUSED(closure))
 
PyObject * BaseMathObject_is_valid_get (BaseMathObject *self, void *UNUSED(closure))
 
PyObject * BaseMathObject_freeze (BaseMathObject *self)
 
int BaseMathObject_traverse (BaseMathObject *self, visitproc visit, void *arg)
 
int BaseMathObject_clear (BaseMathObject *self)
 
void BaseMathObject_dealloc (BaseMathObject *self)
 
PyMODINIT_FUNC PyInit_mathutils (void)
 

Variables

static Mathutils_Callbackmathutils_callbacks [MATHUTILS_TOT_CB] = {NULL}
 
char BaseMathObject_owner_doc [] = "The item this is wrapping or None (read-only)."
 
char BaseMathObject_is_wrapped_doc []
 
char BaseMathObject_is_frozen_doc []
 
char BaseMathObject_is_valid_doc []
 
char BaseMathObject_freeze_doc []
 
static struct PyMethodDef M_Mathutils_methods []
 
static struct PyModuleDef M_Mathutils_module_def
 

Macro Definition Documentation

◆ MATHUTILS_TOT_CB

#define MATHUTILS_TOT_CB   17

Definition at line 548 of file mathutils.c.

◆ SIGNMASK

#define SIGNMASK (   i)    (-(int)(((uint)(i)) >> 31))

Definition at line 499 of file mathutils.c.

Function Documentation

◆ _BaseMathObject_CheckCallback()

int _BaseMathObject_CheckCallback ( BaseMathObject self)

Definition at line 569 of file mathutils.c.

References Mathutils_Callback::check, LIKELY, and mathutils_callbacks.

◆ _BaseMathObject_RaiseFrozenExc()

void _BaseMathObject_RaiseFrozenExc ( const BaseMathObject self)

Definition at line 633 of file mathutils.c.

◆ _BaseMathObject_RaiseNotFrozenExc()

void _BaseMathObject_RaiseNotFrozenExc ( const BaseMathObject self)

Definition at line 638 of file mathutils.c.

◆ _BaseMathObject_ReadCallback()

int _BaseMathObject_ReadCallback ( BaseMathObject self)

Definition at line 579 of file mathutils.c.

References Mathutils_Callback::get, LIKELY, mathutils_callbacks, and self.

◆ _BaseMathObject_ReadIndexCallback()

int _BaseMathObject_ReadIndexCallback ( BaseMathObject self,
int  index 
)

Definition at line 605 of file mathutils.c.

References Mathutils_Callback::get_index, LIKELY, mathutils_callbacks, and self.

◆ _BaseMathObject_WriteCallback()

int _BaseMathObject_WriteCallback ( BaseMathObject self)

Definition at line 592 of file mathutils.c.

References LIKELY, mathutils_callbacks, self, and Mathutils_Callback::set.

◆ _BaseMathObject_WriteIndexCallback()

int _BaseMathObject_WriteIndexCallback ( BaseMathObject self,
int  index 
)

Definition at line 619 of file mathutils.c.

References LIKELY, mathutils_callbacks, self, and Mathutils_Callback::set_index.

◆ BaseMathObject_clear()

int BaseMathObject_clear ( BaseMathObject self)

Definition at line 699 of file mathutils.c.

References self.

Referenced by BaseMathObject_dealloc().

◆ BaseMathObject_dealloc()

void BaseMathObject_dealloc ( BaseMathObject self)

Definition at line 705 of file mathutils.c.

References BASE_MATH_FLAG_IS_WRAP, BaseMathObject_clear(), and self.

◆ BaseMathObject_freeze()

PyObject* BaseMathObject_freeze ( BaseMathObject self)

Definition at line 681 of file mathutils.c.

References BASE_MATH_FLAG_IS_FROZEN, BASE_MATH_FLAG_IS_WRAP, NULL, and self.

◆ BaseMathObject_is_frozen_get()

PyObject* BaseMathObject_is_frozen_get ( BaseMathObject self,
void UNUSEDclosure 
)

Definition at line 661 of file mathutils.c.

References BASE_MATH_FLAG_IS_FROZEN, and self.

◆ BaseMathObject_is_valid_get()

PyObject* BaseMathObject_is_valid_get ( BaseMathObject self,
void UNUSEDclosure 
)

Definition at line 668 of file mathutils.c.

References BaseMath_CheckCallback.

◆ BaseMathObject_is_wrapped_get()

PyObject* BaseMathObject_is_wrapped_get ( BaseMathObject self,
void UNUSEDclosure 
)

Definition at line 654 of file mathutils.c.

References BASE_MATH_FLAG_IS_WRAP, and self.

◆ BaseMathObject_owner_get()

PyObject* BaseMathObject_owner_get ( BaseMathObject self,
void UNUSEDclosure 
)

Definition at line 646 of file mathutils.c.

References ret.

◆ BaseMathObject_traverse()

int BaseMathObject_traverse ( BaseMathObject self,
visitproc  visit,
void arg 
)

Definition at line 693 of file mathutils.c.

References self.

◆ EXPP_FloatsAreEqual()

int EXPP_FloatsAreEqual ( float  af,
float  bf,
int  maxDiff 
)

Definition at line 501 of file mathutils.c.

References BLI_assert, KDL::diff(), SIGNMASK, v1, and v2.

Referenced by EXPP_VectorsAreEqual(), and quat__axis_angle_sanitize().

◆ EXPP_VectorsAreEqual()

int EXPP_VectorsAreEqual ( const float vecA,
const float vecB,
int  size,
int  floatSteps 
)

◆ mathutils_any_to_rotmat()

int mathutils_any_to_rotmat ( float  rmat[3][3],
PyObject *  value,
const char *  error_prefix 
)

◆ mathutils_array_hash()

Py_hash_t mathutils_array_hash ( const float float_array,
size_t  array_len 
)

helper function that returns a Python __hash__.

Note
consistent with the equivalent tuple of floats (CPython's 'tuplehash')

Definition at line 66 of file mathutils.c.

References len, mult(), NULL, x, and y.

Referenced by Color_hash(), Euler_hash(), Matrix_hash(), Quaternion_hash(), and Vector_hash().

◆ mathutils_array_parse()

int mathutils_array_parse ( float array,
int  array_num_min,
int  array_num_max,
PyObject *  value,
const char *  error_prefix 
)

Helper function.

Returns
length of value, -1 on error.

Definition at line 98 of file mathutils.c.

References BaseMath_ReadCallback, CLAMP_MAX, ColorObject_Check, data, EulerObject_Check, mathutils_array_parse_fast(), MU_ARRAY_FLAGS, MU_ARRAY_SPILL, MU_ARRAY_ZERO, NULL, QuaternionObject_Check, and VectorObject_Check.

Referenced by bpy_bm_geometry_intersect_face_point(), bpy_bmface_normal_set(), BPy_BMLayerItem_SetItem(), BPy_BMLoopColor_AssignPyObject(), bpy_bmloopuv_uv_set(), bpy_bmvert_co_set(), bpy_bmvert_normal_set(), bpy_bmvertseq_new(), bpy_bmvertskin_radius_set(), bpy_slot_from_py(), C_BVHTree_FromPolygons(), C_Matrix_Diagonal(), C_Matrix_LocRotScale(), C_Matrix_OrthoProjection(), C_Matrix_Rotation(), C_Matrix_Scale(), C_Matrix_Shear(), C_Matrix_Translation(), Color_ass_slice(), Color_hsv_set(), Color_new(), convert_v2(), convert_v3(), convert_v4(), Euler_ass_slice(), Euler_make_compatible(), Euler_new(), FEdgeSharp_normal_left_set(), FEdgeSharp_normal_right_set(), FEdgeSmooth_normal_set(), Freestyle_blendRamp(), FrsMaterial_ambient_set(), FrsMaterial_diffuse_set(), FrsMaterial_emission_set(), FrsMaterial_line_set(), FrsMaterial_specular_set(), M_Geometry_area_tri(), M_Geometry_barycentric_transform(), M_Geometry_closest_point_on_tri(), M_Geometry_distance_point_to_plane(), M_Geometry_interpolate_bezier(), M_Geometry_intersect_line_line(), M_Geometry_intersect_line_line_2d(), M_Geometry_intersect_line_plane(), M_Geometry_intersect_line_sphere(), M_Geometry_intersect_line_sphere_2d(), M_Geometry_intersect_plane_plane(), M_Geometry_intersect_point_line(), M_Geometry_intersect_point_quad_2d(), M_Geometry_intersect_point_tri(), M_Geometry_intersect_point_tri_2d(), M_Geometry_intersect_ray_tri(), M_Geometry_intersect_sphere_sphere_2d(), M_Geometry_intersect_tri_tri_2d(), M_Geometry_tessellate_polygon(), M_Geometry_volume_tetrahedron(), M_Interpolate_poly_3d_calc(), M_Noise_fractal(), M_Noise_hetero_terrain(), M_Noise_hybrid_multi_fractal(), M_Noise_multi_fractal(), M_Noise_noise(), M_Noise_noise_vector(), M_Noise_ridged_multi_fractal(), M_Noise_turbulence(), M_Noise_turbulence_vector(), M_Noise_variable_lacunarity(), M_Noise_voronoi(), mathutils_array_parse_alloc_v(), Matrix_ass_item_col(), Matrix_ass_item_row(), Matrix_ass_slice(), Matrix_translation_set(), py_bvhtree_find_nearest(), py_bvhtree_find_nearest_range(), py_bvhtree_ray_cast(), py_kdtree_find(), py_kdtree_find_n(), py_kdtree_find_range(), py_kdtree_insert(), pygpu_framebuffer_clear(), pygpu_matrix_scale(), pygpu_matrix_translate(), pygpu_shader_uniform_float(), Quaternion_ass_slice(), Quaternion_axis_vector_set(), Quaternion_cross(), Quaternion_dot(), Quaternion_make_compatible(), Quaternion_new(), Quaternion_rotation_difference(), Quaternion_slerp(), StrokeAttribute_color_set(), StrokeAttribute_thickness_set(), StrokeVertex_point_set(), SVertex_point_2d_set(), SVertex_point_3d_set(), Vector_angle(), Vector_angle_signed(), Vector_cross(), Vector_reflect(), Vector_rotation_difference(), Vector_slerp(), and Vector_swizzle_set().

◆ mathutils_array_parse_alloc()

int mathutils_array_parse_alloc ( float **  array,
int  array_num_min,
PyObject *  value,
const char *  error_prefix 
)

◆ mathutils_array_parse_alloc_v()

int mathutils_array_parse_alloc_v ( float **  array,
int  array_dim,
PyObject *  value,
const char *  error_prefix 
)

Parse an array of vectors.

Definition at line 259 of file mathutils.c.

References mathutils_array_parse(), MU_ARRAY_FLAGS, and NULL.

Referenced by bpy_bm_utils_face_split(), M_Geometry_normal(), M_Geometry_points_in_planes(), and M_Interpolate_poly_3d_calc().

◆ mathutils_array_parse_alloc_vi()

int mathutils_array_parse_alloc_vi ( int **  array,
int  array_dim,
PyObject *  value,
const char *  error_prefix 
)

Parse sequence of array_dim sequences of integers and return allocated result.

Definition at line 335 of file mathutils.c.

References mathutils_int_array_parse(), NULL, and size().

◆ mathutils_array_parse_alloc_viseq()

int mathutils_array_parse_alloc_viseq ( int **  array,
int **  start_table,
int **  len_table,
PyObject *  value,
const char *  error_prefix 
)

Parse sequence of variable-length sequences of int and return allocated triple of arrays to represent the result: The flattened sequences are put into *array. The start index of each sequence goes into start_table. The length of each index goes into len_table.

Definition at line 372 of file mathutils.c.

References mathutils_int_array_parse(), NULL, and size().

◆ mathutils_array_parse_fast()

static int mathutils_array_parse_fast ( float array,
int  size,
PyObject *  value_fast,
const char *  error_prefix 
)
static

Definition at line 37 of file mathutils.c.

References size().

Referenced by mathutils_array_parse(), and mathutils_array_parse_alloc().

◆ mathutils_dynstr_to_py()

PyObject* mathutils_dynstr_to_py ( struct DynStr ds)

◆ mathutils_int_array_parse()

int mathutils_int_array_parse ( int *  array,
int  array_dim,
PyObject *  value,
const char *  error_prefix 
)

Parse an sequence array_dim integers into array.

Definition at line 300 of file mathutils.c.

References size().

Referenced by mathutils_array_parse_alloc_vi(), and mathutils_array_parse_alloc_viseq().

◆ Mathutils_RegisterCallback()

uchar Mathutils_RegisterCallback ( Mathutils_Callback cb)

◆ PyDoc_STRVAR()

PyDoc_STRVAR ( M_Mathutils_doc  ,
"This module provides access to math operations.\n" "\n" ".. note::\n" "\n" "  Classes,
methods and attributes that accept vectors also accept other numeric  sequences,
\n" " such as  tuples,
lists.\n" "\n" "The :mod:`mathutils` module provides the following classes:\n" "\n" "- :class:`Color ,
\n" "- :class:`Euler`  ,
\n" "- :class:`Matrix`  ,
\n" "- :class:`Quaternion`  ,
\n" "- :class:`Vector`  ,
\n"   
)

◆ PyInit_mathutils()

PyMODINIT_FUNC PyInit_mathutils ( void  )

Variable Documentation

◆ BaseMathObject_freeze_doc

char BaseMathObject_freeze_doc[]
Initial value:
=
".. function:: freeze()\n"
"\n"
" Make this object immutable.\n"
"\n"
" After this the object can be hashed, used in dictionaries & sets.\n"
"\n"
" :return: An instance of this object.\n"

Definition at line 673 of file mathutils.c.

◆ BaseMathObject_is_frozen_doc

char BaseMathObject_is_frozen_doc[]
Initial value:
=
"True when this object has been frozen (read-only).\n\n:type: boolean"

Definition at line 659 of file mathutils.c.

◆ BaseMathObject_is_valid_doc

char BaseMathObject_is_valid_doc[]
Initial value:
=
"True when the owner of this data is valid.\n\n:type: boolean"

Definition at line 666 of file mathutils.c.

◆ BaseMathObject_is_wrapped_doc

char BaseMathObject_is_wrapped_doc[]
Initial value:
=
"True when this object wraps external data (read-only).\n\n:type: boolean"

Definition at line 652 of file mathutils.c.

◆ BaseMathObject_owner_doc

char BaseMathObject_owner_doc[] = "The item this is wrapping or None (read-only)."

Definition at line 645 of file mathutils.c.

◆ M_Mathutils_methods

struct PyMethodDef M_Mathutils_methods[]
static
Initial value:
= {
{NULL, NULL, 0, NULL},
}

Definition at line 705 of file mathutils.c.

◆ M_Mathutils_module_def

struct PyModuleDef M_Mathutils_module_def
static
Initial value:
= {
PyModuleDef_HEAD_INIT,
"mathutils",
M_Mathutils_doc,
0,
NULL,
NULL,
NULL,
NULL,
}
static struct PyMethodDef M_Mathutils_methods[]
Definition: mathutils.c:721

Definition at line 705 of file mathutils.c.

Referenced by PyInit_mathutils().

◆ mathutils_callbacks

Mathutils_Callback* mathutils_callbacks[MATHUTILS_TOT_CB] = {NULL}
static