Blender V4.3
mathutils.cc File Reference
#include <Python.h>
#include "mathutils.hh"
#include "BLI_math_matrix.h"
#include "BLI_math_rotation.h"
#include "BLI_utildefines.h"
#include "../generic/py_capi_utils.hh"
#include "../generic/python_utildefines.hh"
#include "BLI_dynstr.h"
#include "mathutils_geometry.hh"
#include "mathutils_interpolate.hh"
#include "mathutils_bvhtree.hh"
#include "mathutils_kdtree.hh"
#include "mathutils_noise.hh"

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_min, 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)
 
bool mathutils_array_parse_alloc_viseq (PyObject *value, const char *error_prefix, blender::Array< blender::Vector< int > > &r_data)
 
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 (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 *)
 
PyObject * BaseMathObject_is_wrapped_get (BaseMathObject *self, void *)
 
PyObject * BaseMathObject_is_frozen_get (BaseMathObject *self, void *)
 
PyObject * BaseMathObject_is_valid_get (BaseMathObject *self, void *)
 
PyObject * BaseMathObject_freeze (BaseMathObject *self)
 
int BaseMathObject_traverse (BaseMathObject *self, visitproc visit, void *arg)
 
int BaseMathObject_clear (BaseMathObject *self)
 
static bool BaseMathObject_is_tracked (BaseMathObject *self)
 
void BaseMathObject_dealloc (BaseMathObject *self)
 
int BaseMathObject_is_gc (BaseMathObject *self)
 
PyObject * _BaseMathObject_new_impl (PyTypeObject *root_type, PyTypeObject *base_type)
 
PyMODINIT_FUNC PyInit_mathutils ()
 

Variables

static Mathutils_Callbackmathutils_callbacks [MATHUTILS_TOT_CB] = {nullptr}
 
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 [] = "True when the owner of this data is valid.\n\n:type: bool"
 
char BaseMathObject_freeze_doc []
 
static PyMethodDef M_Mathutils_methods []
 
static PyModuleDef M_Mathutils_module_def
 

Macro Definition Documentation

◆ MATHUTILS_TOT_CB

#define MATHUTILS_TOT_CB   17

Definition at line 519 of file mathutils.cc.

Referenced by Mathutils_RegisterCallback().

◆ SIGNMASK

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

Definition at line 469 of file mathutils.cc.

Referenced by EXPP_FloatsAreEqual().

Function Documentation

◆ _BaseMathObject_CheckCallback()

int _BaseMathObject_CheckCallback ( BaseMathObject * self)

Definition at line 540 of file mathutils.cc.

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

◆ _BaseMathObject_new_impl()

PyObject * _BaseMathObject_new_impl ( PyTypeObject * root_type,
PyTypeObject * base_type )

Definition at line 716 of file mathutils.cc.

References BaseMathObject_is_tracked(), BLI_assert, and ELEM.

◆ _BaseMathObject_RaiseFrozenExc()

void _BaseMathObject_RaiseFrozenExc ( const BaseMathObject * self)

Definition at line 605 of file mathutils.cc.

References self.

◆ _BaseMathObject_RaiseNotFrozenExc()

void _BaseMathObject_RaiseNotFrozenExc ( const BaseMathObject * self)

Definition at line 610 of file mathutils.cc.

References self.

◆ _BaseMathObject_ReadCallback()

int _BaseMathObject_ReadCallback ( BaseMathObject * self)

Definition at line 549 of file mathutils.cc.

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

◆ _BaseMathObject_ReadIndexCallback()

int _BaseMathObject_ReadIndexCallback ( BaseMathObject * self,
int index )

Definition at line 577 of file mathutils.cc.

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

◆ _BaseMathObject_WriteCallback()

int _BaseMathObject_WriteCallback ( BaseMathObject * self)

Definition at line 564 of file mathutils.cc.

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

◆ _BaseMathObject_WriteIndexCallback()

int _BaseMathObject_WriteIndexCallback ( BaseMathObject * self,
int index )

Definition at line 591 of file mathutils.cc.

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

◆ BaseMathObject_clear()

int BaseMathObject_clear ( BaseMathObject * self)

Definition at line 671 of file mathutils.cc.

References self.

Referenced by BaseMathObject_dealloc().

◆ BaseMathObject_dealloc()

void BaseMathObject_dealloc ( BaseMathObject * self)

◆ BaseMathObject_freeze()

PyObject * BaseMathObject_freeze ( BaseMathObject * self)

Definition at line 653 of file mathutils.cc.

References BASE_MATH_FLAG_IS_FROZEN, BASE_MATH_FLAG_IS_WRAP, and self.

◆ BaseMathObject_is_frozen_get()

PyObject * BaseMathObject_is_frozen_get ( BaseMathObject * self,
void *  )

Definition at line 634 of file mathutils.cc.

References BASE_MATH_FLAG_IS_FROZEN, and self.

◆ BaseMathObject_is_gc()

int BaseMathObject_is_gc ( BaseMathObject * self)

Definition at line 711 of file mathutils.cc.

References self.

◆ BaseMathObject_is_tracked()

static bool BaseMathObject_is_tracked ( BaseMathObject * self)
static

Only to validate assumptions when debugging.

Definition at line 679 of file mathutils.cc.

References self.

Referenced by _BaseMathObject_new_impl(), and BaseMathObject_dealloc().

◆ BaseMathObject_is_valid_get()

PyObject * BaseMathObject_is_valid_get ( BaseMathObject * self,
void *  )

Definition at line 640 of file mathutils.cc.

References BaseMath_CheckCallback, and self.

◆ BaseMathObject_is_wrapped_get()

PyObject * BaseMathObject_is_wrapped_get ( BaseMathObject * self,
void *  )

Definition at line 627 of file mathutils.cc.

References BASE_MATH_FLAG_IS_WRAP, and self.

◆ BaseMathObject_owner_get()

PyObject * BaseMathObject_owner_get ( BaseMathObject * self,
void *  )

Definition at line 619 of file mathutils.cc.

References ret, and self.

◆ BaseMathObject_traverse()

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

Definition at line 665 of file mathutils.cc.

References self.

◆ EXPP_FloatsAreEqual()

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

Definition at line 471 of file mathutils.cc.

References BLI_assert, diff(), SIGNMASK, 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 * 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 69 of file mathutils.cc.

References len, mult(), 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 97 of file mathutils.cc.

References BaseMath_ReadCallback, CLAMP_MAX, ColorObject_Check, EulerObject_Check, flag, mathutils_array_parse_fast(), MU_ARRAY_SPILL, MU_ARRAY_ZERO, 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_cell(), M_Noise_cell_vector(), 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 )

◆ 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 336 of file mathutils.cc.

References mathutils_int_array_parse(), and size().

Referenced by M_Geometry_delaunay_2d_cdt().

◆ mathutils_array_parse_alloc_viseq()

bool mathutils_array_parse_alloc_viseq ( PyObject * value,
const char * error_prefix,
blender::Array< blender::Vector< int > > & r_data )

Parse sequence of variable-length sequences of integers and fill r_data with their values.

Definition at line 373 of file mathutils.cc.

References int, and mathutils_int_array_parse().

Referenced by M_Geometry_delaunay_2d_cdt().

◆ 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 41 of file mathutils.cc.

References size().

Referenced by mathutils_array_parse(), and mathutils_array_parse_alloc().

◆ mathutils_dynstr_to_py()

PyObject * mathutils_dynstr_to_py ( 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 301 of file mathutils.cc.

References size().

Referenced by mathutils_array_parse_alloc_vi(), and mathutils_array_parse_alloc_viseq().

◆ Mathutils_RegisterCallback()

◆ 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()

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 645 of file mathutils.cc.

◆ BaseMathObject_is_frozen_doc

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

Definition at line 632 of file mathutils.cc.

◆ BaseMathObject_is_valid_doc

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

Definition at line 639 of file mathutils.cc.

◆ BaseMathObject_is_wrapped_doc

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

Definition at line 625 of file mathutils.cc.

◆ BaseMathObject_owner_doc

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

Definition at line 618 of file mathutils.cc.

◆ M_Mathutils_methods

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

Definition at line 740 of file mathutils.cc.

◆ M_Mathutils_module_def

PyModuleDef M_Mathutils_module_def
static
Initial value:
= {
PyModuleDef_HEAD_INIT,
"mathutils",
M_Mathutils_doc,
0,
nullptr,
nullptr,
nullptr,
nullptr,
}
static PyMethodDef M_Mathutils_methods[]
Definition mathutils.cc:740

Definition at line 744 of file mathutils.cc.

Referenced by PyInit_mathutils().

◆ mathutils_callbacks